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

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan White <support@dmapps.us>2020-07-07 04:13:28 +0300
committerJonathan White <support@dmapps.us>2020-07-07 04:13:28 +0300
commit07659547ce6967e4b26e5ec981dcd1324ac8ff4c (patch)
treea3dd9f3bc9dd9a931ff2c10c85a4a482af3f7c90
parentdcca5aa0f0ee2f2b8685787c01f934cb2b506ef7 (diff)
parentcf95f5e72eafe6f4d9bb8136158b8e7285326395 (diff)
Release 2.6.02.6.0
Added - Custom Light and Dark themes [#4110, #4769, #4791, #4796, #4892, #4915] - Compact mode to use classic Group and Entry line height [#4910] - View menu to quickly switch themes, compact mode, and toggle UI elements [#4910] - Search for groups and scope search to matched groups [#4705] - Save Database Backup feature [#4550] - Sort entries by "natural order" and move lines up/down [#4357] - Option to launch KeePassXC on system startup/login [#4675] - Caps Lock warning on password input fields [#3646] - Add "Size" column to entry view [#4588] - Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305] - Password Generator: Define additional characters to choose from [#3876] - Reports: Database password health check (offline) [#3993] - Reports: HIBP online service to check for breached passwords [#4438] - Auto-Type: DateTime placeholders [#4409] - Browser: Show group name in results sent to browser extension [#4111] - Browser: Ability to define a custom browser location (macOS and Linux only) [#4148] - Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591] - CLI: `db-info` command [#4231] - CLI: Use wl-clipboard if xclip is not available (Linux) [#4323] - CLI: Incorporate xclip into snap builds [#4697] - SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545] - SSH Agent: Context menu actions to add/remove keys [#4290] Changed - Complete replacement of default database icons [#4699] - Complete replacement of application icons [#4066, #4161, #4203, #4411] - Complete rewrite of documentation and manpages using Asciidoctor [#4937] - Complete refactor of config files; separate between local and roaming [#4665] - Complete refactor of browser integration and proxy code [#4680] - Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843] - Significantly improve performance when saving and opening databases [#4309, #4833] - Remove read-only detection for database files [#4508] - Overhaul of password fields and password generator [#4367] - Replace instances of "Master Key" with "Database Credentials" [#4929] - Change settings checkboxes to positive phrasing for consistency [#4715] - Improve UX of using entry actions (focus fix) [#3893] - Set expiration time to Now when enabling entry expiration [#4406] - Always show "New Entry" in context menu [#4617] - Issue warning before adding large attachments [#4651] - Improve importing OPVault [#4630] - Improve AutoOpen capability [#3901, #4752] - Check for updates every 7 days even while still running [#4752] - Improve Windows installer UI/UX [#4675] - Improve config file handling of portable distribution [#4131, #4752] - macOS: Hide dock icon when application is hidden to tray [#4782] - Browser: Use unlock dialog to improve UX of opening a locked database [#3698] - Browser: Improve database and entry settings experience [#4392, #4591] - Browser: Improve confirm access dialog [#2143, #4660] - KeeShare: Improve monitoring file changes of shares [#4720] - CLI: Rename `create` command to `db-create` [#4231] - CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313] - CLI: Use stderr for help text and password prompts [#4086, #4623] - FdoSecrets: Display existing secret service process [#4128] Fixed - Fix changing focus around the main window using tab key [#4641] - Fix search field clearing while still using the application [#4368] - Improve search help widget displaying on macOS and Linux [#4236] - Return keyboard focus after editing an entry [#4287] - Reset database path after failed "Save As" [#4526] - Use SHA256 Digest for Windows code signing [#4129] - Improve handling of ccache when building [#4104, #4335] - macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909] - Auto-Type: Fix crash when performing on new entry [#4132] - Browser: Send legacy HTTP settings to recycle bin [#4589] - Browser: Fix merging browser keys [#4685] - CLI: Fix encoding when exporting database [#3921] - SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595] - FdoSecrets: Fix crash when editing settings before service is enabled [#4332]
-rw-r--r--.github/CONTRIBUTING.md2
-rw-r--r--.github/FUNDING.yml5
-rw-r--r--.github/ISSUE_TEMPLATE/bug-report.md40
-rw-r--r--.github/ISSUE_TEMPLATE/feature-request.md15
-rw-r--r--.github/ISSUE_TEMPLATE/release-preview-bug-report.md44
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md33
-rw-r--r--CHANGELOG.md76
-rw-r--r--CMakeLists.txt94
-rw-r--r--COPYING321
-rw-r--r--INSTALL.md11
-rw-r--r--LICENSE.BOOST-1.023
-rw-r--r--LICENSE.OFL96
-rw-r--r--README.md91
-rw-r--r--cmake/CLangFormat.cmake2
-rw-r--r--docs/CMakeLists.txt65
-rw-r--r--docs/GettingStarted.adoc34
-rw-r--r--docs/KEYBINDS.md35
-rw-r--r--docs/KeePassHTTP/KeePassXC-Accept-Button.pngbin32135 -> 0 bytes
-rw-r--r--docs/KeePassHTTP/KeePassXC-Confirm.pngbin18606 -> 0 bytes
-rw-r--r--docs/KeePassHTTP/KeePassXC-Connect.pngbin25412 -> 0 bytes
-rw-r--r--docs/KeeShare/AppSettings.pngbin42163 -> 0 bytes
-rw-r--r--docs/KeeShare/DatabaseSettings.pngbin27801 -> 0 bytes
-rw-r--r--docs/KeeShare/GroupSettings_Export.pngbin30784 -> 0 bytes
-rw-r--r--docs/KeeShare/GroupSettings_Import.pngbin30826 -> 0 bytes
-rw-r--r--docs/KeeShare/GroupSettings_Sync.pngbin30856 -> 0 bytes
-rw-r--r--docs/QUICKSTART.md137
-rw-r--r--docs/UserGuide.adoc37
-rw-r--r--docs/images/autotype_entry_sequences.pngbin0 -> 38080 bytes
-rw-r--r--docs/images/autotype_entrylevel.pngbin0 -> 106903 bytes
-rw-r--r--docs/images/autotype_selection_dialog.pngbin0 -> 32857 bytes
-rw-r--r--docs/images/autotype_settings.pngbin0 -> 35883 bytes
-rw-r--r--docs/images/browser_advanced_settings.pngbin0 -> 39269 bytes
-rw-r--r--docs/images/browser_confirm_access_dialog.pngbin0 -> 11419 bytes
-rw-r--r--docs/images/browser_database_settings.pngbin0 -> 33525 bytes
-rw-r--r--docs/images/browser_entry_settings.pngbin0 -> 35870 bytes
-rw-r--r--docs/images/browser_extension_association.pngbin0 -> 9629 bytes
-rw-r--r--docs/images/browser_extension_connect.pngbin0 -> 11110 bytes
-rw-r--r--docs/images/browser_extension_icons.pngbin0 -> 17983 bytes
-rw-r--r--docs/images/browser_extension_reload.pngbin0 -> 12317 bytes
-rw-r--r--docs/images/browser_fill_credentials.pngbin0 -> 23632 bytes
-rw-r--r--docs/images/browser_settings.pngbin0 -> 45998 bytes
-rw-r--r--docs/images/clone_entry.pngbin0 -> 94584 bytes
-rw-r--r--docs/images/clone_entry_dialog.pngbin0 -> 6707 bytes
-rw-r--r--docs/images/clone_entry_references.pngbin0 -> 31914 bytes
-rw-r--r--docs/images/compact_mode_comparison.pngbin0 -> 110039 bytes
-rw-r--r--docs/images/csv_import.pngbin0 -> 45359 bytes
-rw-r--r--docs/images/database_security.pngbin0 -> 27500 bytes
-rw-r--r--docs/images/database_security_credentials.pngbin0 -> 38859 bytes
-rw-r--r--docs/images/database_security_encryption.pngbin0 -> 30755 bytes
-rw-r--r--docs/images/database_security_encryption_advanced.pngbin0 -> 44235 bytes
-rw-r--r--docs/images/database_settings.pngbin0 -> 33631 bytes
-rw-r--r--docs/images/database_view.pngbin0 -> 56159 bytes
-rw-r--r--docs/images/edit_entry.pngbin0 -> 61390 bytes
-rw-r--r--docs/images/edit_entry_attachments.pngbin0 -> 17696 bytes
-rw-r--r--docs/images/edit_entry_attributes.pngbin0 -> 38434 bytes
-rw-r--r--docs/images/edit_entry_colors.pngbin0 -> 118238 bytes
-rw-r--r--docs/images/edit_entry_history.pngbin0 -> 38024 bytes
-rw-r--r--docs/images/edit_entry_icons.pngbin0 -> 119687 bytes
-rw-r--r--docs/images/edit_entry_properties.pngbin0 -> 31328 bytes
-rw-r--r--docs/images/export_database.pngbin0 -> 82145 bytes
-rw-r--r--docs/images/install_wizard_1.pngbin0 -> 59256 bytes
-rw-r--r--docs/images/install_wizard_2.pngbin0 -> 13754 bytes
-rw-r--r--docs/images/keeshare_application_settings.pngbin0 -> 82065 bytes
-rw-r--r--docs/images/keeshare_group_settings.pngbin0 -> 25754 bytes
-rw-r--r--docs/images/keeshare_shared_group.pngbin0 -> 68140 bytes
-rw-r--r--docs/images/kpxc_logo.pngbin0 -> 4391 bytes
-rw-r--r--docs/images/linux_store.pngbin0 -> 97121 bytes
-rw-r--r--docs/images/macos_install.pngbin0 -> 32193 bytes
-rw-r--r--docs/images/main_interface.pngbin0 -> 119794 bytes
-rw-r--r--docs/images/new_db_wizard_1.pngbin0 -> 40813 bytes
-rw-r--r--docs/images/new_db_wizard_2.pngbin0 -> 51273 bytes
-rw-r--r--docs/images/new_db_wizard_3.pngbin0 -> 43105 bytes
-rw-r--r--docs/images/open_database.pngbin0 -> 28033 bytes
-rw-r--r--docs/images/passphrase_generator.pngbin0 -> 23753 bytes
-rw-r--r--docs/images/password_generator.pngbin0 -> 23830 bytes
-rw-r--r--docs/images/password_generator_advanced.pngbin0 -> 29973 bytes
-rw-r--r--docs/images/save_database_backup.pngbin0 -> 17080 bytes
-rw-r--r--docs/images/sshagent_application_settings.pngbin0 -> 36859 bytes
-rw-r--r--docs/images/sshagent_context_menu.pngbin0 -> 49439 bytes
-rw-r--r--docs/images/sshagent_entry_settings.pngbin0 -> 56080 bytes
-rw-r--r--docs/images/sshagent_puttygen.pngbin0 -> 39181 bytes
-rw-r--r--docs/images/theme_comparison.pngbin0 -> 170993 bytes
-rw-r--r--docs/images/theme_selection.pngbin0 -> 14976 bytes
-rw-r--r--docs/images/toolbar.pngbin0 -> 12789 bytes
-rw-r--r--docs/images/uac_dialog.pngbin0 -> 27423 bytes
-rw-r--r--docs/images/unlock_database.pngbin0 -> 23801 bytes
-rw-r--r--docs/images/welcome_screen.pngbin0 -> 26576 bytes
-rw-r--r--docs/man/keepassxc-cli.1.adoc282
-rw-r--r--docs/man/keepassxc.1.adoc41
-rw-r--r--docs/styles/dark.css541
-rw-r--r--docs/styles/pdf_theme.yml30
-rw-r--r--docs/topics/.sharedheader7
-rw-r--r--docs/topics/AutoType.adoc84
-rw-r--r--docs/topics/BrowserPlugin.adoc108
-rw-r--r--docs/topics/DatabaseOperations.adoc296
-rw-r--r--docs/topics/Disclaimers.adoc32
-rw-r--r--docs/topics/DownloadInstall.adoc60
-rw-r--r--docs/topics/ImportExport.adoc64
-rw-r--r--docs/topics/KeeShare.adoc51
-rw-r--r--docs/topics/KeyboardShortcuts.adoc40
-rw-r--r--docs/topics/PasswordGenerator.adoc44
-rw-r--r--docs/topics/SSHAgent.adoc125
-rw-r--r--docs/topics/UserInterface.adoc51
-rw-r--r--docs/topics/Welcome.adoc49
-rwxr-xr-xrelease-tool41
-rw-r--r--share/CMakeLists.txt113
-rw-r--r--share/crushpng.sh8
-rw-r--r--share/demo.kdbxbin25109 -> 79061 bytes
-rw-r--r--share/docs/KeePassXC_GettingStarted.pdfbin1409007 -> 0 bytes
-rw-r--r--share/docs/KeePassXC_UserGuide.pdfbin2921944 -> 0 bytes
-rw-r--r--share/docs/man/keepassxc-cli.1255
-rw-r--r--share/docs/man/keepassxc.139
-rw-r--r--share/icons/application/128x128/apps/keepassxc-dark.pngbin5053 -> 0 bytes
-rw-r--r--share/icons/application/128x128/apps/keepassxc-locked.pngbin6965 -> 0 bytes
-rw-r--r--share/icons/application/128x128/apps/keepassxc-unlocked.pngbin7594 -> 0 bytes
-rw-r--r--share/icons/application/128x128/apps/keepassxc.pngbin7594 -> 0 bytes
-rw-r--r--share/icons/application/128x128/apps/preferences-system-network-sharing.pngbin13769 -> 0 bytes
-rw-r--r--share/icons/application/128x128/mimetypes/application-x-keepassxc.pngbin6605 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/application-exit.pngbin851 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/auto-type.pngbin860 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/configure.pngbin606 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/database-change-key.pngbin646 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/database-lock.pngbin454 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/document-close.pngbin613 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/document-edit.pngbin665 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/document-new.pngbin509 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/document-open.pngbin649 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/document-save-as.pngbin773 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/document-save.pngbin500 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/edit-clear-locationbar-ltr.pngbin804 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/edit-clear-locationbar-rtl.pngbin571 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/entry-clone.pngbin735 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/entry-delete.pngbin713 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/entry-edit.pngbin797 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/entry-new.pngbin832 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/favicon-download.pngbin754 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/group-delete.pngbin627 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/group-edit.pngbin608 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/group-empty-trash.pngbin880 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/group-new.pngbin601 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/help-about.pngbin704 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/message-close.pngbin301 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/paperclip.pngbin478 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/password-copy.pngbin661 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/password-generate.pngbin903 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/password-generator.pngbin444 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/password-show-off.pngbin738 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/password-show-on.pngbin763 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/system-help.pngbin866 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/system-search.pngbin740 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/url-copy.pngbin801 -> 0 bytes
-rw-r--r--share/icons/application/16x16/actions/username-copy.pngbin763 -> 0 bytes
-rw-r--r--share/icons/application/16x16/apps/keepassxc-dark.pngbin492 -> 0 bytes
-rw-r--r--share/icons/application/16x16/apps/keepassxc-locked.pngbin718 -> 0 bytes
-rw-r--r--share/icons/application/16x16/apps/keepassxc-unlocked.pngbin715 -> 0 bytes
-rw-r--r--share/icons/application/16x16/apps/keepassxc.pngbin715 -> 0 bytes
-rw-r--r--share/icons/application/16x16/mimetypes/application-x-keepassxc.pngbin627 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/auto-type.pngbin1252 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/chronometer.pngbin1579 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/database-change-key.pngbin984 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/database-lock.pngbin583 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/dialog-close.pngbin1169 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/dialog-ok.pngbin702 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/document-new.pngbin1213 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/document-open.pngbin1125 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/document-save.pngbin820 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/entry-clone.pngbin1157 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/entry-delete.pngbin1114 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/entry-edit.pngbin1188 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/entry-new.pngbin1324 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/favicon-download.pngbin1047 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/group-empty-trash.pngbin1297 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/help-about.pngbin1113 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/message-close.pngbin384 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/paperclip.pngbin574 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/password-copy.pngbin960 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/password-generate.pngbin1369 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/password-generator.pngbin620 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/system-help.pngbin1186 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/system-search.pngbin1302 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/url-copy.pngbin1221 -> 0 bytes
-rw-r--r--share/icons/application/22x22/actions/username-copy.pngbin1099 -> 0 bytes
-rw-r--r--share/icons/application/22x22/mimetypes/application-x-keepassxc.pngbin898 -> 0 bytes
-rw-r--r--share/icons/application/22x22/status/dialog-error.pngbin968 -> 0 bytes
-rw-r--r--share/icons/application/22x22/status/dialog-information.pngbin1084 -> 0 bytes
-rw-r--r--share/icons/application/22x22/status/dialog-warning.pngbin779 -> 0 bytes
-rw-r--r--share/icons/application/24x24/apps/keepassxc-dark.pngbin792 -> 0 bytes
-rw-r--r--share/icons/application/24x24/apps/keepassxc-locked.pngbin1163 -> 0 bytes
-rw-r--r--share/icons/application/24x24/apps/keepassxc-unlocked.pngbin1160 -> 0 bytes
-rw-r--r--share/icons/application/24x24/apps/keepassxc.pngbin1160 -> 0 bytes
-rw-r--r--share/icons/application/256x256/apps/keepassxc-dark.pngbin11605 -> 0 bytes
-rw-r--r--share/icons/application/256x256/apps/keepassxc-locked.pngbin15385 -> 0 bytes
-rw-r--r--share/icons/application/256x256/apps/keepassxc-unlocked.pngbin16827 -> 0 bytes
-rw-r--r--share/icons/application/256x256/apps/keepassxc.pngbin16827 -> 7667 bytes
-rw-r--r--share/icons/application/32x32/actions/application-exit.pngbin1804 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/auto-type.pngbin1896 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/chronometer.pngbin7142 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/configure.pngbin1458 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/database-change-key.pngbin1627 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/database-lock.pngbin1090 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/dialog-close.pngbin2054 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/dialog-ok.pngbin1246 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/document-close.pngbin1592 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/document-edit.pngbin1802 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/document-new.pngbin1470 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/document-open.pngbin1798 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/document-properties.pngbin1342 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/document-save.pngbin1299 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/edit-clear-locationbar-ltr.pngbin1935 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/edit-clear-locationbar-rtl.pngbin1340 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/entry-clone.pngbin1949 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/entry-delete.pngbin2156 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/entry-edit.pngbin2021 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/entry-new.pngbin2256 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/favicon-download.pngbin1591 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/group-empty-trash.pngbin2162 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/help-about.pngbin1839 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/key-enter.pngbin760 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/paperclip.pngbin1014 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/password-copy.pngbin1431 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/password-generate.pngbin2457 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/password-generator.pngbin1666 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/password-show-off.pngbin1849 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/password-show-on.pngbin2089 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/statistics.pngbin1323 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/system-help.pngbin2141 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/system-search.pngbin2023 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/url-copy.pngbin2002 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/username-copy.pngbin1722 -> 0 bytes
-rw-r--r--share/icons/application/32x32/actions/view-history.pngbin1566 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/internet-web-browser.pngbin1559 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/keepassxc-dark.pngbin1063 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/keepassxc-locked.pngbin1574 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/keepassxc-unlocked.pngbin1591 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/keepassxc.pngbin1591 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/preferences-desktop-icons.pngbin2264 -> 0 bytes
-rw-r--r--share/icons/application/32x32/apps/utilities-terminal.pngbin999 -> 0 bytes
-rw-r--r--share/icons/application/32x32/categories/preferences-other.pngbin1997 -> 0 bytes
-rw-r--r--share/icons/application/32x32/mimetypes/application-x-keepassxc.pngbin1370 -> 0 bytes
-rw-r--r--share/icons/application/32x32/status/security-high.pngbin1625 -> 0 bytes
-rw-r--r--share/icons/application/48x48/apps/keepassxc-dark.pngbin1661 -> 0 bytes
-rw-r--r--share/icons/application/48x48/apps/keepassxc-locked.pngbin2398 -> 0 bytes
-rw-r--r--share/icons/application/48x48/apps/keepassxc-unlocked.pngbin2440 -> 0 bytes
-rw-r--r--share/icons/application/48x48/apps/keepassxc.pngbin2440 -> 0 bytes
-rw-r--r--share/icons/application/64x64/apps/keepassxc-dark.pngbin2394 -> 0 bytes
-rw-r--r--share/icons/application/64x64/apps/keepassxc-locked.pngbin3321 -> 0 bytes
-rw-r--r--share/icons/application/64x64/apps/keepassxc-unlocked.pngbin3458 -> 0 bytes
-rw-r--r--share/icons/application/64x64/apps/keepassxc.pngbin3458 -> 0 bytes
-rw-r--r--share/icons/application/64x64/mimetypes/application-x-keepassxc.pngbin3122 -> 0 bytes
-rw-r--r--share/icons/application/index.theme45
-rw-r--r--share/icons/application/scalable/actions/application-exit.svg1
-rw-r--r--share/icons/application/scalable/actions/auto-type.svg1
-rw-r--r--share/icons/application/scalable/actions/bugreport.svg1
-rw-r--r--share/icons/application/scalable/actions/chronometer.svg1
-rw-r--r--share/icons/application/scalable/actions/clipboard-text.svg1
-rw-r--r--share/icons/application/scalable/actions/configure.svg1
-rw-r--r--share/icons/application/scalable/actions/database-change-key.svg1
-rw-r--r--share/icons/application/scalable/actions/database-lock.svg1
-rw-r--r--share/icons/application/scalable/actions/database-merge.svg1
-rw-r--r--share/icons/application/scalable/actions/dialog-close.svg1
-rw-r--r--share/icons/application/scalable/actions/dialog-ok.svg1
-rw-r--r--share/icons/application/scalable/actions/document-close.svg1
-rw-r--r--share/icons/application/scalable/actions/document-edit.svg1
-rw-r--r--share/icons/application/scalable/actions/document-export.svg1
-rw-r--r--share/icons/application/scalable/actions/document-import.svg1
-rw-r--r--share/icons/application/scalable/actions/document-new.svg1
-rw-r--r--share/icons/application/scalable/actions/document-open-recent.svg1
-rw-r--r--share/icons/application/scalable/actions/document-open.svg1
-rw-r--r--share/icons/application/scalable/actions/document-properties.svg1
-rw-r--r--share/icons/application/scalable/actions/document-save-as.svg1
-rw-r--r--share/icons/application/scalable/actions/document-save-copy.svg1
-rw-r--r--share/icons/application/scalable/actions/document-save.svg1
-rw-r--r--share/icons/application/scalable/actions/donate.svg1
-rw-r--r--share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg1
-rw-r--r--share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg1
-rw-r--r--share/icons/application/scalable/actions/entry-clone.svg1
-rw-r--r--share/icons/application/scalable/actions/entry-delete.svg1
-rw-r--r--share/icons/application/scalable/actions/entry-edit.svg1
-rw-r--r--share/icons/application/scalable/actions/entry-new.svg1
-rw-r--r--share/icons/application/scalable/actions/favicon-download.svg1
-rw-r--r--share/icons/application/scalable/actions/getting-started.svg1
-rw-r--r--share/icons/application/scalable/actions/group-delete.svg1
-rw-r--r--share/icons/application/scalable/actions/group-edit.svg1
-rw-r--r--share/icons/application/scalable/actions/group-empty-trash.svg1
-rw-r--r--share/icons/application/scalable/actions/group-new.svg1
-rw-r--r--share/icons/application/scalable/actions/health.svg1
-rw-r--r--share/icons/application/scalable/actions/help-about.svg1
-rw-r--r--share/icons/application/scalable/actions/hibp.svg1
-rw-r--r--share/icons/application/scalable/actions/key-enter.svg1
-rw-r--r--share/icons/application/scalable/actions/keyboard-shortcuts.svg1
-rw-r--r--share/icons/application/scalable/actions/message-close.svg1
-rw-r--r--share/icons/application/scalable/actions/move-down.svg1
-rw-r--r--share/icons/application/scalable/actions/move-up.svg1
-rw-r--r--share/icons/application/scalable/actions/object-locked.svg15
-rw-r--r--share/icons/application/scalable/actions/object-unlocked.svg16
-rw-r--r--share/icons/application/scalable/actions/paperclip.svg1
-rw-r--r--share/icons/application/scalable/actions/password-copy.svg1
-rw-r--r--share/icons/application/scalable/actions/password-generate.svg1
-rw-r--r--share/icons/application/scalable/actions/password-generator.svg1
-rw-r--r--share/icons/application/scalable/actions/password-show-off.svg1
-rw-r--r--share/icons/application/scalable/actions/password-show-on.svg1
-rw-r--r--share/icons/application/scalable/actions/refresh.svg1
-rw-r--r--share/icons/application/scalable/actions/reports-exclude.svg1
-rw-r--r--share/icons/application/scalable/actions/reports.svg1
-rw-r--r--share/icons/application/scalable/actions/sort-alphabetical-ascending.svg1
-rw-r--r--share/icons/application/scalable/actions/sort-alphabetical-descending.svg1
-rw-r--r--share/icons/application/scalable/actions/statistics.svg1
-rw-r--r--share/icons/application/scalable/actions/system-help.svg1
-rw-r--r--share/icons/application/scalable/actions/system-search.svg1
-rw-r--r--share/icons/application/scalable/actions/system-software-update.svg1
-rw-r--r--share/icons/application/scalable/actions/url-copy.svg1
-rw-r--r--share/icons/application/scalable/actions/user-guide.svg1
-rw-r--r--share/icons/application/scalable/actions/username-copy.svg1
-rw-r--r--share/icons/application/scalable/actions/view-history.svg1
-rw-r--r--share/icons/application/scalable/actions/web.svg1
-rw-r--r--share/icons/application/scalable/apps/freedesktop.svg93
-rw-r--r--share/icons/application/scalable/apps/internet-web-browser.svg1
-rw-r--r--share/icons/application/scalable/apps/keepassxc-dark.svg77
-rw-r--r--share/icons/application/scalable/apps/keepassxc-locked.svg98
-rw-r--r--share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg1
-rw-r--r--share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg1
-rw-r--r--share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg1
-rw-r--r--share/icons/application/scalable/apps/keepassxc-monochrome-light.svg1
-rw-r--r--share/icons/application/scalable/apps/keepassxc-unlocked.svg78
-rw-r--r--share/icons/application/scalable/apps/keepassxc.svg78
-rw-r--r--share/icons/application/scalable/apps/preferences-desktop-icons.svg1
-rw-r--r--share/icons/application/scalable/apps/preferences-system-network-sharing.svg1
-rw-r--r--share/icons/application/scalable/apps/utilities-terminal.svg1
-rw-r--r--share/icons/application/scalable/categories/preferences-other.svg1
-rw-r--r--share/icons/application/scalable/status/dialog-error.svg1
-rw-r--r--share/icons/application/scalable/status/dialog-information.svg1
-rw-r--r--share/icons/application/scalable/status/dialog-warning.svg1
-rw-r--r--share/icons/application/scalable/status/security-high.svg1
-rw-r--r--share/icons/badges/0_ShareActive.svg1
-rw-r--r--share/icons/badges/1_ShareInactive.svg1
-rw-r--r--share/icons/badges/2_Expired.svg1
-rw-r--r--share/icons/database/C00_Password.pngbin808 -> 0 bytes
-rw-r--r--share/icons/database/C00_Password.svg1
-rw-r--r--share/icons/database/C01_Package_Network.pngbin985 -> 0 bytes
-rw-r--r--share/icons/database/C01_Package_Network.svg1
-rw-r--r--share/icons/database/C02_MessageBox_Warning.pngbin805 -> 0 bytes
-rw-r--r--share/icons/database/C02_MessageBox_Warning.svg1
-rw-r--r--share/icons/database/C03_Server.pngbin810 -> 0 bytes
-rw-r--r--share/icons/database/C03_Server.svg1
-rw-r--r--share/icons/database/C04_Klipper.pngbin823 -> 0 bytes
-rw-r--r--share/icons/database/C04_Klipper.svg1
-rw-r--r--share/icons/database/C05_Edu_Languages.pngbin919 -> 0 bytes
-rw-r--r--share/icons/database/C05_Edu_Languages.svg1
-rw-r--r--share/icons/database/C06_KCMDF.pngbin801 -> 0 bytes
-rw-r--r--share/icons/database/C06_KCMDF.svg1
-rw-r--r--share/icons/database/C07_Kate.pngbin926 -> 0 bytes
-rw-r--r--share/icons/database/C07_Kate.svg1
-rw-r--r--share/icons/database/C08_Socket.pngbin992 -> 0 bytes
-rw-r--r--share/icons/database/C08_Socket.svg1
-rw-r--r--share/icons/database/C09_Identity.pngbin688 -> 0 bytes
-rw-r--r--share/icons/database/C09_Identity.svg1
-rw-r--r--share/icons/database/C10_Kontact.pngbin902 -> 0 bytes
-rw-r--r--share/icons/database/C10_Kontact.svg1
-rw-r--r--share/icons/database/C11_Camera.pngbin754 -> 0 bytes
-rw-r--r--share/icons/database/C11_Camera.svg1
-rw-r--r--share/icons/database/C12_IRKickFlash.pngbin950 -> 0 bytes
-rw-r--r--share/icons/database/C12_IRKickFlash.svg1
-rw-r--r--share/icons/database/C13_KGPG_Key3.pngbin821 -> 0 bytes
-rw-r--r--share/icons/database/C13_KGPG_Key3.svg1
-rw-r--r--share/icons/database/C14_Laptop_Power.pngbin816 -> 0 bytes
-rw-r--r--share/icons/database/C14_Laptop_Power.svg1
-rw-r--r--share/icons/database/C15_Scanner.pngbin955 -> 0 bytes
-rw-r--r--share/icons/database/C15_Scanner.svg1
-rw-r--r--share/icons/database/C16_Mozilla_Firebird.pngbin891 -> 0 bytes
-rw-r--r--share/icons/database/C16_Mozilla_Firebird.svg1
-rw-r--r--share/icons/database/C17_CDROM_Unmount.pngbin920 -> 0 bytes
-rw-r--r--share/icons/database/C17_CDROM_Unmount.svg1
-rw-r--r--share/icons/database/C18_Display.pngbin743 -> 0 bytes
-rw-r--r--share/icons/database/C18_Display.svg1
-rw-r--r--share/icons/database/C19_Mail_Generic.pngbin971 -> 0 bytes
-rw-r--r--share/icons/database/C19_Mail_Generic.svg1
-rw-r--r--share/icons/database/C20_Misc.pngbin914 -> 0 bytes
-rw-r--r--share/icons/database/C20_Misc.svg1
-rw-r--r--share/icons/database/C21_KOrganizer.pngbin930 -> 0 bytes
-rw-r--r--share/icons/database/C21_KOrganizer.svg1
-rw-r--r--share/icons/database/C22_ASCII.pngbin358 -> 0 bytes
-rw-r--r--share/icons/database/C22_ASCII.svg1
-rw-r--r--share/icons/database/C23_Icons.pngbin623 -> 0 bytes
-rw-r--r--share/icons/database/C23_Icons.svg1
-rw-r--r--share/icons/database/C24_Connect_Established.pngbin1012 -> 0 bytes
-rw-r--r--share/icons/database/C24_Connect_Established.svg1
-rw-r--r--share/icons/database/C25_Folder_Mail.pngbin709 -> 0 bytes
-rw-r--r--share/icons/database/C25_Folder_Mail.svg1
-rw-r--r--share/icons/database/C26_FileSave.pngbin691 -> 0 bytes
-rw-r--r--share/icons/database/C26_FileSave.svg1
-rw-r--r--share/icons/database/C27_NFS_Unmount.pngbin887 -> 0 bytes
-rw-r--r--share/icons/database/C27_NFS_Unmount.svg1
-rw-r--r--share/icons/database/C28_QuickTime.pngbin764 -> 0 bytes
-rw-r--r--share/icons/database/C28_QuickTime.svg1
-rw-r--r--share/icons/database/C29_KGPG_Term.pngbin751 -> 0 bytes
-rw-r--r--share/icons/database/C29_KGPG_Term.svg1
-rw-r--r--share/icons/database/C30_Konsole.pngbin826 -> 0 bytes
-rw-r--r--share/icons/database/C30_Konsole.svg1
-rw-r--r--share/icons/database/C31_FilePrint.pngbin875 -> 0 bytes
-rw-r--r--share/icons/database/C31_FilePrint.svg1
-rw-r--r--share/icons/database/C32_FSView.pngbin721 -> 0 bytes
-rw-r--r--share/icons/database/C32_FSView.svg1
-rw-r--r--share/icons/database/C33_Run.pngbin836 -> 0 bytes
-rw-r--r--share/icons/database/C33_Run.svg1
-rw-r--r--share/icons/database/C34_Configure.pngbin828 -> 0 bytes
-rw-r--r--share/icons/database/C34_Configure.svg1
-rw-r--r--share/icons/database/C35_KRFB.pngbin1021 -> 0 bytes
-rw-r--r--share/icons/database/C35_KRFB.svg1
-rw-r--r--share/icons/database/C36_Ark.pngbin929 -> 0 bytes
-rw-r--r--share/icons/database/C36_Ark.svg1
-rw-r--r--share/icons/database/C37_KPercentage.pngbin980 -> 0 bytes
-rw-r--r--share/icons/database/C37_KPercentage.svg1
-rw-r--r--share/icons/database/C38_Samba_Unmount.pngbin999 -> 0 bytes
-rw-r--r--share/icons/database/C38_Samba_Unmount.svg1
-rw-r--r--share/icons/database/C39_History.pngbin963 -> 0 bytes
-rw-r--r--share/icons/database/C39_History.svg1
-rw-r--r--share/icons/database/C40_Mail_Find.pngbin1018 -> 0 bytes
-rw-r--r--share/icons/database/C40_Mail_Find.svg1
-rw-r--r--share/icons/database/C41_VectorGfx.pngbin743 -> 0 bytes
-rw-r--r--share/icons/database/C41_VectorGfx.svg1
-rw-r--r--share/icons/database/C42_KCMMemory.pngbin752 -> 0 bytes
-rw-r--r--share/icons/database/C42_KCMMemory.svg1
-rw-r--r--share/icons/database/C43_EditTrash.pngbin880 -> 0 bytes
-rw-r--r--share/icons/database/C43_EditTrash.svg1
-rw-r--r--share/icons/database/C44_KNotes.pngbin786 -> 0 bytes
-rw-r--r--share/icons/database/C44_KNotes.svg1
-rw-r--r--share/icons/database/C45_Cancel.pngbin998 -> 0 bytes
-rw-r--r--share/icons/database/C45_Cancel.svg1
-rw-r--r--share/icons/database/C46_Help.pngbin963 -> 0 bytes
-rw-r--r--share/icons/database/C46_Help.svg1
-rw-r--r--share/icons/database/C47_KPackage.pngbin858 -> 0 bytes
-rw-r--r--share/icons/database/C47_KPackage.svg1
-rw-r--r--share/icons/database/C48_Folder.pngbin484 -> 0 bytes
-rw-r--r--share/icons/database/C48_Folder.svg1
-rw-r--r--share/icons/database/C49_Folder_Blue_Open.pngbin496 -> 0 bytes
-rw-r--r--share/icons/database/C49_Folder_Blue_Open.svg1
-rw-r--r--share/icons/database/C50_Folder_Tar.pngbin719 -> 0 bytes
-rw-r--r--share/icons/database/C50_Folder_Tar.svg1
-rw-r--r--share/icons/database/C51_Decrypted.pngbin826 -> 0 bytes
-rw-r--r--share/icons/database/C51_Decrypted.svg1
-rw-r--r--share/icons/database/C52_Encrypted.pngbin730 -> 0 bytes
-rw-r--r--share/icons/database/C52_Encrypted.svg1
-rw-r--r--share/icons/database/C53_Apply.pngbin759 -> 0 bytes
-rw-r--r--share/icons/database/C53_Apply.svg1
-rw-r--r--share/icons/database/C54_Signature.pngbin673 -> 0 bytes
-rw-r--r--share/icons/database/C54_Signature.svg1
-rw-r--r--share/icons/database/C55_Thumbnail.pngbin740 -> 0 bytes
-rw-r--r--share/icons/database/C55_Thumbnail.svg1
-rw-r--r--share/icons/database/C56_KAddressBook.pngbin834 -> 0 bytes
-rw-r--r--share/icons/database/C56_KAddressBook.svg1
-rw-r--r--share/icons/database/C57_View_Text.pngbin735 -> 0 bytes
-rw-r--r--share/icons/database/C57_View_Text.svg1
-rw-r--r--share/icons/database/C58_KGPG.pngbin939 -> 0 bytes
-rw-r--r--share/icons/database/C58_KGPG.svg1
-rw-r--r--share/icons/database/C58_KPGP.svg1
-rw-r--r--share/icons/database/C59_Package_Development.pngbin847 -> 0 bytes
-rw-r--r--share/icons/database/C59_Package_Development.svg1
-rw-r--r--share/icons/database/C60_KFM_Home.pngbin869 -> 0 bytes
-rw-r--r--share/icons/database/C60_KFM_Home.svg1
-rw-r--r--share/icons/database/C61_Services.pngbin862 -> 0 bytes
-rw-r--r--share/icons/database/C61_Services.svg1
-rw-r--r--share/icons/database/C62_Tux.pngbin530 -> 0 bytes
-rw-r--r--share/icons/database/C62_Tux.svg1
-rw-r--r--share/icons/database/C63_Feather.pngbin406 -> 0 bytes
-rw-r--r--share/icons/database/C63_Feather.svg1
-rw-r--r--share/icons/database/C64_Apple.pngbin478 -> 0 bytes
-rw-r--r--share/icons/database/C64_Apple.svg1
-rw-r--r--share/icons/database/C65_W.pngbin452 -> 0 bytes
-rw-r--r--share/icons/database/C65_W.svg1
-rw-r--r--share/icons/database/C66_Money.pngbin285 -> 0 bytes
-rw-r--r--share/icons/database/C66_Money.svg1
-rw-r--r--share/icons/database/C67_Certificate.pngbin512 -> 0 bytes
-rw-r--r--share/icons/database/C67_Certificate.svg1
-rw-r--r--share/icons/database/C68_BlackBerry.pngbin516 -> 0 bytes
-rw-r--r--share/icons/database/C68_BlackBerry.svg1
-rw-r--r--share/icons/icons.qrc170
-rw-r--r--share/icons/minify.sh21
-rw-r--r--share/icons/svg/application-exit.svg2
-rw-r--r--share/icons/svg/application-x-keepassxc.svg2
-rw-r--r--share/icons/svg/auto-type.pngbin7352 -> 0 bytes
-rw-r--r--share/icons/svg/configure.svg2
-rw-r--r--share/icons/svg/dialog-close.svg238
-rw-r--r--share/icons/svg/dialog-error.svg474
-rw-r--r--share/icons/svg/dialog-information.svg370
-rw-r--r--share/icons/svg/dialog-ok.svg390
-rw-r--r--share/icons/svg/dialog-warning.svg383
-rw-r--r--share/icons/svg/document-close.svg426
-rw-r--r--share/icons/svg/document-edit.svg634
-rw-r--r--share/icons/svg/document-new.svg477
-rw-r--r--share/icons/svg/document-open.svg2
-rw-r--r--share/icons/svg/document-properties.svg601
-rw-r--r--share/icons/svg/document-save-as.svg2
-rw-r--r--share/icons/svg/document-save.svg2
-rw-r--r--share/icons/svg/edit-clear-locationbar-ltr.svg391
-rw-r--r--share/icons/svg/edit-clear-locationbar-rtl.svg380
-rw-r--r--share/icons/svg/internet-web-browser.svg4
-rw-r--r--share/icons/svg/key-enter.svg265
-rw-r--r--share/icons/svg/message-close.svg41
-rw-r--r--share/icons/svg/paperclip.svg108
-rw-r--r--share/icons/svg/password-copy.svg2
-rw-r--r--share/icons/svg/password-generator.svg568
-rw-r--r--share/icons/svg/preferences-desktop-icons.svg14
-rw-r--r--share/icons/svg/preferences-other.svg1012
-rw-r--r--share/icons/svg/security-high.svg380
-rw-r--r--share/icons/svg/system-search.svg2
-rw-r--r--share/icons/svg/url-copy.svg2
-rw-r--r--share/icons/svg/username-copy.svg2
-rw-r--r--share/icons/svg/utilities-terminal.svg1517
-rw-r--r--share/icons/svg/view-history.svg753
-rw-r--r--share/keepassxc.ini10
-rw-r--r--share/linux/org.keepassxc.KeePassXC.appdata.xml5
-rw-r--r--share/translations/keepassx_ar.ts2574
-rw-r--r--share/translations/keepassx_bg.ts (renamed from share/translations/keepassx_en_GB.ts)4511
-rw-r--r--share/translations/keepassx_bn.ts5445
-rw-r--r--share/translations/keepassx_ca.ts2794
-rw-r--r--share/translations/keepassx_cs.ts2762
-rw-r--r--share/translations/keepassx_da.ts2653
-rw-r--r--share/translations/keepassx_de.ts2916
-rw-r--r--share/translations/keepassx_el.ts5428
-rw-r--r--share/translations/keepassx_en.ts2501
-rw-r--r--share/translations/keepassx_en_US.ts2759
-rw-r--r--share/translations/keepassx_es.ts3478
-rw-r--r--share/translations/keepassx_et.ts3181
-rw-r--r--share/translations/keepassx_eu.ts5424
-rw-r--r--share/translations/keepassx_fi.ts2798
-rw-r--r--share/translations/keepassx_fr.ts4175
-rw-r--r--share/translations/keepassx_he.ts5423
-rw-r--r--share/translations/keepassx_hr_HR.ts5423
-rw-r--r--share/translations/keepassx_hu.ts2794
-rw-r--r--share/translations/keepassx_id.ts3405
-rw-r--r--share/translations/keepassx_is_IS.ts5423
-rw-r--r--share/translations/keepassx_it.ts2789
-rw-r--r--share/translations/keepassx_ja.ts2851
-rw-r--r--share/translations/keepassx_kk.ts5424
-rw-r--r--share/translations/keepassx_ko.ts2751
-rw-r--r--share/translations/keepassx_la.ts5427
-rw-r--r--share/translations/keepassx_lt.ts2582
-rw-r--r--share/translations/keepassx_lv.ts5423
-rw-r--r--share/translations/keepassx_nb.ts2666
-rw-r--r--share/translations/keepassx_nl_NL.ts3204
-rw-r--r--share/translations/keepassx_pl.ts2847
-rw-r--r--share/translations/keepassx_pt.ts2739
-rw-r--r--share/translations/keepassx_pt_BR.ts3099
-rw-r--r--share/translations/keepassx_pt_PT.ts2753
-rw-r--r--share/translations/keepassx_ro.ts2815
-rw-r--r--share/translations/keepassx_ru.ts3266
-rw-r--r--share/translations/keepassx_sk.ts2932
-rw-r--r--share/translations/keepassx_sl_SI.ts5424
-rw-r--r--share/translations/keepassx_sr.ts5430
-rw-r--r--share/translations/keepassx_sv.ts2744
-rw-r--r--share/translations/keepassx_th.ts3200
-rw-r--r--share/translations/keepassx_tr.ts3070
-rw-r--r--share/translations/keepassx_uk.ts2876
-rw-r--r--share/translations/keepassx_zh_CN.ts3250
-rw-r--r--share/translations/keepassx_zh_TW.ts3448
-rwxr-xr-xshare/translations/update.sh7
-rw-r--r--share/windows/KPXC_ExitDlg.wxs31
-rw-r--r--share/windows/KPXC_InstallDir.wxs81
-rw-r--r--share/windows/KPXC_InstallDirDlg.wxs30
-rw-r--r--share/windows/create-ico.sh11
-rw-r--r--share/windows/wix-template.xml77
-rw-r--r--share/wizard/background-pixmap.pngbin45338 -> 41772 bytes
-rw-r--r--share/wizard/wizard.qrc6
-rw-r--r--snap/snapcraft.yaml7
-rw-r--r--src/CMakeLists.txt97
-rw-r--r--src/autotype/AutoType.cpp58
-rw-r--r--src/autotype/AutoType.h9
-rw-r--r--src/autotype/AutoTypeSelectDialog.cpp8
-rw-r--r--src/autotype/mac/AutoTypeMac.cpp2
-rw-r--r--src/autotype/xcb/AutoTypeXCB.cpp17
-rw-r--r--src/browser/BrowserAccessControlDialog.cpp72
-rw-r--r--src/browser/BrowserAccessControlDialog.h14
-rwxr-xr-xsrc/browser/BrowserAccessControlDialog.ui74
-rw-r--r--src/browser/BrowserAction.cpp123
-rw-r--r--src/browser/BrowserAction.h44
-rw-r--r--src/browser/BrowserClients.cpp77
-rw-r--r--src/browser/BrowserClients.h61
-rw-r--r--src/browser/BrowserHost.cpp122
-rw-r--r--src/browser/BrowserHost.h (renamed from src/proxy/NativeMessagingHost.h)40
-rw-r--r--src/browser/BrowserService.cpp437
-rw-r--r--src/browser/BrowserService.h122
-rw-r--r--src/browser/BrowserSettings.cpp252
-rw-r--r--src/browser/BrowserSettings.h39
-rw-r--r--src/browser/BrowserSettingsPage.cpp49
-rw-r--r--src/browser/BrowserSettingsPage.h36
-rw-r--r--src/browser/BrowserSettingsWidget.cpp (renamed from src/browser/BrowserOptionDialog.cpp)162
-rw-r--r--src/browser/BrowserSettingsWidget.h (renamed from src/browser/BrowserOptionDialog.h)22
-rw-r--r--[-rwxr-xr-x]src/browser/BrowserSettingsWidget.ui (renamed from src/browser/BrowserOptionDialog.ui)366
-rw-r--r--src/browser/BrowserShared.cpp45
-rw-r--r--src/browser/BrowserShared.h43
-rwxr-xr-xsrc/browser/CMakeLists.txt10
-rw-r--r--src/browser/HostInstaller.cpp359
-rw-r--r--src/browser/HostInstaller.h75
-rw-r--r--src/browser/NativeMessageInstaller.cpp329
-rw-r--r--src/browser/NativeMessageInstaller.h46
-rw-r--r--src/browser/NativeMessagingBase.cpp152
-rw-r--r--src/browser/NativeMessagingBase.h68
-rw-r--r--src/browser/NativeMessagingHost.cpp222
-rw-r--r--src/browser/NativeMessagingHost.h63
-rw-r--r--src/cli/Add.cpp17
-rw-r--r--src/cli/AddGroup.cpp12
-rw-r--r--src/cli/Analyze.cpp14
-rw-r--r--src/cli/CMakeLists.txt7
-rw-r--r--src/cli/Clip.cpp72
-rw-r--r--src/cli/Clip.h1
-rw-r--r--src/cli/Command.cpp31
-rw-r--r--src/cli/Create.cpp89
-rw-r--r--src/cli/Create.h4
-rw-r--r--src/cli/DatabaseCommand.cpp3
-rw-r--r--src/cli/Diceware.cpp10
-rw-r--r--src/cli/Edit.cpp19
-rw-r--r--src/cli/Estimate.cpp12
-rw-r--r--src/cli/Export.cpp26
-rw-r--r--src/cli/Generate.cpp10
-rw-r--r--src/cli/Help.cpp3
-rw-r--r--src/cli/Import.cpp23
-rw-r--r--src/cli/Info.cpp53
-rw-r--r--src/cli/Info.h31
-rw-r--r--src/cli/List.cpp10
-rw-r--r--src/cli/Locate.cpp8
-rw-r--r--src/cli/Merge.cpp19
-rw-r--r--src/cli/Move.cpp15
-rw-r--r--src/cli/Remove.cpp16
-rw-r--r--src/cli/RemoveGroup.cpp17
-rw-r--r--src/cli/Show.cpp47
-rw-r--r--src/cli/TextStream.cpp9
-rw-r--r--src/cli/TextStream.h2
-rw-r--r--src/cli/Utils.cpp221
-rw-r--r--src/cli/Utils.h35
-rw-r--r--src/cli/keepassxc-cli.cpp24
-rw-r--r--src/core/Alloc.cpp5
-rw-r--r--src/core/Bootstrap.cpp27
-rw-r--r--src/core/Clock.cpp5
-rw-r--r--src/core/Clock.h1
-rw-r--r--src/core/Compare.cpp21
-rw-r--r--src/core/Compare.h8
-rw-r--r--src/core/Config.cpp527
-rw-r--r--src/core/Config.h176
-rw-r--r--src/core/CsvParser.cpp59
-rw-r--r--src/core/CustomData.cpp10
-rw-r--r--src/core/CustomData.h4
-rw-r--r--src/core/Database.cpp198
-rw-r--r--src/core/Database.h23
-rw-r--r--src/core/DatabaseIcons.cpp195
-rw-r--r--src/core/DatabaseIcons.h33
-rw-r--r--src/core/Entry.cpp193
-rw-r--r--src/core/Entry.h39
-rw-r--r--src/core/EntrySearcher.cpp44
-rw-r--r--src/core/EntrySearcher.h10
-rw-r--r--src/core/FilePath.cpp273
-rw-r--r--src/core/FileWatcher.cpp231
-rw-r--r--src/core/FileWatcher.h56
-rw-r--r--src/core/Global.h7
-rw-r--r--src/core/Group.cpp100
-rw-r--r--src/core/Group.h12
-rw-r--r--src/core/HibpDownloader.cpp190
-rw-r--r--src/core/HibpDownloader.h72
-rw-r--r--src/core/IconDownloader.cpp41
-rw-r--r--src/core/IconDownloader.h1
-rw-r--r--src/core/Merger.cpp15
-rw-r--r--src/core/Metadata.cpp145
-rw-r--r--src/core/Metadata.h39
-rw-r--r--src/core/PassphraseGenerator.cpp4
-rw-r--r--src/core/PasswordGenerator.cpp24
-rw-r--r--src/core/PasswordGenerator.h20
-rw-r--r--src/core/PasswordHealth.cpp187
-rw-r--r--src/core/PasswordHealth.h119
-rw-r--r--src/core/Resources.cpp267
-rw-r--r--src/core/Resources.h (renamed from src/core/FilePath.h)36
-rw-r--r--src/core/ScreenLockListenerDBus.cpp38
-rw-r--r--src/core/ScreenLockListenerDBus.h2
-rw-r--r--src/core/ScreenLockListenerWin.h2
-rw-r--r--src/core/Tools.cpp26
-rw-r--r--src/core/Tools.h3
-rw-r--r--src/core/Translator.cpp70
-rw-r--r--src/crypto/kdf/AesKdf.cpp5
-rw-r--r--src/crypto/kdf/AesKdf.h1
-rw-r--r--src/crypto/kdf/Argon2Kdf.cpp5
-rw-r--r--src/crypto/kdf/Argon2Kdf.h1
-rw-r--r--src/crypto/kdf/Kdf.cpp17
-rw-r--r--src/crypto/kdf/Kdf.h15
-rw-r--r--src/crypto/ssh/bcrypt_pbkdf.cpp2
-rw-r--r--src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp4
-rw-r--r--src/fdosecrets/FdoSecretsPlugin.cpp39
-rw-r--r--src/fdosecrets/FdoSecretsPlugin.h13
-rw-r--r--src/fdosecrets/FdoSecretsSettings.cpp17
-rw-r--r--src/fdosecrets/README.md2
-rw-r--r--src/fdosecrets/objects/Collection.cpp45
-rw-r--r--src/fdosecrets/objects/Collection.h8
-rw-r--r--src/fdosecrets/objects/DBusObject.h10
-rw-r--r--src/fdosecrets/objects/DBusTypes.cpp10
-rw-r--r--src/fdosecrets/objects/Item.cpp24
-rw-r--r--src/fdosecrets/objects/Item.h8
-rw-r--r--src/fdosecrets/objects/Prompt.cpp43
-rw-r--r--src/fdosecrets/objects/Prompt.h4
-rw-r--r--src/fdosecrets/objects/Service.cpp9
-rw-r--r--src/fdosecrets/objects/Service.h2
-rw-r--r--src/fdosecrets/objects/Session.cpp4
-rw-r--r--src/fdosecrets/objects/SessionCipher.cpp33
-rw-r--r--src/fdosecrets/objects/SessionCipher.h14
-rw-r--r--src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp3
-rw-r--r--src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui16
-rw-r--r--src/fdosecrets/widgets/SettingsModels.cpp13
-rw-r--r--src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp82
-rw-r--r--src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h12
-rw-r--r--src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui24
-rw-r--r--src/format/HtmlExporter.cpp10
-rw-r--r--src/format/Kdbx3Reader.cpp10
-rw-r--r--src/format/Kdbx3Writer.cpp10
-rw-r--r--src/format/Kdbx4Reader.cpp10
-rw-r--r--src/format/Kdbx4Writer.cpp10
-rw-r--r--src/format/KdbxWriter.h3
-rw-r--r--src/format/KdbxXmlReader.cpp37
-rw-r--r--src/format/KdbxXmlReader.h2
-rw-r--r--src/format/KdbxXmlWriter.cpp24
-rw-r--r--src/format/KdbxXmlWriter.h2
-rw-r--r--src/format/KeePass1Reader.cpp2
-rw-r--r--src/format/KeePass2.cpp6
-rw-r--r--src/format/OpVaultReader.cpp16
-rw-r--r--src/format/OpVaultReaderAttachments.cpp16
-rw-r--r--src/format/OpVaultReaderBandEntry.cpp49
-rw-r--r--src/format/OpVaultReaderSections.cpp64
-rw-r--r--src/gui/AboutDialog.cpp63
-rw-r--r--src/gui/AboutDialog.ui8
-rw-r--r--src/gui/Application.cpp59
-rw-r--r--src/gui/Application.h10
-rw-r--r--src/gui/ApplicationSettingsWidget.cpp312
-rw-r--r--src/gui/ApplicationSettingsWidget.h1
-rw-r--r--src/gui/ApplicationSettingsWidgetGeneral.ui1630
-rw-r--r--src/gui/ApplicationSettingsWidgetSecurity.ui21
-rw-r--r--src/gui/CategoryListWidget.cpp72
-rw-r--r--src/gui/CategoryListWidget.ui4
-rw-r--r--src/gui/Clipboard.cpp4
-rw-r--r--src/gui/CloneDialog.cpp2
-rw-r--r--src/gui/DatabaseOpenDialog.cpp5
-rw-r--r--src/gui/DatabaseOpenWidget.cpp334
-rw-r--r--src/gui/DatabaseOpenWidget.h33
-rw-r--r--src/gui/DatabaseOpenWidget.ui331
-rw-r--r--src/gui/DatabaseTabWidget.cpp95
-rw-r--r--src/gui/DatabaseTabWidget.h12
-rw-r--r--src/gui/DatabaseWidget.cpp423
-rw-r--r--src/gui/DatabaseWidget.h29
-rw-r--r--src/gui/DatabaseWidgetStateSync.cpp29
-rw-r--r--src/gui/DialogyWidget.cpp1
-rw-r--r--src/gui/EditWidget.cpp13
-rw-r--r--src/gui/EditWidget.ui31
-rw-r--r--src/gui/EditWidgetIcons.cpp11
-rw-r--r--src/gui/EditWidgetIcons.ui33
-rw-r--r--src/gui/EditWidgetProperties.ui56
-rw-r--r--src/gui/EntryPreviewWidget.cpp57
-rw-r--r--src/gui/EntryPreviewWidget.h1
-rw-r--r--src/gui/EntryPreviewWidget.ui176
-rw-r--r--src/gui/FileDialog.cpp61
-rw-r--r--src/gui/FileDialog.h7
-rw-r--r--src/gui/IconDownloaderDialog.cpp4
-rw-r--r--src/gui/IconDownloaderDialog.ui5
-rw-r--r--src/gui/IconModels.cpp9
-rw-r--r--src/gui/KMessageWidget.cpp24
-rw-r--r--src/gui/KeePass1OpenWidget.cpp6
-rw-r--r--src/gui/LineEdit.cpp12
-rw-r--r--src/gui/MainWindow.cpp722
-rw-r--r--src/gui/MainWindow.h27
-rw-r--r--src/gui/MainWindow.ui351
-rw-r--r--src/gui/MessageBox.cpp4
-rw-r--r--src/gui/MessageWidget.cpp23
-rw-r--r--src/gui/MessageWidget.h4
-rw-r--r--src/gui/PasswordEdit.cpp162
-rw-r--r--src/gui/PasswordEdit.h27
-rw-r--r--src/gui/PasswordGeneratorWidget.cpp438
-rw-r--r--src/gui/PasswordGeneratorWidget.h23
-rw-r--r--src/gui/PasswordGeneratorWidget.ui2067
-rw-r--r--src/gui/SearchHelpWidget.ui86
-rw-r--r--src/gui/SearchWidget.cpp35
-rw-r--r--src/gui/SearchWidget.h1
-rw-r--r--src/gui/SearchWidget.ui33
-rw-r--r--src/gui/TotpDialog.cpp8
-rw-r--r--src/gui/TotpExportSettingsDialog.cpp8
-rw-r--r--src/gui/TotpSetupDialog.ui2
-rw-r--r--src/gui/URLEdit.cpp4
-rw-r--r--src/gui/UpdateCheckDialog.cpp4
-rw-r--r--src/gui/WelcomeWidget.cpp46
-rw-r--r--src/gui/WelcomeWidget.h2
-rw-r--r--src/gui/csvImport/CsvImportWidget.cpp105
-rw-r--r--src/gui/csvImport/CsvImportWidget.h2
-rw-r--r--src/gui/csvImport/CsvImportWidget.ui1122
-rw-r--r--src/gui/csvImport/CsvParserModel.cpp26
-rw-r--r--src/gui/databasekey/KeyComponentWidget.cpp (renamed from src/gui/masterkey/KeyComponentWidget.cpp)0
-rw-r--r--src/gui/databasekey/KeyComponentWidget.h (renamed from src/gui/masterkey/KeyComponentWidget.h)0
-rw-r--r--src/gui/databasekey/KeyComponentWidget.ui (renamed from src/gui/masterkey/KeyComponentWidget.ui)0
-rw-r--r--src/gui/databasekey/KeyFileEditWidget.cpp (renamed from src/gui/masterkey/KeyFileEditWidget.cpp)2
-rw-r--r--src/gui/databasekey/KeyFileEditWidget.h (renamed from src/gui/masterkey/KeyFileEditWidget.h)0
-rw-r--r--src/gui/databasekey/KeyFileEditWidget.ui (renamed from src/gui/masterkey/KeyFileEditWidget.ui)0
-rw-r--r--src/gui/databasekey/PasswordEditWidget.cpp (renamed from src/gui/masterkey/PasswordEditWidget.cpp)38
-rw-r--r--src/gui/databasekey/PasswordEditWidget.h (renamed from src/gui/masterkey/PasswordEditWidget.h)1
-rw-r--r--src/gui/databasekey/PasswordEditWidget.ui (renamed from src/gui/masterkey/PasswordEditWidget.ui)87
-rw-r--r--src/gui/databasekey/YubiKeyEditWidget.cpp (renamed from src/gui/masterkey/YubiKeyEditWidget.cpp)93
-rw-r--r--src/gui/databasekey/YubiKeyEditWidget.h (renamed from src/gui/masterkey/YubiKeyEditWidget.h)6
-rw-r--r--src/gui/databasekey/YubiKeyEditWidget.ui (renamed from src/gui/masterkey/YubiKeyEditWidget.ui)0
-rw-r--r--src/gui/dbsettings/DatabaseSettingsDialog.cpp36
-rw-r--r--src/gui/dbsettings/DatabaseSettingsDialog.h6
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp86
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h5
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui113
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp (renamed from src/gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp)44
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h (renamed from src/gui/dbsettings/DatabaseSettingsWidgetMasterKey.h)14
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp25
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h6
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui28
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui2
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetStatistics.ui79
-rw-r--r--src/gui/entry/AutoTypeMatchModel.cpp8
-rw-r--r--src/gui/entry/EditEntryWidget.cpp318
-rw-r--r--src/gui/entry/EditEntryWidget.h8
-rw-r--r--src/gui/entry/EditEntryWidgetAdvanced.ui37
-rw-r--r--src/gui/entry/EditEntryWidgetAutoType.ui24
-rw-r--r--src/gui/entry/EditEntryWidgetMain.ui275
-rw-r--r--src/gui/entry/EditEntryWidgetSSHAgent.ui244
-rw-r--r--src/gui/entry/EntryAttachmentsWidget.cpp45
-rw-r--r--src/gui/entry/EntryAttachmentsWidget.h2
-rw-r--r--src/gui/entry/EntryModel.cpp169
-rw-r--r--src/gui/entry/EntryModel.h11
-rw-r--r--src/gui/entry/EntryURLModel.cpp4
-rw-r--r--src/gui/entry/EntryView.cpp194
-rw-r--r--src/gui/entry/EntryView.h11
-rw-r--r--src/gui/group/EditGroupWidget.cpp12
-rw-r--r--src/gui/group/EditGroupWidgetMain.ui186
-rw-r--r--src/gui/group/GroupModel.cpp16
-rw-r--r--src/gui/group/GroupView.cpp15
-rw-r--r--src/gui/group/GroupView.h4
-rw-r--r--src/gui/osutils/OSUtils.h41
-rw-r--r--src/gui/osutils/OSUtilsBase.cpp27
-rw-r--r--src/gui/osutils/OSUtilsBase.h58
-rw-r--r--src/gui/osutils/macutils/AppKit.h (renamed from src/gui/macutils/AppKit.h)1
-rw-r--r--src/gui/osutils/macutils/AppKitImpl.h (renamed from src/gui/macutils/AppKitImpl.h)1
-rw-r--r--src/gui/osutils/macutils/AppKitImpl.mm (renamed from src/gui/macutils/AppKitImpl.mm)15
-rw-r--r--src/gui/osutils/macutils/MacUtils.cpp (renamed from src/gui/macutils/MacUtils.cpp)63
-rw-r--r--src/gui/osutils/macutils/MacUtils.h (renamed from src/gui/macutils/MacUtils.h)25
-rw-r--r--src/gui/osutils/nixutils/NixUtils.cpp136
-rw-r--r--src/gui/osutils/nixutils/NixUtils.h53
-rw-r--r--src/gui/osutils/winutils/WinUtils.cpp107
-rw-r--r--src/gui/osutils/winutils/WinUtils.h62
-rw-r--r--src/gui/reports/ReportsDialog.cpp148
-rw-r--r--src/gui/reports/ReportsDialog.h88
-rw-r--r--src/gui/reports/ReportsDialog.ui43
-rw-r--r--src/gui/reports/ReportsPageHealthcheck.cpp55
-rw-r--r--src/gui/reports/ReportsPageHealthcheck.h41
-rw-r--r--src/gui/reports/ReportsPageHibp.cpp55
-rw-r--r--src/gui/reports/ReportsPageHibp.h41
-rw-r--r--src/gui/reports/ReportsPageStatistics.cpp (renamed from src/gui/dbsettings/DatabaseSettingsPageStatistics.cpp)26
-rw-r--r--src/gui/reports/ReportsPageStatistics.h (renamed from src/gui/dbsettings/DatabaseSettingsPageStatistics.h)10
-rw-r--r--src/gui/reports/ReportsWidget.cpp44
-rw-r--r--src/gui/reports/ReportsWidget.h53
-rw-r--r--src/gui/reports/ReportsWidgetHealthcheck.cpp342
-rw-r--r--src/gui/reports/ReportsWidgetHealthcheck.h76
-rw-r--r--src/gui/reports/ReportsWidgetHealthcheck.ui81
-rw-r--r--src/gui/reports/ReportsWidgetHibp.cpp404
-rw-r--r--src/gui/reports/ReportsWidgetHibp.h89
-rw-r--r--src/gui/reports/ReportsWidgetHibp.ui234
-rw-r--r--src/gui/reports/ReportsWidgetStatistics.cpp (renamed from src/gui/dbsettings/DatabaseSettingsWidgetStatistics.cpp)54
-rw-r--r--src/gui/reports/ReportsWidgetStatistics.h (renamed from src/gui/dbsettings/DatabaseSettingsWidgetStatistics.h)16
-rw-r--r--src/gui/reports/ReportsWidgetStatistics.ui73
-rw-r--r--src/gui/styles/StateColorPalette.cpp57
-rw-r--r--src/gui/styles/StateColorPalette.h66
-rw-r--r--src/gui/styles/base/BaseStyle.cpp4808
-rw-r--r--src/gui/styles/base/BaseStyle.h101
-rw-r--r--src/gui/styles/base/basestyle.qss48
-rw-r--r--src/gui/styles/base/phantomcolor.cpp423
-rw-r--r--src/gui/styles/base/phantomcolor.h165
-rw-r--r--src/gui/styles/dark/DarkStyle.cpp128
-rw-r--r--src/gui/styles/dark/DarkStyle.h38
-rw-r--r--src/gui/styles/dark/darkstyle.qss18
-rw-r--r--src/gui/styles/light/LightStyle.cpp127
-rw-r--r--src/gui/styles/light/LightStyle.h38
-rw-r--r--src/gui/styles/light/lightstyle.qss18
-rw-r--r--src/gui/styles/styles.qrc8
-rw-r--r--src/gui/widgets/ElidedLabel.cpp9
-rw-r--r--src/gui/widgets/PopupHelpWidget.cpp32
-rw-r--r--src/gui/widgets/PopupHelpWidget.h1
-rw-r--r--src/gui/wizard/NewDatabaseWizard.cpp30
-rw-r--r--src/gui/wizard/NewDatabaseWizardPage.ui2
-rw-r--r--src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp (renamed from src/gui/wizard/NewDatabaseWizardPageMasterKey.cpp)18
-rw-r--r--src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h (renamed from src/gui/wizard/NewDatabaseWizardPageMasterKey.h)14
-rw-r--r--src/keeshare/DatabaseSettingsPageKeeShare.cpp4
-rw-r--r--src/keeshare/KeeShare.cpp41
-rw-r--r--src/keeshare/KeeShare.h3
-rw-r--r--src/keeshare/SettingsPageKeeShare.cpp4
-rw-r--r--src/keeshare/SettingsWidgetKeeShare.cpp10
-rw-r--r--src/keeshare/SettingsWidgetKeeShare.ui34
-rw-r--r--src/keeshare/ShareExport.cpp6
-rw-r--r--src/keeshare/ShareImport.cpp6
-rw-r--r--src/keeshare/ShareObserver.cpp105
-rw-r--r--src/keeshare/ShareObserver.h9
-rw-r--r--src/keeshare/group/EditGroupPageKeeShare.cpp4
-rw-r--r--src/keeshare/group/EditGroupWidgetKeeShare.cpp87
-rw-r--r--src/keeshare/group/EditGroupWidgetKeeShare.h4
-rw-r--r--src/keeshare/group/EditGroupWidgetKeeShare.ui189
-rw-r--r--src/keys/ChallengeResponseKey.h14
-rw-r--r--src/keys/CompositeKey.cpp17
-rw-r--r--src/keys/CompositeKey.h8
-rw-r--r--src/keys/FileKey.cpp1
-rw-r--r--src/keys/YkChallengeResponseKey.cpp81
-rw-r--r--src/keys/YkChallengeResponseKey.h20
-rw-r--r--src/keys/YkChallengeResponseKeyCLI.cpp43
-rw-r--r--src/keys/YkChallengeResponseKeyCLI.h14
-rw-r--r--src/keys/drivers/YubiKey.cpp400
-rw-r--r--src/keys/drivers/YubiKey.h108
-rw-r--r--src/keys/drivers/YubiKeyStub.cpp39
-rw-r--r--src/main.cpp19
-rwxr-xr-xsrc/proxy/CMakeLists.txt20
-rw-r--r--src/proxy/NativeMessagingHost.cpp133
-rw-r--r--src/proxy/NativeMessagingProxy.cpp120
-rw-r--r--src/proxy/NativeMessagingProxy.h53
-rw-r--r--src/proxy/keepassxc-proxy.cpp5
-rw-r--r--src/sshagent/AgentSettingsPage.cpp13
-rw-r--r--src/sshagent/AgentSettingsPage.h4
-rw-r--r--src/sshagent/AgentSettingsWidget.cpp53
-rw-r--r--src/sshagent/AgentSettingsWidget.h1
-rw-r--r--src/sshagent/AgentSettingsWidget.ui139
-rw-r--r--src/sshagent/KeeAgentSettings.cpp224
-rw-r--r--src/sshagent/KeeAgentSettings.h28
-rw-r--r--src/sshagent/SSHAgent.cpp310
-rw-r--r--src/sshagent/SSHAgent.h36
-rw-r--r--src/updatecheck/UpdateChecker.cpp13
-rw-r--r--tests/CMakeLists.txt21
-rw-r--r--tests/TestAutoType.cpp16
-rw-r--r--tests/TestBrowser.cpp66
-rw-r--r--tests/TestBrowser.h5
-rw-r--r--tests/TestCli.cpp1899
-rw-r--r--tests/TestCli.h35
-rw-r--r--tests/TestConfig.cpp46
-rw-r--r--tests/TestConfig.h30
-rw-r--r--tests/TestCsvExporter.cpp11
-rw-r--r--tests/TestCsvParser.cpp3
-rw-r--r--tests/TestEntry.cpp111
-rw-r--r--tests/TestEntry.h1
-rw-r--r--tests/TestEntryModel.cpp32
-rw-r--r--tests/TestEntrySearcher.cpp108
-rw-r--r--tests/TestEntrySearcher.h2
-rw-r--r--tests/TestGroup.cpp125
-rw-r--r--tests/TestGroup.h1
-rw-r--r--tests/TestKeePass1Reader.cpp4
-rw-r--r--tests/TestKeePass2Format.cpp20
-rw-r--r--tests/TestMerge.cpp12
-rw-r--r--tests/TestModified.cpp4
-rw-r--r--tests/TestOpVaultReader.cpp276
-rw-r--r--tests/TestOpVaultReader.h5
-rw-r--r--tests/TestPasswordGenerator.cpp13
-rw-r--r--tests/TestPasswordGenerator.h1
-rw-r--r--tests/TestPasswordHealth.cpp65
-rw-r--r--tests/TestPasswordHealth.h32
-rw-r--r--tests/TestSSHAgent.cpp221
-rw-r--r--tests/TestSSHAgent.h47
-rw-r--r--tests/TestSymmetricCipher.cpp16
-rw-r--r--tests/TestTools.cpp21
-rw-r--r--tests/TestTools.h1
-rw-r--r--tests/TestYkChallengeResponseKey.cpp104
-rw-r--r--tests/TestYkChallengeResponseKey.h26
-rw-r--r--tests/data/NewDatabase.kdbxbin15006 -> 20334 bytes
-rw-r--r--tests/data/NewDatabaseBrowser.kdbxbin16743 -> 17463 bytes
-rw-r--r--tests/data/OutdatedConfig.ini8
-rw-r--r--tests/data/dbus/interfaces/org.freedesktop.Secret.Collection.xml33
-rw-r--r--tests/data/dbus/interfaces/org.freedesktop.Secret.Item.xml21
-rw-r--r--tests/data/dbus/interfaces/org.freedesktop.Secret.Prompt.xml11
-rw-r--r--tests/data/dbus/interfaces/org.freedesktop.Secret.Service.xml55
-rw-r--r--tests/data/dbus/interfaces/org.freedesktop.Secret.Session.xml4
-rw-r--r--tests/data/dbus/session.conf39
-rw-r--r--tests/data/freddy-2013-12-04.opvault.txt427
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/1C7D72EFA19A4EE98DB7A9661D2F5732_3B94A1F475014E27BFB00C99A42214DF.attachmentbin118411 -> 0 bytes
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/2A632FDD32F5445E91EB5636C7580447_8FA293F2B001459D8F8F78C21E6BF9F6.attachmentbin66299 -> 0 bytes
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/E0D293D29B10483F8DFDAC72ED0BE5C0_898CD4CD00164930A2E15B159CE65E8F.attachmentbin79695 -> 0 bytes
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_23F6167DC1FB457A8DE7033ACDCD06DB.attachmentbin98979 -> 0 bytes
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_AFBDA49A5F684179A78161E40CA2AAD3.attachmentbin75899 -> 0 bytes
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/FF445AB1497241A28812363154E1A738_16684B74F26145169EC03B950DC68E95.attachmentbin283500 -> 0 bytes
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_0.js1
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_1.js24
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_2.js24
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_3.js25
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_4.js26
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_5.js14
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_6.js13
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_7.js13
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_8.js13
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_A.js1
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_D.js37
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_E.js37
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/band_F.js1
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/folders.js24
-rw-r--r--tests/data/freddy-2013-12-04.opvault/default/profile.js1
-rw-r--r--tests/data/keepassxc.opvault/default/30B6513EE64B4DFE9C47EC2F257CE296_34034F6E478A4D4F91CDBE0A077E2128.attachmentbin0 -> 2206 bytes
-rw-r--r--tests/data/keepassxc.opvault/default/band_1.js1
-rw-r--r--tests/data/keepassxc.opvault/default/band_3.js1
-rw-r--r--tests/data/keepassxc.opvault/default/band_4.js1
-rw-r--r--tests/data/keepassxc.opvault/default/band_5.js1
-rw-r--r--tests/data/keepassxc.opvault/default/band_A.js1
-rw-r--r--tests/data/keepassxc.opvault/default/band_C.js1
-rw-r--r--tests/data/keepassxc.opvault/default/folders.js1
-rw-r--r--tests/data/keepassxc.opvault/default/profile.js1
-rw-r--r--tests/gui/CMakeLists.txt9
-rw-r--r--tests/gui/TestGui.cpp452
-rw-r--r--tests/gui/TestGui.h4
-rw-r--r--tests/gui/TestGuiBrowser.cpp68
-rw-r--r--tests/gui/TestGuiBrowser.h4
-rw-r--r--tests/gui/TestGuiFdoSecrets.cpp1176
-rw-r--r--tests/gui/TestGuiFdoSecrets.h121
-rw-r--r--tests/gui/TestGuiPixmaps.cpp98
-rw-r--r--tests/gui/TestGuiPixmaps.h3
-rw-r--r--utils/keepassxc-cr-recovery/.gitignore1
-rw-r--r--utils/keepassxc-cr-recovery/README.md20
-rw-r--r--utils/keepassxc-cr-recovery/go.mod5
-rw-r--r--utils/keepassxc-cr-recovery/go.sum8
-rw-r--r--utils/keepassxc-cr-recovery/main.go182
-rwxr-xr-xutils/keepassxc-snap-helper.sh25
-rw-r--r--utils/makeappicons.sh174
-rw-r--r--utils/makedbicons.sh123
1014 files changed, 91005 insertions, 120250 deletions
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 454b5f500..d588bced9 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -132,7 +132,7 @@ For **Qt-UI files** (*.ui*): 2 spaces
// Application includes
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
// Global includes
#include <QWidget>
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..aa6a9c438
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,5 @@
+github: ["droidmonkey", "phoerious"]
+patreon: keepassxc
+open_collective: keepassxc
+liberapay: keepassxc
+custom: ["https://keepassxc.org/donate"]
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
index 4b6d16c6c..a4a3ae2cd 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -6,44 +6,34 @@ labels: bug
assignees: ''
---
-
-[TIP]: # ( Provide a general summary of the issue in the title above ^^ )
+## Overview
[TIP]: # ( DO NOT include screenshots of your actual database! )
+[NOTE]: # ( Give a BRIEF summary about your problem )
+
+
+## Steps to Reproduce
+[NOTE]: # ( Provide a simple set of steps to reproduce this bug. )
+1.
+2.
+3.
## Expected Behavior
[NOTE]: # ( Tell us what you expected to happen )
-## Current Behavior
+## Actual Behavior
[NOTE]: # ( Tell us what actually happens )
-## Possible Solution
-[NOTE]: # ( Not required, but suggest a fix/reason for the bug )
-
-
-## Steps to Reproduce
-[NOTE]: # ( Provide a link to a live example, or an unambiguous set of steps to )
-[NOTE]: # ( reproduce this bug. Include code to reproduce, if relevant )
-1.
-2.
-3.
-
## Context
-[NOTE]: # ( How has this issue affected you? What unique circumstances do you have? )
+[NOTE]: # ( Give us any additional information you may have. )
-## Debug Info
[NOTE]: # ( Paste debug info from Help → About here )
KeePassXC - VERSION
Revision: REVISION
-Libraries:
-- LIBS
-
-Operating system: OS
-CPU architecture: ARCH
-Kernel: KERNEL
-
-Enabled extensions:
-- EXTENSIONS
+[NOTE]: # ( Pick choices based on your environment )
+Operating System: Windows/Linux/macOS
+Desktop Env: Gnome/KDE/XFCE/Mate/Cinnamon
+Windowing System: X11/Wayland \ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
index 90c28c42b..d213b4fa3 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.md
+++ b/.github/ISSUE_TEMPLATE/feature-request.md
@@ -1,25 +1,18 @@
---
name: Feature Request
-about: tell us about a new capability you want to see
+about: tell us about a new feature you want
title:
labels: new feature
assignees: ''
---
-
-[TIP]: # ( Provide a general summary of the feature in the title above ^^ )
-[TIP]: # ( DO NOT include screenshots of your actual database! )
-
## Summary
+[TIP]: # ( DO NOT include screenshots of your actual database! )
[NOTE]: # ( Provide a brief overview of what the new feature is all about )
-## Desired Behavior
-[NOTE]: # ( Tell us how the new feature should work, be specific )
-
-
-## Possible Solution
-[NOTE]: # ( Not required, but suggest ideas on how to implement the addition or change )
+## Examples
+[NOTE]: # ( Show us a picture or mock-up of your proposal )
## Context
diff --git a/.github/ISSUE_TEMPLATE/release-preview-bug-report.md b/.github/ISSUE_TEMPLATE/release-preview-bug-report.md
index 25b720168..b2fbf65ff 100644
--- a/.github/ISSUE_TEMPLATE/release-preview-bug-report.md
+++ b/.github/ISSUE_TEMPLATE/release-preview-bug-report.md
@@ -1,49 +1,39 @@
---
name: Release Preview Bug report
-about: report a bug with a release preview (eg, 2.4.0-beta1)
-title: "[PRE-RELEASE] "
+about: report a bug with a release preview (e.g., 2.6.0-beta1)
+title:
labels: PRE-RELEASE BUG
assignees: droidmonkey
---
-
-[TIP]: # ( Provide a general summary of the issue in the title above ^^ )
+## Overview
[TIP]: # ( DO NOT include screenshots of your actual database! )
+[NOTE]: # ( Give a BRIEF summary about your problem )
+
+
+## Steps to Reproduce
+[NOTE]: # ( Provide a simple set of steps to reproduce this bug. )
+1.
+2.
+3.
## Expected Behavior
[NOTE]: # ( Tell us what you expected to happen )
-## Current Behavior
+## Actual Behavior
[NOTE]: # ( Tell us what actually happens )
-## Possible Solution
-[NOTE]: # ( Not required, but suggest a fix/reason for the bug )
-
-
-## Steps to Reproduce
-[NOTE]: # ( Provide a link to a live example, or an unambiguous set of steps to )
-[NOTE]: # ( reproduce this bug. Include code to reproduce, if relevant )
-1.
-2.
-3.
-
## Context
-[NOTE]: # ( How has this issue affected you? What unique circumstances do you have? )
+[NOTE]: # ( Give us any additional information you may have. )
-## Debug Info
[NOTE]: # ( Paste debug info from Help → About here )
KeePassXC - VERSION
Revision: REVISION
-Libraries:
-- LIBS
-
-Operating system: OS
-CPU architecture: ARCH
-Kernel: KERNEL
-
-Enabled extensions:
-- EXTENSIONS
+[NOTE]: # ( Pick choices based on your environment )
+Operating System: Windows/Linux/macOS
+Desktop Env: Gnome/KDE/XFCE/Mate/Cinnamon
+Windowing System: X11/Wayland \ No newline at end of file
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 89b548554..e75bbcd60 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,17 +1,6 @@
-[TIP]: # ( Provide a general summary of your changes in the title above ^^ )
-
-## Type of change
-[NOTE]: # ( Please remove all lines which don't apply. )
-- ✅ Bug fix (non-breaking change which fixes an issue)
-- ✅ Refactor (significant modification to existing code)
-- ✅ New feature (non-breaking change which adds functionality)
-- ✅ Breaking change (fix or feature that would cause existing functionality to change)
-- ✅ Documentation (non-code change)
-
-## Description and Context
[NOTE]: # ( Describe your changes in detail, why is this change required? )
-[NOTE]: # ( Describe the context of your change. Explain large code modifications. )
-[NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX" as necessary )
+[NOTE]: # ( Explain large or complex code modifications. )
+[NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX" )
## Screenshots
@@ -23,14 +12,10 @@
[TIP]: # ( We expect new code to be covered by unit tests and documented with doc blocks! )
-## Checklist:
-[NOTE]: # ( Please go over all the following points. )
-[NOTE]: # ( Again, remove any lines which don't apply. )
-[NOTE]: # ( Pull Requests that don't fulfill all [REQUIRED] requisites are likely )
-[NOTE]: # ( to be sent back to you for correction or will be rejected. )
-- ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]**
-- ✅ My code follows the code style of this project. **[REQUIRED]**
-- ✅ All new and existing tests passed. **[REQUIRED]**
-- ✅ I have compiled and verified my code with `-DWITH_ASAN=ON`. **[REQUIRED]**
-- ✅ My change requires a change to the documentation, and I have updated it accordingly.
-- ✅ I have added tests to cover my changes.
+## Type of change
+[NOTE]: # ( Please remove all lines which don't apply. )
+- ✅ Bug fix (non-breaking change that fixes an issue)
+- ✅ New feature (change that adds functionality)
+- ✅ Breaking change (causes existing functionality to change)
+- ✅ Refactor (significant modification to existing code)
+- ✅ Documentation (non-code change)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84c7cd773..fe0d2f6b4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,81 @@
# Changelog
+## 2.6.0 (2020-07-06)
+
+### Added
+
+- Custom Light and Dark themes [#4110, #4769, #4791, #4796, #4892, #4915]
+- Compact mode to use classic Group and Entry line height [#4910]
+- View menu to quickly switch themes, compact mode, and toggle UI elements [#4910]
+- Search for groups and scope search to matched groups [#4705]
+- Save Database Backup feature [#4550]
+- Sort entries by "natural order" and move lines up/down [#4357]
+- Option to launch KeePassXC on system startup/login [#4675]
+- Caps Lock warning on password input fields [#3646]
+- Add "Size" column to entry view [#4588]
+- Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305]
+- Password Generator: Define additional characters to choose from [#3876]
+- Reports: Database password health check (offline) [#3993]
+- Reports: HIBP online service to check for breached passwords [#4438]
+- Auto-Type: DateTime placeholders [#4409]
+- Browser: Show group name in results sent to browser extension [#4111]
+- Browser: Ability to define a custom browser location (macOS and Linux only) [#4148]
+- Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591]
+- CLI: `db-info` command [#4231]
+- CLI: Use wl-clipboard if xclip is not available (Linux) [#4323]
+- CLI: Incorporate xclip into snap builds [#4697]
+- SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545]
+- SSH Agent: Context menu actions to add/remove keys [#4290]
+
+### Changed
+
+- Complete replacement of default database icons [#4699]
+- Complete replacement of application icons [#4066, #4161, #4203, #4411]
+- Complete rewrite of documentation and manpages using Asciidoctor [#4937]
+- Complete refactor of config files; separate between local and roaming [#4665]
+- Complete refactor of browser integration and proxy code [#4680]
+- Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843]
+- Significantly improve performance when saving and opening databases [#4309, #4833]
+- Remove read-only detection for database files [#4508]
+- Overhaul of password fields and password generator [#4367]
+- Replace instances of "Master Key" with "Database Credentials" [#4929]
+- Change settings checkboxes to positive phrasing for consistency [#4715]
+- Improve UX of using entry actions (focus fix) [#3893]
+- Set expiration time to Now when enabling entry expiration [#4406]
+- Always show "New Entry" in context menu [#4617]
+- Issue warning before adding large attachments [#4651]
+- Improve importing OPVault [#4630]
+- Improve AutoOpen capability [#3901, #4752]
+- Check for updates every 7 days even while still running [#4752]
+- Improve Windows installer UI/UX [#4675]
+- Improve config file handling of portable distribution [#4131, #4752]
+- macOS: Hide dock icon when application is hidden to tray [#4782]
+- Browser: Use unlock dialog to improve UX of opening a locked database [#3698]
+- Browser: Improve database and entry settings experience [#4392, #4591]
+- Browser: Improve confirm access dialog [#2143, #4660]
+- KeeShare: Improve monitoring file changes of shares [#4720]
+- CLI: Rename `create` command to `db-create` [#4231]
+- CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313]
+- CLI: Use stderr for help text and password prompts [#4086, #4623]
+- FdoSecrets: Display existing secret service process [#4128]
+
+### Fixed
+
+- Fix changing focus around the main window using tab key [#4641]
+- Fix search field clearing while still using the application [#4368]
+- Improve search help widget displaying on macOS and Linux [#4236]
+- Return keyboard focus after editing an entry [#4287]
+- Reset database path after failed "Save As" [#4526]
+- Use SHA256 Digest for Windows code signing [#4129]
+- Improve handling of ccache when building [#4104, #4335]
+- macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909]
+- Auto-Type: Fix crash when performing on new entry [#4132]
+- Browser: Send legacy HTTP settings to recycle bin [#4589]
+- Browser: Fix merging browser keys [#4685]
+- CLI: Fix encoding when exporting database [#3921]
+- SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595]
+- FdoSecrets: Fix crash when editing settings before service is enabled [#4332]
+
## 2.5.4 (2020-04-09)
### Fixed
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dc2681893..b0244d648 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-cmake_minimum_required(VERSION 3.1.0)
+cmake_minimum_required(VERSION 3.3.0)
project(KeePassXC)
@@ -27,13 +27,6 @@ string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
-# Use the Compiler Cache (ccache) if it is installed
-# (install with: sudo apt get ccache)
-find_program (CCACHE_FOUND ccache)
-if (CCACHE_FOUND)
- set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
-endif (CCACHE_FOUND)
-
# Support Visual Studio Code
include(CMakeToolsHelpers OPTIONAL)
include(FeatureSummary)
@@ -48,6 +41,7 @@ option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated
option(WITH_ASAN "Enable address sanitizer checks (Linux / macOS only)" OFF)
option(WITH_COVERAGE "Use to build with coverage tests (GCC only)." OFF)
option(WITH_APP_BUNDLE "Enable Application Bundle for macOS" ON)
+option(WITH_CCACHE "Use ccache for build" OFF)
set(WITH_XC_ALL OFF CACHE BOOL "Build in all available plugins")
@@ -64,9 +58,21 @@ endif()
if(APPLE)
option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF)
endif()
+option(WITH_XC_DOCS "Enable building of documentation" ON)
+
+if(WITH_CCACHE)
+ # Use the Compiler Cache (ccache) program
+ # (install with: sudo apt get ccache)
+ find_program(CCACHE_FOUND ccache)
+ if(CCACHE_FOUND)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
+ else()
+ message(FATAL_ERROR "ccache requested but cannot be found.")
+ endif()
+endif()
if(WITH_XC_ALL)
- # Enable all options (except update check)
+ # Enable all options (except update check and docs)
set(WITH_XC_AUTOTYPE ON)
set(WITH_XC_NETWORKING ON)
set(WITH_XC_BROWSER ON)
@@ -94,8 +100,8 @@ if(NOT WITH_XC_NETWORKING AND WITH_XC_UPDATECHECK)
endif()
set(KEEPASSXC_VERSION_MAJOR "2")
-set(KEEPASSXC_VERSION_MINOR "5")
-set(KEEPASSXC_VERSION_PATCH "4")
+set(KEEPASSXC_VERSION_MINOR "6")
+set(KEEPASSXC_VERSION_PATCH "0")
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
@@ -204,6 +210,40 @@ macro(add_gcc_compiler_flags FLAGS)
add_gcc_compiler_cflags("${FLAGS}")
endmacro(add_gcc_compiler_flags)
+# Copies of above macros that first ensure the compiler understands a given flag
+# Because check_*_compiler_flag() sets -D with name, need to provide "safe" FLAGNAME
+macro(check_add_gcc_compiler_cxxflag FLAG FLAGNAME)
+ check_cxx_compiler_flag("${FLAG}" CXX_HAS${FLAGNAME})
+ if(CXX_HAS${FLAGNAME})
+ add_gcc_compiler_cxxflags("${FLAG}")
+ endif()
+endmacro(check_add_gcc_compiler_cxxflag)
+
+macro(check_add_gcc_compiler_cflag FLAG FLAGNAME)
+ check_c_compiler_flag("${FLAG}" CC_HAS${FLAGNAME})
+ if(CC_HAS${FLAGNAME})
+ add_gcc_compiler_cflags("${FLAG}")
+ endif()
+endmacro(check_add_gcc_compiler_cflag)
+
+# This is the "front-end" for the above macros
+# Optionally takes additional parameter(s) with language to check (currently "C" or "CXX")
+macro(check_add_gcc_compiler_flag FLAG)
+ string(REGEX REPLACE "[-=]" "_" FLAGNAME "${FLAG}")
+ set(check_lang_spec ${ARGN})
+ list(LENGTH check_lang_spec num_extra_args)
+ set(langs C CXX)
+ if(num_extra_args GREATER 0)
+ set(langs "${check_lang_spec}")
+ endif()
+ if("C" IN_LIST langs)
+ check_add_gcc_compiler_cflag("${FLAG}" "${FLAGNAME}")
+ endif()
+ if("CXX" IN_LIST langs)
+ check_add_gcc_compiler_cxxflag("${FLAG}" "${FLAGNAME}")
+ endif()
+endmacro(check_add_gcc_compiler_flag)
+
add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
if(WITH_APP_BUNDLE)
@@ -217,6 +257,8 @@ add_gcc_compiler_flags("-fvisibility=hidden")
add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden")
if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")
+ check_add_gcc_compiler_flag("-Wshadow-compatible-local")
+ check_add_gcc_compiler_flag("-Wshadow-local")
add_gcc_compiler_flags("-Werror")
endif()
@@ -251,16 +293,9 @@ if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)")
add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2")
endif()
-check_c_compiler_flag("-Werror=format-security -Werror=implicit-function-declaration" WERROR_C_AVAILABLE)
-check_cxx_compiler_flag("-Werror=format-security" WERROR_CXX_AVAILABLE)
-if(WERROR_C_AVAILABLE AND WERROR_CXX_AVAILABLE)
- add_gcc_compiler_flags("-Werror=format-security")
- add_gcc_compiler_cflags("-Werror=implicit-function-declaration")
-endif()
-
-if(CMAKE_COMPILER_IS_GNUCXX)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align")
-endif()
+check_add_gcc_compiler_flag("-Werror=format-security")
+check_add_gcc_compiler_flag("-Werror=implicit-function-declaration" C)
+check_add_gcc_compiler_flag("-Wcast-align")
if(WITH_COVERAGE AND CMAKE_COMPILER_IS_CLANGXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
@@ -271,14 +306,8 @@ if(WITH_COVERAGE AND CMAKE_COMPILER_IS_CLANGXX)
# `find src -iname '*.h' -or -iname '*.cpp'`
endif()
-if(CMAKE_COMPILER_IS_GNUCC)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
-endif()
-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- if(CMAKE_COMPILER_IS_CLANGXX)
- add_gcc_compiler_flags("-Qunused-arguments")
- endif()
+ check_add_gcc_compiler_flag("-Qunused-arguments")
add_gcc_compiler_flags("-pie -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
@@ -289,10 +318,7 @@ endif()
add_gcc_compiler_cflags("-std=c99")
add_gcc_compiler_cxxflags("-std=c++11")
-if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9.99) OR
- (CMAKE_COMPILER_IS_CLANGXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.6.99))
- add_gcc_compiler_cxxflags("-fsized-deallocation")
-endif()
+check_add_gcc_compiler_flag("-fsized-deallocation" CXX)
if(APPLE AND CMAKE_COMPILER_IS_CLANGXX)
add_gcc_compiler_cxxflags("-stdlib=libc++")
@@ -476,6 +502,10 @@ if(WITH_TESTS)
add_subdirectory(tests)
endif(WITH_TESTS)
+if(WITH_XC_DOCS)
+ add_subdirectory(docs)
+endif()
+
if(PRINT_SUMMARY)
# This will print ENABLED, REQUIRED and DISABLED
feature_summary(WHAT ALL)
diff --git a/COPYING b/COPYING
index fe7d02f3e..174848e46 100644
--- a/COPYING
+++ b/COPYING
@@ -1,5 +1,5 @@
KeePassXC - http://www.keepassxc.org/
-Copyright (C) 2016-2019 KeePassXC Team <team@keepassxc.org>
+Copyright (C) 2016-2020 KeePassXC Team <team@keepassxc.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@ Copyright: 2010-2012, Felix Geyer <debfx@fobos.de>
2000-2008, Tom Sato <VEF00200@nifty.ne.jp>
2013, Laszlo Papp <lpapp@kde.org>
2013, David Faure <faure@kde.org>
- 2016-2019, KeePassXC Team <team@keepassxc.org>
+ 2016-2020, KeePassXC Team <team@keepassxc.org>
License: GPL-2 or GPL-3
Comment: The "KeePassXC Team" in every copyright notice is formed by the following people:
@@ -38,11 +38,6 @@ Comment: The "KeePassXC Team" in every copyright notice is formed by the followi
- weslly
Every other contributor is listed on https://github.com/keepassxreboot/keepassxc/graphs/contributors
-Files: cmake/GNUInstallDirs.cmake
-Copyright: 2011 Nikita Krupen'ko <krnekit@gmail.com>
- 2011 Kitware, Inc.
-License: BSD-3-clause
-
Files: cmake/CodeCoverage.cmake
Copyright: 2012 - 2015, Lars Bilke
License: BSD-3-clause
@@ -55,168 +50,155 @@ Files: cmake/GenerateProductVersion.cmake
Copyright: 2015 halex2005 <akharlov@gmail.com>
License: MIT
-Files: share/icons/application/*/apps/keepassxc.png
- share/icons/application/scalable/apps/keepassxc.svg
- share/icons/application/*/apps/keepassxc-dark.png
+Files: share/icons/application/scalable/apps/keepassxc.svg
share/icons/application/scalable/apps/keepassxc-dark.svg
- share/icons/application/*/apps/keepassxc-locked.png
share/icons/application/scalable/apps/keepassxc-locked.svg
- share/icons/application/*/apps/keepassxc-unlocked.png
share/icons/application/scalable/apps/keepassxc-unlocked.svg
- share/icons/application/*/mimetypes/application-x-keepassxc.png
share/icons/application/scalable/mimetypes/application-x-keepassxc.svg
Copyright: 2016, Lorenzo Stella <lorenzo.stl@gmail.com>
License: LGPL-2
-Files: share/icons/application/*/actions/auto-type.png
- share/icons/application/*/actions/database-change-key.png
- share/icons/application/*/actions/entry-clone.png
- share/icons/application/*/actions/entry-edit.png
- share/icons/application/*/actions/entry-new.png
- share/icons/application/*/actions/group-empty-trash.png
- share/icons/application/*/actions/help-about.png
- share/icons/application/*/actions/password-generate.png
- share/icons/database/C00_Password.png
- share/icons/database/C01_Package_Network.png
- share/icons/database/C02_MessageBox_Warning.png
- share/icons/database/C03_Server.png
- share/icons/database/C04_Klipper.png
- share/icons/database/C05_Edu_Languages.png
- share/icons/database/C06_KCMDF.png
- share/icons/database/C07_Kate.png
- share/icons/database/C08_Socket.png
- share/icons/database/C09_Identity.png
- share/icons/database/C10_Kontact.png
- share/icons/database/C11_Camera.png
- share/icons/database/C12_IRKickFlash.png
- share/icons/database/C13_KGPG_Key3.png
- share/icons/database/C14_Laptop_Power.png
- share/icons/database/C15_Scanner.png
- share/icons/database/C16_Mozilla_Firebird.png
- share/icons/database/C17_CDROM_Unmount.png
- share/icons/database/C18_Display.png
- share/icons/database/C19_Mail_Generic.png
- share/icons/database/C20_Misc.png
- share/icons/database/C21_KOrganizer.png
- share/icons/database/C22_ASCII.png
- share/icons/database/C23_Icons.png
- share/icons/database/C24_Connect_Established.png
- share/icons/database/C25_Folder_Mail.png
- share/icons/database/C26_FileSave.png
- share/icons/database/C27_NFS_Unmount.png
- share/icons/database/C28_QuickTime.png
- share/icons/database/C29_KGPG_Term.png
- share/icons/database/C30_Konsole.png
- share/icons/database/C31_FilePrint.png
- share/icons/database/C32_FSView.png
- share/icons/database/C33_Run.png
- share/icons/database/C34_Configure.png
- share/icons/database/C35_KRFB.png
- share/icons/database/C36_Ark.png
- share/icons/database/C37_KPercentage.png
- share/icons/database/C38_Samba_Unmount.png
- share/icons/database/C39_History.png
- share/icons/database/C40_Mail_Find.png
- share/icons/database/C41_VectorGfx.png
- share/icons/database/C42_KCMMemory.png
- share/icons/database/C43_EditTrash.png
- share/icons/database/C44_KNotes.png
- share/icons/database/C45_Cancel.png
- share/icons/database/C46_Help.png
- share/icons/database/C47_KPackage.png
- share/icons/database/C48_Folder.png
- share/icons/database/C49_Folder_Blue_Open.png
- share/icons/database/C50_Folder_Tar.png
- share/icons/database/C51_Decrypted.png
- share/icons/database/C52_Encrypted.png
- share/icons/database/C53_Apply.png
- share/icons/database/C54_Signature.png
- share/icons/database/C55_Thumbnail.png
- share/icons/database/C56_KAddressBook.png
- share/icons/database/C57_View_Text.png
- share/icons/database/C58_KGPG.png
- share/icons/database/C59_Package_Development.png
- share/icons/database/C60_KFM_Home.png
- share/icons/database/C61_Services.png
-Copyright: 2003-2004, David Vignoni <david@icon-king.com>
-License: LGPL-2.1
-Comment: from Nuvola icon theme
-
-Files: share/icons/application/*/actions/entry-delete.png
- share/icons/application/*/actions/group-delete.png
- share/icons/application/*/actions/group-edit.png
- share/icons/application/*/actions/group-new.png
-Copyright: 2003-2004, David Vignoni <david@icon-king.com>
- 2012, Felix Geyer <debfx@fobos.de>
-License: LGPL-2.1
-Comment: based on Nuvola icon theme
-
-Files: share/icons/application/*/actions/favicon-download.png
-Copyright: 2003-2004, David Vignoni <david@icon-king.com>
- 2018, Kyle Kneitinger <kyle@kneit.in>
-License: LGPL-2.1
-Comment: based on Nuvola icon theme
-
-Files: share/icons/application/*/actions/application-exit.png
- share/icons/application/*/actions/chronometer.png
- share/icons/application/*/actions/configure.png
- share/icons/application/*/actions/database-lock.png
- share/icons/application/*/actions/dialog-close.png
- share/icons/application/*/actions/dialog-ok.png
- share/icons/application/*/actions/document-close.png
- share/icons/application/*/actions/document-edit.png
- share/icons/application/*/actions/document-new.png
- share/icons/application/*/actions/document-open.png
- share/icons/application/*/actions/document-properties.png
- share/icons/application/*/actions/document-save.png
- share/icons/application/*/actions/document-save-as.png
- share/icons/application/*/actions/edit-clear-locationbar-ltr.png
- share/icons/application/*/actions/edit-clear-locationbar-rtl.png
- share/icons/application/*/actions/key-enter.png
- share/icons/application/*/actions/password-generator.png
- share/icons/application/*/actions/password-copy.png
- share/icons/application/*/actions/password-show-*.png
- share/icons/application/*/actions/system-search.png
- share/icons/application/*/actions/username-copy.png
- share/icons/application/*/actions/view-history.png
- share/icons/application/*/apps/internet-web-browser.png
- share/icons/application/*/apps/preferences-desktop-icons.png
- share/icons/application/*/apps/utilities-terminal.png
- share/icons/application/*/categories/preferences-other.png
- share/icons/application/*/status/dialog-error.png
- share/icons/application/*/status/dialog-information.png
- share/icons/application/*/status/dialog-warning.png
- share/icons/application/*/status/security-high.png
- share/icons/svg/*.svg
-Copyright: 2007, Nuno Pinheiro <nuno@oxygen-icons.org>
- 2007, David Vignoni <david@icon-king.com>
- 2007, David Miller <miller@oxygen-icons.org>
- 2007, Johann Ollivier Lapeyre <johann@oxygen-icons.org>
- 2007, Kenneth Wimer <kwwii@bootsplash.org>
- 2007, Riccardo Iaconelli <riccardo@oxygen-icons.org>
-License: LGPL-3+
-Comment: from Oxygen icon theme (http://www.oxygen-icons.org/)
-
-Files: share/icons/database/C62_Tux.png
- share/icons/database/C63_Feather.png
- share/icons/database/C64_Apple.png
- share/icons/database/C67_Certificate.png
- share/icons/database/C68_BlackBerry.png
-Copyright: Mairin Duffy
- Sarah Owens
- James Birkett
- Dominik Reichl
-License: CC0
-Comment: C62_Tux.png from https://openclipart.org/detail/103855
- C63_Feather.png from http://openclipart.org/detail/122017
- C64_Apple.png based on http://openclipart.org/detail/24319
- C67_Certificate.png based on https://openclipart.org/detail/16729
- C68_BlackBerry.png from https://openclipart.org/detail/4465
-
-Files: share/icons/database/C65_W.png
- share/icons/database/C66_Money.png
+Files: share/icons/database/C00_Password.svg
+ share/icons/database/C01_Package_Network.svg
+ share/icons/database/C02_MessageBox_Warning.svg
+ share/icons/database/C03_Server.svg
+ share/icons/database/C04_Klipper.svg
+ share/icons/database/C05_Edu_Languages.svg
+ share/icons/database/C06_KCMDF.svg
+ share/icons/database/C08_Socket.svg
+ share/icons/database/C09_Identity.svg
+ share/icons/database/C10_Kontact.svg
+ share/icons/database/C11_Camera.svg
+ share/icons/database/C12_IRKickFlash.svg
+ share/icons/database/C13_KGPG_Key3.svg
+ share/icons/database/C14_Laptop_Power.svg
+ share/icons/database/C15_Scanner.svg
+ share/icons/database/C16_Mozilla_Firebird.svg
+ share/icons/database/C19_Mail_Generic.svg
+ share/icons/database/C20_Misc.svg
+ share/icons/database/C21_KOrganizer.svg
+ share/icons/database/C22_ASCII.svg
+ share/icons/database/C23_Icons.svg
+ share/icons/database/C24_Connect_Established.svg
+ share/icons/database/C25_Folder_Mail.svg
+ share/icons/database/C28_QuickTime.svg
+ share/icons/database/C29_KGPG_Term.svg
+ share/icons/database/C30_Konsole.svg
+ share/icons/database/C31_FilePrint.svg
+ share/icons/database/C32_FSView.svg
+ share/icons/database/C33_Run.svg
+ share/icons/database/C34_Configure.svg
+ share/icons/database/C36_Ark.svg
+ share/icons/database/C39_History.svg
+ share/icons/database/C40_Mail_Find.svg
+ share/icons/database/C41_VectorGfx.svg
+ share/icons/database/C42_KCMMemory.svg
+ share/icons/database/C43_EditTrash.svg
+ share/icons/database/C47_KPackage.svg
+ share/icons/database/C48_Folder.svg
+ share/icons/database/C49_Folder_Blue_Open.svg
+ share/icons/database/C50_Folder_Tar.svg
+ share/icons/database/C55_Thumbnail.svg
+ share/icons/database/C56_KAddressBook.svg
+ share/icons/database/C57_View_Text.svg
+ share/icons/database/C58_KGPG.svg
+ share/icons/database/C59_Package_Development.svg
+ share/icons/database/C60_KFM_Home.svg
+ share/icons/database/C62_Tux.svg
+ share/icons/database/C63_Feather.svg
+ share/icons/database/C65_W.svg
+ share/icons/database/C67_Certificate.svg
+ share/icons/database/C68_BlackBerry.svg
Copyright: none
-License: public-domain
+License: MIT
+Comment: Taken from https://github.com/icons8/flat-color-icons
+
+Files: share/icons/badges/0_ShareActive.svg
+ share/icons/badges/1_ShareInactive.svg
+ share/icons/database/C07_Kate.svg
+ share/icons/database/C17_CDROM_Unmount.svg
+ share/icons/database/C18_Display.svg
+ share/icons/database/C26_FileSave.svg
+ share/icons/database/C27_NFS_Unmount.svg
+ share/icons/database/C35_KRFB.svg
+ share/icons/database/C38_Samba_Unmount.svg
+ share/icons/database/C44_KNotes.svg
+ share/icons/database/C51_Decrypted.svg
+ share/icons/database/C52_Encrypted.svg
+ share/icons/database/C54_Signature.svg
+ share/icons/database/C66_Money.svg
+Copyright: none
+License: CC0
+Comment: Taken from https://github.com/paomedia/small-n-flat
+
+Files: share/icons/badges/2_Expired.svg
+ share/icons/database/C37_KPercentage.svg
+ share/icons/database/C45_Cancel.svg
+ share/icons/database/C46_Help.svg
+ share/icons/database/C53_Apply.svg
+ share/icons/database/C61_Services.svg
+Copyright: 2020 KeePassXC Team <team@keepassxc.org>
+License: MIT
+
+Files: share/icons/application/scalable/actions/document-close.svg
+ share/icons/application/scalable/actions/document-edit.svg
+ share/icons/application/scalable/actions/document-export.svg
+ share/icons/application/scalable/actions/document-import.svg
+ share/icons/application/scalable/actions/document-new.svg
+ share/icons/application/scalable/actions/document-open.svg
+ share/icons/application/scalable/actions/document-open-recent.svg
+ share/icons/application/scalable/actions/document-properties.svg
+ share/icons/application/scalable/actions/document-save.svg
+ share/icons/application/scalable/actions/document-save-as.svg
+ share/icons/application/scalable/actions/document-save-copy.svg
+ share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg
+ share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg
+ share/icons/application/scalable/actions/entry-clone.svg
+ share/icons/application/scalable/actions/entry-delete.svg
+ share/icons/application/scalable/actions/entry-edit.svg
+ share/icons/application/scalable/actions/entry-new.svg
+ share/icons/application/scalable/actions/favicon-download.svg
+ share/icons/application/scalable/actions/group-delete.svg
+ share/icons/application/scalable/actions/group-edit.svg
+ share/icons/application/scalable/actions/group-empty-trash.svg
+ share/icons/application/scalable/actions/group-new.svg
+ share/icons/application/scalable/actions/help-about.svg
+ share/icons/application/scalable/actions/key-enter.svg
+ share/icons/application/scalable/actions/message-close.svg
+ share/icons/application/scalable/actions/move-down.svg
+ share/icons/application/scalable/actions/move-up.svg
+ share/icons/application/scalable/actions/paperclip.svg
+ share/icons/application/scalable/actions/password-copy.svg
+ share/icons/application/scalable/actions/password-generate.svg
+ share/icons/application/scalable/actions/password-generator.svg
+ share/icons/application/scalable/actions/password-show-off.svg
+ share/icons/application/scalable/actions/password-show-on.svg
+ share/icons/application/scalable/actions/refresh.svg
+ share/icons/application/scalable/actions/reports.svg
+ share/icons/application/scalable/actions/reports-exclude.svg
+ share/icons/application/scalable/actions/statistics.svg
+ share/icons/application/scalable/actions/system-help.svg
+ share/icons/application/scalable/actions/system-search.svg
+ share/icons/application/scalable/actions/url-copy.svg
+ share/icons/application/scalable/actions/username-copy.svg
+ share/icons/application/scalable/actions/view-history.svg
+ share/icons/application/scalable/apps/internet-web-browser.svg
+ share/icons/application/scalable/apps/keepassxc.svg
+ share/icons/application/scalable/apps/keepassxc-dark.svg
+ share/icons/application/scalable/apps/keepassxc-locked.svg
+ share/icons/application/scalable/apps/keepassxc-unlocked.svg
+ share/icons/application/scalable/apps/preferences-desktop-icons.svg
+ share/icons/application/scalable/apps/preferences-system-network-sharing.svg
+ share/icons/application/scalable/apps/utilities-terminal.svg
+ share/icons/application/scalable/categories/preferences-other.svg
+ share/icons/application/scalable/mimetypes/application-x-keepassxc.svg
+ share/icons/application/scalable/status/dialog-error.svg
+ share/icons/application/scalable/status/dialog-information.svg
+ share/icons/application/scalable/status/dialog-warning.svg
+ share/icons/application/scalable/status/security-high.svg
+Copyright: 2019 Austin Andrews <http://templarian.com/>
+License: SIL OPEN FONT LICENSE Version 1.1
+Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/)
Files: src/streams/qtiocompressor.*
src/streams/QtIOCompressor
@@ -224,10 +206,6 @@ Files: src/streams/qtiocompressor.*
Copyright: 2009-2012, Nokia Corporation and/or its subsidiary(-ies)
License: LGPL-2.1 or GPL-3
-Files: cmake/GetGitRevisionDescription.cmake*
-Copyright: 2009-2010, Iowa State University
-License: Boost-1.0
-
Files: src/zxcvbn/zxcvbn.*
Copyright: 2015-2017, Tony Evans
License: MIT
@@ -238,7 +216,7 @@ Copyright: 2011 Aurélien Gâteau <agateau@kde.org>
2014 Dominik Haumann <dhaumann@kde.org>
License: LGPL-2.1
-Files: share/macosx/dmg-background.tiff
+Files: share/macosx/background.tiff
Copyright: 2008-2014, Andrey Tarantsov
License: MIT
@@ -246,10 +224,7 @@ Files: share/icons/application/scalable/apps/freedesktop.svg
Copyright: GPL-2+
Comment: from Freedesktop.org website
-Files: share/icons/application/32x32/actions/statistics.png
-Copyright: Icon made by Freepik from https://www.flaticon.com/free-icon/bars-chart_265733
-
-Files: share/icons/application/scalable/actions/object-locked.svg
- share/icons/application/scalable/actions/object-unlocked.svg
-License: LGPL-3
-Comment: from Breeze icon theme (https://github.com/KDE/breeze-icons)
+Files: share/icons/application/scalable/actions/hibp.svg
+ share/icons/database/C64_Apple.svg
+Copyright: GPL-2+
+Comment: from the Simple Icons repo (https://github.com/simple-icons/simple-icons/)
diff --git a/INSTALL.md b/INSTALL.md
index e11344eed..44d63c2af 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -2,12 +2,9 @@ Build and Install KeePassXC
=================
This document will guide you through the steps to build and install KeePassXC from source.
-You can visit the online version of this document at the following link:
+For more information, see also the [_Building KeePassXC_](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC) page on the wiki.
-https://github.com/keepassxreboot/keepassx/wiki/Install-Instruction-from-Source
-
-The [KeePassXC QuickStart](./docs/QUICKSTART.md) gets you started using KeePassXC on your
-Windows, Mac, or Linux computer using the pre-built binaries.
+The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download).
Build Dependencies
==================
@@ -17,6 +14,7 @@ The following tools must exist within your PATH:
* make
* cmake (>= 2.8.12)
* g++ (>= 4.7) or clang++ (>= 3.0)
+* asciidoctor (on Linux/MacOS)
The following libraries are required:
@@ -35,7 +33,7 @@ Prepare the Building Environment
* [Building Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux)
* [Building Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows)
-* [Building Environment on MacOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-OS-X)
+* [Building Environment on MacOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS)
Build Steps
===========
@@ -70,7 +68,6 @@ git checkout master
Navigate to the directory where you have downloaded KeePassXC and type these commands:
```
-cd directory-where-sources-live
mkdir build
cd build
cmake -DWITH_XC_ALL=ON ..
diff --git a/LICENSE.BOOST-1.0 b/LICENSE.BOOST-1.0
deleted file mode 100644
index 36b7cd93c..000000000
--- a/LICENSE.BOOST-1.0
+++ /dev/null
@@ -1,23 +0,0 @@
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/LICENSE.OFL b/LICENSE.OFL
new file mode 100644
index 000000000..244ef81c3
--- /dev/null
+++ b/LICENSE.OFL
@@ -0,0 +1,96 @@
+Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/),
+with Reserved Font Name Material Design Icons.
+Copyright (c) 2014, Google (http://www.google.com/design/)
+uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/README.md b/README.md
index 5fad0cc83..4d5248a66 100644
--- a/README.md
+++ b/README.md
@@ -1,57 +1,54 @@
-# <img src="https://keepassxc.org/logo.png" width="40" height="40"/> KeePassXC
-[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(project:KeepassXC\)/statusIcon)](https://ci.keepassxc.org/?guest=1) [![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc)
-
-## About KeePassXC
-[KeePassXC](https://keepassxc.org) is a cross-platform community fork of
-[KeePassX](https://www.keepassx.org/).
-Our goal is to extend and improve it with new features and bugfixes
-to provide a feature-rich, fully cross-platform and modern
-open-source password manager.
-
-## Installation
-The [KeePassXC QuickStart](./docs/QUICKSTART.md) gets you started using
-KeePassXC on your Windows, Mac, or Linux computer using pre-compiled binaries
-from the [downloads page](https://keepassxc.org/download).
-
-Additionally, individual Linux distributions may ship their own versions,
-so please check out your distribution's package list to see if KeePassXC is available.
-
-## Additional features compared to KeePassX
-- Auto-Type on all three major platforms (Linux, Windows, macOS)
-- Twofish encryption
-- YubiKey challenge-response support
-- TOTP generation
-- CSV import
-- A [Command Line Interface (keepassxc-cli)](./share/docs/man/keepassxc-cli.1)
-- DEP and ASLR hardening
-- Stand-alone password and passphrase generator
-- Password strength meter
-- Using website favicons as entry icons
-- Merging of databases
-- Automatic reload when the database changed on disk
-- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome, Chromium, Vivaldi, or Brave](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) and [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/pdffhmdngciaglkoonimfcmckehcpafo)
-- Synchronize passwords using KeeShare. See [Using Sharing](./docs/QUICKSTART.md#using-sharing) for more details.
-- Many bug fixes
-
-For a full list of features and changes, read the [CHANGELOG](CHANGELOG.md) document.
-For a full list of keyboard shortcuts, see [KEYBINDS](./docs/KEYBINDS.md)
+# <img src="https://keepassxc.org/images/keepassxc-logo.svg" width="40" height="40"/> KeePassXC
+[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(project:KeepassXC\)/statusIcon)](https://ci.keepassxc.org/?guest=1)
+[![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc)
+[![GitHub release](https://img.shields.io/github/release/keepassxreboot/keepassxc)](https://github.com/keepassxreboot/keepassxc/releases/)
+
+[KeePassXC](https://keepassxc.org) is a modern open-source password manager. It is used to store and manage information such as URLs, usernames, passwords, and so on for various accounts on your web and desktop applications. KeePassXC stores all data in an encrypted database format while still providing secure access to that information. KeePassXC is helpful for people with extremely high demands of secure personal data management.
+
+## Quick Start
+The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check your distribution's package list to see if KeePassXC is available. Detailed documentation is available in the [User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide.html).
+
+## Features List
+KeePassXC has numerous features for novice and power users alike. This guide will go over the basic features to get you up and running quickly. The User Guide contains more in-depth discussions on the major features in the application.
+
+### Basic
+* Create, open, and save databases in the KDBX format (KeePass Compatible)
+* Store sensitive information in entries that are organized by groups
+* Search for entries
+* Password generator
+* Auto-Type passwords into applications
+* Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser
+* Entry icon download
+* Import databases from CSV, 1Password, and KeePass1 formats
+
+### Advanced
+* Database reports (password health, HIBP, and statistics)
+* Database export to CSV and HTML formats
+* TOTP storage and generation
+* Field references between entries
+* File attachments and custom attributes
+* Entry history and data restoration
+* YubiKey/OnlyKey challenge-response support
+* Command line interface (keepassxc-cli)
+* Auto-Open databases
+* KeeShare shared databases (import, export, and synchronize)
+* SSH Agent
+* FreeDesktop.org Secret Service (replace Gnome keyring, etc.)
+* Additional encryption choices: Twofish and ChaCha20
+
+For a full list of changes, read the [CHANGELOG](CHANGELOG.md) document. \
+For a full list of keyboard shortcuts, see [KeyboardShortcuts.adoc](./docs/topics/KeyboardShortcuts.adoc)
## Building KeePassXC
-Detailed instructions are available in the [Build and Install](./INSTALL.md)
-page or on the [Wiki page](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC).
+Detailed instructions are available in the [Build and Install](./INSTALL.md) page and in the [Wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC).
## Contributing
-We are always looking for suggestions how to improve our application.
-If you find any bugs or have an idea for a new feature, please let us know by
-opening a report in our [issue tracker](https://github.com/keepassxreboot/keepassxc/issues)
-on GitHub or join us on IRC on freenode channels #keepassxc or #keepassxc-dev.
+We are always looking for suggestions on how to improve KeePassXC. If you find any bugs or have an idea for a new feature, please let us know by opening a report in the [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or join us on IRC in [freenode](https://webchat.freenode.net/) channels #keepassxc and #keepassxc-dev.
-You can of course also directly contribute your own code. We are happy to accept your pull requests.
-
-Please read the [CONTRIBUTING document](.github/CONTRIBUTING.md) for further information.
+You may directly contribute your own code by submitting a pull request. Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information.
## License
-GPL-2 or GPL-3
+KeePassXC code is licensed under GPL-2 or GPL-3. Additional licensing for third-party files is detailed in [COPYING](./COPYING).
diff --git a/cmake/CLangFormat.cmake b/cmake/CLangFormat.cmake
index 70169ed72..c1e9572c2 100644
--- a/cmake/CLangFormat.cmake
+++ b/cmake/CLangFormat.cmake
@@ -19,7 +19,7 @@ set(EXCLUDED_DIRS
# objective-c directories
src/touchid/
src/autotype/mac/
- src/gui/macutils/)
+ src/gui/osutils/macutils/)
set(EXCLUDED_FILES
# third-party files
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
new file mode 100644
index 000000000..8a64701cc
--- /dev/null
+++ b/docs/CMakeLists.txt
@@ -0,0 +1,65 @@
+# Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 or (at your option)
+# version 3 of the License.
+#
+# 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+find_program(ASCIIDOCTOR_EXE asciidoctor)
+if(NOT ASCIIDOCTOR_EXE)
+ message(FATAL_ERROR "asciidoctor is required to build documentation")
+else()
+ message(STATUS "Using asciidoctor: ${ASCIIDOCTOR_EXE}")
+endif()
+
+set(DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
+# Build html documentation on all platforms
+add_custom_command(OUTPUT KeePassXC_GettingStarted.html
+ COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_GettingStarted.html ${DOC_DIR}/GettingStarted.adoc
+ DEPENDS ${DOC_DIR}/topics/* ${DOC_DIR}/styles/* ${DOC_DIR}/images/* ${DOC_DIR}/GettingStarted.adoc
+ VERBATIM)
+add_custom_command(OUTPUT KeePassXC_UserGuide.html
+ COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_UserGuide.html ${DOC_DIR}/UserGuide.adoc
+ DEPENDS ${DOC_DIR}/topics/* ${DOC_DIR}/styles/* ${DOC_DIR}/images/* ${DOC_DIR}/UserGuide.adoc
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ VERBATIM)
+add_custom_command(OUTPUT KeePassXC_KeyboardShortcuts.html
+ COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_KeyboardShortcuts.html ${DOC_DIR}/topics/KeyboardShortcuts.adoc
+ DEPENDS ${DOC_DIR}/topics/KeyboardShortcuts.adoc ${DOC_DIR}/styles/*
+ VERBATIM)
+
+add_custom_target(docs ALL DEPENDS KeePassXC_GettingStarted.html KeePassXC_UserGuide.html KeePassXC_KeyboardShortcuts.html)
+
+install(FILES
+ ${OUT_DIR}/KeePassXC_GettingStarted.html
+ ${OUT_DIR}/KeePassXC_UserGuide.html
+ ${OUT_DIR}/KeePassXC_KeyboardShortcuts.html
+ DESTINATION ${DATA_INSTALL_DIR}/docs)
+
+# Build Man Pages on Linux and macOS
+if(APPLE OR UNIX)
+ add_custom_command(OUTPUT keepassxc.1
+ COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${DOC_DIR}/man/keepassxc.1.adoc
+ DEPENDS ${DOC_DIR}/man/*
+ VERBATIM)
+ add_custom_command(OUTPUT keepassxc-cli.1
+ COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${DOC_DIR}/man/keepassxc-cli.1.adoc
+ DEPENDS ${DOC_DIR}/man/*
+ VERBATIM)
+ add_custom_target(manpages ALL DEPENDS keepassxc.1 keepassxc-cli.1)
+
+ install(FILES
+ ${OUT_DIR}/keepassxc.1
+ ${OUT_DIR}/keepassxc-cli.1
+ DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
+endif()
diff --git a/docs/GettingStarted.adoc b/docs/GettingStarted.adoc
new file mode 100644
index 000000000..8235ed3b9
--- /dev/null
+++ b/docs/GettingStarted.adoc
@@ -0,0 +1,34 @@
+= KeePassXC: Getting Started Guide
+KeePassXC Team <team@keepassxc.org>
+v2.6.0
+:data-uri:
+:linkcss!:
+:homepage: https://keepassxc.org
+:icons: font
+:imagesdir: images
+:stylesheet: styles/dark.css
+:toc: left
+ifdef::backend-pdf[]
+:title-page:
+:title-logo-image: {imagesdir}/kpxc_logo.png
+:pdf-theme: styles/pdf_theme.yml
+:compress:
+endif::[]
+
+include::topics/Disclaimers.adoc[]
+
+<<<
+
+// Include various topics, excluding advanced sections
+
+include::topics/Welcome.adoc[tags=*;!advanced]
+
+include::topics/DownloadInstall.adoc[tags=*;!advanced]
+
+include::topics/UserInterface.adoc[tags=*;!advanced]
+
+include::topics/PasswordGenerator.adoc[tags=*;!advanced]
+
+include::topics/DatabaseOperations.adoc[tags=*;!advanced]
+
+include::topics/BrowserPlugin.adoc[tags=*;!advanced]
diff --git a/docs/KEYBINDS.md b/docs/KEYBINDS.md
deleted file mode 100644
index 94e8b3daf..000000000
--- a/docs/KEYBINDS.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# List of Keyboard Shortcuts for KeepassXC
-
-Actions | Keyboard Shortcuts
----------------------------|----------------------------
-New Database | Ctrl + Shift + N
-Open Database | Ctrl + O
-Save Database | Ctrl + S
-Save Database As | Ctrl + Shift + S
-Close Database | Ctrl + W
-Lock Databases | Ctrl + L
-Quit | Ctrl + Q
-New Entry | Ctrl + N
-Edit Entry | Ctrl + E
-Delete Entry | Ctrl + D
-Clone Entry | Ctrl + K
-Show TOTP | Ctrl + Shift + T
-Copy TOTP | Ctrl + T
-Copy Username | Ctrl + B
-Copy Password | Ctrl + C
-Trigger AutoType | Ctrl + Shift - V
-Open Url | Ctrl + Shift - U
-Copy Url | Ctrl + U
-Show Minimized | Ctrl + M
-Hide Window | Ctrl + Shift - M
-Select Next Database Tab | Ctrl + Tab *OR* Ctrl + PGDN
-Select Previous Datase Tab | Ctrl + Shift + Tab *OR* Ctrl + PGUP
-Toggle Passwords Hidden | Ctrl + Shift + C
-Toggle Usernames Hidden | Ctrl + Shift + B
-Focus Search | Ctrl + F
-Clear Search | ESC
-Show Keyboard Shortcuts | Ctrl + /
-
-
-
-
diff --git a/docs/KeePassHTTP/KeePassXC-Accept-Button.png b/docs/KeePassHTTP/KeePassXC-Accept-Button.png
deleted file mode 100644
index 8c736c213..000000000
--- a/docs/KeePassHTTP/KeePassXC-Accept-Button.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeePassHTTP/KeePassXC-Confirm.png b/docs/KeePassHTTP/KeePassXC-Confirm.png
deleted file mode 100644
index e0b0f084e..000000000
--- a/docs/KeePassHTTP/KeePassXC-Confirm.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeePassHTTP/KeePassXC-Connect.png b/docs/KeePassHTTP/KeePassXC-Connect.png
deleted file mode 100644
index a2d756712..000000000
--- a/docs/KeePassHTTP/KeePassXC-Connect.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeeShare/AppSettings.png b/docs/KeeShare/AppSettings.png
deleted file mode 100644
index b12e6a04d..000000000
--- a/docs/KeeShare/AppSettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeeShare/DatabaseSettings.png b/docs/KeeShare/DatabaseSettings.png
deleted file mode 100644
index ec89b51d5..000000000
--- a/docs/KeeShare/DatabaseSettings.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeeShare/GroupSettings_Export.png b/docs/KeeShare/GroupSettings_Export.png
deleted file mode 100644
index 1cfd3f331..000000000
--- a/docs/KeeShare/GroupSettings_Export.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeeShare/GroupSettings_Import.png b/docs/KeeShare/GroupSettings_Import.png
deleted file mode 100644
index 3824c0158..000000000
--- a/docs/KeeShare/GroupSettings_Import.png
+++ /dev/null
Binary files differ
diff --git a/docs/KeeShare/GroupSettings_Sync.png b/docs/KeeShare/GroupSettings_Sync.png
deleted file mode 100644
index 7385229e8..000000000
--- a/docs/KeeShare/GroupSettings_Sync.png
+++ /dev/null
Binary files differ
diff --git a/docs/QUICKSTART.md b/docs/QUICKSTART.md
deleted file mode 100644
index 1a2cd3dd4..000000000
--- a/docs/QUICKSTART.md
+++ /dev/null
@@ -1,137 +0,0 @@
-# Quick Start for KeePassXC
-
-This procedure gets KeePassXC running on your computer with browser integration, using the pre-built binaries available for [download](https://keepassxc.org/download) from [KeePassXC site](https://keepassxc.org).
-
-**TL;DR** KeePassXC saves your passwords securely.
-When you double-click a URL in KeePassXC, it launches your default browser to that URL.
-With browser integration configured, KeePassXC automatically enters username/password credentials into web page fields.
-
-## Installing and Starting KeePassXC
-
-1. [Download the native installer](https://keepassxc.org/download) and install KeePassXC for your Windows, macOS, or Linux computer in the usual way for your platform.
-1. Open the KeePassXC application.
-1. Create a new database and give it a master key that's used to unlock the database file.
-This database holds entries (usernames, passwords, account numbers, notes) for all your websites, programs, etc.
-1. Create a few entries - enter the username, password, URL, and optionally notes about the entry.
-1. KeePassXC securely stores those entries in the database.
-
-## Setting up Browser Integration with KeePassXC
-
-1. *Within KeePassXC*, go to **Tools &rarr; Settings** (on macOS, go to **KeePassXC &rarr; Preferences**).
-1. In **Browser Integration**, check **Enable KeePassXC browser integration**.
-1. Right below that, click the checkbox for the browser(s) you use.
-Leave the other options at their defaults.
-1. *In your default web browser,* install the KeePassXC Browser extension/add-on. Instructions for [Firefox or Tor Browser](https://addons.mozilla.org/firefox/addon/keepassxc-browser/) or [Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk).
-1. Click the KeePassXC icon in the upper-right corner. You'll see the dialog below.
-1. Click the blue Connect button to make the browser extension connect to the KeePassXC application.
-
-&nbsp;<img src="./KeePassHTTP/KeePassXC-Connect.png" height="200" alt="KeePassXC Connect Dialog">
-
-7. *Switch back to KeePassXC.* You'll see a dialog (below) indicating that a request to connect has arrived.
-7. Give the connection a name (perhaps *Keepass-Browsername*, any unique name will suffice) and click OK to accept it.
-7. This one-time operation connects KeePassXC and your browser.
-
-<img src="./KeePassHTTP/KeePassXC-Accept-Button.png" height="200" alt="KeePassXC Accept Connection Dialog">
-
-## Using Browser Integration
-
-1. *Within KeePassXC,* double-click the URL of an entry, or select it and type Ctrl+U (Cmd+U on macOS).
-1. Your browser opens to that URL.
-1. If there are username/password fields on that page, you will see the dialog below.
-Click *Allow* to confirm that KeePassXC may access the credentials to auto-fill the fields.
-1. Check *Remember this decision* to allow this each time you visit the page.
-
-<img src="./KeePassHTTP/KeePassXC-Confirm.png" height="200" alt="KeePassCX Confirm Access Dialog">
-
-## Using Sharing
-
-Sharing allows you to share a subset of your credentials with others and vice versa.
-
-### Enable Sharing
-
-To use sharing, you need to enable for the application.
-
-1. Go to Tools &rarr; Settings.
-1. Select the category KeeShare.
-1. Check _Allow import_ if you want to import shared credentials.
-1. Check _Allow export_ if you want to share credentials.
-
-To make sure that your data is valid when imported by another client, please _generate_ (or _import_) a public/private key pair and enter your _signer_ name. This way your client may verify that the imported data is valid. When Importing, you'll see the known sources with names and fingerprint in the list at the bottom. This is the place to _trust_ or _untrust_ signers. It is only possible to trust someone on application level.
-
-<img src="./KeeShare/AppSettings.png" height="600" width="800" alt="KeeShare Application Settings">
-
-### Sharing Credentials
-
-If you checked _Allow export_ in the Sharing settings you now are good to go to share some passwords with others. Sharing always is defined on a group. If you enable sharing on a group, every entry under this group or its children is shared. If you enable sharing on the root node, **every password** inside your database gets shared!
-
-1. Open the edit sheet on a group you want to share.
-1. Select the sharing section.
-1. Choose _Export to path_ as the sharing method.
-1. Choose a path to store the shared credentials to.
-1. Generate a password for this share container.
-
-The export file will not be generated automatically. Instead, each time the database is saved, the file gets written (so please deactivate the autosafe feature). If an old file is present, the old file will be overwritten! The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file inside the cloud.
-
-<img src="./KeeShare/GroupSettings_Export.png" height="600" width="800" alt="KeeShare Group Sharing Settings">
-
-### Using Shared Credentials
-
-Checking _Allow import_ in the Sharing settings of the database enables you to receive credentials from others. KeePass will watch sharing sources and import any changes immediately into your database using the synchronization feature.
-
-1. Create a group for import.
-1. Open the edit sheet on that group.
-1. Select the sharing section.
-1. Choose _Import from path_ as the sharing method.
-1. Choose a share container that is shared with you.
-1. Enter the password for the shared container.
-
-KeeShare observes the container for changes and merges them into your database when necessary. Importing merges in time order, so older data is moved to the history, which should have a sufficient size to prevent loss of needed data.
-
-Please note, that the import currently is not restricted to the configured group. Every entry which was imported and moved outside the import group will be updated regardless of it's location!
-
-<img src="./KeeShare/GroupSettings_Import.png" height="600" width="800" alt="KeeShare Group Import Settings">
-
-### Using Synchronized Credentials
-
-Instead of using different groups for sharing and importing you can use a single group that acts as both. This way you can synchronize a number of credentials easily across many users without a lot of hassle.
-
-1. Open the edit sheet on a group you want to synchronize.
-1. Select the sharing section.
-1. Choose _Synchronize with path_ as the sharing method.
-1. Choose a database that you want to use a synchronization file.
-1. Enter the password for the database.
-
-<img src="./KeeShare/GroupSettings_Sync.png" height="600" width="800" alt="KeeShare Group Synchronization Settings">
-
-### Disable Sharing for Credentials
-
-In case you don't want to share (import or export) some credentials, it is possible to you can
-* use the application settings and uncheck the options or
-* instead of selecting _Import from path_, _Export to path_ or _Synchronize with path_ you'll select _Inactive_ while leaving the path and the password untouched.
-
-### Sharing overview
-
-There is a simple overview of shared groups to keep track of your data.
-
-1. Open the Database Settings.
-1. Select the KeeShare category.
-
-<img src="./KeeShare/DatabaseSettings.png" height="600" width="800" alt="KeeShare Group Sharing Ovewview">
-
-## Technical Details and Limitations of Sharing
-
-Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independend, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client.
-
-KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers.
-
-## Using Auto Open
-
-The Auto Open feature automatically loads and unlocks additional databases when you unlock your main database.
-In order to use this functionnality, do the following:
-
-1. Create a group called **AutoOpen** at the root of your main database.
-1. In this group, create a new entry for each database that should be opened automatically:
- * Put the *password of the database* in the **Password** field
- * Put the *path to the database's file* in the **URL** field* (it can be formatted either as **file://**, a **/path/to/the/file** form, or a relative file path.)
- * If the extra database requires a keyfile to be unlocked, put the *path to the keyfile* in the **Username** field. The path options are the same as for the database's file in the URL field.
-1. The next time you unlock your database these databases will be opened and unlocked automatically.
diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc
new file mode 100644
index 000000000..f879ce99b
--- /dev/null
+++ b/docs/UserGuide.adoc
@@ -0,0 +1,37 @@
+= KeePassXC: User Guide
+KeePassXC Team <team@keepassxc.org>
+v2.6.0
+:data-uri:
+:homepage: https://keepassxc.org
+:icons: font
+:imagesdir: images
+:stylesheet: styles/dark.css
+:toc: left
+ifdef::backend-pdf[]
+:title-page:
+:title-logo-image: {imagesdir}/kpxc_logo.png
+:pdf-theme: styles/pdf_theme.yml
+:compress:
+endif::[]
+
+include::topics/Disclaimers.adoc[]
+
+<<<
+
+// Include feature topics and advanced sections
+
+include::topics/UserInterface.adoc[tags=*]
+
+include::topics/DatabaseOperations.adoc[tags=*]
+
+include::topics/ImportExport.adoc[tags=*]
+
+include::topics/PasswordGenerator.adoc[tags=*]
+
+include::topics/BrowserPlugin.adoc[tags=*]
+
+include::topics/AutoType.adoc[tags=*]
+
+include::topics/KeeShare.adoc[tags=*]
+
+include::topics/SSHAgent.adoc[tags=*]
diff --git a/docs/images/autotype_entry_sequences.png b/docs/images/autotype_entry_sequences.png
new file mode 100644
index 000000000..d5899bc2a
--- /dev/null
+++ b/docs/images/autotype_entry_sequences.png
Binary files differ
diff --git a/docs/images/autotype_entrylevel.png b/docs/images/autotype_entrylevel.png
new file mode 100644
index 000000000..5a92df4e9
--- /dev/null
+++ b/docs/images/autotype_entrylevel.png
Binary files differ
diff --git a/docs/images/autotype_selection_dialog.png b/docs/images/autotype_selection_dialog.png
new file mode 100644
index 000000000..6f15a6ea6
--- /dev/null
+++ b/docs/images/autotype_selection_dialog.png
Binary files differ
diff --git a/docs/images/autotype_settings.png b/docs/images/autotype_settings.png
new file mode 100644
index 000000000..7d1d63e8d
--- /dev/null
+++ b/docs/images/autotype_settings.png
Binary files differ
diff --git a/docs/images/browser_advanced_settings.png b/docs/images/browser_advanced_settings.png
new file mode 100644
index 000000000..9f4a8bd2f
--- /dev/null
+++ b/docs/images/browser_advanced_settings.png
Binary files differ
diff --git a/docs/images/browser_confirm_access_dialog.png b/docs/images/browser_confirm_access_dialog.png
new file mode 100644
index 000000000..0e268e4ff
--- /dev/null
+++ b/docs/images/browser_confirm_access_dialog.png
Binary files differ
diff --git a/docs/images/browser_database_settings.png b/docs/images/browser_database_settings.png
new file mode 100644
index 000000000..2b559e839
--- /dev/null
+++ b/docs/images/browser_database_settings.png
Binary files differ
diff --git a/docs/images/browser_entry_settings.png b/docs/images/browser_entry_settings.png
new file mode 100644
index 000000000..0a2b4dd71
--- /dev/null
+++ b/docs/images/browser_entry_settings.png
Binary files differ
diff --git a/docs/images/browser_extension_association.png b/docs/images/browser_extension_association.png
new file mode 100644
index 000000000..1a2368eb0
--- /dev/null
+++ b/docs/images/browser_extension_association.png
Binary files differ
diff --git a/docs/images/browser_extension_connect.png b/docs/images/browser_extension_connect.png
new file mode 100644
index 000000000..74674745f
--- /dev/null
+++ b/docs/images/browser_extension_connect.png
Binary files differ
diff --git a/docs/images/browser_extension_icons.png b/docs/images/browser_extension_icons.png
new file mode 100644
index 000000000..bd2ba77ef
--- /dev/null
+++ b/docs/images/browser_extension_icons.png
Binary files differ
diff --git a/docs/images/browser_extension_reload.png b/docs/images/browser_extension_reload.png
new file mode 100644
index 000000000..e3272582f
--- /dev/null
+++ b/docs/images/browser_extension_reload.png
Binary files differ
diff --git a/docs/images/browser_fill_credentials.png b/docs/images/browser_fill_credentials.png
new file mode 100644
index 000000000..5766f4a84
--- /dev/null
+++ b/docs/images/browser_fill_credentials.png
Binary files differ
diff --git a/docs/images/browser_settings.png b/docs/images/browser_settings.png
new file mode 100644
index 000000000..0466b34d3
--- /dev/null
+++ b/docs/images/browser_settings.png
Binary files differ
diff --git a/docs/images/clone_entry.png b/docs/images/clone_entry.png
new file mode 100644
index 000000000..bd3145fb9
--- /dev/null
+++ b/docs/images/clone_entry.png
Binary files differ
diff --git a/docs/images/clone_entry_dialog.png b/docs/images/clone_entry_dialog.png
new file mode 100644
index 000000000..8fd9d49c5
--- /dev/null
+++ b/docs/images/clone_entry_dialog.png
Binary files differ
diff --git a/docs/images/clone_entry_references.png b/docs/images/clone_entry_references.png
new file mode 100644
index 000000000..99e16d6a4
--- /dev/null
+++ b/docs/images/clone_entry_references.png
Binary files differ
diff --git a/docs/images/compact_mode_comparison.png b/docs/images/compact_mode_comparison.png
new file mode 100644
index 000000000..364597532
--- /dev/null
+++ b/docs/images/compact_mode_comparison.png
Binary files differ
diff --git a/docs/images/csv_import.png b/docs/images/csv_import.png
new file mode 100644
index 000000000..666aeb0b6
--- /dev/null
+++ b/docs/images/csv_import.png
Binary files differ
diff --git a/docs/images/database_security.png b/docs/images/database_security.png
new file mode 100644
index 000000000..f2d8b0586
--- /dev/null
+++ b/docs/images/database_security.png
Binary files differ
diff --git a/docs/images/database_security_credentials.png b/docs/images/database_security_credentials.png
new file mode 100644
index 000000000..bc947fbc6
--- /dev/null
+++ b/docs/images/database_security_credentials.png
Binary files differ
diff --git a/docs/images/database_security_encryption.png b/docs/images/database_security_encryption.png
new file mode 100644
index 000000000..86f0f9996
--- /dev/null
+++ b/docs/images/database_security_encryption.png
Binary files differ
diff --git a/docs/images/database_security_encryption_advanced.png b/docs/images/database_security_encryption_advanced.png
new file mode 100644
index 000000000..cb68078e2
--- /dev/null
+++ b/docs/images/database_security_encryption_advanced.png
Binary files differ
diff --git a/docs/images/database_settings.png b/docs/images/database_settings.png
new file mode 100644
index 000000000..a9f34003d
--- /dev/null
+++ b/docs/images/database_settings.png
Binary files differ
diff --git a/docs/images/database_view.png b/docs/images/database_view.png
new file mode 100644
index 000000000..a4a1f31b8
--- /dev/null
+++ b/docs/images/database_view.png
Binary files differ
diff --git a/docs/images/edit_entry.png b/docs/images/edit_entry.png
new file mode 100644
index 000000000..80bdd1e56
--- /dev/null
+++ b/docs/images/edit_entry.png
Binary files differ
diff --git a/docs/images/edit_entry_attachments.png b/docs/images/edit_entry_attachments.png
new file mode 100644
index 000000000..42bef27da
--- /dev/null
+++ b/docs/images/edit_entry_attachments.png
Binary files differ
diff --git a/docs/images/edit_entry_attributes.png b/docs/images/edit_entry_attributes.png
new file mode 100644
index 000000000..047c4fd68
--- /dev/null
+++ b/docs/images/edit_entry_attributes.png
Binary files differ
diff --git a/docs/images/edit_entry_colors.png b/docs/images/edit_entry_colors.png
new file mode 100644
index 000000000..0c9482a82
--- /dev/null
+++ b/docs/images/edit_entry_colors.png
Binary files differ
diff --git a/docs/images/edit_entry_history.png b/docs/images/edit_entry_history.png
new file mode 100644
index 000000000..e16e3ec01
--- /dev/null
+++ b/docs/images/edit_entry_history.png
Binary files differ
diff --git a/docs/images/edit_entry_icons.png b/docs/images/edit_entry_icons.png
new file mode 100644
index 000000000..f86fca036
--- /dev/null
+++ b/docs/images/edit_entry_icons.png
Binary files differ
diff --git a/docs/images/edit_entry_properties.png b/docs/images/edit_entry_properties.png
new file mode 100644
index 000000000..c781192ae
--- /dev/null
+++ b/docs/images/edit_entry_properties.png
Binary files differ
diff --git a/docs/images/export_database.png b/docs/images/export_database.png
new file mode 100644
index 000000000..92a417ac0
--- /dev/null
+++ b/docs/images/export_database.png
Binary files differ
diff --git a/docs/images/install_wizard_1.png b/docs/images/install_wizard_1.png
new file mode 100644
index 000000000..a466f834b
--- /dev/null
+++ b/docs/images/install_wizard_1.png
Binary files differ
diff --git a/docs/images/install_wizard_2.png b/docs/images/install_wizard_2.png
new file mode 100644
index 000000000..b7c9c0712
--- /dev/null
+++ b/docs/images/install_wizard_2.png
Binary files differ
diff --git a/docs/images/keeshare_application_settings.png b/docs/images/keeshare_application_settings.png
new file mode 100644
index 000000000..a50302ef1
--- /dev/null
+++ b/docs/images/keeshare_application_settings.png
Binary files differ
diff --git a/docs/images/keeshare_group_settings.png b/docs/images/keeshare_group_settings.png
new file mode 100644
index 000000000..51febf41f
--- /dev/null
+++ b/docs/images/keeshare_group_settings.png
Binary files differ
diff --git a/docs/images/keeshare_shared_group.png b/docs/images/keeshare_shared_group.png
new file mode 100644
index 000000000..4d23aca89
--- /dev/null
+++ b/docs/images/keeshare_shared_group.png
Binary files differ
diff --git a/docs/images/kpxc_logo.png b/docs/images/kpxc_logo.png
new file mode 100644
index 000000000..9af29eb30
--- /dev/null
+++ b/docs/images/kpxc_logo.png
Binary files differ
diff --git a/docs/images/linux_store.png b/docs/images/linux_store.png
new file mode 100644
index 000000000..7c63ca7be
--- /dev/null
+++ b/docs/images/linux_store.png
Binary files differ
diff --git a/docs/images/macos_install.png b/docs/images/macos_install.png
new file mode 100644
index 000000000..f72222786
--- /dev/null
+++ b/docs/images/macos_install.png
Binary files differ
diff --git a/docs/images/main_interface.png b/docs/images/main_interface.png
new file mode 100644
index 000000000..80a564698
--- /dev/null
+++ b/docs/images/main_interface.png
Binary files differ
diff --git a/docs/images/new_db_wizard_1.png b/docs/images/new_db_wizard_1.png
new file mode 100644
index 000000000..360033543
--- /dev/null
+++ b/docs/images/new_db_wizard_1.png
Binary files differ
diff --git a/docs/images/new_db_wizard_2.png b/docs/images/new_db_wizard_2.png
new file mode 100644
index 000000000..3c384e1d5
--- /dev/null
+++ b/docs/images/new_db_wizard_2.png
Binary files differ
diff --git a/docs/images/new_db_wizard_3.png b/docs/images/new_db_wizard_3.png
new file mode 100644
index 000000000..e6ac46769
--- /dev/null
+++ b/docs/images/new_db_wizard_3.png
Binary files differ
diff --git a/docs/images/open_database.png b/docs/images/open_database.png
new file mode 100644
index 000000000..755f08caa
--- /dev/null
+++ b/docs/images/open_database.png
Binary files differ
diff --git a/docs/images/passphrase_generator.png b/docs/images/passphrase_generator.png
new file mode 100644
index 000000000..b032e227d
--- /dev/null
+++ b/docs/images/passphrase_generator.png
Binary files differ
diff --git a/docs/images/password_generator.png b/docs/images/password_generator.png
new file mode 100644
index 000000000..19d770135
--- /dev/null
+++ b/docs/images/password_generator.png
Binary files differ
diff --git a/docs/images/password_generator_advanced.png b/docs/images/password_generator_advanced.png
new file mode 100644
index 000000000..2536ad78e
--- /dev/null
+++ b/docs/images/password_generator_advanced.png
Binary files differ
diff --git a/docs/images/save_database_backup.png b/docs/images/save_database_backup.png
new file mode 100644
index 000000000..ad543b4c3
--- /dev/null
+++ b/docs/images/save_database_backup.png
Binary files differ
diff --git a/docs/images/sshagent_application_settings.png b/docs/images/sshagent_application_settings.png
new file mode 100644
index 000000000..1c9325a74
--- /dev/null
+++ b/docs/images/sshagent_application_settings.png
Binary files differ
diff --git a/docs/images/sshagent_context_menu.png b/docs/images/sshagent_context_menu.png
new file mode 100644
index 000000000..8bd280fde
--- /dev/null
+++ b/docs/images/sshagent_context_menu.png
Binary files differ
diff --git a/docs/images/sshagent_entry_settings.png b/docs/images/sshagent_entry_settings.png
new file mode 100644
index 000000000..263f55822
--- /dev/null
+++ b/docs/images/sshagent_entry_settings.png
Binary files differ
diff --git a/docs/images/sshagent_puttygen.png b/docs/images/sshagent_puttygen.png
new file mode 100644
index 000000000..0888f04a7
--- /dev/null
+++ b/docs/images/sshagent_puttygen.png
Binary files differ
diff --git a/docs/images/theme_comparison.png b/docs/images/theme_comparison.png
new file mode 100644
index 000000000..408bb892c
--- /dev/null
+++ b/docs/images/theme_comparison.png
Binary files differ
diff --git a/docs/images/theme_selection.png b/docs/images/theme_selection.png
new file mode 100644
index 000000000..162c51a9e
--- /dev/null
+++ b/docs/images/theme_selection.png
Binary files differ
diff --git a/docs/images/toolbar.png b/docs/images/toolbar.png
new file mode 100644
index 000000000..9fd94673e
--- /dev/null
+++ b/docs/images/toolbar.png
Binary files differ
diff --git a/docs/images/uac_dialog.png b/docs/images/uac_dialog.png
new file mode 100644
index 000000000..1477626c2
--- /dev/null
+++ b/docs/images/uac_dialog.png
Binary files differ
diff --git a/docs/images/unlock_database.png b/docs/images/unlock_database.png
new file mode 100644
index 000000000..5cd3c37d8
--- /dev/null
+++ b/docs/images/unlock_database.png
Binary files differ
diff --git a/docs/images/welcome_screen.png b/docs/images/welcome_screen.png
new file mode 100644
index 000000000..d035172b6
--- /dev/null
+++ b/docs/images/welcome_screen.png
Binary files differ
diff --git a/docs/man/keepassxc-cli.1.adoc b/docs/man/keepassxc-cli.1.adoc
new file mode 100644
index 000000000..13d3ec011
--- /dev/null
+++ b/docs/man/keepassxc-cli.1.adoc
@@ -0,0 +1,282 @@
+= keepassxc-cli(1)
+:docdate: 2020-07-05
+:doctype: manpage
+:manmanual: General Commands Manual
+
+== NAME
+keepassxc-cli - command line interface for the KeePassXC password manager.
+
+== SYNOPSIS
+*keepassxc-cli* _command_ [_options_]
+
+== DESCRIPTION
+*keepassxc-cli* is the command line interface for the *KeePassXC* password manager.
+It provides the ability to query and modify the entries of a KeePass database, directly from the command line.
+
+== COMMANDS
+*add* [_options_] <__database__> <__entry__>::
+ Adds a new entry to a database.
+ A password can be generated (_-g_ option), or a prompt can be displayed to input the password (_-p_ option).
+ The same password generation options as documented for the generate command can be used when the _-g_ option is set.
+
+*analyze* [_options_] <__database__>::
+ Analyzes passwords in a database for weaknesses.
+
+*clip* [_options_] <__database__> <__entry__> [_timeout_]::
+ Copies an attribute or the current TOTP (if the _-t_ option is specified) of a database entry to the clipboard.
+ If no attribute name is specified using the _-a_ option, the password is copied.
+ If multiple entries with the same name exist in different groups, only the attribute for the first one is copied.
+ For copying the attribute of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name.
+ Optionally, a timeout in seconds can be specified to automatically clear the clipboard.
+
+*close*::
+ In interactive mode, closes the currently opened database (see _open_).
+
+*db-create* [_options_] <__database__>::
+ Creates a new database with a password and/or a key file.
+ The key file will be created if the file that is referred to does not exist.
+ If both the key file and password are empty, no database will be created.
+
+*db-info* [_options_] <__database__>::
+ Show a database's information.
+
+*diceware* [_options_]::
+ Generates a random diceware passphrase.
+
+*edit* [_options_] <__database__> <__entry__>::
+ Edits a database entry.
+ A password can be generated (_-g_ option), or a prompt can be displayed to input the password (_-p_ option).
+ The same password generation options as documented for the generate command can be used when the _-g_ option is set.
+
+*estimate* [_options_] [_password_]::
+ Estimates the entropy of a password.
+ The password to estimate can be provided as a positional argument, or using the standard input.
+
+*exit*::
+ Exits interactive mode.
+ Synonymous with _quit_.
+
+*export* [_options_] <__database__>::
+ Exports the content of a database to standard output in the specified format (defaults to XML).
+
+*generate* [_options_]::
+ Generates a random password.
+
+*help* [_command_]::
+ Displays a list of available commands, or detailed information about the specified command.
+
+*import* [_options_] <__xml__> <__database__>::
+ Imports the contents of an XML database to the target database.
+
+*locate* [_options_] <__database__> <__term__>::
+ Locates all the entries that match a specific search term in a database.
+
+*ls* [_options_] <__database__> [_group_]::
+ Lists the contents of a group in a database.
+ If no group is specified, it will default to the root group.
+
+*merge* [_options_] <__database1__> <__database2__>::
+ Merges two databases together.
+ The first database file is going to be replaced by the result of the merge, for that reason it is advisable to keep a backup of the two database files before attempting a merge.
+ In the case that both databases make use of the same credentials, the _--same-credentials_ or _-s_ option can be used.
+
+*mkdir* [_options_] <__database__> <__group__>::
+ Adds a new group to a database.
+
+*mv* [_options_] <__database__> <__entry__> <__group__>::
+ Moves an entry to a new group.
+
+*open* [_options_] <__database__>::
+ Opens the given database in a shell-style interactive mode.
+ This is useful for performing multiple operations on a single database (e.g. _ls_ followed by _show_).
+
+*quit*::
+ Exits interactive mode.
+ Synonymous with _exit_.
+
+*rm* [_options_] <__database__> <__entry__>::
+ Removes an entry from a database.
+ If the database has a recycle bin, the entry will be moved there.
+ If the entry is already in the recycle bin, it will be removed permanently.
+
+*rmdir* [_options_] <__database__> <__group__>::
+ Removes a group from a database.
+ If the database has a recycle bin, the group will be moved there.
+ If the group is already in the recycle bin, it will be removed permanently.
+
+*show* [_options_] <__database__> <__entry__>::
+ Shows the title, username, password, URL and notes of a database entry.
+ Can also show the current TOTP.
+ Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the _clip_ command section also applies here.
+
+== OPTIONS
+=== General options
+*--debug-info*::
+ Displays debugging information.
+
+*-k*, *--key-file* <__path__>::
+ Specifies a path to a key file for unlocking the database.
+ In a merge operation this option, is used to specify the key file path for the first database.
+
+*--no-password*::
+ Deactivates the password key for the database.
+
+*-y*, *--yubikey* <__slot__>::
+ Specifies a yubikey slot for unlocking the database.
+ In a merge operation this option is used to specify the YubiKey slot for the first database.
+
+*-q*, *--quiet* <__path__>::
+ Silences password prompt and other secondary outputs.
+
+*-h*, *--help*::
+ Displays help information.
+
+*-v*, *--version*::
+ Displays the program version.
+
+=== Merge options
+*-d*, *--dry-run* <__path__>::
+ Prints the changes detected by the merge operation without making any changes to the database.
+
+*--key-file-from* <__path__>::
+ Sets the path of the key file for the second database.
+
+*--no-password-from*::
+ Deactivates password key for the database to merge from.
+
+*--yubikey-from* <__slot__>::
+ YubiKey slot for the second database.
+
+*-s*, *--same-credentials*::
+ Uses the same credentials for unlocking both databases.
+
+=== Add and edit options
+The same password generation options as documented for the generate command can be used with those 2 commands when the -g option is set.
+
+*-u*, *--username* <__username__>::
+ Specifies the username of the entry.
+
+*--url* <__url__>::
+ Specifies the URL of the entry.
+
+*-p*, *--password-prompt*::
+ Uses a password prompt for the entry's password.
+
+*-g*, *--generate*::
+ Generates a new password for the entry.
+
+=== Edit options
+*-t*, *--title* <__title__>::
+ Specifies the title of the entry.
+
+=== Estimate options
+*-a*, *--advanced*::
+ Performs advanced analysis on the password.
+
+=== Analyze options
+*-H*, *--hibp* <__filename__>::
+ Checks if any passwords have been publicly leaked, by comparing against the given list of password SHA-1 hashes, which must be in "Have I Been Pwned" format.
+ Such files are available from https://haveibeenpwned.com/Passwords;
+ note that they are large, and so this operation typically takes some time (minutes up to an hour or so).
+
+=== Clip options
+*-a*, *--attribute*::
+ Copies the specified attribute to the clipboard.
+ If no attribute is specified, the password attribute is the default.
+ For example, "_-a_ username" would copy the username to the clipboard.
+ [Default: password]
+
+*-t*, *--totp*::
+ Copies the current TOTP instead of the specified attribute to the clipboard.
+ Will report an error if no TOTP is configured for the entry.
+
+=== Create options
+*-k*, *--set-key-file* <__path__>::
+ Set the key file for the database.
+
+*-p*, *--set-password*::
+ Set a password for the database.
+
+*-t*, *--decryption-time* <__time__>::
+ Target decryption time in MS for the database.
+
+=== Show options
+*-a*, *--attributes* <__attribute__>...::
+ Shows the named attributes.
+ This option can be specified more than once, with each attribute shown one-per-line in the given order.
+ If no attributes are specified and _-t_ is not specified, a summary of the default attributes is given.
+ Protected attributes will be displayed in clear text if specified explicitly by this option.
+
+*-s*, *--show-protected*::
+ Shows the protected attributes in clear text.
+
+*-t*, *--totp*::
+ Also shows the current TOTP, reporting an error if no TOTP is configured for the entry.
+
+=== Diceware options
+*-W*, *--words* <__count__>::
+ Sets the desired number of words for the generated passphrase.
+ [Default: 7]
+
+*-w*, *--word-list* <__path__>::
+ Sets the Path of the wordlist for the diceware generator.
+ The wordlist must have > 1000 words, otherwise the program will fail.
+ If the wordlist has < 4000 words a warning will be printed to STDERR.
+
+=== Export options
+*-f*, *--format*::
+ Format to use when exporting.
+ Available choices are xml or csv.
+ Defaults to xml.
+
+=== List options
+*-R*, *--recursive*::
+ Recursively lists the elements of the group.
+
+*-f*, *--flatten*::
+ Flattens the output to single lines.
+ When this option is enabled, subgroups and subentries will be displayed with a relative group path instead of indentation.
+
+=== Generate options
+*-L*, *--length* <__length__>::
+ Sets the desired length for the generated password.
+ [Default: 16]
+
+*-l*, *--lower*::
+ Uses lowercase characters for the generated password.
+ [Default: Enabled]
+
+*-U*, *--upper*::
+ Uses uppercase characters for the generated password.
+ [Default: Enabled]
+
+*-n*, *--numeric*::
+ Uses numbers characters for the generated password.
+ [Default: Enabled]
+
+*-s*, *--special*::
+ Uses special characters for the generated password.
+ [Default: Disabled]
+
+*-e*, *--extended*::
+ Uses extended ASCII characters for the generated password.
+ [Default: Disabled]
+
+*-x*, *--exclude* <__chars__>::
+ Comma-separated list of characters to exclude from the generated password.
+ None is excluded by default.
+
+*--exclude-similar*::
+ Exclude similar looking characters.
+ [Default: Disabled]
+
+*--every-group*::
+ Include characters from every selected group.
+ [Default: Disabled]
+
+== REPORTING BUGS
+Bugs and feature requests can be reported on GitHub at https://github.com/keepassxreboot/keepassxc/issues.
+
+== AUTHOR
+This manual page was originally written by Manolis Agkopian <m.agkopian@gmail.com>,
+and is maintained by the KeePassXC Team <team@keepassxc.org>.
diff --git a/docs/man/keepassxc.1.adoc b/docs/man/keepassxc.1.adoc
new file mode 100644
index 000000000..965f7ac46
--- /dev/null
+++ b/docs/man/keepassxc.1.adoc
@@ -0,0 +1,41 @@
+= keepassxc(1)
+:docdate: 2020-07-05
+:doctype: manpage
+:manmanual: General Commands Manual
+
+== NAME
+keepassxc - password manager
+
+== SYNOPSIS
+*keepassxc* [_options_] [_filename(s)_]
+
+== DESCRIPTION
+*KeePassXC* is a free/open-source password manager or safe which helps you to manage your passwords in a secure way.
+The complete database is always encrypted with the industry-standard AES (alias Rijndael) encryption algorithm using a 256 bit key.
+KeePassXC uses a database format that is compatible with KeePass Password Safe.
+Your wallet works offline and requires no Internet connection.
+
+== OPTIONS
+*-h*, *--help*::
+ Displays this help.
+
+*-v*, *--version*::
+ Displays version information.
+
+*--config* <__config__>::
+ Path to a custom config file
+
+*--keyfile* <__keyfile__>::
+ Key file of the database
+
+*--pw-stdin*::
+ Read password of the database from stdin
+
+*--pw*, *--parent-window* <__handle__>::
+ Parent window handle
+
+*--debug-info*::
+ Displays debugging information.
+
+== AUTHOR
+This manual page is maintained by the KeePassXC Team <team@keepassxc.org>.
diff --git a/docs/styles/dark.css b/docs/styles/dark.css
new file mode 100644
index 000000000..90e632b3a
--- /dev/null
+++ b/docs/styles/dark.css
@@ -0,0 +1,541 @@
+@import url(https://fonts.googleapis.com/css?family=Noto+Sans);
+
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Uncomment @import statement below to use as custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.stretch{width:100%}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite::before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
+.clearfix::after,.float-group::after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menuref{color:#000}
+.menuseq b:not(.caret),.menuref{font-weight:inherit}
+.menuseq{word-spacing:-.02em}
+.menuseq b.caret{font-size:1.25em;line-height:.8}
+.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
+b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
+b.button::before{content:"[";padding:0 3px 0 2px}
+b.button::after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
+#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
+#content{margin-top:1.25em}
+#content::before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span::before{content:"\00a0\2013\00a0"}
+#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark::before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber::after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+@media screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#content{margin-bottom:.625em}
+.sect1{padding-bottom:.625em}
+@media screen and (min-width:768px){#content{margin-bottom:1.25em}
+.sect1{padding-bottom:1.25em}}
+.sect1:last-child{padding-bottom:0}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
+.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]::before{display:block}
+.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote::before{display:none}
+.verseblock{margin:0 1em 1.25em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 1em 1.25em;display:block}
+.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{word-spacing:0;line-height:1.6}
+.quoteblock.abstract blockquote::before,.quoteblock.abstract p::before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+p.tableblock:last-child{margin-bottom:0}
+td.tableblock>.content{margin-bottom:-1.25em}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
+table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
+table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
+table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
+table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
+table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot,table.frame-ends{border-width:1px 0}
+table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}
+table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
+ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
+ul.unstyled,ol.unstyled{margin-left:0}
+ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
+ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+ul.inline>li{margin-left:1.25em}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
+.colist td:not([class]):first-child img{max-width:none}
+.colist td:not([class]):last-child{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+a span.icon>.fa{cursor:inherit}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]::after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@page{margin:1.25cm .75cm}
+@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+html{font-size:80%}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]::after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span::before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]::before{display:block}
+#footer{padding:0 .9375em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+.sect1{padding:0!important}
+.sect1+.sect1{border:0}
+#footer{background:none}
+#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
+@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
+
+
+
+/* CUSTOMISATIONS */
+/* Change the values in root for quick customisation. If you want even more fine grain... venture further. */
+:root {
+--textcolor: #CACBCE;
+--textcoloralt: #e7b649;
+--background: #3B3B3D;
+--sidebarbackground: #2C2C30;
+--header1color: #4adb22;
+--header2color: #6de597;
+--quotecolor: #20b82b;
+--toccolor: #f3bf4a;
+--toccolorhover: #eece83;
+--linkcolor: #6de597;
+--linkhovercolor: #8fdaa9;
+--tipcolor: #f0f0f0;
+--notecolor: #f3bf4a;
+--warningcolor: #FF7D7D;
+}
+
+/* Text styles */
+
+body{font-family: "Noto Sans",sans-serif;background-color: var(--background);color:var(--textcolor);}
+
+h1{color:var(--header1color) !important;font-family:"Noto Sans",sans-serif;}
+h2,h3,h4,h5,h6{color:var(--header2color) !important;font-family:"Noto Sans",sans-serif;}
+.title{color:var(--textcolor) !important;font-family:"Noto Sans",sans-serif;font-style: normal; font-weight: normal;}
+p{font-family: "Noto Sans",sans-serif !important}
+#toc.toc2 a:link{color:var(--toccolor)}
+#toc.toc2 a:hover{color:var(--toccolorhover)}
+blockquote{color:var(--quotecolor) !important}
+.quoteblock{color:var(--textcolor)}
+code{color:var(--textcoloralt);background-color: var(--sidebarbackground) !important}
+
+
+/* Table styles */
+th{background-color: var(--background);color: var(--textcolor) !important;}
+td{background-color: var(--background);color: var(--textcoloralt) !important;}
+
+
+#toc.toc2{background-color:var(--sidebarbackground);}
+#toctitle{color:var(--textcolor);}
+
+/* Responsiveness fixes */
+video {
+ max-width: 100%;
+}
+
+@media all and (max-width: 600px) {
+ table {
+ width: 55vw!important;
+ font-size: 3vw;
+ }
+}
+
+.exampleblock > .content {
+ background-color: var(--background);
+}
+
+a {color: var(--linkcolor);}
+a:hover {color: var(--linkhovercolor);}
+
+.admonitionblock.tip td.content, .admonitionblock td.icon .icon-tip::before {
+ text-shadow: none;
+ color: var(--tipcolor) !important;
+}
+
+.admonitionblock.note td.content, .admonitionblock td.icon .icon-note::before {
+ color: var(--notecolor) !important;
+}
+
+.admonitionblock.important td.content, .admonitionblock td.icon .icon-important::before {
+ color: var(--warningcolor) !important;
+}
+
+.admonitionblock.warning td.content, .admonitionblock td.icon .icon-warning::before {
+ color: var(--warningcolor) !important;
+}
+
+#preamble > .sectionbody > .paragraph:first-of-type p {
+ color: var(--textcolor);
+}
+
+.quoteblock blockquote::before {
+ color: var(--header1color);
+}
+.quoteblock .attribution cite, .verseblock .attribution cite {
+ color: var(--textcolor);
+}
+.verseblock pre {
+ color: var(--textcolor);
+}
+.quoteblock blockquote, .quoteblock blockquote p {
+ color: var(--textcolor);
+}
+
+.sidebarblock {
+ background: var(--sidebarbackground);
+}
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint {
+ background: var(--sidebarbackground);
+ color: var(--textcolor);
+}
+
+#header .details {
+ color: var(--textcolor);
+}
+#header .details span.email a {
+ color: var(--toccolor);
+}
+
+.title {
+ font-size: 3em;
+}
+.subtitle {
+ font-size: 1.5em;
+} \ No newline at end of file
diff --git a/docs/styles/pdf_theme.yml b/docs/styles/pdf_theme.yml
new file mode 100644
index 000000000..2313279da
--- /dev/null
+++ b/docs/styles/pdf_theme.yml
@@ -0,0 +1,30 @@
+page:
+ layout: portrait
+ margin: [0.75in, 1in, 0.75in, 1in]
+ size: Letter
+base:
+ font-color: #333333
+ font-family: Times-Roman
+ font-size: 12
+ line-height-length: 17
+ line-height: $base-line-height-length / $base-font-size
+vertical-spacing: $base-line-height-length
+heading:
+ font-color: #262626
+ font-size: 17
+ font-style: bold
+ line-height: 1.2
+ margin-bottom: $vertical-spacing
+link:
+ font-color: #002FA7
+outline-list:
+ indent: $base-font-size * 1.5
+footer:
+ height: $base-line-height-length * 2.5
+ line-height: 1
+ recto:
+ right:
+ content: '{page-number}'
+ verso:
+ left:
+ content: $footer-recto-right-content \ No newline at end of file
diff --git a/docs/topics/.sharedheader b/docs/topics/.sharedheader
new file mode 100644
index 000000000..715ec3c0f
--- /dev/null
+++ b/docs/topics/.sharedheader
@@ -0,0 +1,7 @@
+KeePassXC Team <team@keepassxc.org>
+v2.6.0
+:data-uri:
+:homepage: https://keepassxc.org
+:stylesheet: ../styles/dark.css
+:icons: font
+:toc: left
diff --git a/docs/topics/AutoType.adoc b/docs/topics/AutoType.adoc
new file mode 100644
index 000000000..abe1afeef
--- /dev/null
+++ b/docs/topics/AutoType.adoc
@@ -0,0 +1,84 @@
+= KeePassXC - Auto-Type
+:imagesdir: ../images
+
+// tag::content[]
+== Auto-Type
+The Auto-Type feature acts like a virtual keyboard to populate data from your entries directly into the corresponding websites or applications that you use. You can use the Auto-Type feature on a global level or entry level. Each entry can be configured to be associated with a particular window title and multiple Auto-Type sequences can be pre-defined and selected upon use.
+
+NOTE: Auto-Type is a completely separate feature from Browser Integration. You do not need to have the KeePassXC browser extension installed in your browser to use Auto-Type.
+
+=== Configure Global Auto-Type
+You can define a global Auto-Type hotkey that starts the Auto-Type process. To configure the hotkey, perform the following steps:
+
+1. Navigate to _Tools_ -> _Settings_ -> Auto-Type tab *(1)*. Click into the _Global Auto-Type shortcut_ box and press the desired key combination that will trigger the Auto-Type process *(2)*.
++
+.Auto-Type settings
+image::autotype_settings.png[]
++
+You can configure additional Auto-Type settings in this window such as start delay, inter-key typing delay, and matching options. If Auto-Type is not working well for you, try adjusting the default delays.
+
+=== Configure Auto-Type Sequences
+Each entry in your database can have multiple Auto-Type sequences associated with various window titles. Simulated key presses can be sent to any other currently open window of your choice (web browser windows, login dialogs boxes, and so on). When the Global Auto-Type hotkey is pressed, KeePassXC will search your database for entries matching the current selected window title.
+
+NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the `Tab` key, then types the password of the entry and finally presses the `Enter` key.
+
+To configure Auto-Type sequences for your entries, perform the following steps:
+
+1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the `+` button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*. You can use wildcard `*` to match any value (e.g., when a window title contains a filename or website name).
++
+.Auto-Type entry sequences
+image::autotype_entry_sequences.png[]
+
+2. _(Optional)_ Define a custom auto-type sequence for each window title match by selecting the _Use specific sequence for this association_ checkbox. Sequence action codes and field placeholders are detailed in the following table. A complete list of supported actions and placeholders can be found at https://keepass.info/help/base/autotype.html#autoseq[KeePass Auto-Type Action Codes] and https://keepass.info/help/base/placeholders.html[KeePass Placeholders]. Action codes and placeholders are not case sensitive.
++
+[grid=rows, frame=none, width=70%]
+|===
+|Action Code |Description
+
+|{TAB}, {ENTER}, {SPACE}, {INSERT}, {DELETE}, {HOME}, {END}, {PGUP}, {PGDN}, {BACKSPACE}, {CAPSLOCK}, {ESC}
+|Press the corresponding keyboard key
+
+|{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key
+|{F1}, {F2}, ..., {F16} |Press F1, F2, etc.
+|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively
+|{DELAY=X} |Set key press delay to X milliseconds
+|{DELAY X} |Delay typing start by X milliseconds
+|{CLEARFIELD} |Clear the input field before typing
+|{TOTP} |Insert calculated TOTP value (if configured)
+|{<ACTION> X} |Repeat <ACTION> X times (e.g., {SPACE 5} inserts five spaces)
+|===
++
+[grid=rows, frame=none, width=70%]
+|===
+|Placeholder |Description
+
+|{TITLE} |Entry Title
+|{USERNAME} |Username
+|{PASSWORD} |Password
+|{URL} |URL
+|{NOTES} |Notes
+|{TOTP} |Current TOTP value (if configured)
+|{DT_SIMPLE} |Current date-time
+|{DB_DIR} |Absolute directory path for database file
+|{S:<ATTRIBUTE_NAME>} |Value for the given attribute name
+|{REF:<FIELD>@<SEARCH_IN>:<SEARCH_TEXT>} |Search for a field in another entry using the reference syntax.
+|===
+
+=== Performing Global Auto-Type
+The global Auto-Type keyboard shortcut is used when you have focus on the window you want to type into. To make use of this feature, you must have previously configured an Auto-Type hotkey.
+
+Pressing the global Auto-Type hotkey cause KeePassXC to search the database for entries that match the window title. Multiple matches may be returned and will cause the sequence selection dialog to appear. Click on a sequence line will immediately execute the Auto-Type action. A search box is also available in case numerous matches are returned.
+
+.Auto-Type sequence selection
+image::autotype_selection_dialog.png[,70%]
+
+TIP: The _Sequence_ column will only appear when there are different sequences defined by one or more entries displayed in the selection dialog.
+
+=== Performing Entry-Level Auto-Type
+You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing `Ctrl+Shift+V`.
+
+WARNING: Be careful when using Entry-Level Auto-Type as you can inadvertently type into the wrong window. For example, a chat window or email.
+
+.Entry-Level Auto-Type
+image::autotype_entrylevel.png[]
+// end::content[] \ No newline at end of file
diff --git a/docs/topics/BrowserPlugin.adoc b/docs/topics/BrowserPlugin.adoc
new file mode 100644
index 000000000..0331eda7f
--- /dev/null
+++ b/docs/topics/BrowserPlugin.adoc
@@ -0,0 +1,108 @@
+= KeePassXC - Browser Plugin
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Setup Browser Integration
+The KeePassXC-Browser extension is installed within your web browser so that you can automatically pull usernames and passwords from KeePassXC and populate them directly into website fields. It is a very useful and secure extension that enhances your productivity while using KeePassXC. With this extension, you do not need to manually copy the data from your KeePassXC database and paste it into the website fields.
+
+The KeePassXC-Browser extension is available on the following web browsers:
+
+* Google Chrome, Vivaldi, and Brave
+* Mozilla Firefox and Tor-Browser
+* Microsoft Edge
+* Chromium
+
+=== Install the Browser Extension
+You can download the KeePassXC-Browser extension from your web browser. To download the KeePassXC-Browser extension, perform the following steps:
+
+1. Click the link corresponding to your browser:
+ * https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk[Chrome, Chromium, Vivaldi, and Brave]
+ * https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser[Mozilla Firefox and Tor-Browser]
+ * https://microsoftedge.microsoft.com/addons/detail/keepassxcbrowser/pdffhmdngciaglkoonimfcmckehcpafo[Microsoft Edge]
+
+2. Click the button to install/add the extension to the browser. Accept any confirmation dialogs.
+
+=== Configure KeePassXC-Browser
+To start using KeePassXC-Browser, you must configure it so that it can communicate with the KeePassXC application on your desktop.
+
+To configure KeePassXC-Browser, perform the following steps:
+
+1. Open the KeePassXC application on your desktop and navigate to Tools > Settings.
+
+2. Click the Browser Integration option on the left-hand side *(1)*. The following screen appears:
++
+.Browser Settings
+image::browser_settings.png[]
+
+3. Click the _Enable browser integration_ checkbox *(2)*. Then select the browsers for which you have downloaded the KeePassXC-Browser extension *(3)* and click *OK*.
+
+4. Ensure your database is unlocked, then open (or restart) your browser.
+
+5. Click the KeePassXC-Browser extension icon *(A)* in your browser (see figure below). A pop-up window appears.
++
+.Connect Extension to KeePassXC
+image::browser_extension_connect.png[,80%]
+
+6. Click the _Connect_ button *(B)* in the pop-up window to complete integrating the KeePassXC-Browser extension with your KeePassXC desktop application.
+
+7. You are now prompted to enter a unique name to identify the connection between this browser and your database. Enter a unique name in the field (e.g., firefox-laptop) and click the _Save and allow access_ button.
++
+.Extension Association Dialog
+image::browser_extension_association.png[,80%]
+
+WARNING: If you reuse a connection name in a database, the previous browser connection will be overwritten and prevent access.
+
+=== Using the Browser Extension
+The KeePassXC-Browser extension lets you automatically populate the entries from your KeePassXC database into the fields on websites you visit. To do so, perform the following steps:
+
+1. Open your KeePassXC desktop application and unlock your database.
+
+2. Open your web browser. The KeePassXC-Browser extension icon in your browser window will change based on its connection state. The figure below shows the different states.
++
+*(A)* KeePassXC is not running or is disconnected +
+*(B)* Connected to KeePassXC, but database is locked +
+*\(C)* Connected to KeePassXC and ready to use
++
+.Extension Icon States
+image::browser_extension_icons.png[,70%]
+
+3. If the KeePassXC desktop application is not connected with the KeePassXC-Browser extension, click the extension icon in your web browser and click _Reload_ from the pop-up window as shown in the following screen.
++
+.Reload Extension Connection
+image::browser_extension_reload.png[,80%]
+
+4. Open the URL for which you want to use with your database. If you have previously created an entry in your database then the KeePassXC-Browser Confirm Access dialog may appear:
++
+.Confirm Access Dialog
+image::browser_confirm_access_dialog.png[,80%]
+
+5. Ensure the credentials you want use are checked, then click *(A)* Remember _(optional)_, then click _Allow Selected_ *(B)*.
+
+6. In your website, the KeePassXC icon will appear in the username field of the login form *(A)*. Click the icon to populate the field with your stored credentials. If you have more than one credential for this website, a dropdown will appear to choose the one to use.
++
+.Fill Credentials
+image::browser_fill_credentials.png[,80%]
+
+// tag::advanced[]
+=== Advanced Usage
+You can configure unique browser integration behavior for each entry. This allows you to add multiple URLs to an entry, hide an entry from the browser integration, and more. To access these settings, open an entry for editing then click on _Browser Integration_ option in the left-hand menu *(1)*.
+
+After opening the settings you can add any number of additional URLs by clicking the _Add_ button *(2)* and typing the URL in the list to the left *(3)*.
+
+.Entry browser settings
+image::browser_entry_settings.png[]
+
+Database-wide operations are available in the database settings. To access these use the _Database_ -> _Database settings..._ menu option. Click on _Browser Integration_ on the left-hand menu. From here you can disconnect all browsers, convert legacy KeePass-HTTP settings, reset all entry-level settings, and refresh the database root group ID (useful when making copies of your database file).
+
+.Database browser settings
+image::browser_database_settings.png[]
+
+Finally, advanced application-wide settings are available in the Browser Integration tab of the application settings.
+
+WARNING: We do not recommend changing any of these settings as they may break the browser integration plugin.
+
+.Advanced browser settings
+image::browser_advanced_settings.png[]
+// end::advanced[]
+// end::content[]
diff --git a/docs/topics/DatabaseOperations.adoc b/docs/topics/DatabaseOperations.adoc
new file mode 100644
index 000000000..eafe861b6
--- /dev/null
+++ b/docs/topics/DatabaseOperations.adoc
@@ -0,0 +1,296 @@
+= KeePassXC - Database Operations
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Database Operations
+=== Creating Your First Database
+To start using KeePassXC, you need to first create a database that will store the password and other details.
+
+To create a database, perform the following steps:
+
+1. Open your KeePassXC application. Click the create new database button *(A)*:
++
+.Create database - Welcome screen
+image::welcome_screen.png[]
+
+2. The database creation wizard appears. Enter the desired database name and a short description (optional):
++
+.Create database - General information
+image::new_db_wizard_1.png[,80%]
+
+3. Click Continue. The Encryption Settings screen appears, we don't recommend making any changes besides increasing or decreasing the decryption time using the slider. Setting the Decryption Time slider at a higher values means that the database will have higher level of protection but the time taken by the database to open will increase.
++
+.Create database - Encryption settings
+image::new_db_wizard_2.png[,80%]
+
+4. Click the Continue button. The Database Credentials screen appears, enter your desired database password. We recommend using a long, randomized password.
++
+.Create database - Database credentials
+image::new_db_wizard_3.png[,80%]
++
+*(A)* Open the password generator +
+*(B)* Toggle password visibility
++
+NOTE: Keep this password for your database safe. Either memorize it or note it down somewhere. Losing the database password might result in permanent locking of your database and you will not be able to retrieve information stored in the database.
+
+5. Click Done. You will be prompted to select a location to save your database file. The database file is saved on to your computer with the default `.kdbx` extension. You can store your database wherever you wish, it is fully encrypted at all times preventing unauthorized access.
+
+=== Opening an Existing Database
+To open an existing database, perform the following steps:
+
+1. Open your KeePassXC application. Click the Open existing database button *(A)* or select a recent database from the Recent Databases list *(B)*.
++
+.Open an existing database
+image::open_database.png[]
+
+2. Navigate to the location of the your database on your computer and open the database file. The database unlock screen will appear:
++
+.Database unlock screen
+image::unlock_database.png[]
+
+3. Enter the password for your database.
+
+4. _(Optional)_ Browse for the Key File if you have chosen it as an additional authentication factor while creating the database. Refer to the KeePassXC User Guide for more information on setting a Key File as an additional authentication factor.
+
+5. Click *OK*. The database opens and the following screen is displayed:
++
+.Unlocked database
+image::database_view.png[]
+
+=== Adding an Entry
+All the details such as usernames, passwords, URLs, attachments, notes, and so on are stored in database entries. You can create as many entries as you want in the database.
+
+To add an entry, perform the following step:
+
+1. Navigate to Entries > New Entry (Or, press Ctrl+N). The following screen appears:
++
+.Adding a new entry
+image::edit_entry.png[]
+
+2. Enter a desired title for the entry, username, password, URL, and notes on this screen.
+
+3. _(Optional)_ Select the Expires check-box to set the expiry date for the password. You can manually enter the date and time or click the Presets button to select a expiry date and time for your password.
+
+4. Click *OK* to add the entry to your database.
+
+=== Editing an Entry
+To edit the details in an entry, perform the following steps:
+
+1. Select the entry you want to edit.
+
+2. Press `Enter`, click the edit toolbar icon, or right-click and select Edit Entry from the menu.
+
+3. Make the desired changes.
+
+4. Click *OK*.
+
+=== Deleting an Entry
+To delete an entry, perform the following steps:
+
+1. Select the entry you want to delete and press the `Delete` button on your keyboard.
+
+2. You will be prompted to move the entry to the Recycle Bin (if enabled).
++
+NOTE: You can disable the recycle bin within the Database Settings. If the recycle bin is disabled then deleted entries will be permanently removed from the database.
+
+3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the `Delete` button on your keyboard.
+
+// tag::advanced[]
+=== Clone an Entry
+Creating a clone of an entry provides you a ready-to-use template for creating new entries with similar details of a master entry.
+
+To create a clone of an existing entry, perform the following steps:
+
+1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press `Ctrl+K`.
++
+.Clone entry from context menu
+image::clone_entry.png[]
+
+2. The clone dialog will appear.
++
+.Clone entry dialog
+image::clone_entry_dialog.png[,70%]
+ * Select the Append ‘ - Clone’ to title check-box to create a new entry with the word Clone as the suffix to the name of the new entry.
+ * Select the Replace username and password with references check-box to create the new entry where the username and the password fields contain the references to the username and password to the master entry.
+ * Select the Copy history checkbox to copy the history of the master entry to the clone.
+
+3. If you chose to replace username and password entries with references, then the new entry will point these fields to the original entry's values. Changing the original entry will automatically change the resolved value of the cloned entry. This is useful if you have multiple accounts for the same service that use a similar username or password combination.
++
+.References in a cloned entry
+image::clone_entry_references.png[]
+
+4. You can create your own references using the following syntax:
++
+`{REF:<ShortCode>@I:<UUID>}`
++
+Where `<UUID>` is the Unique Identifier of the entry to pull data from and `<ShortCode>` is from the following:
++
+ * T - Title
+ * U - Username
+ * P - Password
+ * A - URL
+ * N - Notes
+ * I - UUID
+
+== Searching the Database
+KeePassXC provides an enhanced and granular search features the enables you to search for specific entries in the databases using the different modifiers, wild card characters, and logical operators.
+
+=== Modifiers and Fields
+[grid=rows, frame=none, width=70%]
+|===
+|Modifier |Description
+
+|- |Exclude this term from results
+|+ |Match this term exactly
+|* |Term is handled as a regular expression
+|===
+
+The following fields can be searched along with their abbreviated name in parenthesis:
+
+* Title (t)
+* Username (u)
+* Password (p, pw)
+* URL
+* Notes (n)
+* Attribute (attr)
+* Attachment (attach)
+* Group (g)
+
+=== Wild Card Characters and Logical Operators
+[grid=rows, frame=none, width=70%]
+|===
+|Wild Card Character |Description
+
+|* |Match anything
+|? |Match one character
+|\| |Logical OR
+|===
+
+=== Sample Search Queries
+The following tables lists a few samples search queries for your reference:
+
+|===
+|Query |Description
+
+|`user:johnsmith url:www.google.com`
+|Searches the Username field for johnsmith and the URL field for www.google.com.
+
+|`user:john\|smith`
+|Searches the Username field for john OR smith.
+
+|`+user:johnsmith -url:www.google.com *notes:"secret note \d"`
+|Search the username field for exactly johnsmith, the URL must not contain www.google.com, and notes contains secret note [digit].
+|===
+
+== Advanced Entry Options
+=== Additional Attributes
+A lot of applications and web sites now require to provide additional information when you create accounts. The additional information is used to block hackers if any suspicious activity is detected. In addition, the additional information you provide can be used to reset passwords if you forget them. You can also store arbitrary information here that can be copied to the clipboard or Auto-Typed using the `{S:<ATTR_NAME}` action code.
+
+To protect an attribute from being displayed by default, activate the _Protect_ checkbox *(A)*. To show the contents of the attribute while keeping it protected, press the _Reveal_ button *(B)*.
+
+.Additional attributes example
+image::edit_entry_attributes.png[]
+
+=== Attachments
+You can attach files to any entry in your database by pressing the _Add_ button *(A)*. These files are added to the database and stored as encrypted binaries. You can open, save, or delete attachments from this interface *(B)*.
+
+NOTE: When you try to open the attached file, KeePassXC extracts the attachment to a temporary file and opens it using the default application associated with the file type. After finishing viewing or editing the file, you can choose between importing or discarding the changes that you made to the temporary file. KeePassXC securely deletes the temporary file by overwriting it.
+
+.Attachments interface
+image::edit_entry_attachments.png[]
+
+=== Foreground and Background Color
+You can change the foreground *(A)* and/or background *(B)* color that this entry will use in the entry lists. Click the corresponding box to open the color picker dialog.
+
+.Color picker dialog
+image::edit_entry_colors.png[]
+
+=== Icons
+You can select an icon to be displayed with each entry for easy identification. KeePassXC comes with a set of default icons that you can use or you can use your own custom icons. If you defined a URL with an entry, you can also download the favorite icon for that particular website.
+
+NOTE: To delete a custom icon, select the item to be deleted and click the _Delete custom icon_ button.
+
+.Entry icon selection
+image::edit_entry_icons.png[]
+
+TIP: Each KeePass application has different default icons. If you use a mobile app or KeePass2, be aware that the default icons may not be exactly correspond to the KeePassXC icons.
+
+=== Properties
+KeePassXC lets you view the basic properties such as date and time of creation, modification, and when last accessed. This is also where you can retrieve an entry's UUID for use in references.
+
+.Entry properties view
+image::edit_entry_properties.png[]
+
+=== History
+KeePassXC maintains a history of changes you make to your entries. Each time you change an entry, KeePassXC automatically creates a backup copy of the current, non-modified entry before saving the new values. You can view the changes you made previously, restore, and delete the history of changes you made.
+
+ * Show: Display this history item for review, a read-only copy of the entry will be shown.
+ * Restore: Reinstate the selected history item as the active entry details.
+ * Delete: Delete the selected history item.
+ * Delete All: Delete the entire history for this entry.
+
+.Entry history view
+image::edit_entry_history.png[]
+
+NOTE: Restoring an old history item will store the current entry settings as a new history item.
+
+== Database Settings
+At any point of time, you can change the settings for your database. To make changes to the general settings, perform the following steps:
+
+1. Navigate to _Database_ -> _Database settings_. The following screen appears:
++
+.Database settings
+image::database_settings.png[]
+
+2. Click the General button in the left-hand menu bar to access the following settings:
+ * *Database name:* This is the default identifier for your database and is shown in the tab bar and title bar (when active). You can change this name as desired.
+ * *Database description:* Provide some meaningful description for your database.
+ * *Default username:* Provide a default username for all new entries that you create in this database.
+ * *Max history items:* This is the maximum number of history items that are stored for each entry. When you set this to 0, no history will be saved. Set this value to a low value to prevent the database from getting too large (we recommend no more than 10).
+ * *Max. history size:* When the history of an entry gets above this size, it is truncated. For example, this happens when entries have large attachments. Set this value small to prevent the database from getting too large (we recommend 6 MiB).
+ * *Use recycle bin:* Select this check-box if you want deleted entries to move to the recycle bin instead of being permanently removed. The recycle bin will be created if it does not already exist after your first deletion. To delete entries permanently, you must empty the recycle bin manually.
+ * *Enable compression:* KeePassXC databases can be compressed before being encrypted. Compression reduces the size of the database and does not have any appreciable affect on speed. It is recommended to always save databases with compression.
+
+3. Click the Security button in the left-hand menu bar to change your database credentials and change encryption settings.
++
+.Database security
+image::database_security.png[]
+
+4. Here you can change your database password or add/remove additional credentials to protect your database. KeePassXC supports adding a randomly generated, static key file and hardware keys such as YubiKey and OnlyKey. To add a key file, click _Add Key File_ and either browse for an existing file or generate a new one *(A)*. To add a hardware key, click _Add YubiKey Challenge-Response_, plug in your hardware key, then click refresh *(B)*.
++
+.Database credentials
+image::database_security_credentials.png[]
+
+5. Encryption settings allows you to change the average time it takes to encrypt and decrypt the database. The longer time that is chosen, the harder it will be to brute force attack your database. *We recommend a setting of one second.*
++
+.Database encryption
+image::database_security_encryption.png[]
++
+WARNING: Encryption time is dependent on your computer's hardware. If sharing a database with a mobile device, be mindful that it will likely take two to four times longer to access and save your database than on your home computer.
+
+6. Advanced encryption settings can be accessed by clicking the _Advanced Settings_ checkbox in the lower left-hand corner. These settings are only meant for people who know what they mean. *We do not recommend touching these settings.*
++
+.Database encryption advanced settings
+image::database_security_encryption_advanced.png[]
++
+The following key derivation functions are supported:
+
+ * AES-KDF (KDBX 4 and KDBX 3.1): This key derivation function is based on iterating AES. Users can change the number of iterations. The more iterations, the harder are dictionary and guessing attacks, but also database loading/saving takes more time (linearly). KDBX 3.1 only supports AES-KDF; any other key derivation function, like for instance Argon2, requires KDBX 4.
+
+ * Argon2 (KDBX 4 - recommended): KDBX 4, the Argon2 key derivation function can be used for transforming the composite master key (as protection against dictionary attacks). The main advantage of Argon2 over AES-KDF is that it provides a better resistance against GPU/ASIC attacks (due to being a memory-hard function). The number of iterations scales linearly with the required time. By increasing the memory parameter, GPU/ASIC attacks become harder (and the required time increases). The parallelism parameter can be used to specify how many threads should be used.
+// end::advanced[]
+
+== Storing a Database File
+The database file that you create might contain highly sensitive data and must be stored in a very secure way. You must make sure that the database is always protected with a strong and long password. The database file that is protected with a strong and long password is secure and encrypted while stored on your computer or cloud storage service.
+
+Make sure that the database file is stored in a folder that is secure. Make sure that you or someone else does not accidentally delete the database file. Deletion of the database file will result in the total loss of your information and a lot of inconvenience to manually retrieve your logins for various web applications. You must not share your database file with anyone unless absolutely necessary.
+
+== Backing up a Database File
+It is a good practice to create copies of your database file and store the copies of your database on a different computer, smart phone, or cloud storage space such a Google Drive or Microsoft OneDrive. Backups can be created automatically by selecting the _Backup database file before saving_ option in the application settings. Additionally, you can create a backup on-demand using the _Database_ -> _Save Database Backup..._ menu feature.
+
+.Saving a database backup
+image::save_database_backup.png[,40%]
+
+Creating backups for your database give you a peace of mind should you lose one copy of your database. You can quickly retrieve the copy of your database and start using it.
+// end::content[]
diff --git a/docs/topics/Disclaimers.adoc b/docs/topics/Disclaimers.adoc
new file mode 100644
index 000000000..a8e9be57c
--- /dev/null
+++ b/docs/topics/Disclaimers.adoc
@@ -0,0 +1,32 @@
+== License and Disclaimers
+
+KeePassXC is licensed with the
+https://github.com/keepassxreboot/keepassxc/blob/master/LICENSE.GPL-3[GNU General Public License Version 3].
+All copyrights and additional licenses are recorded in
+https://github.com/keepassxreboot/keepassxc/blob/master/COPYING[COPYING].
+
+=== Disclaimer of Warranty
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+Except when otherwise stated in writing the copyright holders and/or other parties provide the program "as is" without
+Warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of
+Merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program
+Is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction.
+
+=== Limitation of Liability
+
+In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party
+Who modifies and/or conveys the program as permitted above, be liable to you for damages, including any general,
+Special, incidental or consequential damages arising out of the use or inability to use the program (including but not
+Limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of
+The program to operate with any other programs), even if such holder or other party has been advised of the possibility
+Of such damages.
+
+== Contact Us
+
+We are committed to continually improve KeePassXC through customer experience and your feedback is important to us.
+Please send us your feedback or comments to team@keepassxc.org.
+To report issues, visit: https://github.com/keepassxreboot/keepassxc.
+
+Thank You, +
+Team KeePassXC
diff --git a/docs/topics/DownloadInstall.adoc b/docs/topics/DownloadInstall.adoc
new file mode 100644
index 000000000..4e17c66bc
--- /dev/null
+++ b/docs/topics/DownloadInstall.adoc
@@ -0,0 +1,60 @@
+= KeePassXC - Download and Install
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Downloading KeePassXC
+KeePassXC is available for download for the following operating systems and platforms:
+
+* Microsoft Windows
+** Portable and MSI Installer (64-bit and 32-bit)
+* Linux - Official Cross-Distribution Packages
+** AppImage and Snap Package
+* Linux - Distribution-Specific Packages
+** Ubuntu, Debian, Arch Linux, Gentoo, Fedora, CentOS, and OpenSUSE
+* macOS
+** DMG Installer, Homebrew Cask
+
+To download the KeePassXC installer for your desired platform, visit https://keepassxc.org/download or directly from our https://github.com/keepassxreboot/keepassxc/releases[GitHub Releases].
+
+NOTE: KeePassXC is open-source software and may be available on other websites that are unaffiliated with Team KeePassXC. *We strongly discourage downloading KeePassXC from third-party websites.*
+
+Before installing KeePassXC, it is recommended that you verify that your downloaded installer matches the signature, which is published alongside the release package. By verifying the signatures of KeePassXC releases, you can verify the authenticity and integrity of the downloaded installation file. This guarantees that the file you downloaded was originally created by the KeePassXC Team and its contents have not been tampered with.
+
+To know more about the steps to verify the authenticity and integrity of your downloaded package, visit https://keepassxc.org/verifying-signatures.
+
+=== Microsoft Windows
+The Windows MSI installer is signed by a secure certificate owned by DroidMonkey Apps, LLC. If you do not see this dialog when installing the application, click *NO* and download the installer from https://keepassxc.org.
+
+.Windows UAC Dialog
+image::uac_dialog.png[50%]
+
+Installing KeePassXC is a simple process. In the following example, installation steps for KeePassXC on Microsoft Windows are described. Installing KeePassXC on other operating systems is also a simple process, which you can accomplish by using the native installers. To know more about the installation instructions on the other operating systems, refer to the KeePassXC User Manual.
+
+To install KeePassXC on Microsoft Windows, perform the following steps:
+
+1. Double click on the KeePassXC-Y.Y.Y-WinZZ.msi file. Here, Y.Y.Y represents the version of the software and ZZ represents the 32-bit/64-bit version of the Microsoft Windows operating system.
++
+.Install wizard
+image::install_wizard_1.png[,80%]
+
+2. Click Next and follow the simple instructions on the KeepPassXC Setup Wizard to complete the installation. You will have the option to choose your install location, add a desktop shortcut, and launch on startup.
++
+.Install wizard (cont)
+image::install_wizard_2.png[,80%]
+
+=== Linux
+You can easily download the KeePassXC installer for Linux. When you search for KeePassXC, multiple options are displayed as shown in the following screen:
+
+.Ubuntu Store
+image::linux_store.png[]
+
+The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ]
+
+=== macOS
+To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown:
+
+.macOS DMG Install
+image::macos_install.png[,80%]
+
+// end::content[]
diff --git a/docs/topics/ImportExport.adoc b/docs/topics/ImportExport.adoc
new file mode 100644
index 000000000..f051846de
--- /dev/null
+++ b/docs/topics/ImportExport.adoc
@@ -0,0 +1,64 @@
+= KeePassXC - Import/Export Operations
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Importing External Databases
+KeePassXC allows your to import external databases from the following options:
+
+* Comma-Separated Values (CSV) file
+* 1Password OPVault
+* KeePass 1 Database
+
+=== Importing CSV File
+If you have been saving your URLs, usernames, passwords, and so on in a CSV file, you can migrate all that information from the CSV file to KeePassXC and start using KeePassXC to maintain your data.
+
+To open the CSV file, perform the following steps:
+
+1. Open KeePassXC.
+
+2. Click Import from CSV button on the welcome screen or use the menu Database > Import > CSV File.
+
+3. Navigate to the location of the your CSV file on your computer and open the file. The new database wizard will appear. Follow the steps of creating a new database in Chapter 1.
+
+4. After saving your new database file, the CSV import wizard will appear:
++
+.CSV Import Wizard
+image::csv_import.png[,80%]
+
+Your CSV file gets imported to KeePassXC and the data is converted to the KeePassXC format for further usage and maintenance. The new database file is saved on to your computer with the default `.kdbx` extension.
+
+=== Importing 1Password OPVault
+Save your 1Password Vault locally to create an OPVault directory. Please see 1Password instructions on how to do this. Once an OPVault is created, perform the following steps:
+
+1. Open KeePassXC.
+
+2. Use the menu Database > Import > 1Password Vault. Select the OPVault to import.
+
+3. Enter the password for your OPVault to unlock and import.
+
+=== Importing KeePass 1 Database
+KeePass 1 database is an older format of the database created using legacy version of KeePass. KeePassXC lets your import this older format of the database and you can seamlessly start using this database in your new KeePassXC application.
+
+To import a KeePass 1 database file in KeePassXC, perform the following steps:
+
+1. Open KeePassXC.
+
+2. Click Import from KeePass 1 button on the welcome screen or use the menu Database > Import > KeePass 1 Database.
+
+3. Navigate to the location of the your legacy KeePass 1 database file (`.kdb`) on your computer and open the file. You are prompted for the password and the Key file for your `.kdb` file.
+
+4. Enter the password for your old `.kdb` file and click *OK*. You are prompted for provide a name for the new database format that KeePassXC recognizes.
+
+5. Provide a name for the new database format, select a folder on your computer to save the file, and click Save.
+
+6. The data from the `.kdb` file gets imported and converted to the new format, which is compatible with KeePassXC. You can now start using the new database file (`.kdbx`) in KeePassXC.
+
+== Exporting Databases
+KeePassXC supports multiple ways to export your database for transfer to another program or to print out and archive. To export your database into the KDB XML format, you must use the KeePassXC Command Line Interface program: `keepassxc-cli export <database.kdbx>`.
+
+WARNING: Exporting your database will result in all of your passwords and sensitive information being stored unencrypted. We do not recommend saving your exported database for long periods of time as that can cause compromise.
+
+.Database export menu
+image::export_database.png[,80%]
+// end::content[]
diff --git a/docs/topics/KeeShare.adoc b/docs/topics/KeeShare.adoc
new file mode 100644
index 000000000..9451d2bfc
--- /dev/null
+++ b/docs/topics/KeeShare.adoc
@@ -0,0 +1,51 @@
+= KeePassXC - KeeShare
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Database Sharing with KeeShare
+KeeShare allows you to share a subset of your credentials with others and vice versa.
+
+=== Enable Sharing
+To use sharing, you need to enable it for the application.
+
+1. Go to _Tools_ -> _Settings_. Select the KeeShare category on the left sidebar *(1)*.
+2. Check _Allow import_ if you want to import shared credentials. Check _Allow export_ if you want to share credentials. *(2)*
+3. (Optional) Click _Generate_ *(3)* to create your own certificate or _Import_ to select an existing one. The certificate allows you to sign shared databases. This ensures the integrity of the share and prevent import of untrusted information.
+
+.KeeShare Application Settings
+image::keeshare_application_settings.png[]
+
+=== Sharing Credentials
+If you checked _Allow export_ in the Sharing settings you can now share a group of passwords. Sharing is always is defined on a particular group. If you enable sharing on a group, every entry under this group, and its children, are shared. If you enable sharing on the root node, **every password** inside your database gets shared!
+
+NOTE: KeeShare does not synchronize group structure after the initial share is created. At this time, KeeShare operates at the entry level; shared entries moved outside of a shared group are still synchronized.
+
+1. Open the edit sheet on a group you want to share.
+2. Select the KeeShare category on the left toolbar.
+3. Choose a sharing type:
+ a. *Inactive* - Disable sharing this group
+ b. *Import* - Read-only import of entries, merge changes
+ c. *Export* - Write-only export of entries, no merge
+ d. *Synchronize* - Read/Write entries from the share, merge changes
+4. Choose a path to store the shared credentials to.
+5. The password to use for this share container.
+
+The export file will not be generated automatically. Instead, each time the database is saved, the file gets written. The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file in cloud storage.
+
+.KeeShare Group Settings
+image::keeshare_group_settings.png[]
+
+=== Using Shared Credentials
+KeeShare watches the container for changes and merges them into your database when necessary (Import and Synchronize modes). Entries merge in time order; older data is moved to the history of the entry.
+
+A shared group shows a cloud icon badge over the group icon *(A)* and a banner is displayed showing the sharing mode and file location *(B)*. If the share is disabled or unavailable, the cloud icon will show as red with a white X.
+
+.KeeShare shared group
+image::keeshare_shared_group.png[]
+
+=== Technical Details and Limitations of Sharing
+Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independent, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client.
+
+KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers.
+// end::content[]
diff --git a/docs/topics/KeyboardShortcuts.adoc b/docs/topics/KeyboardShortcuts.adoc
new file mode 100644
index 000000000..489c81598
--- /dev/null
+++ b/docs/topics/KeyboardShortcuts.adoc
@@ -0,0 +1,40 @@
+= KeePassXC - Keyboard Shortcuts
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+[grid=rows, frame=none, width=75%]
+|===
+|Action | Keyboard Shortcut
+
+|Open Database | Ctrl + O
+|Save Database | Ctrl + S
+|Save Database As | Ctrl + Shift + S
+|New Database | Ctrl + Shift + N
+|Close Database | Ctrl + W ; Ctrl + F4
+|Lock All Databases | Ctrl + L
+|Quit | Ctrl + Q
+|New Entry | Ctrl + N
+|Edit Entry | Enter ; Ctrl + E
+|Delete Entry | Delete
+|Clone Entry | Ctrl + K
+|Copy Username | Ctrl + B
+|Copy Password | Ctrl + C
+|Copy URL | Ctrl + U
+|Open URL | Ctrl + Shift + U
+|Copy TOTP | Ctrl + T
+|Show TOTP | Ctrl + Shift + T
+|Trigger AutoType | Ctrl + Shift + V
+|Add key to SSH Agent | Ctrl + H
+|Remove key from SSH Agent | Ctrl + Shift + H
+|Minimize Window | Ctrl + M
+|Hide Window | Ctrl + Shift + M
+|Select Next Database Tab | Ctrl + Tab ; Ctrl + PageDn
+|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp
+|Toggle Passwords Hidden | Ctrl + Shift + C
+|Toggle Usernames Hidden | Ctrl + Shift + B
+|Focus Search | Ctrl + F
+|Clear Search | Escape
+|Show Keyboard Shortcuts | Ctrl + /
+|===
+// end::content[]
diff --git a/docs/topics/PasswordGenerator.adoc b/docs/topics/PasswordGenerator.adoc
new file mode 100644
index 000000000..ea05000ef
--- /dev/null
+++ b/docs/topics/PasswordGenerator.adoc
@@ -0,0 +1,44 @@
+= KeePassXC - Password Generator
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Password Generator
+This password generator helps you to generate random strong passwords and passphrases that you can use for your applications and websites you visit.
+
+=== Generating Passwords
+To generate random passwords, specify the characters to be used in your choice of password (for example, upper-case letters, digits, special characters, and so on) and KeePassXC will randomly pick characters out of the set.
+
+To generate the random password using Password Generator, perform the following steps:
+
+1. Open KeePassXC.
+2. Navigate to Tools > Password Generator. The following screen appears:
++
+.Password Generator
+image::password_generator.png[]
+
+3. Select the length of the desired password by dragging the Length slider.
+4. Select the character-sets that you want to include in your password.
+5. Use the regenerate button (Ctrl + R) to make a new password using the chosen options.
+6. Use the clipboard button (Ctrl + C) to copy the generated password to the clipboard.
+// tag::advanced[]
+7. Click the Advanced button to specify additional conditions for your desired password.
++
+.Advanced Password Generator Options
+image::password_generator_advanced.png[]
+
+=== Generating Passphrases
+A passphrase is a sequence of words or other text used to control access to your applications and data. A passphrase is similar to a password in usage, but is generally longer for added security. To generate the random passphrase using Password Generator, perform the following steps:
+
+1. From the password generator, click the Passphrase tab. The following screen appears:
++
+.Passphrase Generator
+image::passphrase_generator.png[]
+
+2. Select the number of words you want to be included in your passphrase by dragging the
+Word Count slider.
+3. In the Word Separator field, enter a character, word, number, or space that you want to use a separator between the words in your passphrase.
+4. Click the Regenerate button (Ctrl + R) to generate a new random passphrase.
+5. Click the Clipboard button (Ctrl + C) to copy the passphrase to the clipboard.
+// end::advanced[]
+// end::content[]
diff --git a/docs/topics/SSHAgent.adoc b/docs/topics/SSHAgent.adoc
new file mode 100644
index 000000000..7ade8f256
--- /dev/null
+++ b/docs/topics/SSHAgent.adoc
@@ -0,0 +1,125 @@
+= KeePassXC - SSH Agent
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== SSH Agent
+SSH (Secure Shell) is a widely used remote secure shell protocol and is considered an industry standard for secure remote access to UNIX-like systems including Linux, BSDs, MacOS and more recently even Windows received native support. SSH supports multiple types of authentication and the most widely used ones are either interactive keyboard input with a password or a public-key cryptography pair of keys.
+
+KeePassXC SSH Agent integration is built to manage SSH keys in a secure manner by either storing them completely within your KeePassXC database or by having only the decryption key of a key file that is stored elsewhere. SSH Agent integration _does not_ provide an agent itself but works as a client for any agent implementation that is OpenSSH compatible.
+
+=== OpenSSH agent on Linux
+If you are using a modern desktop Linux distribution it is very likely the OpenSSH agent is already configured and running when you have logged in to a graphical desktop session.
+This should be true for distributions like Debian, Ubuntu (including Kubuntu, Xubuntu and Lubuntu), Linux Mint, Fedora, ElementaryOS and Manjaro.
+
+First, open a terminal and check the output of `ssh-add -l`:
+
+ $ ssh-add -l
+ The agent has no identities.
+
+If you either got a list of fingerprints or the message above the agent is already running and no further setup is required.
+If instead you got a message saying _"Could not open a connection to your authentication agent."_ that means the agent is either misconfigured or not running at all.
+
+Since every distribution and desktop environment is configured differently there is no general guide how to properly set it up yourself.
+The general rule of thumb, however, is that `ssh-agent` needs to be started as part of the startup programs for a session in a way its environment variables are exposed to all processes started by the desktop environment.
+One of the easiest ways to achieve this is to enable _GNOME Keyring_ which should in turn start the agent as part of its services.
+
+There are many guides on the internet how to hack your login shell to start an agent but it is very prone to errors and is not a supported configuration. If you prefer the login shell startup hack you need to set it up with a static socket path and use the _SSH_AUTH_SOCK override_ option in SSH Agent settings to match that.
+
+WARNING: _GNU Privacy Guard (gpg)_ with its SSH agent implementation is *not* compatible with KeePassXC as it does not support _removing_ keys that have been added to it making it impossible to use any external tool to manage key lifetime.
+
+WARNING: _GNOME Keyring_ prior to release 3.27.92 had its own custom implementation of an agent which does not support modern key types and was known to be buggy.
+It does not support any constraints you may want to configure for an added key.
+If you are running a modern distribution the custom agent has been removed and replaced with the stock OpenSSH agent which is feature complete.
+
+=== OpenSSH agent on MacOS
+Apple has made OpenSSH an integrated part of MacOS with automatic agent startup when it is first used. No further configuration is needed.
+
+=== Pageant agent on Windows
+The SSH Agent integration on Windows supports both _PuTTY Pageant_ and _OpenSSH for Windows 10_.
+Since Pageant is currently still the most widely used implementation and is easily installable on any version of Windows we focus on that.
+It is also the default on KeePassXC.
+
+Download Pageant from the official PuTTY home page at https://www.chiark.greenend.org.uk/~sgtatham/putty/
+
+To use Pageant with KeePassXC, simply start it and it will minimize into the system tray and is ready to use. PuTTY and compatible tools will use Pageant automatically.
+
+=== Setting up SSH Agent integration
+By default the SSH Agent integration plugin is disabled.
+To enable integration, follow the steps below to access the settings:
+
+ 1. Select _Tools > Settings_ from the menu
+ 2. Select _SSH Agent_ category on the left sidebar
+
+.SSH Agent Application Settings Page
+image::sshagent_application_settings.png[]
+
+On the settings page you can enable the integration by checking _Enable SSH Agent integration_.
+When the integration is enabled coming back to the settings page also shows if connection to the agent is working.
+
+On Windows you have the option to select between _Pageant_ and _OpenSSH for Windows_ and on other platforms the settings page shows the current value of _SSH_AUTH_SOCK_ environment variable which is used to connect to the running agent and an option to manually override the automatically detected path.
+
+If the value of _SSH_AUTH_SOCK_ is empty it means the agent is not properly configured and KeePassXC will be unable to connect to it unless you provide a static override path to the socket.
+
+=== Generating a key to use with KeePassXC
+KeePassXC only supports keys in the _OpenSSH_ format. On Windows, _PuTTYgen_ saves keys in its own format by default and you will need to convert them to OpenSSH format before being used. In this guide we are going to generate a standard RSA key in the default size.
+
+==== Generating a key on Linux or MacOS with _ssh-keygen_
+
+Open a terminal window and type the following command to generate a key:
+
+ $ ssh-keygen -o -f keepassxc -C johndoe@example
+ Generating public/private rsa key pair.
+ Enter passphrase (empty for no passphrase):
+ Enter same passphrase again:
+ Your identification has been saved in keepassxc
+ Your public key has been saved in keepassxc.pub
+ The key fingerprint is:
+ SHA256:pN+o5AqUmijYBDUrFV/caMus9oIR61+MiWLa8fcsVYI johndoe@example
+ The key's randomart image is:
+ +---[RSA 3072]----+
+ | =. ..o |
+ | o + .+ . |
+ |o . .+ o. |
+ | o.. Eo. . |
+ | +o .. So |
+ |o*o.o+ ..o |
+ |Bo=+o.+.o . |
+ |+oo+.++o |
+ |. ..++ooo |
+ +----[SHA256]-----+
+
+
+Now we can see two files were generated:
+
+ $ ls -l keepassxc*
+ -rw------- 1 user group 2.6K Apr 5 07:36 keepassxc
+ -rw-r--r-- 1 user group 569 Apr 5 07:36 keepassxc.pub
+
+With KeePassXC you only need the first file listed.
+
+==== Generating a key on Windows with PuTTYgen
+Please read the manual on how to use PuTTYgen for details on generate a key: https://the.earth.li/~sgtatham/putty/0.74/htmldoc/Chapter8.html#pubkey-puttygen. Once generated, you must save the key in OpenSSH format, follow the image below.
+
+.Generating a key with PuTTYgen
+image::sshagent_puttygen.png[,70%]
+
+=== Configuring an entry to use SSH Agent
+The last step is to setup an entry to contain the SSH Agent settings and key file you generated.
+
+1. Create a new entry, or open an existing entry in edit mode.
+2. Set the password you used for the key file in the password field.
+3. Go to the advanced category and attach the key file you generated previously.
+4. Go to the SSH Agent category *(1)* and select the attachment from the list *(2)*.
+5. Alternatively, you can load an external file dynamically using the file selection.
+6. Choose the options for this key.
+7. Press *OK* to accept the entry. Depending on the options you chose, KeePassXC will load the key and present it for use.
+
+.SSH Agent Entry Settings Page
+image::sshagent_entry_settings.png[]
+
+If you chose to not auto-load the key on database unlock, you can manually make the key available by using the context menu from the entry list.
+
+.SSH Agent Load Key from Context Menu
+image::sshagent_context_menu.png[]
+// end::content[]
diff --git a/docs/topics/UserInterface.adoc b/docs/topics/UserInterface.adoc
new file mode 100644
index 000000000..1fee94608
--- /dev/null
+++ b/docs/topics/UserInterface.adoc
@@ -0,0 +1,51 @@
+= KeePassXC - Database Operations
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Interface Overview
+=== Application Layout
+The KeePassXC interface is designed for simplicity and easy access to your information. The main database view is split into three main partitions detailed below. You can open multiple databases at the same time, they will appear in tabs.
+
+.Main database interface
+image::main_interface.png[]
+
+*(A) Groups* - Organize your entries into discrete groups to bring order to all of your sensitive information. Groups can be nested under each other to create a hierarchy. Settings from parent groups get applied to their children.
+
+*(B) Entries* - Entries contain all the information for each website or application you are storing in KeePassXC. This view shows all the entries in the selected group. Each column can be resized, reordered, and shown or hidden based on your preference. Right click the header row to see all available options.
+
+*\(C) Preview* - Shows a preview of the selected group or entry. You can temporarily hide this preview using the close button on the right hand side or completely disabled in the application settings.
+
+TIP: Double clicking on the text in the entries list copies that field to the clipboard. Double clicking the entry title will open the entry for editing.
+
+=== Toolbar
+The toolbar provides a quick way to perform common tasks with your database. Some entries in the toolbar are dynamically disabled based on the information contained in the selected entry. Every common action in KeePassXC can be controlled with a keyboard shortcut as well.
+
+.Toolbar overview
+image::toolbar.png[]
+
+*(A) Database* - Open Database, Save Database +
+*(B) Entries* - Create Entry, Edit Selected Entry, Delete Selected Entry +
+*\(C) Entry Data* - Copy Username, Copy Password, Copy URL, Perform Auto-Type +
+*(D) Lock All Databases* +
+*(E) Tools* - Password Generator, Application Settings +
+*(F) Search*
+
+=== Application Settings
+Users can configure KeePassXC to their personal tastes with a wide variety of general and security settings that apply to the whole application. These settings are accessible from _Tools_ -> _Settings_ or the cog wheel icon from the toolbar. Settings include: startup options, file management, entry management, user interface, language, security timeouts, and convenience.
+
+==== Setting the Theme
+KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme by using the _View_ menu. When a new theme is selected you will be prompted to restart KeePassXC to apply the theme immediately.
+
+.Setting the theme
+image::theme_selection.png[]
+
+==== Compact Mode
+For users with smaller screens or those who desire seeing more entries at once, KeePassXC offers a compact view mode. This mode shows smaller toolbar, group, and entry icons. The effect of compact mode (left side) can be seen below.
+
+.Compact mode comparison
+image::compact_mode_comparison.png[]
+
+=== Keyboard Shortcuts
+include::KeyboardShortcuts.adoc[tag=content, leveloffset=+1]
+// end::content[]
diff --git a/docs/topics/Welcome.adoc b/docs/topics/Welcome.adoc
new file mode 100644
index 000000000..576b3d818
--- /dev/null
+++ b/docs/topics/Welcome.adoc
@@ -0,0 +1,49 @@
+= KeePassXC - Welcome
+include::.sharedheader[]
+:imagesdir: ../images
+
+// tag::content[]
+== Welcome
+KeePassXC is a modern open-source password manager. It is used to store and manage information such as URLs, usernames, passwords, and so on for various accounts on your web applications. KeePassXC stores all data in an encrypted format while still providing secure access to your information.
+
+KeePassXC is helpful for people with extremely high demands of secure personal data management. It saves many different information, such as user names, passwords, URLs, attachments, and comments in one single database. For a better management, user-defined titles and icons can be specified for different entries in KeePassXC. In addition, the entries are sorted in customizable groups. The integrated search function allows to search in a single group or the complete database.
+
+KeePassXC also provides a secure, customizable, fast, and easy-to-use password generator utility. This utility is very helpful to those who generate passwords frequently.
+
+=== Overview
+You can store an unlimited number of passwords and information in a KeePassXC database. Every piece of information you store in your database is encrypted at all times within the `kdbx` file. When you are accessing your database from within KeePassXC, your information in decrypted and stored in your computer's memory. KeePassXC places controls over the access to this data so other applications cannot read it (unless they have administrative rights). The interface is designed to let you quickly access your passwords, search for the right entry, perform Auto-Type or copy/paste
+operations, make and save changes, and then get out of your way.
+
+KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme in the application settings.
+
+.Light and Dark Themes
+image::theme_comparison.png[]
+
+=== Features
+KeePassXC has numerous features for novice and power users alike. This guide will go over the basic features to get you up and running quickly. The User Guide contains more in-depth discussions on the major features in the application.
+
+* Basic Features
+ ** Create, open, and save databases in the KDBX format (KeePass Compatible)
+ ** Store sensitive information in entries that are organized by groups
+ ** Search for entries
+ ** Password generator
+ ** Auto-Type passwords into applications
+ ** Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser
+ ** Entry icon download
+ ** Import databases from CSV, 1Password, and KeePass1 formats
+
+* Advanced Features
+ ** Database reports (password health, HIBP, and statistics)
+ ** Database export to CSV and HTML formats
+ ** TOTP storage and generation
+ ** Field references between entries
+ ** File attachments and custom attributes
+ ** Entry history and data restoration
+ ** YubiKey/OnlyKey challenge-response support
+ ** Command line interface (keepassxc-cli)
+ ** Auto-Open databases
+ ** KeeShare shared databases (import, export, and synchronize)
+ ** SSH Agent
+ ** FreeDesktop.org Secret Service (replace Gnome keyring, etc.)
+ ** Additional encryption choices: Twofish and ChaCha20
+// end::content[]
diff --git a/release-tool b/release-tool
index d449a1f4b..d8fc1cf0b 100755
--- a/release-tool
+++ b/release-tool
@@ -520,7 +520,7 @@ merge() {
fi
git diff-index --quiet HEAD --
if [ $? -ne 0 ]; then
- git add ./share/translations/*
+ git add -A ./share/translations/
logInfo "Committing changes..."
if [ "" == "$GPG_GIT_KEY" ]; then
git commit -m "Update translations"
@@ -616,11 +616,9 @@ appimage() {
fi
if [ ! -d "${appdir}" ]; then
- logError "AppDir does not exist, please create one with 'make install'!\n"
- exit 1
+ exitError "AppDir does not exist, please create one with 'make install'!"
elif [ -e "${appdir}/AppRun" ]; then
- logError "AppDir has already been run through linuxdeploy, please create a fresh AppDir with 'make install'.\n"
- exit 1
+ exitError "AppDir has already been run through linuxdeploy, please create a fresh AppDir with 'make install'."
fi
appdir="$(realpath "$appdir")"
@@ -652,14 +650,18 @@ appimage() {
logInfo "Downloading linuxdeploy..."
linuxdeploy="./linuxdeploy"
linuxdeploy_cleanup="rm -f ${linuxdeploy}"
- curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > "$linuxdeploy"
+ if ! curl -Lf "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > "$linuxdeploy"; then
+ exitError "linuxdeploy download failed."
+ fi
chmod +x "$linuxdeploy"
fi
if ! ${docker_test_cmd} which ${linuxdeploy_plugin_qt} &> /dev/null; then
logInfo "Downloading linuxdeploy-plugin-qt..."
linuxdeploy_plugin_qt="./linuxdeploy-plugin-qt"
linuxdeploy_plugin_qt_cleanup="rm -f ${linuxdeploy_plugin_qt}"
- curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > "$linuxdeploy_plugin_qt"
+ if ! curl -Lf "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > "$linuxdeploy_plugin_qt"; then
+ exitError "linuxdeploy-plugin-qt download failed."
+ fi
chmod +x "$linuxdeploy_plugin_qt"
fi
@@ -668,7 +670,9 @@ appimage() {
logInfo "Downloading appimagetool..."
appimagetool="./appimagetool"
appimagetool_cleanup="rm -f ${appimagetool}"
- curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > "$appimagetool"
+ if ! curl -Lf "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > "$appimagetool"; then
+ exitError "appimagetool download failed."
+ fi
chmod +x "$appimagetool"
fi
@@ -718,6 +722,10 @@ EOF
--library=\$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)"
fi
+ if [ $? -ne 0 ]; then
+ exitError "AppDir deployment failed."
+ fi
+
logInfo "Creating AppImage..."
local appsign_flag=""
local appsign_key_flag=""
@@ -728,17 +736,16 @@ EOF
local appimage_name="KeePassXC-x86_64.AppImage"
if [ "" != "$RELEASE_NAME" ]; then
appimage_name="KeePassXC-${RELEASE_NAME}-x86_64.AppImage"
+ echo "X-AppImage-Version=${RELEASE_NAME}" >> "$desktop_file"
fi
- # Allow appimagetool to insert version information into the AppImage to allow
- # desktop integration tools to display that in app launchers
- export VERSION="${RELEASE_NAME}"
-
# Run appimagetool to package (and possibly sign) AppImage
# --no-appstream is required, since it may crash on newer systems
# see: https://github.com/AppImage/AppImageKit/issues/856
- "$appimagetool" --updateinformation "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-x86_64.AppImage.zsync" \
- ${appsign_flag} ${appsign_key_flag} --no-appstream "$appdir" "${out_real}/${appimage_name}"
+ if ! "$appimagetool" --updateinformation "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-x86_64.AppImage.zsync" \
+ ${appsign_flag} ${appsign_key_flag} --no-appstream "$appdir" "${out_real}/${appimage_name}"; then
+ exitError "AppImage creation failed."
+ fi
logInfo "Cleaning up temporary files..."
${linuxdeploy_cleanup}
@@ -906,7 +913,7 @@ build() {
if ! ${build_snapshot} && [ -e "${OUTPUT_DIR}/build-release" ]; then
logInfo "Cleaning existing build directory..."
- rm -r "${OUTPUT_DIR}/build-release" 2> /dev/null
+ rm -rf "${OUTPUT_DIR}/build-release" 2> /dev/null
if [ $? -ne 0 ]; then
exitError "Failed to clean existing build directory, please do it manually."
fi
@@ -977,13 +984,15 @@ build() {
cpack -G "${CPACK_GENERATORS};${build_generators}"
# Inject the portable config into the zip build and rename
+ touch .portable
for filename in ${APP_NAME}-*.zip; do
logInfo "Creating portable zip file"
local folder=$(echo ${filename} | sed -r 's/(.*)\.zip/\1/')
python -c 'import zipfile,sys ; zipfile.ZipFile(sys.argv[1],"a").write(sys.argv[2],sys.argv[3])' \
- ${filename} ${SRC_DIR}/share/keepassxc.ini ${folder}/keepassxc.ini
+ ${filename} .portable ${folder}/.portable
mv ${filename} ${folder}-portable.zip
done
+ rm .portable
mv "${APP_NAME}-"*.* ../
else
diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt
index 3a088bb88..6d689df9e 100644
--- a/share/CMakeLists.txt
+++ b/share/CMakeLists.txt
@@ -19,9 +19,8 @@ add_subdirectory(translations)
file(GLOB wordlists_files "wordlists/*.wordlist")
install(FILES ${wordlists_files} DESTINATION ${DATA_INSTALL_DIR}/wordlists)
-file(GLOB DATABASE_ICONS icons/database/*.png)
-
-install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database)
+# Copy wordlists to build dir for use in tests
+file(COPY "wordlists" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
if(UNIX AND NOT APPLE AND NOT HAIKU)
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
@@ -39,104 +38,20 @@ if(APPLE)
install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR})
endif()
-install(DIRECTORY docs/ DESTINATION ${DATA_INSTALL_DIR}/docs FILES_MATCHING PATTERN "*.pdf")
-
-install(DIRECTORY wizard/ DESTINATION ${DATA_INSTALL_DIR}/wizard FILES_MATCHING PATTERN "*.png")
-
-install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application
- FILES_MATCHING PATTERN "*.png" PATTERN "*.svg")
-
-add_custom_target(icons
- # SVG to PNGs for KeePassXC
- COMMAND inkscape -z -w 16 -h 16
- icons/application/scalable/apps/keepassxc.svg -e icons/application/16x16/apps/keepassxc.png
- COMMAND inkscape -z -w 24 -h 24
- icons/application/scalable/apps/keepassxc.svg -e icons/application/24x24/apps/keepassxc.png
- COMMAND inkscape -z -w 32 -h 32
- icons/application/scalable/apps/keepassxc.svg -e icons/application/32x32/apps/keepassxc.png
- COMMAND inkscape -z -w 48 -h 48
- icons/application/scalable/apps/keepassxc.svg -e icons/application/48x48/apps/keepassxc.png
- COMMAND inkscape -z -w 64 -h 64
- icons/application/scalable/apps/keepassxc.svg -e icons/application/64x64/apps/keepassxc.png
- COMMAND inkscape -z -w 128 -h 128
- icons/application/scalable/apps/keepassxc.svg -e icons/application/128x128/apps/keepassxc.png
- COMMAND inkscape -z -w 256 -h 256
- icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png
-
- # SVG to PNGs for KeePassXC
- COMMAND inkscape -z -w 16 -h 16
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/16x16/apps/keepassxc-dark.png
- COMMAND inkscape -z -w 24 -h 24
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/24x24/apps/keepassxc-dark.png
- COMMAND inkscape -z -w 32 -h 32
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/32x32/apps/keepassxc-dark.png
- COMMAND inkscape -z -w 48 -h 48
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/48x48/apps/keepassxc-dark.png
- COMMAND inkscape -z -w 64 -h 64
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/64x64/apps/keepassxc-dark.png
- COMMAND inkscape -z -w 128 -h 128
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/128x128/apps/keepassxc-dark.png
- COMMAND inkscape -z -w 256 -h 256
- icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/256x256/apps/keepassxc-dark.png
-
- # SVG to PNGs for KeePassXC
- COMMAND inkscape -z -w 16 -h 16
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/16x16/apps/keepassxc-locked.png
- COMMAND inkscape -z -w 24 -h 24
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/24x24/apps/keepassxc-locked.png
- COMMAND inkscape -z -w 32 -h 32
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/32x32/apps/keepassxc-locked.png
- COMMAND inkscape -z -w 48 -h 48
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/48x48/apps/keepassxc-locked.png
- COMMAND inkscape -z -w 64 -h 64
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/64x64/apps/keepassxc-locked.png
- COMMAND inkscape -z -w 128 -h 128
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/128x128/apps/keepassxc-locked.png
- COMMAND inkscape -z -w 256 -h 256
- icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/256x256/apps/keepassxc-locked.png
+install(FILES icons/application/256x256/apps/keepassxc.png DESTINATION ${DATA_INSTALL_DIR}/icons/application/256x256/apps)
- # SVG to PNGs for KeePassXC
- COMMAND inkscape -z -w 16 -h 16
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/16x16/apps/keepassxc-unlocked.png
- COMMAND inkscape -z -w 24 -h 24
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/24x24/apps/keepassxc-unlocked.png
- COMMAND inkscape -z -w 32 -h 32
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/32x32/apps/keepassxc-unlocked.png
- COMMAND inkscape -z -w 48 -h 48
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/48x48/apps/keepassxc-unlocked.png
- COMMAND inkscape -z -w 64 -h 64
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/64x64/apps/keepassxc-unlocked.png
- COMMAND inkscape -z -w 128 -h 128
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/128x128/apps/keepassxc-unlocked.png
- COMMAND inkscape -z -w 256 -h 256
- icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/256x256/apps/keepassxc-unlocked.png
-
- # SVG to PNGs for KeePassXC MIME-Type
- COMMAND inkscape -z -w 16 -h 16
- icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/16x16/mimetypes/application-x-keepassxc.png
- COMMAND inkscape -z -w 22 -h 22
- icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/22x22/mimetypes/application-x-keepassxc.png
- COMMAND inkscape -z -w 32 -h 32
- icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/32x32/mimetypes/application-x-keepassxc.png
- COMMAND inkscape -z -w 64 -h 64
- icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/64x64/mimetypes/application-x-keepassxc.png
- COMMAND inkscape -z -w 128 -h 128
- icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/128x128/mimetypes/application-x-keepassxc.png
-
- # Shrink PNGs using pngcrush
- COMMAND bash ./crushpng.sh icons
-
- # ICNS for MacOS
- COMMAND png2icns macosx/keepassxc.icns
- icons/application/16x16/apps/keepassxc.png
- icons/application/32x32/apps/keepassxc.png
- icons/application/48x48/apps/keepassxc.png
- icons/application/128x128/apps/keepassxc.png
- icons/application/256x256/apps/keepassxc.png
+add_custom_target(icons)
+add_custom_command(TARGET icons
+ COMMAND bash ./icons/minify.sh
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+if(APPLE)
+ add_custom_command(TARGET icons
+ COMMAND png2icns macosx/keepassxc.icns icons/application/256x256/apps/keepassxc.png
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+endif()
- # ICO for Windows
+# ICO for Windows
+add_custom_command(TARGET icons
COMMAND bash ./windows/create-ico.sh icons/application/scalable/apps/keepassxc.svg windows/keepassxc.ico
COMMAND bash ./windows/create-ico.sh icons/application/scalable/mimetypes/application-x-keepassxc.svg windows/keepassxc-kdbx.ico
-
- VERBATIM
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/share/crushpng.sh b/share/crushpng.sh
deleted file mode 100644
index f36176d3c..000000000
--- a/share/crushpng.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-
-if [[ -z $1 ]]; then
- echo "You must supply a root folder!"
- exit 1
-fi
-
-find "$1" -iname '*png' -exec pngcrush -ow -brute {} \; \ No newline at end of file
diff --git a/share/demo.kdbx b/share/demo.kdbx
index 71795676a..f78524633 100644
--- a/share/demo.kdbx
+++ b/share/demo.kdbx
Binary files differ
diff --git a/share/docs/KeePassXC_GettingStarted.pdf b/share/docs/KeePassXC_GettingStarted.pdf
deleted file mode 100644
index 2ae781ae9..000000000
--- a/share/docs/KeePassXC_GettingStarted.pdf
+++ /dev/null
Binary files differ
diff --git a/share/docs/KeePassXC_UserGuide.pdf b/share/docs/KeePassXC_UserGuide.pdf
deleted file mode 100644
index 9f9379e81..000000000
--- a/share/docs/KeePassXC_UserGuide.pdf
+++ /dev/null
Binary files differ
diff --git a/share/docs/man/keepassxc-cli.1 b/share/docs/man/keepassxc-cli.1
deleted file mode 100644
index 2be6b198a..000000000
--- a/share/docs/man/keepassxc-cli.1
+++ /dev/null
@@ -1,255 +0,0 @@
-.TH KEEPASSXC-CLI 1 "June 15, 2019"
-
-.SH NAME
-keepassxc-cli \- command line interface for the \fBKeePassXC\fP password manager.
-
-.SH SYNOPSIS
-.B keepassxc-cli
-.I command
-.B [
--I options
-.B ]
-
-.SH DESCRIPTION
-\fBkeepassxc-cli\fP is the command line interface for the \fBKeePassXC\fP password manager. It provides the ability to query and modify the entries of a KeePass database, directly from the command line.
-
-.SH COMMANDS
-
-.IP "add [options] <database> <entry>"
-Adds a new entry to a database. A password can be generated (\fI-g\fP option), or a prompt can be displayed to input the password (\fI-p\fP option).
-The same password generation options as documented for the generate command can be used when the \fI-g\fP option is set.
-
-.IP "analyze [options] <database>"
-Analyzes passwords in a database for weaknesses.
-
-.IP "clip [options] <database> <entry> [timeout]"
-Copies the password or the current TOTP (\fI-t\fP option) of a database entry to the clipboard. If multiple entries with the same name exist in different groups, only the password for the first one is going to be copied. For copying the password of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name. Optionally, a timeout in seconds can be specified to automatically clear the clipboard.
-
-.IP "close"
-In interactive mode, closes the currently opened database (see \fIopen\fP).
-
-.IP "create [options] <database>"
-Creates a new database with a key file and/or password. The key file will be created if the file that is referred to does not exist. If both the key file and password are empty, no database will be created.
-
-.IP "diceware [options]"
-Generates a random diceware passphrase.
-
-.IP "edit [options] <database> <entry>"
-Edits a database entry. A password can be generated (\fI-g\fP option), or a prompt can be displayed to input the password (\fI-p\fP option).
-The same password generation options as documented for the generate command can be used when the \fI-g\fP option is set.
-
-.IP "estimate [options] [password]"
-Estimates the entropy of a password. The password to estimate can be provided as a positional argument, or using the standard input.
-
-.IP "exit"
-Exits interactive mode. Synonymous with \fIquit\fP.
-
-.IP "export [options] <database>"
-Exports the content of a database to standard output in the specified format (defaults to XML).
-
-.IP "generate [options]"
-Generates a random password.
-
-.IP "help [command]"
-Displays a list of available commands, or detailed information about the specified command.
-
-.IP "import [options] <xml> <database>"
-Imports the contents of an XML database to the target database.
-
-.IP "locate [options] <database> <term>"
-Locates all the entries that match a specific search term in a database.
-
-.IP "ls [options] <database> [group]"
-Lists the contents of a group in a database. If no group is specified, it will default to the root group.
-
-.IP "merge [options] <database1> <database2>"
-Merges two databases together. The first database file is going to be replaced by the result of the merge, for that reason it is advisable to keep a backup of the two database files before attempting a merge. In the case that both databases make use of the same credentials, the \fI--same-credentials\fP or \fI-s\fP option can be used.
-
-.IP "mkdir [options] <database> <group>"
-Adds a new group to a database.
-
-.IP "mv [options] <database> <entry> <group>"
-Moves an entry to a new group.
-
-.IP "open [options] <database>"
-Opens the given database in a shell-style interactive mode. This is useful for performing multiple operations on a single database (e.g. \fIls\fP followed by \fIshow\fP).
-
-.IP "quit"
-Exits interactive mode. Synonymous with \fIexit\fP.
-
-.IP "rm [options] <database> <entry>"
-Removes an entry from a database. If the database has a recycle bin, the entry will be moved there. If the entry is already in the recycle bin, it will be removed permanently.
-
-.IP "rmdir [options] <database> <group>"
-Removes a group from a database. If the database has a recycle bin, the group will be moved there. If the group is already in the recycle bin, it will be removed permanently.
-
-.IP "show [options] <database> <entry>"
-Shows the title, username, password, URL and notes of a database entry. Can also show the current TOTP. Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the \fIclip\fP command section also applies here.
-
-.SH OPTIONS
-
-.SS "General options"
-
-.IP "--debug-info"
-Displays debugging information.
-
-.IP "-k, --key-file <path>"
-Specifies a path to a key file for unlocking the database. In a merge operation this option, is used to specify the key file path for the first database.
-
-.IP "--no-password"
-Deactivates the password key for the database.
-
-.IP "-y, --yubikey <slot>"
-Specifies a yubikey slot for unlocking the database. In a merge operation this option is used to specify the yubikey slot for the first database.
-
-.IP "-q, --quiet <path>"
-Silences password prompt and other secondary outputs.
-
-.IP "-h, --help"
-Displays help information.
-
-.IP "-v, --version"
-Displays the program version.
-
-
-.SS "Merge options"
-
-.IP "-d, --dry-run <path>"
-Prints the changes detected by the merge operation without making any changes to the database.
-
-.IP "--key-file-from <path>"
-Sets the path of the key file for the second database.
-
-.IP "--no-password-from"
-Deactivates password key for the database to merge from.
-
-.IP "--yubikey-from <slot>"
-Yubikey slot for the second database.
-
-.IP "-s, --same-credentials"
-Uses the same credentials for unlocking both databases.
-
-
-.SS "Add and edit options"
-The same password generation options as documented for the generate command can be used
-with those 2 commands when the -g option is set.
-
-.IP "-u, --username <username>"
-Specifies the username of the entry.
-
-.IP "--url <url>"
-Specifies the URL of the entry.
-
-.IP "-p, --password-prompt"
-Uses a password prompt for the entry's password.
-
-.IP "-g, --generate"
-Generates a new password for the entry.
-
-
-.SS "Edit options"
-
-.IP "-t, --title <title>"
-Specifies the title of the entry.
-
-
-.SS "Estimate options"
-
-.IP "-a, --advanced"
-Performs advanced analysis on the password.
-
-
-.SS "Analyze options"
-
-.IP "-H, --hibp <filename>"
-Checks if any passwords have been publicly leaked, by comparing against the given
-list of password SHA-1 hashes, which must be in "Have I Been Pwned" format. Such
-files are available from https://haveibeenpwned.com/Passwords; note that they
-are large, and so this operation typically takes some time (minutes up to an
-hour or so).
-
-
-.SS "Clip options"
-
-.IP "-t, --totp"
-Copies the current TOTP instead of current password to clipboard. Will report
-an error if no TOTP is configured for the entry.
-
-
-.SS "Show options"
-
-.IP "-a, --attributes <attribute>..."
-Shows the named attributes. This option can be specified more than once,
-with each attribute shown one-per-line in the given order. If no attributes are
-specified and \fI-t\fP is not specified, a summary of the default attributes is given.
-Protected attributes will be displayed in clear text if specified explicitly by this option.
-
-.IP "-s, --show-protected"
-Shows the protected attributes in clear text.
-
-.IP "-t, --totp"
-Also shows the current TOTP, reporting an error if no TOTP is configured for
-the entry.
-
-
-.SS "Diceware options"
-
-.IP "-W, --words <count>"
-Sets the desired number of words for the generated passphrase. [Default: 7]
-
-.IP "-w, --word-list <path>"
-Sets the Path of the wordlist for the diceware generator. The wordlist must
-have > 1000 words, otherwise the program will fail. If the wordlist has < 4000
-words a warning will be printed to STDERR.
-
-
-.SS "Export options"
-
-.IP "-f, --format"
-Format to use when exporting. Available choices are xml or csv. Defaults to xml.
-
-
-.SS "List options"
-
-.IP "-R, --recursive"
-Recursively lists the elements of the group.
-
-.IP "-f, --flatten"
-Flattens the output to single lines. When this option is enabled, subgroups and subentries will be displayed with a relative group path instead of indentation.
-
-.SS "Generate options"
-
-.IP "-L, --length <length>"
-Sets the desired length for the generated password. [Default: 16]
-
-.IP "-l --lower"
-Uses lowercase characters for the generated password. [Default: Enabled]
-
-.IP "-U --upper"
-Uses uppercase characters for the generated password. [Default: Enabled]
-
-.IP "-n --numeric"
-Uses numbers characters for the generated password. [Default: Enabled]
-
-.IP "-s --special"
-Uses special characters for the generated password. [Default: Disabled]
-
-.IP "-e --extended"
-Uses extended ASCII characters for the generated password. [Default: Disabled]
-
-.IP "-x --exclude <chars>"
-Comma-separated list of characters to exclude from the generated password. None is excluded by default.
-
-.IP "--exclude-similar"
-Exclude similar looking characters. [Default: Disabled]
-
-.IP "--every-group"
-Include characters from every selected group. [Default: Disabled]
-
-
-.SH REPORTING BUGS
-Bugs and feature requests can be reported on GitHub at https://github.com/keepassxreboot/keepassxc/issues.
-
-.SH AUTHOR
-This manual page was originally written by Manolis Agkopian <m.agkopian@gmail.com>,
-and is maintained by the KeePassXC Team <team@keepassxc.org>.
diff --git a/share/docs/man/keepassxc.1 b/share/docs/man/keepassxc.1
deleted file mode 100644
index 74a9b02a6..000000000
--- a/share/docs/man/keepassxc.1
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH KEEPASSXC 1 "Oct 25, 2019"
-.SH NAME
-keepassxc \- password manager
-
-.SH SYNOPSIS
-.B keepassxc
-.B [
-.I options
-.B ] [
-.I filename(s)
-.B ]
-
-.SH DESCRIPTION
-\fBKeePassXC\fP is a free/open-source password manager or safe which helps you to manage your passwords in a secure way. The complete database is always encrypted with the industry-standard AES (alias Rijndael) encryption algorithm using a 256 bit key. KeePassXC uses a database format that is compatible with KeePass Password Safe. Your wallet works offline and requires no Internet connection.
-
-.SH OPTIONS
-.IP "-h, --help"
-Displays this help.
-
-.IP "-v, --version"
-Displays version information.
-
-.IP "--config <config>"
-Path to a custom config file
-
-.IP "--keyfile <keyfile>"
-Key file of the database
-
-.IP "--pw-stdin"
-Read password of the database from stdin
-
-.IP "--pw, --parent-window <handle>"
-Parent window handle
-
-.IP "--debug-info"
-Displays debugging information.
-
-.SH AUTHOR
-This manual page is maintained by the KeePassXC Team <team@keepassxc.org>.
diff --git a/share/icons/application/128x128/apps/keepassxc-dark.png b/share/icons/application/128x128/apps/keepassxc-dark.png
deleted file mode 100644
index d2cc1d580..000000000
--- a/share/icons/application/128x128/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/128x128/apps/keepassxc-locked.png b/share/icons/application/128x128/apps/keepassxc-locked.png
deleted file mode 100644
index b850f577e..000000000
--- a/share/icons/application/128x128/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/128x128/apps/keepassxc-unlocked.png b/share/icons/application/128x128/apps/keepassxc-unlocked.png
deleted file mode 100644
index 30a820261..000000000
--- a/share/icons/application/128x128/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/128x128/apps/keepassxc.png b/share/icons/application/128x128/apps/keepassxc.png
deleted file mode 100644
index 30a820261..000000000
--- a/share/icons/application/128x128/apps/keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/128x128/apps/preferences-system-network-sharing.png b/share/icons/application/128x128/apps/preferences-system-network-sharing.png
deleted file mode 100644
index 88a251701..000000000
--- a/share/icons/application/128x128/apps/preferences-system-network-sharing.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/128x128/mimetypes/application-x-keepassxc.png b/share/icons/application/128x128/mimetypes/application-x-keepassxc.png
deleted file mode 100644
index dac32fed4..000000000
--- a/share/icons/application/128x128/mimetypes/application-x-keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/application-exit.png b/share/icons/application/16x16/actions/application-exit.png
deleted file mode 100644
index eaad4c44d..000000000
--- a/share/icons/application/16x16/actions/application-exit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/auto-type.png b/share/icons/application/16x16/actions/auto-type.png
deleted file mode 100644
index ee985dac4..000000000
--- a/share/icons/application/16x16/actions/auto-type.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/configure.png b/share/icons/application/16x16/actions/configure.png
deleted file mode 100644
index 80d1815c6..000000000
--- a/share/icons/application/16x16/actions/configure.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/database-change-key.png b/share/icons/application/16x16/actions/database-change-key.png
deleted file mode 100644
index 186c07728..000000000
--- a/share/icons/application/16x16/actions/database-change-key.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/database-lock.png b/share/icons/application/16x16/actions/database-lock.png
deleted file mode 100644
index b06801211..000000000
--- a/share/icons/application/16x16/actions/database-lock.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/document-close.png b/share/icons/application/16x16/actions/document-close.png
deleted file mode 100644
index fcfaa46c0..000000000
--- a/share/icons/application/16x16/actions/document-close.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/document-edit.png b/share/icons/application/16x16/actions/document-edit.png
deleted file mode 100644
index 7ddca1fca..000000000
--- a/share/icons/application/16x16/actions/document-edit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/document-new.png b/share/icons/application/16x16/actions/document-new.png
deleted file mode 100644
index a8e07a5e9..000000000
--- a/share/icons/application/16x16/actions/document-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/document-open.png b/share/icons/application/16x16/actions/document-open.png
deleted file mode 100644
index 0dba17b67..000000000
--- a/share/icons/application/16x16/actions/document-open.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/document-save-as.png b/share/icons/application/16x16/actions/document-save-as.png
deleted file mode 100644
index f0f278941..000000000
--- a/share/icons/application/16x16/actions/document-save-as.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/document-save.png b/share/icons/application/16x16/actions/document-save.png
deleted file mode 100644
index 59a0e255a..000000000
--- a/share/icons/application/16x16/actions/document-save.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png b/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png
deleted file mode 100644
index c16b812fc..000000000
--- a/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png b/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png
deleted file mode 100644
index 34e805d24..000000000
--- a/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/entry-clone.png b/share/icons/application/16x16/actions/entry-clone.png
deleted file mode 100644
index 9846255b8..000000000
--- a/share/icons/application/16x16/actions/entry-clone.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/entry-delete.png b/share/icons/application/16x16/actions/entry-delete.png
deleted file mode 100644
index d8f784c75..000000000
--- a/share/icons/application/16x16/actions/entry-delete.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/entry-edit.png b/share/icons/application/16x16/actions/entry-edit.png
deleted file mode 100644
index c6f04a494..000000000
--- a/share/icons/application/16x16/actions/entry-edit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/entry-new.png b/share/icons/application/16x16/actions/entry-new.png
deleted file mode 100644
index b4ff1d8eb..000000000
--- a/share/icons/application/16x16/actions/entry-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/favicon-download.png b/share/icons/application/16x16/actions/favicon-download.png
deleted file mode 100644
index 3426fb937..000000000
--- a/share/icons/application/16x16/actions/favicon-download.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/group-delete.png b/share/icons/application/16x16/actions/group-delete.png
deleted file mode 100644
index c5ca349fb..000000000
--- a/share/icons/application/16x16/actions/group-delete.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/group-edit.png b/share/icons/application/16x16/actions/group-edit.png
deleted file mode 100644
index a6efbc4d7..000000000
--- a/share/icons/application/16x16/actions/group-edit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/group-empty-trash.png b/share/icons/application/16x16/actions/group-empty-trash.png
deleted file mode 100644
index d09e07935..000000000
--- a/share/icons/application/16x16/actions/group-empty-trash.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/group-new.png b/share/icons/application/16x16/actions/group-new.png
deleted file mode 100644
index 0db0c743f..000000000
--- a/share/icons/application/16x16/actions/group-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/help-about.png b/share/icons/application/16x16/actions/help-about.png
deleted file mode 100644
index 225dbb695..000000000
--- a/share/icons/application/16x16/actions/help-about.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/message-close.png b/share/icons/application/16x16/actions/message-close.png
deleted file mode 100644
index ddf5a667d..000000000
--- a/share/icons/application/16x16/actions/message-close.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/paperclip.png b/share/icons/application/16x16/actions/paperclip.png
deleted file mode 100644
index b84d865d0..000000000
--- a/share/icons/application/16x16/actions/paperclip.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/password-copy.png b/share/icons/application/16x16/actions/password-copy.png
deleted file mode 100644
index 4f0f502a0..000000000
--- a/share/icons/application/16x16/actions/password-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/password-generate.png b/share/icons/application/16x16/actions/password-generate.png
deleted file mode 100644
index 8f9c5aec8..000000000
--- a/share/icons/application/16x16/actions/password-generate.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/password-generator.png b/share/icons/application/16x16/actions/password-generator.png
deleted file mode 100644
index 1fd64960e..000000000
--- a/share/icons/application/16x16/actions/password-generator.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/password-show-off.png b/share/icons/application/16x16/actions/password-show-off.png
deleted file mode 100644
index 209062d78..000000000
--- a/share/icons/application/16x16/actions/password-show-off.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/password-show-on.png b/share/icons/application/16x16/actions/password-show-on.png
deleted file mode 100644
index a6b89cdab..000000000
--- a/share/icons/application/16x16/actions/password-show-on.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/system-help.png b/share/icons/application/16x16/actions/system-help.png
deleted file mode 100644
index adb2d8e21..000000000
--- a/share/icons/application/16x16/actions/system-help.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/system-search.png b/share/icons/application/16x16/actions/system-search.png
deleted file mode 100644
index ad7f3c59f..000000000
--- a/share/icons/application/16x16/actions/system-search.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/url-copy.png b/share/icons/application/16x16/actions/url-copy.png
deleted file mode 100644
index 90fa595e7..000000000
--- a/share/icons/application/16x16/actions/url-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/actions/username-copy.png b/share/icons/application/16x16/actions/username-copy.png
deleted file mode 100644
index e2f855c89..000000000
--- a/share/icons/application/16x16/actions/username-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/apps/keepassxc-dark.png b/share/icons/application/16x16/apps/keepassxc-dark.png
deleted file mode 100644
index 1419cbffe..000000000
--- a/share/icons/application/16x16/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/apps/keepassxc-locked.png b/share/icons/application/16x16/apps/keepassxc-locked.png
deleted file mode 100644
index 7f173c640..000000000
--- a/share/icons/application/16x16/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/apps/keepassxc-unlocked.png b/share/icons/application/16x16/apps/keepassxc-unlocked.png
deleted file mode 100644
index 3b9c3f4a0..000000000
--- a/share/icons/application/16x16/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/apps/keepassxc.png b/share/icons/application/16x16/apps/keepassxc.png
deleted file mode 100644
index 3b9c3f4a0..000000000
--- a/share/icons/application/16x16/apps/keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/16x16/mimetypes/application-x-keepassxc.png b/share/icons/application/16x16/mimetypes/application-x-keepassxc.png
deleted file mode 100644
index bd7d98e7e..000000000
--- a/share/icons/application/16x16/mimetypes/application-x-keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/auto-type.png b/share/icons/application/22x22/actions/auto-type.png
deleted file mode 100644
index dcc8b75d1..000000000
--- a/share/icons/application/22x22/actions/auto-type.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/chronometer.png b/share/icons/application/22x22/actions/chronometer.png
deleted file mode 100644
index 8e8d61de9..000000000
--- a/share/icons/application/22x22/actions/chronometer.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/database-change-key.png b/share/icons/application/22x22/actions/database-change-key.png
deleted file mode 100644
index 7bf8d05d3..000000000
--- a/share/icons/application/22x22/actions/database-change-key.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/database-lock.png b/share/icons/application/22x22/actions/database-lock.png
deleted file mode 100644
index eed69ac51..000000000
--- a/share/icons/application/22x22/actions/database-lock.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/dialog-close.png b/share/icons/application/22x22/actions/dialog-close.png
deleted file mode 100644
index 81f85067d..000000000
--- a/share/icons/application/22x22/actions/dialog-close.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/dialog-ok.png b/share/icons/application/22x22/actions/dialog-ok.png
deleted file mode 100644
index bb27eea88..000000000
--- a/share/icons/application/22x22/actions/dialog-ok.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/document-new.png b/share/icons/application/22x22/actions/document-new.png
deleted file mode 100644
index 50f67bfb4..000000000
--- a/share/icons/application/22x22/actions/document-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/document-open.png b/share/icons/application/22x22/actions/document-open.png
deleted file mode 100644
index dff45686b..000000000
--- a/share/icons/application/22x22/actions/document-open.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/document-save.png b/share/icons/application/22x22/actions/document-save.png
deleted file mode 100644
index 2ad801c13..000000000
--- a/share/icons/application/22x22/actions/document-save.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/entry-clone.png b/share/icons/application/22x22/actions/entry-clone.png
deleted file mode 100644
index fc4787dfd..000000000
--- a/share/icons/application/22x22/actions/entry-clone.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/entry-delete.png b/share/icons/application/22x22/actions/entry-delete.png
deleted file mode 100644
index 9ad1885cb..000000000
--- a/share/icons/application/22x22/actions/entry-delete.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/entry-edit.png b/share/icons/application/22x22/actions/entry-edit.png
deleted file mode 100644
index 8246bfe34..000000000
--- a/share/icons/application/22x22/actions/entry-edit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/entry-new.png b/share/icons/application/22x22/actions/entry-new.png
deleted file mode 100644
index ff53e2153..000000000
--- a/share/icons/application/22x22/actions/entry-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/favicon-download.png b/share/icons/application/22x22/actions/favicon-download.png
deleted file mode 100644
index 8759d957e..000000000
--- a/share/icons/application/22x22/actions/favicon-download.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/group-empty-trash.png b/share/icons/application/22x22/actions/group-empty-trash.png
deleted file mode 100644
index ed0bb2b72..000000000
--- a/share/icons/application/22x22/actions/group-empty-trash.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/help-about.png b/share/icons/application/22x22/actions/help-about.png
deleted file mode 100644
index 4fefbf4c2..000000000
--- a/share/icons/application/22x22/actions/help-about.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/message-close.png b/share/icons/application/22x22/actions/message-close.png
deleted file mode 100644
index f0850594f..000000000
--- a/share/icons/application/22x22/actions/message-close.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/paperclip.png b/share/icons/application/22x22/actions/paperclip.png
deleted file mode 100644
index 60c2f870e..000000000
--- a/share/icons/application/22x22/actions/paperclip.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/password-copy.png b/share/icons/application/22x22/actions/password-copy.png
deleted file mode 100644
index 739652646..000000000
--- a/share/icons/application/22x22/actions/password-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/password-generate.png b/share/icons/application/22x22/actions/password-generate.png
deleted file mode 100644
index 590df6d4d..000000000
--- a/share/icons/application/22x22/actions/password-generate.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/password-generator.png b/share/icons/application/22x22/actions/password-generator.png
deleted file mode 100644
index 68d1763f1..000000000
--- a/share/icons/application/22x22/actions/password-generator.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/system-help.png b/share/icons/application/22x22/actions/system-help.png
deleted file mode 100644
index 0a890cd59..000000000
--- a/share/icons/application/22x22/actions/system-help.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/system-search.png b/share/icons/application/22x22/actions/system-search.png
deleted file mode 100644
index f977b606c..000000000
--- a/share/icons/application/22x22/actions/system-search.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/url-copy.png b/share/icons/application/22x22/actions/url-copy.png
deleted file mode 100644
index 4a7c8acab..000000000
--- a/share/icons/application/22x22/actions/url-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/actions/username-copy.png b/share/icons/application/22x22/actions/username-copy.png
deleted file mode 100644
index 81e6f5f44..000000000
--- a/share/icons/application/22x22/actions/username-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/mimetypes/application-x-keepassxc.png b/share/icons/application/22x22/mimetypes/application-x-keepassxc.png
deleted file mode 100644
index 22734c82d..000000000
--- a/share/icons/application/22x22/mimetypes/application-x-keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/status/dialog-error.png b/share/icons/application/22x22/status/dialog-error.png
deleted file mode 100644
index d27dcc838..000000000
--- a/share/icons/application/22x22/status/dialog-error.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/status/dialog-information.png b/share/icons/application/22x22/status/dialog-information.png
deleted file mode 100644
index 91aa3829f..000000000
--- a/share/icons/application/22x22/status/dialog-information.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/22x22/status/dialog-warning.png b/share/icons/application/22x22/status/dialog-warning.png
deleted file mode 100644
index 6ca3d718e..000000000
--- a/share/icons/application/22x22/status/dialog-warning.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/24x24/apps/keepassxc-dark.png b/share/icons/application/24x24/apps/keepassxc-dark.png
deleted file mode 100644
index 396492ebe..000000000
--- a/share/icons/application/24x24/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/24x24/apps/keepassxc-locked.png b/share/icons/application/24x24/apps/keepassxc-locked.png
deleted file mode 100644
index 6050adf22..000000000
--- a/share/icons/application/24x24/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/24x24/apps/keepassxc-unlocked.png b/share/icons/application/24x24/apps/keepassxc-unlocked.png
deleted file mode 100644
index f3061b089..000000000
--- a/share/icons/application/24x24/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/24x24/apps/keepassxc.png b/share/icons/application/24x24/apps/keepassxc.png
deleted file mode 100644
index f3061b089..000000000
--- a/share/icons/application/24x24/apps/keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/256x256/apps/keepassxc-dark.png b/share/icons/application/256x256/apps/keepassxc-dark.png
deleted file mode 100644
index e2a8dbf0f..000000000
--- a/share/icons/application/256x256/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/256x256/apps/keepassxc-locked.png b/share/icons/application/256x256/apps/keepassxc-locked.png
deleted file mode 100644
index a3820c501..000000000
--- a/share/icons/application/256x256/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/256x256/apps/keepassxc-unlocked.png b/share/icons/application/256x256/apps/keepassxc-unlocked.png
deleted file mode 100644
index 03485c64e..000000000
--- a/share/icons/application/256x256/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/256x256/apps/keepassxc.png b/share/icons/application/256x256/apps/keepassxc.png
index 03485c64e..91a232118 100644
--- a/share/icons/application/256x256/apps/keepassxc.png
+++ b/share/icons/application/256x256/apps/keepassxc.png
Binary files differ
diff --git a/share/icons/application/32x32/actions/application-exit.png b/share/icons/application/32x32/actions/application-exit.png
deleted file mode 100644
index d7be16865..000000000
--- a/share/icons/application/32x32/actions/application-exit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/auto-type.png b/share/icons/application/32x32/actions/auto-type.png
deleted file mode 100644
index 173bf29ca..000000000
--- a/share/icons/application/32x32/actions/auto-type.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/chronometer.png b/share/icons/application/32x32/actions/chronometer.png
deleted file mode 100644
index 7f9399140..000000000
--- a/share/icons/application/32x32/actions/chronometer.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/configure.png b/share/icons/application/32x32/actions/configure.png
deleted file mode 100644
index 073f87ae9..000000000
--- a/share/icons/application/32x32/actions/configure.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/database-change-key.png b/share/icons/application/32x32/actions/database-change-key.png
deleted file mode 100644
index 1eaab8c8e..000000000
--- a/share/icons/application/32x32/actions/database-change-key.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/database-lock.png b/share/icons/application/32x32/actions/database-lock.png
deleted file mode 100644
index e2c996e6c..000000000
--- a/share/icons/application/32x32/actions/database-lock.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/dialog-close.png b/share/icons/application/32x32/actions/dialog-close.png
deleted file mode 100644
index 82f6adb21..000000000
--- a/share/icons/application/32x32/actions/dialog-close.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/dialog-ok.png b/share/icons/application/32x32/actions/dialog-ok.png
deleted file mode 100644
index f1886d070..000000000
--- a/share/icons/application/32x32/actions/dialog-ok.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/document-close.png b/share/icons/application/32x32/actions/document-close.png
deleted file mode 100644
index 03ff2b41a..000000000
--- a/share/icons/application/32x32/actions/document-close.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/document-edit.png b/share/icons/application/32x32/actions/document-edit.png
deleted file mode 100644
index 3f299e2b8..000000000
--- a/share/icons/application/32x32/actions/document-edit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/document-new.png b/share/icons/application/32x32/actions/document-new.png
deleted file mode 100644
index 4e24f6e24..000000000
--- a/share/icons/application/32x32/actions/document-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/document-open.png b/share/icons/application/32x32/actions/document-open.png
deleted file mode 100644
index 8ba54411c..000000000
--- a/share/icons/application/32x32/actions/document-open.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/document-properties.png b/share/icons/application/32x32/actions/document-properties.png
deleted file mode 100644
index 4700a60d3..000000000
--- a/share/icons/application/32x32/actions/document-properties.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/document-save.png b/share/icons/application/32x32/actions/document-save.png
deleted file mode 100644
index 23079aec0..000000000
--- a/share/icons/application/32x32/actions/document-save.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png b/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png
deleted file mode 100644
index d2ab1c14f..000000000
--- a/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png b/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png
deleted file mode 100644
index 0207e82cd..000000000
--- a/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/entry-clone.png b/share/icons/application/32x32/actions/entry-clone.png
deleted file mode 100644
index 672003a57..000000000
--- a/share/icons/application/32x32/actions/entry-clone.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/entry-delete.png b/share/icons/application/32x32/actions/entry-delete.png
deleted file mode 100644
index f20821af1..000000000
--- a/share/icons/application/32x32/actions/entry-delete.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/entry-edit.png b/share/icons/application/32x32/actions/entry-edit.png
deleted file mode 100644
index 44f83f548..000000000
--- a/share/icons/application/32x32/actions/entry-edit.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/entry-new.png b/share/icons/application/32x32/actions/entry-new.png
deleted file mode 100644
index 9911728bf..000000000
--- a/share/icons/application/32x32/actions/entry-new.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/favicon-download.png b/share/icons/application/32x32/actions/favicon-download.png
deleted file mode 100644
index c8d03d755..000000000
--- a/share/icons/application/32x32/actions/favicon-download.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/group-empty-trash.png b/share/icons/application/32x32/actions/group-empty-trash.png
deleted file mode 100644
index b272ecb56..000000000
--- a/share/icons/application/32x32/actions/group-empty-trash.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/help-about.png b/share/icons/application/32x32/actions/help-about.png
deleted file mode 100644
index dc047ffca..000000000
--- a/share/icons/application/32x32/actions/help-about.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/key-enter.png b/share/icons/application/32x32/actions/key-enter.png
deleted file mode 100644
index 5f20ee92f..000000000
--- a/share/icons/application/32x32/actions/key-enter.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/paperclip.png b/share/icons/application/32x32/actions/paperclip.png
deleted file mode 100644
index 9a623973f..000000000
--- a/share/icons/application/32x32/actions/paperclip.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/password-copy.png b/share/icons/application/32x32/actions/password-copy.png
deleted file mode 100644
index c3d42f754..000000000
--- a/share/icons/application/32x32/actions/password-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/password-generate.png b/share/icons/application/32x32/actions/password-generate.png
deleted file mode 100644
index cad78bc7b..000000000
--- a/share/icons/application/32x32/actions/password-generate.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/password-generator.png b/share/icons/application/32x32/actions/password-generator.png
deleted file mode 100644
index a06575f8c..000000000
--- a/share/icons/application/32x32/actions/password-generator.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/password-show-off.png b/share/icons/application/32x32/actions/password-show-off.png
deleted file mode 100644
index ff5fab697..000000000
--- a/share/icons/application/32x32/actions/password-show-off.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/password-show-on.png b/share/icons/application/32x32/actions/password-show-on.png
deleted file mode 100644
index 72cebaa6f..000000000
--- a/share/icons/application/32x32/actions/password-show-on.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/statistics.png b/share/icons/application/32x32/actions/statistics.png
deleted file mode 100644
index d5b67d0e5..000000000
--- a/share/icons/application/32x32/actions/statistics.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/system-help.png b/share/icons/application/32x32/actions/system-help.png
deleted file mode 100644
index 19440a190..000000000
--- a/share/icons/application/32x32/actions/system-help.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/system-search.png b/share/icons/application/32x32/actions/system-search.png
deleted file mode 100644
index 9c2568347..000000000
--- a/share/icons/application/32x32/actions/system-search.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/url-copy.png b/share/icons/application/32x32/actions/url-copy.png
deleted file mode 100644
index 0ca01aeb7..000000000
--- a/share/icons/application/32x32/actions/url-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/username-copy.png b/share/icons/application/32x32/actions/username-copy.png
deleted file mode 100644
index b781df635..000000000
--- a/share/icons/application/32x32/actions/username-copy.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/actions/view-history.png b/share/icons/application/32x32/actions/view-history.png
deleted file mode 100644
index fe9a9d113..000000000
--- a/share/icons/application/32x32/actions/view-history.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/internet-web-browser.png b/share/icons/application/32x32/apps/internet-web-browser.png
deleted file mode 100644
index 67aa94aff..000000000
--- a/share/icons/application/32x32/apps/internet-web-browser.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/keepassxc-dark.png b/share/icons/application/32x32/apps/keepassxc-dark.png
deleted file mode 100644
index eb3f274f3..000000000
--- a/share/icons/application/32x32/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/keepassxc-locked.png b/share/icons/application/32x32/apps/keepassxc-locked.png
deleted file mode 100644
index cc08472c2..000000000
--- a/share/icons/application/32x32/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/keepassxc-unlocked.png b/share/icons/application/32x32/apps/keepassxc-unlocked.png
deleted file mode 100644
index 5aff3b570..000000000
--- a/share/icons/application/32x32/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/keepassxc.png b/share/icons/application/32x32/apps/keepassxc.png
deleted file mode 100644
index 5aff3b570..000000000
--- a/share/icons/application/32x32/apps/keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/preferences-desktop-icons.png b/share/icons/application/32x32/apps/preferences-desktop-icons.png
deleted file mode 100644
index 3965468a5..000000000
--- a/share/icons/application/32x32/apps/preferences-desktop-icons.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/apps/utilities-terminal.png b/share/icons/application/32x32/apps/utilities-terminal.png
deleted file mode 100644
index 3ce4cc245..000000000
--- a/share/icons/application/32x32/apps/utilities-terminal.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/categories/preferences-other.png b/share/icons/application/32x32/categories/preferences-other.png
deleted file mode 100644
index 24c03a129..000000000
--- a/share/icons/application/32x32/categories/preferences-other.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/mimetypes/application-x-keepassxc.png b/share/icons/application/32x32/mimetypes/application-x-keepassxc.png
deleted file mode 100644
index d7cf40a28..000000000
--- a/share/icons/application/32x32/mimetypes/application-x-keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/32x32/status/security-high.png b/share/icons/application/32x32/status/security-high.png
deleted file mode 100644
index 01f7fcc46..000000000
--- a/share/icons/application/32x32/status/security-high.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/48x48/apps/keepassxc-dark.png b/share/icons/application/48x48/apps/keepassxc-dark.png
deleted file mode 100644
index 81cdcfa19..000000000
--- a/share/icons/application/48x48/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/48x48/apps/keepassxc-locked.png b/share/icons/application/48x48/apps/keepassxc-locked.png
deleted file mode 100644
index c1e87f9d0..000000000
--- a/share/icons/application/48x48/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/48x48/apps/keepassxc-unlocked.png b/share/icons/application/48x48/apps/keepassxc-unlocked.png
deleted file mode 100644
index a784c3604..000000000
--- a/share/icons/application/48x48/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/48x48/apps/keepassxc.png b/share/icons/application/48x48/apps/keepassxc.png
deleted file mode 100644
index a784c3604..000000000
--- a/share/icons/application/48x48/apps/keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/64x64/apps/keepassxc-dark.png b/share/icons/application/64x64/apps/keepassxc-dark.png
deleted file mode 100644
index 5c50146f6..000000000
--- a/share/icons/application/64x64/apps/keepassxc-dark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/64x64/apps/keepassxc-locked.png b/share/icons/application/64x64/apps/keepassxc-locked.png
deleted file mode 100644
index c6e7e239c..000000000
--- a/share/icons/application/64x64/apps/keepassxc-locked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/64x64/apps/keepassxc-unlocked.png b/share/icons/application/64x64/apps/keepassxc-unlocked.png
deleted file mode 100644
index 3e1d4e5ce..000000000
--- a/share/icons/application/64x64/apps/keepassxc-unlocked.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/64x64/apps/keepassxc.png b/share/icons/application/64x64/apps/keepassxc.png
deleted file mode 100644
index 3e1d4e5ce..000000000
--- a/share/icons/application/64x64/apps/keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/64x64/mimetypes/application-x-keepassxc.png b/share/icons/application/64x64/mimetypes/application-x-keepassxc.png
deleted file mode 100644
index f26e140f9..000000000
--- a/share/icons/application/64x64/mimetypes/application-x-keepassxc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/application/index.theme b/share/icons/application/index.theme
new file mode 100644
index 000000000..ed1828763
--- /dev/null
+++ b/share/icons/application/index.theme
@@ -0,0 +1,45 @@
+[Icon Theme]
+Name=application
+Comment=KeePassXC Application Icon Theme
+
+Directories=256x256/apps,scalable/actions,scalable/apps,scalable/categories,scalable/mimetypes,scalable/status
+
+[scalable/actions]
+Size=48
+Type=Scalable
+MinSize=1
+MaxSize=256
+Context=Actions
+
+[scalable/apps]
+Size=48
+Type=Scalable
+MinSize=1
+MaxSize=256
+Context=Applications
+
+[scalable/categories]
+Size=48
+Type=Scalable
+MinSize=1
+MaxSize=256
+Context=Categories
+
+[scalable/mimetypes]
+Size=48
+Type=Scalable
+MinSize=1
+MaxSize=256
+Context=MimeTypes
+
+[scalable/status]
+Size=48
+Type=Scalable
+MinSize=1
+MaxSize=256
+Context=Status
+
+[256x256/apps]
+Size=256
+Type=Fixed
+Context=Applications
diff --git a/share/icons/application/scalable/actions/application-exit.svg b/share/icons/application/scalable/actions/application-exit.svg
new file mode 100644
index 000000000..0c820cf06
--- /dev/null
+++ b/share/icons/application/scalable/actions/application-exit.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-exit-run" width="24" height="24" viewBox="0 0 24 24"><path d="M13.34,8.17C12.41,8.17 11.65,7.4 11.65,6.47A1.69,1.69 0 0,1 13.34,4.78C14.28,4.78 15.04,5.54 15.04,6.47C15.04,7.4 14.28,8.17 13.34,8.17M10.3,19.93L4.37,18.75L4.71,17.05L8.86,17.9L10.21,11.04L8.69,11.64V14.5H7V10.54L11.4,8.67L12.07,8.59C12.67,8.59 13.17,8.93 13.5,9.44L14.36,10.79C15.04,12 16.39,12.82 18,12.82V14.5C16.14,14.5 14.44,13.67 13.34,12.4L12.84,14.94L14.61,16.63V23H12.92V17.9L11.14,16.21L10.3,19.93M21,23H19V3H6V16.11L4,15.69V1H21V23M6,23H4V19.78L6,20.2V23Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/auto-type.svg b/share/icons/application/scalable/actions/auto-type.svg
new file mode 100644
index 000000000..05126f2a3
--- /dev/null
+++ b/share/icons/application/scalable/actions/auto-type.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-keyboard-variant" width="24" height="24" viewBox="0 0 24 24"><path d="M6,16H18V18H6V16M6,13V15H2V13H6M7,15V13H10V15H7M11,15V13H13V15H11M14,15V13H17V15H14M18,15V13H22V15H18M2,10H5V12H2V10M19,12V10H22V12H19M18,12H16V10H18V12M8,12H6V10H8V12M12,12H9V10H12V12M15,12H13V10H15V12M2,9V7H4V9H2M5,9V7H7V9H5M8,9V7H10V9H8M11,9V7H13V9H11M14,9V7H16V9H14M17,9V7H22V9H17Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/bugreport.svg b/share/icons/application/scalable/actions/bugreport.svg
new file mode 100644
index 000000000..0f21ca602
--- /dev/null
+++ b/share/icons/application/scalable/actions/bugreport.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-bug-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/chronometer.svg b/share/icons/application/scalable/actions/chronometer.svg
new file mode 100644
index 000000000..3a6eca3d9
--- /dev/null
+++ b/share/icons/application/scalable/actions/chronometer.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-clock-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/clipboard-text.svg b/share/icons/application/scalable/actions/clipboard-text.svg
new file mode 100644
index 000000000..a6ad04e2e
--- /dev/null
+++ b/share/icons/application/scalable/actions/clipboard-text.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-clipboard-text-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M19,3H14.82C14.25,1.44 12.53,0.64 11,1.2C10.14,1.5 9.5,2.16 9.18,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M12,3A1,1 0 0,1 13,4A1,1 0 0,1 12,5A1,1 0 0,1 11,4A1,1 0 0,1 12,3M7,7H17V5H19V19H5V5H7V7M17,11H7V9H17V11M15,15H7V13H15V15Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/configure.svg b/share/icons/application/scalable/actions/configure.svg
new file mode 100644
index 000000000..5cacc6ff7
--- /dev/null
+++ b/share/icons/application/scalable/actions/configure.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-cog-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/database-change-key.svg b/share/icons/application/scalable/actions/database-change-key.svg
new file mode 100644
index 000000000..7feeb2857
--- /dev/null
+++ b/share/icons/application/scalable/actions/database-change-key.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-key" width="24" height="24" viewBox="0 0 24 24"><path d="M7,14A2,2 0 0,1 5,12A2,2 0 0,1 7,10A2,2 0 0,1 9,12A2,2 0 0,1 7,14M12.65,10C11.83,7.67 9.61,6 7,6A6,6 0 0,0 1,12A6,6 0 0,0 7,18C9.61,18 11.83,16.33 12.65,14H17V18H21V14H23V10H12.65Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/database-lock.svg b/share/icons/application/scalable/actions/database-lock.svg
new file mode 100644
index 000000000..1c1c86e8d
--- /dev/null
+++ b/share/icons/application/scalable/actions/database-lock.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lock-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,17C10.89,17 10,16.1 10,15C10,13.89 10.89,13 12,13A2,2 0 0,1 14,15A2,2 0 0,1 12,17M18,20V10H6V20H18M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10C4,8.89 4.89,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/database-merge.svg b/share/icons/application/scalable/actions/database-merge.svg
new file mode 100644
index 000000000..f7ade0459
--- /dev/null
+++ b/share/icons/application/scalable/actions/database-merge.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-merge" width="24" height="24" viewBox="0 0 24 24"><path d="M8 17L12 13H15.2C15.6 14.2 16.7 15 18 15C19.7 15 21 13.7 21 12S19.7 9 18 9C16.7 9 15.6 9.8 15.2 11H12L8 7V3H3V8H6L10.2 12L6 16H3V21H8V17Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/dialog-close.svg b/share/icons/application/scalable/actions/dialog-close.svg
new file mode 100644
index 000000000..7f72898b4
--- /dev/null
+++ b/share/icons/application/scalable/actions/dialog-close.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-close" width="24" height="24" viewBox="0 0 24 24"><path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/dialog-ok.svg b/share/icons/application/scalable/actions/dialog-ok.svg
new file mode 100644
index 000000000..0f68c682c
--- /dev/null
+++ b/share/icons/application/scalable/actions/dialog-ok.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-checkbox-marked-circle" width="24" height="24" viewBox="0 0 24 24"><path d="M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-close.svg b/share/icons/application/scalable/actions/document-close.svg
new file mode 100644
index 000000000..7f72898b4
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-close.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-close" width="24" height="24" viewBox="0 0 24 24"><path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-edit.svg b/share/icons/application/scalable/actions/document-edit.svg
new file mode 100644
index 000000000..72f075632
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-edit.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-pencil" width="24" height="24" viewBox="0 0 24 24"><path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-export.svg b/share/icons/application/scalable/actions/document-export.svg
new file mode 100644
index 000000000..8b7a6504e
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-export.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-export" width="24" height="24" viewBox="0 0 24 24"><path d="M23,12L19,8V11H10V13H19V16M1,18V6C1,4.89 1.9,4 3,4H15A2,2 0 0,1 17,6V9H15V6H3V18H15V15H17V18A2,2 0 0,1 15,20H3A2,2 0 0,1 1,18Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-import.svg b/share/icons/application/scalable/actions/document-import.svg
new file mode 100644
index 000000000..6cbea2f72
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-import.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-import" width="24" height="24" viewBox="0 0 24 24"><path d="M14,12L10,8V11H2V13H10V16M20,18V6C20,4.89 19.1,4 18,4H6A2,2 0 0,0 4,6V9H6V6H18V18H6V15H4V18A2,2 0 0,0 6,20H18A2,2 0 0,0 20,18Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-new.svg b/share/icons/application/scalable/actions/document-new.svg
new file mode 100644
index 000000000..a721fff66
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-new.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-plus" width="24" height="24" viewBox="0 0 24 24"><path d="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-open-recent.svg b/share/icons/application/scalable/actions/document-open-recent.svg
new file mode 100644
index 000000000..c1f209520
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-open-recent.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-folder-clock-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M15,12H16.5V16.25L19.36,17.94L18.61,19.16L15,17V12M19,8H3V18H9.29C9.1,17.37 9,16.7 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M3,20C1.89,20 1,19.1 1,18V6A2,2 0 0,1 3,4H9L11,6H19A2,2 0 0,1 21,8V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C13.62,23 11.5,21.81 10.25,20H3M16,11A5,5 0 0,0 11,16A5,5 0 0,0 16,21A5,5 0 0,0 21,16A5,5 0 0,0 16,11Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-open.svg b/share/icons/application/scalable/actions/document-open.svg
new file mode 100644
index 000000000..7f1d1d715
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-open.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-folder-open-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M6.1,10L4,18V8H21A2,2 0 0,0 19,6H12L10,4H4A2,2 0 0,0 2,6V18A2,2 0 0,0 4,20H19C19.9,20 20.7,19.4 20.9,18.5L23.2,10H6.1M19,18H6L7.6,12H20.6L19,18Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-properties.svg b/share/icons/application/scalable/actions/document-properties.svg
new file mode 100644
index 000000000..e1ffc9541
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-properties.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-file-edit-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M10 20H6V4H13V9H18V12.1L20 10.1V8L14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H10V20M20.2 13C20.3 13 20.5 13.1 20.6 13.2L21.9 14.5C22.1 14.7 22.1 15.1 21.9 15.3L20.9 16.3L18.8 14.2L19.8 13.2C19.9 13.1 20 13 20.2 13M20.2 16.9L14.1 23H12V20.9L18.1 14.8L20.2 16.9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-save-as.svg b/share/icons/application/scalable/actions/document-save-as.svg
new file mode 100644
index 000000000..527eb5c9e
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-save-as.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-content-save-all-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M1 7H3V21H17V23H3C1.9 23 1 22.11 1 21V7M19 1H7C5.89 1 5 1.9 5 3V17C5 18.1 5.89 19 7 19H21C22.1 19 23 18.1 23 17V5L19 1M21 17H7V3H18.17L21 5.83V17M14 10C12.34 10 11 11.34 11 13S12.34 16 14 16 17 14.66 17 13 15.66 10 14 10M8 4H17V8H8V4Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-save-copy.svg b/share/icons/application/scalable/actions/document-save-copy.svg
new file mode 100644
index 000000000..863eee856
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-save-copy.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-content-save-move-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M13 17H17V14L22 18.5L17 23V20H13V17M14 12.8C13.5 12.31 12.78 12 12 12C10.34 12 9 13.34 9 15C9 16.31 9.84 17.41 11 17.82C11.07 15.67 12.27 13.8 14 12.8M11.09 19H5V5H16.17L19 7.83V12.35C19.75 12.61 20.42 13 21 13.54V7L17 3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H11.81C11.46 20.39 11.21 19.72 11.09 19M6 10H15V6H6V10Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/document-save.svg b/share/icons/application/scalable/actions/document-save.svg
new file mode 100644
index 000000000..fb996b437
--- /dev/null
+++ b/share/icons/application/scalable/actions/document-save.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-content-save-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M17 3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H19C20.1 21 21 20.1 21 19V7L17 3M19 19H5V5H16.17L19 7.83V19M12 12C10.34 12 9 13.34 9 15S10.34 18 12 18 15 16.66 15 15 13.66 12 12 12M6 6H15V10H6V6Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/donate.svg b/share/icons/application/scalable/actions/donate.svg
new file mode 100644
index 000000000..9231a09e5
--- /dev/null
+++ b/share/icons/application/scalable/actions/donate.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-gift-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M22,12V20A2,2 0 0,1 20,22H4A2,2 0 0,1 2,20V12A1,1 0 0,1 1,11V8A2,2 0 0,1 3,6H6.17C6.06,5.69 6,5.35 6,5A3,3 0 0,1 9,2C10,2 10.88,2.5 11.43,3.24V3.23L12,4L12.57,3.23V3.24C13.12,2.5 14,2 15,2A3,3 0 0,1 18,5C18,5.35 17.94,5.69 17.83,6H21A2,2 0 0,1 23,8V11A1,1 0 0,1 22,12M4,20H11V12H4V20M20,20V12H13V20H20M9,4A1,1 0 0,0 8,5A1,1 0 0,0 9,6A1,1 0 0,0 10,5A1,1 0 0,0 9,4M15,4A1,1 0 0,0 14,5A1,1 0 0,0 15,6A1,1 0 0,0 16,5A1,1 0 0,0 15,4M3,8V10H11V8H3M13,8V10H21V8H13Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg b/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg
new file mode 100644
index 000000000..b240239dc
--- /dev/null
+++ b/share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-backspace-reverse-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M5,15.59L6.41,17L10,13.41L13.59,17L15,15.59L11.41,12L15,8.41L13.59,7L10,10.59L6.41,7L5,8.41L8.59,12L5,15.59M2,3A2,2 0 0,0 0,5V19A2,2 0 0,0 2,21H17C17.69,21 18.23,20.64 18.59,20.11L24,12L18.59,3.88C18.23,3.35 17.69,3 17,3H2M2,5H17L21.72,12L17,19H2V5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg b/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg
new file mode 100644
index 000000000..982237790
--- /dev/null
+++ b/share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-backspace-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M19,15.59L17.59,17L14,13.41L10.41,17L9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12L19,15.59M22,3A2,2 0 0,1 24,5V19A2,2 0 0,1 22,21H7C6.31,21 5.77,20.64 5.41,20.11L0,12L5.41,3.88C5.77,3.35 6.31,3 7,3H22M22,5H7L2.28,12L7,19H22V5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/entry-clone.svg b/share/icons/application/scalable/actions/entry-clone.svg
new file mode 100644
index 000000000..5cac2bbec
--- /dev/null
+++ b/share/icons/application/scalable/actions/entry-clone.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-plus-circle-multiple-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M16,8H14V11H11V13H14V16H16V13H19V11H16M2,12C2,9.21 3.64,6.8 6,5.68V3.5C2.5,4.76 0,8.09 0,12C0,15.91 2.5,19.24 6,20.5V18.32C3.64,17.2 2,14.79 2,12M15,3C10.04,3 6,7.04 6,12C6,16.96 10.04,21 15,21C19.96,21 24,16.96 24,12C24,7.04 19.96,3 15,3M15,19C11.14,19 8,15.86 8,12C8,8.14 11.14,5 15,5C18.86,5 22,8.14 22,12C22,15.86 18.86,19 15,19Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/entry-delete.svg b/share/icons/application/scalable/actions/entry-delete.svg
new file mode 100644
index 000000000..66ae96f1b
--- /dev/null
+++ b/share/icons/application/scalable/actions/entry-delete.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-close-circle-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2C6.47,2 2,6.47 2,12C2,17.53 6.47,22 12,22C17.53,22 22,17.53 22,12C22,6.47 17.53,2 12,2M14.59,8L12,10.59L9.41,8L8,9.41L10.59,12L8,14.59L9.41,16L12,13.41L14.59,16L16,14.59L13.41,12L16,9.41L14.59,8Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/entry-edit.svg b/share/icons/application/scalable/actions/entry-edit.svg
new file mode 100644
index 000000000..174a1abce
--- /dev/null
+++ b/share/icons/application/scalable/actions/entry-edit.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-pencil-circle-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M7,14.94L13.06,8.88L15.12,10.94L9.06,17H7V14.94M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M16.7,9.35L15.7,10.35L13.65,8.3L14.65,7.3C14.86,7.08 15.21,7.08 15.42,7.3L16.7,8.58C16.92,8.79 16.92,9.14 16.7,9.35M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/entry-new.svg b/share/icons/application/scalable/actions/entry-new.svg
new file mode 100644
index 000000000..eec7f0724
--- /dev/null
+++ b/share/icons/application/scalable/actions/entry-new.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-plus-circle-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/favicon-download.svg b/share/icons/application/scalable/actions/favicon-download.svg
new file mode 100644
index 000000000..a5f21d0c5
--- /dev/null
+++ b/share/icons/application/scalable/actions/favicon-download.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-download" width="24" height="24" viewBox="0 0 24 24"><path d="M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/getting-started.svg b/share/icons/application/scalable/actions/getting-started.svg
new file mode 100644
index 000000000..3d62971d2
--- /dev/null
+++ b/share/icons/application/scalable/actions/getting-started.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lightbulb-on-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M20,11H23V13H20V11M1,11H4V13H1V11M13,1V4H11V1H13M4.92,3.5L7.05,5.64L5.63,7.05L3.5,4.93L4.92,3.5M16.95,5.63L19.07,3.5L20.5,4.93L18.37,7.05L16.95,5.63M12,6A6,6 0 0,1 18,12C18,14.22 16.79,16.16 15,17.2V19A1,1 0 0,1 14,20H10A1,1 0 0,1 9,19V17.2C7.21,16.16 6,14.22 6,12A6,6 0 0,1 12,6M14,21V22A1,1 0 0,1 13,23H11A1,1 0 0,1 10,22V21H14M11,18H13V15.87C14.73,15.43 16,13.86 16,12A4,4 0 0,0 12,8A4,4 0 0,0 8,12C8,13.86 9.27,15.43 11,15.87V18Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/group-delete.svg b/share/icons/application/scalable/actions/group-delete.svg
new file mode 100644
index 000000000..47cd85aa3
--- /dev/null
+++ b/share/icons/application/scalable/actions/group-delete.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-folder-remove-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M11.46 10.88L12.88 9.46L15 11.59L17.12 9.46L18.54 10.88L16.41 13L18.54 15.12L17.12 16.54L15 14.41L12.88 16.54L11.46 15.12L13.59 13L11.46 10.88M22 8V18C22 19.11 21.11 20 20 20H4C2.9 20 2 19.11 2 18V6C2 4.89 2.9 4 4 4H10L12 6H20C21.11 6 22 6.9 22 8M20 8H4V18H20V8Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/group-edit.svg b/share/icons/application/scalable/actions/group-edit.svg
new file mode 100644
index 000000000..82005ed29
--- /dev/null
+++ b/share/icons/application/scalable/actions/group-edit.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-folder-edit-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M21,11.11C20.92,11.11 20.72,11.21 20.62,11.31L19.62,12.31L21.72,14.42L22.72,13.41C22.92,13.21 22.92,12.81 22.72,12.61L21.42,11.31C21.32,11.21 21.22,11.11 21,11.11M19.12,12.91L13,18.92V21H15.12L21.22,14.92L19.12,12.91M21,8V8.11L19,10.11V8H3V18H11V20H3A2,2 0 0,1 1,18V6C1,4.91 1.9,4 3,4H9L11,6H19C20.12,6 21,6.91 21,8Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/group-empty-trash.svg b/share/icons/application/scalable/actions/group-empty-trash.svg
new file mode 100644
index 000000000..10f79c103
--- /dev/null
+++ b/share/icons/application/scalable/actions/group-empty-trash.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-trash-can-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/group-new.svg b/share/icons/application/scalable/actions/group-new.svg
new file mode 100644
index 000000000..9b35f5616
--- /dev/null
+++ b/share/icons/application/scalable/actions/group-new.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-folder-plus-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12 12H14V10H16V12H18V14H16V16H14V14H12V12M22 8V18C22 19.11 21.11 20 20 20H4C2.89 20 2 19.11 2 18V6C2 4.89 2.89 4 4 4H10L12 6H20C21.11 6 22 6.89 22 8M20 8H4V18H20V8Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/health.svg b/share/icons/application/scalable/actions/health.svg
new file mode 100644
index 000000000..4cd5fa091
--- /dev/null
+++ b/share/icons/application/scalable/actions/health.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-heart-pulse" width="24" height="24" viewBox="0 0 24 24"><path d="M7.5,4A5.5,5.5 0 0,0 2,9.5C2,10 2.09,10.5 2.22,11H6.3L7.57,7.63C7.87,6.83 9.05,6.75 9.43,7.63L11.5,13L12.09,11.58C12.22,11.25 12.57,11 13,11H21.78C21.91,10.5 22,10 22,9.5A5.5,5.5 0 0,0 16.5,4C14.64,4 13,4.93 12,6.34C11,4.93 9.36,4 7.5,4V4M3,12.5A1,1 0 0,0 2,13.5A1,1 0 0,0 3,14.5H5.44L11,20C12,20.9 12,20.9 13,20L18.56,14.5H21A1,1 0 0,0 22,13.5A1,1 0 0,0 21,12.5H13.4L12.47,14.8C12.07,15.81 10.92,15.67 10.55,14.83L8.5,9.5L7.54,11.83C7.39,12.21 7.05,12.5 6.6,12.5H3Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/help-about.svg b/share/icons/application/scalable/actions/help-about.svg
new file mode 100644
index 000000000..74ebf8c88
--- /dev/null
+++ b/share/icons/application/scalable/actions/help-about.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-information-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/hibp.svg b/share/icons/application/scalable/actions/hibp.svg
new file mode 100644
index 000000000..c0af23f39
--- /dev/null
+++ b/share/icons/application/scalable/actions/hibp.svg
@@ -0,0 +1 @@
+<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>haveibeenpwned icon</title><path d="M3.03 2.37a2.09 2.09 0 0 0-.333.02.905.905 0 0 0-.244.067.527.527 0 0 0-.166.088.5.5 0 0 0-.133.144L.652 4.943a4.084 4.084 0 0 0-.308.532 2.184 2.184 0 0 0-.2.496c-.051.17-.089.351-.11.543A5.53 5.53 0 0 0 0 7.143c0 .199.022.356.066.474a.48.48 0 0 0 .188.266.745.745 0 0 0 .32.123c.133.023.288.031.465.031v.002c.184 0 .342-.01.475-.033a.857.857 0 0 0 .332-.123.56.56 0 0 0 .187-.266c.044-.118.067-.275.067-.474V5.729L3.547 2.71a.418.418 0 0 0 .045-.154.177.177 0 0 0-.067-.112.342.342 0 0 0-.177-.054 2.17 2.17 0 0 0-.319-.022zm4.347 5.61a2.03 2.03 0 0 0-.559.065.647.647 0 0 0-.343.205.813.813 0 0 0-.182.387 3.436 3.436 0 0 0-.043.6c0 .228.014.422.043.58a.883.883 0 0 0 .182.386.75.75 0 0 0 .343.205c.144.036.33.053.559.053a2.2 2.2 0 0 0 .547-.053.75.75 0 0 0 .344-.205.75.75 0 0 0 .183-.387c.036-.157.053-.35.053-.58a2.77 2.77 0 0 0-.053-.6.702.702 0 0 0-.183-.386.647.647 0 0 0-.344-.205 1.937 1.937 0 0 0-.547-.065zm4.05 3.69a.337.337 0 0 0-.308.172c-.068.114-.103.316-.103.605 0 .29.035.496.103.617.069.115.172.17.309.17h4.779c.13 0 .228-.055.297-.17.068-.114.101-.32.101-.617 0-.145-.01-.268-.033-.367a.637.637 0 0 0-.08-.24.25.25 0 0 0-.127-.137.335.335 0 0 0-.158-.033zm7.395 0a.337.337 0 0 0-.308.172c-.069.114-.104.316-.104.605 0 .29.035.496.104.617.068.115.171.17.308.17H23.6c.13 0 .228-.055.296-.17.07-.114.104-.32.104-.617 0-.145-.012-.268-.035-.367a.637.637 0 0 0-.08-.24.247.247 0 0 0-.125-.137.343.343 0 0 0-.16-.033zm-11.32 4.29c-.184 0-.342.012-.475.034a.857.857 0 0 0-.332.123.56.56 0 0 0-.187.266 1.383 1.383 0 0 0-.067.474v1.414L4.994 21.29a.418.418 0 0 0-.045.154c.007.044.03.082.067.112.036.03.096.046.177.054.089.013.195.022.32.022.133 0 .242-.006.33-.022a.905.905 0 0 0 .245-.066.527.527 0 0 0 .166-.088.5.5 0 0 0 .133-.144l1.504-2.254a4.12 4.12 0 0 0 .308-.532c.089-.162.153-.326.197-.496.052-.17.09-.351.112-.543.022-.191.033-.4.033-.629a1.38 1.38 0 0 0-.066-.474.477.477 0 0 0-.188-.266.745.745 0 0 0-.32-.123 2.795 2.795 0 0 0-.465-.031z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/key-enter.svg b/share/icons/application/scalable/actions/key-enter.svg
new file mode 100644
index 000000000..05126f2a3
--- /dev/null
+++ b/share/icons/application/scalable/actions/key-enter.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-keyboard-variant" width="24" height="24" viewBox="0 0 24 24"><path d="M6,16H18V18H6V16M6,13V15H2V13H6M7,15V13H10V15H7M11,15V13H13V15H11M14,15V13H17V15H14M18,15V13H22V15H18M2,10H5V12H2V10M19,12V10H22V12H19M18,12H16V10H18V12M8,12H6V10H8V12M12,12H9V10H12V12M15,12H13V10H15V12M2,9V7H4V9H2M5,9V7H7V9H5M8,9V7H10V9H8M11,9V7H13V9H11M14,9V7H16V9H14M17,9V7H22V9H17Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/keyboard-shortcuts.svg b/share/icons/application/scalable/actions/keyboard-shortcuts.svg
new file mode 100644
index 000000000..bee8fddcc
--- /dev/null
+++ b/share/icons/application/scalable/actions/keyboard-shortcuts.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-apple-keyboard-command" width="24" height="24" viewBox="0 0 24 24"><path d="M6,2A4,4 0 0,1 10,6V8H14V6A4,4 0 0,1 18,2A4,4 0 0,1 22,6A4,4 0 0,1 18,10H16V14H18A4,4 0 0,1 22,18A4,4 0 0,1 18,22A4,4 0 0,1 14,18V16H10V18A4,4 0 0,1 6,22A4,4 0 0,1 2,18A4,4 0 0,1 6,14H8V10H6A4,4 0 0,1 2,6A4,4 0 0,1 6,2M16,18A2,2 0 0,0 18,20A2,2 0 0,0 20,18A2,2 0 0,0 18,16H16V18M14,10H10V14H14V10M6,16A2,2 0 0,0 4,18A2,2 0 0,0 6,20A2,2 0 0,0 8,18V16H6M8,6A2,2 0 0,0 6,4A2,2 0 0,0 4,6A2,2 0 0,0 6,8H8V6M18,8A2,2 0 0,0 20,6A2,2 0 0,0 18,4A2,2 0 0,0 16,6V8H18Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/message-close.svg b/share/icons/application/scalable/actions/message-close.svg
new file mode 100644
index 000000000..7f72898b4
--- /dev/null
+++ b/share/icons/application/scalable/actions/message-close.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-close" width="24" height="24" viewBox="0 0 24 24"><path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/move-down.svg b/share/icons/application/scalable/actions/move-down.svg
new file mode 100644
index 000000000..bc5edfb07
--- /dev/null
+++ b/share/icons/application/scalable/actions/move-down.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-chevron-double-down" width="24" height="24" viewBox="0 0 24 24"><path d="M16.59,5.59L18,7L12,13L6,7L7.41,5.59L12,10.17L16.59,5.59M16.59,11.59L18,13L12,19L6,13L7.41,11.59L12,16.17L16.59,11.59Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/move-up.svg b/share/icons/application/scalable/actions/move-up.svg
new file mode 100644
index 000000000..ac6f52c17
--- /dev/null
+++ b/share/icons/application/scalable/actions/move-up.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-chevron-double-up" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,18.41L6,17L12,11L18,17L16.59,18.41L12,13.83L7.41,18.41M7.41,12.41L6,11L12,5L18,11L16.59,12.41L12,7.83L7.41,12.41Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/object-locked.svg b/share/icons/application/scalable/actions/object-locked.svg
index 090e038c0..1c1c86e8d 100644
--- a/share/icons/application/scalable/actions/object-locked.svg
+++ b/share/icons/application/scalable/actions/object-locked.svg
@@ -1,14 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs id="defs3051">
- <style type="text/css" id="current-color-scheme">
- .ColorScheme-Text {
- color:#232629;
- }
- </style>
- </defs>
- <path style="fill:currentColor;fill-opacity:1;stroke:none"
- d="M 11,3 C 8.784,3 7,4.784 7,7 l 0,4 -2,0 c 0,2.666667 0,5.333333 0,8 4,0 8,0 12,0 l 0,-8 c -0.666667,0 -1.333333,0 -2,0 L 15,7 C 15,4.784 13.216,3 11,3 m 0,1 c 1.662,0 3,1.561 3,3.5 L 14,11 8,11 8,7.5 C 8,5.561 9.338,4 11,4"
- class="ColorScheme-Text"
- transform="translate(1,1)"
- />
-</svg>
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lock-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,17C10.89,17 10,16.1 10,15C10,13.89 10.89,13 12,13A2,2 0 0,1 14,15A2,2 0 0,1 12,17M18,20V10H6V20H18M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10C4,8.89 4.89,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/object-unlocked.svg b/share/icons/application/scalable/actions/object-unlocked.svg
index f6c53e581..2925abfeb 100644
--- a/share/icons/application/scalable/actions/object-unlocked.svg
+++ b/share/icons/application/scalable/actions/object-unlocked.svg
@@ -1,15 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs id="defs3051">
- <style type="text/css" id="current-color-scheme">
- .ColorScheme-Text {
- color:#232629;
- }
- </style>
- </defs>
- <path
- style="fill:currentColor;fill-opacity:1;stroke:none"
- d="m11 3c-2.216 0-4 1.784-4 4v1h1v-.5c0-1.939 1.338-3.5 3-3.5 1.662 0 3 1.561 3 3.5v3.5h-5-1-1-1-1v1 7h1 10 1v-8h-1-1v-4c0-2.216-1.784-4-4-4m-5 9h10v6h-10v-6"
- class="ColorScheme-Text"
- transform="translate(1,1)"
- />
-</svg>
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lock-open-variant-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M10 13C11.1 13 12 13.89 12 15C12 16.11 11.11 17 10 17S8 16.11 8 15 8.9 13 10 13M18 1C15.24 1 13 3.24 13 6V8H4C2.9 8 2 8.9 2 10V20C2 21.1 2.9 22 4 22H16C17.1 22 18 21.1 18 20V10C18 8.9 17.1 8 16 8H15V6C15 4.34 16.34 3 18 3S21 4.34 21 6V8H23V6C23 3.24 20.76 1 18 1M16 10V20H4V10H16Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/paperclip.svg b/share/icons/application/scalable/actions/paperclip.svg
new file mode 100644
index 000000000..b201d48bc
--- /dev/null
+++ b/share/icons/application/scalable/actions/paperclip.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-paperclip" width="24" height="24" viewBox="0 0 24 24"><path d="M16.5,6V17.5A4,4 0 0,1 12.5,21.5A4,4 0 0,1 8.5,17.5V5A2.5,2.5 0 0,1 11,2.5A2.5,2.5 0 0,1 13.5,5V15.5A1,1 0 0,1 12.5,16.5A1,1 0 0,1 11.5,15.5V6H10V15.5A2.5,2.5 0 0,0 12.5,18A2.5,2.5 0 0,0 15,15.5V5A4,4 0 0,0 11,1A4,4 0 0,0 7,5V17.5A5.5,5.5 0 0,0 12.5,23A5.5,5.5 0 0,0 18,17.5V6H16.5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/password-copy.svg b/share/icons/application/scalable/actions/password-copy.svg
new file mode 100644
index 000000000..778d19fdf
--- /dev/null
+++ b/share/icons/application/scalable/actions/password-copy.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-key-arrow-right" width="24" height="24" viewBox="0 0 24 24"><path d="M10.7 6C10.1 4.2 8.4 3 6.5 3C4 3 2 5 2 7.5S4 12 6.5 12C8.5 12 10.1 10.8 10.7 9H15V12H18V9H22V6H10.7M6.5 9C5.7 9 5 8.3 5 7.5S5.7 6 6.5 6 8 6.7 8 7.5 7.3 9 6.5 9M13 21V19H8V17H13V15L16 18L13 21" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/password-generate.svg b/share/icons/application/scalable/actions/password-generate.svg
new file mode 100644
index 000000000..719271485
--- /dev/null
+++ b/share/icons/application/scalable/actions/password-generate.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-dice-3-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M19 5V19H5V5H19M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3M12 10.5C11.2 10.5 10.5 11.2 10.5 12S11.2 13.5 12 13.5 13.5 12.8 13.5 12 12.8 10.5 12 10.5M7.5 6C6.7 6 6 6.7 6 7.5S6.7 9 7.5 9 9 8.3 9 7.5 8.3 6 7.5 6M16.5 15C15.7 15 15 15.7 15 16.5C15 17.3 15.7 18 16.5 18C17.3 18 18 17.3 18 16.5C18 15.7 17.3 15 16.5 15Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/password-generator.svg b/share/icons/application/scalable/actions/password-generator.svg
new file mode 100644
index 000000000..719271485
--- /dev/null
+++ b/share/icons/application/scalable/actions/password-generator.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-dice-3-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M19 5V19H5V5H19M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3M12 10.5C11.2 10.5 10.5 11.2 10.5 12S11.2 13.5 12 13.5 13.5 12.8 13.5 12 12.8 10.5 12 10.5M7.5 6C6.7 6 6 6.7 6 7.5S6.7 9 7.5 9 9 8.3 9 7.5 8.3 6 7.5 6M16.5 15C15.7 15 15 15.7 15 16.5C15 17.3 15.7 18 16.5 18C17.3 18 18 17.3 18 16.5C18 15.7 17.3 15 16.5 15Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/password-show-off.svg b/share/icons/application/scalable/actions/password-show-off.svg
new file mode 100644
index 000000000..ac890b093
--- /dev/null
+++ b/share/icons/application/scalable/actions/password-show-off.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-eye-off-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M2,5.27L3.28,4L20,20.72L18.73,22L15.65,18.92C14.5,19.3 13.28,19.5 12,19.5C7,19.5 2.73,16.39 1,12C1.69,10.24 2.79,8.69 4.19,7.46L2,5.27M12,9A3,3 0 0,1 15,12C15,12.35 14.94,12.69 14.83,13L11,9.17C11.31,9.06 11.65,9 12,9M12,4.5C17,4.5 21.27,7.61 23,12C22.18,14.08 20.79,15.88 19,17.19L17.58,15.76C18.94,14.82 20.06,13.54 20.82,12C19.17,8.64 15.76,6.5 12,6.5C10.91,6.5 9.84,6.68 8.84,7L7.3,5.47C8.74,4.85 10.33,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C12.69,17.5 13.37,17.43 14,17.29L11.72,15C10.29,14.85 9.15,13.71 9,12.28L5.6,8.87C4.61,9.72 3.78,10.78 3.18,12Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/password-show-on.svg b/share/icons/application/scalable/actions/password-show-on.svg
new file mode 100644
index 000000000..923a35af6
--- /dev/null
+++ b/share/icons/application/scalable/actions/password-show-on.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-eye-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9M12,4.5C17,4.5 21.27,7.61 23,12C21.27,16.39 17,19.5 12,19.5C7,19.5 2.73,16.39 1,12C2.73,7.61 7,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C15.76,17.5 19.17,15.36 20.82,12C19.17,8.64 15.76,6.5 12,6.5C8.24,6.5 4.83,8.64 3.18,12Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/refresh.svg b/share/icons/application/scalable/actions/refresh.svg
new file mode 100644
index 000000000..767162cb6
--- /dev/null
+++ b/share/icons/application/scalable/actions/refresh.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-refresh" width="24" height="24" viewBox="0 0 24 24"><path d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/reports-exclude.svg b/share/icons/application/scalable/actions/reports-exclude.svg
new file mode 100644
index 000000000..4418319dc
--- /dev/null
+++ b/share/icons/application/scalable/actions/reports-exclude.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lightbulb-off-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,2C9.76,2 7.78,3.05 6.5,4.68L7.93,6.11C8.84,4.84 10.32,4 12,4A5,5 0 0,1 17,9C17,10.68 16.16,12.16 14.89,13.06L16.31,14.5C17.94,13.21 19,11.24 19,9A7,7 0 0,0 12,2M3.28,4L2,5.27L5.04,8.3C5,8.53 5,8.76 5,9C5,11.38 6.19,13.47 8,14.74V17A1,1 0 0,0 9,18H14.73L18.73,22L20,20.72L3.28,4M7.23,10.5L12.73,16H10V13.58C8.68,13 7.66,11.88 7.23,10.5M9,20V21A1,1 0 0,0 10,22H14A1,1 0 0,0 15,21V20H9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/reports.svg b/share/icons/application/scalable/actions/reports.svg
new file mode 100644
index 000000000..3d62971d2
--- /dev/null
+++ b/share/icons/application/scalable/actions/reports.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lightbulb-on-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M20,11H23V13H20V11M1,11H4V13H1V11M13,1V4H11V1H13M4.92,3.5L7.05,5.64L5.63,7.05L3.5,4.93L4.92,3.5M16.95,5.63L19.07,3.5L20.5,4.93L18.37,7.05L16.95,5.63M12,6A6,6 0 0,1 18,12C18,14.22 16.79,16.16 15,17.2V19A1,1 0 0,1 14,20H10A1,1 0 0,1 9,19V17.2C7.21,16.16 6,14.22 6,12A6,6 0 0,1 12,6M14,21V22A1,1 0 0,1 13,23H11A1,1 0 0,1 10,22V21H14M11,18H13V15.87C14.73,15.43 16,13.86 16,12A4,4 0 0,0 12,8A4,4 0 0,0 8,12C8,13.86 9.27,15.43 11,15.87V18Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg b/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg
new file mode 100644
index 000000000..754e90a28
--- /dev/null
+++ b/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-sort-alphabetical-ascending" width="24" height="24" viewBox="0 0 24 24"><path d="M19 17H22L18 21L14 17H17V3H19M11 13V15L7.67 19H11V21H5V19L8.33 15H5V13M9 3H7C5.9 3 5 3.9 5 5V11H7V9H9V11H11V5C11 3.9 10.11 3 9 3M9 7H7V5H9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/sort-alphabetical-descending.svg b/share/icons/application/scalable/actions/sort-alphabetical-descending.svg
new file mode 100644
index 000000000..4dbaadbe2
--- /dev/null
+++ b/share/icons/application/scalable/actions/sort-alphabetical-descending.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-sort-alphabetical-descending" width="24" height="24" viewBox="0 0 24 24"><path d="M19 7H22L18 3L14 7H17V21H19M11 13V15L7.67 19H11V21H5V19L8.33 15H5V13M9 3H7C5.9 3 5 3.9 5 5V11H7V9H9V11H11V5C11 3.9 10.11 3 9 3M9 7H7V5H9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/statistics.svg b/share/icons/application/scalable/actions/statistics.svg
new file mode 100644
index 000000000..caf140209
--- /dev/null
+++ b/share/icons/application/scalable/actions/statistics.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-chart-line" width="24" height="24" viewBox="0 0 24 24"><path d="M16,11.78L20.24,4.45L21.97,5.45L16.74,14.5L10.23,10.75L5.46,19H22V21H2V3H4V17.54L9.5,8L16,11.78Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/system-help.svg b/share/icons/application/scalable/actions/system-help.svg
new file mode 100644
index 000000000..6fe00db35
--- /dev/null
+++ b/share/icons/application/scalable/actions/system-help.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-help" width="24" height="24" viewBox="0 0 24 24"><path d="M10,19H13V22H10V19M12,2C17.35,2.22 19.68,7.62 16.5,11.67C15.67,12.67 14.33,13.33 13.67,14.17C13,15 13,16 13,17H10C10,15.33 10,13.92 10.67,12.92C11.33,11.92 12.67,11.33 13.5,10.67C15.92,8.43 15.32,5.26 12,5A3,3 0 0,0 9,8H6A6,6 0 0,1 12,2Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/system-search.svg b/share/icons/application/scalable/actions/system-search.svg
new file mode 100644
index 000000000..8532cdce0
--- /dev/null
+++ b/share/icons/application/scalable/actions/system-search.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-magnify" width="24" height="24" viewBox="0 0 24 24"><path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/system-software-update.svg b/share/icons/application/scalable/actions/system-software-update.svg
new file mode 100644
index 000000000..881137869
--- /dev/null
+++ b/share/icons/application/scalable/actions/system-software-update.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-cloud-download-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M8,13H10.55V10H13.45V13H16L12,17L8,13M19.35,10.04C21.95,10.22 24,12.36 24,15A5,5 0 0,1 19,20H6A6,6 0 0,1 0,14C0,10.91 2.34,8.36 5.35,8.04C6.6,5.64 9.11,4 12,4C15.64,4 18.67,6.59 19.35,10.04M19,18A3,3 0 0,0 22,15C22,13.45 20.78,12.14 19.22,12.04L17.69,11.93L17.39,10.43C16.88,7.86 14.62,6 12,6C9.94,6 8.08,7.14 7.13,8.97L6.63,9.92L5.56,10.03C3.53,10.24 2,11.95 2,14A4,4 0 0,0 6,18H19Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/url-copy.svg b/share/icons/application/scalable/actions/url-copy.svg
new file mode 100644
index 000000000..1d96b3d3a
--- /dev/null
+++ b/share/icons/application/scalable/actions/url-copy.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-earth-arrow-right" width="24" height="24" viewBox="0 0 24 24"><path d="M19 21V19H15V17H19V15L22 18L19 21M12 18C12 15.8 13.2 13.9 15 12.8C14.9 12.3 14.5 12 14 12H8V10H10C10.6 10 11 9.6 11 9V7H13C14.1 7 15 6.1 15 5V4.6C17.9 5.8 20 8.6 20 12V12.3C20.7 12.5 21.3 12.9 21.9 13.4C22 13 22 12.5 22 12C22 6.5 17.5 2 12 2S2 6.5 2 12 6.5 22 12 22C12.5 22 13 22 13.4 21.9C12.5 20.8 12 19.5 12 18M11 19.9C7 19.4 4 16.1 4 12C4 11.4 4.1 10.8 4.2 10.2L9 15V16C9 17.1 9.9 18 11 18V19.9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/user-guide.svg b/share/icons/application/scalable/actions/user-guide.svg
new file mode 100644
index 000000000..8bad77898
--- /dev/null
+++ b/share/icons/application/scalable/actions/user-guide.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-book-open-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M21,4H3A2,2 0 0,0 1,6V19A2,2 0 0,0 3,21H21A2,2 0 0,0 23,19V6A2,2 0 0,0 21,4M3,19V6H11V19H3M21,19H13V6H21V19M14,9.5H20V11H14V9.5M14,12H20V13.5H14V12M14,14.5H20V16H14V14.5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/username-copy.svg b/share/icons/application/scalable/actions/username-copy.svg
new file mode 100644
index 000000000..b19fe07a6
--- /dev/null
+++ b/share/icons/application/scalable/actions/username-copy.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-account-arrow-right-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M19,21V19H15V17H19V15L22,18L19,21M13,18C13,18.71 13.15,19.39 13.42,20H2V17C2,14.79 5.58,13 10,13C11,13 11.96,13.09 12.85,13.26C13.68,13.42 14.44,13.64 15.11,13.92C13.83,14.83 13,16.32 13,18M4,17V18H11C11,16.96 11.23,15.97 11.64,15.08L10,15C6.69,15 4,15.9 4,17M10,4A4,4 0 0,1 14,8A4,4 0 0,1 10,12A4,4 0 0,1 6,8A4,4 0 0,1 10,4M10,6A2,2 0 0,0 8,8A2,2 0 0,0 10,10A2,2 0 0,0 12,8A2,2 0 0,0 10,6Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/view-history.svg b/share/icons/application/scalable/actions/view-history.svg
new file mode 100644
index 000000000..47e3ae9ad
--- /dev/null
+++ b/share/icons/application/scalable/actions/view-history.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-timer-sand-empty" width="24" height="24" viewBox="0 0 24 24"><path d="M6,2V8H6V8L10,12L6,16V16H6V22H18V16H18V16L14,12L18,8V8H18V2H6M16,16.5V20H8V16.5L12,12.5L16,16.5M12,11.5L8,7.5V4H16V7.5L12,11.5Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/web.svg b/share/icons/application/scalable/actions/web.svg
new file mode 100644
index 000000000..93043316c
--- /dev/null
+++ b/share/icons/application/scalable/actions/web.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-web" width="24" height="24" viewBox="0 0 24 24"><path d="M16.36,14C16.44,13.34 16.5,12.68 16.5,12C16.5,11.32 16.44,10.66 16.36,10H19.74C19.9,10.64 20,11.31 20,12C20,12.69 19.9,13.36 19.74,14M14.59,19.56C15.19,18.45 15.65,17.25 15.97,16H18.92C17.96,17.65 16.43,18.93 14.59,19.56M14.34,14H9.66C9.56,13.34 9.5,12.68 9.5,12C9.5,11.32 9.56,10.65 9.66,10H14.34C14.43,10.65 14.5,11.32 14.5,12C14.5,12.68 14.43,13.34 14.34,14M12,19.96C11.17,18.76 10.5,17.43 10.09,16H13.91C13.5,17.43 12.83,18.76 12,19.96M8,8H5.08C6.03,6.34 7.57,5.06 9.4,4.44C8.8,5.55 8.35,6.75 8,8M5.08,16H8C8.35,17.25 8.8,18.45 9.4,19.56C7.57,18.93 6.03,17.65 5.08,16M4.26,14C4.1,13.36 4,12.69 4,12C4,11.31 4.1,10.64 4.26,10H7.64C7.56,10.66 7.5,11.32 7.5,12C7.5,12.68 7.56,13.34 7.64,14M12,4.03C12.83,5.23 13.5,6.57 13.91,8H10.09C10.5,6.57 11.17,5.23 12,4.03M18.92,8H15.97C15.65,6.75 15.19,5.55 14.59,4.44C16.43,5.07 17.96,6.34 18.92,8M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/freedesktop.svg b/share/icons/application/scalable/apps/freedesktop.svg
index 455a0b3a5..1077e24ca 100644
--- a/share/icons/application/scalable/apps/freedesktop.svg
+++ b/share/icons/application/scalable/apps/freedesktop.svg
@@ -1,92 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- width="108.7505"
- height="91.166321"
- viewBox="0 0 87.000389 72.933061"
- id="svg2"
- sodipodi:docname="freedesktop.svg"
- inkscape:version="0.92.4 5da689c313, 2019-01-14">
- <defs
- id="defs14" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="3840"
- inkscape:window-height="2106"
- id="namedview12"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:zoom="1.7980996"
- inkscape:cx="-97.45169"
- inkscape:cy="25.551539"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg2" />
- <metadata
- id="metadata57">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(0.01402783,0.01402783)"
- id="g37"
- style="fill:#ffffff;fill-rule:nonzero;stroke:#3b80ae;stroke-width:2.45880008;stroke-miterlimit:4">
- <g
- id="g39">
- <path
- d="M 85.277,40.796 C 87.335,48.68 82.61,56.738 74.726,58.795 L 27.143,71.21 C 19.259,73.267 11.2,68.543 9.143,60.658 L 1.695,32.108 C -0.362,24.224 4.362,16.166 12.246,14.109 L 59.83,1.695 c 7.884,-2.057 15.942,2.667 17.999,10.551 l 7.449,28.55 z"
- id="path41"
- style="stroke:#bababa"
- inkscape:connector-curvature="0" />
- <path
- d="m 80.444,39.778 c 1.749,7.854 -1.816,13.621 -9.504,15.447 L 28.704,66.245 C 21.135,68.641 14.615,65.064 12.866,57.409 L 6.53,33.127 C 4.781,24.982 7.239,20.238 16.033,17.68 L 58.27,6.661 c 8.144,-1.826 14.089,1.363 15.838,8.835 z"
- id="path43"
- style="fill:#3b80ae;stroke:none"
- inkscape:connector-curvature="0" />
- </g>
- <path
- d="M 45.542,51.793 24.104,31.102 62.204,26.709 Z"
- id="path45"
- style="opacity:0.5;fill:none;stroke:#ffffff"
- inkscape:connector-curvature="0" />
- <path
- d="m 72.325,28.769 c 0.405,1.55 -0.525,3.136 -2.075,3.541 l -12.331,3.217 c -1.551,0.404 -3.137,-0.525 -3.542,-2.076 L 52.082,24.65 c -0.405,-1.551 0.524,-3.137 2.076,-3.542 l 12.33,-3.217 c 1.551,-0.405 3.137,0.525 3.542,2.076 l 2.295,8.801 z"
- id="path47"
- inkscape:connector-curvature="0" />
- <path
- d="m 36.51,33.625 c 0.496,1.9 -0.645,3.844 -2.545,4.34 l -15.112,3.943 c -1.901,0.496 -3.845,-0.644 -4.34,-2.544 L 11.699,28.578 c -0.496,-1.901 0.644,-3.844 2.544,-4.34 l 15.113,-3.942 c 1.901,-0.496 3.845,0.643 4.34,2.544 l 2.814,10.786 z"
- id="path49"
- inkscape:connector-curvature="0" />
- <path
- d="m 52.493,53.208 c 0.278,1.065 -0.36,2.154 -1.425,2.432 L 42.6,57.848 c -1.064,0.277 -2.153,-0.36 -2.431,-1.426 l -1.577,-6.043 c -0.277,-1.064 0.36,-2.153 1.425,-2.432 l 8.468,-2.209 c 1.064,-0.277 2.154,0.361 2.431,1.426 l 1.577,6.043 z"
- id="path51"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
+<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>freedesktop.org icon</title><path d="M17.702 1.934a4.375 4.375 0 0 0-1.264.14L3.3 5.502a4.418 4.418 0 0 0-3.156 5.384L2.2 18.77a4.418 4.418 0 0 0 5.384 3.157l13.139-3.429c2.212-.577 3.573-2.745 3.222-4.958h.045l-.111-.425-2.057-7.884a4.421 4.421 0 0 0-4.12-3.296zm-.02.677a3.73 3.73 0 0 1 3.483 2.791l1.946 7.458.11.425c.523 2-.67 4.034-2.67 4.555L7.412 21.268a3.729 3.729 0 0 1-4.555-2.67L.8 10.715a3.729 3.729 0 0 1 2.671-4.556L16.61 2.731a3.77 3.77 0 0 1 1.072-.12zm-.392 1.024a5.386 5.386 0 0 0-1.197.139L4.431 6.817c-2.428.706-3.107 2.016-2.624 4.265l1.75 6.704c.482 2.114 2.282 3.102 4.372 2.44l11.662-3.043c2.123-.504 3.107-2.096 2.624-4.265l-1.749-6.704c-.392-1.677-1.55-2.572-3.176-2.579zm1.25 3.554a.46.46 0 0 1 .472.345l.623 2.388.01.042a.457.457 0 0 1-.33.564l-3.405.888a.457.457 0 0 1-.564-.33l-.633-2.43a.457.457 0 0 1 .33-.565l3.405-.888a.468.468 0 0 1 .093-.014zm-10.216.658a.64.64 0 0 1 .655.48l.777 2.978a.638.638 0 0 1-.46.784l-4.172 1.089a.638.638 0 0 1-.784-.46L3.563 9.74a.638.638 0 0 1 .46-.785l4.172-1.088a.646.646 0 0 1 .13-.02zm5.859 1.466l.173.663-4.12.476-.174-.663zm.898 2.542c.183.147.41.237.648.252l-1.57 2.362a.892.892 0 0 0-.642-.26zm-5.626.894l2.032 1.96-.52.136a.867.867 0 0 0-.22.095l-2.062-1.99zm4.064 2.137a.209.209 0 0 1 .215.157l.435 1.669a.206.206 0 0 1-.15.258l-2.338.61a.206.206 0 0 1-.257-.152l-.436-1.668a.206.206 0 0 1 .151-.258l2.338-.61a.207.207 0 0 1 .042-.006Z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/internet-web-browser.svg b/share/icons/application/scalable/apps/internet-web-browser.svg
new file mode 100644
index 000000000..93043316c
--- /dev/null
+++ b/share/icons/application/scalable/apps/internet-web-browser.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-web" width="24" height="24" viewBox="0 0 24 24"><path d="M16.36,14C16.44,13.34 16.5,12.68 16.5,12C16.5,11.32 16.44,10.66 16.36,10H19.74C19.9,10.64 20,11.31 20,12C20,12.69 19.9,13.36 19.74,14M14.59,19.56C15.19,18.45 15.65,17.25 15.97,16H18.92C17.96,17.65 16.43,18.93 14.59,19.56M14.34,14H9.66C9.56,13.34 9.5,12.68 9.5,12C9.5,11.32 9.56,10.65 9.66,10H14.34C14.43,10.65 14.5,11.32 14.5,12C14.5,12.68 14.43,13.34 14.34,14M12,19.96C11.17,18.76 10.5,17.43 10.09,16H13.91C13.5,17.43 12.83,18.76 12,19.96M8,8H5.08C6.03,6.34 7.57,5.06 9.4,4.44C8.8,5.55 8.35,6.75 8,8M5.08,16H8C8.35,17.25 8.8,18.45 9.4,19.56C7.57,18.93 6.03,17.65 5.08,16M4.26,14C4.1,13.36 4,12.69 4,12C4,11.31 4.1,10.64 4.26,10H7.64C7.56,10.66 7.5,11.32 7.5,12C7.5,12.68 7.56,13.34 7.64,14M12,4.03C12.83,5.23 13.5,6.57 13.91,8H10.09C10.5,6.57 11.17,5.23 12,4.03M18.92,8H15.97C15.65,6.75 15.19,5.55 14.59,4.44C16.43,5.07 17.96,6.34 18.92,8M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc-dark.svg b/share/icons/application/scalable/apps/keepassxc-dark.svg
deleted file mode 100644
index d296e68ff..000000000
--- a/share/icons/application/scalable/apps/keepassxc-dark.svg
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- width="100"
- height="100"
- viewBox="0 0 99.999997 100"
- id="svg2"
- version="1.1">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient4257">
- <stop
- style="stop-color:#808080;stop-opacity:1"
- offset="0"
- id="stop4259" />
- <stop
- style="stop-color:#4d4d4d;stop-opacity:1"
- offset="1"
- id="stop4261" />
- </linearGradient>
- <linearGradient
- id="linearGradient4153"
- osb:paint="solid">
- <stop
- style="stop-color:#b3b3b3;stop-opacity:1;"
- offset="0"
- id="stop4155" />
- </linearGradient>
- <linearGradient
- xlink:href="#linearGradient4257"
- id="linearGradient4263"
- x1="50.09866"
- y1="86.831215"
- x2="49.526104"
- y2="8.6772995"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <circle
- cy="50"
- cx="50"
- id="path5201"
- style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
- r="45.934067" />
- <circle
- r="42.32143"
- cy="50.000023"
- cx="50"
- id="path3336"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path4264"
- d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
- style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3336-3-2-7"
- d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
- style="opacity:0.94;fill:url(#linearGradient4263);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-</svg>
diff --git a/share/icons/application/scalable/apps/keepassxc-locked.svg b/share/icons/application/scalable/apps/keepassxc-locked.svg
index 82e766940..7d84d536e 100644
--- a/share/icons/application/scalable/apps/keepassxc-locked.svg
+++ b/share/icons/application/scalable/apps/keepassxc-locked.svg
@@ -1,97 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- width="100"
- height="100"
- viewBox="0 0 99.999997 100"
- id="svg2"
- version="1.1">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient5771"
- osb:paint="solid">
- <stop
- style="stop-color:#ff4300;stop-opacity:1;"
- offset="0"
- id="stop5773" />
- </linearGradient>
- <linearGradient
- id="linearGradient4321"
- osb:paint="solid">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop4323" />
- </linearGradient>
- <linearGradient
- id="linearGradient4257">
- <stop
- style="stop-color:#808080;stop-opacity:1"
- offset="0"
- id="stop4259" />
- <stop
- style="stop-color:#4d4d4d;stop-opacity:1"
- offset="1"
- id="stop4261" />
- </linearGradient>
- <linearGradient
- id="linearGradient4153"
- osb:paint="solid">
- <stop
- style="stop-color:#b3b3b3;stop-opacity:1;"
- offset="0"
- id="stop4155" />
- </linearGradient>
- <linearGradient
- xlink:href="#linearGradient4257"
- id="linearGradient4263"
- x1="50.09866"
- y1="86.831215"
- x2="49.526104"
- y2="8.6772995"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <circle
- cy="50"
- cx="50"
- id="path5201"
- style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
- r="45.934067" />
- <circle
- r="42.32143"
- cy="50.000023"
- cx="50"
- id="path3336"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path4264"
- d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
- style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3336-3-2-7"
- d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
- style="opacity:0.94;fill:url(#linearGradient4263);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="clip-rule:evenodd;fill:#ff6600;fill-rule:evenodd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke:none;stroke-opacity:1;stroke-linejoin:round;opacity:0.99999999"
- d="m 92.663118,96.834263 -27.995661,0 c -1.93315,0 -3.498582,-1.568935 -3.498582,-3.503838 l 0,-17.520917 c 0,-1.934902 1.567183,-3.505586 3.498582,-3.505586 l 1.749292,0 0,-5.254878 c 0,-6.77303 5.484262,-12.264297 12.248534,-12.264297 6.764282,0 12.248545,5.491267 12.248545,12.264297 l 0,5.254878 1.74929,0 c 1.933144,0 3.498575,1.568932 3.498575,3.505586 l 0,17.520917 c 0,1.93315 -1.567175,3.503838 -3.498575,3.503838 z M 85.664201,67.049044 c 0,-3.869803 -3.134367,-7.00767 -6.998918,-7.00767 -3.864549,0 -6.998909,3.137867 -6.998909,7.00767 l 0,5.254878 13.997827,0 0,-5.254878 z"
- id="path3" />
-</svg>
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><circle style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff;stroke:#515151;stroke-width:3.1319;stroke-linecap:round;stroke-linejoin:round" cx="50" cy="50" r="45.9"/><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="50.2693" y1="-1470.9402" x2="49.6968" y2="-1392.7863" gradientTransform="matrix(1 0 0 -1 0 -1384.1102)"><stop offset="0" style="stop-color:gray"/><stop offset="1" style="stop-color:#4b4b4d"/></linearGradient><path style="fill:url(#SVGID_1_)" d="M56.7 13.7c.1.5.2 1 .2 1.5.0 3.8-3.1 6.9-6.9 6.9-3.8.0-6.9-3.1-6.9-6.9.0-.5.1-1 .2-1.5 2.2-.4 4.5-.6 6.7-.6C52.3 13 54.5 13.3 56.7 13.7zM30.6 22.1c0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l8.3-8.3-.5-7.3 3.9-3.9-3.9-3.9 5.9-5.9-5.9-5.9.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8C80.1 25 86.9 37 87 50c0 20.4-16.5 37-37 37-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7C30.8 19.6 30.6 20.8 30.6 22.1zM44.5 44.2h2.8v27.7h-2.8V44.2v0 0z"/><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="73.8" y1="1532.1382" x2="73.8" y2="1574.0038" gradientTransform="matrix(1 0 0 1 0 -1484)"><stop offset="0" style="stop-color:#d69029"/><stop offset="1" style="stop-color:#af7125"/></linearGradient><path style="fill:url(#SVGID_2_)" d="M59.6 94.8c-3.7.0-6.7-3-6.7-6.7V67.6c0-3.3 2.5-6.1 5.7-6.6v-4.1c0-8.4 6.8-15.2 15.2-15.2S89 48.5 89 56.9V61c3.2.5 5.7 3.3 5.7 6.6v20.5c0 3.7-3 6.7-6.7 6.7.0.0-28.4.0-28.4.0zM79.7 61v-5c0-3.2-2.6-5.9-5.9-5.9S68 52.7 68 56v5H79.7z"/><path style="fill:#fff" d="M73.8 42.7c7.8.0 14.2 6.4 14.2 14.2V62c3.1.0 5.7 2.6 5.7 5.7v20.5c0 3.1-2.6 5.7-5.7 5.7H59.6c-3.1.0-5.7-2.6-5.7-5.7V67.6c0-3.1 2.6-5.7 5.7-5.7v-5.1C59.6 49.1 66 42.7 73.8 42.7M67 62h13.7v-6c0-3.8-3.1-6.9-6.9-6.9C70 49.1 67 52.2 67 56v6M73.8 40.7c-8.9.0-16.2 7.3-16.2 16.2v3.3c-3.3.9-5.7 3.9-5.7 7.4v20.5c0 4.2 3.4 7.7 7.7 7.7H88c4.2.0 7.7-3.4 7.7-7.7V67.6c0-3.5-2.4-6.5-5.7-7.4v-3.3C90 48 82.7 40.7 73.8 40.7v0zM69 60v-4c0-2.7 2.2-4.9 4.9-4.9 2.7.0 4.9 2.2 4.9 4.9v4H69v0z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg
new file mode 100644
index 000000000..128588928
--- /dev/null
+++ b/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg
@@ -0,0 +1 @@
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><path d="M43.1 15.2c0-.5.1-1 .2-1.5 2.2-.4 4.5-.6 6.7-.6 2.3-.1 4.5.2 6.7.6.1.5.2 1 .2 1.5.0 3.8-3.1 6.9-6.9 6.9S43.1 19 43.1 15.2zM95 64.6c.4.9.7 1.9.7 3v20.5c0 4.3-3.5 7.7-7.7 7.7H62.6c-4 1.1-8.2 1.7-12.6 1.7C23.8 97.5 2.5 76.2 2.5 50S23.8 2.5 50 2.5s47.5 21.3 47.3 47.7C97.3 55.2 96.5 60.1 95 64.6zM50.1 94.2c1.5.0 3-.1 4.5-.2-1.7-1.4-2.7-3.5-2.7-5.9v-1.2C51.3 87 50.6 87 50 87c-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7-.2 1.3-.4 2.5-.4 3.8.0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l1.9-1.9V67.6c0-3.5 2.4-6.5 5.7-7.4v-3.3c0-2.7.7-5.2 1.8-7.5l-1.6-1.6.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8 10.4 6.3 17 17.1 17.9 29.1 1.9 2.7 3.1 5.9 3.1 9.5v3.3c1 .3 1.9.8 2.7 1.4 1-3.7 1.6-7.6 1.6-11.6C94.3 25.6 74.4 5.7 50 5.7S5.7 25.6 5.7 50 25.6 94.3 50.1 94.2zM92.8 67.7c0-3-2.5-5.5-5.5-5.5v-4.9c0-7.5-6.1-13.6-13.6-13.6s-13.6 6.1-13.6 13.5v4.9c-3 0-5.5 2.5-5.5 5.5v19.7c0 3 2.5 5.5 5.5 5.5h27.2c3 0 5.5-2.5 5.5-5.5V67.7zM44.5 71.9h2.8V44.2h-2.8V71.9zM73.8 50C70 50 67 52.9 67 56.4v0V62h13.7v-5.6.0C80.7 52.9 77.6 50 73.8 50z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg
new file mode 100644
index 000000000..93452845a
--- /dev/null
+++ b/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg
@@ -0,0 +1 @@
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><path d="M50 97.5C23.8 97.5 2.5 76.2 2.5 50S23.8 2.5 50 2.5 97.5 23.8 97.5 50 76.2 97.5 50 97.5zM50 5.7C25.6 5.7 5.7 25.6 5.7 50S25.6 94.3 50 94.3 94.3 74.4 94.3 50 74.4 5.7 50 5.7zM56.7 13.7c.1.5.2 1 .2 1.5.0 3.8-3.1 6.9-6.9 6.9-3.8.0-6.9-3.1-6.9-6.9.0-.5.1-1 .2-1.5 2.2-.4 4.5-.6 6.7-.6C52.3 13 54.5 13.3 56.7 13.7zM30.6 22.1c0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l8.3-8.3-.5-7.3 3.9-3.9-3.9-3.9 5.9-5.9-5.9-5.9.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8C80.1 25 86.9 37 87 50c0 20.4-16.5 37-37 37-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7C30.8 19.6 30.6 20.8 30.6 22.1zM44.5 44.2h2.8v27.7h-2.8V44.2v0 0z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg
new file mode 100644
index 000000000..79bc8d49d
--- /dev/null
+++ b/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg
@@ -0,0 +1 @@
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><path style="fill:#fff" d="M87.1 62.4v-4.8c0-7.3-6-13.3-13.3-13.3s-13.3 6-13.3 13.2v4.8c-2.9.0-5.3 2.4-5.3 5.3v19.3c0 2.9 2.4 5.3 5.3 5.3h26.6c2.9.0 5.3-2.4 5.3-5.3V67.7C92.4 64.8 90 62.4 87.1 62.4zM80.3 62.4H67.4V57c0-3.4 2.8-6.2 6.4-6.2 3.6.0 6.5 2.8 6.5 6.2V62.4zM50 4.2C24.8 4.2 4.2 24.8 4.2 50S24.8 95.8 50 95.8c2.3.0 4.6-.2 6.8-.5-2.9-1.1-4.9-3.9-4.9-7.2V87c-.6.0-1.3.0-1.9.0-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7-.2 1.3-.4 2.5-.4 3.8.0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l1.9-1.9V67.6c0-3.5 2.4-6.5 5.7-7.4v-3.3c0-2.7.7-5.2 1.8-7.5l-1.6-1.6.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8 10.4 6.3 17 17.1 17.9 29.1 1.9 2.7 3.1 5.9 3.1 9.5v3.3c1.6.4 2.9 1.4 3.9 2.6 1.2-4.1 1.8-8.3 1.8-12.8C95.8 24.8 75.2 4.2 50 4.2zM47.3 71.9h-2.8V44.2h2.8V71.9zM50 22.1c-3.8.0-6.9-3.1-6.9-6.9.0-.5.1-1 .2-1.5 2.2-.4 4.5-.6 6.7-.6 2.3-.1 4.5.2 6.7.6.1.5.2 1 .2 1.5C56.9 19 53.8 22.1 50 22.1z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg
new file mode 100644
index 000000000..4e72e893b
--- /dev/null
+++ b/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg
@@ -0,0 +1 @@
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><path style="fill:#fff" d="M50 4.2C24.8 4.2 4.2 24.8 4.2 50S24.8 95.8 50 95.8 95.8 75.2 95.8 50 75.2 4.2 50 4.2zM43.3 13.7c2.2-.4 4.5-.6 6.7-.6 2.3-.1 4.5.2 6.7.6.1.5.2 1 .2 1.5.0 3.8-3.1 6.9-6.9 6.9s-6.9-3.1-6.9-6.9C43.1 14.7 43.2 14.2 43.3 13.7zM47.3 44.2v27.7h-2.8V44.2H47.3zM50 87c-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7-.2 1.3-.4 2.5-.4 3.8.0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l8.3-8.3-.5-7.3 3.9-3.9-3.9-3.9 5.9-5.9-5.9-5.9.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8C80.1 25 86.9 37 87 50 87 70.4 70.5 87 50 87z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc-unlocked.svg b/share/icons/application/scalable/apps/keepassxc-unlocked.svg
index c2d5758f0..88a440965 100644
--- a/share/icons/application/scalable/apps/keepassxc-unlocked.svg
+++ b/share/icons/application/scalable/apps/keepassxc-unlocked.svg
@@ -1,77 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.1"
- id="svg2"
- viewBox="0 0 99.999997 100"
- height="100"
- width="100">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient4316">
- <stop
- id="stop4318"
- offset="0"
- style="stop-color:#226e23;stop-opacity:1" />
- <stop
- id="stop4320"
- offset="1"
- style="stop-color:#63ab3a;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- osb:paint="solid"
- id="linearGradient4153">
- <stop
- id="stop4155"
- offset="0"
- style="stop-color:#b3b3b3;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- xlink:href="#linearGradient4316"
- id="linearGradient5199"
- x1="53.238865"
- y1="12.753036"
- x2="53.238865"
- y2="86.356995"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <circle
- r="45.934067"
- style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
- id="path5201"
- cx="50"
- cy="50" />
- <circle
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3336"
- cx="50"
- cy="50.000023"
- r="42.32143" />
- <path
- style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
- id="path4264" />
- <path
- style="opacity:0.94;fill:url(#linearGradient5199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
- id="path3336-3-2-7" />
-</svg>
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><circle style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff;stroke:#515151;stroke-width:3.1319;stroke-linecap:round;stroke-linejoin:round" cx="50" cy="50" r="45.9"/><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="50" y1="754.7531" x2="50" y2="828.357" gradientTransform="matrix(1 0 0 1 0 -742)"><stop offset="0" style="stop-color:#35762e"/><stop offset="1" style="stop-color:#6daa43"/></linearGradient><path style="fill:url(#SVGID_1_)" d="M56.7 13.7c.1.5.2 1 .2 1.5.0 3.8-3.1 6.9-6.9 6.9-3.8.0-6.9-3.1-6.9-6.9.0-.5.1-1 .2-1.5 2.2-.4 4.5-.6 6.7-.6C52.3 13 54.5 13.3 56.7 13.7zM30.6 22.1c0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l8.3-8.3-.5-7.3 3.9-3.9-3.9-3.9 5.9-5.9-5.9-5.9.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8C80.1 25 86.9 37 87 50c0 20.4-16.5 37-37 37-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7C30.8 19.6 30.6 20.8 30.6 22.1zM44.5 44.2h2.8v27.7h-2.8V44.2v0 0z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/keepassxc.svg b/share/icons/application/scalable/apps/keepassxc.svg
index c2d5758f0..433a4041b 100644
--- a/share/icons/application/scalable/apps/keepassxc.svg
+++ b/share/icons/application/scalable/apps/keepassxc.svg
@@ -1,77 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.1"
- id="svg2"
- viewBox="0 0 99.999997 100"
- height="100"
- width="100">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient4316">
- <stop
- id="stop4318"
- offset="0"
- style="stop-color:#226e23;stop-opacity:1" />
- <stop
- id="stop4320"
- offset="1"
- style="stop-color:#63ab3a;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- osb:paint="solid"
- id="linearGradient4153">
- <stop
- id="stop4155"
- offset="0"
- style="stop-color:#b3b3b3;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- xlink:href="#linearGradient4316"
- id="linearGradient5199"
- x1="53.238865"
- y1="12.753036"
- x2="53.238865"
- y2="86.356995"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <circle
- r="45.934067"
- style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
- id="path5201"
- cx="50"
- cy="50" />
- <circle
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3336"
- cx="50"
- cy="50.000023"
- r="42.32143" />
- <path
- style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
- id="path4264" />
- <path
- style="opacity:0.94;fill:url(#linearGradient5199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
- id="path3336-3-2-7" />
-</svg>
+<svg baseProfile="basic" id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><circle style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff;stroke:#515151;stroke-width:3.1319;stroke-linecap:round;stroke-linejoin:round" cx="50" cy="50" r="45.9"/><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="50" y1="-654.8633" x2="50" y2="-728.4672" gradientTransform="matrix(1 0 0 -1 0 -642.1102)"><stop offset="0" style="stop-color:#35762e"/><stop offset="1" style="stop-color:#6daa43"/></linearGradient><path style="fill:url(#SVGID_1_)" d="M56.7 13.7c.1.5.2 1 .2 1.5.0 3.8-3.1 6.9-6.9 6.9-3.8.0-6.9-3.1-6.9-6.9.0-.5.1-1 .2-1.5 2.2-.4 4.5-.6 6.7-.6C52.3 13 54.5 13.3 56.7 13.7zM30.6 22.1c0 7.7 4.5 14.4 11.1 17.5v35.1L50 83l8.3-8.3-.5-7.3 3.9-3.9-3.9-3.9 5.9-5.9-5.9-5.9.5-8.2c6.5-3.1 11.1-9.8 11.1-17.5.0-1.3-.1-2.5-.4-3.8C80.1 25 86.9 37 87 50c0 20.4-16.5 37-37 37-20.4.0-37-16.5-37-37 0-13 6.8-25 18-31.7C30.8 19.6 30.6 20.8 30.6 22.1zM44.5 44.2h2.8v27.7h-2.8V44.2v0 0z"/></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/preferences-desktop-icons.svg b/share/icons/application/scalable/apps/preferences-desktop-icons.svg
new file mode 100644
index 000000000..98ccc57d4
--- /dev/null
+++ b/share/icons/application/scalable/apps/preferences-desktop-icons.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-emoticon-happy-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8C16.3,8 17,8.7 17,9.5M12,17.23C10.25,17.23 8.71,16.5 7.81,15.42L9.23,14C9.68,14.72 10.75,15.23 12,15.23C13.25,15.23 14.32,14.72 14.77,14L16.19,15.42C15.29,16.5 13.75,17.23 12,17.23Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/preferences-system-network-sharing.svg b/share/icons/application/scalable/apps/preferences-system-network-sharing.svg
new file mode 100644
index 000000000..d9dbbc2a6
--- /dev/null
+++ b/share/icons/application/scalable/apps/preferences-system-network-sharing.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-lan" width="24" height="24" viewBox="0 0 24 24"><path d="M10,2C8.89,2 8,2.89 8,4V7C8,8.11 8.89,9 10,9H11V11H2V13H6V15H5C3.89,15 3,15.89 3,17V20C3,21.11 3.89,22 5,22H9C10.11,22 11,21.11 11,20V17C11,15.89 10.11,15 9,15H8V13H16V15H15C13.89,15 13,15.89 13,17V20C13,21.11 13.89,22 15,22H19C20.11,22 21,21.11 21,20V17C21,15.89 20.11,15 19,15H18V13H22V11H13V9H14C15.11,9 16,8.11 16,7V4C16,2.89 15.11,2 14,2H10M10,4H14V7H10V4M5,17H9V20H5V17M15,17H19V20H15V17Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/apps/utilities-terminal.svg b/share/icons/application/scalable/apps/utilities-terminal.svg
new file mode 100644
index 000000000..c95f81788
--- /dev/null
+++ b/share/icons/application/scalable/apps/utilities-terminal.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-console-line" width="24" height="24" viewBox="0 0 24 24"><path d="M13,19V16H21V19H13M8.5,13L2.47,7H6.71L11.67,11.95C12.25,12.54 12.25,13.5 11.67,14.07L6.74,19H2.5L8.5,13Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/categories/preferences-other.svg b/share/icons/application/scalable/categories/preferences-other.svg
new file mode 100644
index 000000000..16cc434e9
--- /dev/null
+++ b/share/icons/application/scalable/categories/preferences-other.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-file-document-edit-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M8,12H16V14H8V12M10,20H6V4H13V9H18V12.1L20,10.1V8L14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H10V20M8,18H12.1L13,17.1V16H8V18M20.2,13C20.3,13 20.5,13.1 20.6,13.2L21.9,14.5C22.1,14.7 22.1,15.1 21.9,15.3L20.9,16.3L18.8,14.2L19.8,13.2C19.9,13.1 20,13 20.2,13M20.2,16.9L14.1,23H12V20.9L18.1,14.8L20.2,16.9Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/status/dialog-error.svg b/share/icons/application/scalable/status/dialog-error.svg
new file mode 100644
index 000000000..0a6c3e674
--- /dev/null
+++ b/share/icons/application/scalable/status/dialog-error.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-alert-circle-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/status/dialog-information.svg b/share/icons/application/scalable/status/dialog-information.svg
new file mode 100644
index 000000000..74ebf8c88
--- /dev/null
+++ b/share/icons/application/scalable/status/dialog-information.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-information-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/status/dialog-warning.svg b/share/icons/application/scalable/status/dialog-warning.svg
new file mode 100644
index 000000000..cf0f8c074
--- /dev/null
+++ b/share/icons/application/scalable/status/dialog-warning.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-alert-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16" /></svg> \ No newline at end of file
diff --git a/share/icons/application/scalable/status/security-high.svg b/share/icons/application/scalable/status/security-high.svg
new file mode 100644
index 000000000..ec348fd62
--- /dev/null
+++ b/share/icons/application/scalable/status/security-high.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-shield-outline" width="24" height="24" viewBox="0 0 24 24"><path d="M21,11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1L21,5V11M12,21C15.75,20 19,15.54 19,11.22V6.3L12,3.18L5,6.3V11.22C5,15.54 8.25,20 12,21Z" /></svg> \ No newline at end of file
diff --git a/share/icons/badges/0_ShareActive.svg b/share/icons/badges/0_ShareActive.svg
new file mode 100644
index 000000000..c9232eb62
--- /dev/null
+++ b/share/icons/badges/0_ShareActive.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(1.91665,0,0,1.91665,1,-1967.54)"><path d="M9.5 1032.4C5.91 1032.4 3 1035.3 3 1038.9 3 1038.9 2.999 1038.9 3 1039 1.216 1039.9.0 1041.7.0 1043.9c0 3 2.462 5.5 5.5 5.5H19c2.761.0 5-2.30000000000018 5-5C24 1042.3 22.703 1040.5 20.875 1039.7 20.946 1039.5 21 1039.2 21 1038.9c0-2-1.567-3.5-3.5-3.5C16.702 1035.4 15.964 1035.6 15.375 1036.1 14.332 1033.9 12.093 1032.4 9.5 1032.4z" style="fill:#62c74d;fill-rule:nonzero;stroke:#58954a;stroke-width:.37px"/><g transform="matrix(0.655185,-0.655185,0.322119,0.322119,-7.37147,1045.81)"><path d="M24.613 24.744H14.276L14.288 16.448 12.225 16.431l.016 12.486H24.613V24.744z" style="fill:#fff"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/badges/1_ShareInactive.svg b/share/icons/badges/1_ShareInactive.svg
new file mode 100644
index 000000000..c458b211a
--- /dev/null
+++ b/share/icons/badges/1_ShareInactive.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(1.91665,0,0,1.91665,1,-1967.54)"><path d="M9.5 1032.4C5.91 1032.4 3 1035.3 3 1038.9 3 1038.9 2.999 1038.9 3 1039 1.216 1039.9.0 1041.7.0 1043.9c0 3 2.462 5.5 5.5 5.5H19c2.761.0 5-2.30000000000018 5-5C24 1042.3 22.703 1040.5 20.875 1039.7 20.946 1039.5 21 1039.2 21 1038.9c0-2-1.567-3.5-3.5-3.5C16.702 1035.4 15.964 1035.6 15.375 1036.1 14.332 1033.9 12.093 1032.4 9.5 1032.4z" style="fill:#e54835;fill-rule:nonzero;stroke:#af392a;stroke-width:.35px"/><g transform="matrix(12.7462,0,0,12.7462,7.94671,1047.22)"><path d="M.318-.466.451-.711H.62L.413-.358.625.0H.455L.318-.249.181.0H.011L.223-.358.016-.711H.185l.133.245z" style="fill:#fff;fill-rule:nonzero"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/badges/2_Expired.svg b/share/icons/badges/2_Expired.svg
new file mode 100644
index 000000000..7adda1bf9
--- /dev/null
+++ b/share/icons/badges/2_Expired.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(0.983029,0,0,0.983029,-0.152229,-2.69139)"><circle cx="26.604" cy="29.187" r="20.345" style="fill:#ff3737"/></g><g transform="matrix(27.6873,0,0,27.6873,17.1959,35.8427)"><path d="M.318-.466.451-.711H.62L.413-.358.625.0H.455L.318-.249.181.0H.011L.223-.358.016-.711H.185l.133.245z" style="fill:#fff;fill-rule:nonzero"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C00_Password.png b/share/icons/database/C00_Password.png
deleted file mode 100644
index 86fa47f04..000000000
--- a/share/icons/database/C00_Password.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C00_Password.svg b/share/icons/database/C00_Password.svg
new file mode 100644
index 000000000..b9b987e96
--- /dev/null
+++ b/share/icons/database/C00_Password.svg
@@ -0,0 +1 @@
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" id="svg10" enable-background="new 0 0 48 48" viewBox="0 0 48 48" version="1"><defs id="defs14"/><g style="fill:#ffa000" transform="matrix(0.73333333,0,0,1,7.4259892,0)" id="g6"><polygon id="polygon2" points="22,45 18,41 18,21 30,21 30,29 28,31 30,33 30,35 28,37 30,39 30,41 26,45"/><path id="path4" d="M38 7.8c-.5-1.8-2-3.1-3.7-3.6C31.9 3.7 28.2 3 24 3s-7.9.7-10.3 1.2C12 4.7 10.5 6 10 7.8c-.5 1.7-1 4.1-1 6.7s.5 5 1 6.7c.5 1.8 1.9 3.1 3.7 3.5 2.4.6 6.1 1.3 10.3 1.3 4.2.0 7.9-.7 10.3-1.2 1.8-.4 3.2-1.8 3.7-3.5s1-4.1 1-6.7c0-2.7-.5-5.1-1-6.8zM29 13H19c-1.1.0-2-.9-2-2V9c0-.6 3.1-1 7-1s7 .4 7 1v2c0 1.1-.9 2-2 2z"/></g><rect style="fill:#d68600" id="rect8" height="19" width="2" y="26" x="23.559322"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C01_Package_Network.png b/share/icons/database/C01_Package_Network.png
deleted file mode 100644
index dceb0a528..000000000
--- a/share/icons/database/C01_Package_Network.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C01_Package_Network.svg b/share/icons/database/C01_Package_Network.svg
new file mode 100644
index 000000000..bc6273932
--- /dev/null
+++ b/share/icons/database/C01_Package_Network.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#7cb342" d="M24 4C13 4 4 13 4 24s9 20 20 20 20-9 20-20S35 4 24 4z"/><path fill="#0277bd" d="M45 24c0 11.7-9.5 21-21 21S3 35.7 3 24 12.3 3 24 3s21 9.3 21 21zM23.8 33.7c0-.4-.2-.6-.6-.8-1.3-.4-2.5-.4-3.6-1.5-.2-.4-.2-.8-.4-1.3-.4-.4-1.5-.6-2.1-.8-.8.0-1.7.0-2.7.0-.4.0-1.1.0-1.5.0-.6-.2-1.1-1.1-1.5-1.7.0-.2.0-.6-.4-.6-.4-.2-.8.2-1.3.0-.2-.2-.2-.4-.2-.6.0-.6.4-1.3.8-1.7.6-.4 1.3.2 1.9.2.2.0.2.0.4.2.6.2.8 1 .8 1.7.0.2.0.4.0.4.0.2.2.2.4.2.2-1.1.2-2.1.4-3.2.0-1.3 1.3-2.5 2.3-2.9.4-.2.6.2 1.1.0 1.3-.4 4.4-1.7 3.8-3.4-.4-1.5-1.7-2.9-3.4-2.7-.4.2-.6.4-1 .6-.6.4-1.9 1.7-2.5 1.7-1.1-.2-1.1-1.7-.8-2.3.2-.8 2.1-3.6 3.4-3.1.2.2.6.6.8.8.4.2 1.1.2 1.7.2.2.0.4.0.6-.2.2-.2.2-.2.2-.4.0-.6-.6-1.3-1-1.7-.4-.4-1.1-.8-1.7-1.1-2.1-.6-5.5.2-7.1 1.7s-2.9 4-3.8 6.1c-.4 1.3-.8 2.9-1 4.4-.2 1-.4 1.9.2 2.9.6 1.3 1.9 2.5 3.2 3.4.8.6 2.5.6 3.4 1.7.6.8.4 1.9.4 2.9.0 1.3.8 2.3 1.3 3.4.2.6.4 1.5.6 2.1.0.2.2 1.5.2 1.7 1.3.6 2.3 1.3 3.8 1.7.2.0 1-1.3 1-1.5.6-.6 1.1-1.5 1.7-1.9.4-.2.8-.4 1.3-.8.4-.4.6-1.3.8-1.9C23.8 35.1 24 34.3 23.8 33.7zM24.2 14.3c.2.0.4-.2.8-.4.6-.4 1.3-1.1 1.9-1.5.6-.4 1.3-1.1 1.7-1.5.6-.4 1.1-1.3 1.3-1.9.2-.4.8-1.3.6-1.9-.2-.4-1.3-.6-1.7-.8-1.7-.4-3.1-.6-4.8-.6-.6.0-1.5.2-1.7.8-.2 1.1.6.8 1.5 1.1.0.0.2 1.7.2 1.9.2 1-.4 1.7-.4 2.7.0.6.0 1.7.4 2.1L24.2 14.3zM41.8 29c.2-.4.2-1.1.4-1.5.2-1 .2-2.1.2-3.1.0-2.1-.2-4.2-.8-6.1-.4-.6-.6-1.3-.8-1.9-.4-1.1-1-2.1-1.9-2.9-.8-1.1-1.9-4-3.8-3.1-.6.2-1 1-1.5 1.5-.4.6-.8 1.3-1.3 1.9-.2.2-.4.6-.2.8.0.2.2.2.4.2.4.2.6.2 1 .4.2.0.4.2.2.4.0.0.0.2-.2.2-1 1.1-2.1 1.9-3.1 2.9-.2.2-.4.6-.4.8s.2.2.2.4-.2.2-.4.4c-.4.2-.8.4-1.1.6-.2.4.0 1.1-.2 1.5-.2 1.1-.8 1.9-1.3 2.9-.4.6-.6 1.3-1 1.9.0.8-.2 1.5.2 2.1 1 1.5 2.9.6 4.4 1.3.4.2.8.2 1.1.6.6.6.6 1.7.8 2.3.2.8.4 1.7.8 2.5.2 1 .6 2.1.8 2.9 1.9-1.5 3.6-3.1 4.8-5.2C40.6 32.4 41.2 30.7 41.8 29z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C02_MessageBox_Warning.png b/share/icons/database/C02_MessageBox_Warning.png
deleted file mode 100644
index 0b8a56f47..000000000
--- a/share/icons/database/C02_MessageBox_Warning.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C02_MessageBox_Warning.svg b/share/icons/database/C02_MessageBox_Warning.svg
new file mode 100644
index 000000000..f982f76ee
--- /dev/null
+++ b/share/icons/database/C02_MessageBox_Warning.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#f44336" d="M21.2 44.8l-18-18c-1.6-1.6-1.6-4.1.0-5.7l18-18c1.6-1.6 4.1-1.6 5.7.0l18 18c1.6 1.6 1.6 4.1.0 5.7l-18 18c-1.6 1.6-4.2 1.6-5.7.0z"/><path fill="#fff" d="M21.6 32.7c0-.3.1-.6.2-.9.1-.3.3-.5.5-.7s.5-.4.8-.5.6-.2 1-.2.7.1 1 .2c.3.1.6.3.8.5s.4.4.5.7c.1.3.2.6.2.9s-.1.6-.2.9-.3.5-.5.7-.5.4-.8.5-.6.2-1 .2-.7-.1-1-.2-.5-.3-.8-.5c-.2-.2-.4-.4-.5-.7S21.6 33.1 21.6 32.7zm4.2-4.6h-3.6L21.7 13h4.6L25.8 28.1z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C03_Server.png b/share/icons/database/C03_Server.png
deleted file mode 100644
index 00ed93316..000000000
--- a/share/icons/database/C03_Server.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C03_Server.svg b/share/icons/database/C03_Server.svg
new file mode 100644
index 000000000..0d572e96d
--- /dev/null
+++ b/share/icons/database/C03_Server.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g fill="#d1c4e9"><path d="M38 7H10C8.9 7 8 7.9 8 9v6c0 1.1.9 2 2 2h28c1.1.0 2-.9 2-2V9C40 7.9 39.1 7 38 7z"/><path d="M38 19H10c-1.1.0-2 .9-2 2v6c0 1.1.9 2 2 2h25.1c1.3-1.3 4.9-.9 4.9-2v-6C40 19.9 39.1 19 38 19z"/><path d="M34.4 31H10c-1.1.0-2 .9-2 2v6c0 1.1.9 2 2 2h28c1.1.0 2-.9 2-2v-2.4c0-3.1-2.5-5.6-5.6-5.6z"/></g><path fill="#009688" d="M46 25H32c-1.1.0-2 .9-2 2v11.8c0 1.3.6 2.4 1.6 3.2l7.4 5.5 7.4-5.5c1-.8 1.6-1.9 1.6-3.2V27C48 25.9 47.1 25 46 25z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C04_Klipper.png b/share/icons/database/C04_Klipper.png
deleted file mode 100644
index a451fe1d2..000000000
--- a/share/icons/database/C04_Klipper.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C04_Klipper.svg b/share/icons/database/C04_Klipper.svg
new file mode 100644
index 000000000..88ac1c50c
--- /dev/null
+++ b/share/icons/database/C04_Klipper.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#455a64" d="M36 4H26c0 1.1-.9 2-2 2s-2-.9-2-2H12C9.8 4 8 5.8 8 8v32c0 2.2 1.8 4 4 4h24c2.2.0 4-1.8 4-4V8c0-2.2-1.8-4-4-4z"/><path fill="#fff" d="M36 41H12c-.6.0-1-.4-1-1V8c0-.6.4-1 1-1h24c.6.0 1 .4 1 1v32C37 40.6 36.6 41 36 41z"/><g fill="#90a4ae"><path d="M26 4c0 1.1-.9 2-2 2s-2-.9-2-2h-7v4c0 1.1.9 2 2 2h14c1.1.0 2-.9 2-2V4H26z"/><path d="M24 0c-2.2.0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm0 6c-1.1.0-2-.9-2-2s.9-2 2-2 2 .9 2 2S25.1 6 24 6z"/></g><g fill="#cfd8dc"><rect x="21" y="20" width="12" height="2"/><rect x="15" y="19" width="4" height="4"/></g><g fill="#03a9f4"><rect x="21" y="29" width="12" height="2"/><rect x="15" y="28" width="4" height="4"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C05_Edu_Languages.png b/share/icons/database/C05_Edu_Languages.png
deleted file mode 100644
index d36534f59..000000000
--- a/share/icons/database/C05_Edu_Languages.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C05_Edu_Languages.svg b/share/icons/database/C05_Edu_Languages.svg
new file mode 100644
index 000000000..bf1ff0826
--- /dev/null
+++ b/share/icons/database/C05_Edu_Languages.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#ff9800" points="24,37 19,31 19,25 29,25 29,31"/><g fill="#ffa726"><circle cx="33" cy="19" r="2"/><circle cx="15" cy="19" r="2"/></g><path fill="#ffb74d" d="M33 13c0-7.6-18-5-18 0 0 1.1.0 5.9.0 7 0 5 4 9 9 9s9-4 9-9c0-1.1.0-5.9.0-7z"/><path fill="#424242" d="M24 4c-6.1.0-10 4.9-10 11 0 .8.0 2.3.0 2.3l2 1.7v-5l12-4 4 4v5l2-1.7s0-1.5.0-2.3c0-4-1-8-6-9l-1-2H24z"/><g fill="#784719"><circle cx="28" cy="19" r="1"/><circle cx="20" cy="19" r="1"/></g><polygon fill="#fff" points="24,43 19,31 24,32 29,31"/><polygon fill="#d32f2f" points="23,35 22.3,39.5 24,43.5 25.7,39.5 25,35 26,34 24,32 22,34"/><path fill="#546e7a" d="M29 31l-5 12-5-12S8 33 8 44h32c0-11-11-13-11-13z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C06_KCMDF.png b/share/icons/database/C06_KCMDF.png
deleted file mode 100644
index 331895758..000000000
--- a/share/icons/database/C06_KCMDF.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C06_KCMDF.svg b/share/icons/database/C06_KCMDF.svg
new file mode 100644
index 000000000..0077b792e
--- /dev/null
+++ b/share/icons/database/C06_KCMDF.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#e65100" d="M25.6 34.4c.1-.4.1-.9.1-1.4s0-.9-.1-1.4l2.8-2c.3-.2.4-.6.2-.9l-2.7-4.6c-.2-.3-.5-.4-.8-.3L22 25.3c-.7-.6-1.5-1-2.4-1.4l-.3-3.4c0-.3-.3-.6-.6-.6h-5.3c-.3.0-.6.3-.6.6L12.4 24c-.9.3-1.6.8-2.4 1.4L6.9 24c-.3-.1-.7.0-.8.3l-2.7 4.6c-.2.3-.1.7.2.9l2.8 2c-.1.4-.1.9-.1 1.4s0 .9.1 1.4l-2.8 2c-.3.2-.4.6-.2.9l2.7 4.6c.2.3.5.4.8.3L10 41c.7.6 1.5 1 2.4 1.4l.3 3.4c0 .3.3.6.6.6h5.3c.3.0.6-.3.6-.6l.3-3.4c.9-.3 1.6-.8 2.4-1.4l3.1 1.4c.3.1.7.0.8-.3l2.7-4.6c.2-.3.1-.7-.2-.9l-2.7-2.2zM16 38c-2.8.0-5-2.2-5-5 0-2.8 2.2-5 5-5s5 2.2 5 5-2.2 5-5 5z"/><path fill="#ffa000" d="M41.9 15.3C42 14.8 42 14.4 42 14s0-.8-.1-1.3l2.5-1.8c.3-.2.3-.5.2-.8l-2.5-4.3c-.2-.3-.5-.4-.8-.2l-2.9 1.3c-.7-.5-1.4-.9-2.2-1.3l-.3-3.1C36 2.2 35.8 2 35.5 2h-4.9c-.3.0-.6.2-.6.5l-.3 3.1c-.8.3-1.5.7-2.2 1.3l-2.9-1.3c-.3-.1-.6.0-.8.2l-2.5 4.3c-.2.3-.1.6.2.8l2.5 1.8C24 13.2 24 13.6 24 14s0 .8.1 1.3l-2.5 1.8c-.3.2-.3.5-.2.8l2.5 4.3c.2.3.5.4.8.2l2.9-1.3c.7.5 1.4.9 2.2 1.3l.3 3.1c0 .3.3.5.6.5h4.9c.3.0.6-.2.6-.5l.3-3.1c.8-.3 1.5-.7 2.2-1.3l2.9 1.3c.3.1.6.0.8-.2l2.5-4.3c.2-.3.1-.6-.2-.8l-2.8-1.8zM33 19c-2.8.0-5-2.2-5-5s2.2-5 5-5 5 2.2 5 5-2.2 5-5 5z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C07_Kate.png b/share/icons/database/C07_Kate.png
deleted file mode 100644
index 8427b9054..000000000
--- a/share/icons/database/C07_Kate.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C07_Kate.svg b/share/icons/database/C07_Kate.svg
new file mode 100644
index 000000000..694fd7e4d
--- /dev/null
+++ b/share/icons/database/C07_Kate.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(2,0,0,2,0,-2056.8)"><g transform="matrix(0.911796,0,0,0.873805,0.555331,131.585)"><path d="M5 1030.4C3.895 1030.4 3 1031.3 3 1032.4v18c0 1.09999999999991.895 2 2 2H19c1.105.0 2-.900000000000091 2-2v-18c0-1.10000000000014-.895-2-2-2H5z" style="fill:#d8d8d8;fill-rule:nonzero"/></g><g transform="matrix(0.911796,0,0,0.873805,0.555331,131.585)"><path d="M6 1028.4C5.448 1028.4 5 1028.8 5 1029.4v3c0 .5.448 1 1 1s1-.5 1-1v-3c0-.600000000000136-.448-1-1-1zm4 0C9.448 1028.4 9 1028.8 9 1029.4v3c0 .5.448 1 1 1s1-.5 1-1v-3c0-.600000000000136-.448-1-1-1zm4 0c-.552.0-1 .399999999999864-1 1v3c0 .5.448 1 1 1s1-.5 1-1v-3c0-.600000000000136-.448-1-1-1zm4 0c-.552.0-1 .399999999999864-1 1v3c0 .5.448 1 1 1s1-.5 1-1v-3c0-.600000000000136-.448-1-1-1z" style="fill:#95a5a6;fill-rule:nonzero"/><rect x="6" y="1043.4" width="12" height="1" style="fill:#95a5a6"/><rect x="6" y="1040.4" width="12" height="1" style="fill:#95a5a6"/><rect x="6" y="1037.4" width="12" height="1" style="fill:#95a5a6"/><g transform="matrix(1,0,0,1,0,1028.4)"><rect x="6" y="18" width="4" height="1" style="fill:#95a5a6"/></g></g><g transform="matrix(0.911796,0,0,0.873805,0.555331,131.585)"><path d="M5 1032.4c0 .5.448 1 1 1s1-.5 1-1H5zm4 0c0 .5.448 1 1 1s1-.5 1-1H9zm4 0c0 .5.448 1 1 1s1-.5 1-1H13zm4 0c0 .5.448 1 1 1s1-.5 1-1H17z" style="fill:#7f8c8d;fill-rule:nonzero"/></g><g transform="matrix(0.911796,0,0,0.873805,0.555331,131.585)"><path d="M3 1049.4v1c0 1.09999999999991.895 2 2 2H19c1.105.0 2-.900000000000091 2-2v-1c0 1.09999999999991-.895 2-2 2H5C3.895 1051.4 3 1050.5 3 1049.4z" style="fill:#95a5a6;fill-rule:nonzero"/></g><g transform="matrix(0.64474,0.617876,-0.64474,0.617876,705.61,455.249)"><path d="M-63 1003.4v13l2 2 2-2v-13h-4z" style="fill:#ecf0f1;fill-rule:nonzero"/><path d="M-61 1003.4v15l2-2v-13h-2z" style="fill:#bdc3c7;fill-rule:nonzero"/><rect x="-63" y="1004.4" width="4" height="11" style="fill:#e67e22"/><path d="M-61 1000.4c-1.105.0-2 .899999999999977-2 2v1h4v-1C-59 1001.3-59.895 1000.4-61 1000.4z" style="fill:#7f8c8d;fill-rule:nonzero"/><g transform="matrix(1,0,0,1,-7,1)"><path d="M-55.406 1016-54 1017.4-52.594 1016h-2.812z" style="fill:#34495e;fill-rule:nonzero"/><path d="M-54 1016V1017.4L-52.594 1016H-54z" style="fill:#2c3e50;fill-rule:nonzero"/></g><path d="M-61 1000.4c-1.105.0-2 .899999999999977-2 2v1h2v-3z" style="fill:#95a5a6;fill-rule:nonzero"/><rect x="-61" y="1004.4" width="2" height="11" style="fill:#d35400"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C08_Socket.png b/share/icons/database/C08_Socket.png
deleted file mode 100644
index 6baa73335..000000000
--- a/share/icons/database/C08_Socket.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C08_Socket.svg b/share/icons/database/C08_Socket.svg
new file mode 100644
index 000000000..dc701bdf4
--- /dev/null
+++ b/share/icons/database/C08_Socket.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><circle fill="#b2dfdb" cx="24" cy="31" r="14"/><g fill="#009688"><polygon points="24,3.3 33,14 15,14"/><rect x="21" y="11" width="6" height="23"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C09_Identity.png b/share/icons/database/C09_Identity.png
deleted file mode 100644
index 0bf21df91..000000000
--- a/share/icons/database/C09_Identity.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C09_Identity.svg b/share/icons/database/C09_Identity.svg
new file mode 100644
index 000000000..d2154bce8
--- /dev/null
+++ b/share/icons/database/C09_Identity.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#673ab7" d="M40 7H8c-2.2.0-4 1.8-4 4v26c0 2.2 1.8 4 4 4h5v-1.3c-.6-.3-1-1-1-1.7.0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7V41h18v-1.3c-.6-.3-1-1-1-1.7.0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7V41h5c2.2.0 4-1.8 4-4V11c0-2.2-1.8-4-4-4z"/><g fill="#d1c4e9"><circle cx="24" cy="18" r="4"/><path d="M31 28s-1.9-4-7-4-7 4-7 4v2h14V28z"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C10_Kontact.png b/share/icons/database/C10_Kontact.png
deleted file mode 100644
index 08d441315..000000000
--- a/share/icons/database/C10_Kontact.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C10_Kontact.svg b/share/icons/database/C10_Kontact.svg
new file mode 100644
index 000000000..4eea35988
--- /dev/null
+++ b/share/icons/database/C10_Kontact.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#673ab7" d="M38 44H12V4h26c2.2.0 4 1.8 4 4v32c0 2.2-1.8 4-4 4z"/><path fill="#311b92" d="M10 4h2v40h-2c-2.2.0-4-1.8-4-4V8c0-2.2 1.8-4 4-4z"/><path fill="#fff" d="M36 24.2c-.1 4.8-3.1 6.9-5.3 6.7-.6-.1-2.1-.1-2.9-1.6-.8 1-1.8 1.6-3.1 1.6-2.6.0-3.3-2.5-3.4-3.1-.1-.7-.2-1.4-.1-2.2.1-1 1.1-6.5 5.7-6.5 2.2.0 3.5 1.1 3.7 1.3L30 27.2c0 .3-.2 1.6 1.1 1.6 2.1.0 2.4-3.9 2.4-4.6.1-1.2.3-8.2-7-8.2-6.9.0-7.9 7.4-8 9.2-.5 8.5 6 8.5 7.2 8.5 1.7.0 3.7-.7 3.9-.8l.4 2c-.3.2-2 1.1-4.4 1.1-2.2.0-10.1-.4-9.8-10.8C16.1 23.1 17.4 14 26.6 14c9.2.0 9.4 8.1 9.4 10.2zM24.1 25.5c-.1 1 0 1.8.2 2.3s.6.8 1.2.8c.1.0.3.0.4-.1.2-.1.3-.1.5-.3.2-.1.3-.3.5-.6.2-.2.3-.6.4-1l.5-5.4c-.2-.1-.5-.1-.7-.1-.5.0-.9.1-1.2.3s-.6.5-.9.8c-.2.4-.4.8-.6 1.3S24.2 24.8 24.1 25.5z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C11_Camera.png b/share/icons/database/C11_Camera.png
deleted file mode 100644
index e502227d0..000000000
--- a/share/icons/database/C11_Camera.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C11_Camera.svg b/share/icons/database/C11_Camera.svg
new file mode 100644
index 000000000..0fc7637cd
--- /dev/null
+++ b/share/icons/database/C11_Camera.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#546e7a" d="M14 13H8v-1.8C8 10.5 8.5 10 9.2 10h3.6c.7.0 1.2.5 1.2 1.2V13z"/><path fill="#5e35b1" d="M40 40H8c-2.2.0-4-1.8-4-4V22h40v14c0 2.2-1.8 4-4 4z"/><path fill="#42257a" d="M12.7 22c-.4 1.3-.7 2.6-.7 4 0 6.6 5.4 12 12 12s12-5.4 12-12c0-1.4-.3-2.7-.7-4H12.7z"/><path fill="#78909c" d="M8 12h32c2.2.0 4 1.8 4 4v6H4v-6c0-2.2 1.8-4 4-4z"/><path fill="#78909c" d="M33.9 13.1H14.2L17.6 8c.4-.6 1-.9 1.7-.9h9.6c.7.0 1.3.3 1.7.9l3.3 5.1z"/><path fill="#455a64" d="M35.3 22c-1.6-4.7-6.1-8-11.3-8s-9.7 3.3-11.3 8H35.3z"/><circle fill="#b388ff" cx="24" cy="26" r="9"/><path fill="#c7a7ff" d="M29 23c-1.2-1.4-3-2.2-4.8-2.2s-3.6.8-4.8 2.2c-.5.5-.4 1.3.1 1.8s1.3.4 1.8-.1c1.5-1.7 4.3-1.7 5.8.0.3.3.6.4 1 .4.3.0.6-.1.9-.3C29.4 24.4 29.5 23.5 29 23z"/><rect x="36" y="15" fill="#dbe2e5" width="5" height="4"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C12_IRKickFlash.png b/share/icons/database/C12_IRKickFlash.png
deleted file mode 100644
index 4041042d3..000000000
--- a/share/icons/database/C12_IRKickFlash.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C12_IRKickFlash.svg b/share/icons/database/C12_IRKickFlash.svg
new file mode 100644
index 000000000..5a55e2f9c
--- /dev/null
+++ b/share/icons/database/C12_IRKickFlash.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><rect x="17" y="29" fill="#039be5" width="14" height="2"/><rect x="13" y="33" fill="#039be5" width="22" height="2"/><rect x="9" y="37" fill="#039be5" width="30" height="2"/><rect x="5" y="41" fill="#039be5" width="38" height="2"/><path fill="#81d4fa" d="M35 13c-.4.0-.8.0-1.2.1C32.9 8.5 28.9 5 24 5c-4.1.0-7.6 2.5-9.2 6-.3.0-.5.0-.8.0-4.4.0-8 3.6-8 8s3.6 8 8 8c2.4.0 18.5.0 21 0 3.9.0 7-3.1 7-7s-3.1-7-7-7z"/><path fill="#039be5" d="M28 21c0-2.2-1.8-4-4-4s-4 1.8-4 4c0 .5.0 6 0 6h8s0-5.5.0-6z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C13_KGPG_Key3.png b/share/icons/database/C13_KGPG_Key3.png
deleted file mode 100644
index db6aa8ec7..000000000
--- a/share/icons/database/C13_KGPG_Key3.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C13_KGPG_Key3.svg b/share/icons/database/C13_KGPG_Key3.svg
new file mode 100644
index 000000000..b7b9da69a
--- /dev/null
+++ b/share/icons/database/C13_KGPG_Key3.svg
@@ -0,0 +1 @@
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg859" viewBox="0 0 16.933333 16.933333" height="48pt" width="48pt" sodipodi:docname="C13_KGPG_Key3.svg" inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="3840" inkscape:window-height="2050" id="namedview2690" showgrid="false" inkscape:zoom="14.75" inkscape:cx="32" inkscape:cy="32" inkscape:window-x="-12" inkscape:window-y="-12" inkscape:window-maximized="1" inkscape:current-layer="layer1"/><defs id="defs853"/><g transform="translate(0,-280.06665)" id="layer1"><g id="g16" style="isolation:isolate" transform="matrix(0.35277777,0,0,0.35277777,0.84704631,280.27082)"><path style="fill:#bbb7af" id="path10" d="m26.919 47-4.54-1.997-10-17.321 7.621-4.4 4 6.928-.27 2.466 2.27.998 1 1.732-.27 2.466 2.27.999 1 1.732-.54 4.93z" inkscape:connector-curvature="0"/><path style="fill:#bbb7af" id="path12" d="M18.481 8.917c-1.218-1.375-2.82-1.951-4.15-1.761-1.774.447-4.474 1.198-7.142 2.738-2.667 1.54-4.667 3.502-5.941 4.815-.83 1.057-1.132 2.733-.55 4.475.533 1.655 1.415 3.917 2.715 6.169s2.818 4.147 3.985 5.436c1.218 1.375 2.757 1.988 4.1 1.674 1.824-.36 4.524-1.111 7.191-2.651 2.668-1.54 4.668-3.503 5.942-4.816.943-1.006 1.132-2.732.6-4.387-.533-1.656-1.415-3.918-2.715-6.17-1.35-2.338-2.868-4.233-4.035-5.522zm-3.116 7.804-6.351 3.666c-.699.404-1.72-.046-2.27-.999l-1-1.732c-.3-.519 1.469-2.002 3.945-3.432 2.477-1.43 4.646-2.221 4.946-1.701l1 1.732c.55.953.429 2.062-.27 2.466z" inkscape:connector-curvature="0"/><rect style="fill:#99968e" id="rect14" transform="matrix(0.866,-0.5,0.5,0.866,-16.05,16.645)" height="19" width="2" y="28.771999" x="22.035"/></g><g id="g24" style="isolation:isolate" transform="matrix(0.35277777,0,0,0.35277777,0.33319598,280.49083)"><path style="fill:#c1b395" id="path18" d="M40.107 35.664l-4.959-.134L19.346 23.27l5.394-6.952 6.321 4.903.681 2.385 2.48.067 1.58 1.226.681 2.385 2.479.067 1.58 1.226 1.363 4.77z" inkscape:connector-curvature="0"/><path style="fill:#c1b395" id="path20" d="M17.907 3.591C16.26 2.777 14.559 2.85 13.4 3.528 11.926 4.612 9.709 6.327 7.821 8.76c-1.887 2.434-2.998 5.007-3.681 6.704-.37 1.291-.017 2.957 1.181 4.35 1.118 1.332 2.79 3.093 4.844 4.687 2.054 1.594 4.175 2.775 5.743 3.527 1.647.814 3.303.8 4.429.002 1.552-1.023 3.769-2.738 5.657-5.171 1.888-2.434 2.998-5.006 3.682-6.703.493-1.289.016-2.958-1.102-4.29-1.119-1.331-2.79-3.092-4.845-4.686-2.133-1.655-4.254-2.837-5.822-3.589zm.063 8.402-4.495 5.794c-.495.638-1.61.607-2.479-.067L9.415 16.494c-.474-.368.604-2.409 2.357-4.669 1.753-2.259 3.463-3.81 3.937-3.443l1.58 1.226c.869.675 1.176 1.748.681 2.385z" inkscape:connector-curvature="0"/><rect style="fill:#998e76" id="rect22" transform="matrix(0.613,-0.79,0.79,0.613,-10.103,37.482)" height="18.999001" width="2" y="19.555" x="32.212002"/></g><g id="g32" style="isolation:isolate" transform="matrix(0.35277777,0,0,0.35277777,0.3165993,280.13828)"><path style="fill:#ffa000" id="path26" d="m46.241 21.973-4.623 1.798-19.319-5.176 2.278-8.501 7.727 2.071 1.553 1.934 2.311-.899 1.932.518 1.552 1.934 2.312-.899 1.931.518L47 19.14z" inkscape:connector-curvature="0"/><path style="fill:#ffa000" id="path28" d="M13.345 1.011C11.512.9 9.971 1.626 9.166 2.7 8.227 4.271 6.849 6.711 6.052 9.686c-.798 2.975-.824 5.777-.796 7.606.16 1.334 1.131 2.733 2.775 3.553 1.547.794 3.77 1.769 6.282 2.442 2.511.673 4.924.94 6.661 1.026 1.834.112 3.355-.543 4.083-1.715 1.035-1.545 2.414-3.984 3.211-6.959.797-2.975.823-5.777.796-7.607C29.019 6.654 27.932 5.3 26.385 4.505c-1.547-.794-3.77-1.769-6.282-2.442-2.608-.699-5.021-.966-6.758-1.052zm3.315 7.721-1.898 7.084c-.209.779-1.249 1.183-2.312.899l-1.932-.518c-.579-.155-.377-2.455.363-5.217.74-2.763 1.715-4.855 2.295-4.7l1.932.518c1.062.285 1.761 1.155 1.552 1.934z" inkscape:connector-curvature="0"/><rect style="fill:#d68600" id="rect30" transform="matrix(0.259,-0.966,0.966,0.259,9.747,49.803)" height="19.002001" width="2" y="9.0480003" x="36.331001"/></g><path id="path1476" d="m1.2718723 285.05146c-.4335907-.51274-.66891663-1.19158-.60320725-1.91499.13142168-1.44685 1.41721875-2.52408 2.87190845-2.40606 1.4546897.11801 2.5274119 1.38658 2.3959935 2.83343-.032853.3617-.2719825.91422-.6349261 1.27228-.3629437.35806-.8161697.60089-1.1766211.66014" style="fill:none;fill-opacity:1;stroke:#7e7e7e;stroke-width:.78058332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1" inkscape:connector-curvature="0"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C14_Laptop_Power.png b/share/icons/database/C14_Laptop_Power.png
deleted file mode 100644
index 8cd59f809..000000000
--- a/share/icons/database/C14_Laptop_Power.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C14_Laptop_Power.svg b/share/icons/database/C14_Laptop_Power.svg
new file mode 100644
index 000000000..a10c99ff3
--- /dev/null
+++ b/share/icons/database/C14_Laptop_Power.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g fill="#ff9800"><rect x="3" y="28" width="26" height="4"/><rect x="3" y="16" width="26" height="4"/></g><path fill="#2196f3" d="M43 11H20v26h23c1.1.0 2-.9 2-2V13C45 11.9 44.1 11 43 11z"/><path fill="#64b5f6" d="M20 9h-2v30h2c1.1.0 2-.9 2-2V11C22 9.9 21.1 9 20 9z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C15_Scanner.png b/share/icons/database/C15_Scanner.png
deleted file mode 100644
index 43f52ae8b..000000000
--- a/share/icons/database/C15_Scanner.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C15_Scanner.svg b/share/icons/database/C15_Scanner.svg
new file mode 100644
index 000000000..8d0f7c2f6
--- /dev/null
+++ b/share/icons/database/C15_Scanner.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g fill="#546e7a"><rect x="5" y="34" width="6" height="3"/><rect x="37" y="34" width="6" height="3"/></g><path fill="#78909c" d="M44 35H4c-2.2.0-4-1.8-4-4V17c0-2.2 1.8-4 4-4h40c2.2.0 4 1.8 4 4v14c0 2.2-1.8 4-4 4z"/><g fill="#37474f"><rect x="5" y="19" width="2" height="2"/><rect x="5" y="23" width="2" height="2"/><rect x="5" y="27" width="2" height="2"/><rect x="9" y="19" width="2" height="2"/><rect x="9" y="23" width="2" height="2"/><rect x="9" y="27" width="2" height="2"/><rect x="13" y="19" width="2" height="2"/><rect x="13" y="23" width="2" height="2"/><rect x="13" y="27" width="2" height="2"/><rect x="17" y="19" width="2" height="2"/><rect x="17" y="23" width="2" height="2"/><rect x="17" y="27" width="2" height="2"/><rect x="21" y="19" width="2" height="2"/><rect x="21" y="23" width="2" height="2"/><rect x="21" y="27" width="2" height="2"/></g><circle fill="#37474f" cx="37" cy="24" r="8"/><circle fill="#a0f" cx="37" cy="24" r="6"/><path fill="#ea80fc" d="M40.7 21.7c-1-1.1-2.3-1.7-3.7-1.7s-2.8.6-3.7 1.7c-.4.4-.3 1 .1 1.4s1 .3 1.4-.1c1.2-1.3 3.3-1.3 4.5.0.2.2.5.3.7.3s.5-.1.7-.3C41.1 22.7 41.1 22.1 40.7 21.7z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C16_Mozilla_Firebird.png b/share/icons/database/C16_Mozilla_Firebird.png
deleted file mode 100644
index 7f592c673..000000000
--- a/share/icons/database/C16_Mozilla_Firebird.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C16_Mozilla_Firebird.svg b/share/icons/database/C16_Mozilla_Firebird.svg
new file mode 100644
index 000000000..c05515be8
--- /dev/null
+++ b/share/icons/database/C16_Mozilla_Firebird.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#f44336" d="M37 43l-13-6-13 6V9c0-2.2 1.8-4 4-4h18c2.2.0 4 1.8 4 4V43z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C17_CDROM_Unmount.png b/share/icons/database/C17_CDROM_Unmount.png
deleted file mode 100644
index 947190374..000000000
--- a/share/icons/database/C17_CDROM_Unmount.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C17_CDROM_Unmount.svg b/share/icons/database/C17_CDROM_Unmount.svg
new file mode 100644
index 000000000..6ccadf9e9
--- /dev/null
+++ b/share/icons/database/C17_CDROM_Unmount.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 48 48" width="48pt" height="48pt"><defs><clipPath id="_clipPath_9XF8Wkv3dtlahEmPO8KNtUI9KomMyJLu"><rect width="48" height="48"/></clipPath></defs><g clip-path="url(#_clipPath_9XF8Wkv3dtlahEmPO8KNtUI9KomMyJLu)"><path d="M24 2C11.85 2 2 11.8 2 24c0 12 9.85 22 22 22S46 36 46 24C46 11.8 36.15 2 24 2zm0 8c7.732.0 14 6.2 14 14 0 7.6-6.268 14-14 14S10 31.6 10 24c0-7.8 6.268-14 14-14z" fill="rgb(154,159,162)"/><path d="M34 6.6C24.434 1 12.202 4.4 6.68 14 1.157 23.4 4.434 35.8 14 41.2 23.566 46.8 35.798 43.4 41.32 34 46.844 24.4 43.566 12.2 34 6.6zM26 20.4c1.914 1.2 2.568 3.6 1.464 5.6-1.104 1.8-3.55 2.4-5.464 1.4-1.914-1.2-2.569-3.6-1.464-5.4 1.104-2 3.55-2.6 5.464-1.6z" fill="rgb(158,186,204)"/><path d="M27 18.8C24.13 17 20.46 18 18.804 21c-1.657 2.8-.674 6.4 2.196 8.2C23.87 30.8 27.54 29.8 29.196 27c1.658-3 .674-6.6-2.196-8.2zm-1 1.6c1.914 1.2 2.568 3.6 1.464 5.6-1.104 1.8-3.55 2.4-5.464 1.4-1.914-1.2-2.569-3.6-1.464-5.4 1.104-2 3.55-2.6 5.464-1.6z" fill="rgb(236,240,241)"/><path d="M12.02 7.8c-4.498 3.4-7.244 8.4-7.875 13.6l15.929 2C20.204 22.2 20.734 21.4 21.638 20.6L12.02 7.8zM43.846 26.2l-15.876-2C27.84 25.4 27.256 26.2 26.354 27l9.618 12.8c4.496-3.4 7.242-8.4 7.874-13.6z" fill="rgb(214,228,232)"/><path d="M24 16c-4.418.0-8 3.6-8 8s3.582 8 8 8 8-3.6 8-8-3.582-8-8-8zm0 2c3.314.0 6 2.6 6 6 0 3.2-2.686 6-6 6s-6-2.8-6-6c0-3.4 2.686-6 6-6z" fill="rgb(154,159,162)"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C18_Display.png b/share/icons/database/C18_Display.png
deleted file mode 100644
index 5348b7db2..000000000
--- a/share/icons/database/C18_Display.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C18_Display.svg b/share/icons/database/C18_Display.svg
new file mode 100644
index 000000000..5feb6a179
--- /dev/null
+++ b/share/icons/database/C18_Display.svg
@@ -0,0 +1 @@
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48pt" height="48pt" viewBox="0 0 16.933334 16.933333" id="svg2112" inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="C18_Display.svg"><defs id="defs2106"/><sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="7.9195959" inkscape:cx="-2.8571425" inkscape:cy="54.923727" inkscape:document-units="pt" inkscape:current-layer="layer1" showgrid="false" units="pt" inkscape:window-width="3840" inkscape:window-height="2050" inkscape:window-x="-12" inkscape:window-y="-12" inkscape:window-maximized="1"/><g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-280.06668)"><g transform="matrix(0.33674243,0,0,0.35277778,0.38484848,280.06668)" style="isolation:isolate" id="g882"><path style="fill:#95a5a6" inkscape:connector-curvature="0" d="m18.271 33.952c.023.306.057.592.057.905.0 3.371-1.369 6.343-3.495 8.143h7.334 3.666 7.334c-2.127-1.8-3.495-4.772-3.495-8.143.0-.313.033-.599.057-.905h-3.896-3.666z" id="path872"/><path style="fill:#7f8c8d" inkscape:connector-curvature="0" d="m18.271 33.952c.023.181.057.543.057.905.0.905-.085 1.81-.286 2.714h11.916c-.201-.904-.286-1.809-.286-2.714.0-.362.033-.724.057-.905h-3.896-3.666z" id="path874"/><path style="fill:#bdc3c7" inkscape:connector-curvature="0" d="M3.833 5C2.821 5 2 5.706 2 6.765v1.764 3.53 3.529 3.53 1.764 1.765 1.765 3.529 3.53 1.764C2 34.118 2.821 35 3.833 35h1.834H29.5h11 1.833 1.834C45.179 35 46 34.118 46 33.235V31.471 19.118 17.353 15.588 12.059 8.529 6.765C46 5.706 45.179 5 44.167 5H42.333 33.167 31.333h-16.5H7.5 5.667z" id="path876"/><rect style="fill:#4d6680" x="5" y="8" width="38" height="24" id="rect878"/><path style="fill:#3f5873" inkscape:connector-curvature="0" d="M43 8 5 32H40.434 43v-2.954z" id="path880"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C19_Mail_Generic.png b/share/icons/database/C19_Mail_Generic.png
deleted file mode 100644
index ca7812aeb..000000000
--- a/share/icons/database/C19_Mail_Generic.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C19_Mail_Generic.svg b/share/icons/database/C19_Mail_Generic.svg
new file mode 100644
index 000000000..e0f27b12c
--- /dev/null
+++ b/share/icons/database/C19_Mail_Generic.svg
@@ -0,0 +1 @@
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" style="isolation:isolate" viewBox="0 0 48 48" width="48pt" height="48pt" id="svg3279" sodipodi:docname="C19_Mail_Generic.svg" inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="3840" inkscape:window-height="2050" id="namedview3281" showgrid="false" inkscape:zoom="14.75" inkscape:cx="32" inkscape:cy="32" inkscape:window-x="-12" inkscape:window-y="-12" inkscape:window-maximized="1" inkscape:current-layer="g3277"/><defs id="defs3263"><clipPath id="_clipPath_yCn9pWrMJ5G2bSE2XYUdljYvpNSOoGZX"><rect width="48" height="48" id="rect3260"/></clipPath></defs><g clip-path="url(#_clipPath_yCn9pWrMJ5G2bSE2XYUdljYvpNSOoGZX)" id="g3277"><path d="M40 44H8c-2.2.0-4-1.8-4-4V19.1c0-1.3.6-2.5 1.7-3.3L24 3 42.3 15.8c1.1.7 1.7 2 1.7 3.3V40c0 2.2-1.8 4-4 4z" id="path3265" inkscape:connector-curvature="0" style="fill:#78909c"/><rect x="12" y="14" width="24" height="22" id="rect3267" style="fill:#fff"/><path d="M40 44H8c-2.2.0-4-1.8-4-4V20L24 33 44 20v20c0 2.2-1.8 4-4 4z" id="path3269" inkscape:connector-curvature="0" style="fill:#cfd8dc"/><path style="fill:none;stroke:#1c7b9d;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m16.220641 18.2845h15" id="path3828" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/><path style="isolation:isolate;fill:none;stroke:#1c7b9d;stroke-width:1.00023127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m16.220642 22.374742h15" id="path3828-4" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/><path style="isolation:isolate;fill:none;stroke:#1c7b9d;stroke-width:.99975002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m19.720642 26.464985h8" id="path3828-7" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C20_Misc.png b/share/icons/database/C20_Misc.png
deleted file mode 100644
index f428e4f0d..000000000
--- a/share/icons/database/C20_Misc.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C20_Misc.svg b/share/icons/database/C20_Misc.svg
new file mode 100644
index 000000000..bf4a4219a
--- /dev/null
+++ b/share/icons/database/C20_Misc.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#607d8b" d="M39.6 27.2c.1-.7.2-1.4.2-2.2s-.1-1.5-.2-2.2l4.5-3.2c.4-.3.6-.9.3-1.4L40 10.8c-.3-.5-.8-.7-1.3-.4l-5 2.3c-1.2-.9-2.4-1.6-3.8-2.2L29.4 5c-.1-.5-.5-.9-1-.9h-8.6c-.5.0-1 .4-1 .9l-.5 5.5c-1.4.6-2.7 1.3-3.8 2.2l-5-2.3c-.5-.2-1.1.0-1.3.4l-4.3 7.4c-.3.5-.1 1.1.3 1.4l4.5 3.2c-.1.7-.2 1.4-.2 2.2s.1 1.5.2 2.2L4 30.4c-.4.3-.6.9-.3 1.4L8 39.2c.3.5.8.7 1.3.4l5-2.3c1.2.9 2.4 1.6 3.8 2.2l.5 5.5c.1.5.5.9 1 .9h8.6c.5.0 1-.4 1-.9l.5-5.5c1.4-.6 2.7-1.3 3.8-2.2l5 2.3c.5.2 1.1.0 1.3-.4l4.3-7.4c.3-.5.1-1.1-.3-1.4L39.6 27.2zM24 35c-5.5.0-10-4.5-10-10s4.5-10 10-10 10 4.5 10 10-4.5 10-10 10z"/><path fill="#455a64" d="M24 13c-6.6.0-12 5.4-12 12s5.4 12 12 12 12-5.4 12-12-5.4-12-12-12zm0 17c-2.8.0-5-2.2-5-5s2.2-5 5-5 5 2.2 5 5-2.2 5-5 5z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C21_KOrganizer.png b/share/icons/database/C21_KOrganizer.png
deleted file mode 100644
index e66e4aca8..000000000
--- a/share/icons/database/C21_KOrganizer.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C21_KOrganizer.svg b/share/icons/database/C21_KOrganizer.svg
new file mode 100644
index 000000000..a090bb540
--- /dev/null
+++ b/share/icons/database/C21_KOrganizer.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#455a64" d="M36 4H26c0 1.1-.9 2-2 2s-2-.9-2-2H12C9.8 4 8 5.8 8 8v32c0 2.2 1.8 4 4 4h24c2.2.0 4-1.8 4-4V8c0-2.2-1.8-4-4-4z"/><path fill="#fff" d="M36 41H12c-.6.0-1-.4-1-1V8c0-.6.4-1 1-1h24c.6.0 1 .4 1 1v32C37 40.6 36.6 41 36 41z"/><g fill="#90a4ae"><path d="M26 4c0 1.1-.9 2-2 2s-2-.9-2-2h-7v4c0 1.1.9 2 2 2h14c1.1.0 2-.9 2-2V4H26z"/><path d="M24 0c-2.2.0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm0 6c-1.1.0-2-.9-2-2s.9-2 2-2 2 .9 2 2S25.1 6 24 6z"/></g><polygon fill="#4caf50" points="30.6,18.6 21.6,27.6 17.4,23.3 14.9,25.8 21.7,32.5 33.1,21.1"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C22_ASCII.png b/share/icons/database/C22_ASCII.png
deleted file mode 100644
index dcdfbed30..000000000
--- a/share/icons/database/C22_ASCII.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C22_ASCII.svg b/share/icons/database/C22_ASCII.svg
new file mode 100644
index 000000000..2c4e5a49b
--- /dev/null
+++ b/share/icons/database/C22_ASCII.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#90caf9" points="40,45 8,45 8,3 30,3 40,13"/><polygon fill="#e1f5fe" points="38.5,14 29,14 29,4.5"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C23_Icons.png b/share/icons/database/C23_Icons.png
deleted file mode 100644
index 0fcc98bd6..000000000
--- a/share/icons/database/C23_Icons.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C23_Icons.svg b/share/icons/database/C23_Icons.svg
new file mode 100644
index 000000000..796246379
--- /dev/null
+++ b/share/icons/database/C23_Icons.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><rect x="4" y="7" fill="#bbdefb" width="40" height="34"/><rect x="9" y="12" fill="#3f51b5" width="30" height="5"/><g fill="#2196f3"><rect x="9" y="21" width="13" height="16"/><rect x="26" y="21" width="13" height="16"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C24_Connect_Established.png b/share/icons/database/C24_Connect_Established.png
deleted file mode 100644
index b691fb3fe..000000000
--- a/share/icons/database/C24_Connect_Established.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C24_Connect_Established.svg b/share/icons/database/C24_Connect_Established.svg
new file mode 100644
index 000000000..6b25c5e3f
--- /dev/null
+++ b/share/icons/database/C24_Connect_Established.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#ffc107" points="33,22 23.6,22 30,5 19,5 13,26 21.6,26 17,45"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C25_Folder_Mail.png b/share/icons/database/C25_Folder_Mail.png
deleted file mode 100644
index 3ef9fcb60..000000000
--- a/share/icons/database/C25_Folder_Mail.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C25_Folder_Mail.svg b/share/icons/database/C25_Folder_Mail.svg
new file mode 100644
index 000000000..f8e28f7fb
--- /dev/null
+++ b/share/icons/database/C25_Folder_Mail.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><rect x="8" y="39" fill="#455a64" width="6" height="3"/><rect x="34" y="39" fill="#455a64" width="6" height="3"/><path fill="#78909c" d="M40 41H8c-2.2.0-4-1.8-4-4V11c0-2.2 1.8-4 4-4h32c2.2.0 4 1.8 4 4v26c0 2.2-1.8 4-4 4z"/><path fill="#90a4ae" d="M40 38H8c-.6.0-1-.4-1-1V11c0-.6.4-1 1-1h32c.6.0 1 .4 1 1v26C41 37.6 40.6 38 40 38z"/><path fill="#37474f" d="M29 14c-5.5.0-10 4.5-10 10s4.5 10 10 10 10-4.5 10-10-4.5-10-10-10zm0 17c-3.9.0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/><g fill="#b0bec5"><path d="M35.3 19.1l.4-.4c.4-.4.4-1 0-1.4s-1-.4-1.4.0l-.4.4C34.4 18.1 34.9 18.6 35.3 19.1z"/><path d="M22.7 19.1c.4-.5.9-1 1.4-1.4l-.4-.4c-.4-.4-1-.4-1.4.0s-.4 1 0 1.4L22.7 19.1z"/><path d="M21 24c0-.3.0-.7.1-1h-.6c-.6.0-1 .4-1 1s.4 1 1 1h.6C21 24.7 21 24.3 21 24z"/><path d="M29 16c.3.0.7.0 1 .1v-.6c0-.6-.4-1-1-1s-1 .4-1 1v.6C28.3 16 28.7 16 29 16z"/><path d="M35.3 28.9c-.4.5-.9 1-1.4 1.4l.4.4c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4L35.3 28.9z"/><path d="M22.7 28.9l-.4.4c-.4.4-.4 1 0 1.4.2.2.5.3.7.3s.5-.1.7-.3l.4-.4C23.6 29.9 23.1 29.4 22.7 28.9z"/><path d="M37.5 23h-.6c0 .3.1.7.1 1s0 .7-.1 1h.6c.6.0 1-.4 1-1S38.1 23 37.5 23z"/><path d="M29 32c-.3.0-.7.0-1-.1v.6c0 .6.4 1 1 1s1-.4 1-1v-.6C29.7 32 29.3 32 29 32z"/></g><path fill="#455a64" d="M12 20c-1.1.0-2 .9-2 2v8c0 1.1.9 2 2 2s2-.9 2-2v-8c0-1.1-.9-2-2-2z"/><path fill="#cfd8dc" d="M12 18c-1.1.0-2 .9-2 2v8c0 1.1.9 2 2 2s2-.9 2-2v-8c0-1.1-.9-2-2-2z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C26_FileSave.png b/share/icons/database/C26_FileSave.png
deleted file mode 100644
index 0d87f2531..000000000
--- a/share/icons/database/C26_FileSave.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C26_FileSave.svg b/share/icons/database/C26_FileSave.svg
new file mode 100644
index 000000000..404c75b80
--- /dev/null
+++ b/share/icons/database/C26_FileSave.svg
@@ -0,0 +1 @@
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="48pt" width="48pt" id="svg24" sodipodi:docname="C26_FileSave.svg" inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><defs id="defs28"/><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="3840" inkscape:window-height="2050" id="namedview26" showgrid="false" units="pt" inkscape:zoom="9.83" inkscape:cx="12" inkscape:cy="12" inkscape:window-x="-12" inkscape:window-y="-12" inkscape:window-maximized="1" inkscape:current-layer="svg24"/><g transform="matrix(2.7777778,0,0,2.777774,-1.3333334,-2857.9961)" id="g22"><path d="m5 1031.4c-1.1046.0-2 .9-2 2v14c0 1.1.8954 2 2 2h13 1c1.105.0 2-.9 2-2v-13l-3-3z" id="path2" inkscape:connector-curvature="0" style="fill:#3498db"/><path d="m7 3v5c0 .5523.4477 1 1 1h8c.552.0 1-.4477 1-1V3z" transform="translate(0,1028.4)" id="path6" inkscape:connector-curvature="0" style="fill:#ecf0f1"/><path d="m6 1040.4c-.5523.0-1 .4-1 1v3 2 3h4 6 4v-3-2-3c0-.6-.448-1-1-1h-4-4z" id="path8" inkscape:connector-curvature="0" style="fill:#ecf0f1"/><g id="g16" style="fill:#bdc3c7"><rect height="1" width="14" y="1048.4" x="5" id="rect10"/><rect height="1" width="10" y="1042.4" x="7" id="rect12"/><rect height="1" width="10" y="1044.4" x="7" id="rect14"/></g><rect height="4" width="3" y="1032.4" x="13" id="rect18" style="fill:#3498db"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C27_NFS_Unmount.png b/share/icons/database/C27_NFS_Unmount.png
deleted file mode 100644
index 4c5238461..000000000
--- a/share/icons/database/C27_NFS_Unmount.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C27_NFS_Unmount.svg b/share/icons/database/C27_NFS_Unmount.svg
new file mode 100644
index 000000000..0bb535f18
--- /dev/null
+++ b/share/icons/database/C27_NFS_Unmount.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g id="g12" transform="matrix(2.22222,0,0,1.81818,-2.66667,-1872.31)"><g id="rect10-6-5-2" transform="matrix(-5.25,7.59998e-16,5.08759e-16,-0.172483,-35.25,872.761)"><rect x="-10.5" y="-1055.25" width="3" height="1.65" style="fill:#7f8c8d"/></g><g id="rect10-6-5-21" serif:id="rect10-6-5-2" transform="matrix(-2,2.73541e-16,1.83114e-16,-0.172483,-5.99999,873.412)"><rect x="-10.5" y="-1055.25" width="3" height="1.65" style="fill:#7f8c8d"/></g><path id="path2" d="M19.875 1035.94v12.25C19.875 1049.15 19.092 1049.94 18.125 1049.94H5.875c-.967.0-1.75-.789999999999964-1.75-1.75v-12.25h15.75z" style="fill:#7f8c8d;fill-rule:nonzero"/><path id="path4" d="M4.125 1035.07v12.25c0 .960000000000036.783 1.75 1.75 1.75h12.25C19.092 1049.07 19.875 1048.28 19.875 1047.32v-12.25H4.125z" style="fill:#95a5a6;fill-rule:nonzero"/><rect id="rect6" x="14.625" y="1045.57" width="4.375" height="3.5" style="fill:#7f8c8d"/><path id="path8" d="M5.875 1030.69c-.967.0-1.75.779999999999973-1.75 1.75v12.25c0 .970000000000027.783 1.75 1.75 1.75h12.25C19.092 1046.44 19.875 1045.66 19.875 1044.69v-12.25C19.875 1031.47 19.092 1030.69 18.125 1030.69H5.875z" style="fill:#bdc3c7;fill-rule:nonzero"/><rect id="rect10" x="15.5" y="1047.32" width="2.625" height=".875" style="fill:#f1c40f"/><g id="rect10-6" transform="matrix(2,0,0,1.66667,-12,-703.612)"><rect x="10.5" y="1053.6" width="3" height="1.65" style="fill:#edb715"/></g><g id="rect10-6-5" transform="matrix(-2.74376e-16,-0.667461,1.48632,-7.10324e-16,-5.83586,349.146)"><rect x="-1053.61" y="11.325" width="3.667" height="1.35" style="fill:#bdc3c7"/></g><g id="rect10-6-5-22" serif:id="rect10-6-5-2" transform="matrix(-1.625,9.35494e-17,6.2624e-17,-1,-8.0625,-0.760633)"><rect x="-10.5" y="-1055.25" width="3" height="1.65" style="fill:#bdc3c7"/></g><g id="rect10-6-5-2-1" transform="matrix(-1.625,9.35494e-17,6.2624e-17,-1,-6.9375,-0.760633)"><rect x="-16.5" y="-1055.25" width="3" height="1.65" style="fill:#bdc3c7"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C28_QuickTime.png b/share/icons/database/C28_QuickTime.png
deleted file mode 100644
index 59a169491..000000000
--- a/share/icons/database/C28_QuickTime.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C28_QuickTime.svg b/share/icons/database/C28_QuickTime.svg
new file mode 100644
index 000000000..bf2ad5acf
--- /dev/null
+++ b/share/icons/database/C28_QuickTime.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#3f51b5" d="M43 39V24h-4v15c0 5 4 9 9 9v-4c-2.8.0-5-2.2-5-5z"/><circle fill="#90a4ae" cx="24" cy="24" r="19"/><circle fill="#37474f" cx="24" cy="24" r="2"/><g fill="#253278"><circle cx="24" cy="14" r="5"/><circle cx="24" cy="34" r="5"/><circle cx="34" cy="24" r="5"/><circle cx="14" cy="24" r="5"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C29_KGPG_Term.png b/share/icons/database/C29_KGPG_Term.png
deleted file mode 100644
index 010d33570..000000000
--- a/share/icons/database/C29_KGPG_Term.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C29_KGPG_Term.svg b/share/icons/database/C29_KGPG_Term.svg
new file mode 100644
index 000000000..ddbf38493
--- /dev/null
+++ b/share/icons/database/C29_KGPG_Term.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g><path d="M41 6H7c-.6.0-1 .4-1 1V42H42V7C42 6.4 41.6 6 41 6z" style="fill:#cfd8dc;fill-rule:nonzero"/></g><rect x="8" y="13" width="32" height="27" style="fill:#263238"/><g transform="matrix(1.00639,0,0,1.00639,12.7027,31.2351)"><g><text x="0" y="0" style="font-family:roboto-bold,roboto;font-weight:700;font-size:22px;fill:#76ff03">>_</text></g></g><g><circle cx="13.5" cy="9.5" r="1.5" style="fill:#90a4ae"/><circle cx="9.5" cy="9.5" r="1.5" style="fill:#90a4ae"/></g><g transform="matrix(1,0,0,1,1.02128,-0.291791)"><g id="polygon2" transform="matrix(0.438989,0,0,0.598621,-3.05709,20.013)"><path d="M22 45l-4-4V21H30v8l-2 2 2 2v2l-2 2 2 2v2l-4 4H22z" style="fill:#ffa000;fill-rule:nonzero"/></g><g id="path4" transform="matrix(0.438989,0,0,0.598621,-3.05709,20.013)"><path d="M38 7.8c-.5-1.8-2-3.1-3.7-3.6C31.9 3.7 28.2 3 24 3s-7.9.7-10.3 1.2C12 4.7 10.5 6 10 7.8c-.5 1.7-1 4.1-1 6.7s.5 5 1 6.7c.5 1.8 1.9 3.1 3.7 3.5C16.1 25.3 19.8 26 24 26S31.9 25.3 34.3 24.8C36.1 24.4 37.5 23 38 21.3s1-4.1 1-6.7c0-2.7-.5-5.1-1-6.8zM29 13H19c-1.1.0-2-.9-2-2V9c0-.6 3.1-1 7-1s7 .4 7 1v2C31 12.1 30.1 13 29 13z" style="fill:#ffa000;fill-rule:nonzero"/></g><g id="rect8" transform="matrix(0.598621,0,0,0.598621,-7.50244,20.013)"><rect x="23.559" y="26" width="2" height="19" style="fill:#d68600"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C30_Konsole.png b/share/icons/database/C30_Konsole.png
deleted file mode 100644
index 292df84ce..000000000
--- a/share/icons/database/C30_Konsole.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C30_Konsole.svg b/share/icons/database/C30_Konsole.svg
new file mode 100644
index 000000000..7a88da621
--- /dev/null
+++ b/share/icons/database/C30_Konsole.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g><path d="M41 6H7c-.6.0-1 .4-1 1V42H42V7C42 6.4 41.6 6 41 6z" style="fill:#cfd8dc;fill-rule:nonzero"/></g><rect x="8" y="13" width="32" height="27" style="fill:#263238"/><g transform="matrix(1.00639,0,0,1.00639,12.7027,31.2351)"><g><text x="0" y="0" style="font-family:roboto-bold,roboto;font-weight:700;font-size:22px;fill:#76ff03">>_</text></g></g><g><circle cx="13.5" cy="9.5" r="1.5" style="fill:#90a4ae"/><circle cx="9.5" cy="9.5" r="1.5" style="fill:#90a4ae"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C31_FilePrint.png b/share/icons/database/C31_FilePrint.png
deleted file mode 100644
index 4ff0f127c..000000000
--- a/share/icons/database/C31_FilePrint.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C31_FilePrint.svg b/share/icons/database/C31_FilePrint.svg
new file mode 100644
index 000000000..53234c85c
--- /dev/null
+++ b/share/icons/database/C31_FilePrint.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><rect x="9" y="11" fill="#424242" width="30" height="3"/><path fill="#616161" d="M4 25h40v-7c0-2.2-1.8-4-4-4H8c-2.2.0-4 1.8-4 4v7z"/><path fill="#424242" d="M8 36h32c2.2.0 4-1.8 4-4v-8H4v8c0 2.2 1.8 4 4 4z"/><circle fill="#00e676" cx="40" cy="18" r="1"/><rect x="11" y="4" fill="#90caf9" width="26" height="10"/><path fill="#242424" d="M37.5 31h-27C9.7 31 9 30.3 9 29.5v0c0-.8.7-1.5 1.5-1.5h27c.8.0 1.5.7 1.5 1.5v0C39 30.3 38.3 31 37.5 31z"/><rect x="11" y="31" fill="#90caf9" width="26" height="11"/><rect x="11" y="29" fill="#42a5f5" width="26" height="2"/><g fill="#1976d2"><rect x="16" y="33" width="17" height="2"/><rect x="16" y="37" width="13" height="2"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C32_FSView.png b/share/icons/database/C32_FSView.png
deleted file mode 100644
index 53dda269a..000000000
--- a/share/icons/database/C32_FSView.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C32_FSView.svg b/share/icons/database/C32_FSView.svg
new file mode 100644
index 000000000..c0d42f28a
--- /dev/null
+++ b/share/icons/database/C32_FSView.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#90caf9" d="M10 10v28h28V10H10zM34 34H14V14h20V34z"/><rect x="6" y="6" fill="#d81b60" width="12" height="12"/><g fill="#2196f3"><rect x="30" y="6" width="12" height="12"/><rect x="6" y="30" width="12" height="12"/><rect x="30" y="30" width="12" height="12"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C33_Run.png b/share/icons/database/C33_Run.png
deleted file mode 100644
index 522b0a3f9..000000000
--- a/share/icons/database/C33_Run.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C33_Run.svg b/share/icons/database/C33_Run.svg
new file mode 100644
index 000000000..d8375ceff
--- /dev/null
+++ b/share/icons/database/C33_Run.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#ff5722" d="M6 10v28c0 2.2 1.8 4 4 4h28c2.2.0 4-1.8 4-4V10c0-2.2-1.8-4-4-4H10C7.8 6 6 7.8 6 10z"/><g fill="#bf360c"><rect x="6" y="35" width="36" height="2"/><rect x="6" y="31" width="36" height="2"/><path d="M6.1 39c.2.8.6 1.5 1.2 2h33.2c.6-.5 1-1.2 1.2-2H6.1z"/><path d="M6.1 9h35.7c-.2-.8-.6-1.5-1.2-2H7.4C6.8 7.5 6.3 8.2 6.1 9z"/><rect x="6" y="23" width="36" height="2"/><rect x="6" y="27" width="36" height="2"/><rect x="6" y="15" width="36" height="2"/><rect x="6" y="11" width="36" height="2"/><rect x="6" y="19" width="36" height="2"/></g><g fill="#ff8a65"><rect x="27" y="6" width="2" height="5"/><rect x="27" y="13" width="2" height="6"/><rect x="27" y="29" width="2" height="6"/><rect x="31" y="6" width="2" height="1"/><rect x="19" y="29" width="2" height="6"/><rect x="31" y="9" width="2" height="6"/><rect x="23" y="6" width="2" height="1"/><rect x="23" y="25" width="2" height="6"/><rect x="23" y="9" width="2" height="6"/><rect x="19" y="21" width="2" height="6"/><rect x="23" y="17" width="2" height="6"/><rect x="23" y="33" width="2" height="6"/><rect x="27" y="21" width="2" height="6"/><rect x="39" y="33" width="2" height="6"/><rect x="39" y="17" width="2" height="6"/><rect x="39" y="25" width="2" height="6"/><path d="M39 6.1V7h1.6C40.2 6.6 39.6 6.3 39 6.1z"/><rect x="31" y="17" width="2" height="6"/><path d="M40.6 41H39v.9C39.6 41.7 40.2 41.4 40.6 41z"/><rect x="35" y="13" width="2" height="6"/><rect x="31" y="33" width="2" height="6"/><rect x="35" y="29" width="2" height="6"/><rect x="39" y="9" width="2" height="6"/><rect x="35" y="21" width="2" height="6"/><rect x="31" y="25" width="2" height="6"/><rect x="35" y="37" width="2" height="5"/><rect x="35" y="6" width="2" height="5"/><rect x="31" y="41" width="2" height="1"/><rect x="23" y="41" width="2" height="1"/><rect x="27" y="37" width="2" height="5"/><rect x="19" y="37" width="2" height="5"/><rect x="7" y="17" width="2" height="6"/><path d="M9 41H7.4c.5.4 1 .7 1.6.9V41z"/><path d="M7.4 7H9V6.1c-.6.2-1.2.5-1.6.9z"/><rect x="7" y="33" width="2" height="6"/><rect x="7" y="25" width="2" height="6"/><rect x="7" y="9" width="2" height="6"/><rect x="11" y="29" width="2" height="6"/><rect x="15" y="17" width="2" height="6"/><rect x="15" y="33" width="2" height="6"/><rect x="15" y="9" width="2" height="6"/><rect x="15" y="6" width="2" height="1"/><rect x="19" y="6" width="2" height="5"/><rect x="15" y="25" width="2" height="6"/><rect x="15" y="41" width="2" height="1"/><rect x="11" y="21" width="2" height="6"/><rect x="11" y="6" width="2" height="5"/><rect x="11" y="37" width="2" height="5"/><rect x="19" y="13" width="2" height="6"/><rect x="11" y="13" width="2" height="6"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C34_Configure.png b/share/icons/database/C34_Configure.png
deleted file mode 100644
index 5314140ec..000000000
--- a/share/icons/database/C34_Configure.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C34_Configure.svg b/share/icons/database/C34_Configure.svg
new file mode 100644
index 000000000..8a3da3fb1
--- /dev/null
+++ b/share/icons/database/C34_Configure.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#607d8b" d="M44.7 11 36 19.6s-2.6.0-5.2-2.6-2.6-5.2-2.6-5.2l8.7-8.7c-4.9-1.2-10.8.4-14.4 4-5.4 5.4-.6 12.3-2 13.7C12.9 28.7 5.1 34.7 4.9 35c-2.3 2.3-2.4 6-.2 8.2s5.9 2.1 8.2-.2c.3-.3 6.7-8.4 14.2-15.9 1.4-1.4 8 3.7 13.6-1.8C44.2 21.7 45.9 15.9 44.7 11zM9.4 41.1c-1.4.0-2.5-1.1-2.5-2.5C6.9 37.1 8 36 9.4 36s2.5 1.1 2.5 2.5-1.1 2.6-2.5 2.6z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C35_KRFB.png b/share/icons/database/C35_KRFB.png
deleted file mode 100644
index b518beebd..000000000
--- a/share/icons/database/C35_KRFB.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C35_KRFB.svg b/share/icons/database/C35_KRFB.svg
new file mode 100644
index 000000000..3fa748d67
--- /dev/null
+++ b/share/icons/database/C35_KRFB.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g id="Layer-1" serif:id="Layer 1" transform="matrix(1,0,0,1,0,-793.89)"><g id="g882" transform="matrix(0.336742,0,0,0.352778,1.09091,793.89)"><path id="path876" d="M10.865 14.173c-2.868.0-5.196 2.001-5.196 5.003V94.209C5.669 96.712 7.997 99.213 10.865 99.213H125.198C128.066 99.213 130.394 96.712 130.394 94.209V19.176c0-3.002-2.328-5.003-5.19600000000001-5.003H10.865z" style="fill:#bdc3c7;fill-rule:nonzero"/><rect id="rect878" x="14.173" y="22.677" width="107.717" height="68.031" style="fill:#78c2e6"/></g><g transform="matrix(1.02638,0,0,0.871313,-1.30567,796.29)"><path d="M16.119 22.586v4.773l-6.078-7.16 6.078-7.16v4.773H33.192V13.039l6.078 7.16-6.078 7.16V22.586H16.119z" style="fill:#297dd4"/></g><g id="rect10-6-5-2" transform="matrix(-11.6667,1.38181e-15,1.13058e-15,-0.313605,-81,506.683)"><rect x="-10.5" y="-1055.25" width="3" height="1.65" style="fill:#7f8c8d"/></g><g id="rect10-6-5-21" serif:id="rect10-6-5-2" transform="matrix(-4.44445,4.97347e-16,4.06921e-16,-0.313605,-16,507.502)"><rect x="-10.5" y="-1055.25" width="3" height="1.65" style="fill:#7f8c8d"/></g><g id="rect10-6-5" transform="matrix(-6.9496e-16,-1.4362,3.30294,-1.29644e-15,-15.6353,-679.095)"><rect x="-1053.61" y="11.325" width="3.667" height="1.35" style="fill:#bdc3c7"/></g><g id="rect10-6-5-22" serif:id="rect10-6-5-2" transform="matrix(-3.61111,1.7009e-16,1.39164e-16,-1.81818,-20.5833,-1081.54)"><rect x="-10.5" y="-1055.25" width="3" height="1.65" style="fill:#bdc3c7"/></g><g id="rect10-6-5-2-1" transform="matrix(-3.61111,1.7009e-16,1.39164e-16,-1.81818,-18.0833,-1081.54)"><rect x="-16.5" y="-1055.25" width="3" height="1.65" style="fill:#bdc3c7"/></g><g id="rect10-6" transform="matrix(4.44444,0,0,2.81115,-29.3333,-2128.55)"><rect x="10.5" y="1053.6" width="3" height="1.65" style="fill:#1cad07"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C36_Ark.png b/share/icons/database/C36_Ark.png
deleted file mode 100644
index e30bb09b9..000000000
--- a/share/icons/database/C36_Ark.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C36_Ark.svg b/share/icons/database/C36_Ark.svg
new file mode 100644
index 000000000..e593d65c7
--- /dev/null
+++ b/share/icons/database/C36_Ark.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path id="path2" d="M40 12H22L18 8H8C5.8 8 4 9.8 4 12v8H44V16c0-2.2-1.8-4-4-4z" style="fill:#ffa000;fill-rule:nonzero"/><path id="path4" d="M40 12H8c-2.2.0-4 1.8-4 4V36c0 2.2 1.8 4 4 4H40c2.2.0 4-1.8 4-4V16c0-2.2-1.8-4-4-4z" style="fill:#ffca28;fill-rule:nonzero"/><g transform="matrix(1,0,0,1,9.45665e-05,1.57568)"><rect id="rect822" x="20.492" y="13" width="7.015" height="2" style="fill:#ff0025"/><rect id="rect822-7" x="20.492" y="17.045" width="7.015" height="2" style="fill:#ff0025"/><rect id="rect822-7-8" x="20.492" y="21.09" width="7.015" height="2" style="fill:#ff0025"/><rect id="rect822-7-33" x="20.492" y="25.135" width="7.015" height="2" style="fill:#ff0025"/><g transform="matrix(0.941767,0,0,0.465036,11.2143,14.2783)"><path d="M17.301 27.646l-3.725 6.451-3.724-6.451h7.449z" style="fill:#ff0025;fill-rule:nonzero"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C37_KPercentage.png b/share/icons/database/C37_KPercentage.png
deleted file mode 100644
index 64995d2de..000000000
--- a/share/icons/database/C37_KPercentage.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C37_KPercentage.svg b/share/icons/database/C37_KPercentage.svg
new file mode 100644
index 000000000..3db85351e
--- /dev/null
+++ b/share/icons/database/C37_KPercentage.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd"><g transform="matrix(1.00042,0,0,0.960739,-0.00969865,-761.485)"><g id="Layer-1" serif:id="Layer 1"><g id="text1433"><path id="path1435" d="M13.263 817.539C10.951 817.539 9.107 816.781 7.732 815.266 6.357 813.734 5.669 811.695 5.669 809.148 5.669 806.367 6.396 804.18 7.849 802.586 9.302 800.977 11.263 800.172 13.732 800.172c2.39.0 4.242.741999999999962 5.555 2.226C20.615 803.883 21.279 805.969 21.279 808.656 21.279 811.344 20.537 813.5 19.052 815.125 17.583 816.735 15.654 817.539 13.263 817.539zM13.591 802.75C12.107 802.75 10.935 803.305 10.076 804.414 9.216 805.508 8.786 807.016 8.786 808.938 8.786 810.828 9.208 812.305 10.052 813.367 10.896 814.414 12.044 814.938 13.497 814.938 14.966 814.938 16.115 814.391 16.943 813.297 17.771 812.203 18.185 810.688 18.185 808.75 18.185 806.859 17.771 805.391 16.943 804.344 16.13 803.281 15.013 802.75 13.591 802.75zM35.763 800.687 14.201 834.532H10.849l21.539-33.845h3.375zM33.279 834.813C30.966 834.813 29.123 834.047 27.748 832.516 26.373 830.985 25.685 828.953 25.685 826.422 25.685 823.641 26.419 821.446 27.888 819.836 29.357 818.211 31.31 817.399 33.748 817.399c2.375.0 4.226.75 5.554 2.25C40.631 821.149 41.295 823.25 41.295 825.953 41.295 828.625 40.552 830.774 39.068 832.399 37.599 834.008 35.67 834.813 33.279 834.813zM33.607 820.047C32.107 820.047 30.927 820.594 30.068 821.688 29.224 822.781 28.802 824.297 28.802 826.235 28.802 828.094 29.224 829.555 30.068 830.618 30.912 831.664 32.06 832.188 33.513 832.188 34.982 832.188 36.131 831.641 36.959 830.547 37.787 829.438 38.201 827.922 38.201 826 38.201 824.094 37.787 822.625 36.959 821.594 36.146 820.563 35.029 820.047 33.607 820.047z" style="fill:#5e35b1;fill-rule:nonzero;stroke:#5e35b1;stroke-width:.75px"/></g></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C38_Samba_Unmount.png b/share/icons/database/C38_Samba_Unmount.png
deleted file mode 100644
index 4112a4f63..000000000
--- a/share/icons/database/C38_Samba_Unmount.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C38_Samba_Unmount.svg b/share/icons/database/C38_Samba_Unmount.svg
new file mode 100644
index 000000000..220ef6d98
--- /dev/null
+++ b/share/icons/database/C38_Samba_Unmount.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g id="Layer-1" serif:id="Layer 1" transform="matrix(1,0,0,1,0,-793.89)"><g id="g882" transform="matrix(0.336742,0,0,0.352778,1.09091,793.89)"><path id="path872" d="M51.792 96.242C51.857 97.109 51.953 97.92 51.953 98.807c0 9.556-3.88 17.98-9.907 23.083H94.017C87.987 116.787 84.11 108.363 84.11 98.807 84.11 97.92 84.203 97.109 84.271 96.242H51.792z" style="fill:#95a5a6;fill-rule:nonzero"/><path id="path874" d="M51.792 96.242C51.857 96.755 51.953 97.781 51.953 98.807c0 2.566-.241 5.131-.810000000000002 7.693H84.92C84.351 103.938 84.11 101.373 84.11 98.807 84.11 97.781 84.203 96.755 84.271 96.242H51.792z" style="fill:#7f8c8d;fill-rule:nonzero"/><path id="path876" d="M10.865 14.173c-2.868.0-5.196 2.001-5.196 5.003V94.209C5.669 96.712 7.997 99.213 10.865 99.213H125.198C128.066 99.213 130.394 96.712 130.394 94.209V19.176c0-3.002-2.328-5.003-5.19600000000001-5.003H10.865z" style="fill:#bdc3c7;fill-rule:nonzero"/><rect id="rect878" x="14.173" y="22.677" width="107.717" height="68.031" style="fill:#78c2e6"/></g><g transform="matrix(0.907586,0,0,0.944558,3.45296,44.9469)"><g transform="matrix(1,0,0,1,-0.8462,791.224)"><path d="M23.008 13.977 11.395 15.698 11.365 22.381H23.008V13.977z" style="fill:#297dd4"/></g><g transform="matrix(1,0,0,-1,-0.8462,836.988)"><path d="M23.008 13.977 11.395 15.698 11.365 22.381H23.008V13.977z" style="fill:#297dd4"/></g><g transform="matrix(-1,0,0,-1,46.1246,836.988)"><path d="M23.008 13.831 11.365 12.324V22.381H23.008v-8.55z" style="fill:#297dd4"/></g><g transform="matrix(-1,0,0,1,46.1246,791.224)"><path d="M23.008 13.831 11.365 12.266V22.381H23.008v-8.55z" style="fill:#297dd4"/></g></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C39_History.png b/share/icons/database/C39_History.png
deleted file mode 100644
index 95e7d6e8e..000000000
--- a/share/icons/database/C39_History.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C39_History.svg b/share/icons/database/C39_History.svg
new file mode 100644
index 000000000..a50a0f92a
--- /dev/null
+++ b/share/icons/database/C39_History.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><circle fill="#00acc1" cx="24" cy="24" r="20"/><circle fill="#eee" cx="24" cy="24" r="16"/><rect x="23" y="11" width="2" height="13"/><rect x="26.1" y="22.7" transform="matrix(-.707 .707 -.707 -.707 65.787 27.25)" width="2.3" height="9.2"/><circle cx="24" cy="24" r="2"/><circle fill="#00acc1" cx="24" cy="24" r="1"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C40_Mail_Find.png b/share/icons/database/C40_Mail_Find.png
deleted file mode 100644
index 6dfbb958d..000000000
--- a/share/icons/database/C40_Mail_Find.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C40_Mail_Find.svg b/share/icons/database/C40_Mail_Find.svg
new file mode 100644
index 000000000..f049a7f2d
--- /dev/null
+++ b/share/icons/database/C40_Mail_Find.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g fill="#616161"><rect x="34.6" y="28.1" transform="matrix(.707 -.707 .707 .707 -15.154 36.586)" width="4" height="17"/><circle cx="20" cy="20" r="16"/></g><rect x="36.2" y="32.1" transform="matrix(.707 -.707 .707 .707 -15.839 38.239)" fill="#37474f" width="4" height="12.3"/><circle fill="#64b5f6" cx="20" cy="20" r="13"/><path fill="#bbdefb" d="M26.9 14.2c-1.7-2-4.2-3.2-6.9-3.2s-5.2 1.2-6.9 3.2c-.4.4-.3 1.1.1 1.4.4.4 1.1.3 1.4-.1C16 13.9 17.9 13 20 13s4 .9 5.4 2.5c.2.2.5.4.8.4.2.0.5-.1.6-.2C27.2 15.3 27.2 14.6 26.9 14.2z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C41_VectorGfx.png b/share/icons/database/C41_VectorGfx.png
deleted file mode 100644
index ec47b76e3..000000000
--- a/share/icons/database/C41_VectorGfx.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C41_VectorGfx.svg b/share/icons/database/C41_VectorGfx.svg
new file mode 100644
index 000000000..443386055
--- /dev/null
+++ b/share/icons/database/C41_VectorGfx.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g fill="#ff9800"><rect x="36.1" y="8.1" transform="matrix(.707 .707 -.707 .707 21.201 -25.184)" width="9.9" height="9.9"/><rect x="36" y="8" width="10" height="10"/></g><circle fill="#ffeb3b" cx="41" cy="13" r="3"/><polygon fill="#2e7d32" points="16.5,18 0,42 33,42"/><polygon fill="#4caf50" points="33.6,24 19.2,42 48,42"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C42_KCMMemory.png b/share/icons/database/C42_KCMMemory.png
deleted file mode 100644
index ee2560a02..000000000
--- a/share/icons/database/C42_KCMMemory.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C42_KCMMemory.svg b/share/icons/database/C42_KCMMemory.svg
new file mode 100644
index 000000000..6a58fbdaa
--- /dev/null
+++ b/share/icons/database/C42_KCMMemory.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#ff9800" d="M44 18v-4H34V4h-4v10h-4V4h-4v10h-4V4h-4v10H4v4h10v4H4v4h10v4H4v4h10v10h4V34h4v10h4V34h4v10h4V34h10v-4H34v-4h10v-4H34v-4H44z"/><path fill="#4caf50" d="M8 12v24c0 2.2 1.8 4 4 4h24c2.2.0 4-1.8 4-4V12c0-2.2-1.8-4-4-4H12C9.8 8 8 9.8 8 12z"/><path fill="#37474f" d="M31 31H17c-1.1.0-2-.9-2-2V19c0-1.1.9-2 2-2h14c1.1.0 2 .9 2 2v10C33 30.1 32.1 31 31 31z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C43_EditTrash.png b/share/icons/database/C43_EditTrash.png
deleted file mode 100644
index d09e07935..000000000
--- a/share/icons/database/C43_EditTrash.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C43_EditTrash.svg b/share/icons/database/C43_EditTrash.svg
new file mode 100644
index 000000000..7c4d19e08
--- /dev/null
+++ b/share/icons/database/C43_EditTrash.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#b39ddb" d="M30.6 44H17.4c-2 0-3.7-1.4-4-3.4L9 11h30l-4.5 29.6C34.2 42.6 32.5 44 30.6 44z"/><path fill="#7e57c2" d="M38 13H10c-1.1.0-2-.9-2-2v0c0-1.1.9-2 2-2h28c1.1.0 2 .9 2 2v0C40 12.1 39.1 13 38 13z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C44_KNotes.png b/share/icons/database/C44_KNotes.png
deleted file mode 100644
index f981a9a47..000000000
--- a/share/icons/database/C44_KNotes.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C44_KNotes.svg b/share/icons/database/C44_KNotes.svg
new file mode 100644
index 000000000..0852fdd1d
--- /dev/null
+++ b/share/icons/database/C44_KNotes.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(2,0,0,2,0,-2056.8)"><g transform="matrix(1,0,0,1,0,1028.4)"><path d="M2 4V20c0 1.105.895 2 2 2H16l6-6V4H2z" style="fill:#f1c40f;fill-rule:nonzero"/></g><path d="M22 1044.4l-6 6v-4c0-1.10000000000014.895-2 2-2h4z" style="fill:#f39c12;fill-rule:nonzero"/><g transform="matrix(1,0,0,1,0,1028.4)"><path d="M4 2C2.895 2 2 2.895 2 4V6H22V4c0-1.105-.895-2-2-2H4z" style="fill:#f1c40f;fill-rule:nonzero"/></g><g><rect x="5" y="1034.4" width="14" height="2" style="fill:#f39c12"/><rect x="5" y="1038.4" width="14" height="2" style="fill:#f39c12"/><rect x="5" y="1042.4" width="9" height="2" style="fill:#f39c12"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C45_Cancel.png b/share/icons/database/C45_Cancel.png
deleted file mode 100644
index 443450f09..000000000
--- a/share/icons/database/C45_Cancel.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C45_Cancel.svg b/share/icons/database/C45_Cancel.svg
new file mode 100644
index 000000000..df1efdc0e
--- /dev/null
+++ b/share/icons/database/C45_Cancel.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(0.983029,0,0,0.983029,-2.15274,-4.69129)"><circle cx="26.604" cy="29.187" r="20.345" style="fill:#ff3737"/></g><g transform="matrix(27.6873,0,0,27.6873,15.1954,33.8428)"><path d="M.318-.466.451-.711H.62L.413-.358.625.0H.455L.318-.249.181.0H.011L.223-.358.016-.711H.185l.133.245z" style="fill:#fff;fill-rule:nonzero"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C46_Help.png b/share/icons/database/C46_Help.png
deleted file mode 100644
index fc50cff74..000000000
--- a/share/icons/database/C46_Help.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C46_Help.svg b/share/icons/database/C46_Help.svg
new file mode 100644
index 000000000..6a7bf8193
--- /dev/null
+++ b/share/icons/database/C46_Help.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(0.983029,0,0,0.983029,-2.15274,-4.69129)"><circle cx="26.604" cy="29.187" r="20.345" style="fill:#0090ff"/></g><g transform="matrix(31.8224,0,0,31.8224,16.3008,35.374)"><path d="M.169-.218C.169-.263.175-.3.186-.327.197-.354.217-.38.247-.407.276-.433.296-.454.306-.471.315-.487.32-.505.32-.523.32-.578.295-.605.244-.605.22-.605.201-.598.186-.583.172-.568.164-.548.164-.522H.022C.023-.584.043-.633.082-.668.122-.703.176-.721.244-.721.313-.721.367-.704.405-.671.443-.637.462-.59.462-.529.462-.501.456-.475.443-.451.431-.426.409-.399.378-.369L.339-.331C.314-.307.3-.28.296-.248l-.002.03H.169zm-.014.15C.155-.09.163-.108.177-.122.192-.136.211-.143.234-.143S.276-.136.291-.122c.015.014.022.032.022.054C.313-.047.306-.029.292-.015.277-.001.258.006.234.006.211.006.191-.001.177-.015.163-.029.155-.047.155-.068z" style="fill:#fff;fill-rule:nonzero"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C47_KPackage.png b/share/icons/database/C47_KPackage.png
deleted file mode 100644
index ac5d51789..000000000
--- a/share/icons/database/C47_KPackage.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C47_KPackage.svg b/share/icons/database/C47_KPackage.svg
new file mode 100644
index 000000000..79b06f96c
--- /dev/null
+++ b/share/icons/database/C47_KPackage.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#ff9800" d="M38 42H10c-2.2.0-4-1.8-4-4V10c0-2.2 1.8-4 4-4h28c2.2.0 4 1.8 4 4v28c0 2.2-1.8 4-4 4z"/><path fill="#8a5100" d="M29.5 16h-11c-.8.0-1.5-.7-1.5-1.5v0c0-.8.7-1.5 1.5-1.5h11c.8.0 1.5.7 1.5 1.5v0C31 15.3 30.3 16 29.5 16z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C48_Folder.png b/share/icons/database/C48_Folder.png
deleted file mode 100644
index e648b3fec..000000000
--- a/share/icons/database/C48_Folder.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C48_Folder.svg b/share/icons/database/C48_Folder.svg
new file mode 100644
index 000000000..5bf47b6e2
--- /dev/null
+++ b/share/icons/database/C48_Folder.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#ffa000" d="M40 12H22l-4-4H8c-2.2.0-4 1.8-4 4v8h40v-4c0-2.2-1.8-4-4-4z"/><path fill="#ffca28" d="M40 12H8c-2.2.0-4 1.8-4 4v20c0 2.2 1.8 4 4 4h32c2.2.0 4-1.8 4-4V16c0-2.2-1.8-4-4-4z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C49_Folder_Blue_Open.png b/share/icons/database/C49_Folder_Blue_Open.png
deleted file mode 100644
index baba6e00e..000000000
--- a/share/icons/database/C49_Folder_Blue_Open.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C49_Folder_Blue_Open.svg b/share/icons/database/C49_Folder_Blue_Open.svg
new file mode 100644
index 000000000..917c61f1f
--- /dev/null
+++ b/share/icons/database/C49_Folder_Blue_Open.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#ffa000" d="M38 12H22l-4-4H8c-2.2.0-4 1.8-4 4v24c0 2.2 1.8 4 4 4h31c1.7.0 3-1.3 3-3V16c0-2.2-1.8-4-4-4z"/><path fill="#ffca28" d="M42.2 18H15.3c-1.9.0-3.6 1.4-3.9 3.3L8 40h31.7c1.9.0 3.6-1.4 3.9-3.3l2.5-14c.5-2.4-1.4-4.7-3.9-4.7z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C50_Folder_Tar.png b/share/icons/database/C50_Folder_Tar.png
deleted file mode 100644
index 69f1c455d..000000000
--- a/share/icons/database/C50_Folder_Tar.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C50_Folder_Tar.svg b/share/icons/database/C50_Folder_Tar.svg
new file mode 100644
index 000000000..68ee554ee
--- /dev/null
+++ b/share/icons/database/C50_Folder_Tar.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g fill="#d1c4e9"><path d="M38 7H10C8.9 7 8 7.9 8 9v6c0 1.1.9 2 2 2h28c1.1.0 2-.9 2-2V9C40 7.9 39.1 7 38 7z"/><path d="M38 19H10c-1.1.0-2 .9-2 2v6c0 1.1.9 2 2 2h25.1c1.3-1.3 4.9-.9 4.9-2v-6C40 19.9 39.1 19 38 19z"/><path d="M34.4 31H10c-1.1.0-2 .9-2 2v6c0 1.1.9 2 2 2h28c1.1.0 2-.9 2-2v-2.4c0-3.1-2.5-5.6-5.6-5.6z"/></g><g fill="#ffa000"><polygon points="43,46 41,48 39,48 37,46 37,35.4 43,35.4 43,40 42,41 43,42 43,43 42,44 43,45"/><path d="M47.5 28.5c-.3-.9-1-1.6-2-1.8C44.2 26.4 42.2 26 40 26s-4.2.4-5.5.6c-1 .2-1.7.9-2 1.8C32.3 29.4 32 30.6 32 32s.3 2.6.5 3.5c.3.9 1 1.6 2 1.8 1.3.3 3.2.6 5.5.6s4.2-.4 5.5-.6c1-.2 1.7-.9 2-1.8s.5-2.1.5-3.5S47.7 29.4 47.5 28.5zM42.9 31h-5.7c-.6.0-1.1-.5-1.1-1.1v-1.4c0-.3 1.8-.6 4-.6s4 .3 4 .6v1.4C44 30.5 43.5 31 42.9 31z"/></g><rect x="39" y="37.1" fill="#d68600" width="1" height="10.9"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C51_Decrypted.png b/share/icons/database/C51_Decrypted.png
deleted file mode 100644
index 1e239a7cc..000000000
--- a/share/icons/database/C51_Decrypted.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C51_Decrypted.svg b/share/icons/database/C51_Decrypted.svg
new file mode 100644
index 000000000..d10c64d23
--- /dev/null
+++ b/share/icons/database/C51_Decrypted.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(2,0,0,2,0,-2056.8)"><g transform="matrix(1,0,0,0.956522,0,44.7565)"><path d="M5 1037.4C3.895 1037.4 3 1038.3 3 1039.4v8c0 1.09999999999991.895 2 2 2H19c1.105.0 2-.900000000000091 2-2v-8c0-1.10000000000014-.895-2-2-2H5z" style="fill:#f1c40f;fill-rule:nonzero"/></g><g transform="matrix(1,0,0,0.956522,0,44.7565)"><path d="M5 1040.4C3.895 1040.4 3 1041.3 3 1042.4v8c0 1.09999999999991.895 2 2 2H19c1.105.0 2-.900000000000091 2-2v-8c0-1.10000000000014-.895-2-2-2H5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(1,0,0,0.956522,0,44.7565)"><path d="M12 1029.4C8.134 1029.4 5 1032.5 5 1036.4v2C5.998 1039.11 6.996 1039.09 7.994 1038.4v-2c0-2.20000000000005 1.797-4 4.006-4 1.525.0 2.971 1 3.647 2.25C15.807 1034.95 18.41 1033.52 18.15 1033.04 16.963 1030.86 14.654 1029.4 12 1029.4z" style="fill:#adafb0;fill-rule:nonzero"/></g><g transform="matrix(1,0,0,0.956522,0,1028.44)"><path d="M5 14v1H19V14H5zm0 2v1H19V16H5zm0 2v1H19V18H5zm0 2v1H19V20H5z" style="fill:#e67e22;fill-rule:nonzero"/></g><g transform="matrix(0.991894,0,0,0.748024,0.15401,1030.3)"><path d="M16 10C16 10.552 16.672 11 17.5 11s1.5-.448 1.5-1H16z" style="fill:#e67e22;fill-rule:nonzero"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C52_Encrypted.png b/share/icons/database/C52_Encrypted.png
deleted file mode 100644
index e1edec451..000000000
--- a/share/icons/database/C52_Encrypted.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C52_Encrypted.svg b/share/icons/database/C52_Encrypted.svg
new file mode 100644
index 000000000..113e11a07
--- /dev/null
+++ b/share/icons/database/C52_Encrypted.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(2,0,0,2,0,-2056.8)"><g transform="matrix(1,0,0,0.956522,0,44.7565)"><path d="M5 1037.4C3.895 1037.4 3 1038.3 3 1039.4v8c0 1.09999999999991.895 2 2 2H19c1.105.0 2-.900000000000091 2-2v-8c0-1.10000000000014-.895-2-2-2H5z" style="fill:#f1c40f;fill-rule:nonzero"/></g><g transform="matrix(1,0,0,0.956522,0,44.7565)"><path d="M5 1040.4C3.895 1040.4 3 1041.3 3 1042.4v8c0 1.09999999999991.895 2 2 2H19c1.105.0 2-.900000000000091 2-2v-8c0-1.10000000000014-.895-2-2-2H5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(1,0,0,0.956522,0,44.7565)"><path d="M12 1029.4C8.134 1029.4 5 1032.5 5 1036.4v2C5.998 1039.11 6.996 1039.09 7.994 1038.4v-2c0-2.20000000000005 1.797-4 4.006-4S16.006 1034.2 16.006 1036.4v2C17.023 1039.13 18.022 1039.11 19 1038.4v-2c0-3.90000000000009-3.134-7-7-7z" style="fill:#adafb0;fill-rule:nonzero"/></g><g transform="matrix(1,0,0,0.956522,0,1028.44)"><path d="M5 14v1H19V14H5zm0 2v1H19V16H5zm0 2v1H19V18H5zm0 2v1H19V20H5z" style="fill:#e67e22;fill-rule:nonzero"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C53_Apply.png b/share/icons/database/C53_Apply.png
deleted file mode 100644
index a2ae9cfc7..000000000
--- a/share/icons/database/C53_Apply.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C53_Apply.svg b/share/icons/database/C53_Apply.svg
new file mode 100644
index 000000000..7ebd41c06
--- /dev/null
+++ b/share/icons/database/C53_Apply.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(0.983029,0,0,0.983029,-2.15274,-4.69129)"><circle cx="26.604" cy="29.187" r="20.345" style="fill:#4db446"/></g><g transform="matrix(1.36992,-1.36992,0.673517,0.673517,-16.5039,31.1727)"><path d="M24.613 24.744H14.276L14.288 16.448 12.225 16.431l.016 12.486H24.613V24.744z" style="fill:#fff"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C54_Signature.png b/share/icons/database/C54_Signature.png
deleted file mode 100644
index ba5ac29dd..000000000
--- a/share/icons/database/C54_Signature.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C54_Signature.svg b/share/icons/database/C54_Signature.svg
new file mode 100644
index 000000000..a6adc424a
--- /dev/null
+++ b/share/icons/database/C54_Signature.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(1.76777,1.76777,-1.76777,1.76777,1915.49,-1651.82)"><g><path d="M-63 1003.4v13l2 2 2-2v-13h-4z" style="fill:#ecf0f1;fill-rule:nonzero"/><path d="M-61 1003.4v15l2-2v-13h-2z" style="fill:#bdc3c7;fill-rule:nonzero"/><rect x="-63" y="1004.4" width="4" height="11" style="fill:#e67e22"/><path d="M-61 1000.4c-1.105.0-2 .899999999999977-2 2v1h4v-1C-59 1001.3-59.895 1000.4-61 1000.4z" style="fill:#7f8c8d;fill-rule:nonzero"/><g transform="matrix(1,0,0,1,-7,1)"><path d="M-55.406 1016-54 1017.4-52.594 1016h-2.812z" style="fill:#3c546c;fill-rule:nonzero"/><path d="M-54 1016V1017.4L-52.594 1016H-54z" style="fill:#4d5b6a;fill-rule:nonzero"/></g><path d="M-61 1000.4c-1.105.0-2 .899999999999977-2 2v1h2v-3z" style="fill:#95a5a6;fill-rule:nonzero"/><rect x="-61" y="1004.4" width="2" height="11" style="fill:#d35400"/></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C55_Thumbnail.png b/share/icons/database/C55_Thumbnail.png
deleted file mode 100644
index 4c3a26d44..000000000
--- a/share/icons/database/C55_Thumbnail.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C55_Thumbnail.svg b/share/icons/database/C55_Thumbnail.svg
new file mode 100644
index 000000000..64f174db0
--- /dev/null
+++ b/share/icons/database/C55_Thumbnail.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#90caf9" points="40,45 8,45 8,3 30,3 40,13"/><polygon fill="#e1f5fe" points="38.5,14 29,14 29,4.5"/><polygon fill="#1565c0" points="21,23 14,33 28,33"/><polygon fill="#1976d2" points="28,26.4 23,33 33,33"/><circle fill="#1976d2" cx="31.5" cy="24.5" r="1.5"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C56_KAddressBook.png b/share/icons/database/C56_KAddressBook.png
deleted file mode 100644
index e24b44ad3..000000000
--- a/share/icons/database/C56_KAddressBook.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C56_KAddressBook.svg b/share/icons/database/C56_KAddressBook.svg
new file mode 100644
index 000000000..cceebf11d
--- /dev/null
+++ b/share/icons/database/C56_KAddressBook.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#ff7043" d="M38 44H12V4h26c2.2.0 4 1.8 4 4v32c0 2.2-1.8 4-4 4z"/><path fill="#bf360c" d="M10 4h2v40h-2c-2.2.0-4-1.8-4-4V8c0-2.2 1.8-4 4-4z"/><g fill="#ab300b"><circle cx="26" cy="20" r="4"/><path d="M33 30s-1.9-4-7-4-7 4-7 4v2h14V30z"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C57_View_Text.png b/share/icons/database/C57_View_Text.png
deleted file mode 100644
index afaa8132e..000000000
--- a/share/icons/database/C57_View_Text.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C57_View_Text.svg b/share/icons/database/C57_View_Text.svg
new file mode 100644
index 000000000..aba208d94
--- /dev/null
+++ b/share/icons/database/C57_View_Text.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#90caf9" d="M39 16v7h-6v-7h-2v7h-6v-7h-2v7h-7v2h7v6h-7v2h7v6h-7v2h25V16H39zm0 9v6h-6v-6h6zM25 25h6v6h-6V25zm0 8h6v6h-6V33zm8 6v-6h6v6H33z"/><polygon fill="#00bcd4" points="40,8 8,8 8,40 16,40 16,16 40,16"/><path fill="#0097a7" d="M7 7v34h10V17h24V7H7zM9 23v-6h6v6H9zm6 2v6H9v-6h6zM17 9h6v6h-6V9zm8 0h6v6h-6V9zM15 9v6H9V9h6zM9 39v-6h6v6H9zM39 15h-6V9h6v6z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C58_KGPG.png b/share/icons/database/C58_KGPG.png
deleted file mode 100644
index a842c7971..000000000
--- a/share/icons/database/C58_KGPG.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C58_KGPG.svg b/share/icons/database/C58_KGPG.svg
new file mode 100644
index 000000000..aaa0fef8f
--- /dev/null
+++ b/share/icons/database/C58_KGPG.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><circle fill="#ffb74d" cx="24" cy="11" r="6"/><path fill="#607d8b" d="M36 26.1S32.7 19 24 19s-12 7.1-12 7.1V30h24V26.1z"/><polygon fill="#b0bec5" points="41,25 7,25 6,29 11,32 9,29 39,29 37,32 42,29"/><polygon fill="#78909c" points="9,29 39,29 35,41 13,41"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C58_KPGP.svg b/share/icons/database/C58_KPGP.svg
new file mode 100644
index 000000000..aaa0fef8f
--- /dev/null
+++ b/share/icons/database/C58_KPGP.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><circle fill="#ffb74d" cx="24" cy="11" r="6"/><path fill="#607d8b" d="M36 26.1S32.7 19 24 19s-12 7.1-12 7.1V30h24V26.1z"/><polygon fill="#b0bec5" points="41,25 7,25 6,29 11,32 9,29 39,29 37,32 42,29"/><polygon fill="#78909c" points="9,29 39,29 35,41 13,41"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C59_Package_Development.png b/share/icons/database/C59_Package_Development.png
deleted file mode 100644
index b740c987b..000000000
--- a/share/icons/database/C59_Package_Development.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C59_Package_Development.svg b/share/icons/database/C59_Package_Development.svg
new file mode 100644
index 000000000..f989becc3
--- /dev/null
+++ b/share/icons/database/C59_Package_Development.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(2,0,0,2,0,-2056.8)"><g><g transform="matrix(1,0,0,1,-1,0)"><path d="M6.094 1029.5v1L10 1034.4l-1 3-3 1L2.094 1034.5C2.039 1034.8 2 1035 2 1035.4 2 1035.4 1.996 1035.5 2 1035.6 1.996 1035.7 2 1035.8 2 1035.9c0 3 2.462 5.5 5.5 5.5C7.959 1041.4 8.387 1041.3 8.813 1041.2L10.969 1043.3 15 1047.4l3 3C18.507 1050.9 19.214 1051.2 20 1051.2 21.541 1051.2 22.781 1050 22.781 1048.4 22.781 1047.6 22.487 1046.9 22 1046.4L21.969 1046.3 19 1043.4 14.969 1039.3 12.812 1037.2C12.918 1036.7 13 1036.3 13 1035.9 13 1032.8 10.538 1030.4 7.5 1030.4H7.094V1029.5h-1zM20 1046.9C20.828 1046.9 21.5 1047.5 21.5 1048.4 21.5 1049.2 20.828 1049.9 20 1049.9S18.5 1049.2 18.5 1048.4C18.5 1047.5 19.172 1046.9 20 1046.9z" style="fill:#7f8c8d;fill-rule:nonzero"/><path d="M7 1029.4c-.313.0-.609.0-.906.0999999999999091L10 1033.4l-1 3-3 1L2.094 1033.5C2.039 1033.8 2 1034 2 1034.4 2 1034.4 1.996 1034.5 2 1034.6 1.996 1034.7 2 1034.8 2 1034.9c0 3 2.462 5.5 5.5 5.5C7.959 1040.4 8.387 1040.3 8.813 1040.2L10.969 1042.3 15 1046.4l3 3C18.507 1049.9 19.214 1050.2 20 1050.2 21.541 1050.2 22.781 1049 22.781 1047.4 22.781 1046.6 22.487 1045.9 22 1045.4L21.969 1045.3 19 1042.4 14.969 1038.3 12.812 1036.2C12.918 1035.7 13 1035.3 13 1034.9 13 1031.8 10.538 1029.4 7.5 1029.4H7zm13 16.5C20.828 1045.9 21.5 1046.5 21.5 1047.4 21.5 1048.2 20.828 1048.9 20 1048.9S18.5 1048.2 18.5 1047.4C18.5 1046.5 19.172 1045.9 20 1045.9z" style="fill:#95a5a6;fill-rule:nonzero"/></g><path d="M11 1038.4 9.031 1040.3 9 1040.4C9.007 1040.4 8.994 1040.4 9 1040.4 8.999 1040.4 8.997 1040.4 9 1040.5 9.077 1040.7 9.063 1041 9 1041.4L9.969 1042.3 12 1044.4C12.365 1044.3 12.719 1044.3 13 1044.4l2-2-1.5-1.5 1.5-1.5-1-1-1.5 1.5-1.5-1.5z" style="fill:#7f8c8d;fill-rule:nonzero"/><path d="M11.5 1039.9l1 1 9-9-1-1-9 9z" style="fill:#bdc3c7;fill-rule:nonzero"/><path d="M21 1031.4l-9 9 .5.5 9-9-.5-.5z" style="fill:#95a5a6;fill-rule:nonzero"/><path d="M22 1029.4l-2.5 1.5 2 2 1.5-2.5-1-1z" style="fill:#95a5a6;fill-rule:nonzero"/><g><path d="M11 1037.4l-2 2C9.337 1040.2 8.584 1041.8 8 1042.4 7.416 1042.9 5.884 1043.7 5 1043.4l-4 4 4 4 4-4c-.337-.900000000000091.416-2.5 1-3C10.584 1043.8 12.116 1043 13 1043.4l2-2-4-4z" style="fill:#f39c12;fill-rule:nonzero"/><path d="M11 1037.4l-2 2C9.337 1040.2 8.584 1041.8 8 1042.4 7.416 1042.9 5.884 1043.7 5 1043.4l-4 4 2 2 10-10-2-2z" style="fill:#f1c40f;fill-rule:nonzero"/><path d="M9.031 1039.3 9 1039.4C9.011 1039.4 8.991 1039.4 9 1039.5 9.01 1039.4 9.023 1039.4 9.031 1039.3zM14.5 1040.9l-1.5 1.5C12.116 1042 10.584 1042.8 10 1043.4 9.435 1043.9 8.742 1045.4 9 1046.3 9.176 1045.5 9.62 1044.7 10 1044.4 10.584 1043.8 12.116 1043 13 1043.4l2-2-.5-.5zm-5.531 5.5-3.969 4-3.5-3.5-.5.5 4 4 4-4C8.895 1047.1 8.9 1046.7 8.969 1046.4z" style="fill:#e67e22;fill-rule:nonzero"/></g></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C60_KFM_Home.png b/share/icons/database/C60_KFM_Home.png
deleted file mode 100644
index 8076b8e24..000000000
--- a/share/icons/database/C60_KFM_Home.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C60_KFM_Home.svg b/share/icons/database/C60_KFM_Home.svg
new file mode 100644
index 000000000..7a7bb80c5
--- /dev/null
+++ b/share/icons/database/C60_KFM_Home.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#e8eaf6" points="42,39 6,39 6,23 24,6 42,23"/><g fill="#c5cae9"><polygon points="39,21 34,16 34,9 39,9"/><rect x="6" y="39" width="36" height="5"/></g><polygon fill="#b71c1c" points="24,4.3 4,22.9 6,25.1 24,8.4 42,25.1 44,22.9"/><rect x="18" y="28" fill="#d84315" width="12" height="16"/><rect x="21" y="17" fill="#01579b" width="6" height="6"/><path fill="#ff8a65" d="M27.5 35.5c-.3.0-.5.2-.5.5v2c0 .3.2.5.5.5S28 38.3 28 38v-2C28 35.7 27.8 35.5 27.5 35.5z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C61_Services.png b/share/icons/database/C61_Services.png
deleted file mode 100644
index 66478f4ad..000000000
--- a/share/icons/database/C61_Services.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C61_Services.svg b/share/icons/database/C61_Services.svg
new file mode 100644
index 000000000..3681a83eb
--- /dev/null
+++ b/share/icons/database/C61_Services.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(1.02812,0,0,1.02812,-5.655,-5.49468)"><path d="M28.844 10.213l5.042 13.485 14.384.628-11.267 8.963L40.85 47.163 28.844 39.217 16.838 47.163l3.847-13.874L9.418 24.326l14.383-.628 5.043-13.485z" style="fill:#f8c400"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C62_Tux.png b/share/icons/database/C62_Tux.png
deleted file mode 100644
index c22c15e2c..000000000
--- a/share/icons/database/C62_Tux.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C62_Tux.svg b/share/icons/database/C62_Tux.svg
new file mode 100644
index 000000000..f2e641f31
--- /dev/null
+++ b/share/icons/database/C62_Tux.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 2 48 48" enable-background="new 0 2 48 48"><polygon fill="#eceff1" points="20.1,18.2 20.2,20.5 18.6,23.5 16.1,28.4 15.6,32.5 17.4,38.3 21.5,40.6 27.7,40.6 33.5,36.2 36.1,29.3 30.1,22 28.4,17.9"/><path fill="#263238" d="M34.3 23.9c-1.6-2.3-2.9-3.7-3.6-6.6-.7-2.9.2-2.1-.4-4.6-.3-1.3-.8-2.2-1.3-2.9-.6-.7-1.3-1.1-1.7-1.2-.9-.5-3-1.3-5.6.1-2.7 1.4-2.4 4.4-1.9 10.5.0.4-.1.9-.3 1.3-.4.9-1.1 1.7-1.7 2.4-.7 1-1.4 2-1.9 3.1-1.2 2.3-2.3 5.2-2 6.3.5-.1 6.8 9.5 6.8 9.7.4-.1 2.1-.1 3.6-.1 2.1-.1 3.3-.2 5 .2.0-.3-.1-.6-.1-.9.0-.6.1-1.1.2-1.8.1-.5.2-1 .3-1.6-1 .9-2.8 1.9-4.5 2.2-1.5.3-4-.2-5.2-1.7.1.0.3.0.4-.1.3-.1.6-.2.7-.4.3-.5.1-1-.1-1.3-.2-.3-1.7-1.4-2.4-2s-1.1-.9-1.5-1.3c0 0-.6-.6-.8-.8-.2-.2-.3-.4-.4-.5-.2-.5-.3-1.1-.2-1.9.1-1.1.5-2 1-3 .2-.4.7-1.2.7-1.2s-1.7 4.2-.8 5.5c0 0 .1-1.3.5-2.6.3-.9.8-2.2 1.4-2.9s2.1-3.3 2.2-4.9c0-.7.1-1.4.1-1.9-.4-.4 6.6-1.4 7-.3.1.4 1.5 4 2.3 5.9.4.9.9 1.7 1.2 2.7.3 1.1.5 2.6.5 4.1.0.3.0.8-.1 1.3.2.0 4.1-4.2-.5-7.7.0.0 2.8 1.3 2.9 3.9.1 2.1-.8 3.8-1 4.1.1.0 2.1.9 2.2.9.4.0 1.2-.3 1.2-.3.1-.3.4-1.1.4-1.4C37.6 29.9 35.9 26.2 34.3 23.9z"/><g><ellipse fill="#eceff1" cx="21.6" cy="15.3" rx="1.3" ry="2"/><ellipse fill="#eceff1" cx="26.1" cy="15.2" rx="1.7" ry="2.3"/></g><g><ellipse transform="matrix(-0.1254 -0.9921 0.9921 -0.1254 8.9754 38.9969)" fill="#212121" cx="21.7" cy="15.5" rx="1.2" ry=".7"/><ellipse fill="#212121" cx="26" cy="15.6" rx="1" ry="1.3"/></g><g><path fill="#ffc107" d="M39.3 37.6c-.4-.2-1.1-.5-1.7-1.4-.3-.5-.2-1.9-.7-2.5-.3-.4-.7-.2-.8-.2-.9.2-3 1.6-4.4.0-.2-.2-.5-.5-1-.5s-.7.2-.9.6-.2.7-.2 1.7c0 .8.0 1.7-.1 2.4-.2 1.7-.5 2.7-.5 3.7.0 1.1.3 1.8.7 2.1.3.3.8.5 1.9.5 1.1.0 1.8-.4 2.5-1.1.5-.5.9-.7 2.3-1.7 1.1-.7 2.8-1.6 3.1-1.9.2-.2.5-.3.5-.9C40 37.9 39.6 37.7 39.3 37.6z"/><path fill="#ffc107" d="M19.2 37.9c-1-1.6-1.1-1.9-1.8-2.9-.6-1-1.9-2.9-2.7-2.9-.6.0-.9.3-1.3.7-.4.4-.8 1.3-1.5 1.8-.6.5-2.3.4-2.7 1-.4.6.4 1.5.4 3 0 .6-.5 1-.6 1.4-.1.5-.2.8.0 1.2.4.6.9.8 4.3 1.5 1.8.4 3.5 1.4 4.6 1.5 1.1.1 3 0 3-2.7C21 39.9 20.1 39.5 19.2 37.9z"/><path fill="#ffc107" d="M21.1 19.8C20.5 19.4 20 19 20 18.4s.4-.8 1-1.3c.1-.1 1.2-1.1 2.3-1.1s2.4.7 2.9.9c.9.2 1.8.4 1.7 1.1-.1 1-.2 1.2-1.2 1.7-.7.2-2 1.3-2.9 1.3-.4.0-1 0-1.4-.1C22.1 20.8 21.6 20.3 21.1 19.8z"/></g><g><path fill="#634703" d="M20.9 19c.2.2.5.4.8.5.2.1.5.2.5.2.4.0.7.0.9.0.5.0 1.2-.2 1.9-.6.7-.3.8-.5 1.3-.7.5-.3 1-.6.8-.7-.2-.1-.4.0-1.1.4-.6.4-1.1.6-1.7.9-.3.1-.7.3-1 .3s-.6.0-.9.0c-.3.0-.5-.1-.8-.2-.2-.1-.3-.2-.4-.2-.2-.1-.6-.5-.8-.6.0.0-.2.0-.1.1C20.6 18.7 20.7 18.8 20.9 19z"/><path fill="#634703" d="M23.9 16.8c.1.2.3.2.4.3.1.1.2.1.2.1.1-.1.0-.3-.1-.3C24.4 16.7 23.9 16.7 23.9 16.8z"/><path fill="#634703" d="M22.3 17c0 .1.2.2.2.1.1-.1.2-.2.3-.2.2-.1.1-.2-.2-.2C22.4 16.8 22.4 16.9 22.3 17z"/></g><path fill="#455a64" d="M32 34.7c0 .1.0.2.0.3.2.4.7.5 1.1.5.6.0 1.2-.4 1.5-.8.0-.1.1-.2.2-.3.2-.3.3-.5.4-.6.0.0-.1-.1-.1-.2-.1-.2-.4-.4-.8-.5-.3-.1-.8-.2-1-.2-.9-.1-1.4.2-1.7.5.0.0.1.0.1.1.2.2.3.4.3.7C32.1 34.4 32 34.5 32 34.7z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C63_Feather.png b/share/icons/database/C63_Feather.png
deleted file mode 100644
index 307deac8a..000000000
--- a/share/icons/database/C63_Feather.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C63_Feather.svg b/share/icons/database/C63_Feather.svg
new file mode 100644
index 000000000..c612ffb14
--- /dev/null
+++ b/share/icons/database/C63_Feather.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><g><path fill="#7cb342" d="M12 29.001c0 1.104-.896 2-2 2s-2-.896-2-2v-9c0-1.104.896-2 2-2s2 .896 2 2v9z"/><path fill="#7cb342" d="M40 29.001c0 1.104-.896 2-2 2s-2-.896-2-2v-9c0-1.104.896-2 2-2s2 .896 2 2v9z"/><path fill="#7cb342" d="M22 40c0 1.104-.896 2-2 2s-2-.896-2-2v-9c0-1.104.896-2 2-2s2 .896 2 2v9z"/><path fill="#7cb342" d="M30 40c0 1.104-.896 2-2 2s-2-.896-2-2v-9c0-1.104.896-2 2-2s2 .896 2 2v9z"/><path fill="#7cb342" d="M14 18.001V33c0 1.104.896 2 2 2h16c1.104.0 2-.896 2-2V18.001H14z"/><path fill="#7cb342" d="M24 8c-6 0-9.655 3.645-10 8h20C33.654 11.645 30 8 24 8zm-4 5.598c-.552.0-1-.448-1-1s.448-1 1-1 1 .448 1 1-.448 1-1 1zm8 0c-.553.0-1-.448-1-1s.447-1 1-1 1 .448 1 1-.446999999999999 1-1 1z"/><line fill="none" stroke="#7cb342" stroke-width="2" stroke-linecap="round" x1="30" y1="7" x2="28.334" y2="9.499"/><line fill="none" stroke="#7cb342" stroke-width="2" stroke-linecap="round" x1="18" y1="7" x2="19.333" y2="9.082"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C64_Apple.png b/share/icons/database/C64_Apple.png
deleted file mode 100644
index d799fec0a..000000000
--- a/share/icons/database/C64_Apple.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C64_Apple.svg b/share/icons/database/C64_Apple.svg
new file mode 100644
index 000000000..efca9f4fd
--- /dev/null
+++ b/share/icons/database/C64_Apple.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(1.79561,0,0,1.79561,2.43561,2.30747)"><path d="M21.086 8.255 20.399 8.741C19.912 9.171 19.499 9.681 19.169 10.246 18.739 11.016 18.519 11.886 18.525 12.766 18.54 13.849 18.815 14.801 19.365 15.626c.387.6.904 1.114 1.534 1.536C21.209 17.372 21.481 17.517 21.739 17.612 21.619 17.987 21.487 18.352 21.334 18.712 20.987 19.519 20.574 20.292 20.084 21.022 19.652 21.652 19.312 22.122 19.054 22.432 18.652 22.912 18.264 23.272 17.874 23.529c-.43.285-.934999999999999.436-1.452.436C16.072 23.98 15.722 23.935 15.388 23.838 15.098 23.743 14.812 23.636 14.532 23.515 14.239 23.381 13.936 23.267 13.627 23.175 13.247 23.075 12.857 23.027 12.463 23.028 12.063 23.028 11.673 23.078 11.303 23.173 10.993 23.261 10.693 23.369 10.396 23.498 9.976 23.673 9.701 23.788 9.541 23.838 9.217 23.934 8.885 23.992 8.551 24.013 8.031 24.013 7.547 23.863 7.065 23.563L7.078 23.55C6.605 23.234 6.185 22.847 5.834 22.4 5.451 21.937 5.096 21.45 4.77 20.946c-.766-1.12-1.365-2.345-1.78-3.636-.41-1.23-.647-2.418-.71-3.581C2.987 13.101 3.846 12.263 4.738 12.081 6.29 11.764 7.893 12.304 9.444 12.376 10.327 12.417 11.084 12.291 11.938 12.081 12.518 11.938 13.224 11.932 13.742 11.629 14.212 11.355 16.734 10.287 17.473 9.876 18.677 9.204 19.738 8.297 21.086 8.255z" style="fill:#4b98d1"/></g><g transform="matrix(1.79561,0,0,1.79561,2.46527,2.44192)"><path d="M2.277 13.661 2.247 12.963c0-1.57.34-2.94 1.002-4.09.49-.9 1.22-1.653 2.1-2.182C6.199 6.161 7.189 5.871 8.189 5.851c.35.0.73.0499999999999998 1.13.15C9.609 6.081 9.959 6.211 10.389 6.371 10.939 6.581 11.239 6.711 11.339 6.741c.32.12.59.17.799999999999999.17C12.299 6.911 12.529 6.861 12.784 6.781 12.929 6.731 13.204 6.641 13.594 6.471 13.98 6.331 14.286 6.211 14.529 6.121 14.899 6.011 15.257 5.911 15.579 5.861 15.969 5.801 16.356 5.781 16.727 5.811 17.437 5.861 18.087 6.011 18.667 6.231c1.016.408 1.79 1.045 2.403 1.95C20.574 8.585 19.562 9.507 19.562 9.507s-2.296 2.773-3.928 3.228C13.885 13.223 10.839 12.556 9.072 12.434 7.723 12.341 6.168 11.802 5.036 12.006c-1.055.19-2.052 1.032-2.759 1.655z" style="fill:#68b7f0"/></g><g transform="matrix(1.79561,0,0,1.79561,2.46527,2.44192)"><path d="M13.932 5.09c-.68.34-1.326.484-1.973.436C11.859 4.88 11.959 4.216 12.229 3.489c.24-.62.560000000000001-1.18 1-1.68C13.689 1.289 14.239.859 14.859.549c.66-.34 1.29-.52 1.89-.55.0800000000000019.68.0 1.35-.25 2.07C16.271 2.709 15.931 3.299 15.499 3.829 15.064 4.349 14.524 4.779 13.913 5.089L13.932 5.09z" style="fill:#67b7f0"/></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C65_W.png b/share/icons/database/C65_W.png
deleted file mode 100644
index d3315b36c..000000000
--- a/share/icons/database/C65_W.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C65_W.svg b/share/icons/database/C65_W.svg
new file mode 100644
index 000000000..4f598e9ea
--- /dev/null
+++ b/share/icons/database/C65_W.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#cfd8dc" d="M6 10c0-2.209 1.791-4 4-4h28c2.209.0 4 1.791 4 4v28c0 2.209-1.791 4-4 4H10c-2.209.0-4-1.791-4-4V10z"/><path fill="#37474f" d="M39 17.271c0 .191-.148.349-.334.349h-1.799l-8.164 18.179c-.052.12-.17.2-.297.202h-.004c-.127.0-.242-.074-.298-.193l-3.874-8.039-4.18 8.049c-.06.116-.167.181-.303.184-.125-.004-.239-.082-.292-.199l-8.252-18.182h-1.87C9.149 17.619 9 17.462 9 17.271V16.35C9 16.155 9.149 16 9.333 16h6.657c.184.0.333.155.333.35v.921c0 .191-.149.349-.333.349h-1.433l5.696 13.748 2.964-5.793-3.757-7.953h-.904c-.184.0-.333-.157-.333-.35V16.35c0-.191.149-.348.333-.348h4.924c.184.0.333.156.333.348v.922c0 .192-.149.35-.333.35h-.867l2.162 4.948 2.572-4.948H25.77c-.187.0-.334-.157-.334-.35V16.35c0-.191.147-.348.334-.348h4.784c.187.0.333.156.333.348v.922c0 .192-.146.35-.333.35h-1.05l-3.757 7.141 3.063 6.584 5.905-13.725h-1.872c-.184.0-.334-.157-.334-.35V16.35c0-.191.15-.348.334-.348h5.822c.186.0.334.156.334.348V17.271z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C66_Money.png b/share/icons/database/C66_Money.png
deleted file mode 100644
index 619cea4b2..000000000
--- a/share/icons/database/C66_Money.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C66_Money.svg b/share/icons/database/C66_Money.svg
new file mode 100644
index 000000000..3fa77413b
--- /dev/null
+++ b/share/icons/database/C66_Money.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g transform="matrix(1.83333,0,0,1.83333,2,-1884.29)"><g transform="matrix(1.02273,0,0,0.886365,-0.272728,120.043)"><rect x="0" y="1031.4" width="24" height="14" style="fill:#16a085"/><rect x="0" y="1032.4" width="24" height="14" style="fill:#1abc9c"/><path d="M5 1033.4C5 1035.6 3.209 1037.4 1 1037.4V1041.3C3.209 1041.3 5 1043.1 5 1045.4H19V1045.3c0-2.20000000000005 1.791-4 4-4V1037.4c-2.209.0-4-1.80000000000018-4-4H5z" style="fill:#ecf0f1;fill-rule:nonzero"/><g transform="matrix(1,0,0,1,0,1028.4)"><path d="M16 11c0 2.761-1.791 5-4 5s-4-2.239-4-5 1.791-5 4-5 4 2.239 4 5z" style="fill:#1abc9c;fill-rule:nonzero"/></g><g transform="matrix(8.00001,0,0,9.23078,9.54947,1042.51)"><path d="M.392-.136c0 .019.001.033.003.042C.397-.084.401-.076.406-.07.411-.064.419-.059.429-.056c.01.004.023.006.038.008.016.002.036.003.061.004V0H.106V-.044C.143-.046.168-.048.184-.051.199-.054.211-.058.219-.063.227-.069.233-.077.237-.087.241-.097.243-.113.243-.136V-.489C.243-.503.24-.512.235-.518.23-.524.223-.527.214-.527.206-.527.195-.523.18-.516.165-.508.141-.493.107-.47L.077-.521.332-.674H.395C.393-.643.392-.6.392-.544v.408z" style="fill:#fff;fill-rule:nonzero"/></g></g><g transform="matrix(1.9176,0,0,1.1179,17.9635,-117.595)"><g transform="matrix(1,0,0,1,-18.773,13.418)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g><g><g transform="matrix(1,0,0,1,-18.773,11.629)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g><g transform="matrix(1,0,0,1,-18.773,9.8401)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g><g transform="matrix(1,0,0,1,-18.773,8.0509)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g><g transform="matrix(1,0,0,1,-15.123,13.418)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g><g transform="matrix(1,0,0,1,-14.08,12.524)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g><g transform="matrix(1,0,0,1,-18.773,6.2618)"><g transform="matrix(0.52148,0,0,0.89455,-9.6523,1024.7)"><path d="M40 5c-.875.0-1.642.202-2.188.5H37v1C37 7.329 38.343 8 40 8s3-.671 3-1.5v-1H42.188C41.642 5.202 40.875 5 40 5z" style="fill:#f39c12;fill-rule:nonzero"/></g><g transform="matrix(0.52148,0,0,0.89455,-9.1309,1022.9)"><path d="M42 7.5C42 8.328 40.657 9 39 9S36 8.328 36 7.5C36 6.672 37.343 6 39 6s3 .672 3 1.5z" style="fill:#f1c40f;fill-rule:nonzero"/></g></g></g></g></g></svg> \ No newline at end of file
diff --git a/share/icons/database/C67_Certificate.png b/share/icons/database/C67_Certificate.png
deleted file mode 100644
index ba7a76799..000000000
--- a/share/icons/database/C67_Certificate.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C67_Certificate.svg b/share/icons/database/C67_Certificate.svg
new file mode 100644
index 000000000..51087b4d5
--- /dev/null
+++ b/share/icons/database/C67_Certificate.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><rect x="4" y="9" fill="#e8eaf6" width="40" height="30"/><g fill="#5c6bc0"><polygon points="30,34 32.8,34 27.8,29 25,31.8 30,36.8"/><polygon points="18,34 15.2,34 20.2,29 23,31.8 18,36.8"/></g><rect x="11" y="15" fill="#9fa8da" width="26" height="4"/><path fill="#9fa8da" d="M24 23c-2.8.0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5-2.2-5-5-5zm0 8c-1.7.0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"/><path fill="#9fa8da" d="M3 8v32h42V8H3zM43 35c-1.7.0-3 1.3-3 3H8c0-1.7-1.3-3-3-3V13c1.7.0 3-1.3 3-3h32c0 1.7 1.3 3 3 3V35z"/></svg> \ No newline at end of file
diff --git a/share/icons/database/C68_BlackBerry.png b/share/icons/database/C68_BlackBerry.png
deleted file mode 100644
index 9f7e4db39..000000000
--- a/share/icons/database/C68_BlackBerry.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/database/C68_BlackBerry.svg b/share/icons/database/C68_BlackBerry.svg
new file mode 100644
index 000000000..6c0b2b43f
--- /dev/null
+++ b/share/icons/database/C68_BlackBerry.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><path fill="#37474f" d="M4 39V7c0-2.2 1.8-4 4-4h22c2.2.0 4 1.8 4 4v32c0 2.2-1.8 4-4 4H8c-2.2.0-4-1.8-4-4z"/><path fill="#bbdefb" d="M30 6H8c-.6.0-1 .4-1 1v29c0 .6.4 1 1 1h22c.6.0 1-.4 1-1V7C31 6.4 30.6 6 30 6z"/><rect x="15" y="39" fill="#78909c" width="6" height="2"/><path fill="#e38939" d="M24 41V17c0-2.2 1.8-4 4-4h12c2.2.0 4 1.8 4 4v24c0 2.2-1.8 4-4 4H28c-2.2.0-4-1.8-4-4z"/><path fill="#fff3e0" d="M40 16H28c-.6.0-1 .4-1 1v22c0 .6.4 1 1 1h12c.6.0 1-.4 1-1V17C41 16.4 40.6 16 40 16z"/><circle fill="#a6642a" cx="34" cy="42.5" r="1.5"/></svg> \ No newline at end of file
diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc
new file mode 100644
index 000000000..cb11f9068
--- /dev/null
+++ b/share/icons/icons.qrc
@@ -0,0 +1,170 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+ <qresource prefix="/icons">
+ <file>application/index.theme</file>
+
+ <file>application/256x256/apps/keepassxc.png</file>
+
+ <file>application/scalable/actions/application-exit.svg</file>
+ <file>application/scalable/actions/auto-type.svg</file>
+ <file>application/scalable/actions/bugreport.svg</file>
+ <file>application/scalable/actions/chronometer.svg</file>
+ <file>application/scalable/actions/clipboard-text.svg</file>
+ <file>application/scalable/actions/configure.svg</file>
+ <file>application/scalable/actions/database-change-key.svg</file>
+ <file>application/scalable/actions/database-lock.svg</file>
+ <file>application/scalable/actions/database-merge.svg</file>
+ <file>application/scalable/actions/dialog-close.svg</file>
+ <file>application/scalable/actions/dialog-ok.svg</file>
+ <file>application/scalable/actions/document-close.svg</file>
+ <file>application/scalable/actions/document-edit.svg</file>
+ <file>application/scalable/actions/document-export.svg</file>
+ <file>application/scalable/actions/document-import.svg</file>
+ <file>application/scalable/actions/document-new.svg</file>
+ <file>application/scalable/actions/document-open.svg</file>
+ <file>application/scalable/actions/document-open-recent.svg</file>
+ <file>application/scalable/actions/document-properties.svg</file>
+ <file>application/scalable/actions/document-save.svg</file>
+ <file>application/scalable/actions/document-save-as.svg</file>
+ <file>application/scalable/actions/document-save-copy.svg</file>
+ <file>application/scalable/actions/donate.svg</file>
+ <file>application/scalable/actions/edit-clear-locationbar-ltr.svg</file>
+ <file>application/scalable/actions/edit-clear-locationbar-rtl.svg</file>
+ <file>application/scalable/actions/entry-clone.svg</file>
+ <file>application/scalable/actions/entry-delete.svg</file>
+ <file>application/scalable/actions/entry-edit.svg</file>
+ <file>application/scalable/actions/entry-new.svg</file>
+ <file>application/scalable/actions/favicon-download.svg</file>
+ <file>application/scalable/actions/getting-started.svg</file>
+ <file>application/scalable/actions/group-delete.svg</file>
+ <file>application/scalable/actions/group-edit.svg</file>
+ <file>application/scalable/actions/group-empty-trash.svg</file>
+ <file>application/scalable/actions/group-new.svg</file>
+ <file>application/scalable/actions/health.svg</file>
+ <file>application/scalable/actions/help-about.svg</file>
+ <file>application/scalable/actions/hibp.svg</file>
+ <file>application/scalable/actions/key-enter.svg</file>
+ <file>application/scalable/actions/keyboard-shortcuts.svg</file>
+ <file>application/scalable/actions/message-close.svg</file>
+ <file>application/scalable/actions/move-down.svg</file>
+ <file>application/scalable/actions/move-up.svg</file>
+ <file>application/scalable/actions/object-locked.svg</file>
+ <file>application/scalable/actions/object-unlocked.svg</file>
+ <file>application/scalable/actions/paperclip.svg</file>
+ <file>application/scalable/actions/password-copy.svg</file>
+ <file>application/scalable/actions/password-generate.svg</file>
+ <file>application/scalable/actions/password-generator.svg</file>
+ <file>application/scalable/actions/password-show-off.svg</file>
+ <file>application/scalable/actions/password-show-on.svg</file>
+ <file>application/scalable/actions/refresh.svg</file>
+ <file>application/scalable/actions/reports.svg</file>
+ <file>application/scalable/actions/reports-exclude.svg</file>
+ <file>application/scalable/actions/sort-alphabetical-ascending.svg</file>
+ <file>application/scalable/actions/sort-alphabetical-descending.svg</file>
+ <file>application/scalable/actions/statistics.svg</file>
+ <file>application/scalable/actions/system-help.svg</file>
+ <file>application/scalable/actions/system-search.svg</file>
+ <file>application/scalable/actions/system-software-update.svg</file>
+ <file>application/scalable/actions/url-copy.svg</file>
+ <file>application/scalable/actions/user-guide.svg</file>
+ <file>application/scalable/actions/username-copy.svg</file>
+ <file>application/scalable/actions/view-history.svg</file>
+ <file>application/scalable/actions/web.svg</file>
+
+ <file>application/scalable/apps/freedesktop.svg</file>
+ <file>application/scalable/apps/internet-web-browser.svg</file>
+ <file>application/scalable/apps/keepassxc.svg</file>
+ <file>application/scalable/apps/keepassxc-monochrome-dark.svg</file>
+ <file>application/scalable/apps/keepassxc-monochrome-dark-locked.svg</file>
+ <file>application/scalable/apps/keepassxc-monochrome-light.svg</file>
+ <file>application/scalable/apps/keepassxc-monochrome-light-locked.svg</file>
+ <file>application/scalable/apps/keepassxc-locked.svg</file>
+ <file>application/scalable/apps/keepassxc-unlocked.svg</file>
+ <file>application/scalable/apps/preferences-desktop-icons.svg</file>
+ <file>application/scalable/apps/preferences-system-network-sharing.svg</file>
+ <file>application/scalable/apps/utilities-terminal.svg</file>
+
+ <file>application/scalable/categories/preferences-other.svg</file>
+
+ <file>application/scalable/mimetypes/application-x-keepassxc.svg</file>
+
+ <file>application/scalable/status/dialog-error.svg</file>
+ <file>application/scalable/status/dialog-information.svg</file>
+ <file>application/scalable/status/dialog-warning.svg</file>
+ <file>application/scalable/status/security-high.svg</file>
+
+ <file>database/C00_Password.svg</file>
+ <file>database/C01_Package_Network.svg</file>
+ <file>database/C02_MessageBox_Warning.svg</file>
+ <file>database/C03_Server.svg</file>
+ <file>database/C04_Klipper.svg</file>
+ <file>database/C05_Edu_Languages.svg</file>
+ <file>database/C06_KCMDF.svg</file>
+ <file>database/C07_Kate.svg</file>
+ <file>database/C08_Socket.svg</file>
+ <file>database/C09_Identity.svg</file>
+ <file>database/C10_Kontact.svg</file>
+ <file>database/C11_Camera.svg</file>
+ <file>database/C12_IRKickFlash.svg</file>
+ <file>database/C13_KGPG_Key3.svg</file>
+ <file>database/C14_Laptop_Power.svg</file>
+ <file>database/C15_Scanner.svg</file>
+ <file>database/C16_Mozilla_Firebird.svg</file>
+ <file>database/C17_CDROM_Unmount.svg</file>
+ <file>database/C18_Display.svg</file>
+ <file>database/C19_Mail_Generic.svg</file>
+ <file>database/C20_Misc.svg</file>
+ <file>database/C21_KOrganizer.svg</file>
+ <file>database/C22_ASCII.svg</file>
+ <file>database/C23_Icons.svg</file>
+ <file>database/C24_Connect_Established.svg</file>
+ <file>database/C25_Folder_Mail.svg</file>
+ <file>database/C26_FileSave.svg</file>
+ <file>database/C27_NFS_Unmount.svg</file>
+ <file>database/C28_QuickTime.svg</file>
+ <file>database/C29_KGPG_Term.svg</file>
+ <file>database/C30_Konsole.svg</file>
+ <file>database/C31_FilePrint.svg</file>
+ <file>database/C32_FSView.svg</file>
+ <file>database/C33_Run.svg</file>
+ <file>database/C34_Configure.svg</file>
+ <file>database/C35_KRFB.svg</file>
+ <file>database/C36_Ark.svg</file>
+ <file>database/C37_KPercentage.svg</file>
+ <file>database/C38_Samba_Unmount.svg</file>
+ <file>database/C39_History.svg</file>
+ <file>database/C40_Mail_Find.svg</file>
+ <file>database/C41_VectorGfx.svg</file>
+ <file>database/C42_KCMMemory.svg</file>
+ <file>database/C43_EditTrash.svg</file>
+ <file>database/C44_KNotes.svg</file>
+ <file>database/C45_Cancel.svg</file>
+ <file>database/C46_Help.svg</file>
+ <file>database/C47_KPackage.svg</file>
+ <file>database/C48_Folder.svg</file>
+ <file>database/C49_Folder_Blue_Open.svg</file>
+ <file>database/C50_Folder_Tar.svg</file>
+ <file>database/C51_Decrypted.svg</file>
+ <file>database/C52_Encrypted.svg</file>
+ <file>database/C53_Apply.svg</file>
+ <file>database/C54_Signature.svg</file>
+ <file>database/C55_Thumbnail.svg</file>
+ <file>database/C56_KAddressBook.svg</file>
+ <file>database/C57_View_Text.svg</file>
+ <file>database/C58_KGPG.svg</file>
+ <file>database/C59_Package_Development.svg</file>
+ <file>database/C60_KFM_Home.svg</file>
+ <file>database/C61_Services.svg</file>
+ <file>database/C62_Tux.svg</file>
+ <file>database/C63_Feather.svg</file>
+ <file>database/C64_Apple.svg</file>
+ <file>database/C65_W.svg</file>
+ <file>database/C66_Money.svg</file>
+ <file>database/C67_Certificate.svg</file>
+ <file>database/C68_BlackBerry.svg</file>
+
+ <file>badges/0_ShareActive.svg</file>
+ <file>badges/1_ShareInactive.svg</file>
+ <file>badges/2_Expired.svg</file>
+ </qresource>
+</RCC>
diff --git a/share/icons/minify.sh b/share/icons/minify.sh
new file mode 100644
index 000000000..6286031a8
--- /dev/null
+++ b/share/icons/minify.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+NC='\033[0m'
+YELLOW='\033[0;33m'
+
+# Build desktop icon
+echo "Creating desktop icon PNG..."
+if command -v "inkscape" &> /dev/null; then
+ inkscape -z -w 256 -h 256 icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png
+else
+ echo -e "${YELLOW}Could not find inkscape; keepassxc.png not built!${NC}"
+fi
+
+# Minify SVG's
+echo "Minifying SVG's..."
+minify -o icons/badges --match=.svg icons/badges
+minify -o icons/database --match=.svg icons/database
+
+# Crush PNG's
+echo "Crushing PNG's..."
+find "." -iname '*png' -exec pngcrush -ow -brute {} \;
diff --git a/share/icons/svg/application-exit.svg b/share/icons/svg/application-exit.svg
deleted file mode 100644
index 81868b89f..000000000
--- a/share/icons/svg/application-exit.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient2990"><stop stop-color="#ccc" offset="0"/><stop stop-color="#f1f1f1" offset="1"/></linearGradient><linearGradient id="linearGradient6674"><stop stop-color="#bf0000" offset="0"/><stop stop-color="#f11" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient6446"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient9692" cx="42.7" cy="103.6" r="42.56" gradientTransform="matrix(1.189 0 0 1.189 -114.8 -31.38)" gradientUnits="userSpaceOnUse"><stop stop-color="#ff5900" offset="0"/><stop stop-color="#8d0000" offset="1"/></radialGradient><linearGradient id="linearGradient6410" x1="39.74" x2="11.46" y1="113.5" y2="13.01" gradientUnits="userSpaceOnUse"><stop stop-color="#700" offset="0"/><stop stop-color="#c10000" offset="1"/></linearGradient><linearGradient id="linearGradient6452" x1="21.09" x2="15.19" y1="21.1" y2="27.01" gradientTransform="translate(-7.587 -7.381)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient6446"/><filter id="filter6458"><feGaussianBlur stdDeviation="0.28444187"/></filter><linearGradient id="linearGradient6464" x1="21.09" x2="15.13" y1="21.1" y2="27.07" gradientTransform="translate(.4129 .6194)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient6446"/><linearGradient id="linearGradient6470" x1="21.09" x2="13.96" y1="21.1" y2="28.24" gradientTransform="translate(.4129 .6194)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient6446"/><linearGradient id="linearGradient6637" x1="55.33" x2="55.33" y1="112" y2="74.91" gradientUnits="userSpaceOnUse"><stop stop-color="#703700" offset="0"/><stop stop-color="#bf5e00" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient6649" x1="62.04" x2="62.04" y1="15.91" y2="50.73" gradientUnits="userSpaceOnUse"><stop stop-color="#ff6565" offset="0"/><stop stop-color="#ffdfbf" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient6680" x1="19.1" x2="80.05" y1="50.58" y2="66.9" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6674"/><linearGradient id="linearGradient2816" x1="59.23" x2="59.23" y1="-31.71" y2="98.17" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6446"/><linearGradient id="linearGradient3231" x1="59.23" x2="59.23" y1="7.897" y2="46.23" gradientTransform="translate(.2624 1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6446"/><linearGradient id="linearGradient3233" x1="115.8" x2="31.38" y1="71.08" y2="21.03" gradientTransform="translate(.2332 1.915)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6446"/><linearGradient id="linearGradient3243" x1="-60.95" x2="-59.42" y1="105.8" y2="45.63" gradientUnits="userSpaceOnUse"><stop stop-color="#ffeb8b" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3281"><feGaussianBlur stdDeviation="0.32872878"/></filter><linearGradient id="linearGradient3289" x1="60.4" x2="60.4" y1="64.08" y2="-20.96" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6674"/><filter id="filter3319"><feGaussianBlur stdDeviation="1.6179775"/></filter><filter id="filter3033"><feGaussianBlur stdDeviation="0.33295155"/></filter><filter id="filter3045"><feGaussianBlur stdDeviation="0.46608189"/></filter><clipPath id="clipPath3049"><path d="m-213.7 29.55c-1.285-1.285-3.356-1.285-4.64 0l-23.14 23.14-23.14-23.14c-1.285-1.285-3.356-1.285-4.64 0l-6.673 6.673c-1.285 1.285-1.285 3.356 0 4.64l23.14 23.14-23.14 23.14c-1.285 1.285-1.285 3.356 0 4.64l6.673 6.673c1.285 1.285 3.356 1.285 4.64 0l23.14-23.14 23.14 23.14c1.285 1.285 3.356 1.285 4.64 0l6.673-6.673c1.285-1.285 1.285-3.356 0-4.64l-23.14-23.14 23.14-23.14c1.285-1.285 1.285-3.356 0-4.64l-6.673-6.673z" fill="url(#radialGradient3053)"/></clipPath><radialGradient id="radialGradient3053" cx="-20" cy="64" r="35.41" fx="-9.132" fy="76.91" gradientTransform="translate(-221.4 -2.585e-6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2990"/><clipPath id="clipPath3055"><path d="m-121.3 29.55c-1.285-1.285-3.356-1.285-4.64 0l-23.14 23.14-23.14-23.14c-1.285-1.285-3.356-1.285-4.64 0l-6.673 6.673c-1.285 1.285-1.285 3.356 0 4.64l23.14 23.14-23.14 23.14c-1.285 1.285-1.285 3.356 0 4.64l6.673 6.673c1.285 1.285 3.356 1.285 4.64 0l23.14-23.14 23.14 23.14c1.285 1.285 3.356 1.285 4.64 0l6.673-6.673c1.285-1.285 1.285-3.356 0-4.64l-23.14-23.14 23.14-23.14c1.285-1.285 1.285-3.356 0-4.64l-6.673-6.673z" fill="url(#radialGradient3059)"/></clipPath><radialGradient id="radialGradient3059" cx="-20" cy="64" r="35.41" fx="-9.132" fy="76.91" gradientTransform="translate(-129.1 -2.585e-6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2990"/><radialGradient id="radialGradient3066" cx="-20" cy="64" r="35.41" fx="-9.132" fy="76.91" gradientTransform="translate(-40.75 -2.585e-6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2990"/><linearGradient id="linearGradient3068" x1="-236" x2="-236" y1="104" y2="176" gradientTransform="translate(0 -86.23)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity=".1564" offset=".5"/><stop stop-opacity=".6873" offset=".6226"/><stop stop-opacity=".3636" offset="1"/></linearGradient></defs><g><path d="m18.08 8h91.83c5.586 0 10.08 4.497 10.08 10.08v91.83c0 5.586-4.497 10.08-10.08 10.08h-91.83c-5.586 0-10.08-4.497-10.08-10.08v-91.83c0-5.586 4.497-10.08 10.08-10.08z" fill="url(#linearGradient3289)" filter="url(#filter3319)"/><path d="m18.08 8h91.83c5.586 0 10.08 4.497 10.08 10.08v91.83c0 5.586-4.497 10.08-10.08 10.08h-91.83c-5.586 0-10.08-4.497-10.08-10.08v-91.83c0-5.586 4.497-10.08 10.08-10.08z" fill="url(#linearGradient6410)"/><path d="m18.08 8h91.83c5.586 0 10.08 4.497 10.08 10.08v91.83c0 5.586-4.497 10.08-10.08 10.08h-91.83c-5.586 0-10.08-4.497-10.08-10.08v-91.83c0-5.586 4.497-10.08 10.08-10.08z" fill="url(#linearGradient6680)" opacity=".0829"/><path transform="scale(-1,1)" d="m-109.4 12.61h89.77c3.879 0 7.001 3.123 7.001 7.001v88.77c0 3.879-3.123 7.001-7.001 7.001h-89.77c-3.879 0-7.001-3.123-7.001-7.001v-88.77c0-3.879 3.123-7.001 7.001-7.001z" fill="url(#radialGradient9692)"/><path d="m17.91 8.299c-4.69 0-9.398 3.568-9.398 9.399l4.267-0.05891c0.4524-2.13 2.852-4.271 4.527-4.603l0.6036-4.736z" fill="url(#linearGradient6452)" filter="url(#filter6458)" opacity=".8876"/><path transform="matrix(-1 0 0 1 135.9 -8)" d="m25.4 16.47c-4.69 0-8.968 3.655-8.968 9.485l4.347-0.3154c0.4524-2.13 2.852-4.271 4.527-4.603l0.09416-4.567z" fill="url(#linearGradient6464)" filter="url(#filter6458)" opacity=".8689"/></g><path d="m8 105.9v4.031c0 5.586 4.507 10.09 10.09 10.09h91.81c5.586 0 10.09-4.507 10.09-10.09v-4.031c0 5.586-4.507 10.09-10.09 10.09h-91.81c-5.586 0-10.09-4.507-10.09-10.09z" fill="url(#linearGradient6637)" opacity=".0829"/><g><path transform="matrix(1 0 0 -1 -8 136.1)" d="m26.25 16.98c-4.69 0-9.477 3.655-9.477 9.485l4.008-0.8249c0.4524-2.13 2.852-4.271 4.527-4.603l0.9432-4.057z" fill="url(#linearGradient6470)" filter="url(#filter6458)" opacity=".3264"/><path transform="matrix(-1 0 0 -1 135.9 136.1)" d="m26.25 16.98c-4.69 0-9.477 3.655-9.477 9.485l4.008-0.8249c0.4524-2.13 2.852-4.271 4.527-4.603l0.9432-4.057z" fill="url(#linearGradient6470)" filter="url(#filter6458)" opacity=".1762"/><path d="m8 22.04v-4.031c0-5.586 4.507-10.09 10.09-10.09h91.81c5.586 0 10.09 4.507 10.09 10.09v4.031c0-5.586-4.507-10.09-10.09-10.09h-91.81c-5.586 0-10.09 4.507-10.09 10.09z" fill="url(#linearGradient6649)" opacity=".3886"/></g><g transform="translate(0,-1)"><path d="m19.44 13.28c-3.99 0-7.188 3.197-7.188 7.188v1c0-3.99 3.197-7.188 7.188-7.188h89.62c3.99 0 7.188 3.197 7.188 7.188v-1c0-3.99-3.197-7.188-7.188-7.188h-89.62z" fill="url(#linearGradient3231)"/><path d="m112.2 14.95c1.595 1.315 2.625 3.287 2.625 5.531v34.5c-0.1934 0.328-0.4367 0.6673-0.7188 1-27.25 10.49-73.31 13.49-101.9 6.625v0.5625c28.98 7.307 75.59 4.378 103.3-6.281 0.282-0.3327 0.5254-0.672 0.7188-1v-34.5c0-2.853-1.641-5.274-4.031-6.438z" fill="url(#linearGradient3233)"/></g><path transform="scale(-1,1)" d="m-109.4 13.61h89.77c3.879 0 7.001 3.123 7.001 7.001v87.77c0 3.879-3.123 7.001-7.001 7.001h-89.77c-3.879 0-7.001-3.123-7.001-7.001v-87.77c0-3.879 3.123-7.001 7.001-7.001z" fill="none" filter="url(#filter3281)" stroke="url(#linearGradient3243)" stroke-linecap="round" stroke-linejoin="round"/><path d="m19.19 12.28c-3.99 0-7.188 3.197-7.188 7.188v41.78c28.98 7.307 75.59 4.378 103.3-6.281 0.282-0.3327 0.5254-0.672 0.7188-1v-34.5c0-3.99-3.197-7.188-7.188-7.188h-89.62z" fill="url(#linearGradient2816)"/><g transform="matrix(1.13 0 0 1.13 132.6 -8.305)"><path d="m-32.98 29.55c-1.285-1.285-3.356-1.285-4.64 0l-23.14 23.14-23.14-23.14c-1.285-1.285-3.356-1.285-4.64 0l-6.673 6.673c-1.285 1.285-1.285 3.356 0 4.64l23.14 23.14-23.14 23.14c-1.285 1.285-1.285 3.356 0 4.64l6.673 6.673c1.285 1.285 3.356 1.285 4.64 0l23.14-23.14 23.14 23.14c1.285 1.285 3.356 1.285 4.64 0l6.673-6.673c1.285-1.285 1.285-3.356 0-4.64l-23.14-23.14 23.14-23.14c1.285-1.285 1.285-3.356 0-4.64l-6.673-6.673z" fill="url(#radialGradient3066)"/><path transform="translate(88.32)" d="m-183.1 39.25c-0.641 1.236-0.445 2.774 0.5938 3.812l21.62 21.66 1.5-1.5-23.12-23.16c-0.2498-0.2498-0.4411-0.5148-0.5938-0.8125zm68.06 0c-0.1522 0.2949-0.3148 0.5648-0.5625 0.8125l-23.16 23.16 1.5 1.5 21.66-21.66c1.041-1.041 1.207-2.576 0.5625-3.812zm-34.03 34.28-23.12 23.12c-1.285 1.285-3.372 1.285-4.656 0l-6.656-6.688c-0.2498-0.2498-0.4411-0.5148-0.5938-0.8125-0.641 1.236-0.445 2.774 0.5938 3.812l6.656 6.688c1.285 1.285 3.372 1.285 4.656 0l23.12-23.12 23.16 23.12c1.285 1.285 3.34 1.285 4.625 0l6.688-6.688c1.041-1.041 1.207-2.576 0.5625-3.812-0.1522 0.2949-0.3148 0.5648-0.5625 0.8125l-6.688 6.688c-1.285 1.285-3.34 1.285-4.625 0l-23.16-23.12z" clip-path="url(#clipPath3055)" fill="#fff" filter="url(#filter3033)"/><path transform="translate(180.7)" d="m-266.9 27.36c-0.8389 0-1.701 0.3264-2.344 0.9688l-6.656 6.688c-1.035 1.035-1.226 2.579-0.5938 3.812 0.1518-0.2926 0.3478-0.5665 0.5938-0.8125l6.656-6.688c1.285-1.285 3.372-1.285 4.656 0l23.12 23.16 23.12-23.16c1.285-1.285 3.372-1.285 4.656 0l6.656 6.688c0.2442 0.2442 0.4424 0.5223 0.5938 0.8125 0.6371-1.235 0.4433-2.775-0.5938-3.812l-6.656-6.688c-1.285-1.285-3.372-1.285-4.656 0l-23.12 23.16-23.12-23.16c-0.6424-0.6424-1.474-0.9688-2.312-0.9688zm13.22 36.54-21.62 21.62c-1.035 1.035-1.226 2.579-0.5938 3.812 0.1518-0.2926 0.3478-0.5665 0.5938-0.8125l23.12-23.12-1.5-1.5zm24.92-0.1-1.5 1.5 23.12 23.12c0.2442 0.2442 0.4424 0.5223 0.5938 0.8125 0.6371-1.235 0.4433-2.775-0.5938-3.812l-21.62-21.62z" clip-path="url(#clipPath3049)" fill="url(#linearGradient3068)" filter="url(#filter3045)"/></g></svg>
diff --git a/share/icons/svg/application-x-keepassxc.svg b/share/icons/svg/application-x-keepassxc.svg
deleted file mode 100644
index 4b33c5a69..000000000
--- a/share/icons/svg/application-x-keepassxc.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient3895-3" x1="82.16" x2="94.22" y1="90.38" y2="102.2" gradientTransform="matrix(1.409 0 0 1.411 -46.6 -46.23)" gradientUnits="userSpaceOnUse"><stop stop-color="#fcfcfc" offset="0"/><stop stop-color="#f8f8f8" offset=".5228"/><stop stop-color="#f0efef" offset=".7234"/><stop stop-color="#e3e1e1" offset=".8902"/><stop stop-color="#cecbcb" offset="1"/></linearGradient><clipPath id="clipPath6093-7"><path d="m17 8 0.7828 110h57.5c1.675 0 3.119 0.1806 4.9-1.6 8.798-8.798 19.76-19.85 27.02-27.18 2.441-2.463 2.801-4.471 2.801-6.724v-74.5z" fill="#fff"/></clipPath><filter id="filter4087" x="-.1647" y="-.2041" width="1.329" height="1.408"><feGaussianBlur stdDeviation="4.2234282"/></filter><filter id="filter3814" x="-.04209" y="-.0353" width="1.084" height="1.071"><feGaussianBlur stdDeviation="1.7948536"/></filter></defs><g transform="translate(5.682)"><path transform="matrix(.9887 0 0 .9576 -.8614 2.941)" d="m13.09 3.5a1.028 1.028 0 0 0-0.125 0.03125c-0.885 0.1873-1.472 0.9079-1.469 1.812v118.3a1.028 1.028 0 0 0 0 0.0313c0.01849 1.03 0.7829 1.794 1.812 1.812a1.028 1.028 0 0 0 0.03125 0h48.81c1.666 0 4.022 0.2368 7.094-1.844a1.028 1.028 0 0 0 0.2812-0.2188c0.0578-0.0515 0.1396-0.1286 0.25-0.2188 0.2207-0.1802 0.5168-0.4174 0.7812-0.625s0.4956-0.3965 0.6562-0.5312c0.04015-0.0337 0.07966-0.051 0.125-0.0937 0.02267-0.0214 0.04798-0.0408 0.09375-0.0937 0.02288-0.0265 0.04727-0.051 0.09375-0.125 0.0081-0.013 0.01807-0.0366 0.03125-0.0625 9.781-9.333 27.44-28.68 38.5-39.88 1.711-1.711 3.781-3.863 3.781-8.5v-67.97a1.028 1.028 0 0 0 0-0.03125c-0.01866-1.03-0.7829-1.794-1.812-1.813a1.028 1.028 0 0 0-0.03125 0h-98.56c-0.03179-0.00301-0.06191 0.00137-0.09375 0-0.08491-0.00365-0.1652-0.00803-0.25 0z" filter="url(#filter3814)"/><path d="m11.61 7.129v115.1h49.49c1.68 0 4.562-0.2359 7.658-3.212 8.898-8.556 31.54-31.23 38.82-38.41 2.448-2.415 3.01-4.385 3.01-6.594l-3e-3 -66.84z" fill="#fff" stroke-width=".9945"/><g transform="matrix(.853 0 0 .853 17.85 15.85)"><circle cx="50" cy="50" r="45.93" fill="#fff" fill-rule="evenodd" opacity=".871" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".7843" stroke-width="5.528"/><circle cx="50" cy="50" r="42.32" fill="none"/><path d="m50 6.324a43.68 43.68 0 0 0-43.68 43.68 43.68 43.68 0 0 0 43.68 43.68 43.68 43.68 0 0 0 43.68-43.68 43.68 43.68 0 0 0-43.68-43.68zm0 6.711c2.264 0.0083 4.523 0.2249 6.748 0.6465 0.1072 0.4837 0.168 0.984 0.168 1.5 0 3.823-3.097 6.918-6.918 6.916-3.821 0.0022-6.916-3.091-6.916-6.914 0-0.5181 0.06204-1.02 0.1699-1.506 2.225-0.4202 4.484-0.6357 6.748-0.6426zm-18.99 5.299c-0.2405 1.219-0.3713 2.474-0.3711 3.764 0 7.72 4.528 14.37 11.06 17.48v35.09l8.299 8.299 8.301-8.301-0.4766-7.35 3.914-3.912-3.914-3.912 5.871-5.867-5.871-5.871 0.4766-8.178c6.538-3.111 11.07-9.759 11.07-17.48 0-1.287-0.1334-2.541-0.373-3.758 11.13 6.668 17.95 18.68 17.97 31.66-5.4e-4 20.41-16.55 36.96-36.96 36.96-20.41-5.52e-4 -36.96-16.55-36.96-36.96 0.01555-12.98 6.837-25 17.97-31.67zm13.46 25.9h2.768v27.67h-2.766l-2e-3 -27.66v-2e-3z" fill="#f9f9f9" fill-rule="evenodd"/><path d="m56.75 13.68c0.1072 0.4837 0.1684 0.9846 0.1684 1.501 0 3.823-3.097 6.918-6.918 6.916-3.821 0.0022-6.916-3.091-6.916-6.914 0-0.5181 0.0626-1.021 0.1705-1.507 2.225-0.4202 4.483-0.635 6.748-0.6419 2.264 0.0083 4.523 0.2246 6.748 0.6461zm-26.11 8.417c0 7.72 4.528 14.37 11.06 17.48v35.09l8.299 8.299 8.301-8.301-0.4757-7.35 3.913-3.913-3.913-3.913 5.87-5.868-5.87-5.87 0.4756-8.179c6.538-3.111 11.07-9.758 11.07-17.48 0-1.287-0.1329-2.542-0.3725-3.759 11.13 6.668 17.95 18.68 17.97 31.66-5.4e-4 20.41-16.55 36.96-36.96 36.96-20.41-5.5e-4 -36.96-16.55-36.96-36.96 0.0155-12.98 6.836-25 17.97-31.67-0.2405 1.219-0.3707 2.476-0.3704 3.765zm13.83 22.13h2.768v27.67h-2.766l-2e-3 -27.66v-2e-3z" fill="#559f2f"/></g><g><path transform="matrix(1.359 0 0 1.362 -42.38 -40.16)" d="m113.9 82.5c0 4.465-7.963 7.458-10.95 7.881-6.395 0.9063-15.3-0.8441-21.09-0.7631-0.081 5.781 3.398 20-0.06716 25.11-1.684 2.482-3.884 8.072-6.794 8.072-2.091 1.534 3.488 11.21 6.735 8.32 9.502-8.461 46-30.2 54.22-39.44 2.04-2.294-17.07-11.97-22.05-9.178z" clip-path="url(#clipPath6093-7)" filter="url(#filter4087)" opacity=".45"/><path d="m110.3 76.36c-3.48 2.947-3.566 2.769-7.024 5.117-7.115 4.832-21.76 3.809-29.81 3.922-0.1128 8.062 0.7202 21.53-4.106 28.65-2.439 3.493-3.765 8.085-7.819 8.085 3.228 0 6.671-1.795 10.56-5.696 12.45-12.48 20.53-20.65 32.62-33 2.673-2.952 4.503-3.874 5.579-7.081z" fill="url(#linearGradient3895-3)"/><path d="m110.6 74.08c-3.528 3.323-3.784 3.755-5.939 5.418-5.257 3.57-10.46 3.79-32.37 3.79 0 19.76-0.4404 27.92-4.259 32.75-2.273 2.875-4.713 5.226-8.422 6.069 5.061 0.3558 5.882-0.784 9.202-4.002 0.4723-0.5418 1.416-1.55 2.157-2.695 3.941-5.817 3.838-17.29 3.838-29.26 8.052-0.113 22.2 1.162 29.32-3.67 0.6482-0.4402 2.732-2.021 3.312-2.589 3.225-3.159 2.899-3.518 3.166-5.804zm-50.99 48.02c-0.2196 0.0485-0.4365 0.0579-0.6528 0.087 0.2186-0.0234 0.4324-0.0468 0.6528-0.087z" fill="#fff"/></g></g></svg>
diff --git a/share/icons/svg/auto-type.png b/share/icons/svg/auto-type.png
deleted file mode 100644
index 5e3c42535..000000000
--- a/share/icons/svg/auto-type.png
+++ /dev/null
Binary files differ
diff --git a/share/icons/svg/configure.svg b/share/icons/svg/configure.svg
deleted file mode 100644
index ebbb7dca1..000000000
--- a/share/icons/svg/configure.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient6184"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient25485"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient13184"><stop stop-opacity=".6667" offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient10539"><stop stop-color="#fff" offset="0"/><stop stop-color="#888a85" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient4174"><stop stop-color="#fff" offset="0"/><stop stop-color="#3e3e3e" stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient9655" cx="154.2" cy="33.31" r="11.55" gradientTransform="matrix(1 0 0 .9319 3.581 -10.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient25485"/><radialGradient id="radialGradient9657" cx="173.4" cy="29.47" r="7.125" gradientTransform="matrix(5.093 .03711 -.03343 4.588 -711.6 -118.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4174"/><radialGradient id="radialGradient9659" cx="150.2" cy="56.32" r="4.696" gradientTransform="matrix(7.9 -.1334 .103 6.099 -1031 -297.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#3e3e3e" stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient10545" cx="222.1" cy="1.235" r="16.39" gradientTransform="matrix(2.378 -.3075 1.04 6.868 -436 108.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient10539"/><radialGradient id="radialGradient12309" cx="94.14" cy="38.93" r="6.873" gradientTransform="matrix(.5812 .005817 -.07456 9.383 36.03 -309.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/><linearGradient id="linearGradient13190" x1="79.74" x2="95" y1="48.54" y2="48.54" gradientTransform="matrix(.7373 -6.658e-7 1.273e-7 1.016 23.72 1.032)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient13184"/><radialGradient id="radialGradient14940" cx="94.14" cy="38.93" r="6.873" gradientTransform="matrix(.566 .004976 -.07261 8.025 38.46 -251.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/><linearGradient id="linearGradient14942" x1="79.74" x2="95" y1="48.54" y2="48.54" gradientTransform="matrix(.718 5.475e-7 -1.861e-8 .8692 26.48 14.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient13184"/><radialGradient id="radialGradient14946" cx="94.14" cy="38.93" r="6.873" gradientTransform="matrix(.6028 .004959 -.07732 7.999 33.71 -255.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/><linearGradient id="linearGradient14948" x1="79.74" x2="95" y1="48.54" y2="48.54" gradientTransform="matrix(.7646 -9.213e-7 -8.915e-8 .8663 20.94 9.725)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient13184"/><radialGradient id="radialGradient15831" cx="77.37" cy="64.8" r="4.142" gradientTransform="matrix(.7188 .05195 .124 10.15 11.77 -600.3)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#555753" stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient19335" cx="64.04" cy="72.25" r="8.072" gradientTransform="matrix(.3541 -4.171 5.033 -1.52 -331.4 448.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient22837" cx="78.34" cy="47.9" r="59.07" gradientTransform="matrix(1.028 -.1271 .1309 .9349 -10.48 16.04)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#888a85" stop-opacity="0" offset="1"/></radialGradient><linearGradient id="linearGradient23728" x1="105.6" x2="120.1" y1="11.27" y2="11.27" gradientTransform="matrix(1.069 -.1322 .1339 .9562 -15.57 15.4)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient25491" cx="302.1" cy="-10.28" r="59.07" gradientTransform="matrix(.2857 -.09694 .3404 .8739 19.96 76.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient25485"/><linearGradient id="linearGradient26375" x1="114.7" x2="141.7" y1="51.13" y2="13.18" gradientTransform="matrix(1.028 -.1271 .1339 .9562 -10.63 14.78)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient27252" cx="302.1" cy="-10.28" r="59.07" gradientTransform="matrix(.2857 -.09694 .3404 .8739 20.21 76.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient25485"/><radialGradient id="radialGradient27256" cx="224.5" cy="-4.226" r="16.39" gradientTransform="matrix(2.378 -.3075 1.04 6.868 -437.1 108.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient10539"/><radialGradient id="radialGradient34276" cx="19.01" cy="99.12" r="4.603" gradientTransform="matrix(-1.033 .07897 -.1161 -1.358 44.3 247.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient34303" cx="174.1" cy="28.16" r="7.125" gradientTransform="matrix(4.944 -.2853 .2842 4.339 -752.3 -40.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4174"/><radialGradient id="radialGradient8645" cx="18.99" cy="99.1" r="4.909" gradientTransform="matrix(1.028 -.1271 .1779 1.271 -14.99 -16.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/><radialGradient id="radialGradient8652" cx="22.6" cy="66.95" r="33.9" gradientTransform="matrix(1.028 -.1271 .1208 .8629 4.816 36.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/><filter id="filter3737"><feGaussianBlur stdDeviation="0.30086486"/></filter><radialGradient id="radialGradient3758" cx="27.96" cy="118.9" r="54.61" gradientTransform="matrix(.2185 -.06818 .7666 2.457 -46.68 -138.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/><filter id="filter3933"><feGaussianBlur stdDeviation="1.4820941"/></filter><radialGradient id="radialGradient3937" cx="154.2" cy="33.31" r="11.55" gradientTransform="matrix(.9703 -.06291 .0643 .8808 -50.71 19.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient25485"/><filter id="filter3985"><feGaussianBlur stdDeviation="0.18706947"/></filter><filter id="filter3989"><feGaussianBlur stdDeviation="0.086425096"/></filter><filter id="filter3995"><feGaussianBlur stdDeviation="0.17395735"/></filter><radialGradient id="radialGradient4005" cx="62.26" cy="77.17" r="33.9" fx="56.31" fy="65.78" gradientTransform="matrix(.465 1.004 -.2854 .1958 69.72 -13.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6184"/></defs><path d="m99.79 3.875c-0.3876 0.00147-0.764 0.01071-1.156 0.03125-0.04111 0.002151-0.08396-0.00236-0.125 0-0.2287 0.01313-1.084 0.05492-1.156 0.0625-0.06299 0.006578-0.1528-0.004893-0.2188 0-0.07118 0.008091-0.1478 0.02253-0.2188 0.03125-0.641 0.07878-1.289 0.1843-1.906 0.3125-7.767 1.432-13.67 6.637-14.84 12.91-0.05158 0.2655-0.09061 0.5435-0.125 0.8125-0.02137 0.1768-0.0487 0.353-0.0625 0.5312-0.005102 0.03258-0.02643 0.09238-0.03125 0.125 0 0-3.381 20.71-7.375 26.28-0.09795 0.1367-0.2321 0.3316-0.4375 0.5625-1.44 1.508-4.713 4.672-8.781 8.594-15.89 15.09-47.18 43.77-54.91 52-0.09039 0.08483-1.062 1-1.062 1l0.4062-0.2812c-0.5298 0.5868-0.9292 1.042-1.094 1.312-0.7453 1.224-1.225 2.509-1.469 3.812-0.00384 0.01999 0.00373 0.0425 0 0.0625-0.05528 0.3052-0.095 0.6003-0.125 0.9062-0.00319 0.03016 0.00295 0.06359 0 0.09375-0.02759 0.3067-0.05941 0.6314-0.0625 0.9375-1.6e-4 0.01048 1.3e-4 0.02077 0 0.03125-0.00226 0.305 0.01003 0.6033 0.03125 0.9062 0.00136 0.02088-0.00147 0.04163 0 0.0625 0.02281 0.3029 0.04832 0.6067 0.09375 0.9062 0.00301 0.02047-0.00311 0.04205 0 0.0625 0.04694 0.2992 0.1188 0.5806 0.1875 0.875 0.05119 0.2263 0.1239 0.4334 0.1875 0.6562 0.02678 0.09189 0.03365 0.19 0.0625 0.2812 0.00696 0.02239 0.02417 0.04015 0.03125 0.0625 0.01717 0.05328 0.04463 0.1032 0.0625 0.1562 0.1739 0.5249 0.3542 1.065 0.5938 1.562 0.00986 0.02021 0.02128 0.04234 0.03125 0.0625 2.013 4.121 6.216 7.114 11.12 6.688 0.2621-0.01742 0.5464-0.05642 0.8125-0.09375 0.00987-0.00161 0.02138 0.00164 0.03125 0 0.07192-0.01029 0.1466-0.01947 0.2188-0.03125 1.128-0.1841 2.292-0.5803 3.469-1.156 0.728-0.3388 1.45-0.7455 2.188-1.25 7.777-5.322 54.75-63.99 61.09-68.09 0.1357-0.08776 0.3295-0.1898 0.5-0.2812 7.346-3.211 14.4-3.648 21.78-6.188 2.389-0.5464 4-0.9062 4-0.9062 0.00508 0.001141 0.02654-5.44e-4 0.03125 0 0.00436-5e-5 0.02725 6.35e-4 0.03125 0 0.00329-0.0018 0.02831-0.02887 0.03125-0.03125 0.00191-0.004082 0.02968-0.02661 0.03125-0.03125 0.00123-0.005193-8.9e-4 -0.0255 0-0.03125 5e-4 -0.005666 0.00142-0.02191 0-0.03125 0.00349-7.45e-4 0.125-0.03125 0.125-0.03125 0.1623 0.03646 0.1393-0.2075-0.03125-0.7188 4.289-2.226 9.821-8.274 11.91-17.03 0.101-0.4241-0.1944-3.349-0.3125-3.531 0.01464-0.06414 0.04809-0.1232 0.0625-0.1875l-13.31 6.281-8.219-5.469c-0.8873-1.739-1.712-3.319-2.219-4.406 4e-5 -4.128-0.00329-4.478 0.375-8.219 5.075-1.998 14.03-5.438 14.03-5.438-0.01046-0.01008-0.02075-0.02119-0.03125-0.03125 0.01262-0.004818 0.2812-0.09375 0.2812-0.09375-3.467-3.34-8.717-5.428-14.53-5.406zm-82.84 102.8c2.457-0.05824 4.838 1.56 6.156 3.906 0.1091 0.1988 0.2192 0.3852 0.3125 0.5938 0.00991 0.02157 0.02152 0.04083 0.03125 0.0625 0.09209 0.2104 0.1751 0.4372 0.25 0.6562 0.007609 0.02159 0.02382 0.04083 0.03125 0.0625 0.1211 0.3644 0.2122 0.7415 0.2812 1.125 0.03177 0.1666 0.04132 0.3304 0.0625 0.5 0.02294 0.1969 0.05445 0.3935 0.0625 0.5938 0.127 3.16-2.739 6.436-6 7.156-0.1646 0.02247-0.3344 0.02258-0.5 0.03125-3.652 0.1912-7.365-3.465-7.594-7.281-0.1574-2.629 1.265-5.261 3.781-6.625 0.6112-0.3004 1.306-0.5491 2.031-0.6875 0.06063-0.00853 0.1259 0.00678 0.1875 0 0.2952-0.04519 0.5952-0.0769 0.9062-0.09375z" fill-rule="evenodd" filter="url(#filter3933)" stroke="url(#radialGradient3937)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.578"/><g transform="matrix(.9703 -.06291 .069 .9452 -53.46 27.49)" fill-rule="evenodd"><path d="m181.7 9.099-14.13 5.699-8.155-6.393c-1.071 1.417-1.886 21.69 3.102 21.52 9.132-0.3163 15.81-9.326 19.19-20.83z" fill="#888a85" stroke="url(#radialGradient9655)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.644"/><path d="m181.2 9.76-13.41 5.406-0.8438 9.438 1.531 4.156c5.846-3.223 10.2-10.41 12.72-19z" fill="url(#radialGradient9657)" opacity=".5138"/><path d="m159.3 8.597c-0.00419 0.005537-0.02707 0.02514-0.03125 0.03125-0.00834 0.01336-0.02295 0.0469-0.03125 0.0625-1.039 2.097-1.735 21.61 3.156 21.44 1.081-0.03743 2.146-0.198 3.156-0.4688l0.6875-15.59-6.938-5.469z" fill="url(#radialGradient9659)" opacity=".5138"/></g><g fill-rule="evenodd"><path d="m96.41 2.093c-9.007 1.107-15.85 7.228-16.41 14.46-0.005102 0.03258-0.02046 0.1021-0.02528 0.1347 0 0-3.373 20.72-7.366 26.29-3.134 4.373-63.06 58.54-65.88 63.17-5.963 9.791 5.157 23.75 16.95 15.68 7.777-5.322 54.73-63.98 61.08-68.08 4.287-2.772 26.55-7.519 26.55-7.519 1.299 0.2917-9.279-18.99-12.12-25.09 4e-5 -4.142-0.00898-4.478 0.3732-8.255 5.027-1.982 14.28-5.515 14.28-5.515-3.698-3.563-9.424-5.708-15.7-5.379-0.04111 0.002151-0.09195 0.004604-0.133 0.006962-0.2287 0.01314-1.058 0.05162-1.131 0.0592-0.06299 0.006579-0.1668 0.007294-0.2328 0.01219-0.07118 0.008091-0.1619 0.003471-0.2328 0.01219zm-79.61 102.6c3.652-0.1912 7.186 3.355 7.355 7.563 0.1399 3.481-3.341 7.11-6.993 7.301-3.652 0.1912-7.375-3.48-7.603-7.296-0.2195-3.667 2.625-7.325 7.241-7.567z" fill="#888a85"/><path d="m96.92 1.993c-9.007 1.107-15.85 7.228-16.41 14.46-0.005101 0.03258-0.02046 0.1021-0.02528 0.1347 0 0-3.373 20.72-7.366 26.29-3.134 4.373-63.06 58.54-65.88 63.17-5.963 9.791 5.157 23.75 16.95 15.68 7.777-5.322 54.73-63.98 61.08-68.08 4.287-2.772 26.55-7.519 26.55-7.519 1.299 0.2917-9.279-18.99-12.12-25.09 4e-5 -4.142-0.00898-4.478 0.3732-8.255 5.027-1.982 14.28-5.515 14.28-5.515-3.698-3.563-9.424-5.708-15.7-5.379-0.04111 0.002151-0.09195 0.004603-0.133 0.006963-0.2287 0.01313-1.058 0.05162-1.131 0.0592-0.06299 0.006578-0.1668 0.007294-0.2328 0.01219-0.07118 0.008091-0.1619 0.003472-0.2328 0.01219zm-79.61 102.6c3.652-0.1912 7.186 3.355 7.355 7.563 0.1399 3.481-3.341 7.11-6.993 7.301-3.652 0.1912-7.375-3.48-7.603-7.296-0.2195-3.667 2.625-7.325 7.241-7.567z" fill="url(#radialGradient22837)"/><path d="m82.02 17.16 7.477 16.24 3.184-1.357 5.283 11.83-2.618 1.243 3.598 4.701c5.944-1.49 12.36-4.035 12.36-4.035 0.00467 5.49e-4 0.0281-0.001641 0.03242-0.001686 0.00397-6.32e-4 0.0288-4.66e-4 0.03243-0.001684 0.00258-0.002945 0.02834-0.0289 0.03058-0.03242 0.00155-0.004636-0.00307-0.02554-0.00186-0.03073 0.00177-0.01149 0.02829-0.04947 0.02873-0.06315-0.02552-1.779-9.537-19.21-12.21-24.95-3e-3 -4.142 0.00359-4.474 0.381-8.25 4.999-1.978 14.23-5.108 14.23-5.108-3.681-3.565-11.24-5.119-16.88-4.074-8.854 1.643-14.11 6.933-14.93 13.89z" fill="url(#radialGradient10545)"/><path d="m95.38 2.308c-8.487 1.434-14.84 7.382-15.38 14.33-0.005091 0.03257-0.01056 0.09088-0.01539 0.1235-1.1e-5 3e-6 -3.371 20.72-7.365 26.29-3.134 4.373-63.08 58.53-65.9 63.17-5.963 9.791 5.172 23.76 16.97 15.69 7.777-5.322 54.75-63.97 61.09-68.07 4.287-2.772 26.53-7.535 26.53-7.535 0.00508 0.001139 0.0316 0.02536 0.03631 0.02591 0.00436-4.8e-5 0.02813-0.003336 0.03213-0.003971 0.00329-0.0018 0.025-0.03148 0.02794-0.03385 0.00191-0.004079 0.02637-0.02921 0.02794-0.03385 0.00123-0.005195-0.00507-0.02413-0.00418-0.02988 0.00167-0.01889-0.01128-0.06589-0.01256-0.08964-0.1795-2.02-9.557-19.21-12.21-24.91 3e-5 -4.142-0.00206-4.478 0.3802-8.254 5.027-1.982 14.26-5.532 14.26-5.532-3.698-3.563-9.409-5.685-15.69-5.357-0.04111 0.00215-0.09165-0.01636-0.1327-0.014-0.2287 0.01314-1.06 0.07164-1.133 0.07922-0.063 0.006579-0.1631-0.006977-0.2291-0.002084-0.06229 0.007082-0.159 0.02273-0.2249 0.0278-0.3518 0.04323-0.7152 0.07274-1.06 0.131zm1.356 1.048c5.605-0.962 12.94 0.2184 16.57 3.728 0 0-9.163 3.542-14.16 5.52-0.3774 3.776-0.3832 4.113-0.3802 8.254 2.649 5.697 12.01 22.9 12.18 24.91 3.9e-4 0.007425 0.00409 0.02293 0.00418 0.02988-0.00515 0.01133-0.01827 0.05295-0.02375 0.06373 2.4e-4 0.002761 0.00378 0.02665 0.00418 0.02988-0.00704 0.007297-0.02665 0.03238-0.02794 0.03385-0.00716 1.9e-4 -0.03014 0.003654-0.03213 0.00397-0.00349 2.43e-4 -0.0292 0.003843-0.03212 0.003972 0 0-7.109 1.218-13.05 2.708l-1.782-2.586 3.497-2.295-6.395-12.39-4.412 1.531-7.129-15.6c0.8166-6.954 6.066-12.24 14.92-13.88 0.08807-0.01634 0.1639-0.04638 0.2528-0.06165zm-81.09 101.5c0.3697-0.06907 0.764-0.09231 1.161-0.1131 3.652-0.1912 7.194 3.333 7.364 7.54 0.1399 3.481-3.363 7.12-7.016 7.312-3.652 0.1912-7.363-3.483-7.591-7.3-0.2006-3.352 2.15-6.705 6.083-7.439z" fill="url(#radialGradient25491)"/><path d="m95.63 2.277c-8.487 1.434-14.84 7.382-15.38 14.33-0.00509 0.03257-0.01056 0.09088-0.01539 0.1235-1.1e-5 4e-6 -3.371 20.72-7.365 26.29-3.134 4.373-63.08 58.53-65.9 63.17-5.963 9.791 5.172 23.76 16.97 15.69 7.777-5.322 54.75-63.97 61.09-68.07 4.287-2.772 26.53-7.535 26.53-7.535 0.00508 0.001139 0.0316 0.02537 0.03631 0.02591 0.00436-4.8e-5 0.02813-0.003336 0.03213-0.003971 0.00329-0.001799 0.025-0.03148 0.02794-0.03385 0.00191-0.00408 0.02637-0.02921 0.02794-0.03385 0.00123-0.005195-0.00507-0.02413-0.00418-0.02988 0.00167-0.01889-0.01128-0.06589-0.01256-0.08964-0.1795-2.02-9.557-19.21-12.21-24.91 3e-5 -4.142-0.00206-4.478 0.3802-8.254 5.027-1.982 14.26-5.532 14.26-5.532-3.698-3.563-9.409-5.685-15.69-5.357-0.04112 0.002152-0.09165-0.01635-0.1327-0.014-0.2287 0.01313-1.06 0.07164-1.133 0.07922-0.063 0.00658-0.1631-0.006976-0.2291-0.002084-0.06229 0.007082-0.159 0.02273-0.2249 0.0278-0.3518 0.04323-0.7152 0.07274-1.06 0.131zm1.356 1.048c5.605-0.962 12.94 0.2184 16.57 3.728 0 0-9.163 3.542-14.16 5.52-0.3774 3.776-0.3832 4.113-0.3802 8.254 2.649 5.697 12.01 22.9 12.18 24.91 3.9e-4 0.007425 0.00409 0.02293 0.00418 0.02988-0.00515 0.01133-0.01827 0.05295-0.02375 0.06373 2.4e-4 0.002762 0.00378 0.02666 0.00418 0.02988-0.00704 0.007296-0.02665 0.03238-0.02794 0.03385-0.00716 1.91e-4 -0.03014 0.003655-0.03213 0.003971-0.00349 2.43e-4 -0.0292 0.003842-0.03212 0.003972 0 0-7.109 1.218-13.05 2.708l-1.878-3.277 3.778-2.095-5.867-12.22-4.973 1.131-7.28-14.88c0.8166-6.954 6.066-12.24 14.92-13.88 0.08807-0.01634 0.1639-0.04638 0.2528-0.06165zm-81.09 101.5c0.3697-0.06908 0.764-0.0923 1.161-0.1131 3.652-0.1912 7.194 3.333 7.364 7.54 0.1399 3.481-3.363 7.12-7.016 7.312-3.652 0.1912-7.363-3.483-7.591-7.3-0.2006-3.352 2.15-6.705 6.083-7.439z" fill="url(#radialGradient27252)"/></g><g transform="matrix(1.028 -.1271 .1339 .9562 -10.63 14.78)" fill-rule="evenodd"><rect transform="matrix(.9563 -.2924 .3097 .9508 0 0)" x="68.63" y="58" width="13.4" height="13.09" fill="#2e3436" stroke="url(#radialGradient19335)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.544"/><rect transform="matrix(.9677 -.2522 .3074 .9516 0 0)" x="71.56" y="55.69" width="7.725" height="11.04" fill="url(#radialGradient15831)"/><g stroke-linecap="round" stroke-linejoin="round"><rect transform="matrix(.986 -.1664 .08672 .9962 0 0)" x="82.51" y="49.74" width="11.25" height="1.233" ry="0" fill="url(#radialGradient12309)" stroke="url(#linearGradient13190)" stroke-width=".3843"/><rect transform="matrix(.9893 -.146 .09906 .9951 0 0)" x="83.73" y="56.04" width="10.96" height="1.054" ry="0" fill="url(#radialGradient14940)" stroke="url(#linearGradient14942)" stroke-width=".3508"/><rect transform="matrix(.9906 -.1366 .106 .9944 0 0)" x="81.91" y="51.25" width="11.67" height="1.051" ry="0" fill="url(#radialGradient14946)" stroke="url(#linearGradient14948)" stroke-width=".3614"/></g></g><g fill-rule="evenodd"><path d="m99.27 12.98 14.25-5.5 0.6445 1.69-14.93 5.916 0.03924-2.106z" fill="url(#linearGradient23728)" filter="url(#filter3737)"/><path d="m110.6 44.08c4.16-0.7889 10.66-9.472 12.74-19.22 0.09251-0.4338 0.4256 3.058 0.315 3.523-2.145 9.006-7.929 15.15-12.26 17.22-0.2564 0.1221 0.02982 1.726-0.7906-1.516z" fill="url(#linearGradient26375)"/><path d="m82.64 16.14 6.55 16.83 4.025-0.7573 5.498 11.57-3.265 2.027 2.381 3.209c5.944-1.49 12.36-4.035 12.36-4.035 0.00467 5.5e-4 0.02811-0.00164 0.03243-0.001685 0.00397-6.33e-4 0.0288-4.67e-4 0.03242-0.001685 0.00258-0.002944 0.02835-0.0289 0.03058-0.03242 0.00155-0.004636-0.00306-0.02554-0.00185-0.03073 0.00177-0.01149 0.02828-0.04947 0.02872-0.06314-0.02552-1.779-9.537-19.21-12.21-24.95-3e-3 -4.142 0.00359-4.474 0.381-8.25 4.999-1.978 13.18-5.392 13.18-5.392-3.681-3.565-10-3.451-15.64-2.406-8.854 1.643-12.57 5.335-13.38 12.29z" fill="url(#radialGradient27256)" filter="url(#filter3985)"/><path d="m7.394 105.1s61.61-57.8 65.6-62.51c3.831-4.524 7.179-25.08 7.179-25.08s2.099-1.422 1.698-0.1891c-0.5496 1.69-5.893 22.44-7.204 24.45-2.988 4.59-19.95 19.73-19.95 19.73l-41.43 39.36-5.888 4.236z" opacity=".3853"/><path d="m17.91 120.7s-4.759 0.07487-7.266-3.075c-2.507-3.15-2.716-7.961-2.716-7.961l0.5504-0.8244s0.4952 4.826 2.753 7.875c2.301 3.108 7.238 3.285 7.161 3.413l-0.4833 0.5718z" fill="url(#radialGradient34276)" opacity=".8945"/><path d="m109.1 30.3c-0.08337 0.2694 0.2624 8.337 0.3125 8.622 0.1201 4.43 1.171 4.698 1.286 5.492 0.8564-0.3258 0.2753 0.08044 1.046-0.3961-0.0737-0.3873-1.164-3.088-1.614-4.056 0.03858-2.203 0.04574-8.383 0.05482-8.969-0.4156-0.2781-0.5752-0.389-1.085-0.6923z"/><path d="m122.9 25.19-12.63 5.953-0.1674 8.973 1.773 3.832c5.45-3.415 9.174-10.48 11.03-18.76z" fill="url(#radialGradient34303)" opacity=".5138"/></g><path d="m-228.9-67.27v-2.795 2.795z" fill="#fff" fill-opacity=".7569"/><path d="m65.69-129.5v-2.795 2.795z" fill="#fff" fill-opacity=".7569"/><path d="m-52.48-94.13c-5.34 0-9.656 4.317-9.656 9.656v8.375h-48.25c-5.34 0-9.656 4.285-9.656 9.625v40.75c0 5.34 4.317 9.625 9.656 9.625h57.91 37.56 1.062c5.34 0 9.625-4.285 9.625-9.625v-58.75c0-5.34-4.285-9.656-9.625-9.656h-38.62z" fill="none" opacity=".06148"/><g fill="#fff"><g fill-opacity=".7569"><path d="m-91.32-199.1v-2.795 2.795z"/><path d="m-210.8-285.7v-2.795 2.795z"/><path d="m35.77-220v-2.795 2.795z"/><path d="m-56.85-146.1v-1.527 1.527z"/></g><rect x="-114.3" y="-202.7" width="1" height="0" opacity=".5779"/><rect x="-149.5" y="-230.2" width="1" height="0" opacity=".5779"/><path d="m-308.4-303.4v-2.795 2.795z" fill-opacity=".7569"/></g><g fill-rule="evenodd"><path d="m95.63 2.277c-8.487 1.434-14.84 7.382-15.38 14.33-0.00509 0.03257-0.01056 0.09088-0.01539 0.1235-1.1e-5 4e-6 -3.371 20.72-7.365 26.29-3.134 4.373-63.08 58.53-65.9 63.17-5.963 9.791 5.172 23.76 16.97 15.69 7.777-5.322 54.75-63.97 61.09-68.07 4.287-2.772 26.53-7.535 26.53-7.535 0.00508 0.001139 0.0316 0.02537 0.03631 0.02591 0.00436-4.8e-5 0.02813-0.003336 0.03213-0.003971 0.00329-0.001799 0.025-0.03148 0.02794-0.03385 0.00191-0.00408 0.02637-0.02921 0.02794-0.03385 0.00123-0.005195-0.00507-0.02413-0.00418-0.02988 0.00167-0.01889-0.01128-0.06589-0.01256-0.08964-0.1795-2.02-9.557-19.21-12.21-24.91 3e-5 -4.142-0.00206-4.478 0.3802-8.254 5.027-1.982 14.26-5.532 14.26-5.532-3.698-3.563-9.409-5.685-15.69-5.357-0.04112 0.002152-0.09165-0.01635-0.1327-0.014-0.2287 0.01313-1.06 0.07164-1.133 0.07922-0.063 0.00658-0.1631-0.006976-0.2291-0.002084-0.06229 0.007082-0.159 0.02273-0.2249 0.0278-0.3518 0.04323-0.7152 0.07274-1.06 0.131zm1.356 1.048c5.605-0.962 12.94 0.2184 16.57 3.728 0 0-9.163 3.542-14.16 5.52-0.3774 3.776-0.3832 4.113-0.3802 8.254 2.649 5.697 12.01 22.9 12.18 24.91 3.9e-4 0.007425 0.00409 0.02293 0.00418 0.02988-0.00515 0.01133-0.01827 0.05295-0.02375 0.06373 2.4e-4 0.002762 0.00378 0.02666 0.00418 0.02988-0.00704 0.007296-0.02665 0.03238-0.02794 0.03385-0.00716 1.91e-4 -0.03014 0.003655-0.03213 0.003971-0.00349 2.43e-4 -0.0292 0.003842-0.03212 0.003972 0 0-7.109 1.218-13.05 2.708l-1.878-3.277 3.778-2.095-5.867-12.22-4.973 1.131-7.28-14.88c0.8166-6.954 6.066-12.24 14.92-13.88 0.08807-0.01634 0.1639-0.04638 0.2528-0.06165zm-81.09 101.5c0.3697-0.06908 0.764-0.0923 1.161-0.1131 3.652-0.1912 7.194 3.333 7.364 7.54 0.1399 3.481-3.363 7.12-7.016 7.312-3.652 0.1912-7.363-3.483-7.591-7.3-0.2006-3.352 2.15-6.705 6.083-7.439z" fill="url(#radialGradient3758)"/><path d="m16.23 102c5.543-1.305 11.85 4.911 10.63 10.77 4.149-3.435 51.89-56.68 52.88-59.24 1.516-3.923-2.578-7.468-6.472-5.797-2.716 1.166-57.4 54.35-57.04 54.27z" fill="#888a85"/><path d="m16.23 102c5.543-1.305 11.85 4.911 10.63 10.77 4.149-3.435 51.89-56.68 52.88-59.24 1.516-3.923-2.578-7.468-6.472-5.797-2.716 1.166-57.4 54.35-57.04 54.27z" opacity=".8"/><path d="m16.23 102c5.543-1.305 11.85 4.911 10.63 10.77 4.149-3.435 51.89-56.68 52.88-59.24 1.516-3.923-2.578-7.468-6.472-5.797-2.716 1.166-57.4 54.35-57.04 54.27z" fill="url(#radialGradient4005)" opacity=".2772"/><path d="m16.23 102c5.543-1.305 11.85 4.911 10.63 10.77 4.149-3.435 51.89-56.68 52.88-59.24 1.516-3.923-2.578-7.468-6.472-5.797-2.716 1.166-57.4 54.35-57.04 54.27z" fill="url(#radialGradient8652)" opacity=".5"/><path d="m73.19 47.86c0.3042-0.1874 2.876-1.47 5.25 0.6196 2.027 1.784 1.754 3.63 1.189 5.291-0.2727 0.8024-22.19 25.65-26.12 30.18-1.935 2.224-8.555 9.46-14.63 16.14-6.129 6.744-11.88 12.59-11.88 12.59s51.93-57.89 52.24-59.47c0.4598-2.315-0.4884-3.052-1.27-3.792-0.7965-0.7537-2.198-1.596-4.106-1.209-2.631 0.5339-56.5 53.33-57.52 53.72 0 0 12.94-12.81 26.59-25.98 13.65-13.17 28.02-26.71 30.26-28.09z" fill="#2e3436" opacity=".4037"/><path d="m16.75 101.5s4.296-1.031 7.966 2.409c4.014 3.762 2.793 8.242 2.793 8.242l-0.6456 0.7709s0.353-1.714-0.06429-3.396c-0.4173-1.682-1.304-3.41-2.815-4.801-1.489-1.371-2.901-2.253-4.434-2.582-1.534-0.3283-3.277-0.09145-3.242-0.1574l0.4416-0.485z" fill="url(#radialGradient8645)"/><path d="m16.75 101.5s4.296-1.031 7.966 2.409c4.014 3.762 2.793 8.242 2.793 8.242l-0.6456 0.7709s0.353-1.714-0.06429-3.396c-0.4173-1.682-1.304-3.41-2.815-4.801-1.489-1.371-2.901-2.253-4.434-2.582-1.534-0.3283-3.277-0.09145-3.242-0.1574l0.4416-0.485z" fill="url(#radialGradient8645)"/></g><g fill="#fff" fill-rule="evenodd"><path d="m104.6 3.194c-11.99-0.9893-20.74 3.166-22.16 12.27 1.646-6.957 8.949-12.61 22.16-12.27z" filter="url(#filter3989)"/><path d="m104.6 3.194c-12.14-1.713-21.74 2.654-22.16 12.27 2.309-6.837 8.949-12.33 22.16-12.27z" filter="url(#filter3995)" opacity=".7772"/><path d="m99.81 3.156c-4.782-0.02921-8.939 0.9715-11.94 3-2.555 1.728-4.287 4.179-4.906 7.312 2.491-5.18 7.77-9.292 16.84-10.31z" filter="url(#filter3995)" opacity=".7772"/></g><path d="m75.43 47.31c-0.7059-0.02154-1.426 0.1242-2.156 0.4375-2.716 1.166-57.39 54.33-57.03 54.25 0.377-0.08876 0.7435-0.1346 1.125-0.1562 5.831-5.884 53.36-52 55.91-53.09 3.117-1.338 6.357 0.6658 6.75 3.531 0.2575-2.664-1.944-4.888-4.594-4.969zm-48.44 64.38c-0.01923 0.3671-0.04902 0.7275-0.125 1.094 0.02334-0.01932 0.09892-0.07129 0.125-0.09375 5.49e-4 -0.01049-5.05e-4 -0.02076 0-0.03125 0.01565-0.3251 0.02578-0.6459 0-0.9688z" fill-rule="evenodd" opacity=".5"/></svg>
diff --git a/share/icons/svg/dialog-close.svg b/share/icons/svg/dialog-close.svg
deleted file mode 100644
index 9b6b717cd..000000000
--- a/share/icons/svg/dialog-close.svg
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient4296">
- <stop
- style="stop-color:#ff0000;stop-opacity:1;"
- offset="0"
- id="stop4298" />
- <stop
- style="stop-color:#650000;stop-opacity:1;"
- offset="1"
- id="stop4300" />
- </linearGradient>
- <linearGradient
- id="linearGradient6740">
- <stop
- id="stop6742"
- offset="0"
- style="stop-color:#4d0000;stop-opacity:0;" />
- <stop
- style="stop-color:#4d0000;stop-opacity:1;"
- offset="0.5"
- id="stop6748" />
- <stop
- id="stop6744"
- offset="1"
- style="stop-color:#4d0000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5958"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-12.0029"
- y2="-383.9971"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
- <stop
- offset="0"
- style="stop-color:#8c0000;stop-opacity:1;"
- id="stop5960" />
- <stop
- offset="1"
- style="stop-color:#bf0000;stop-opacity:1;"
- id="stop5962" />
- </linearGradient>
- <linearGradient
- id="linearGradient4770"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-12.0029"
- y2="-383.9971"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
- <stop
- offset="0"
- style="stop-color:#ffbe00;stop-opacity:1"
- id="stop4772" />
- <stop
- offset="1"
- style="stop-color:#f5d600;stop-opacity:0;"
- id="stop4774" />
- </linearGradient>
- <linearGradient
- id="linearGradient3711"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-23.516129"
- y2="-383.9975"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
- <stop
- offset="0"
- style="stop-color:white;stop-opacity:1;"
- id="stop3713" />
- <stop
- offset="1"
- style="stop-color:white;stop-opacity:0;"
- id="stop3715" />
- </linearGradient>
- <clipPath
- id="clipPath5163"
- clipPathUnits="userSpaceOnUse">
- <circle
- id="circle5165"
- ry="8.0010004"
- cy="92"
- cx="343.99899"
- rx="8.0010004"
- r="36"
- style="fill:url(#linearGradient5167);fill-opacity:1" />
- </clipPath>
- <filter
- id="filter5943">
- <feGaussianBlur
- id="feGaussianBlur5945"
- stdDeviation="1.04" />
- </filter>
- <filter
- id="filter7317">
- <feGaussianBlur
- id="feGaussianBlur7319"
- stdDeviation="2.8805897" />
- </filter>
- <linearGradient
- y2="-131.93112"
- x2="-45.096584"
- y1="-131.93112"
- x1="-80.00296"
- gradientTransform="matrix(0,1.3460321,-1.3460321,0,-112.6741,119.24399)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3003"
- xlink:href="#linearGradient3711" />
- <linearGradient
- y2="76.633896"
- x2="90.537666"
- y1="103.01254"
- x1="117.81589"
- gradientTransform="translate(20.000035,-56.000003)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3008"
- xlink:href="#linearGradient6740" />
- <linearGradient
- y2="87.759453"
- x2="336.98077"
- y1="120.81158"
- x1="328.12448"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3010"
- xlink:href="#linearGradient4296" />
- <radialGradient
- gradientTransform="matrix(0.6662862,-0.6560105,0.9893764,1.0048737,31.05592,226.43791)"
- r="36"
- fy="85.250488"
- fx="345.80753"
- cy="85.250488"
- cx="345.80753"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3012"
- xlink:href="#linearGradient4770" />
- <linearGradient
- y2="-373.1243"
- x2="-56.357521"
- y1="-381.09921"
- x1="-86.120354"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3014"
- xlink:href="#linearGradient5958" />
- <filter
- id="filter3138">
- <feGaussianBlur
- id="feGaussianBlur3140"
- stdDeviation="5.6513927" />
- </filter>
- <filter
- id="filter3162">
- <feGaussianBlur
- id="feGaussianBlur3164"
- stdDeviation="0.96794009" />
- </filter>
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- transform="matrix(0.5662048,0,0,0.5662048,55.73989,54.555422)"
- d="M 115.5,20 A 100,100 0 1 1 -84.5,20 A 100,100 0 1 1 115.5,20 z"
- id="path2396"
- style="opacity:0.50271737999999999;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.13749998999999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15000000000000036;stroke-opacity:1;filter:url(#filter3138)" />
- <circle
- transform="matrix(-1.5639433,0.4190574,-0.4190574,-1.5639433,641.54821,62.027543)"
- id="circle3581_2_"
- ry="8.0010004"
- cy="92"
- cx="343.99899"
- rx="8.0010004"
- r="36"
- style="fill:url(#linearGradient3014);fill-opacity:1" />
- <circle
- style="fill:url(#radialGradient3012);fill-opacity:1;filter:url(#filter3162)"
- r="36"
- rx="8.0010004"
- cx="343.99899"
- cy="92"
- ry="8.0010004"
- id="circle4383"
- transform="matrix(-1.1729576,0.3142929,-0.3142929,-1.1729576,497.41122,62.095683)" />
- <circle
- style="opacity:0.8;fill:none;fill-opacity:1;stroke:url(#linearGradient3010);stroke-width:6.75138187;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7317)"
- r="36"
- rx="8.0010004"
- cx="343.99899"
- cy="92"
- ry="8.0010004"
- id="circle4776"
- transform="matrix(-1.5639433,-0.4190574,-0.4190574,1.5639433,641.54821,62.572542)"
- clip-path="url(#clipPath5163)" />
- <path
- id="circle16776"
- d="M 65.000079,11.557516 C 44.329599,11.557516 27.057531,26.153664 22.894511,45.586895 C 31.192535,53.322386 46.937604,58.542449 65.000079,58.542449 C 83.062575,58.542449 98.807623,53.322386 107.10564,45.586895 C 102.94264,26.153664 85.670553,11.557516 65.000079,11.557516 z"
- style="opacity:0.8;fill:url(#linearGradient3003);fill-opacity:1" />
- <g
- transform="matrix(1.2882604,1.2882604,-1.2882604,1.2882604,-45.790405,-141.24514)"
- id="g6850">
- <path
- id="path4123"
- d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3008);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943)" />
- <path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
- d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
- id="rect3232" />
- </g>
- </g>
-</svg>
diff --git a/share/icons/svg/dialog-error.svg b/share/icons/svg/dialog-error.svg
deleted file mode 100644
index b09885d35..000000000
--- a/share/icons/svg/dialog-error.svg
+++ /dev/null
@@ -1,474 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient5252">
- <stop
- id="stop5254"
- offset="0"
- style="stop-color:#ff0000;stop-opacity:1;" />
- <stop
- id="stop5256"
- offset="1"
- style="stop-color:#ff0000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5225">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop5227" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1"
- id="stop5229" />
- </linearGradient>
- <linearGradient
- id="linearGradient5215">
- <stop
- style="stop-color:#e16e00;stop-opacity:1;"
- offset="0"
- id="stop5217" />
- <stop
- style="stop-color:#803f00;stop-opacity:0"
- offset="1"
- id="stop5219" />
- </linearGradient>
- <linearGradient
- id="linearGradient5187">
- <stop
- id="stop5189"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop5191"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient5132">
- <stop
- id="stop5134"
- offset="0"
- style="stop-color:#ff7e00;stop-opacity:1" />
- <stop
- id="stop5136"
- offset="1"
- style="stop-color:#ff7e00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient5116">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop5118" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop5120" />
- </linearGradient>
- <linearGradient
- id="linearGradient5097">
- <stop
- id="stop5099"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop5101"
- offset="1"
- style="stop-color:#ffbebe;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient5080">
- <stop
- id="stop5082"
- offset="0"
- style="stop-color:#ffb5b5;stop-opacity:1" />
- <stop
- id="stop5084"
- offset="1"
- style="stop-color:#ffbfbf;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5031">
- <stop
- id="stop5033"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop5035"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient5015">
- <stop
- id="stop5017"
- offset="0"
- style="stop-color:#ff1212;stop-opacity:1" />
- <stop
- id="stop5019"
- offset="1"
- style="stop-color:#750000;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4997">
- <stop
- style="stop-color:#8c0000;stop-opacity:1"
- offset="0"
- id="stop4999" />
- <stop
- style="stop-color:#470000;stop-opacity:1"
- offset="1"
- id="stop5001" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
- spreadMethod="pad"
- gradientUnits="userSpaceOnUse"
- y2="105.08932"
- x2="61.211941"
- y1="15.015407"
- x1="61.211941"
- id="linearGradient3146"
- xlink:href="#linearGradient4997" />
- <radialGradient
- gradientTransform="matrix(2.0783306,-9.927972e-8,6.9726035e-8,1.4596512,-69.013166,-26.914)"
- gradientUnits="userSpaceOnUse"
- r="39.999996"
- fy="77.237541"
- fx="64"
- cy="73.475296"
- cx="64.000008"
- id="radialGradient5023"
- xlink:href="#linearGradient5015" />
- <linearGradient
- gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
- gradientUnits="userSpaceOnUse"
- y2="89.444931"
- x2="77.450546"
- y1="17.868132"
- x1="77.450546"
- id="linearGradient5086"
- xlink:href="#linearGradient5080" />
- <linearGradient
- gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
- gradientUnits="userSpaceOnUse"
- y2="38.609497"
- x2="101.99058"
- y1="76.386581"
- x1="113.41915"
- id="linearGradient5103"
- xlink:href="#linearGradient5097" />
- <linearGradient
- gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
- y2="67.763039"
- x2="77.450546"
- y1="17.868132"
- x1="77.450546"
- gradientUnits="userSpaceOnUse"
- id="linearGradient5114"
- xlink:href="#linearGradient5116" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="35.43399"
- x2="82.550011"
- y1="108.25001"
- x1="82.550011"
- id="linearGradient5138"
- xlink:href="#linearGradient5132" />
- <radialGradient
- gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
- gradientUnits="userSpaceOnUse"
- r="5.96875"
- fy="26.03125"
- fx="26.03125"
- cy="26.03125"
- cx="26.03125"
- id="radialGradient5193"
- xlink:href="#linearGradient5187" />
- <filter
- id="filter5199"
- height="1.24"
- y="-0.12"
- width="1.24"
- x="-0.12">
- <feGaussianBlur
- id="feGaussianBlur5201"
- stdDeviation="0.596875" />
- </filter>
- <radialGradient
- r="5.96875"
- fy="26.03125"
- fx="26.03125"
- cy="26.03125"
- cx="26.03125"
- gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient5205"
- xlink:href="#linearGradient5215" />
- <radialGradient
- r="5.96875"
- fy="26.03125"
- fx="26.03125"
- cy="26.03125"
- cx="26.03125"
- gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient5209"
- xlink:href="#linearGradient5215" />
- <radialGradient
- r="5.96875"
- fy="26.03125"
- fx="26.03125"
- cy="26.03125"
- cx="26.03125"
- gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient5213"
- xlink:href="#linearGradient5187" />
- <radialGradient
- gradientTransform="matrix(1.1954201,0,0,0.2784785,-12.506884,12.187875)"
- gradientUnits="userSpaceOnUse"
- r="43.999996"
- fy="26.931658"
- fx="64.000008"
- cy="26.931658"
- cx="64.000008"
- id="radialGradient5223"
- xlink:href="#linearGradient5225" />
- <radialGradient
- gradientTransform="matrix(3.3075569,0,0,0.427102,-147.68366,4.135353)"
- gradientUnits="userSpaceOnUse"
- r="43.999996"
- fy="21.660604"
- fx="64.000008"
- cy="21.660604"
- cx="64.000008"
- id="radialGradient5231"
- xlink:href="#linearGradient5031" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- r="37.816799"
- fy="82.000008"
- fx="64.000008"
- cy="82.000008"
- cx="64.000008"
- id="radialGradient5258"
- xlink:href="#linearGradient5252" />
- <filter
- id="filter5312"
- height="1.2692683"
- y="-0.13463415"
- width="1.2692683"
- x="-0.13463415">
- <feGaussianBlur
- id="feGaussianBlur5314"
- stdDeviation="4.2428604" />
- </filter>
- <filter
- id="filter5316">
- <feGaussianBlur
- id="feGaussianBlur5318"
- stdDeviation="0.40209128" />
- </filter>
- <filter
- id="filter5366">
- <feGaussianBlur
- id="feGaussianBlur5368"
- stdDeviation="0.52066799" />
- </filter>
- <filter
- id="filter3576">
- <feGaussianBlur
- stdDeviation="0.576875"
- id="feGaussianBlur3578" />
- </filter>
- <filter
- id="filter3550">
- <feGaussianBlur
- stdDeviation="1.23375"
- id="feGaussianBlur3552" />
- </filter>
- <linearGradient
- id="linearGradient3530">
- <stop
- style="stop-color:#590000;stop-opacity:1;"
- offset="0"
- id="stop3532" />
- <stop
- style="stop-color:#590000;stop-opacity:0;"
- offset="1"
- id="stop3534" />
- </linearGradient>
- <linearGradient
- id="linearGradient3554">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3556" />
- <stop
- style="stop-color:#dfdfdf;stop-opacity:1"
- offset="1"
- id="stop3558" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(0.5625,0.25)"
- y2="103.40701"
- x2="68.9375"
- y1="38.90625"
- x1="68.9375"
- gradientUnits="userSpaceOnUse"
- id="linearGradient5530"
- xlink:href="#linearGradient3554" />
- <radialGradient
- r="29.84375"
- fy="77.980095"
- fx="62.78125"
- cy="66.175667"
- cx="62.78125"
- gradientTransform="matrix(1.3513697,0,0,1.3513697,-21.49693,-22.68578)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient5539"
- xlink:href="#linearGradient3530" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <rect
- ry="6.0052505"
- rx="6.0052505"
- y="16.183208"
- x="16.183208"
- height="95.633598"
- width="95.633598"
- id="rect5320"
- style="opacity:0.75;fill:#9c0f0f;fill-opacity:1;stroke:#9c0f0f;stroke-width:8.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5366)" />
- <rect
- ry="6.0052505"
- rx="6.0052505"
- y="16.183208"
- x="16.183208"
- height="95.633598"
- width="95.633598"
- id="rect5221"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient5223);stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- ry="6.0052505"
- rx="6.0052505"
- y="16.183208"
- x="16.183208"
- height="95.633598"
- width="95.633598"
- id="rect2160"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient3146);stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="opacity:0.72682927;fill:none;fill-opacity:1;stroke:url(#radialGradient5231);stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect5029"
- width="95.633598"
- height="95.633598"
- x="16.183208"
- y="16.183208"
- rx="6.0052505"
- ry="6.0052505" />
- <path
- transform="matrix(-1.0246293e-7,1.1954199,-1.1954199,-1.0246293e-7,140.50776,-12.509486)"
- style="opacity:0.6;fill:url(#radialGradient5213);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)"
- d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
- id="path5211" />
- <path
- id="path5207"
- d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
- style="opacity:0.51707315;fill:url(#radialGradient5209);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)"
- transform="matrix(-1.1954199,-1.0246293e-7,1.0246293e-7,-1.1954199,140.51037,140.50515)" />
- <path
- transform="matrix(1.0246293e-7,-1.1954199,1.1954199,1.0246293e-7,-12.504272,140.50777)"
- style="opacity:0.51707315;fill:url(#radialGradient5205);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)"
- d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
- id="path5203" />
- <path
- transform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
- id="path5176"
- d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
- style="opacity:0.75;fill:url(#radialGradient5193);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)" />
- <rect
- style="opacity:1;fill:url(#radialGradient5023);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect2164"
- width="95.633598"
- height="95.633598"
- x="16.183207"
- y="16.183207"
- rx="6.2454605"
- ry="6.2454605" />
- <rect
- transform="matrix(1.1322164,0,0,1.0793299,-8.4618486,-3.0771092)"
- ry="25.501919"
- rx="25.501919"
- y="26.183207"
- x="26.183207"
- height="75.633598"
- width="75.633598"
- id="rect5248"
- style="opacity:1;fill:url(#radialGradient5258);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5312)" />
- <path
- id="rect5073"
- d="M 22.421796,16.183197 C 18.96181,16.183197 16.183197,18.961809 16.183197,22.421796 L 16.183197,64.522996 C 28.725605,67.255005 42.447721,68.781679 56.827479,68.781679 C 76.921976,68.781679 95.717949,65.830284 111.8168,60.712594 L 111.8168,22.421796 C 111.8168,18.96181 109.03818,16.183197 105.5782,16.183197 L 22.421796,16.183197 z "
- style="opacity:1;fill:url(#linearGradient5086);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path5088"
- d="M 110.88288,19.171747 C 111.06703,19.767205 111.14438,20.418868 111.14438,21.076948 L 111.14438,59.9281 C 94.81393,65.119411 75.754132,68.109254 55.370561,68.109256 C 41.547513,68.109256 28.357379,66.690869 16.183197,64.186784 L 16.183197,64.522996 C 28.725605,67.255005 42.447721,68.781679 56.827479,68.781679 C 76.921976,68.781679 95.717949,65.830284 111.8168,60.712594 L 111.8168,22.421796 C 111.8168,21.22492 111.46104,20.118746 110.88288,19.171747 z "
- style="opacity:1;fill:url(#linearGradient5103);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path5105"
- d="M 22.421796,16.183197 C 18.96181,16.183197 16.183197,18.961809 16.183197,22.421796 L 16.183197,64.522996 C 16.664686,64.627875 17.155179,64.720542 17.640115,64.821851 L 17.640115,24.028141 C 17.640115,20.599758 20.336233,17.864257 23.691929,17.864257 L 104.30807,17.864257 C 107.66376,17.864257 110.35988,20.599758 110.35988,24.028141 L 110.35988,61.160877 C 110.84354,61.012486 111.33788,60.86484 111.8168,60.712594 L 111.8168,22.421796 C 111.8168,18.96181 109.03818,16.183197 105.5782,16.183197 L 22.421796,16.183197 z "
- style="opacity:1;fill:url(#linearGradient5114);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- transform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
- ry="5.2244902"
- rx="5.2244902"
- y="24.000008"
- x="24.000008"
- height="79.999992"
- width="79.999992"
- id="rect5122"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient5138);stroke-width:0.41826302;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5316)" />
- <path
- style="fill:none;fill-opacity:1;stroke:url(#radialGradient5539);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3550)"
- d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 34.5,81.6875 L 46.3125,93.5 L 63.34375,76.4375 L 80.40625,93.5 L 92.1875,81.6875 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
- id="path3528" />
- <path
- id="rect3376"
- d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 34.5,81.6875 L 46.3125,93.5 L 63.34375,76.4375 L 80.40625,93.5 L 92.1875,81.6875 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
- style="fill:url(#linearGradient5530);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:none;fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 34.5,81.6875 L 46.3125,93.5 L 63.34375,76.4375 L 80.40625,93.5 L 92.1875,81.6875 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
- id="path3381" />
- <path
- id="path3566"
- d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 48.59375,67.625 C 53.63521,68.40189 58.99498,68.8125 64.5625,68.8125 C 69.35411,68.8125 73.99127,68.48802 78.40625,67.90625 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
- style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3576)" />
- </g>
-</svg>
diff --git a/share/icons/svg/dialog-information.svg b/share/icons/svg/dialog-information.svg
deleted file mode 100644
index 35992e0fc..000000000
--- a/share/icons/svg/dialog-information.svg
+++ /dev/null
@@ -1,370 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" enable-background="new 0 0 121 120" overflow="visible" version="1.0" viewBox="0 0 121 120" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient5990"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter5956"><feGaussianBlur stdDeviation="0.55418773"/></filter><filter id="filter6074"><feGaussianBlur stdDeviation="1.9142018"/></filter><clipPath id="clipPath6080"><path d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" fill="url(#radialGradient6084)" filter="url(#filter6074)"/></clipPath><radialGradient id="radialGradient6084" cx="-166.5" cy="65.94" r="31.19" gradientTransform="matrix(1 0 0 .6578 0 22.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5990"/><radialGradient id="radialGradient3960" cx="-166.5" cy="65.94" r="31.19" gradientTransform="matrix(.5376 0 0 .6578 -77.01 22.56)" gradientUnits="userSpaceOnUse"><stop stop-color="#00c4cc" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient3962" cx="-166.5" cy="84.28" r="31.19" gradientTransform="matrix(0 1 -1 0 -40 140)" gradientUnits="userSpaceOnUse"><stop stop-color="#0081ec" offset="0"/><stop stop-color="#003871" offset="1"/></radialGradient><radialGradient id="radialGradient3966" cx="-166.5" cy="116.6" r="31.19" gradientTransform="matrix(0 1 -1 0 -40 140)" gradientUnits="userSpaceOnUse"><stop stop-color="#0081ec" offset="0"/><stop stop-color="#004c98" offset="1"/></radialGradient><linearGradient id="linearGradient3977" x1="-176.8" x2="-176.1" y1="72.39" y2="95.83" gradientTransform="matrix(1.685 0 0 1.685 353.9 -111.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5990"/><linearGradient id="linearGradient3980" x1="-158.8" x2="-181.7" y1="114.6" y2="92.12" gradientTransform="matrix(1.685 0 0 1.685 353.2 -117.4)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3983" x1="-176.8" x2="-176.8" y1="5.964" y2="109.1" gradientTransform="matrix(1.685 0 0 1.685 353.9 -111.2)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3987" x1="-150.5" x2="-150.5" y1="68.07" y2="117.8" gradientTransform="matrix(1.783 0 0 1.783 363.1 -110.6)" gradientUnits="userSpaceOnUse"><stop stop-color="#a4c0e4" offset="0"/><stop stop-color="#a4c0e4" stop-opacity="0" offset="1"/></linearGradient><filter id="filter4737"><feGaussianBlur stdDeviation="0.61380459"/></filter><linearGradient id="linearGradient4747" x1="-175.9" x2="-175" y1="125.1" y2="67.39" gradientUnits="userSpaceOnUse"><stop stop-color="#00316e" offset="0"/><stop stop-color="#00316e" stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient3879" cx="58.61" cy="39.36" r="11.46" gradientTransform="matrix(3.931 0 0 1.124 -171.8 -4.555)" gradientUnits="userSpaceOnUse"><stop stop-color="#00316e" offset="0"/><stop stop-color="#00316e" stop-opacity="0" offset="1"/></radialGradient><filter id="filter3881"><feGaussianBlur stdDeviation="0.45848289"/></filter><radialGradient id="radialGradient3892" cx="61.03" cy="77.89" r="17.02" gradientTransform="matrix(2.87 0 0 2.34 -113.1 -101.5)" gradientUnits="userSpaceOnUse"><stop stop-color="#00316e" offset="0"/><stop stop-color="#00316e" stop-opacity="0" offset="1"/></radialGradient><filter id="filter3894"><feGaussianBlur stdDeviation="0.8696875"/></filter><filter id="filter3925"><feGaussianBlur stdDeviation="0.1153125"/></filter></defs>
-
-<filter>
- <feGaussianBlur stdDeviation="3"/>
-</filter>
-<filter id="AI_Sfocatura_2">
- <feGaussianBlur stdDeviation="2"/>
-</filter>
-<filter id="AI_Sfocatura_1">
- <feGaussianBlur stdDeviation="1"/>
-</filter><g>
-<path transform="matrix(-1.733 0 0 1.733 -228.1 -101.8)" d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" fill="url(#linearGradient4747)" filter="url(#filter4737)"/><path transform="matrix(-1.733 0 0 1.733 -228.1 -101.8)" d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" fill="url(#radialGradient6084)" filter="url(#filter6074)"/><path transform="matrix(-1.721 0 0 -1.721 -226.1 220.6)" d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" clip-path="url(#clipPath6080)" fill="url(#radialGradient3960)" filter="url(#filter6074)"/><path transform="matrix(-1.721 0 0 1.721 -226.1 -100.6)" d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" fill="url(#radialGradient3962)"/><path transform="matrix(-1.721 0 0 1.721 -226.1 -100.6)" d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" clip-path="url(#clipPath6080)" fill="url(#radialGradient6084)" filter="url(#filter6074)"/><path transform="matrix(-1.597 0 0 1.597 -205.4 -89.24)" d="m-135.8 93.33a30.69 30.69 0 1 1-61.38 0 30.69 30.69 0 1 1 61.38 0z" fill="url(#radialGradient3966)"/><path d="m60.5 10.79c-27.05 0-48.98 21.93-48.98 48.98 0 2.518 0.1597 5.01 0.5267 7.426 0.00257 0.01697-0.002598 0.03569 0 0.05267 10.3 1.647 21.27 2.475 32.65 2.475 24.33 0 46.78-4.065 64.78-10.9-0.506-26.61-22.25-48.03-48.98-48.03z" fill="url(#linearGradient3987)" opacity=".8922"/></g><path transform="matrix(.8806 0 0 .8806 8.887 3.276)" d="m68.06 35.42a9.453 9.453 0 1 1-18.91 0 9.453 9.453 0 1 1 18.91 0z" fill="none" filter="url(#filter3881)" opacity=".3" stroke="url(#radialGradient3879)" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.294"/><path transform="matrix(-1.685 0 0 1.685 -116.5 -106.8)" d="m-134.1 98.62c-0.00282 0.1667-0.03125 0.3327-0.03125 0.5 0 16.05 13.04 29.06 29.09 29.06 16.05 0 29.06-13.01 29.06-29.06 0-0.1671 0.002813-0.3336 0-0.5-0.2673 15.82-13.18 28.56-29.06 28.56-15.88 0-28.79-12.74-29.06-28.56z" fill="#007fea" filter="url(#filter5956)"/><path d="m60.47 10.83c-27.05 0-48.98 21.93-48.98 48.98 0 0.2481-0.003157 0.4898 0 0.7373 0.5055-26.61 22.25-48.03 48.98-48.03 26.16 0 47.55 20.52 48.93 46.35 0.01523-0.005776 0.03744 0.005777 0.05267 0-0.506-26.61-22.25-48.03-48.98-48.03z" fill="url(#linearGradient3983)"/><path d="m60.47 10.83c-27.05 0-48.98 21.93-48.98 48.98 0 0.2481-0.003157 0.4898 0 0.7373 0.5055-26.61 22.25-48.71 48.98-48.71 26.16 0 47.55 21.2 48.93 47.02 0.01523-0.005776 0.03744 0.005777 0.05267 0-0.506-26.61-22.25-48.03-48.98-48.03z" fill="url(#linearGradient3977)" opacity=".8"/><symbol id="Nuovo_simbolo" viewBox="-8 -14 16 28">
-
- <path d="m8 14h-2-12-2v-2-24-2h2 12 2v2 24 2zm-14-2h12v-24h-12v24z" fill="#fff"/>
-
- <linearGradient id="XMLID_203_" x1="-4" x2="4" gradientUnits="userSpaceOnUse">
- <stop stop-color="#2E3436" offset="0"/>
- <stop stop-color="#555753" offset=".4024"/>
- <stop stop-color="#2E3436" offset="1"/>
- </linearGradient>
- <path d="m-4 10v-20h8v20h-8z" fill="url(#XMLID_203_)"/>
- <radialGradient id="XMLID_204_" cx="0" cy="-6.75" r="2.761" gradientUnits="userSpaceOnUse">
- <stop stop-color="#EEEEEC" offset=".4024"/>
- <stop stop-color="#555753" offset="1"/>
- </radialGradient>
- <path d="m-3-4.25v-5h6v5h-6z" fill="url(#XMLID_204_)"/>
-
- <radialGradient id="XMLID_205_" cx="-8119" cy="0" r="4" gradientTransform="matrix(.5 0 0 1 4060 0)" gradientUnits="userSpaceOnUse">
- <stop stop-color="#BABDB6" offset=".1065"/>
- <stop stop-color="#555753" offset="1"/>
- </radialGradient>
- <path d="m-2 4v-8h4v8h-4z" fill="url(#XMLID_205_)"/>
- <radialGradient id="XMLID_206_" cx="0" cy="6.75" r="2.761" fx="-.0415" fy="6.421" gradientUnits="userSpaceOnUse">
- <stop stop-color="#D3D7CF" offset=".1065"/>
- <stop stop-color="#555753" offset="1"/>
- </radialGradient>
- <path d="m-3 9.25v-5h6v5h-6z" fill="url(#XMLID_206_)"/>
-</symbol>
-<symbol viewBox="-20 -20 40 40">
-
- <path d="m0 20c-11.04 0-20-8.955-20-20s8.955-20 20-20 20 8.955 20 20-8.955 20-20 20zm0-38c-9.925 0-18 8.075-18 18s8.075 18 18 18 18-8.075 18-18-8.075-18-18-18z" fill="#fff"/>
-
- <path d="m-16 0c0-8.822 7.178-16 16-16s16 7.178 16 16-7.178 16-16 16-16-7.178-16-16z"/>
- <linearGradient id="XMLID_207_" x1="-10.79" x2="10.79" gradientUnits="userSpaceOnUse">
- <stop stop-color="#BABDB6" offset=".1065"/>
- <stop stop-color="#D3D7CF" offset=".7396"/>
- <stop stop-color="#eee" offset="1"/>
- </linearGradient>
- <path d="m-10.79 0c0-5.949 4.84-10.79 10.79-10.79s10.79 4.84 10.79 10.79c0 5.948-4.84 10.79-10.79 10.79s-10.79-4.841-10.79-10.79z" fill="url(#XMLID_207_)"/>
- <linearGradient id="XMLID_208_" x1="-.0004883" x2="-.0004888" y1="-10.79" y2=".5" gradientUnits="userSpaceOnUse">
- <stop stop-color="#BABDB6" offset=".1065"/>
- <stop stop-color="#D3D7CF" offset=".7396"/>
- <stop stop-color="#eee" offset="1"/>
- </linearGradient>
- <path d="m0-9.789c-5.78 0-10.5 4.572-10.76 10.29-8e-3 -0.167-0.026-0.331-0.026-0.5 0-5.949 4.84-10.79 10.79-10.79s10.79 4.84 10.79 10.79c0 0.169-0.018 0.333-0.025 0.5-0.264-5.717-4.984-10.29-10.76-10.29z" fill="url(#XMLID_208_)"/>
-
- <defs><path id="XMLID_27_" d="m-16 0c0-8.822 7.178-16 16-16s16 7.178 16 16-7.178 16-16 16-16-7.178-16-16z"/></defs>
- <clipPath id="XMLID_209_">
- <use width="121" height="120" xlink:href="#XMLID_27_"/>
- </clipPath>
- <g clip-path="url(#XMLID_209_)" filter="url(#AI_Sfocatura_1)">
- <linearGradient id="XMLID_210_" x1="-15" x2="15" y1="6.5" y2="6.5" gradientUnits="userSpaceOnUse">
- <stop offset=".1065"/>
- <stop stop-color="#fff" offset=".7396"/>
- <stop offset="1"/>
- </linearGradient>
- <path d="m-14-1c0 7.72 6.28 14 14 14s14-6.28 14-14h1c0 8.271-6.729 15-15 15s-15-6.729-15-15h1z" fill="url(#XMLID_210_)"/>
- </g>
-
-</symbol>
-<symbol viewBox="-14 -8 28 16">
-
- <path d="m-14 8v-2-12-2h2 24 2v2 12 2h-2-24-2zm2-14v12h24v-12h-24z" fill="#fff"/>
-
-
- <linearGradient id="XMLID_211_" x1="8185" x2="8193" y1="8339" y2="8339" gradientTransform="matrix(0,1,-1,0,8339,-8189)" gradientUnits="userSpaceOnUse">
- <stop stop-color="#2E3436" offset="0"/>
- <stop stop-color="#555753" offset=".4024"/>
- <stop stop-color="#2E3436" offset="1"/>
- </linearGradient>
- <path d="m-10-4h20v8h-20v-8z" fill="url(#XMLID_211_)"/>
-
- <radialGradient id="XMLID_212_" cx="8189" cy="8332" r="2.761" gradientTransform="matrix(0,1,-1,0,8339,-8189)" gradientUnits="userSpaceOnUse">
- <stop stop-color="#EEEEEC" offset=".4024"/>
- <stop stop-color="#555753" offset="1"/>
- </radialGradient>
- <path d="m4.25-3h5v6h-5v-6z" fill="url(#XMLID_212_)"/>
-
- <radialGradient id="XMLID_213_" cx="8259" cy="8339" r="4" gradientTransform="matrix(0 .5 -1 0 8339 -4130)" gradientUnits="userSpaceOnUse">
- <stop stop-color="#BABDB6" offset=".1065"/>
- <stop stop-color="#555753" offset="1"/>
- </radialGradient>
- <path d="m-4-2h8v4h-8v-4z" fill="url(#XMLID_213_)"/>
-
- <radialGradient id="XMLID_214_" cx="8189" cy="8346" r="2.761" fy="8345" gradientTransform="matrix(0,1,-1,0,8339,-8189)" gradientUnits="userSpaceOnUse">
- <stop stop-color="#D3D7CF" offset=".1065"/>
- <stop stop-color="#555753" offset="1"/>
- </radialGradient>
- <path d="m-9.25-3h5v6h-5v-6z" fill="url(#XMLID_214_)"/>
-</symbol>
-<symbol viewBox="-35.726 -35.726 71.451 71.451">
-
- <path d="m0 35.73c-19.73 0-35.72-16-35.72-35.73s16-35.73 35.72-35.73c19.73 0 35.73 16 35.73 35.73 0 19.73-16 35.73-35.73 35.73zm0-67.45c-8.474 0-16.44 3.3-22.43 9.292-5.993 5.994-9.294 13.96-9.294 22.43s3.3 16.44 9.293 22.43c5.993 5.993 13.96 9.293 22.43 9.293s16.44-3.3 22.43-9.293c5.992-5.994 9.293-13.96 9.293-22.43s-3.3-16.44-9.293-22.43c-5.993-5.992-13.96-9.292-22.43-9.292z" fill="#fff"/>
-
-
-
- <use width="121" height="120" xlink:href="#XMLID_34_"/>
- <clipPath id="XMLID_215_">
- <use width="121" height="120" xlink:href="#XMLID_34_"/>
- </clipPath>
- <g clip-path="url(#XMLID_215_)">
- <g filter="url(#AI_Sfocatura_2)">
- <path d="m-27.49 7.811c7.221 3.533 12.74 10.02 14.97 17.88-7.222-3.532-12.74-10.02-14.97-17.88z" fill="#fff"/>
- </g>
- <g filter="url(#AI_Sfocatura_2)">
- <path d="m24.17 15.22c-4.043 6.395-10.55 11.08-18.17 12.72 4.043-6.395 10.55-11.08 18.17-12.72z" fill="#fff"/>
- </g>
- </g>
-
- <g opacity=".8">
-
- <clipPath id="XMLID_216_">
- <use width="121" height="120" xlink:href="#XMLID_36_"/>
- </clipPath>
- <g clip-path="url(#XMLID_216_)">
- <g filter="url(#AI_Sfocatura_2)">
- <linearGradient id="XMLID_217_" x1="38" x2="-32.17" y1="-16.75" y2="-16.75" gradientUnits="userSpaceOnUse">
- <stop offset=".1065"/>
- <stop stop-color="#eee" offset=".497"/>
- <stop stop-color="#fff" offset=".7396"/>
- <stop offset="1"/>
- </linearGradient>
- <path d="m27.49-7.811c-7.221-3.531-12.74-10.02-14.97-17.88 7.222 3.534 12.74 10.02 14.97 17.88z" fill="url(#XMLID_217_)"/>
- </g>
- <g filter="url(#AI_Sfocatura_2)">
- <linearGradient id="XMLID_218_" x1="38" x2="-32.17" y1="-21.58" y2="-21.58" gradientUnits="userSpaceOnUse">
- <stop offset=".1065"/>
- <stop stop-color="#eee" offset=".497"/>
- <stop stop-color="#fff" offset=".7396"/>
- <stop offset="1"/>
- </linearGradient>
- <path d="m-24.17-15.22c4.042-6.395 10.55-11.08 18.17-12.72-4.043 6.394-10.55 11.08-18.17 12.72z" fill="url(#XMLID_218_)"/>
- </g>
- </g>
- </g>
- <linearGradient id="XMLID_219_" x1="-15.78" x2="15.78" y1="-11.05" y2="11.05" gradientUnits="userSpaceOnUse">
- <stop stop-color="#BABDB6" offset=".1065"/>
- <stop stop-color="#eee" offset=".497"/>
- <stop stop-color="#D3D7CF" offset=".7396"/>
- <stop stop-color="#eee" offset="1"/>
- </linearGradient>
- <path d="m-19.27 0c0-10.63 8.646-19.27 19.27-19.27s19.27 8.644 19.27 19.27-8.646 19.27-19.27 19.27-19.27-8.646-19.27-19.27z" fill="url(#XMLID_219_)"/>
-</symbol>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<path d="m78.82 14.34c16.25 7.746 29.61 24.95 29.97 44.06-18 6.837-43.45 10.6-67.77 10.6-9.474 0.2008-18.65-0.1274-29.03-1.783 0.002542 0.01697-0.002607 0.03569 0 0.05267 10.3 1.647 21.27 2.475 32.65 2.475 24.33 0 46.78-4.065 64.78-10.9-0.383-20.14-12.93-37.35-30.6-44.5z" fill="url(#linearGradient3980)" opacity=".6"/><path d="m68.06 86.47 7.562 6e-6v7.562h-30.25v-7.562l7.562-6e-6v-30.25h-7.562v-7.562h22.69v37.81z" fill="none" filter="url(#filter3894)" opacity=".5" stroke="url(#radialGradient3892)" stroke-width="3.781"/><g><path transform="matrix(.8806 0 0 .8806 8.887 3.276)" d="m68.06 35.42a9.453 9.453 0 1 1-18.91 0 9.453 9.453 0 1 1 18.91 0z" fill="#fff"/><path d="m68.06 86.47 7.562 6e-6v7.562h-30.25v-7.562l7.562-6e-6v-30.25h-7.562v-7.562h22.69v37.81z" fill="#eee"/><path transform="matrix(.9625 0 0 .9625 -.8268 -1.396)" d="m48 52v8l7.857-0.1432v14.12c5.452-0.2077 10.5-0.4639 15.71-1.044v-20.94h-23.57z" fill="#fff" filter="url(#filter3925)"/></g></svg>
diff --git a/share/icons/svg/dialog-ok.svg b/share/icons/svg/dialog-ok.svg
deleted file mode 100644
index 5ab1fad37..000000000
--- a/share/icons/svg/dialog-ok.svg
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- enable-background="new"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient2996">
- <stop
- style="stop-color:#a8dde0;stop-opacity:1"
- offset="0"
- id="stop2998" />
- <stop
- style="stop-color:#a8dde0;stop-opacity:0.20571429"
- offset="1"
- id="stop3001" />
- </linearGradient>
- <linearGradient
- id="linearGradient3436">
- <stop
- id="stop3438"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3440"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3415">
- <stop
- id="stop3417"
- offset="0"
- style="stop-color:#00c4cc;stop-opacity:1" />
- <stop
- id="stop3419"
- offset="1"
- style="stop-color:#00c4cc;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient2998">
- <stop
- id="stop3000"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3002"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2981">
- <stop
- id="stop2983"
- offset="0"
- style="stop-color:#001400;stop-opacity:1;" />
- <stop
- id="stop2985"
- offset="1"
- style="stop-color:#001400;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2971">
- <stop
- id="stop2973"
- offset="0"
- style="stop-color:#c2e2f4;stop-opacity:1" />
- <stop
- id="stop2975"
- offset="1"
- style="stop-color:#c0e0f2;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient2956">
- <stop
- id="stop2958"
- offset="0"
- style="stop-color:#0c1f39;stop-opacity:1" />
- <stop
- id="stop2960"
- offset="1"
- style="stop-color:#204d90;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient2948">
- <stop
- id="stop2950"
- offset="0"
- style="stop-color:#9abcee;stop-opacity:1" />
- <stop
- id="stop2952"
- offset="1"
- style="stop-color:#092042;stop-opacity:1" />
- </linearGradient>
- <foreignObject
- id="foreignObject7"
- height="1"
- width="1"
- y="0"
- x="0"
- requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
- <i:pgfRef
- xlink:href="#adobe_illustrator_pgf" />
- </foreignObject>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8464424,0,0,0.6348316,8.4693722,28.372944)"
- r="48.000004"
- fy="108.21593"
- fx="54.537575"
- cy="85.87426"
- cx="54.537575"
- id="radialGradient2954"
- xlink:href="#linearGradient2948" />
- <linearGradient
- gradientTransform="translate(0,4)"
- gradientUnits="userSpaceOnUse"
- y2="30.849478"
- x2="89.090881"
- y1="103.89701"
- x1="89.090881"
- id="linearGradient2962"
- xlink:href="#linearGradient2956" />
- <linearGradient
- gradientTransform="translate(-2.3931686e-5,4)"
- gradientUnits="userSpaceOnUse"
- y2="89.99453"
- x2="83.324677"
- y1="24.0625"
- x1="83.324677"
- id="linearGradient2977"
- xlink:href="#linearGradient2971" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0122143,7.8518053e-2,-7.0968649e-2,0.9148913,7.5716186,-3.7388379)"
- r="52.000004"
- fy="87.08094"
- fx="53.15992"
- cy="95.459297"
- cx="52.791927"
- id="radialGradient2987"
- xlink:href="#linearGradient2981" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-96.241137,-146.14811)"
- r="3.015625"
- fy="29.374895"
- fx="99.765625"
- cy="29.374895"
- cx="99.765625"
- id="radialGradient3004"
- xlink:href="#linearGradient2998" />
- <radialGradient
- r="3.015625"
- fy="29.374895"
- fx="99.765625"
- cy="29.374895"
- cx="99.765625"
- gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-96.241137,-146.14811)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3256"
- xlink:href="#linearGradient2998" />
- <radialGradient
- r="3.015625"
- fy="29.374895"
- fx="99.765625"
- cy="29.374895"
- cx="99.765625"
- gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-167.24116,-126.14811)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3288"
- xlink:href="#linearGradient2998" />
- <radialGradient
- r="3.015625"
- fy="29.374895"
- fx="99.765625"
- cy="29.374895"
- cx="99.765625"
- gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-96.241137,-146.14811)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3292"
- xlink:href="#linearGradient2998" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="47.378731"
- x2="71.603867"
- y1="96.884026"
- x1="71.603867"
- id="linearGradient3421"
- xlink:href="#linearGradient2996" />
- <filter
- id="filter3423">
- <feGaussianBlur
- id="feGaussianBlur3425"
- stdDeviation="0.425" />
- </filter>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="46.277084"
- x2="77.137749"
- y1="74.838577"
- x1="87.533279"
- id="linearGradient3442"
- xlink:href="#linearGradient3436" />
- <linearGradient
- y2="69.837845"
- x2="83.324677"
- y1="24.0625"
- x1="83.324677"
- gradientTransform="translate(0,4)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3453"
- xlink:href="#linearGradient3436" />
- <radialGradient
- r="3.015625"
- fy="29.374895"
- fx="99.765625"
- cy="29.374895"
- cx="99.765625"
- gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-167.24116,-126.14811)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3457"
- xlink:href="#linearGradient3415" />
- <filter
- id="filter3505">
- <feGaussianBlur
- id="feGaussianBlur3507"
- stdDeviation="0.4605" />
- </filter>
- <radialGradient
- r="52.000004"
- fy="51.919601"
- fx="53.633381"
- cy="51.919601"
- cx="53.633381"
- gradientTransform="matrix(1.0961401,8.7912098e-2,-0.1002304,1.2497316,1.0599334,-18.687387)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3511"
- xlink:href="#linearGradient2998" />
- <filter
- id="filter3521">
- <feBlend
- id="feBlend3523"
- in2="BackgroundImage"
- mode="lighten" />
- </filter>
- <filter
- height="1.2057828"
- y="-0.10289138"
- width="1.3646584"
- x="-0.18232919"
- id="filter3525">
- <feGaussianBlur
- id="feGaussianBlur3527"
- stdDeviation="0.45819706" />
- </filter>
- <filter
- height="1.2057828"
- y="-0.10289138"
- width="1.3646584"
- x="-0.18232919"
- id="filter3529">
- <feGaussianBlur
- id="feGaussianBlur3531"
- stdDeviation="0.45819706" />
- </filter>
- <filter
- height="1.3702595"
- y="-0.18512974"
- width="1.2076595"
- x="-0.10382974"
- id="filter3533">
- <feGaussianBlur
- id="feGaussianBlur3535"
- stdDeviation="0.45819702" />
- </filter>
- <filter
- height="1.2057828"
- y="-0.10289138"
- width="1.3646584"
- x="-0.18232919"
- id="filter3537">
- <feGaussianBlur
- id="feGaussianBlur3539"
- stdDeviation="0.45819706" />
- </filter>
- <filter
- height="1.3702595"
- y="-0.18512974"
- width="1.2076595"
- x="-0.10382974"
- id="filter3541">
- <feGaussianBlur
- id="feGaussianBlur3543"
- stdDeviation="0.45819702" />
- </filter>
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <g
- transform="translate(2.3931686e-5,0)"
- id="g2358"
- style="overflow:visible">
- <path
- d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z"
- id="path3503"
- style="fill:none;stroke:#081c39;stroke-width:8.09999999999999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3505)" />
- <path
- style="fill:none;stroke:url(#linearGradient2962);stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path2365"
- d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z" />
- <path
- style="fill:none;stroke:url(#radialGradient3511);stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.28571428999999998;filter:url(#filter3521)"
- id="path3509"
- d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z" />
- <path
- transform="matrix(1,0,0,-1,26,147.74979)"
- id="path3455"
- d="M 28.406226,44.03125 C 28.256338,44.028846 28.119644,44.047827 27.968726,44.0625 C 27.141534,44.144551 26.373396,44.489582 25.749976,45.03125 L 27.437476,54.71875 C 27.548391,54.605074 28.287843,53.870571 28.374976,53.78125 L 28.749976,54.15625 L 31.781226,45.8125 L 31.218726,45.25 C 30.477376,44.490406 29.455436,44.048081 28.406226,44.03125 z"
- style="opacity:0.40952380999999999;fill:url(#radialGradient3457);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3525)" />
- <path
- id="path3290"
- transform="matrix(-0.3420202,0.9396927,0.9396927,0.3420202,24.20981,-42.203299)"
- d="M 99.40625,24.03125 C 99.256362,24.028846 99.119668,24.047827 98.96875,24.0625 C 98.141558,24.144551 97.37342,24.489582 96.75,25.03125 L 98.4375,34.71875 C 98.548415,34.605074 99.287867,33.870571 99.375,33.78125 L 99.75,34.15625 L 102.78125,25.8125 L 102.21875,25.25 C 101.4774,24.490406 100.45546,24.048081 99.40625,24.03125 z"
- style="opacity:0.23809524000000001;fill:url(#radialGradient3292);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3533)" />
- <path
- style="opacity:0.77619048000000002;fill:url(#radialGradient3288);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3529)"
- d="M 28.406226,44.03125 C 28.256338,44.028846 28.119644,44.047827 27.968726,44.0625 C 27.141534,44.144551 26.373396,44.489582 25.749976,45.03125 L 27.437476,54.71875 C 27.548391,54.605074 28.287843,53.870571 28.374976,53.78125 L 28.749976,54.15625 L 31.781226,45.8125 L 31.218726,45.25 C 30.477376,44.490406 29.455436,44.048081 28.406226,44.03125 z"
- id="path3286" />
- <path
- style="opacity:0.37142857000000001;fill:url(#radialGradient3256);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3541)"
- d="M 99.40625,24.03125 C 99.256362,24.028846 99.119668,24.047827 98.96875,24.0625 C 98.141558,24.144551 97.37342,24.489582 96.75,25.03125 L 98.4375,34.71875 C 98.548415,34.605074 99.287867,33.870571 99.375,33.78125 L 99.75,34.15625 L 102.78125,25.8125 L 102.21875,25.25 C 101.4774,24.490406 100.45546,24.048081 99.40625,24.03125 z"
- transform="matrix(0.3420202,0.9396927,-0.9396927,0.3420202,104.53338,-62.203299)"
- id="path3254" />
- <path
- id="path2989"
- transform="translate(-2.3931686e-5,0)"
- d="M 99.40625 24.03125 C 99.256362 24.028846 99.119668 24.047827 98.96875 24.0625 C 98.141558 24.144551 97.37342 24.489582 96.75 25.03125 L 98.4375 34.71875 C 98.548415 34.605074 99.287867 33.870571 99.375 33.78125 L 99.75 34.15625 L 102.78125 25.8125 L 102.21875 25.25 C 101.4774 24.490406 100.45546 24.048081 99.40625 24.03125 z "
- style="fill:url(#radialGradient3004);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3537);opacity:0.87142856999999985" />
- <path
- d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z"
- id="path2979"
- style="fill:none;stroke:url(#radialGradient2987);stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1" />
- <path
- d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z"
- id="path24"
- style="fill:url(#radialGradient2954);fill-opacity:1" />
- <path
- id="path2964"
- d="M 99.374976,28.0625 C 99.374973,28.0625 64.117655,64.202251 54.406226,74.15625 C 46.258227,65.805965 28.624976,47.75 28.624976,47.75 L 15.999976,60.6875 L 32.468726,77.5625 C 32.657637,77.562987 32.842103,77.5625 33.031226,77.5625 C 50.561025,77.5625 67.167517,75.469361 82.062476,71.71875 L 111.99998,41 L 99.374976,28.0625 z"
- style="fill:url(#linearGradient2977);fill-opacity:1" />
- <path
- style="fill:none;fill-opacity:1;stroke:url(#linearGradient3421);stroke-opacity:1;filter:url(#filter3423)"
- id="path3413"
- d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z" />
- <path
- id="path3427"
- transform="translate(-2.3931686e-5,0)"
- d="M 99.375,28.0625 C 99.375,28.0625 98.974759,28.493841 98.96875,28.5 L 111.15625,40.78125 L 81.15625,71 C 66.229051,74.687634 50.098993,77.218746 32.53125,77.21875 C 32.404895,77.21875 32.281159,77.218749 32.15625,77.21875 L 32.46875,77.5625 C 32.657661,77.562987 32.842127,77.5625 33.03125,77.5625 C 50.561049,77.5625 67.167541,75.469361 82.0625,71.71875 L 112,41 L 99.375,28.0625 z"
- style="fill:url(#linearGradient3442);fill-opacity:1;opacity:1" />
- <path
- id="path3444"
- transform="translate(-2.3931686e-5,0)"
- d="M 99.375 28.0625 C 99.374997 28.0625 64.117679 64.202251 54.40625 74.15625 C 46.258251 65.805965 28.625 47.75 28.625 47.75 L 16 60.6875 L 16.5 61.1875 L 28.625 48.75 C 28.625 48.75 46.258251 66.805965 54.40625 75.15625 C 64.117679 65.202251 99.374997 29.0625 99.375 29.0625 L 111.5 41.5 L 112 41 L 99.375 28.0625 z "
- style="fill:url(#linearGradient3453);fill-opacity:1" />
- </g>
- </g>
-</svg>
diff --git a/share/icons/svg/dialog-warning.svg b/share/icons/svg/dialog-warning.svg
deleted file mode 100644
index 80e215b6e..000000000
--- a/share/icons/svg/dialog-warning.svg
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient3400">
- <stop
- id="stop3402"
- offset="0"
- style="stop-color:#ffff00;stop-opacity:1;" />
- <stop
- id="stop3404"
- offset="1"
- style="stop-color:#ffff00;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3377">
- <stop
- id="stop3379"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3381"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3320">
- <stop
- id="stop3322"
- offset="0"
- style="stop-color:#ea3b18;stop-opacity:1;" />
- <stop
- id="stop3324"
- offset="1"
- style="stop-color:#ea3b18;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3282">
- <stop
- id="stop3284"
- offset="0"
- style="stop-color:#ac4311;stop-opacity:1;" />
- <stop
- id="stop3286"
- offset="1"
- style="stop-color:#ea5418;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3252">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop3254" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1"
- id="stop3256" />
- </linearGradient>
- <linearGradient
- id="linearGradient4193">
- <stop
- id="stop4195"
- offset="0"
- style="stop-color:#ffc404;stop-opacity:1;" />
- <stop
- id="stop4197"
- offset="1"
- style="stop-color:#ffc404;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4068">
- <stop
- id="stop4070"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop4072"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4056">
- <stop
- id="stop4058"
- offset="0"
- style="stop-color:#ffd500;stop-opacity:1" />
- <stop
- id="stop4060"
- offset="1"
- style="stop-color:#ffff99;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient3971">
- <stop
- id="stop3973"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3975"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3954">
- <stop
- id="stop3956"
- offset="0"
- style="stop-color:#ffffbf;stop-opacity:1" />
- <stop
- id="stop3958"
- offset="1"
- style="stop-color:#ffffbf;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient3932">
- <stop
- style="stop-color:#ffff00;stop-opacity:1"
- offset="0"
- id="stop3934" />
- <stop
- style="stop-color:#ff7e00;stop-opacity:1"
- offset="1"
- id="stop3936" />
- </linearGradient>
- <linearGradient
- id="linearGradient3851">
- <stop
- id="stop3853"
- offset="0"
- style="stop-color:#ffdd00;stop-opacity:1" />
- <stop
- id="stop3855"
- offset="1"
- style="stop-color:#e15800;stop-opacity:1" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(4.125192,-0.4335743,0.1499795,1.4269598,-211.59742,-0.8510997)"
- r="48.004357"
- fy="85.945168"
- fx="63.683678"
- cy="85.945168"
- cx="63.683678"
- id="radialGradient3849"
- xlink:href="#linearGradient3932" />
- <linearGradient
- gradientTransform="matrix(1.0003186,0,0,1.0920256,4.8948421e-3,-2.1497485)"
- gradientUnits="userSpaceOnUse"
- y2="108.00891"
- x2="74.685875"
- y1="37.71302"
- x1="74.685875"
- id="linearGradient3857"
- xlink:href="#linearGradient3851" />
- <filter
- id="filter3950">
- <feGaussianBlur
- id="feGaussianBlur3952"
- stdDeviation="0.45503695" />
- </filter>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="42.471062"
- x2="72.742889"
- y1="102.71508"
- x1="72.742889"
- id="linearGradient3960"
- xlink:href="#linearGradient3954" />
- <linearGradient
- gradientTransform="matrix(1.0152964,0,0,1.0920256,-1.3711972,-2.1497485)"
- gradientUnits="userSpaceOnUse"
- y2="82.910049"
- x2="67.189468"
- y1="15.087444"
- x1="65.980019"
- id="linearGradient3977"
- xlink:href="#linearGradient3971" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(8.2879791,-4.7852502,0.5464445,0.9465058,-219.3366,117.99253)"
- r="5.9950326"
- fy="102"
- fx="22.004967"
- cy="102"
- cx="22.004967"
- id="radialGradient4062"
- xlink:href="#linearGradient4056" />
- <radialGradient
- r="5.9950326"
- fy="102"
- fx="22.004967"
- cy="102"
- cx="22.004967"
- gradientTransform="matrix(-8.2879791,-4.7852502,-0.5464445,0.9465058,347.61812,117.99253)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient4066"
- xlink:href="#linearGradient4056" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-12.343127,128,293.46933)"
- r="4.21875"
- fy="21.994045"
- fx="64"
- cy="21.994045"
- cx="64"
- id="radialGradient4076"
- xlink:href="#linearGradient4068" />
- <filter
- id="filter4102"
- height="1.143004"
- y="-0.071501976"
- width="1.2035852"
- x="-0.1017926">
- <feGaussianBlur
- id="feGaussianBlur4104"
- stdDeviation="0.35786462" />
- </filter>
- <linearGradient
- y2="77.707237"
- x2="72.923073"
- y1="22.873119"
- x1="56.87429"
- gradientTransform="matrix(1.0229652,0,0,1.0920256,-1.4644437,-1.8338916)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4179"
- xlink:href="#linearGradient3252" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="149.0795"
- x2="82.169357"
- y1="20.939892"
- x1="64.653976"
- id="linearGradient4199"
- xlink:href="#linearGradient4193" />
- <filter
- id="filter3274">
- <feGaussianBlur
- id="feGaussianBlur3276"
- stdDeviation="1.4432763" />
- </filter>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.4073524,-4.9145829e-2,3.3701767e-2,0.9650923,-26.955636,5.4114576)"
- r="52.025275"
- fy="25.956657"
- fx="64.025276"
- cy="25.956657"
- cx="64.025276"
- id="radialGradient3326"
- xlink:href="#linearGradient3320" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="46.195744"
- x2="61.264969"
- y1="82.805801"
- x1="85.398132"
- id="linearGradient3383"
- xlink:href="#linearGradient3377" />
- <linearGradient
- y2="105.4052"
- x2="67.096779"
- y1="35.311508"
- x1="67.096779"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3391"
- xlink:href="#linearGradient3282" />
- <filter
- id="filter3396"
- height="1.0607916"
- y="-0.030395781"
- width="1.2281187"
- x="-0.11405937">
- <feGaussianBlur
- id="feGaussianBlur3398"
- stdDeviation="0.8554453" />
- </filter>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(4.5093795,0,0,4.2142344,-223.72294,-220.10349)"
- r="9"
- fy="68.477737"
- fx="63.75"
- cy="68.477737"
- cx="63.75"
- id="radialGradient3406"
- xlink:href="#linearGradient3400" />
- <radialGradient
- r="9"
- fy="74.355972"
- fx="63.75"
- cy="74.355972"
- cx="63.75"
- gradientTransform="matrix(4.5093795,0,0,1.3282315,-223.72294,-5.5119394)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3410"
- xlink:href="#linearGradient3400" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- transform="matrix(1.0967227,0,0,1.1002593,-6.1902535,-2.2094077)"
- id="path4137"
- d="M 63.594525,15.80685 C 61.088483,15.954871 58.821624,17.466363 57.570338,19.823647 L 16.791222,96.142808 C 15.466493,98.629922 15.467558,101.69401 16.794017,104.18005 C 18.120475,106.66607 20.570634,108.19604 23.220884,108.1932 L 104.77911,108.1932 C 107.42937,108.19604 109.87952,106.66607 111.20598,104.18005 C 112.53244,101.69401 112.5335,98.629922 111.20877,96.142808 L 70.429661,19.823647 C 69.033862,17.19393 66.390069,15.640255 63.594525,15.80685 z "
- style="opacity:1;fill:#ffc404;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4199);stroke-width:1.82068181;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3274)" />
- <path
- id="path3833"
- d="M 63.58764,15.32266 C 60.8828,15.483628 58.436118,17.127313 57.085569,19.690763 L 13.071555,102.6847 C 11.641738,105.38934 11.642888,108.72141 13.074571,111.42487 C 14.506254,114.12833 17.150778,115.7921 20.011265,115.78901 L 108.0393,115.78901 C 110.89979,115.7921 113.5443,114.12833 114.97599,111.42487 C 116.40766,108.72141 116.40881,105.38934 114.979,102.6847 L 70.964989,19.690763 C 69.458464,16.831053 66.604947,15.141495 63.58764,15.32266 z "
- style="fill:url(#linearGradient3857);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:url(#radialGradient3326);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.36734694"
- d="M 63.58764,15.32266 C 60.8828,15.483628 58.436118,17.127313 57.085569,19.690763 L 13.071555,102.6847 C 11.641738,105.38934 11.642888,108.72141 13.074571,111.42487 C 14.506254,114.12833 17.150778,115.7921 20.011265,115.78901 L 108.0393,115.78901 C 110.89979,115.7921 113.5443,114.12833 114.97599,111.42487 C 116.40766,108.72141 116.40881,105.38934 114.979,102.6847 L 70.964989,19.690763 C 69.458464,16.831053 66.604947,15.141495 63.58764,15.32266 z "
- id="path3318" />
- <path
- transform="matrix(1.0919838,0,0,1.0920256,-7.2516225,-2.1497485)"
- id="path4051"
- d="M 63.59375,16 C 62.204553,16.082054 60.889465,16.602887 59.78125,17.4375 L 64,28 L 68.21875,17.4375 C 66.88987,16.43384 65.2712,15.900036 63.59375,16 z "
- style="opacity:0.92195123;fill:url(#radialGradient4076);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4102)" />
- <path
- id="path4041"
- d="M 25.323922,102.6847 L 12.493113,104.83463 C 11.963856,107.03044 12.235578,109.40323 13.312101,111.42091 C 14.754514,114.12437 17.425695,115.7921 20.307621,115.78901 L 23.139955,115.78901 L 25.323922,102.6847 z "
- style="opacity:0.80102041;fill:url(#radialGradient4062);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="opacity:0.71938776;fill:url(#radialGradient4066);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 102.9576,102.6847 L 115.78841,104.83463 C 116.31767,107.03044 116.04595,109.40323 114.96942,111.42091 C 113.52701,114.12437 110.85583,115.7921 107.9739,115.78901 L 105.14157,115.78901 L 102.9576,102.6847 z "
- id="path4064" />
- <path
- id="path3831"
- d="M 63.78127,20.006639 C 62.429404,20.087352 61.206563,20.911554 60.531566,22.196957 L 16.535558,105.42905 C 15.820943,106.78523 15.821517,108.45607 16.537067,109.81166 C 17.252613,111.16727 18.574334,112.00154 20.003992,112 L 107.996,112 C 109.42567,112.00154 110.7474,111.16727 111.46293,109.81166 C 112.17849,108.45607 112.17905,106.78523 111.46444,105.42905 L 67.468436,22.196957 C 66.715482,20.762999 65.289306,19.915795 63.78127,20.006639 L 63.78127,20.006639 z "
- style="fill:url(#radialGradient3849);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="font-size:83.71386719px;font-style:normal;font-weight:normal;fill:none;fill-opacity:1;stroke:url(#radialGradient3406);stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Sans;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3396);opacity:0.75"
- d="M 63.40625,36.71875 C 60.266222,36.913888 57.331988,39.264296 57.875,44 L 61.4375,79.71875 C 62.189089,79.591351 62.962322,79.5 63.75,79.5 C 64.69875,79.5 65.636426,79.597988 66.53125,79.78125 L 70.09375,44 C 70.784031,39.043508 66.964948,36.497594 63.40625,36.71875 z "
- id="path3394" />
- <path
- transform="matrix(0.9982143,0,0,1.0992242,-0.2503837,-2.6968261)"
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3960);stroke-width:0.95465171;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3950)"
- d="M 63.78125,20 C 62.429261,20.073701 61.206309,20.826287 60.53125,22 L 16.53125,98 C 15.816569,99.238357 15.817144,100.764 16.532758,102.00181 C 17.248371,103.23963 18.570212,104.00141 20,104 L 108,104 C 109.42979,104.00141 110.75163,103.23963 111.46724,102.00181 C 112.18286,100.764 112.18343,99.238357 111.46875,98 L 67.46875,22 C 66.715728,20.69064 65.289423,19.917051 63.78125,20 L 63.78125,20 z "
- id="path3948" />
- <path
- id="path3962"
- d="M 63.385681,19.690763 C 62.013012,19.771246 60.771353,20.593089 60.085969,21.874814 L 34.100723,70.162819 L 34.132451,70.162819 L 60.085969,23.137469 C 60.771353,21.888035 62.013012,21.100125 63.385681,21.021668 C 64.916924,20.933369 66.365047,21.743636 67.129587,23.137469 L 92.35336,68.797787 C 92.363486,68.795622 92.374963,68.799955 92.385087,68.797787 L 67.129587,21.874814 C 66.365047,20.444959 64.916924,19.60018 63.385681,19.690763 z "
- style="fill:url(#linearGradient3977);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3408"
- d="M 63.75,86.25 C 59.886,86.25 56.75,89.386 56.75,93.25 C 56.75,97.114 59.886,100.25 63.75,100.25 C 67.614,100.25 70.75,97.114 70.75,93.25 C 70.75,89.386 67.614,86.25 63.75,86.25 z "
- style="font-size:83.71386719px;font-style:normal;font-weight:normal;fill:none;fill-opacity:1;stroke:url(#radialGradient3410);stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Sans;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3396);opacity:0.75" />
- <path
- id="text3278"
- d="M 63.40625 36.71875 C 60.266222 36.913888 57.331988 39.264296 57.875 44 L 61.4375 79.71875 C 62.189089 79.591351 62.962322 79.5 63.75 79.5 C 64.69875 79.5 65.636426 79.597988 66.53125 79.78125 L 70.09375 44 C 70.784031 39.043508 66.964948 36.497594 63.40625 36.71875 z M 63.75 86.25 C 59.886 86.25 56.75 89.386 56.75 93.25 C 56.75 97.114 59.886 100.25 63.75 100.25 C 67.614 100.25 70.75 97.114 70.75 93.25 C 70.75 89.386 67.614 86.25 63.75 86.25 z "
- style="font-size:83.71386719px;font-style:normal;font-weight:normal;fill:url(#linearGradient3391);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Sans" />
- <path
- id="path3895"
- d="M 63.781556,20.00662 C 62.398518,20.087103 61.147481,20.908946 60.456919,22.190671 L 34.275402,70.478676 C 42.305309,71.743881 50.929542,72.423846 59.913469,72.423846 C 71.74643,72.423846 82.957077,71.247715 93,69.113644 L 67.55374,22.190671 C 66.783425,20.760816 65.324364,19.916037 63.781556,20.00662 z "
- style="opacity:0.86734697;fill:url(#linearGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3368"
- d="M 64.34375 20.03125 C 65.551601 20.210711 66.627874 20.975908 67.25 22.125 L 92.125 67.75 C 82.312377 69.824859 71.342862 70.968751 59.78125 70.96875 C 51.106743 70.96875 42.798082 70.296099 35.03125 69.09375 L 34.28125 70.46875 C 42.311157 71.733955 50.922323 72.4375 59.90625 72.4375 C 71.739213 72.437503 82.957077 71.259071 93 69.125 L 67.5625 22.1875 C 66.888473 20.936376 65.667116 20.151811 64.34375 20.03125 z "
- style="opacity:1;fill:url(#linearGradient3383);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
-</svg>
diff --git a/share/icons/svg/document-close.svg b/share/icons/svg/document-close.svg
deleted file mode 100644
index 44b4a6bed..000000000
--- a/share/icons/svg/document-close.svg
+++ /dev/null
@@ -1,426 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- style="overflow:visible"
- xml:space="preserve"
- id="Layer_1"
- viewBox="0 0 128 128"
- height="128"
- width="128"
- version="1.0"><metadata
- id="metadata100"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs105"><filter
- id="filter4292"><feGaussianBlur
- stdDeviation="2.1604423"
- id="feGaussianBlur4294" /></filter><linearGradient
- gradientUnits="userSpaceOnUse"
- xlink:href="#XMLID_9_"
- id="linearGradient2291"
- y2="94.536598"
- x2="86.535599"
- y1="102.3447"
- x1="94.343803" /><linearGradient
- gradientUnits="userSpaceOnUse"
- xlink:href="#XMLID_10_"
- id="linearGradient2293"
- y2="94.586502"
- x2="86.586502"
- y1="103"
- x1="95" /><linearGradient
- gradientUnits="userSpaceOnUse"
- xlink:href="#XMLID_11_"
- id="linearGradient2295"
- y2="95.292999"
- x2="87.292999"
- y1="103"
- x1="95" /><linearGradient
- gradientUnits="userSpaceOnUse"
- xlink:href="#XMLID_12_"
- id="linearGradient2297"
- y2="96.000198"
- x2="88.000198"
- y1="104"
- x1="96" /><radialGradient
- gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
- gradientUnits="userSpaceOnUse"
- xlink:href="#XMLID_8_"
- id="radialGradient2272"
- r="139.55859"
- cy="112.3047"
- cx="102" /><radialGradient
- gradientTransform="translate(2.4e-6,0)"
- gradientUnits="userSpaceOnUse"
- xlink:href="#XMLID_7_"
- id="radialGradient2275"
- r="139.5585"
- cy="112.3047"
- cx="102" /><filter
- id="filter3241"><feGaussianBlur
- stdDeviation="1.0394514"
- id="feGaussianBlur3243" /></filter><linearGradient
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient5958-4"
- y2="-383.9971"
- x2="-12.0029"
- y1="-383.9971"
- x1="-84.002403"><stop
- offset="0"
- style="stop-color:#8c0000;stop-opacity:1"
- id="stop5960-6" /><stop
- offset="1"
- style="stop-color:#bf0000;stop-opacity:1"
- id="stop5962-2" /></linearGradient><linearGradient
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4770-5"
- y2="-383.9971"
- x2="-12.0029"
- y1="-383.9971"
- x1="-84.002403"><stop
- offset="0"
- style="stop-color:#ffbe00;stop-opacity:1"
- id="stop4772-8" /><stop
- offset="1"
- style="stop-color:#f5d600;stop-opacity:0"
- id="stop4774-6" /></linearGradient><filter
- id="filter3162"><feGaussianBlur
- stdDeviation="0.96794009"
- id="feGaussianBlur3164" /></filter><linearGradient
- id="linearGradient4296-2"><stop
- offset="0"
- style="stop-color:#ff0000;stop-opacity:1"
- id="stop4298-8" /><stop
- offset="1"
- style="stop-color:#650000;stop-opacity:1"
- id="stop4300-4" /></linearGradient><clipPath
- id="clipPath5163-7"><circle
- style="fill:url(#linearGradient5167);fill-opacity:1"
- id="circle5165-2"
- r="36"
- cy="92"
- cx="343.99899" /></clipPath><filter
- id="filter7317-4"><feGaussianBlur
- stdDeviation="2.8805897"
- id="feGaussianBlur7319-0" /></filter><linearGradient
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3711-6"
- y2="-383.9975"
- x2="-23.516129"
- y1="-383.9971"
- x1="-84.002403"><stop
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop3713-2" /><stop
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0"
- id="stop3715-9" /></linearGradient><linearGradient
- id="linearGradient6740-9"><stop
- offset="0"
- style="stop-color:#4d0000;stop-opacity:0"
- id="stop6742-0" /><stop
- offset="0.5"
- style="stop-color:#4d0000;stop-opacity:1"
- id="stop6748-8" /><stop
- offset="1"
- style="stop-color:#4d0000;stop-opacity:0"
- id="stop6744-1" /></linearGradient><filter
- id="filter5943-3"><feGaussianBlur
- stdDeviation="1.04"
- id="feGaussianBlur5945-1" /></filter><linearGradient
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
- gradientUnits="userSpaceOnUse"
- xlink:href="#linearGradient5958-4"
- id="linearGradient3219"
- y2="-373.1243"
- x2="-56.357521"
- y1="-381.09921"
- x1="-86.120354" /><radialGradient
- gradientTransform="matrix(0.6662862,-0.6560105,0.9893764,1.0048737,31.05592,226.43791)"
- gradientUnits="userSpaceOnUse"
- xlink:href="#linearGradient4770-5"
- id="radialGradient3221"
- fy="85.250488"
- fx="345.80753"
- r="36"
- cy="85.250488"
- cx="345.80753" /><linearGradient
- gradientUnits="userSpaceOnUse"
- xlink:href="#linearGradient4296-2"
- id="linearGradient3223"
- y2="87.759453"
- x2="336.98077"
- y1="120.81158"
- x1="328.12448" /><linearGradient
- gradientTransform="translate(20.000035,-56.000003)"
- gradientUnits="userSpaceOnUse"
- xlink:href="#linearGradient6740-9"
- id="linearGradient3227"
- y2="76.633896"
- x2="90.537666"
- y1="103.01254"
- x1="117.81589" /><linearGradient
- gradientTransform="matrix(0,0.73957696,-0.73957696,0,-1.6559147,63.320784)"
- gradientUnits="userSpaceOnUse"
- xlink:href="#linearGradient3711-6"
- id="linearGradient3253"
- y2="-131.93112"
- x2="-45.096584"
- y1="-131.93112"
- x1="-80.00296" /></defs>
-
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- id="XMLID_7_"
- r="139.5585"
- cy="112.3047"
- cx="102">
- <stop
- offset="0"
- style="stop-color:#00537d;stop-opacity:1"
- id="stop16" />
- <stop
- offset="0.0151"
- style="stop-color:#186389;stop-opacity:1"
- id="stop18" />
- <stop
- offset="0.0558"
- style="stop-color:#558ca8;stop-opacity:1"
- id="stop20" />
- <stop
- offset="0.0964"
- style="stop-color:#89afc3;stop-opacity:1"
- id="stop22" />
- <stop
- offset="0.1357"
- style="stop-color:#b3ccd8;stop-opacity:1"
- id="stop24" />
- <stop
- offset="0.1737"
- style="stop-color:#d4e2e9;stop-opacity:1"
- id="stop26" />
- <stop
- offset="0.20990001"
- style="stop-color:#ecf2f5;stop-opacity:1"
- id="stop28" />
- <stop
- offset="0.24349999"
- style="stop-color:#fafcfd;stop-opacity:1"
- id="stop30" />
- <stop
- offset="0.27219999"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop32" />
-</radialGradient>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- id="XMLID_8_"
- r="139.55859"
- cy="112.3047"
- cx="102">
- <stop
- offset="0"
- style="stop-color:#535557;stop-opacity:1"
- id="stop37" />
-
- <stop
- offset="0.11366145"
- style="stop-color:#898a8c;stop-opacity:1"
- id="stop41" />
-
-
- <stop
- offset="0.20296688"
- style="stop-color:#ececec;stop-opacity:1"
- id="stop47" />
- <stop
- offset="0.23630001"
- style="stop-color:#fafafa;stop-opacity:1"
- id="stop49" />
- <stop
- offset="0.27219999"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop51" />
- <stop
- offset="0.53130001"
- style="stop-color:#fafafa;stop-opacity:1"
- id="stop53" />
- <stop
- offset="0.84490001"
- style="stop-color:#ebecec;stop-opacity:1"
- id="stop55" />
- <stop
- offset="1"
- style="stop-color:#e1e2e3;stop-opacity:1"
- id="stop57" />
-</radialGradient>
-
-<linearGradient
- gradientUnits="userSpaceOnUse"
- id="XMLID_9_"
- y2="94.536598"
- x2="86.535599"
- y1="102.3447"
- x1="94.343803">
- <stop
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop62" />
- <stop
- offset="1"
- style="stop-color:#555753;stop-opacity:1"
- id="stop64" />
-</linearGradient>
-
-<linearGradient
- gradientUnits="userSpaceOnUse"
- id="XMLID_10_"
- y2="94.586502"
- x2="86.586502"
- y1="103"
- x1="95">
- <stop
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop69" />
- <stop
- offset="1"
- style="stop-color:#555753;stop-opacity:1"
- id="stop71" />
-</linearGradient>
-
-<linearGradient
- gradientUnits="userSpaceOnUse"
- id="XMLID_11_"
- y2="95.292999"
- x2="87.292999"
- y1="103"
- x1="95">
- <stop
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop76" />
- <stop
- offset="1"
- style="stop-color:#393b38;stop-opacity:1"
- id="stop78" />
-</linearGradient>
-
-<linearGradient
- gradientUnits="userSpaceOnUse"
- id="XMLID_12_"
- y2="96.000198"
- x2="88.000198"
- y1="104"
- x1="96">
- <stop
- offset="0"
- style="stop-color:#888a85;stop-opacity:1"
- id="stop83" />
- <stop
- offset="0.0072"
- style="stop-color:#8c8e89;stop-opacity:1"
- id="stop85" />
- <stop
- offset="0.0673"
- style="stop-color:#abaca9;stop-opacity:1"
- id="stop87" />
- <stop
- offset="0.1347"
- style="stop-color:#c5c6c4;stop-opacity:1"
- id="stop89" />
- <stop
- offset="0.2115"
- style="stop-color:#dbdbda;stop-opacity:1"
- id="stop91" />
- <stop
- offset="0.3012"
- style="stop-color:#ebebeb;stop-opacity:1"
- id="stop93" />
- <stop
- offset="0.4122"
- style="stop-color:#f7f7f6;stop-opacity:1"
- id="stop95" />
- <stop
- offset="0.5679"
- style="stop-color:#fdfdfd;stop-opacity:1"
- id="stop97" />
- <stop
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1"
- id="stop99" />
-</linearGradient>
-<path
- style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
- id="path6594"
- transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
- d="m 23,9 0.04082,112 61.131184,0 c 0.53,0 1.039,-0.211 1.414,-0.586 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9 23,9 z" /><path
- style="fill:url(#radialGradient2275)"
- id="path34"
- d="m 16.000002,8 0,112 61.172,0 c 0.53,0 1.039,-0.211 1.414,-0.586 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 16.000002,8 z" /><path
- style="fill:url(#radialGradient2272);fill-opacity:1"
- id="path59"
- d="m 18.978725,10 c -0.539276,0 -0.978723,0.440836 -0.978723,0.981818 l 0,106.036362 c 0,0.54197 0.439447,0.98182 0.978723,0.98182 l 57.913022,0 c 0.257404,0 0.509915,-0.10407 0.691957,-0.28767 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 l 0,-73.805237 C 110,10.440836 109.56153,10 109.02128,10 l -90.042555,0 z" /><g
- id="g1973"
- transform="translate(2.4e-6,0)"><path
- style="opacity:0.1;fill:url(#linearGradient2291)"
- id="path66"
- d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 c -1.654,0 -3,1.346 -3,3 0,5.035 -6.664,23.664 -6.414,23.414 l 32.828,-32.828 z" /><path
- style="opacity:0.1;fill:url(#linearGradient2293)"
- id="path73"
- d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 c -1.103,0 -2,0.897 -2,2 0,9.444 -7.789,23.789 -7.414,23.414 l 32.828,-32.828 z" /><path
- style="opacity:0.1;fill:url(#linearGradient2295)"
- id="path80"
- d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 c -0.553,0 -1,0.447 -1,1 0,9.807 -8.653,23.653 -8.414,23.414 l 32.828,-32.828 z" /><path
- style="fill:url(#linearGradient2297)"
- id="path101"
- d="m 78.586,119.414 c 0,0 11.914,-9.914 17.414,-15.414 5.5,-5.5 15.414,-17.414 15.414,-17.414 0,0 -13.164,9.414 -23.414,9.414 0,10.25 -9.414,23.414 -9.414,23.414 z" /></g>
-
-<g
- id="g3258"><circle
- style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter4292)"
- id="circle4274"
- transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45865,35.850447)"
- r="36"
- cy="92"
- cx="343.99899" /><circle
- style="fill:url(#linearGradient3219);fill-opacity:1"
- id="circle3581_2_-1"
- transform="matrix(-0.85930821,0.23025097,-0.23025097,-0.85930821,412.75132,31.883223)"
- r="36"
- cy="92"
- cx="343.99899" /><circle
- style="fill:url(#radialGradient3221);fill-opacity:1;filter:url(#filter3162)"
- id="circle4383-0"
- transform="matrix(-0.64448122,0.17268815,-0.17268815,-0.64448122,333.55529,31.920663)"
- r="36"
- cy="92"
- cx="343.99899" /><circle
- style="opacity:0.8;fill:none;stroke:url(#linearGradient3223);stroke-width:6.75138187;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter7317-4)"
- id="circle4776-3"
- clip-path="url(#clipPath5163-7)"
- transform="matrix(-0.85930821,-0.23025097,-0.23025097,0.85930821,412.75132,32.182673)"
- r="36"
- cy="92"
- cx="343.99899" /><path
- style="opacity:0.8;fill:url(#linearGradient3253);fill-opacity:1"
- id="circle16776-4"
- d="m 95.967113,4.1524808 c -11.357389,0 -20.847522,8.0198492 -23.134892,18.6974332 4.559347,4.250263 13.21047,7.118425 23.134892,7.118425 9.924437,0 18.575547,-2.868162 23.134887,-7.118425 C 116.81464,12.17233 107.3245,4.1524808 95.967113,4.1524808 z" /><g
- id="g6850-0"
- transform="matrix(0.70783432,0.70783432,-0.70783432,0.70783432,35.093313,-79.804896)"><path
- style="fill:none;stroke:url(#linearGradient3227);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943-3)"
- id="path4123-3"
- d="m 118.00003,15.999997 0,16 -16,0 0,8 16,0 0,16 8,0 0,-16 16,0 0,-8 -16,0 0,-16 -8,0 z" /><path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect3232-9"
- d="m 118.00003,15.999997 0,16 -16,0 0,8 16,0 0,16 8,0 0,-16 16,0 0,-8 -16,0 0,-16 -8,0 z" /></g></g></svg> \ No newline at end of file
diff --git a/share/icons/svg/document-edit.svg b/share/icons/svg/document-edit.svg
deleted file mode 100644
index 4f462832c..000000000
--- a/share/icons/svg/document-edit.svg
+++ /dev/null
@@ -1,634 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
- xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xml:space="preserve"
- enable-background="new 0 0 128 128"
- overflow="visible"
- viewBox="0 0 128 128"
- height="128"
- width="128"
- id="Layer_1"
- version="1.1"><defs
- id="defs105"><linearGradient
- id="linearGradient3235"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3237" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3239" /></linearGradient><linearGradient
- id="linearGradient3207"><stop
- id="stop3209"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" /><stop
- id="stop3211"
- offset="1"
- style="stop-color:#252525;stop-opacity:0;" /></linearGradient><linearGradient
- id="linearGradient3325"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3327" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3329" /></linearGradient><linearGradient
- id="linearGradient3303"><stop
- id="stop3305"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:0.68345326;" /><stop
- id="stop3307"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" /></linearGradient><linearGradient
- id="linearGradient3058"><stop
- style="stop-color:#9a7600;stop-opacity:1;"
- offset="0"
- id="stop3060" /><stop
- id="stop3066"
- offset="0.09292036"
- style="stop-color:#e3ad00;stop-opacity:1;" /><stop
- style="stop-color:#ffcd2c;stop-opacity:1;"
- offset="0.5043171"
- id="stop3070" /><stop
- style="stop-color:#e3ad00;stop-opacity:1;"
- offset="0.91571385"
- id="stop3068" /><stop
- style="stop-color:#b98d00;stop-opacity:1;"
- offset="1"
- id="stop3062" /></linearGradient><linearGradient
- id="linearGradient2598"><stop
- style="stop-color:#252525;stop-opacity:1;"
- offset="0"
- id="stop2600" /><stop
- id="stop2606"
- offset="0.5"
- style="stop-color:#252525;stop-opacity:1;" /><stop
- style="stop-color:#252525;stop-opacity:1;"
- offset="0.75"
- id="stop2608" /><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="1"
- id="stop2602" /></linearGradient><linearGradient
- id="linearGradient2257"><stop
- id="stop2259"
- offset="0"
- style="stop-color:#b4942a;stop-opacity:1;" /><stop
- id="stop2261"
- offset="1"
- style="stop-color:#e4dcc9;stop-opacity:1" /></linearGradient><linearGradient
- id="linearGradient3291"><stop
- id="stop3293"
- offset="0"
- style="stop-color:black;stop-opacity:1" /><stop
- id="stop3295"
- offset="1"
- style="stop-color:black;stop-opacity:0" /></linearGradient><foreignObject
- id="foreignObject7"
- height="1"
- width="1"
- y="0"
- x="0"
- requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
- <i:pgfRef
- xlink:href="#adobe_illustrator_pgf">
- </i:pgfRef>
- </foreignObject><linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2291"
- xlink:href="#XMLID_9_" /><linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2293"
- xlink:href="#XMLID_10_" /><linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2295"
- xlink:href="#XMLID_11_" /><linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2297"
- xlink:href="#XMLID_12_" /><radialGradient
- r="139.55859"
- cy="112.3047"
- cx="102"
- gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2272"
- xlink:href="#XMLID_8_" /><radialGradient
- r="139.5585"
- cy="112.3047"
- cx="102"
- gradientTransform="translate(2.4e-6,0)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2275"
- xlink:href="#XMLID_7_" /><filter
- id="filter3241"><feGaussianBlur
- id="feGaussianBlur3243"
- stdDeviation="1.0394514" /></filter><filter
- id="filter3772"><feGaussianBlur
- id="feGaussianBlur3774"
- stdDeviation="0.50063244" /></filter><radialGradient
- xlink:href="#linearGradient3207"
- id="radialGradient6054"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5495914,0,0,0.1876849,-193.24041,-23.535874)"
- cx="49.011971"
- cy="2.6743078"
- fx="49.011971"
- fy="2.6743078"
- r="1.7246193" /><radialGradient
- xlink:href="#linearGradient3207"
- id="radialGradient6052"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.550633,0,0,0.1873121,21.621938,-31.864287)"
- cx="49.011971"
- cy="2.6743078"
- fx="49.011971"
- fy="2.6743078"
- r="1.7246193" /><radialGradient
- xlink:href="#linearGradient3207"
- id="radialGradient6050"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.2600183,0,0,0.2752449,-2.2590409,-25.415382)"
- cx="49.011971"
- cy="2.6743078"
- fx="49.011971"
- fy="2.6743078"
- r="1.7246193" /><linearGradient
- xlink:href="#linearGradient5433"
- id="linearGradient6048"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9973012,0,0,0.9997782,0.28069,1.0645897e-2)"
- x1="92.226158"
- y1="54.119438"
- x2="96.579895"
- y2="57.15118" /><linearGradient
- xlink:href="#linearGradient3235"
- id="linearGradient6046"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.6732108,1.5189394,-1.5009523,1.6928488,18.675678,-24.465565)"
- x1="48.498562"
- y1="0.81150496"
- x2="48.732723"
- y2="2.3657269" /><linearGradient
- xlink:href="#linearGradient2922"
- id="linearGradient6044"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6182226,0,0,0.6232687,24.10803,47.993844)"
- x1="33.342377"
- y1="117.83894"
- x2="24.450998"
- y2="107.35519" /><radialGradient
- xlink:href="#linearGradient3325"
- id="radialGradient6042"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.5103,2.641273e-3,-1.167078e-4,-9.110224e-3,87.0522,7.438666)"
- cx="34.677639"
- cy="7.4622769"
- fx="34.677639"
- fy="7.4622769"
- r="47.595196" /><linearGradient
- xlink:href="#linearGradient3303"
- id="linearGradient6040"
- gradientUnits="userSpaceOnUse"
- x1="-12.817558"
- y1="7.4622769"
- x2="82.172836"
- y2="7.4622769" /><linearGradient
- xlink:href="#linearGradient5826"
- id="linearGradient6038"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9992082,0,0,0.9993395,0.1083622,-9.0374942e-2)"
- x1="114.92793"
- y1="-22.560064"
- x2="100.65602"
- y2="-22.052734" /><linearGradient
- xlink:href="#linearGradient3058"
- id="linearGradient6036"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2875994,1.1737414,-0.5465891,0.6213041,81.686465,27.89447)"
- x1="11.326384"
- y1="57.383999"
- x2="14.493531"
- y2="57.383999" /><linearGradient
- xlink:href="#linearGradient7364"
- id="linearGradient6034"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9986497,0,0,0.9998891,0.1404398,5.3232436e-3)"
- x1="76.708534"
- y1="83.325729"
- x2="80.579521"
- y2="87.154587" /><linearGradient
- xlink:href="#linearGradient2598"
- id="linearGradient6032"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9986497,0,0,0.9998891,0.1404398,5.3232436e-3)"
- x1="75.848022"
- y1="72.804123"
- x2="81.452583"
- y2="77.047241" /><radialGradient
- xlink:href="#linearGradient2257"
- id="radialGradient6030"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.909059,1.8392116,-8.6222515,7.5766472,1009.8522,-881.36145)"
- cx="42.617531"
- cy="120.64188"
- fx="42.617531"
- fy="120.64188"
- r="3.406888" /><linearGradient
- xlink:href="#linearGradient3291"
- id="linearGradient6028"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3755238,0,0,1.8570645,-22.548199,-92.562977)"
- x1="63.911137"
- y1="79.998817"
- x2="87.757362"
- y2="93.999413" /><linearGradient
- id="linearGradient7364"><stop
- style="stop-color:#d4a100;stop-opacity:0.97647059;"
- offset="0"
- id="stop7366" /><stop
- style="stop-color:#ffc712;stop-opacity:1;"
- offset="1"
- id="stop7368" /></linearGradient><linearGradient
- id="linearGradient5826"><stop
- id="stop5828"
- offset="0"
- style="stop-color:#980000;stop-opacity:1;" /><stop
- id="stop5830"
- offset="1"
- style="stop-color:#db5c5c;stop-opacity:1;" /></linearGradient><linearGradient
- id="linearGradient2922"><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2924" /><stop
- style="stop-color:#515151;stop-opacity:1;"
- offset="1"
- id="stop2926" /></linearGradient><linearGradient
- id="linearGradient5433"><stop
- style="stop-color:#ea3838;stop-opacity:1;"
- offset="0"
- id="stop5435" /><stop
- style="stop-color:#c40000;stop-opacity:1;"
- offset="1"
- id="stop5437" /></linearGradient><filter
- id="filter3849"><feGaussianBlur
- id="feGaussianBlur3851"
- stdDeviation="0.31468463" /></filter><filter
- id="filter12295"><feGaussianBlur
- id="feGaussianBlur12297"
- stdDeviation="1.4758613" /></filter></defs>
-<metadata
- id="metadata3">
- <ns:sfw>
- <ns:slices>
- <ns:slice
- sliceID="1316743234"
- width="128"
- height="128"
- x="0"
- y="0" />
- </ns:slices>
- <ns:sliceSourceBounds
- bottomLeftOrigin="true"
- width="128"
- height="128"
- x="0"
- y="0" />
- <ns:optimizationSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="0">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="1696735251">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- </ns:optimizationSettings>
- </ns:sfw>
-<rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.5585"
- cy="112.3047"
- cx="102"
- id="XMLID_7_">
- <stop
- id="stop16"
- style="stop-color:#00537D"
- offset="0" />
- <stop
- id="stop18"
- style="stop-color:#186389"
- offset="0.0151" />
- <stop
- id="stop20"
- style="stop-color:#558CA8"
- offset="0.0558" />
- <stop
- id="stop22"
- style="stop-color:#89AFC3"
- offset="0.0964" />
- <stop
- id="stop24"
- style="stop-color:#B3CCD8"
- offset="0.1357" />
- <stop
- id="stop26"
- style="stop-color:#D4E2E9"
- offset="0.1737" />
- <stop
- id="stop28"
- style="stop-color:#ECF2F5"
- offset="0.2099" />
- <stop
- id="stop30"
- style="stop-color:#FAFCFD"
- offset="0.2435" />
- <stop
- id="stop32"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
-</radialGradient>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.55859"
- cy="112.3047"
- cx="102"
- id="XMLID_8_">
- <stop
- id="stop37"
- style="stop-color:#535557"
- offset="0" />
-
- <stop
- id="stop41"
- style="stop-color:#898A8C"
- offset="0.11366145" />
-
-
- <stop
- id="stop47"
- style="stop-color:#ECECEC"
- offset="0.20296688" />
- <stop
- id="stop49"
- style="stop-color:#FAFAFA"
- offset="0.2363" />
- <stop
- id="stop51"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
- <stop
- id="stop53"
- style="stop-color:#FAFAFA"
- offset="0.5313" />
- <stop
- id="stop55"
- style="stop-color:#EBECEC"
- offset="0.8449" />
- <stop
- id="stop57"
- style="stop-color:#E1E2E3"
- offset="1" />
-</radialGradient>
-
-<linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="XMLID_9_">
- <stop
- id="stop62"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop64"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_10_">
- <stop
- id="stop69"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop71"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_11_">
- <stop
- id="stop76"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop78"
- style="stop-color:#393B38"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="XMLID_12_">
- <stop
- id="stop83"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop85"
- style="stop-color:#8C8E89"
- offset="0.0072" />
- <stop
- id="stop87"
- style="stop-color:#ABACA9"
- offset="0.0673" />
- <stop
- id="stop89"
- style="stop-color:#C5C6C4"
- offset="0.1347" />
- <stop
- id="stop91"
- style="stop-color:#DBDBDA"
- offset="0.2115" />
- <stop
- id="stop93"
- style="stop-color:#EBEBEB"
- offset="0.3012" />
- <stop
- id="stop95"
- style="stop-color:#F7F7F6"
- offset="0.4122" />
- <stop
- id="stop97"
- style="stop-color:#FDFDFD"
- offset="0.5679" />
- <stop
- id="stop99"
- style="stop-color:#FFFFFF"
- offset="1" />
-</linearGradient>
-<path
- id="path3726"
- d="M 24.919999,10.931136 L 24.919999,119.06907 L 83.596,119.06897 C 84.126,119.06897 84.635,118.85797 85.01,118.48297 L 116.494,86.717034 C 116.869,86.342034 117.08,85.833034 117.08,85.303034 L 117.08,10.931136 L 24.919999,10.931136 z"
- style="opacity:0.89589041000000003;fill:#000000;fill-opacity:1;filter:url(#filter3772)"
- transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)" /><path
- transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
- style="opacity:0.30684932;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
- d="M 23,9.9655172 L 23.040816,121 L 84.172,121 C 84.702,121 85.211,120.789 85.586,120.414 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9.9655172 L 23,9.9655172 z"
- id="path6594" /><path
- id="path34"
- d="M 16.000002,8 L 16.000002,120 L 77.172002,120 C 77.702002,120 78.211002,119.789 78.586002,119.414 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 L 16.000002,8 z "
- style="fill:url(#radialGradient2275)" /><path
- id="path59"
- d="M 18.978725,10 C 18.439449,10 18.000002,10.440836 18.000002,10.981818 L 18.000002,117.01818 C 18.000002,117.56015 18.439449,118 18.978725,118 L 76.891747,118 C 77.149151,118 77.401662,117.89593 77.583704,117.71233 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 L 110,10.981818 C 110,10.440836 109.56153,10 109.02128,10 L 18.978725,10 z "
- style="fill:url(#radialGradient2272);fill-opacity:1" /><g
- transform="translate(2.4e-6,0)"
- id="g1973"><path
- d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 C 86.346,93 85,94.346 85,96 C 85,101.035 78.336,119.664 78.586,119.414 L 111.414,86.586 z "
- id="path66"
- style="opacity:0.1;fill:url(#linearGradient2291)" /><path
- d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 C 86.897,94 86,94.897 86,96 C 86,105.444 78.211,119.789 78.586,119.414 L 111.414,86.586 z "
- id="path73"
- style="opacity:0.1;fill:url(#linearGradient2293)" /><path
- d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 C 87.447,95 87,95.447 87,96 C 87,105.807 78.347,119.653 78.586,119.414 L 111.414,86.586 z "
- id="path80"
- style="opacity:0.1;fill:url(#linearGradient2295)" /><path
- d="M 78.586,119.414 C 78.586,119.414 90.5,109.5 96,104 C 101.5,98.5 111.414,86.586 111.414,86.586 C 111.414,86.586 98.25,96 88,96 C 88,106.25 78.586,119.414 78.586,119.414 z "
- id="path101"
- style="fill:url(#linearGradient2297)" /></g>
-
-<g
- transform="matrix(1.4512107,0,0,1.4512107,-23.107793,-69.65492)"
- id="g4356"><path
- style="fill:#bf0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 90.067703,48.28801 C 90.681345,47.595885 94.71636,47.924953 99.011956,51.824487 C 103.34968,55.762246 104.22203,59.572602 103.45335,60.439512 C 102.95305,61.003796 102.45274,61.568078 101.95243,62.132363 C 97.490516,58.081862 93.02863,54.031361 88.566739,49.98086 C 89.067048,49.416577 89.567363,48.852295 90.067703,48.28801 C 90.067703,48.28801 90.067703,48.28801 90.067703,48.28801"
- id="path3180" /><path
- id="path3299"
- d="M 36.000762,124 L 56.247762,114.57347 L 56.341932,114.46575 L 43.072928,102.18129 L 42.945256,102.32719 L 36.000762,124 z"
- style="fill:#b3925d;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
- style="fill:url(#linearGradient6028);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter12295)"
- d="M 97.750257,56.002191 C 96.724436,55.957168 95.868244,56.616733 95.08462,56.988757 C 90.909708,60.687543 73.515347,78.642185 73.084223,79.157465 L 55.810891,99.817304 L 55.704264,99.93337 L 46.022008,117.56677 L 69.620535,112.30505 L 99.562892,76.255802 L 103.15262,71.961341 C 103.79988,70.761527 104.39123,64.147868 101.41107,59.194021 C 99.958078,56.778752 98.776081,56.047215 97.750257,56.002191 z M 103.15262,71.961341 C 103.12605,72.010581 103.10807,72.105165 103.08153,72.135439 C 103.0686,72.150198 104.574,71.086043 103.75683,71.264941 L 103.15262,71.961341 z"
- id="path7753" /><path
- style="fill:url(#radialGradient6030);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 37.004018,123.01573 L 55.889189,114.23554 L 55.983351,114.12785 L 43.431509,102.51919 L 43.303819,102.66511 L 37.004018,123.01573 z"
- id="path2247" /><path
- style="fill:url(#linearGradient6032);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 49.164276,108.94499 C 50.813237,110.44605 51.919724,110.45553 52.509156,110.99209 C 52.60441,111.0788 52.684468,111.1806 52.752951,111.28376 L 97.392942,60.017302 L 90.912418,54.117987 L 46.187555,105.48147 C 46.402303,105.53791 46.60341,105.61601 46.78984,105.78571 C 47.328607,106.27616 47.507653,107.43695 49.164276,108.94499 z"
- id="rect2192" /><path
- id="path2233"
- d="M 54.219542,109.12044 L 52.46936,111.12212 C 53.008112,111.65304 52.901013,112.58765 53.891336,113.48914 C 54.958597,114.4607 55.521514,113.94763 56.213033,114.57361 L 57.984415,112.54762 L 54.219542,109.12044 z"
- style="opacity:0.35348834;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- style="fill:url(#linearGradient6034);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 97.156354,59.801933 L 52.550305,111.02955 C 53.091888,111.56309 53.067746,112.40697 54.063129,113.31308 C 55.135841,114.2896 55.618173,113.86936 56.313217,114.49855 L 100.94048,63.246681 L 97.156354,59.801933 z"
- id="rect2190" /><path
- id="path2231"
- d="M 47.641192,104.81388 L 46.74339,105.8407 L 46.708893,105.87829 C 47.156405,106.29847 47.104617,107.26834 48.587189,108.73915 L 48.669479,108.81407 L 49.255813,109.3478 L 49.338111,109.42272 C 50.954363,110.77284 51.884791,110.58998 52.474206,111.12652 L 53.421861,110.03067 L 47.641192,104.81388 z"
- style="opacity:0.38604653;fill:#252525;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- id="path2229"
- d="M 43.884886,101.37497 L 42.944085,102.33028 C 42.964725,102.34902 42.890972,102.43498 42.911712,102.45386 C 43.334717,102.83895 43.324536,103.82211 44.101499,104.65577 L 44.173503,104.7213 L 44.492381,105.01159 L 44.533531,105.04903 C 45.459298,105.77059 46.235875,105.51261 46.708893,105.87829 L 47.649765,104.8022 L 43.884886,101.37497 z"
- style="opacity:0.35348834;fill:#131313;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- style="fill:url(#linearGradient6036);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 44.501995,104.6749 C 45.534224,105.60412 46.240222,105.2854 46.78984,105.78571 L 91.395905,54.558106 L 87.571444,51.076654 L 42.944168,102.32853 C 42.965129,102.34756 42.985792,102.36642 43.006856,102.38561 C 43.436566,102.77677 43.462001,103.73855 44.501995,104.6749 z"
- id="rect1315" /><rect
- style="fill:url(#linearGradient6038);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- id="rect2069"
- width="18.073059"
- height="4.2522693"
- x="99.380959"
- y="-24.64492"
- transform="matrix(0.7409346,0.6715772,-0.6655662,0.7463388,0,0)" /><path
- style="fill:url(#linearGradient6040);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3849)"
- id="path5963"
- d="M 82.172836,7.4622769 A 47.495197,0.97142172 0 0 1 34.677639,8.4336987 47.495197,0.97142172 0 0 1 -12.817558,7.4622769 47.495197,0.97142172 0 0 1 34.677639,6.4908552 47.495197,0.97142172 0 0 1 82.172836,7.4622769 Z"
- transform="matrix(0.3854946,-0.4403693,-1.7345162,-1.5764895,62.874028,110.46407)" /><path
- transform="matrix(0.3184879,-0.3665274,-1.2576415,-1.1452705,66.925762,101.47904)"
- d="M 106.56087,7.4622769 A 71.883232,0.4230493 0 0 1 35.242273,7.8853132 71.883232,0.4230493 0 0 1 -37.196723,7.4689227 71.883232,0.4230493 0 0 1 32.983878,7.0393451 71.883232,0.4230493 0 0 1 106.52539,7.448987"
- id="path3321"
- style="fill:url(#radialGradient6042);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- style="fill:url(#linearGradient6044);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 44.721041,119.98334 C 42.826109,119.20518 40.251669,116.04726 38.933132,114.90497 L 36.000001,123.99468 L 44.721041,119.98334 z"
- id="path2265" /><path
- style="fill:url(#linearGradient6046);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 97.676422,50.957862 C 100.44976,53.115733 102.43124,56.09451 102.54031,56.38058 C 102.64935,56.666651 99.953435,53.334215 97.662066,51.808239 C 95.38822,50.293913 92.211149,50.25601 91.976373,50.071645 C 91.741591,49.887284 90.153759,48.19437 91.594163,48.256871 C 93.100759,48.322243 95.534293,49.292702 97.676422,50.957862 z"
- id="path3233" /><path
- id="path5045"
- d="M 93.653015,51.592952 L 90.879271,54.810988 L 97.361729,60.684685 L 100.13547,57.497892 L 93.653015,51.592952 z"
- style="fill:url(#linearGradient6048);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><rect
- style="fill:url(#radialGradient6050);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- id="rect3205"
- width="7.795228"
- height="1.7080779"
- x="104.60918"
- y="-25.364759"
- transform="matrix(0.7404161,0.6721488,-0.6634233,0.7482443,0,0)" /><rect
- transform="matrix(0.6942228,0.7197602,-0.7693435,0.6388354,0,0)"
- y="-31.829779"
- x="94.946716"
- height="1.162492"
- width="5.3484583"
- id="rect2956"
- style="fill:url(#radialGradient6052);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><rect
- style="fill:url(#radialGradient6054);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- id="rect2961"
- width="5.3448997"
- height="1.1647878"
- x="-119.96733"
- y="-23.501301"
- transform="matrix(-0.7514575,-0.6597815,-0.5893147,0.8079036,0,0)" /></g></svg> \ No newline at end of file
diff --git a/share/icons/svg/document-new.svg b/share/icons/svg/document-new.svg
deleted file mode 100644
index 399b5236c..000000000
--- a/share/icons/svg/document-new.svg
+++ /dev/null
@@ -1,477 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xml:space="preserve"
- enable-background="new 0 0 128 128"
- overflow="visible"
- viewBox="0 0 128 128"
- height="128"
- width="128"
- id="Layer_1"
- version="1.1"><defs
- id="defs105"><filter
- id="filter5943"><feGaussianBlur
- id="feGaussianBlur5945"
- stdDeviation="1.04" /></filter><linearGradient
- id="linearGradient6740"><stop
- id="stop6742"
- offset="0"
- style="stop-color:#004d00;stop-opacity:0;" /><stop
- style="stop-color:#004d00;stop-opacity:1;"
- offset="0.5"
- id="stop6748" /><stop
- id="stop6744"
- offset="1"
- style="stop-color:#004d00;stop-opacity:0;" /></linearGradient><linearGradient
- y2="65.932846"
- x2="102"
- y1="118"
- x1="102"
- gradientTransform="translate(20.000035,-56.000003)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6930"
- xlink:href="#linearGradient6740" /><linearGradient
- id="linearGradient3711"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-23.516129"
- y2="-383.9975"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"><stop
- offset="0"
- style="stop-color:white;stop-opacity:1;"
- id="stop3713" /><stop
- offset="1"
- style="stop-color:white;stop-opacity:0;"
- id="stop3715" /></linearGradient><linearGradient
- y2="-131.93112"
- x2="-45.096584"
- y1="-131.93112"
- x1="-80.00296"
- gradientTransform="matrix(0,0.7388168,-0.7388168,0,-1.5226652,63.255682)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8927"
- xlink:href="#linearGradient3711" /><filter
- id="filter7317"><feGaussianBlur
- id="feGaussianBlur7319"
- stdDeviation="2.8805897" /></filter><clipPath
- id="clipPath5163"
- clipPathUnits="userSpaceOnUse"><circle
- id="circle5165"
- ry="8.0010004"
- cy="92"
- cx="343.99899"
- rx="8.0010004"
- r="36"
- style="fill:url(#linearGradient5167);fill-opacity:1" /></clipPath><linearGradient
- id="linearGradient4296"><stop
- style="stop-color:#00ff00;stop-opacity:1"
- offset="0"
- id="stop4298" /><stop
- style="stop-color:#006500;stop-opacity:1"
- offset="1"
- id="stop4300" /></linearGradient><linearGradient
- y2="87.759453"
- x2="336.98077"
- y1="120.81158"
- x1="328.12448"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4272"
- xlink:href="#linearGradient4296" /><linearGradient
- id="linearGradient4770"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-12.0029"
- y2="-383.9971"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"><stop
- offset="0"
- style="stop-color:#e5ff00;stop-opacity:1"
- id="stop4772" /><stop
- offset="1"
- style="stop-color:#bff500;stop-opacity:0;"
- id="stop4774" /></linearGradient><radialGradient
- r="36"
- fy="92"
- fx="343.99899"
- cy="92"
- cx="343.99899"
- gradientUnits="userSpaceOnUse"
- id="radialGradient8920"
- xlink:href="#linearGradient4770" /><linearGradient
- id="linearGradient5958"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-12.0029"
- y2="-383.9971"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"><stop
- offset="0"
- style="stop-color:#008c00;stop-opacity:1"
- id="stop5960" /><stop
- offset="1"
- style="stop-color:#00bf00;stop-opacity:1"
- id="stop5962" /></linearGradient><linearGradient
- y2="-373.1243"
- x2="-56.357521"
- y1="-381.09921"
- x1="-86.120354"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8916"
- xlink:href="#linearGradient5958" /><filter
- id="filter4292"><feGaussianBlur
- id="feGaussianBlur4294"
- stdDeviation="2.1604423" /></filter><linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2291"
- xlink:href="#XMLID_9_" /><linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2293"
- xlink:href="#XMLID_10_" /><linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2295"
- xlink:href="#XMLID_11_" /><linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2297"
- xlink:href="#XMLID_12_" /><radialGradient
- r="139.55859"
- cy="112.3047"
- cx="102"
- gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2272"
- xlink:href="#XMLID_8_" /><radialGradient
- r="139.5585"
- cy="112.3047"
- cx="102"
- gradientTransform="translate(2.4e-6,0)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2275"
- xlink:href="#XMLID_7_" /><filter
- id="filter3241"><feGaussianBlur
- id="feGaussianBlur3243"
- stdDeviation="1.0394514" /></filter></defs>
-<metadata
- id="metadata3">
- <ns:sfw>
- <ns:slices>
- <ns:slice
- sliceID="1316743234"
- width="128"
- height="128"
- x="0"
- y="0" />
- </ns:slices>
- <ns:sliceSourceBounds
- bottomLeftOrigin="true"
- width="128"
- height="128"
- x="0"
- y="0" />
- <ns:optimizationSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="0">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="1696735251">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- </ns:optimizationSettings>
- </ns:sfw>
-<rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.5585"
- cy="112.3047"
- cx="102"
- id="XMLID_7_">
- <stop
- id="stop16"
- style="stop-color:#00537D"
- offset="0" />
- <stop
- id="stop18"
- style="stop-color:#186389"
- offset="0.0151" />
- <stop
- id="stop20"
- style="stop-color:#558CA8"
- offset="0.0558" />
- <stop
- id="stop22"
- style="stop-color:#89AFC3"
- offset="0.0964" />
- <stop
- id="stop24"
- style="stop-color:#B3CCD8"
- offset="0.1357" />
- <stop
- id="stop26"
- style="stop-color:#D4E2E9"
- offset="0.1737" />
- <stop
- id="stop28"
- style="stop-color:#ECF2F5"
- offset="0.2099" />
- <stop
- id="stop30"
- style="stop-color:#FAFCFD"
- offset="0.2435" />
- <stop
- id="stop32"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
-</radialGradient>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.55859"
- cy="112.3047"
- cx="102"
- id="XMLID_8_">
- <stop
- id="stop37"
- style="stop-color:#535557"
- offset="0" />
-
- <stop
- id="stop41"
- style="stop-color:#898A8C"
- offset="0.11366145" />
-
-
- <stop
- id="stop47"
- style="stop-color:#ECECEC"
- offset="0.20296688" />
- <stop
- id="stop49"
- style="stop-color:#FAFAFA"
- offset="0.2363" />
- <stop
- id="stop51"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
- <stop
- id="stop53"
- style="stop-color:#FAFAFA"
- offset="0.5313" />
- <stop
- id="stop55"
- style="stop-color:#EBECEC"
- offset="0.8449" />
- <stop
- id="stop57"
- style="stop-color:#E1E2E3"
- offset="1" />
-</radialGradient>
-
-<linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="XMLID_9_">
- <stop
- id="stop62"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop64"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_10_">
- <stop
- id="stop69"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop71"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_11_">
- <stop
- id="stop76"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop78"
- style="stop-color:#393B38"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="XMLID_12_">
- <stop
- id="stop83"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop85"
- style="stop-color:#8C8E89"
- offset="0.0072" />
- <stop
- id="stop87"
- style="stop-color:#ABACA9"
- offset="0.0673" />
- <stop
- id="stop89"
- style="stop-color:#C5C6C4"
- offset="0.1347" />
- <stop
- id="stop91"
- style="stop-color:#DBDBDA"
- offset="0.2115" />
- <stop
- id="stop93"
- style="stop-color:#EBEBEB"
- offset="0.3012" />
- <stop
- id="stop95"
- style="stop-color:#F7F7F6"
- offset="0.4122" />
- <stop
- id="stop97"
- style="stop-color:#FDFDFD"
- offset="0.5679" />
- <stop
- id="stop99"
- style="stop-color:#FFFFFF"
- offset="1" />
-</linearGradient>
-<path
- transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
- style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
- d="M 23,9 L 23.040816,121 L 84.172,121 C 84.702,121 85.211,120.789 85.586,120.414 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9 L 23,9 z "
- id="path6594" /><path
- id="path34"
- d="M 16.000002,8 L 16.000002,120 L 77.172002,120 C 77.702002,120 78.211002,119.789 78.586002,119.414 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 L 16.000002,8 z "
- style="fill:url(#radialGradient2275)" /><path
- id="path59"
- d="M 18.978725,10 C 18.439449,10 18.000002,10.440836 18.000002,10.981818 L 18.000002,117.01818 C 18.000002,117.56015 18.439449,118 18.978725,118 L 76.891747,118 C 77.149151,118 77.401662,117.89593 77.583704,117.71233 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 L 110,10.981818 C 110,10.440836 109.56153,10 109.02128,10 L 18.978725,10 z "
- style="fill:url(#radialGradient2272);fill-opacity:1" /><g
- transform="translate(2.4e-6,0)"
- id="g1973"><path
- d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 C 86.346,93 85,94.346 85,96 C 85,101.035 78.336,119.664 78.586,119.414 L 111.414,86.586 z "
- id="path66"
- style="opacity:0.1;fill:url(#linearGradient2291)" /><path
- d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 C 86.897,94 86,94.897 86,96 C 86,105.444 78.211,119.789 78.586,119.414 L 111.414,86.586 z "
- id="path73"
- style="opacity:0.1;fill:url(#linearGradient2293)" /><path
- d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 C 87.447,95 87,95.447 87,96 C 87,105.807 78.347,119.653 78.586,119.414 L 111.414,86.586 z "
- id="path80"
- style="opacity:0.1;fill:url(#linearGradient2295)" /><path
- d="M 78.586,119.414 C 78.586,119.414 90.5,109.5 96,104 C 101.5,98.5 111.414,86.586 111.414,86.586 C 111.414,86.586 98.25,96 88,96 C 88,106.25 78.586,119.414 78.586,119.414 z "
- id="path101"
- style="fill:url(#linearGradient2297)" /></g>
-
-<g
- transform="translate(9.545815e-6,1.710865e-5)"
- id="g3640"><circle
- transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45864,35.85043)"
- id="circle4274"
- ry="8.0010004"
- cy="92"
- cx="343.99899"
- rx="8.0010004"
- r="36"
- style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter4292)" /><circle
- style="fill:url(#linearGradient8916);fill-opacity:1"
- r="36"
- rx="8.0010004"
- cx="343.99899"
- cy="92"
- ry="8.0010004"
- id="circle3581_2_"
- transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45864,31.85043)" /><circle
- transform="matrix(-0.6438188,0.1725107,-0.1725107,-0.6438188,333.34401,31.887831)"
- id="circle4383"
- ry="8.0010004"
- cy="92"
- cx="343.99899"
- rx="8.0010004"
- r="36"
- style="fill:url(#radialGradient8920);fill-opacity:1" /><circle
- clip-path="url(#clipPath5163)"
- transform="matrix(-0.858425,-0.2300143,-0.2300143,0.858425,412.45864,32.149572)"
- id="circle4776"
- ry="8.0010004"
- cy="92"
- cx="343.99899"
- rx="8.0010004"
- r="36"
- style="opacity:0.8;fill:none;fill-opacity:1;stroke:url(#linearGradient4272);stroke-width:6.75138187;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7317)" /><path
- style="opacity:0.8;fill:url(#linearGradient8927);fill-opacity:1"
- d="M 96.000027,4.1481901 C 84.654311,4.1481901 75.173932,12.159796 72.888913,22.826405 C 77.443574,27.0723 86.085806,29.937514 96.000027,29.937514 C 105.91426,29.937514 114.55648,27.0723 119.11114,22.826405 C 116.82613,12.159796 107.34574,4.1481901 96.000027,4.1481901 z"
- id="circle16776" /><g
- id="g6850"
- transform="translate(-26.000031,-3.999996)"><path
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6930);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943)"
- d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
- id="path4123" /><path
- id="rect3232"
- d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /></g></g></svg> \ No newline at end of file
diff --git a/share/icons/svg/document-open.svg b/share/icons/svg/document-open.svg
deleted file mode 100644
index c48f76940..000000000
--- a/share/icons/svg/document-open.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" enable-background="new" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient4651"><stop stop-color="#102134" offset="0"/><stop stop-color="#102134" stop-opacity="0" offset="1"/></linearGradient><pattern id="pattern5626" patternTransform="matrix(.1773 0 0 .1773 0 5.818)" xlink:href="#sand_bitmap"/><pattern id="pattern5614" patternTransform="matrix(.06603 .2464 -.2464 .06603 0 5.818)" xlink:href="#sand_bitmap"/><pattern id="sand_bitmap" width="256" height="256" patternUnits="userSpaceOnUse"><image width="260" height="260" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyEAIjEjMkEUQlFh M0MFJFJicYE0U5GhsRVjcnOCwtHh8P/aAAwDAQACEQMRAD8Ar2yC6nrRLre36+zv8FjfJLYn0bZB gQtC2h3u4oHp+yKrW0NbD2BMsbb3w64E0YW+XkMeAhurjgABgAqKg8D+wPiSrpH8dDjAu7T5aNj0 2SsC7aXa4dIVPT9c2MJPRa3wZBEy1IVJQAyq2sEECns9ls+KN9Jdqv2Bgfl9gAfowVFHg6/gWo1U jP03kqf4TW7CYVbOcPmuSxLKK/H62+HW6fLHh1RDH74h2Z3kF+7xvlXI/aIAA58f8+Hwrcp9cviv e5eVVtJu6SSiMCS7I9esn8L6QUKGGD7gnsj5+OD2n9tOLdQE1dXZqzOOwSrjlugD5/nwDz4yRyYT GWZ2dIzIkkfpSNAtbIViXwu3s0w8cfmRLG7wPGmCPNGS2WW45He/gY320LNfnp5J490gZeTm1LDC UPYKGky9N92WQY4HbTQ721qgMOC1zCGnuBCZ8Cj9Q/A+CoaHtn4u4OAPeAAMG/4vi7NM9H5VoJ+o e30rsPlWo2sJAxhIiB2hN55FMEIb5ChrYcc4QVKwIFqJ7N4sZwfm1oo/gPAY8B6WNT2YDr65DJmv baJZzkHq7s+BsIephyh/s3aHdBwcEOGHtRgmHOHwJ3BidNtAwYj9rkkF5/3+/dSNZ0W0XJID1LX1 V0m+SnugYkgAh1OwmHIUXlRf5wzqEtSyEMehqtD3BWjwyLPZtXZhjw7BLR/6H+fnj/UncR4zxzOr yo6ahDD2LAcNwpIztHNXGQfTnHtqsj1IizrLpp4FKRPC8WdHHh8wCoSVMqUkxyJddwahSUjq9fz6 fmD7frGNTK27RrNkaM7lresnxyQ7BfAMMgYmCE9kUB2+VKPfIKejPKur8m4T+/7+A+g4b/2HEdwz bMvJzxuC/kOlgNXJA8lWVftn8NJRhsaKYH2TW91mA8xh/kB6lY0zc1doJowM1VxsHx8Agn+A8B6Y T44ajHyv63zWjPsh8UgLIJTlUbIrKbV1XsLSBQx0NDW4b5Mr9wg8/nnENmRigp5RvzYk7B+Xd/8A Pr/ZUczLV6farQgVLV3zzD/YVHuAH5aeBKCYoFwXjN8J/wAOtyDh7kFKCtoyNyizBm9hQlqVDbqC ffj+D9ifYRKqxsxf1JFTCNMkjv70yYyLIPtaSSWucQOco6wH04Ux2kdmkZspJKwAV8QkQx5oxxJd nLLiuOp7QU3dXsIC2vhK7LGsI3dzxppPWwwh7uKUNbUWYQXLIZHD8f8AB21fbVXjTM0CxiMDdnc0 DAP1B1FwHYH7AqrM5qFTazG2Dm1utmFxxN3dHtS2k/uR257N1KH+GHrdDwQ+SHK07lnLgwWSlNsw xHpMI7bAA5/ivnz6Cgit4PBCwcwzb4HFbs5oW5K9dDsBaFOq3yLXtc02yVet1Wt2oH4+Ham1gAg3 BZrN83TY7RduDoPPsP3/AKgbwHslg2o1WqGuZAW4tqNpap2qZHbA+nOVLVzwevw7IH1IB6THGEdD r89Bhi3loFE2b97w597f54ABkkZpSxZ33akJL5xo7UHijehnhxk2KXa0oHUiXEMmSJg5S0jrOseS MzVX4s0CeeoEdl1PKrMwBynBtGq5KNp7IDcn4nxQPfgWyEE+G+La2tkDBzkEBHrf2ab4Gk0c27c4 2B+QQHn0HrdYGXDq+4JkCxk82H7wVLYKuSiODuYV1evHxoodgZEMPzx9HmAf7HtgxDFszNwnm14f rv8AwFBwAdiu6B3wxUsAo1v82xnxkd2gOnj69Q1eLLPSltgrdP8Ah2oyD2SuQJHvgYWVkXxnfAjt SZz9/wD7BhPtge6FwpdibVWcNVQyS2ryPDcVdshlJbDXJ5bsCtzEwNMD1/g842fbUEwzoyu0LNQH OEuxzgOwAP39gaiuVRvObqlVhqIroX92GX45yI8iupuJK0jOMcc6F3e2I7+B7sgP145vhg0vV9d2 WLtoW0WTGVK5yadbHCt3YwvMmnypbC7Sp6/al2p4dDtSv1uCeYENGuAn7/ZvdISQZ/8Ar4+AAPy/ WlPeE/tWktr5Dwo1Xs5tlh0myLYqdkKUjYe1w18OyPlDhw49bnNqfPgzMVkoLZif9bdogB/wGL97 2ET2tkr6liWUGuAlErSwgktgtSq3BeMNCuvFLkW8A8yGyQ1tPZEcC49udsRilojNjCJO+cBQff36 XinDqsWYcE0XqEbZlXje08hquaSWMNErTgh1fMIQ/eYt/wA4jtrABBzNsw4KT9tkeMGA+A+/e3Sr fZlWR8N2Z2QKM5HjGGLxpa5XZyGQxAXk3wJKrTRrde4k4ovtrN6OF0a7TZDfjqxcN0cBeY4bNVZJ PMmG22VdPyR9hTAKawlbGhjzCG4B/r7JBn19WjUYt+31dX7QdkzZvYN/4DboDgICqINstBI07V7R YauCcO6Upttgw1NTxZr5LQ0jfoZCG+TIemPh8PssngZ3BsWho5zvfCd/2Df9/PoPR5UavX4GPk2X aF5OyHdwdlE1+yDWBecKv5YeoeGwGFswYmMmzg59X74H4wLaBjNvdXeA2AAf8Bh1DvkiWkPhJNgV KbsKkYcnlFe2E4cbq8WWF/DYFtwfFuGtjzEFtsDEGyowx8fBhPukE2NB/fwADwBQiNZsCHldKdlR L2a8TGmOWFmk4ys9w4JGTcC9vYknGfnNODImPGN2vNn/AEPQ2tslfxYeynrU7M1yHpynHiHnV+Jm AXxIcnKq0+h32Yth2S0DDUer/UPVbJ9oVyZM4k1cEOIP0FB6YTQv2AMtQbWmqB2W3y7qZGlmB2hj 9XbKAV2FolIfez5kNwTx4Z4Pd6fhjHmr/wBN8Cef7RH9/AbAAG6PpNDqWHXzGr2Rv2lWpZLZHhu1 gpNb20m0NY1jJ5Awth3DkifDOHSLbO2ysyqv2ztRJSTZzE/v+H0E+AUuWhpaQhmEdoT7kJKSQt6h cENPYJaHYybXt2lDCeYQw9Vw09gW2rtf9wxJvnGWZ4CBDZz8Rffl9+9xZZvQGSN6KRbkMe3/ADVw kubZxjD1YsFzJQZKOiiZMpW2nGb508255+B6aVVcnnK/iuQO/JmXXLBMqWK1O0ym3xtr1f43J+GL tpI37j7JiyGOz5AxOn8ReDAwntiy8nMceD8AP7/+/gPWLUhYF6Wqhn59yEhum+6XwIWRzFhVRU8P a7DpF8qusA9bvkO+GRg3zj7Y1J9G4WgLrMm8GwiSbt0BsHXnvlo4sWLGvltKpJPSGRkYa335IU0/ dKyFvhjjbhM09hzKcHBnmACD3Pa3wmso/m3jf+AoJ/gL8feUxHvTTwLuyVPh/MrkapS7A+GwMK2B 0+yxbQH5gZW5gfvAHrqfZ75R4cmzfrWe9u3B+AgH7+wdNYRNOuWazKiOGKemmdCo3y9S8O44pjxw cuGCN49MxkCHTtMquQ9yK+nrNWjx9GRTKu1Jk9W3b0jUNluNIq8bX2oIlaIEytqVhI9e2pR9mmKv PKcpo4/MMB5kOaQmc834J+vA/BpN2BHgAffQB9+QOp4oUj0YMsg9TZi4zGahu9hMCHnGOz55o2H5 jBMMGXxDmYMiq+bBOT3ni7R+KrR2Q6APoP8ApFsB88F6mL007tFJ2rX1nUBarbZC2kMHCCC8HsZX lyhcNwqtDhvictr6fOQ7QAo75xlpQ6z/AN7Y7/sB/wDz60ttmB3JH1gdy9MbYq3S7JK9H0+NSfw8 XKpGUh2QwTHx8oeq09ghzuH8H/GaHaKMMOOxsJsIDYAFRPp/pChhcLwu2mkqZpz/AHlGMldsZqL2 VbHnIMOFx5Esx3HSVI3VyilPRAxxs1353YIHGNfdn2myX3MsuYBtqwdS1tZKk4VdWUdkGuESq5V8 WEeiGNQOzmEOqzFfrYLVLcAF5sgmTfFcY9PARJpN43+3fP8AAUEAEx3BPA2w4ZtjGKUtUMt+Yzv4 d7N4ueiK8rbw74HreyE/S+HVW2r1Kuds4GLrMmDq7TxSfPwL9h7c+2CHTx5SkZie25q2pMunit5K 6QW3ZgiLcUDwMpW7A4B63T3xDYJqqPcLLo9bWRnKNs3s39+7ur9uH6i6gSC3Nrlwya0qAPvAFlUb CHt5KSkTItjCRcWyOYLbI4Vut2An8Dx5wYRka0GgmMtTtd/UAD8uoIDpjIsb4Rj21hH+bCk936of B8/A6EllfdkXEGtxiadaxxzjo4/IXuN0R5HMjiVoeVUbqrW0cOAldEsji1TE15TY2ipbtsa2rHAO L4iRLg4enU9t9aHTAu3iiH6VgJi7JWL93e386voTBh9rOswi5mKulB8ZCQF3yalsJHJXXcDuhyUM tbabzBbrdbW7HDp5gGpJ9DQbIRlm0Gjc3h25vh+In4AA5AwPx2n12LMolzGD2oNSZM2JFr2oD+l5 fYb4PXGw2PEQ0/jWpun6TxtHlaliQgw1pnFlBeB3wYK3vdCfULYAAA31UTNN9l13Q4YVTJvSvArF JXmhqZLAsyIrnrY1BRa3p8PD+uQ8bI8edBQyaxuhPfDlouxz9UH9T58+vezkQEOoe2jCLubchx3X Pct7tpwcccPLX014dtCytSTHT1A4IvTvnsbsd+FqTDuN5MOCOUpRZ05WlgWQ7VeyaqtOua1Dl+Oy LbgVDi3N4PU5MToQeZauKGPZJ+kxw9sCXeQmj4PBo2EeGAAfww5Bj05cut67FWhkmRbI2u0+4alb JF2Oy/FhvltMJ60Fuv5l8GHCbD+YqvloqTUyDdQotWqAYj2ibCHOAoL9sC/z6oq6uCOU4utlHNqU oeUkxi25GK/ELdjJtgi1eH7vn5UDj1uCeHwDnaB57oDBmLtSYT9/P7Bx8/04Ed0IVBDMLcXFJsIp T5PvQNr3UAWfGgX8qKYT9ntStoagw+/IENV2ys3wqzDHje0r8RYH/wDPfykTBvqIoc3aERuzSxK7 SJjsyu8rx54ZSYoq8ZG2Fi1xFmRFdqTTupWT/lxsfVjq+d7FO+xjt+1i3QfeFgR7Lp92cldJpOsW hVUkghXqewLy3UqGkWNXKHaD7MhuFwPjBvkBvtqufvKvpfZyYPuib7uvz99+Ae2EbHq900tOFb02 m2ENfNZFesvdAC+acGxbu2kXer7Qocjg3iE9bmVhyqfYCmcMExhRDZkY4lG9O5xg8+AxAb+vs5sH j6zMMsqoLCNpGbDGlk+zlWQpvkWXE5QtuCe4Mi2yWoP7cttfvuzsxMWhjN8wxCHACDz5A9z/AEEr dLlKWsTm9VLdAh81bpxIR7OQ1eWYixWza2Rfh42mHZa2HrgJtHwHhkWUYoLRmZ4NpOx8+38+AQd/ 6IPI6RkN2cYs49c5SwRneW+Mdy055AYcXYopGSpZbmW9wg5RtYXHF6GVU2XaKNddjhMT8qQ7QMrO jW07PjJ/D81YUOwuEoW2AXxbr9cMUPD2ZwZAc9QPPBgmMaGju+j/AIu2AB9/P/5klgLY8pHpOxtO VzWRdkUxUrYv8kYK9cO16QU+YRw7Vw0O4GBkBgbgrSBtgzjHnEn/AH8fQfP+fFcyyHQoCW3fNGjY dLB6KU0d2Q4zEtgUNhPckT09kDmGSYQhwUOBdNOrayMF+TBmzfBz78/7AggH7qNtyGKDVgHbRfCZ koxJ2/t68WE4Jp6srGFbfMDLdwODJxvgbA+KvBhlXlHjg/NgiOg/2AAg4dCgYbOYxdclwuwkYMZj S6F491mhd+BXRllZJokjedJMDnGZQ7Sc5usMcseWfbwznDEAGyemdWdgXZfqFZyYLJEgKaZNqa/a j5S9I92k1dqXT6h7Ot6kDD4nv6HO7Pnwd2M3dCh0ZZB2jVxtH2DgP+rwDpbslgQ01Hh90M6SNQw5 uXGJO1f2a4yrG1Hi651UJ9kTLIMUPw+yUdD5aDW1lmKU2zM29hODn18Bbp9+Xz9RdM7vAUsGo74d wN8EtJZQ9TjCwWcyVf5Qo7vlXw19bMUPMT0PkgNDYLaCGOTq6vWfhDfB7dPn9/8APH+g/T22QndH zmPKrHTwNimI13UuTDv68yASl86c7k7X2Qh3wnvhghMgwLAnI4e8llXtAnb7xaPNnjYOP+3uA6WF iYxSO2yiTRh4YJbj08nOSBcVv454LUTXVqrs0q3DJhC/v5L5BP8Ahx/Vw/kn5XbiV5e7HA2201aH KP1B13i9hEVusAPukfIHOXob9LdT8gjm1haevVOyAls+h3tA2Fxz3DOyk9pdTeTLJo+Wsxl5fVEg erLAnOvJ6yb0qfS+2zquZNEesPH0D8mJkhCFK3RJTUctAWI/orkrLjLPrppuhBJcRxR2kL6xIkt8 MRDFQREjJxMQCkqVnTcP7Zv0dUTFfpnb8paYn+T5FH//AHCB/wCntTNpA7MAzPvAZE0S1bTVZ5qz XH46v/IOXJY2n/Jsu7uNzJdkJLvAJB2C2DFS6lsbGPLY8PMD7w4ckrn+QnLZO8vxmM+7O6Mfxt3D wAAAfh08XXenO42pDMp5KHV7GMuORtshTmCxaQrvie4B+YXYHW17lVSEKleHCoFl8VyaMd4T7oP3 5B+/AOgnTm65+pDBlGQaNCF7fagktHSaxq+vocpWuJyil7AMfqtslgf0+pVXxn33NmvBJ2TgNu4v 2GCDwEAzrMX1tjOElJu063Gt5qqbYav1FTLAXocopyiua343DMPt2ByF2I8C0La3gZxfbCXhEmqz 58BbvALdQUEBUcuw2AbJBStJ7dtFI20xtsqt+7JQfxfPTZAsrZOUzPuZzFHlyoFCKFLrm8i1XQqz 0pQ7RmTx5KyzNYxhtq5CS77xnSKnmOUVhq8qhjoaHMhp/MFqch3BWn+r7RyYnwnHEHsAA+wYn/AB NgENVGkGxDFQJrhUqemklKwqvaj2n8sngebq9y4L4e1HAPZEPEPg2/AanzxYt5Wfwm7gwH34B+p7 p2VnD0xuSmSsbW5cBvODV7Vzu0Lcyhy3PHKwjtSp4+kmRDfHzAgycD+f2rWSenOryfBki0cTn0F+ 8+fAdLF4qcO5UuhhothMjVFmG4iQHQ1+pw1IgZaHY1PVfDcDOm8xuC21gSAGx2QZWZRXJ/hM27Az /gMPbDf4TFqJHV88FxbF0ygeQcRuDb6bUbVPa1JgH8rl3LIljQIpT1EQuA9yKjcNHImIwy4IbJrx bjt6cwcWjz8tb0yMeopSZDJIap59zXK47xF0+1kBQ6rX63qtat8xZDBMOcwUoKG8jNrRmZHCbJ5/ H3Pn18/0bKcNkXKztruNnMlDq+TGs14GgKfiBz0V3lFHDmFV0myzK3X/AOQX6WnMhNGFFLfZnh2N 8H8BwE+hYoOKTrdoFmcvSjXJqhwlnZVb3HbKdDqZf+GBlXyLtB8ILb5ySaHXw+/OEA4h8ZuRXZsT nhAQDgGP/tAkCHKGRWq8oSQLgPXBJs1HMKyOXuADKpwor8gmLYeZVfMA9V2XaCiq7YzK4vcznCP7 /wDQfsHUKyoxkUueWLq8eAZxLJE7juf3bSnGuzgW3npjd4RWZGdaBdGytGigkjQrQrb3WUNkc/NL 46MI/r02LhSYGaKxtG7AS0g2EjkgKfDmoloMVilFt/2gPM/o6dArCfgyIwspj9485jv/AB/2PIOw LEfMrhIvtVi6lWWKA0tO0WLX11uOm+Hv8qIB4GPMJzInoUvFjtTGrp8JPw3R8eRrwb3s5z73wfvZ BQGcjnHhjRwLu+DY1zJqGSLcwAsEQOmxZe/B0CWYcDDg4OAb8gHoEMYsq6HUDMbdqudvv4DYAKCf 3+SX8ul4tNnlxDrFkfLWMakIjQYabf8AmW0BU0NDMMENwreYYT+HNW3zwkPbOLvIwG7Wib3/AH8+ AqLYNgZIGyXMYuXRGS7MM4oA5UMtuyapcshytcrWO40IMKotyq1bW5tYErVt/iHcCasGjYpA6dw8 NNtTO08VUk6S7CynYavK4G4Lw2c9pzXmj5hAO4WRMD2RX8ycpOCGD7ZvO1rLz92NgwP7/v8AiA67 I4exCinXwHNrfHOnzLRthH/iQ5EYrm5buuQCyL62HDmJgcehtXD/AJyGsvNXtAsYDCJJsGA38/yD f+iSyEev6rR85jF8bVQIEYWIHocdehNB4SB2cgY5JDZP9hsGMGYsjFcoTJ7IEdgePgNg+g9btRGY lUEYfGiy7ySUnvkbEmM49V7CyPlSlsPh08tuC2hmFtPwR+4Flg2TFmKFGZGBhEk3+rB/QP36CWJg KCNjUsSxLUk20FyVYlLyN7l5RXwsWORZRoVjAt2co6Or7T4Z4UQZYn80bAC2ByTQpnMjwr1e2Zyl cjh2lrSt+3oewnCt9PcOVbS9XMWt+BsheZNh7xBn2gBeIaysvgsmNeDZsI8c+fgHH6i+/Nogl1/l Ph5XSLsJVlWo0aw2hYTJZ9OWm4i9PbRFZON1At2oYhj1tV7wXS7w1nlO2M6OkpJvf+PnvvwDB+Rl 6ahUOeQSQxrJbXxSybRikFXOMKYZ8sa4wJ64CFjrZgxxBP2NuvA9XMxGWVf6Mc4TV3d0AAP7+eAd RxBsR858uCvmi5kCyKMmDYkfOtSp6cMVKeYXIAtuLJ2HhmE/h7U2p7bs/JnxXsz97uyj9/fwHsAw Pvyw8jGKaUppnLrJsyGKWOSMUELbkLZZc0AFx8HPIYtYxI0mJ3Yo8VacDbkSQ3kiG3xAsWec+3ha 5D1Or19ysysoCkhxrzsF2By2B8oHUBYU0XKrIAmrZ8PcFbuDInjw6PuGxoYx55Rxg4bCef8AAAN/ 2DpnVm8r6bl2ohnmq2nZoGxrCHB2m6F6YLFrwGJ/qQth6T+yAwNwfT+M2gU4Nwm0fff8F8ByA/j0 BtCG+Ntf39muSqNrEeq21YY8ZMES1ooeLXKLDj63MGE98W09k/iHT60tSHwZDwGLPNvZ44D/ANNg 6YVTvmYhsA5IV7ISSVl6b1thYK9pNfEoYsp/FA5cfpMOyMoeyKfT1V8r9Sag7NzxXGW/+E9PDxyB Aft/oTrKyTSNMhl3UEixyfUNFBq0khmhkZS0EKRp7QtiIWWuu0Dq4pY0k0yg7GoO40eQyj2zhTvJ xhn8DBvBs8X1Xts4X8gwuHsmyE9ymRZa/wDkCIyxVdhioYf8VOHzC7hDBvn9SkyfFyfOHbzj+AAA AB/FBP4RpgHYgZTD1ouX8bPZR64xP4YD16txT6RaBSGv44uCfDmEFu1FK8PnBxgxDwWd8STZs4AA fofft/xajAnuGUtsosDMk1jmgSVZODhalkO8zGm6nPRQ6+yU/DuDZ8Pg1L5x8J1nTbQU2PZTZx+Q f9v7/wBYvmKvcmDOgT6TNh9hCe1YnzDDMsY8WAlA/A29Dh6kIY+Z8/YYVb/tYyoObf2DYMcP3/oA MInJd3vCszeNEeP9b5/0H46zgBJQYEeTxhmu1uUVuuXqqF+eW6W6uDsjNKJ567r+si1BlnfET3wC rsM1XfBIt8ML8xbmODIYHzIMDfmoPwa5GjnJw2Edjn7Bz4Av9G18DylQZk2udSVSv1Y6h1UJbFoM mTqQdw7ketgC5QuHrnau4FtfMI54gBOe35QRkY47OwR44CfAfQefdJ9beFe6Y/xbBtR2uCLW62JX jK3W9OODRUrYrtDJX+K3T9cMifTzhcVD4tqPhudotCMz72b4OfQWA/4BBP8AVtK/W83WRYiSuWrD k2dzBkr1w7Vp9sPpRoE1fEMsG8LbJaj5YMz8gNqP7LOkt8eiYPezewoPIEF+PgH4/nlbZ1MItI6h T3viIOfApTuZ/rbxKA2xYU+NdzTBkkzmkl7gq5benNf8Qchs7XO3794M9bW3TqRDtHMDK6fxKwhp iVMk0jHMODhWXxXzT0UlmE9kMfRFtgtQ4Ar/AAOLaz/QxM5aJz/rwHfz/RWPsRLgC0OekGFLN+GS Ex0nJX1SZKV+ecksBbMGJnJB8ztKQxnY/wBL4+wRJCc+X9//AH8/i2tRFTzIpRPuQMkyQKbqQQLY tCjT1oO6HKi6j6vVw/MA5hbMJ7AhtSHcE+j5iMM9mZmBm/B7+ggH4Bz7gNS8swwWMyh9hDxmqA4E hK+tskgsYltFTi32HX4cwHcNnX2Q5ZY9S7kYVA0WgMWcPOHAGwcBPgOfH9ajCIXKjIeWdztlMaoV 3ZlrPytUPNmkMuUh7Nu3jTzleZIy8L4rx8/kddhiRlhqPmFA1kBEl3p/VFp7q8PeVgr0O+IqnQ5T cHBDZFvSXNT2TYWAC87YivlojBmx9kzgGogHd1Bfv1uAvj5ikh3NaCuh0mngdaS3E0j39WNr/MlR S13K7gwWRDZNGaeh/MVe0ClBsgmTV0OzMEc3slHnwFu7A/AMMX6tLYplHx0W7MfUNSas6n5Kmrw1 tHpxDq+xnem4u4WQH5gtwqv2OBV4EHgMWSj4zLPNv38/sAA+Aw388rPLmGWDOMgpkkxZeTGsK2AO lZGYWSxtQS9UrkHsBwMJ+oS1Fth7qT3Ch1X/AFkKLX5swdjiCAP0G/Px4+f6zPzgU8QsuEX/ALik GWPP/L2U2POQ7QfLAhXtzzfhiuOOMbUI3Js3uU5K0McCbOVCuk0owafj9M2/VTI2nnEmbiSKOfGC WHqYo27FMYPmU8n2pjX4exq0wUmpbJ4XIrswwHVxvfD4B/fgADYOnmlnA554t88BZKufLLslliL9 kV6Q+YKcpcWVZFH8DMGFtbT2SnSDABeO7+6Pmnonwn7wAPnz6CggPY+kzjYltrINAudejbgxcJLu 8WpW7REcHyLLaKvDsBiYYhsjJiyPF8WBdMFkp/gdoVnZjxvf9ffQaiAcBAM6HHdbW1GUnedyO1kW RKmVukB2TJr9hre0NX1ZSqvQ2APMcLgquYApPYWDfFsmUQnxm/e6ueP07unkAAfwkm4rZsqSIIcc 5FDSbkZBjRmsZbtvRoFMDw+XbI/bgO50mDrGvMksE9XKi/O3tcpfOY7l+W1Dpc4Gp+YBgQ1Jb2F/ YTBh2V+SASks8VDj5jJMp+GHIBziH8DttZizfDQTszCrrROe3u/VEfPgN/WItfMNpXBcigXZ8uQC ciMFbpIfH+IJpLIcXTen3BQ62HT3xfhnJ/LUfc9raLMeXhJ2MHUXd3nx/YAPXyY8UfZZBJFrmmNs yW1krdgre4KH0360bIlXJqEKWMn19D2iZMshPToL5YPzpjMs2gh0b7nAdXeAfj/aLgL91vAMmZPY KrPFOfrcC8m3Z4fH2yHV9jcxfHxxMcwmXCHIIc5CsCBzDbCgu31mq0jfAZ9+Pvz8A2BB6FJu0sXT BnZ2Ltt4WFYgDFsqjWR77eIwtd1ibH7c/wDwjyq+1b7xWUjRxj/5k/bRgcy8HxcsTOzc1PWwMBDr d3jw74H8wfPiWhq04fcNV88fA6+yI8Bwn1y4MyMr/jP6TaP4i9sH73t3o8ISFNSsCt56kyVvZzQe CWFp/WzFoUjcEUp2bctwp/TGYQ5neCHA4f8AAcFmzOL8mR0lJCfr9+v1BQQCCsct0eK+pbBcDXYb p9Iyaud6/cM7hEIoBxixbUwmXByTZx5hqUbgtq1Q9QLLQ+LPOEkI7+fP/QeA9WPR63bavT2WUiZN jy1aGgiKP/4ldZF20QnOdfRIreOT5tViLsfcLTVbKQHxrMWcLVxVZowV22MFgBfqj5+/88wYAItx o9mNpZolCVtCfGKOPeVu65Jtu0grjuXdPBIrLuPp0xmn242jUk54RiVpUUih43WW7NlboeAiLdfM ypMt8aD2SNMTw6TyglW8gTMFuVhHvh4GIeoRkcIdXhwc+j324tr7yK6NZhzmzs8bAeP1G/ddlN5g +wafs5ozXy0SSiB7IsFkIdficClS6cK5aZvzKfDzE9kx4O+N55HhLJPniy8vGyJIPfz/APYAHRVe C/DMvlAy8rOqUO0IY0TR8MPbEu7GhDsIWBZHAPdkOGtsi/DtTS0PgTkOzLfvhD2zZKu4OfAPz8fP /QcVuLS7QVzDsrq+ck5NI2EaLI8wbHs1DKIbFFrkyv8AbdDZEIPYAejzw89Orfa6HF4fSgmLyfwQ d/3/AOglIQVXEZPG6bgaffkiJ9s7yYJlt0cUwXMvea49xRbaSVMHEMiNjmuP1GJW4PJwzyW37wtD ta7E8YyEuvnyvA6Qt6b7PqAbSaQYr0bYBbgYFsKWzg48wmB3Cn0+ZBgD1JHmLIx8F2YzbIE4PsB/ wHQdcOoSr1ep85yMtVtGMnJUl6tyWm9opzdBbZFKsg/Z09kTw6/24ocgpKq2TswW0VmsnEg2E58A Qfvx9+6NylmSOcLZnngQO714S4/TLUvxPigV9XFh0+Y+Qw8wPPMQVJwQzkNG4GLGI2CTaJs6AX35 BP7Bz7qXswWr/SWNcT1KG5Z1S1kj2cq4RKrTalYXKL3QmB/hp/zw4OfR74DT1nDdHkYDwdt8/VCP PwHwAxKzmKOplaSyBDzlJce47DjHLtoc/PP4Sz9uatCESs2mF1kQVxH+xy58gf6G4tCHdVtlVmBs Y/N0y4MjvlZZtngapbR1yoNrC2TLiRBB2PPF6eSUqsyWROJC5B2eegerKKEWkuy4GcjKnR/X6es6 8kJ1rNtuRxjOM08R84lFyCgVlm1HDBq6lPJw2Y/JDZ+QGbnHNn5WGSjzlGAJlwXu2hBRWhLxSBYP qwmZqanZ0mpU7Y9WFRTSrtA4qCtC93mgKv55NeAdZmY8kgk+SYtLyfz/AMN1ZMeLW4FBuE9DcIyS GfLIEtGdpXpewnxypGIBpIxaCe4TLVfA48PqaQ6/rQHZFZExf5MBhHak3hBfkDfwPgEHI9b3QUS2 qK7mLAWyieRR3gbW6fbBjs3ccqUtkA8xktStw9oTAdZuEGCHRkWrydGswP8AfQHnwHAQHRfMy0My vuB6Lk3Yk5W9ltPFnTB8uHFsZIlKz4whw6fcENkcK3VZ4+BBMDGb+HNmZgenjZEffz+PID/sfiO7 FsK6OSeLBmX9qEY+f2F9qTxKEBA6mrGlGOYzKrsiGYT4femv9PEHAnb/ALVn/mk/iI/QaCAQe7vR XE2ZGBeEqZXd8M447vSgYsO2/wCWz5Hp9AQyBTltI3cErL1O3ccmx7+ztrgA8m+km4Q63bY5i2q+ zjdqSiSkJz7ITh7DMFvlZOQF8XzDIIZJgerw6rZa/Pp1xWRhRoJ7FzZ23/YOfH9/AdWVzGB8yWCk zS5Sem8lXzsk2wYo3RzV+zi6vbCib+NodkakJgdewggbAun5gxmQxfJgfhP3/FfP7AA6X2ZT7o5O hK2haeEmUjkkohgC1VvEMFJTDXJ4wQZYeNkQ4ZDZAKepI6eTrPTm+DEZHScUk4AxPvx8/iAx6Go6 XADD69Pcqf63zUKyCo9qzk9TmFLaSGiUn/MMcbQ0PeIPb898ys/obMTB4fR2D/Lz+waGETqVY3dc 3KtDi/4pY7ux7rqjVc2tJHVg2LivhWi5uvO7BL4vigPDXfFFYeGD3BPQ8pqvVJrR2shhDmLDDr0M qB7ccbcIdwuC3qEZGAOqwLQUp3BnkorrOHCfNn9/58/H+rUOgekzLrf0Btu1bs4KyDayX6ruCwVO H8oTLV63+yWQyXWn8wONq/AajCNUCsLWVl41D+cqLz/aIB4CompRsuwyDoehymctgU3TG7fIr3Tq oJAerxbZXMqGPiTHAxMcCE14xX7MVZjNWYsWzb4E5th9+xwx2Drkr9gq8DX9evgsbW9wW0HNtkdJ GOFezGimxMUX3QMMlD3AhsjhVbU+484MVmjd0OcvATGk+AoP9gAAD65A9xymTCZ3RIVxyPEsMjEm x8RqpFeGv7aJQLbyghMI0zZ3kwqqIAXFrysgmxQHg5cHYc4pq/8AguVhIbIHu7OQKyDwya+77DfC 9qClOC+Hp+ZMhmCK21QLQQzhhGJvmLzwZ19rUftgP9osMD7882B0fTzRXuXQUyNpjbUmtxK/QIGj 6yhORR3vipcPhWo+PkNDIfA3CpUdbZqgFq7MtPBu7KuOPwB/YP8Av1J5hxbMx1VSrkC716m2QybO YqtXXocqxncC5B2CyLIhh6rDpyHVdl0fypPrPa6v8G7BEkGe8+fQd/w6sIDqqt74wmVzpVv52Q7Q JRlOOnrlsVOyIQCXUotk5JM1OVvM3DtyhsCjcRgmjK5RZZvxc71XjsAA+/c+6GMCaRjJgIQh3Fke kMC0BCUrv8mnyXEn2NlQFnaM4A+2rP54U+PjxXn56rSPrMxdOZWNLAWrTNVYA+EYXjOv8gkPiaKs JDtpwX3yHDW7gZCHFXxfUp1Vk1lnaLMGA+EhLU4CfAL5/wABgVUeDH1UwZNQVfbS3bcpD08VlbF5 TE+nE+ULXgLTMHsifMxDshEOcPD1L6y8vgtZJ2p4XHE+ggD6CAxXwHG2ENSeWGzldIyX9kVxvcFw Y7rH6hK3fE3lG8WDDDuC2hw19PBttYPm8bZcm2Eke7DfOcfAANgAAMTBQfLRznt1MxdNVA2CBs6P 9qM57uhLDQpysFBfqxPtOyMETARg21fp5eGN5eMVcWsoxx2NY4nzzBgwH8McGTLKquHhfBaydGiO NmxaySRXdEDEnwbri63Mp8QwdzQVfb8i+SW45HNc31G3LTXarR+t5rS1LdnSj2oi4yA3OpdsT2gW WRBhgeY4et1XMYIc6tCNaWqyPPF0NZxqurvypv4Dz5/Hf5GlHiPbWWn1+90yNs7SNRtx05bB5IR6 9MagdT6Rp9TU+wOBob5MD/EeJ+n+lnjDg3vUBLEIDw90G+z4DkDBg/jauyWIpTD1fKSeyWQBMXqp p9S0baDY+K6bqaKNFqL6G4GdPb4hL6ej1oQn3guWYTtB8erMRwnnO0WwYANg2C0WoN4R7Ut2dFqv R2zaWFdcHRA9hBli429yiei2auLjpczC0k+nU3Cepv6krYPK20i0h6OnLsCnkL2xPr3/AC+k9HTP GGY7bruvp2hGzYIn0yTGYFilUXEUiSwyWVlRyqMKSUxK7QNjcKwSivfH5A/y+oI3+f48fnIUosgW rgVO4ANGVvJ0u1ySbVOwDFSp5aZYtXqZ60Jae+LcwOZ28xOodwgVwt/aOTc42R2R8D6CAA8B2BBd kx0sQWDG3dlWok5WoyjRtI1fUunUxDQwNnlhdoMtfp63MW5ignzEd8IWXTrIMZmi+CYyq0kJaPgP P9ot/wCmO2PkB80eDavfKfUqNt52NRLQybUX2xvlK1xi4vsn0ljMMWTaAYHQ9ovbwns4tWpp5x3t J2QCv4nkHH9T8aT0AW5pCiKzjbKSyuCxZdccnpqyKga1xntqI01g9DrtW5jHcM2e4bgfAwJpNlZx rusvNI2ilAscAGKDYHp9R48lY8lWMh49SCJZpHERzK1ubaxzSXHPa4uzLW2QEa2x0K38oZEmSRAj Ksn8U6AAEnA3tZGuBlbe3HlQENTE9crxvq/Nrak4QGY7cvSbCjl4h4ovW1Q4deZGTtY30mvslxcP 1D8b3MoUJjARsJqHtTYPPgOQbDO1ePIE7HSRgejQudPve7FPGztMbRcbihppbfjA+ZwMOYDD4gSt SBCCY+hlMBZw2E4O/AD4ABwHnwBt/wAvPOJ+VqWarspN3DrYmwE+ZU+0Ve5aj6HKPo8xMhwoafzz YSCic5yTV2jjPCTbt4AAfAHz/sAD1s+75zmZcarW1GJZ9NGlPBEMAGCZYzjYbPST4Qw41ZMIzX6e qIdn1qjGGYW03ItDDmFpG0c+/YoJ8+wc+6pNE0cWpbTqg1Ev1Goik1M0siQTvtZSlpXfZgWl9OPC GP7I1yNqXVkarSjVTTbUTxxvtLQOlA7laj9tqAeSQTwK67HCHqEUqTvJ7UodJ1LWjs22FondtOod gQz0S2MBbh3gmWphZMwgHeMWECDh4oz4TrPEGFdjX5eqMAA5BhiAraEufVHTFf2/jU1MqSHF1Aqb agNxIcqRE1yhxhb0St4xMqwPMYFtqguFaNAhn3S0Mec4cJOIOIDDkCAgYn7bOCep2W+GMLLo1SL6 lodo3JIs5bj6cA9S2Mwpr7M7wOC3ZEOZ/qWPgQXwozK/GRlV6h+yZxBfvAn8d/6SdT6sMzKvit0N SQ7ImVfahGJGyarV2FwV7lbAIGGPD2QtsiEtp5jtLaAH/a7RUBPhLsk+A9z/AD4+fxasEj6aWPWF NZLLM8gjSM6fCNscYSwebIrzTkLd8qPmF4vqc9I4iT6ZIFYyfUgyKe+asYsMu2k7uReXXHX1V0nZ dVp9NvmnuSki4d6iXCwtVA9s7xtFTq4tPcHCZvFJp6+YeDw+eccBnKOTb4EpL2P7+fAcB3/okODz IZLW5TvWMka5NSAkV/UrsrsKELq/fkN8IVBdmFkIfH2TlvwGpPWeLPgwZiku3n8f+wYdWEMNF8tG WeumuUMJScCq7jqdomB5FDbWBsLVABML+EQxDT2T+RfHC2gfBhgtXRlne/8AfwAAgr+GB/GqNsPk htOMjRYMw2eu4PJd7YuDOYFMxsJZxV7UITHCZZC24D5jxWlP7GycG7N7mj8IN4/X/wCvz770VNIC UzTT8Nw+EiyNWbyR4mtwBcRkaxayfijIB6mffJiCcfCRRwxxoRZ9uLG75DEV22ZjuAPzQ55SSK9q UPmp5KvSFbrZmWYaHK44oGGQDsj5vCGPT0fVLYCHOmclFtJTY3Z2SQgBBwQd/wDPgONYsBsgWwhn kOwthUgMmpzLtnBmDsjKpx8aMSCfDRLguyZw9WA474yM3eQVwXhKSk2p2i594DYEEwZDhyxl8+7q 4EIhvhhtiWQ4DZDEHigflFGRfT3CZMod8YN8bavgQa3GDOL9zAZtJdjqDgfP7B4DpbuDAr5MwPaE rO7MLjIyO4dPMVfLDvivQ2oupXz5gdb+Fe9oPnuQfDieM/oZGqt2djeL8B/Xn2wPyWCvE0YN5oUQ 1yJ2w2SBf6f5HPF9MUSBkmkgfA6lY3KHOkUUytQXiW1IP24eG6mEchT6SYW6WMqq3nRckbcYeHYS +7p4uVMlcDYIa2GlzGRgZK5Uk9DtTAYMKFKzqAH+LjgDHfvAAF/okruQ+IcxqbaMSSVBZo1tYaXy FuOkJ4torI9XLJ98/h7ZDC+n3EetFDeGSzKzabk4ycq4IEOHwFugcai7Q1F0VZY/UQZxdgO5VKqt Fbu/cGZnr6R8W0WwCLMMC3ZC3ZEO4CEzftH9SzjFmE1fTm8oyObSTfAe7tRffgHPljvi2BVxuVAZ LIsKxqrCL2ke1EOv0lwKFNQm1h2C4NPeoSk64W3BkOHq/padW6z344NZnNjYPz/AUHwHP42ZVkaP ccuyILA5TGzeLechxX7s3wsLHGwl9loj9vEgLqe1JL7K+Tg2XHiuTCpDlXhnACm5tP3ZDulJ5DcA eGwLy2etF3rkWyL8Ot6gpO1E+wYcG27QbVV8ZifPFmoAfNucH8EEBbp+okJC6FbsyuzZCZ/inpIE Dakn5DXTPHlsC+MLQr9r0OGh1u+ByFko8/VhUv1m3xZSs3kGESecW7/v5B2E+n6/sTaqyT5TvuTs BmJBZfqxbkWwyC5S+5Sgw/Cn3x8DGCExVtohQ9jbn71fuaPVwT9/QbdAH/AH56oiiGFHsh6pa3QL aq9VkxHBPDsFm88fIb4UWx8yyIa2yUO4c4AuDbO3N5q/nTz3Rq5IR9gfgHvi/dOj3GKs39RESQjv il2iQoik7fTTNqTE4Z+5suB7EpYyipxjHI2Eie0dy4nzf/Y9dlmNGoAWn21eaRhW4DTSS08WEHdq lsl3ZGgC2K75ajAycDW3x8p+YcfLB+DT6MzcCJkgbsk8HYD9RH/Pv+wGtzrdXn3DOxAy6C1Q6brU JMQ7crAmMjTbSnFPIagYMGbUuFOr8RqZA4KbUYWXpn5ytdr/AGxP8CPYP6Diefp87l1vnXIBW4sO yFWtLCSXfnkwh8NotosBFzF9DZJlJmHBfWwe4AWpk7v1f3fRkc3aKSb+/IPPt/3+tNk6jK7zaTMV y+VXerJqHdm2JIdr+X3fdE1soeUtuFpp4dbxmV+H+eQQ3f6N/oactGrqu7uoIA/sCD58pAjyKCHw T3CNN1JMsKXctMXjo5pi1F1N89RJHUOM0FyYYTNh7MeZYaayc7UZ9pDGzlxZCEntp60aHr4XU1bx J9cSogesaxslhtQmr6g+eYdtkMuxw8GBbBgT55rmDGd8KVCjYpWofFIAvz9i/YAD2B7jmD0dXfGo XPJVKHbUKrpY+sLIjiXBNQ2FX4ewJ5ih4fD/ALz3Q2Nkt8YUK2ZsZs3sbBz4+fP7/wBbbGSG3Toc yhlBtFKak60PVMAfwIxBU7HlJ0y97s0+4yqGvvCrIJL1YT7eh1UtYeumSnuC9VWmfU+nwXp9Hr5B 6cO0rIsjKiW1LoK1Alkab3a9V5gqTOeBVEezDbQuk2CkmSyNmmJ/wIBGAqwnmzMH3FYBhLs4Piff kHf8T78fSS8DYRpJnMiBBJIFgXS6e8GRVQRxSNvHCNI13aNuojA6mCTK5mDnacljLFEkgknxMcbP EibpfaemZRhXC956NsyHMd9N54A2wq3pnUOq2TLXyVkEEeZYxSJKctvDhzBiWY2dHPV/Ze8syzTY v23sIEOcf2E/z5BP9VvsSu5HNFWeGrFkhq54bEvAC7D6cvloTF4DpzmVeYcLhuxPQyAcHuHwZnbN ouTznCauOVEfAL6Dv5/oqSxaW+D3XiWqhtrEoHQLZV6f4+kJ5+0LNin63T4b5SZiqw9gOCruD5Vb ITxF2g8s2yAzewfqA8BsEw2ZlfrlsKtcrg0lWFqw6TLJ9boWndefIrRqEVzyGw4ofeCZajB85D4l amGKzte5g+bG0dB2AAf2BB2AkVoGfCXJFfUuqbm5j624RdLV7wANH2XXNA5G+odpZIkjdtuxH2xn CKKMYpzj/HZ7j7iPiz0pGlQ5cYDB5pVlg1WqzDTQMmVjQ13UwwJ6CWBM5cRkLubn6mZ4m04/oy1u Iuz0r1yZBpaPVJPrdwUiMQAyQl0FnRPn0XTeoLOmn5o7ZziIcbKmYV+1adWbYsZbKIjefiZIBt9T mEmZdeERgaUJyMit1D0QlAQN+AchRfWWZDU6ZnSzqkQlDrtsqcTHshsKxGOW4thaq6Fi+BZoxp4G pm0hZjRY7nk8Wa2zV0TVmrIvmxMWSn2g7uBJDr7UUEs9kAqSQPshJX6yD1zXOsVnqVPIQ9QtwWoy OFgGLGA3A24bYstBSs8dk1e9qwGO/wCJ8AAf+kktrdmNAvOsqoHZbD1fwBhtiYeHXHZCuriRauhk ENkmYsiG4MntqAbaPcOMixaMjd0fvB9BP+3PT/VzZhA5d3YcfXJgktns52rEOxkniwTAtoLRHKGv w6HfFtwqpwQzlSkLawTybzV/JnnhKSbB/X8bdx+g1FSdkrcmBeHYDV5IlkwKfW3dPmaaZC8HtByi NAuY4GNQhit2RkX3wG2j+VJ+57WLKA3bwb8g/qA+/H7j5VlSJFhheJoi43MrsMU9m3ItDGTvqz2n oZEaAsJN4TOjpIcZYPIXE+rGM8eeF8XRI4HT4o6o1M8l17clN2QtrcpVshTq+wjFbid+tCmyltQ6 /MTHvjb4Ph3FgPQ3j3rPa/ypsmJy3eQAOA+3UCt0HZFg1fbWVAhjc5Sm/L1UW1WxBhDq8lerlXcL AW4e8WRuAdHtshS0GY8kxdy7n+oRHAAD4D9/YAClfFup814DudS2RW+oSwc4avMMyk6nsJlFykdD PUN8xPviny7gnofzyCG8YlBloVejPNqfdng/4AAf5912Ols35UFgOGUUyXZq0qnjbZU7VpqyLYfJ UVeV2lkT3AP8xkwq6H8BP74Q+75QoT93Z3q54AVEf2Dnz91ZSfHH09ReqR6kTsjgBPYEyO66fYuU ednlceVs8LMql5Yc4WiDiXKR52ruR8VEe5XctN7R3Guu2r4epSoLEh6jLL43qu08LcZTj2ENsCwl spFthDcqfHuEMxDEbhvkBg+DtjMLaCazikm+DgPPn9/2AAUg0pgXE/OtVMMVck79H7Xnlsewhygt sKWMnjzFqB1vjZAxO4fiq7mTq8oTRjmO9nAFQnwH0H9exPZMtDr8PlyYdbtSbT6kJYJhJfsKt5Vj 05cnJGCHMD2rDW18Pv4A/O4ys2gLRvN1cb98OA+f8/A0mPpOxh/yqvarafJ55Sd3AwnI7Y4VzK4u LtQ+h/khkhp8OC+ETyr72Z+TKg3pJ7qIOwAD58+wYH2FVaOQCPaQPg0atcbYlcSi0NusiSLa7BsV 1cbZOrNI8rp/Gzn+Oypah85UAeRWNc9cZxXTxZStspNmcDfM5Sd18C4fL+LEiAD62wQ7IW4c0xhz mAnocExybtezYnHdJSf6BQX7wADqefEcgLIElyfYKTYVg1XUtex6TOh4j4eV9QiuL5A497E9PZCD hOUrAPPFkEyRQoss1V7IbeAAAAfAAPAHyQOQy7GH16kJodbuCfqQJO7BUpi0Het65lbomshBjW6r MXxMX2RIPD59coawTxaPaq7R72PH7BsB/YOg/MU2QCyWdlKRiStqTUgLyvMJc3T0xyLSgMwetrcO yQ/eBw5a4PiPMWeUC0UpwnwYAAAP7+A6EsZFVEdHcWyB2MecbVi4OLeaNiu2hzz0cYVKxzFPGXwf H1Iwc4z2m8cgQ3HuJx56ZC/gDaOePm8BE8XW9FLt8O28O6GeiyyjmYHwzFkQzEP4c7j9l1yt8Z2v jO9hPPoO/nwD9j0Hg7cKdr69i20NSbCF0yEYh+SHIL1wVy0MIGMHxMVv3U5i4B/xeB5IMZygvjLw bx2NBAef6G7Yr9LgKhJt00sjIyHgKSkK7I1WAJW3w9WRSVZDAHrcOYDvlgWoqnx88GnvItXKDOcb JsZ/2P8An9g6tEQtys7VUyUBoT7srHWlMf5ceHfzBcYe0N2q+UYIJ8NDhvjgPMVy+e6rD2z7NWYJ KSTfPn5Bfv7B1meOI7U0t6nZmjQSQ930t6U6YpIPmNMQ7TWPOOA93Wjc1MMewgjiWf10h1EUS7iP WLLKkaSGgDlutLWS4YgtkjVdHzWOn4aGmgWTVFqDD2jE4rYV4WFiKoiJQ8WYPZJtJmK3fPh0eBHt 1VoaMzFKvZhndEJaOH34+/eAAdQ9ZnF9jeHxotDloF3wrYs4ab7CT14OLx7oK8NfDobhs8zZ58D4 ECH9DF1mzG+1wRH4/wABfT/n+gOv7cvyvnDUVm18qVc+VfZyTET7Oqzt6YaIpauSkxfrfklV/DcG Sd3hrTZxnA0NZJvAQIkPGP1/wCDsEwpMDopZmTLtAkEdq5qtkXh9P3YwNlkK8pIFoa38Oq6fcDEx fmQTy+PVfd5QxfGTpu0TfgPoPWponD6hZVCsXSMSXebmKKWONVoCOMbpVFybCibOVDLv20LYwtso E/ion2mycjXiq5qj1x3BQdm2NX92GagTwjIBG1uJ75WFIE1u0JrZV55Q5JEsiZvC/wBxgNoTzu5L NoXJUCz4QIc37fz/APl0pVPi+VZBJjSEM5DnocYTHSSQ93cHKVWSuUiWAYDrfciyF8ucsun1LZ8R lNFCfBzZtJB7B5/f/AXLqOzB7kvh81jhjUOvs6yBNfn3Ae2d+ANmuUXkDgYmbOyDw7VP+ecD7Zug x57XHHZ4599fPn8OhC9KyfIoOvZ+aHjKtjHiUr/Gdh8MPKKMP08hDZPmGPrcFtHz1VwGborrDMcC JP7Av/2Df7kjZiEbtw8HzlkB8cVWP5PnpQkRVDZXl8Hiqr/W7v8AXQHV7Jbjvkfjl2JZN3aVhtsG KxmWxLhtFtfFTeH9yKTquEYcDOw87gsjM8k6v2w5wlJB4PyDv5/pkMFwWYkA8m0KqcIw1jLoCQPf IcesrIsZX3W2k8gn/DcGOYwTJwFwA2NyYZ9G8J+v7/wI+/cBFQ6mj5S/kwMmseSXdDW3cPn5xCwo blXNgq7SyD4YeyOH7h3U5hsbgT4uLWSeyec/397n9gjay095ltWxnVJKJSVUqhbsHdltXiTFYWW4 uyXByQxhvFgGAbawVKqh9saVdGJ/SQgPfwGG/wD64TBRRd8UHbnV4RihGlWLxtubFjiuOScXkGCS PJRVWS7k43HBy7c+zijWI5+RDjtUCvKzMkXm1Wk5OaYCV7YKq1R5cwCULlHLh4eZzEw4J0P6eBa1 sZuvOeD/AEkHi/fv+wP3Ta1cI98C3CmVdodqupm2q9q4sHfBtHrzIeKJEXkneAO+GIcP4c5SYAIM OMehTQMeXg2b8/4FB2AAA6CDhDMqVPmBU341hRbCIiqHaklHpGGUA2FXMVPcLIZJmD5ZHzYKHX6k cMI6y+U3UAyqwuybBv4A/wDof6nVZSpVSQFGWp1AxLhPPS4dgN1tWe1ONn42DZwsLPMVWx1bjjBi 2KDUVIKHHWc0DSWAB2ws/H0+kB6fev8AFh9a4pFCK7b2zxR05xlfhbxk52qsfa+V/bjyz6fueA+i 5cmQS9uEnaWjUWc8KFt2+4dv5F6v9fKENPMu7tgN22TsAG1B8twfFd3V94X1u4Jhit3DkgKh2CpV VD3N8tBZRng2bCHH4AA2DYACD04Msu4ARd2ccmJMyvhrsp0O7/jIPKixCibDYFsut1u4B+YNR5fb VX7MLtBGGHAnvsB9+9/7BAuDorqVwQ5VfGEqyEgPJ4uhuG09r5USxxdbj+Nvi2YhuEPcP0ZCayUt DHfPu1q/l48fQcd/6O2BHrdXrsOZFvkavb9fFtSthVWzEMO0AV5Nrn6finocxk+Z8+wJ7wuEyZQX cDyjVckhAb8A/oE/gf6ilZIoRHmfqEWSEumGaWtMBkx5/Hxx+R0bLiShaMvFUTKjZ1tgAMTQrOzQ o1R5PSImCx8CHTLHXy0tzJWdGluDINYK9ZHyS2IYFPIIeoSbDm2piyA/0OBybyrtHJvxdwj6Cgnw G/4dOD15YddD3Mhi69qW7JWoRS0tPDJMI3HW8WxomBQwwMkyYthw6+4NUBwbUcOMrNpKMyy8G6u2 NBfrdAPwA+A39G8sKZshqTrHzpNYqRiLLHmLCeFMw0Pi8U4e4mMP5yGQZJwFwPX8HJo3KCbNsmyP ADfz/tv/AB9wPCvszZW9jK7sk/4pJSSLYaphiWyIcUTdzRD/AKbcK3W8XCubMYAOLITrNofGZZOO wTwCCfP7Af38BH9Mr83fcvbItV7H5xv57TdD8dLdY3LSe+8UwAuR86Gyi/O5j3NfZh7WvhVpdbr8 Uw7FKlarRZLBvL8H5o2PYVbtEqwhfJKvvi7EO1A4f3gzyGINwRmfErUCyj7JiDAIPn2DfwB9zWBc BGn6rVYEqwnasUjOCfxAVu+B2ExFTeL3ItkGRP1IGDFb/DtTuA2/DWVndBgw54Q5wHwD8fPoHSBI L74kA/gHlBbMQFuMkbmSV7YhyoglyPWoQXEOHdlkWQnh52mnfpzIT8p5wIESePgN/wDbz/Q2jslF wJFhCzMwIRyoY1eDh2qrizJcoGJFF2RX63ageh+YD2Sq3xfwOMnOWj7NsnCfPnz/ACA+APgCmVnk LqrncreVFyzxIwvlQuNvXBu/iui7QgVnQ7SJHp4nbbG2p9okb0xjxZdksNwDzTmsyYvq4eyLBM1K khwNnJNZEFUDSAiYLqUS+REMiycwDzFtgD2MBo+y4P5fFq5P8o4Wjz7f/wB/4D0ziOY6KVkWdaGV xuYBZPlmA9StFOLavUooXbS38NPQ4dbhmDuMBT3xHQ+M/WWc4ECJINgPnwG/H2BB6p+DuwOeqfEN zxJmOS3V0St8mwiBdbQ1d3li4bgHmMhia+EMIM+ruKraNwMoz7GkhP6AAH0HpkVIj5QYWelJqTUt hVBp2QZfcGx63LOFItAnG2g7jNQ8LH7qDobV2/PPDgso1X7ZsZvhCMAPoOwPx/8AQZEcbcRO642o tQkg3ZHv+No0taAp8hZsFORXUjki5eNnSq+lnDYJFdbm4QG93ZjyKxJ89G1fpbplZS2pJqq7Ox75 NZV+YMSCwdoq+JXNNw+YTYdwTLIITQbangQVqE0ZDQ2ZGBuxvfNgAb+ffwABBZCun6f5+og8BtWp K3mV81MkvsOnp4mGe7e3JaKeQreHW5jgdgTIM/BuNsiy8tHk9lCHDnaLfwACotgP0zT19sY6Dzmg DZq3VeqUPqrXkeznD4jIm207pqunr7hW7ItskNwW/wD0vtkANub4r9sweITUPwF/38AAQfAOaOno W10nOd2qSHbdRRJhIHpiu2VWLaCyaBfCAdbsit5k1wQ2qAQbQbIzDPy//qibB/8Afz+GwTcncyHd 2x6mmEjGWCSXUdgxaKWBajHmORXfMF7VMRkQgUxEtA8tpp5md4fQh0+r2F0rmbM+pNJOUkiwAj21 OchcBUmQsjMpFwmLk8CSW3eEyWFW8P5C8tgSiRaOMNfW5i38yGQhgyDBWnw9sV3x5WXgJVzsc3/H f9/AdO1pZF93F1i7vgEJMP16kxKPzoa+kbpKtiUhmHAwHsd8T9wD1z575aMs+TJ/1t58AAftgAAO hpgmCyj4n/AmIMxda0mXZCqkXQvQ90sIWm8g2e4PmXxvCq2sFtHHBmKe+nomcCG3YHjwH37B9NoO +WpUupwPfpmnwZmuYepB3kOAEe2fF0+rwGuqrX+ecwmcgtRqtpfUgb5WfF1f+tu6NV8/QQHgD6EA jKjKHkV3dUeN2WaWHcjl2wynaZa9gosXrkCubEPHGkcUZSBC6sgcxNUcVFYxuwyXjmbZcD4BU8UN lCD4LtBp7P4O9Mu9e05wca4UvTr5Up53pwotEHxPT7Uh1u4PkECQfAe2W++Xw8//AAADYPoPQHXb RZGqWo0M7Aajbsx5NkLy/D1RMFhMgGxtPYqLM+YGrfvYyV+4Th9fz/mW+zCyqMzI5zvZv/5dP0Hv +wceXXdqWhQ5e6VeG7aV6DHNrDTAC68bCWotENsUooYJ7itskPb5mo1Dr881dy1hoKds/wBkxww3 /wAAfAdMhzrBHC3IyOQugWSvavW42mUPkVLaG8ABVZHsEMcYDzIcyYPm4qTAenOJP8Dk8UerUl2O P2wPx8A/Yvx+KNK3pNKh1JzUS6afcrCbTxz6addt9SuoX6iNpEy1G1QF+pfUb6kCSVVcRLjMA4CG OSXmNkA9N4xi2LxxQ7nNrajqPvkJdM96yINb/wDEKdqyz1VST0uzHCgWj1adReou31MBDC2BqBsd RcbNlS2u3GQpF9CU4WmJzc4FY0evwzFCnm8+RLYC2dXlUNTGmMctg/VbdnxK3ZiANenQItpMVGG2 ByVMF4VBVrNH5LhqCpkitrthB4UdlDqkKC7hQWXNzYwl49UXH0pqbnSPRXhILUUFO4BYFfGP6P8A 1/XTfo9TfeJy33f3bVeeP/a/fj/QfPHlYPR78V0OwpQvKJHs0wElPB6gUd3mAVesilIGCBgPDmGP viOBH1pajh+LiiOM5v8A2AAfAYbA/ALpLavcmbWbgVM1jGG2DSajU7wBsin6ctSVpfU5SH2/mLRi +Fu1POQOW6c+MvNyFVl6/T9/9jwA/v8A0sVsfMsGYhxQ1GoFzGe27DT9YochhcXPhCarsfbdbW4c xDH1Wj2WwKQP/S9DZqzRzZsIct3wB8+/AH5+h6rX6zXLQMMaQ4RqH7MElPlTSHd4fZHa+Sdk3x8s it2Oeh9y05D4eTGdr9sOJPCTnAbdPgACCfP9NlEbpJt4GsF1LLFKkcyNdRTPEk+Eb0bDA5kGiMT0 pJpEkhLSyO7ZYEvCXXERlsI5ZIty+C2LDEhb8i8sfRuCuDVpn2/Kdqv0i2CdsiXZGpuyKfsJP2Fe qa46g7jzNQlbp5kdMggcIBvk4zDHBmxdko3vx88f8CfxPqu1WDVgZQyVabwpHqvmVtTrAn5zBL4a +CbQrlw/1UmOAdf4rPIbGyM2BRXJsyObwSdg58A/YD/ViqD1AQ1JHretK0slbrdy0ureoSQBJI9s LYErfNX3LZCe+Q6rD1uHr8PAbSHwTFmE+LjFnmxv+vkH9D/2B2VcnuCblnQ1jGJOTmUPGr0gYr22 L55kLrJXKN94J/G3BD29bav4gJ9cwyYyryjw890QnOT4DgL8AAIPVaM6uRQmo0yRalHmggjieJtW I9PvkTrg80g+pjjikKSyPs5iPMyxzRrcwh08jSaZpn0+ALTBJWgjk1ccMMke7LHFYgkndclU7uzZ WLIVWORfliQCFeuTaNpPOr62hthGGNPXyyHFKO9oVJDHp63D2ett4Vjw/Txu6MsK4t5WQaS7JNVo O/n9/wCfHz/wYSTtP7+7WBpMtTTOYOutcHwIFbCmF29ilOOci4l0TabfcMRiAF6ebj5+upZMnWLN iUO2f67POAV6wV/1V8CYTuMdmQw9jVfbYsoBG50pwW4i+n5LjEmAcVO5DxhgDmK2+Yt1fNeMWCeD ZGfdBfJkdJSdPDwffvd+P1FwHrcyCqrykejdPHZ/sypKqkw3xqovhPs1btDadhh2hp7odPZK3ZHC GjwGBt40TRrk5xWfm3bCoj5/wHVTORJp9OrOfqv7rqEQRHYjSF5RqHVp45JI1wIYRxPjlbsvaHuM 4wSSGJPSjOphkUY57pGaFe6scFprN2TiOhWyGio59kO1jTxtJw65tSLZtHmXCp15DTUNhA2ghsG8 PlJzGQeYnNvA94JsyG9swzmwM2EAIO/gOP7BhaFToxPtq6GOoV3gNv2hW9xtchbGIBZOQ5d2ptTV WnTMLrqx8W4GIJtrCfiHZsHwXgN2NKu1HqJBwAAP0P4VkFuj4GDh0hShympXMJNOOGoTT28JC2Kq /nh6k2BkT7TD2mh0/DeKlHz7U3N5q/c98q60QhwBz7HtD7H+hsG8A6zr+7GOs6ltGHPshJl9nzyu Jh4lKnFxdwhmJiFZG4LfBLQ4OGWKzV2jjKP+tVW7boBf2B+fkDDQY3ZlcnN22omaqusgGqz+Txfn 556ESoFXcO4jchCMcZFxwcnuvHImq5smx1a50T7NFo9nVCGzpNpriHqZrJorCyGCWnuTkkfLrdfx shPDuAf4bx2PfK5ME8VfEZ5tJSdgAAD6CwIJ8AATK2rmMogqmbuW7aPC842WkNQ0hEMWNu1cyjA9 DDsiHZDIvmPn798PFn54sjN7Bm9/5Af/ALB1DrYuRAV2Q8BatSAem8pSpFpcDw8tDq8Wj2NK/G9q XwnmE8g4I/b/ALjS7yWeTrOxhDeCO/efPoOHv05Q5BYvi1dQemDTlpwtB8a0mpF9P0sMfe0OBqav WACn+myGMRCRJjC+I10U9bLSGW7eGVc8kcUnEKcfcV/1L5/0gT3qXClKkc+buMfURLyzlhj5XIY1 uA+45Uw489LbE5Osm154mkyBxikk7TitfxYtwbzB+KMQpthQCp8c5UNcJR4IJIUmHIJCerlLClAU 4fDmMifagef25bWCA8OCKsi2lm2PYwmwc+/z/UPjXBV4am08NfGTJDzyQ2IPalUwJhpp5tsYC4EI kNb4e4L6eq9r60+YMqDiyM8nLRCez8fQT4A+A98Fut0+8XwDJPgunxsOBZFkL0gPpvT2GY+WhEPN FVL/AMyYhzA4/FqxH8HW3lm2tZ/ZDZzf35+fgCC/Hz9q9OWnm8tTzfW2n4VYszT+MrfJOhQNmHUg JXFOMERFUjza+5mKe5qMloszVc0+m4sX61CaxZqOHx9HoYn43X4PMYPSbBP1YV8WaeTR/TOKng9N EK16Epsk7fG3J92T2grmQCYMF2YJtxI5FMqy8RsTjJHtSx5RyU2LNeWBoAA5CUNksTT6Y7qWWNdy TG1JMTECBcGEOeAu4u0IY6HQ61jMZF/8lVeeVVsYsobQMJ4YBDYRB/7Af6YVscsgCw7bVTKN7Snn aWnkUkhLMIjlTh6VDT4bIt1XT1qOEMGe4G1Vu81A+DOMo4Q2knKiP4c+P9I2ZVbw5J+/AZiBfwut wlTfDySFx4XcVbKbfTFgLdbmOHl6/mVz2vPdnxjyr1ezE0c4k7Gg7Af2DwAAw0/5cOe4bwrraS+W Eef2zh74PrKYLlRLGck8eGMMhjkhAM1PjABasSfFxaMjYu3NufIOGL8AfkE/1HdFK90ImjveiMt7 eWGDK+A7+GwfHtonE5cCyO1yNG7JK7OhddsclMgBbXXbZscE8dKsPzD/ABMmByqTDAnm1sYPhuCQ YaAKnzLj+C38xPZHCZ8Ageaw6ys7WtbGE5v7+Afv0PgE/qkkNkCjg5loZJIE8khVNXr5wV9PaeLr lsaCm30/Mp+bahj4ZwDeHavnFvlGi3vNm+Dn7dqLz/6L9xgBxTnpYHlucpQ7GDu0Roag+0zLurC2 BcqY4J9qGENbh/DsaeQn2Mt/lDc2be6uwOb/ALAA9mDDFSsliNClpjMaZIFepJivhwNTITANgCTF jOTC5RS9fwuBzDExgDtQBffHhjJ/fFlG+km/2AB0rHF12/U2pzE/GNR9haX7rxodnzl7hXJJ/G+4 yRZoSmbVk6FcYxQ+/I93214JNDRlkLIgNDIBgblqDPQ9SDYwXNZ1P/DaIolX+Z2TmMiHDW+B78Pb UeYTGFBYxZBhKu/ER/YAH0E+AmZgN0IMh7NTTqS1WNVaSp2gq92Wx8PAYlXoYZgZLUDshiHYDJie q7FquBm2vxhzzZw+Aw590jaTeF9jsAZX0AwyO1g5xJdjh8B/DxZQsU2dfriW4Q+N/wD4ftyqHWfq 4ys+bbJjsH37z/TyZB180i0HhcU87Pk9DjVlHVT+0w7k4Qe05si/2TMVWtw2Dip7tLBh7ntYwZsj sc/7Bv8AiBAFuq0rKGQTSaYyDTO+M+DYFGCUbyxaxfbQ5N9QBjGsjDFI7WQ3ljJahk+Lxod3zl4F ckg8gr2+PVa5stkjDagPMjvYGdgjqYdocrCPC4Y9bqtwWw7gPZAe3z2pwt8YL4yMBm/yp9+QfP47 BpbGFDiqdYgaHwk52cNrd37qLceW4NAGJdwtQ2e1A62HsneDnD7axmMyyL/Y9kN/5f8AYOmohtBQ yL1ONtlrY2zqqVUnuhfBIg2GEMpYRQpiwvi2YrcOnkIXbRgQzkx5t/gePuEdggM/77A/Hz/SMvvI h0w7zVdicNODU2gVykn/ALeLF2zbiq+18ZLkAWjMxDseLPDHQNvqU8MUenusUXAG6pWHswr5+3q/ YMGCo2JQmQh0GLyBNM7XvSVGZZAlDcsYWtrt/wCJs+2SghY5FGULbfqeK3cvt5sDH8i7+K5+vAdH Y0uGLrrJbVVXr2pUjlTUPLB+LqbRKcCBgwyOEwxwM2Bq7574jI3kxm9nKu/ER/8AYAHswrQmOEDM SWjKTglnZttMjCOfElo/mijDKTWXeLIhoeLjYEyDAq/ir4jIz4rjGY5dgQ2DQT6D9Bw38+h6/bP8 J0AlLGMsjKuJ8ZskAbIHiGQXqCLfEDWBMQ9PbhMT2CHAQ+7U5bWWflDN9JSXZH2B+4Cffn/qYBsE lDJ3M0WDW7a7BXwHbNT51hXQ8VWLAiXIXt8NPfKruCkiEyDdVwKQMO9LPF1l5Oc2CHf7/iAwAH1y QOBnu71O71uynHcCcXHJFR4FFg2VGgvNirxikcvFk6MC6VlgLKEZd8ZzG4tiwBz0S2K2Mkrm0oMS Nh6bauPNGTVYds+U5SxYtbH2OHrdkquYQcad1Sp89HZFkZzy3/OGzgM+g4oPd0Bv58vRyLQUhzba ih1vOdzxJhPsj5U7Yn1fFl1ye5AYuwxfFWLY9bVdPC8h/MrPHngwZ9JCVW/vz8fQX4/v/S3pq6JC 46ZM/FJW7PDOFkfHJcGEwpVXywNczF4OyTA8z+lUOwLa+s7XaBMYj2jV3n/3/C3cepceUIWr3ClJ tGhCTRnG2FPrGvXhTZPr1o3Jdi/dgdDDwqrIh1XUsPgAzHaApzlmRncIkvJ/6CggAB/kCJ58MtKk br2RuZiOx88iBGfuxxOR49w46csGZMryI+JmpUN1tbV2eOGzBArjE+b47ZDRWc9srwNbXG2rKrdt Xw4F2kUNDKdvnLUYtsHzHC1A9Jjw9jXz/Iw1lGKcGWeEm7RePoJ/YEHzwFIVMttsCn7Gyhq2HTZj tL0zpNzNGppPTTok9LQyNqLaH8QP8zCfR6lVcMYsoe2DOEm/Ae+/v2OHTskWRQ+U8qgFsydR9Atq 5UzuYZQ94zIeFSldSot7ATLIpMutVuuzMNPOmBSCTGV4Fk9tRgfCMQIHYfoHH/UCWDSdXxbAZBd0 38pJ9jKtbie5HB15baLar0DpfcB9kMq2+GHBf2NSr+BXIfk1X9oGY4buxJOAEF+3/E+APn7DxlXV BtPgZJVl08xO4MbZXcRxtndMInkwxUMRkpJGJlkErD6oN/FJFqIo8cMVTIRnUkhI5ZkGRTLdYj2F TpmU+l2WYzmjT4+c2tWwm0TX+cyWREmi2helC8SENOfIa2n+DnWhAVWQm8vgsZ4T+gQG/wDnwAA+ NociYhtm12hMk1K23NUpZfQpg/Z5X2i2n20GTExcD5W/D2pSQG1VMcG7yrJN4SdPH7/wDYD/AFdn Uoj6G8ripnT6SoExmkpQkeYT0eWt8DU0NyqtgmB3Bw5IPZJyGQPYQ0bEWieyO7Wj78+Pr4A/7nuk jYleSIGXDaCafY9Vq5inKceKZT7f+Gfu6zU0VXC/WxlvTzLIwGNhXx6rzrDEWzPJz6S8AV8CAQT6 CAP4MaSOSobdNz7nSgKrwMu73c8ihR5vhWLQsWEeeFcSnOwaFqcVw8c+6+3xVmiFqBobk+Ozkev6 SthnxJxDmKruCwthiqZ5DcB4ZDpNPZDFgWo8T0/YwwwnTdoLPBwgTg4AB/v7f+raEK3h0OpodaT1 tuA5qeS4O32RH40Bitkp8hkJhiYYZJhBksYDqQ4P/VCuzI1Vm97qt+4Cf39BQT3U9W6mYsBsJLia Nrc9dLjGl1+hw7AXpkXFePORi4A75Scy1PZkxQyHbkPWe1lCYvmxtJ1GIIDnwDgIBB6ajxvDHcj5 bUDJ2G1TEa2JCTDsBscHNNXotczWAPyWtrgfMU85AXx5wP2z7ydzEcJsiPUXgD6Cfw6YdRlMkAXF IxkzAQrIZCU2nR4oY8Nu3yVlkzyFFKOVGGREaZmDvLMrLAV7HeT+R3GRJ8JQrzfPPSxyylmXJpva dNx4bGzqNVH+YHQ7gTy3ZtNd3xoMWhdlqLfwzNwcHbXDY7IF2YrvhNGBu3uc4ChIIDz+/hLK8V/o oQqgnzs6xzNTZNBXxX+TcxmnQ4qVqaOoaIQW2Wh9SFJy39l2D4FpreKOhXuTeTgQ5iDfj1RMGHAT 7Af05+n+p7HdKxbYlkKRKA4EuUAT1blmSMhpJ5NwcIcOyLI3hPY1UCwAK5W9zvgWs75dgQJsHviA AIOADrsIK6XLIEjMXOCckQ0lsV69+OWh2hTbZ3GcB6HDZKHcE6v6rncPfON+wt8swm8WjsgPtF// AH5IgiIZcNMULiQIunwxkaWCWRidw5Z7KKBQwonnx0Y1U8U8Uunk1IdYzEWfUZ4OIpIZQPSH9Od1 u/uB+Oq5ZOj9/sXI9DAwWeiVxP8ATmzh+ZWvqebuFwq5kxiU3MMo4TJqFyzU7MXV1ikGYID1x8zN z8gV6IsDLz5Q2GOl5+dWS9QQZYQBMIFEjTGeHLSz6a9ThlmqT1dphGRa+OHFJURRDlWKmiAcFwGL FZeaOgz61rs/nyJ04+TCsGByPYbtnR5ae+54Sb5OwBZtbNZn9/J+f31YecgH6mfwD7/9P1+j/wBT 1BWJmA+BzFd8GpOc2krIEkYbIjy3AUmqUWUyd4Lgh1uthl/4L4PA1zNZnkp7jEe7AgRHPgAGKDhf uwoOiz0DLPlC9LB0l+1CJJ8GwEIlqZ9Z4jCbXXRRwXzFKPgYQZHQrigv90I4fH2fcXfDFJq44fxx wPAWDj/TPT8xHzbgJJq5kkk+mxtkO7hwOyF4xV6YJrmxg7DakKq0O1YbBZBz8lnDBPgYtZWTlo7I jgeAgD/7AA419LLtFwEsp8yW3ULYIckp6ZpgGv2xwV4tsJsvh8OyE9PhJ7BT7wh2hPp1OrPT0UKL Kzwm0aTBW6f7RIO/8/fiVlSKVgsJchQ7TH3+axFcVzfJux+OgDNIyxNuND/y0XKvHlsl81xx+a8D rS6Q1splpK472otnly1H+stP/wAOnxKfcloO74+cfhh4adqDcNnR6WuD4C3WYxoF6hRm+YJIN+t2 oj9ur4DYD6rvBH1UUjD4u+JJsDYw2Swjr41FWBE5lFtjV+eT/mLdVzHAOQmVzAntvMCaMTaBlmA3 Z2Cfl3gID8RIKCVOmmCaj0nkqT4hyXykWokvWvQKGQs2GermvbFAmCEyHw8PuC3BfGCpUcz2ztBo ediNhN8AID8f4CAAdWWkEKzzUsDUDRQ+ocDAW71U2BP1IK7D8VydiguH8O7HDUJT8ywJirBvA9QO JNZKfo8b2EOVF+iCA/TpBkMVSsn1KJNtyCBs5IY+A0rpQ5jobyZDbLL3NlwcabtxB00ztCHUyt2S Tir0ufFPyMDidy2OK40a9mB1TtrRamUuc/W20OpU2Yz7UsiJMlPlZXdKZK/T9SEwwtmGFbsa2h4+ d4xXQybN7drgb8fAH/AY7/O2JSdiHrVre5K006sky6Rsa2dOx+jcivTH8PuAtXDr9Ph0OqzGKeyP F0j+D8mRnwpZiyEdgl2doj79/QO/n6+zHyZlWXNrpcre25soCEU2i6yRCIYxaCwr4ZCGhmFvga+4 NQ+v59VmHlmZ0J4ZkcIlGwmOwb97bAfszVDVfVMH6MJoFmXXUNXVugyTSekGcA8spTjBqUEkDZZ+ qpDmp/21Asn1rTx6hPqF75j6Ut3wYF/FAYMD2/mA2nUFS8+PzIYlcix7njhTLweWU18VZtlrJ6RE cbvWAQSnKioa9yaSsRVY15N3xW8hWCnwin3t4I07SdGYNleaL3adX9hBWi2dOMZ9DwG/Fve1sxAh 0ieAVkbLkuetBT0+l1SUlJfee4sIA/6l9eTOotgvDT7qLfK6u5vCFymnV2rHT/WWQkMMsXGEJpWq yCG4WmZh4APUb97LBsncvFoZSnt3SeDyCffsevsgevhkOsZS5yTlBIGw1fqjSbA/HKavOXG+eVuy GIb5YEydZdoWYjrYy38FcYsnMQl2HPAH9+P1FUXUkHU67KZucLstktGt80dJthfTyVsJMyKhpFI1 zSZAxDQ1vjQ8xPQ2DnK2zFOB4rOARJ4OfPv39fb/ANGNyU8+xHZGf/DQjo185WeLFUTZvjOEx9mA /Oce54qqthXg35sn9UW/qstDMinJmU75xtV5Ut1lHT8hPSE/YZabFMOENDmVXDW2Bb+evz/hjCdo adEZZ7XO1o7+AP8AgMfsCCW6LTxbQSn5VhSSWnhkZBMfJtSOWvipWheA20nj5i3DT0Iw4LbUQT58 4Nj4rjJw4ExBfr+IvAYuYXZCmazFXKA1iyab2glJiDzxgPLmPqbXqa5OLhMT+IMjgQhtSGv91Iaz teAwmcCb28AD6DsG/wCwdbUoxMAuBgoUyUmyBdm1KkV/qip9PsJbq9DdyiG4EJhiq2SHMXzHZWwF JqDsyzjijI29G3bz6DsD8/c+6HTyuIZVCPGkcm2qMLd68vCooSIeMXGPHx0UkcUrxK8kbPNt7Yg9 KOPMdyzyDMJIuKdmJok8/ietRDYANHtVvgST/MM6exumVfpO1PiQ9OZWIh10uEJtb3A+B09gD2NW n/pYicZq8nWaz7WgE/r4Afw3/f6OI9BqaRYFWT221DZ/TmebZbfkqtTNi20SndDlIZAOyfMh2QQD 1zA1ATzn9UNCNsbt2uBv2DB2i2DYOnxl3rCV47UGPIdb0yx167Ni/UkMgWW7HFqcopaloWohTDEw yvp9xdjz3w2ZGfFdmJ2pza66rQd/AAKiP7B1PGEyGertPilKrq6yExjCS6nqWYnlpiueuM9KMcws hkDh0/6PAcOVOCystGIxG3v9UHwD9wHA+AkxDKIw7wzPzAzrEtOoU5gSzxZYZiwD8gkjiyQKkhnX CesQ8auTG0bAZpIMTedAqftomjfG4WDR65p9kU0hqU2TKAv7EwUaBIezk0S65V8CKG+B2QzMHhoM 9Pno1PkybQr1msvHsE8/v/AT6+fP7ygd8KJYZtCvhK1FdPf17Gwg5D5hQ8pvltwx7K+WQY+vsldH iB6xoaN7PdZs3CbsN7+/cBAAAB/3FGQhYDRhnMaQeCKmahsksfNfE/uR8VIfP2eFZG8TCD5sI+ej uDyzC1cYTObJseL9+/gAGwMFPKFE2GBXCgdTD1pYTapL8xwX2xbTabd/ih+YUnjMhwyC3VZ4hAtR k3PBoeWY5gk72f8AoJ/f9gACUdGEjm8nRAKqsvJuz4rxQ+eeOg+oR+xGeLLyyP5qqvtH7r/U/nqN mAktIoPvdLuAk7uVYsi8QloavzCU+Vkrq6fxtDxfIfIOKz3CyzhhZGfWVh4OBN8AAO7p8B7HsRZs HlLGy08AemNoEWYNqhBww4kHAnkho42QmOFJ4p62R4qpL57EwTZmgoM3w3+wMCCf38BsHUOUQjHa M8BM16ScJUxSiGPhh5YeLFlnq5XPh2oHZHBwHuFjYsD4dp8YTFtG5o/5RBn0HgPn34AAnleQttEN PFi5jb3VD8eMVu4XRzw9hLjSpg8xitzFtbX+1d8WBPBuHGSm5vKOEN+2P37fz+HTSzRvbO6vG7LP JE1I9Y4FWq3+8UQMb+bAAnuw07IA7IjxozZSDI8iSWhuAUtemlGzXdwBTKyW56/k2rAWxoeVMtGv dO8NqIsLILtBesauU8e4Miehh0MfDg4p7bXLgjk1coM2O0f+qBiv/wBgYRTMquUYyaHsYYt1vdzU NYZBgkn8wQ00Tw1PIMlbmIcLmBhVgWi2g2QYzFBZNG3urrsBnkE+AAfv3Um6ZmYLsB8Q3evUmt3K Z4eYSDr1VuQHfgLIPhhmSn94X8a5nsKGj2QjDGj/AFxd7R9wB9+fkLnwAB05rYr/AGaqrU2Gt1K7 Kf20TQ6rMsiWnoZ4SBlGF9DDmJhiGvmK5odwrQ4HWbxF1cMZgbs7JOwH9/8AP7B0BkzpN3z3K7Ll IJFxwd3JGeFtS0oskX0alYAXC3VWLq+QPNH/AF8eSeqc6qA7hYwxxlD0NlJVe1Rqcjuw2PXrIh4b +BMD0/ups5hPcDmni0PD/aKHKMxwHik/fsd/PYbAfc1Xg49lq9Mrgagaul5STTl3D9NNkaf1Nkcn JstCUXr7gYeyFtkTw9qdj4EGt2YZ+M0Z4NJJt4Ac+4+A5+f6WItXj1yDs6AGZLkGvjIgO8fJDuBb htSu7RXMMeyTFtwW0PjYMDwNqhjHpX5ysvAQ2beMAHgN/wCfY3GtSYYA1XTN+03qWJUnqMcObj3C sq3xQxfExdjLbAhuHG4dkMAcGpMH84zcXxebM+7Xac+g+fxwPgHyahVVVEZSWZJEi1Bekb+PMv2+ njkuIybLJuVK8rGnzP1AkRnR45G0ynKeN0BEbFLF3bgDj5/V1X1GWIyc0zlyfQ9bvb41O3ehwzh1 hXALcrCq9pW6/tRP0xuFV1WQD9tLQ+CYJorOUWd8N4c4AH/bu5gA388rPWJrN1hp9J6cwNeqVP1B UqlfE/Jr0x2fQ+PJtjchW09kW7ItRgmQXxwodH5ysob5wYI7G3bfz78APn/P9KRQXrnDuatqG0rV iSrFn0pP1ULwFjIL34bSGix4bAHmocOt7I+FBxHvjUYGPO6f7J/r4/5/790txEgPGtcRaF51XKTq gZDeMiwtNQZ3fERXtcDFcOebyHhiG9lgHoFl2MHs1ZaODrB3A2lb/iB9/Pn+q2kZgAs5dEjdX/l2 Z2NEUcbMVfkB7HC482jTGQRgRhJXeSymykqNhg0b2+5VNlwoQkcnKhcdxZFe7mSzrVsYlbVzVfcz svV8huGmeWybpYVyVft8wOHmrcNwmvGJADVYcmzK5QYz/wBbA/3/ANz4DquzReGqTJmJK4m2cEaq +mamu+DTs4lPFvlOXIhmF8P8P8kMCfv1wQDk0Y8i8Bgw5shs5+h/+wdMFbXqv3DJsYynuz4uB7+l /wCDDV2GZXNOCdNB6b3UWw9buAfeOWjkNVh1n2v+zb2E9+0X+Z/rjESQaRfDVaukHUhhkz+W3Ivh z1fqaeCsaJXKaHX5i3MuAQHT1o4pL56uXAmMF2hii7I7cH+wAN/Ac+6SI5os/T+o2BHNpoZmx08O xFHGiq1Ns+CzHF87ApcLY3f+JxMYtyFo9RPHJuySSdnqynFLsklU+3u7jfWA1dfFnGrUFfBipba7 Ym7CH2PRuoC7nBD7sJr5ZA58MfMmMpB7gz2ADY1wMzyUKo3B/wAXI58AfQWA/wCfQYGwEPLSNPdP wJdkEg4FkJWE0JLIHX1q5Pviu4EPwmYZDDAYtTs9Wk6Y8o1oWgT9gmKSdQfvx8B0eUXV96Ma3DSa 0oF/ZGNJN07HrHOkWFMVzynv0xxT5geGYY7RDg9uAz3AYzU20cmB727HOA7+APn+QPyfqtDKVVH1 OJrdk21WCQqv8tX1IJ8d3h8NLW0r2QwLYdwe4cxxZLGA1/sZhnZSgtaKHHYJzh/fvP7AAP8ARGF3 ErI9YzTWK87kLRjnIcjcJHBuq4uxQmjVRGylkkhWKOZhFGg2pYZWZzFEuN4KoBz8khhiVL+78Ibv YFkapU3THV1kJE0ZdxBVVpF3TFdXh4HnBgtSt4a2ycfw4k37GhkyaGhsxP8AZDj8/AAHAV8AggBW n7QuS1cxVzbVs5tcANbjXdPqtkYG1bigdhira+4VXMT7UZLBfOedpTm2PLQhjFk46pKScAH/AGAb Afx63Mg9PqCl7OMu9hSaf5UpQ63rE9IXlsWmlvih6fmB4Yean/Dg0s4AQd8DWb+KBmWXkJdiS8b+ vv3/AE62xmySLr8Or3Sn3HW7QAuSsgwG/iC9sKGkcyqtgmQ3CyA+I9beP2MPzkXaH0c27VccPnwA Dfz/AJ+2eLFmUJLg5QhlHFFOQbNZWbFfA5vwMZlVXiCw6YjG5GNSTAkdpahuSA3tpxeTix1JVAKj 6lqQPJEW5tJh6BDf6dpCHWLgkrcrU+7IlyXAPuBkL1xT5iAhKoK8QTxiz4oVoE8AnpdqTA+7AAQM V/A/isswPQdy0nkwEivbIG0/C1aJDxnDR8sOhymx8Q0/h8yG4MnHjJwCwXxXJjgqHpyWdQuyBHaq 34/v4BAPoOwM2TmK+LAH+eh6eLaQ0M5bA+t5lbyrsTbQs09KD2AYp+1FuGH/AJ5t+eCcBiNV9NrL N924OAP7+g/fwHX0xV9brF4AYqRkqUPNJDUiwCUNplmJQFhlC7s5gt8kidn3CnYFwT/mExhRX8Gb 8H9BPnz/ALoOORg8cpZDNDjMJoyoxj5rJUf+r4AY4qEscHLjSJKAOWOUO17Ih4x7riiiur8Nl4sE c2jbchWzPZ7mA1UnoDJpufLaU+B1LaNZMiETLC9PtqfD3gwGDfMOIZDfU8ms3ILGIyOECdq9gfsO fAEHqy0e+flXBYUqwKxGodX2QyS3DJ09o9sGK5F1khy1tgDmKrW3yHV62cfKvPWNW6M8+ywio5vm 3PtgAP5/36ZDZX+ZYy3fGuvKz2RcXA7Ip1/c1/cemRbGrKxmgxyRkuCt63Q2BwOT1/BHuCoBnF3p ZOG/B4P+HPj+/gAClCMiG0WJMgFGp/vJSrF/dyHAzAlDld7qbAoe8YGIcwOPMToC++HGQZ7oe2f1 sE4CffsQD9v/AFdBjKsLbTumASMbTm/mVLaqrt5N23IA6GPdj+nzXcSGaMtNKdyBcv8ADMw3DeJy zaQ2Bjjze5f5JkZBKFOhhSBOOcMTi2FZURZdjV+PKNU3Md5oxSMIxlOyIQiJnM/qw9A1kBDWvOke uQdKBVKObgJKznQIQtGsq7aHtXXrGvWlErF5ZWpDrkFptJN4MCq2LOxsaPkATXpvsTIzFz0k2wpl K+RN9EvPyFnJEYZWfGg+qGJG502lPkWfk8cn8+Ok7jDgcAcAWTQ/1sf+Oq0HHyZfD6ku6GtxaTQ+ 6IlfJXlyFwpGpd0iTCAeq63hh1uwO4wFfpZqcFkYrtAyzDiTzYGg/wBAoOwdW09fdRXMQ2iKY0uP ltaY41ZV+Ntqv2GGmlGFyira+yIa2GDp9gTAfnsK3ZllpfKg/vgI+BfvPgD5/oPh5jhaCGSDNuTU teoY1bE1uhzF+snByq8TEF4kFrAxDD2RvCqeHeYWCau0IyMDCJPOPP7AAAdcZhOeBbQn5rkq1vai 4NUl6n+1afEcEOK7s74t9k3AOHZOPhzk8g+TeM9+FcZsdXOrtv8AwHwHTJysm4ZAkvoy7kB3dx4J MMdvamisylDnkDhgtXkaKKQwXw66hJpJBIg0zQLIBqdNIDpdTpNT/eF7JBqUmjuyrRGlZVvHj5Vg 5i3pplV4/h59zLdsXRW7s72En02UYbulTB9b6kNPYcOGq/2UrAbdnrMYUFsxPwloo+//AOT8f6PJ 9qL+TImNFtDbRZLfyZPyOYPBaYKTUh8AzHBDQ63vgPMxDwVJggI8Pym2Mxw3ibR0HsGAQUEAePn3 xYGZS93Xo60hmuNS1u7zNTNmo9e1vX66HfLa09nq5mJ/JA/w4ZCZ34cLa+YzUarlBhNH+78BPgD5 8+AQQADjkWQ6QKzuAe+VjaNhSiSTYRiZW4/gZQWWfFfh6GyIThjZBAw1VLjWnG9r7NrJN4N1cbCW 6Aw2B+Pn37pYCtGoCPvZqlsuG1nQqrbdR8e9PTsqvd0To2RLOiIyM7RRvNLH2YUY1llbYkGfa65e eVPFG6PWeoC1XhJUharGW+3oN4q+vXxos2Grvks9Kqv5jgyIb5W7B7gbQREen3mzKbq95GVW7BAm /oL9v/sffuqrUWnyEggGXLaW+6laGJLZtwcfLcCl3CU18h1eHMLftDHp87kCHanBkYWUJvPCTbv9 BfgB8/8AriyFOh67Pj2+K0Hqchob4tlmDTq1EKcMHgIlyAhx5iZT8MPMT1uxlKrm2q4ZPug0PPOE mrsAYB+PnwGCDsHUOLZLwQ2TOn6aQ5LJY6rf94h20ru8Kxk1TilJi/MW4eAdbtBbB4r885Mo0W0V fZm+BAex8/AAH7YT4Dq0XPcEOy+4U22haUOcbunklnwFMvgc85eBVPatG2Miwx5KyyNFJEjnDNWW KCDPGhRYi77QCTYrIaAeU0ZMqyw9tWdb+SN28lvDu4yosuLKp8hai2yMjJw+ZB++Kq3cCN2bZiYN 3NpJzHgB/wDEfnzZbH5dfB09klVjGAhskaXDGLCYBLIeQ6yPRQ+8cwhzMGBwgz0/BVmjbMxfBjN5 tJB/19/t8+H6n19fukO7O7Gqya9PEtpcEO5pCOYPW0vOTRDYeSJ8xkQx8wH9tamQmzFENlrMGku1 XcBPgNgPn2DYDVGhWfKcKlPAXx2L2DlG1QAHyZ/AicphjaX09wxrirFu1GRgMfAYIOIcoUrBXt8m DNu2OLBUW/sABgAbAaurQxiCN48ssBKMHhrC805vO7HcKxvm+AK4yM7ncwxrGDdQ5VeD7i+Pnt/H XJaDQUFujhRkqq2S1E2vUCnLYT2qMJW3LUYkbpuD58wwyQ18wjntN56Djtiuh4kzn0nABi/AOfeA QtNd4L6kyVi5W0kySUUxJiVe7Eg9hQ0I9wOLMvD6eyOAev2ScBIYA1sZumFmDAn+lZ/gP7/ieAFT WvtGbDPVUkOrvnDyRJ3/AMaG4WFMfFdIcvhj5iEHT6rMD3AHA4kq2TZnsr+c3ukzmwfv+wYvyrre 1HwADyQwsaEs5ImLcveLUR3dkcorY+NEMfDM3Ah4LbgHOTyAJVMcG4uTJfSfPoOIE+/b+f6kZKhU BxdETdXz4Jaef/75GZylcZ45H3EWVciwV9lv4g64VVZ/LWfaD4oUOb4Ox9bq9q1PVenO6clAGik9 tXmAlbauvb80MKa+Q94rd85gHTpk5TQK0BcZZtrGLIMJaLtv+wHwPuwIKCLTGRPnq56AZJDHbKJK TCr0y1I93GJQASLF2o4GO6lJh+QBwdLOD4D4yTFq254/dge//wBQHz4EBx2g2dguSXTRmrpJya0V Qleq8Ozh6RMGShIFomL5hwZafQ5g/wA8wITvue6C/Y54QHv4ABv4A/07LMh0PXw/4DRqo08TLafU CJaLIByJYdNsZTF2hgQmBw9kbxaENHbWBSgp6wzbosoqO7BcN/7ugOPvwHpK6mNGhR5Uz1r6iXTq 8WRlk3RLPgpdJIY03ogiSR8ckMwLBXfTA7srB0TTJDHKUatqMZbKng5cCQg9vj99D7ws1cV0e1nf 6lkZD5qNX7zkZLjXBl0jK1iRMKoxJt+EJNrqGuhxxH1HtjGrQ0j6R2Pqs40d9GIM96MM02weoXcB gOkYdM2WZcFE8Luxbr1Xpmvaf1CGavilq51BTCDKhzLssgPR5jltwVK1B8EYor/o7hNiAPwA/wDX z+wKfUownbBt4FrfO6hBkw9njofqEY8clAS262KxgUIMyQoiGOtSG9rwL/mR/wDmZiS1h6fUFNr2 KHgwYrx0/hb1w031IuSElNrpqf6rfIY2ZdF/ZOsivYYGpYlntAdfmXu4p7ItjoSrWdoKbutrAzF8 Gc5CGucgAB/E+AQfcAyBZI29SeaZJZp5ADHuSBJJd1InkzXLbMhUNiMrJxXpbtHNJNKUhiWLaikC kh5HjjjiaVErvzEYLLkNu6yfKweq/D7LUyWw2cyNTGq1cvVv8xwr1baIrDY/JPmLe8dkx9qQf4sP 4jHzBZFtDw8nObOzyg8f93722CsZSq74Rw6Gk1zVa2ebc6NL/wAFkR0hD+VEsauQ49PWzDIYDj6r g8gAtTITGNH1lH5sb58AQQD9bvn8Y28Ecdcld17aGaBN1iTW7As2pySfU68IAyq9KFHBfvhPT3Bb mD63BTyB6cybmrtCz5urgmwP2HgH4AAAWKSx+oS8ymdXObnb9FshbLDzyTfCnZEqm14CruDhfDh3 4MOBDlSGQA2pDZvF8mR3Z3Sfv2P7Af6GLEIqK6epkriRtuSKSGV43Ro6a/aCDkPcRXbZkuW9uPFM ryJHJxHUbRuexkjyqO6axbXS/jlVh5At3OJNlqS3xszxJ3IOyTyExKtuXYxT8J1u+Id8TMFuehp6 HeC2ss1X03uf3bz/AP1fvcABrdF2RcEg+Lys42BzbIuOvQ6HcweXDqWuWE8eT2BPMVXZDIYIcV7g cqTyaz2v+j2ib+gv37+A4D01MzTnDXKbY5V0nuK21YRthq+2qNreLMFxSz4rw2CZW9kOEyHYENHP fAhLazjV+2LLwECJLxv/AN+PoOwdJ9taNUDG8WplRc6rSQG1BlOZ+TTKO2YuSbqaF6jFsfpvT2RP D3wPMA60uF8VU/bLkfWZZB3YkhDmwAD6CwHwAA+cSojGPchlmGmZJISYpETZC7rOXljilwDoRtSP 7jlha5grZNDupKqI4jB07dkcbY7aiPHjHFrJbvvwtcyQqrNQFdI4eeFziIdIs0LZsdcvLPiB4qvZ h/FOf1x8DTUOyGFwOfltpxJLT4rec97rqxAYAFugAD9sGMllg1+UUocM72FRVelLItp3rYxbVLu9 byjynbVX8gY8GRkT1vGacn1/ypwJsyx3fRnfD6Og7Af8+gdPfU+O9CtbZcVBrJ3pWNTDGpcr0+LD uGvhE0+AUIOOtQPiiGG8/LVJ+LBYz4z4q9XrCxhhg7pHAMMDy+f4+ATUhTW3G2APtknEmgrCQHdo ZLOYF4OUixHLjfzFsuyGGRfmHFLibVxndBlmE3j/AFUAIP8AQP2BguNp3jcNH9O8qSJHJlu45xvE x22VY3rcDVIjeKGNk9Nk2A6iJ91BjuKVxvGWGVecmr+Jh4PuJ+KIohw7FqV4aoDmeJXNpLh207mK rqu2C3A64tg8BhuDJMT3yGydyIFaEHw4hLL1V6GzbFve9gAADYOfdb7ImHa5zM7NtDO+ZAmcTvgl Z1btkOLtDR8wfD4eY5hxsHB4HOfCbyLtAZ7b2bOn0E/5/HE/0wo7I6Zws9Xxm4H/AOek2ku2A+Dr JiLb4mrzRKTyIdkcIcOYnuE5SuADOh8ZF4o2+cKq79g3/wA/0pZGOUGtyG+McyNui2bU2BbziCR3 GTe428EWRDQ7IDQx/nqPIQec/aFnE4ESLRR6ifgG/wDnwHQkqJZpMacQx54vLtttA1hC8jxQ3uG9 pVyoZ5YriUHqGOIdqPMcR7sN3AH8ZViPxZvx02ocx5Frd2IbbXoQlXyTaKQ8OyePh3BxeJz1DT+B snzJY8wqwGE9BME0ah7k/rbulhsB8Af9uP8AS95BCcjjIpUiBk5OUkuy9V57JqBhLi2hITYvME8w YhOCJw8G2j3ydM/a2Zm+7bJsGKCfPv3gJJHOajG23LJdzNnSZkXV0S3BwD1vdyfYwtsxaLs2dPrd 8hp6fNeKWYENqcNzq9Xedj7pBEc+g7+A4DwLrTMdJrat9qotPNuF3EtSDDX+cSX7YtVNu6skPnlf 4h9MbJSZn4e/YNtqGLMeavfO5jwb7pI5/oUfKJ9xt2Y4mMQTVo5o7xzEeBBqRZY6LEdl33UsZanj bJ4Mr9cx1JDQj7lOfEZupX+3s7WviHaF+2KH1AV6xmRuJ5pDjVPcnaOJfE0BLu5NZF987qWpW918 bsbvBPVQ6MTaFcYLB8JdufW79+2ABj0n4Zy3CjJnGaqMVuYPTJMsPZAFH4eUtphi/D424THCYHHz J1lr6i1B+c90ODPBvhJw+/b/AFFv/IAF6pAezNOdsDLubZi3p7q98ktqO7ZweIttDQvSleq2Bw7V zKrMD/gz9SGANQWUZoaBn+9jiCAfj59+ftg6SbJmUWpL9VocVVjW1qgmXGJsi2s6RcYepa51CaX3 wPaExPhoZd8YA7x3QPYLayMV9zGHNjdkd+AfoAftgt0NJJBMjajTSzTQvgoeGTP1IzjMjDEVtyBo wwJzxLUtY9TUrPG0MMsCZruhg0PrsXl31Y9/ru0cqNI9x1kvab6FbEF0m22pT6lQ9ekhtlnkCspA 2vU+VgUaBJQpVae+sjhSaHD558BAbZ1kExituayc7o1dgf4Cvn/Y/v6rkZcNDQxuU0TH/HKyUBeq ca1EHcO0OSnUvJE9xiUmYmMpCYqga/RPJk6v4MjA7RSTbx/X4Dz9RAHYU2OquzNZprtvzuHdqnsD WAtmEgxXNoUg0HqrHh7Ip4xcHIIdjceAznwmMF1esjDjtzYHi/eAqMBsHUbI+PbS+BpKBMCXAuNS lMtAbDr9HmafZRYXV6e4LbIGmskIgyHANgNoMPWbPclX8mBpNXBPvwAAf58f61bnpwRu288WeEzC pBnt5Z8nP2rj7caPm+EqOdThwHdFMX/M27o52MazPGJ8+b56nhdqPjHUde1KnVXpL066oA5u+bYP Xwr3GnnrGmaQFdkcDDhW7JMhkIeLbqArOd953QYzc2CJNV4n0EBsB8/7KW0LYsS+XAOUzVsbZ2bD W4iuSs7TvU8yLKXkIX/JzGQwn9r6eakMhAOYrNvtDSzI1VpPa44AAH37/wA+cEeu5FLWxZ0WUeJc jyJNe2DeVPtAlku6KplKHtQeydh2QN8AxB2+BB4N+ZOTfdqTOfv/AGiAP+HRHT90U/3s1QwFca/q upskt1lT4ft/YTJKV2zSq0GR0O0w4eG4J63ObV98eDHiyjMipBukwfn363d/AffkSYaYTSNvOgeF I1j/AJFzyLBpebjWhsx4DbJfubLg4y+pIjiiUOEllmcjNBHFGZC0cXbt1gQwzYMGU2MKeC1AVHej Rp7AUvb8Mk4bMNEWBDd6vE4/FYUOrzDiYmUOYDh7AZK5rSwICraizxe0FoY8d7eDoPPrd8Af391w G3U3gdvioH3PWrTKaIwunAvad2WDXy1p8PJKxbS0nsweWXp+aoN/bUht729Vo+PmHdQ3aKQbt7Hg OO/efpRV9D1PY0NkrmKh6kKrq88SSK/3IfYVcRQNm7CtpxiF4dPr9bBcwP2NM/F5Xa3g3/QPn8D5 8A/gLOB6juOBRdcakQucSZfmKdhBhx7uaYpHUZcVNgXBeqyZMMMkxwtRHuhgntJkYMwF2YzAjYW7 MV9/AANgQffpbRKZQpeFJotVJKjSLqpYxHrsFGEk7CJpBFDKkscDvt7iNIwGCto3nkjLR7xSaHTa eZIvpVAfRxLGHP0mMYgSQpqDNtR4QxzNg+B6p8ZaA+oYqRfVX/h/N18BcidNXYbjXxXOqRLDRxkv OkQq7W1A2p3QQyxFcDZ8JOgkfQ+TQ02MJyuLDg6nlAx2RnTcyCeqt3Fg8yuKyqnNTlUPERwcZMVd U3E4MBZxzYkL0rk9ZbQK6WDFIXrjMQ6WEBBRkOKaywcQXCyxGGT6c66BfVMbWLJSbU5AWDjRrE1f HH7P5HXElYLLIsg0m4sjq+WkDNmrYtbb4s3dmhfcaHFbbYZAbkLMWNPQ6lcLGzqBqe+KTAo7u4K8 VsZ4r44WnZBhlcIbhMau6Fl1X9ZwfCbMDSdUTtVeCCeAH7dxQetxCn148HmARdpkqZ1BQ1uwsEms DHvqMPMMpnWx5gwxw3DmGAQ84IhtwWVlWtDAm8BLR/7AfYKiAP3VnFZskSqnMZVfDKuuDudpveCH +CYLOFcuTBSNc3Ynww/JNnq8PBAELaarUWXkoUvIZgb2T78ffgB8/wAgwQ+MyqzzIBV1dDjZLc7P +I9P4OWDlHy2N04fMWw62t7gH+BpvvjEztjQURucc2/QBz7/AHB1h0k27Gjp27XokFonywAIa4pX xu/B8fBbnHsarT7TMFVzDI7PEVMsQF4ZD1YVzq15HjmxyOq92AvuikL0xtoYaEybkqWNfK/atwVu JfENod7GTofezF87qQx5gH3AQ2oPyYoLGE+bf5/XwAA+APnyS3LIZJRAOLfNPZvT2+Xxx60JlkWB LZJSuWptyWyHA7thh09xcO9K/AnWQsMuozuZZtqXZ/Xx8+f8Af6xkMTKqONVagSbIt7CS+OYmJ9h MhR8EOVc4sFbraGYmMjAH+AQgQcO2ZTdCRw3vYM/z4+fAbBsFqF/LqSfD2GVqcJWdFJSWG+CQG8E jADYy85Sg/GzCfMMMhCZ+L8Hhk8oU5Mcq427YgNg38/7bBrYyx6qA9wSOGSAs+7LhH6e2AiQyRkr 32JUN2MMe68ymNIZHjjh733HuLFBI9ZM75HHKhiMT4PSZQnmO0Q69XBdM1KnpoEIJR7IyrYvnmSH LlAZg+Gn2QhvlkMCGcUh6kq3Yzdr7kZlo4E84goJ9+t3YAGwGpQxlu9uPi5PGkk+VMW2wwquxhIf ClSsIs8yMBhDrek2Snx4eah8SR4ZPgb5xk54TfwGwbB5/qT4utHk/JbWMwgWE7n41e1+4WF292vk IFNW2CGY09uH18PBPME8Hhp6ZuBrP73i87+/ff8ApSrcxCXEMwuT9yASoaQJT2Q8HXlw8h90Dz4v zORzIfH4bVAsA8D2xZ/GZOq//IPv3H/P4yyRyMIhgnaBHBEFjQg81GsgjS7HsRMvuugV1rI9BZBk 7I6GVjcj5GM27sDI+NcCSRqJOONtkeIeZYDHW54g+reDVV8xkU6fJXAvy4dIgacPAZifDZLgh1un r4dHx03oc4wsszRaCz5sJ7YbB4B+6kmysng88E/+HhQ9wU5ZzQHbRIdJhtMQwUoewhYDTfYFwTLI MMktgho8Bf007PwZoV/7JaP5dQUHf8eAgAmO0EHJwdnx8fHdVtAkyWEHSXztlz2pVNXihwC3vAdk D/MrkCwNtcrQxZ4GTrMHV3CarAIOPHz4ABsAGHru2Fev7apZDdn9VSLOqWIn0PM1EFltyOr0UWYH 1uHsik2QPaAfgZCfOD9jWi0NsBhMMcNgPgAC/v8Ah1qni2I4XEaZ1G0emdc9uSSgpMtj1IMS80eA xiDyZHbxbNE6s7BjeUIlE3JMn+XD4xv3ZNeVUKrq0QiOYn2QeXNhdjD5pdtGvU48Nj2En21dzxfE pPIbOZZLUhuEyceTz1qJ6yTaKvqDfDYRKOAD5/8AoE/j0mVdsT4zJYRRcyWTCtDwSvXBqhyJcKUL iSmgOoTLIDp5iYvrUH6G8bmMKNFZk98N1d9+P7+A58fAGDBVYPTSl1UuXxMNnmRJf4lXkr+q+wkI CrLzRV63aHeAPW6e+OCccA2h85bZifF3nY+bXZz7YPdC4Cf6kcuyO0tuZItcUHb5WcNbI4cOrsNP uUosmi7gXzBhwW2VDHzFXcHw4n0b4uoGZ582Dx/oH+/qjhY59zyKmFLp2uqvYLmuNn1MeDnmfbjz RbcpHVHy7ULrkdw1ii8ityjZ5rHgE9QWa6A4tZ51IpC2pGLBz4zuHApFgFob4mu55XtRwtSt2Sk3 wxX/AIBgn1zgzLKHqMWRhzzaOggN/Ab/AL/0EpbRSdc0GYsEo+US4ZphblkNOqTaCRZG/CHJDcHG HD+HfAer+K2WwUt8wneZRD8HvZvtHsFu+AP7+1DDALpvMpmLzy2rOsamba7PodV8hT8a5K1zaHcD upDZPx+HsbFOgcb3MWLJ7HshwHyAB/X3gFLHt2v0jT+SqV3Drct8VYzDIs488MIcoBYSj44WA4If 4rZPhvFaWApVWh1msi3zbNkdsMT6Dv5/nwDrRGz2dwuiDUxuXR8aDhqBXHuPbxyOifnEDl9nYiX8 xqVxGX+Tn45LE9oHQHMj6kKqqv5WbDQM8yyah0jvMS8MBqX+HSUnp9PrfdQO4L7IjoZ/uoyE3nnh NmeXbZHjn4BB4Dh1aKY6Mi5NZD3JFJkY3AbYSPqEMNFesgBN+XYwciyIdqVWh7gHnASECDW6M81f cnGQbsb33339BAe5/pevi2wLrhMDMd5qVnC6frcsr5z7Hdy9oCmEDF28wtobInzR4fnlf8VmE8EM XZntaPCfoO/7AhYn+rWkhFEKJNO01T7q04oraYp11f8AJzX6py1yPpVnfRI4NjpZZe1vq9Lxx1eg TVqzqdfGZa31JB+lgwOoDF6gB70455GilaMOyQJKgdhpXpyTVLuV2Y2SDi12eBXLIYnHfCvrI+2Z b5d1i06RqE+NwRufccfHd5688pFbvFgyBsU8NNl7BDkpZBks5XxDlCjDFFzPhp8x8Q5g9ctRSYJ4 OEzfff3v38B+gDYNgfC+jQz1b5zIr5PG1d2CKZA8eX7YZLupGX8WyO2ye4WQYMD5kBScYAP6yUGE yfNgiT5894Dfz/SlHvke1QeUUrmZZBhIW1tIaCRjj33KhnyVMsCHadVmGTh/wXxf/nFhGV0NZJ9r sXc5v/4j2DYEF8V2vzLHS7gbXKZGZA1etteyNXTvS5YOAtBUi20YXzFDviehp4/5z4QfOBsyy0U3 +9728Pz8/AH7wHTZFxs37yPSngt5scWW5d0fxSbb+w3Vdt2M8MzDEqMtzztT1jiQe47Zu748VR8/ A44L48NMAlGiwpDIhpDs2K7tnL/zK5PFgNc8vDzMZi3DX7gB1KOfDnB1lDfKzKcJSQhxB2A/9+fu oxgrewVLMJ1emrYwxk3MNSJFtAVdImi0O40OLuHA3xkcLUX+VcefOYDLM4GMWarSQgSqwDAAQfoI Dpy6pZAtjqutwNczBx7BbpwSPmZ3b1wjHWxDsZw+YyGHu1Ia+YeABCfBZOc1eLZhhxJq7YwGwf8A Woj6m0/5ZieUtq1ClVyVVt06qImQBJGGwMhnogu0A7gHoZw3ityExqPWhdM7k15K+2IxxJNuwM+A AAEFAfvfrPNOzQK4R5sskQIZVwrHZhO3LHeVv3tftNJ8F0KpuMmSR+1WLty8bVmgFfNAk2aIujdd DZys0NNzM5cAocbNngfMW04ODCYu4pMuRDZCG8Pn1vEw1AV8D8zc+UEvN/ePPf5P3IDA4cD4NhKK ZmKL4uDRrCrjUOyCxgWsMKHKDp6HDZKTMQsA4Oy/gKvBhgsoT2Pe6uBnwB/+n37phR49qttD0CGq BkoqHZa3GbNP4GjY4lPaLasIDYwdwmWpyQPyDY7LX/dP5NV74zDEfZN8+g7/AOfwPqQfmpykhy7o WLgHAMqmkikrZzpph2UKlu1de3KGnYVxMqCJ+9tkCBBqwnWYsmNetl9SQcYEHABjvwE/1od42UCQ vUm9EIlfDPExWxcqwGNihifJ56FWOeCsnZsTWkQjuw9KRk1+3hr4/H5f6upyJ9gTNPrHXo2Grvhq vUckYviJMA0kJ4bDI+y3MtNbsBwVYCe2gw7NxdoWazOcJNo4D28A+n9gqvdGZXdyOFtZtaTGShw1 tKUOOTr2v20wLFyyibMH2Qt1u+GJjB8Gy/gNUzkyELZkbuibCG/xF1YoWh6IItRzDzvalf5+rQlf +nyhlAbS8X+IvS/hugZPZO9reySyDh/Et8CDDZWa5GhZZ8OE2hwIAfqIAfwXzx9P2BU8fNyyR5WM 2QSnzKK7gMmS0CQ9XuVZFKlRHAwn91FsOQ4q+VepVXxm3/syy8ah/wDqAPn/AO/1E6Fy0JfHONoW dMMcLDFBk2aPkMJLX2kY/gZI14V1Qvg6NNFJchzCcq2HpgY8juzJ5rEW5g7RbivR9YoZ6wrRzk6p G2IQQxpASn2MerIDF28xDtRbZOPuFqPlfb44M21q7NZlqcJdvcBwHtCA38BV1xT7EMsmSm5tkMjt lDYy9V9b2Q4MNkNDl2vKPnchDmGOeDpmCIvoZwOT/wB873vhzf8AYEEBsC/0wijAUocWZXZ4Bbhr bsEr2v3yt5Esw+AWFo+GwMaHcExkQyCGDfU+fOcCdmIauTGbIbSAaCBfqEwPgOegLFVXYGZQVbh9 UsowSPZo1Ss2v4bsHlh/5vUDbSePmQ+H8bIOAM9XzajiFlZVyjMzeENvHPgHAQCCfw6QZjQMkTd7 okmYx3S3tYcGsO7jm8hRFDp2ywYqs5Wu1mjekSQe8O39OWOxsyU3LSdvHVM3BgshttAw+NEMaeaB ra2ELOVbQlsktNYHJo4+t1u9uEOq9nNqXwDYcYzbWMWQaT+m/n9g/YOo14rpLcjA356rXFbmT0nu xnGCMvnh6zXKKYT/AKeh6kMWCt0aA4Ad4WWZX7mEwZvZAXPvbf373PuDVo6A1KxE8zVWdq9PBrCU kgzpv1OvC8tpp7mSG4p8O1FuYYWyENIn1/PrjBGwQ33H8o+c2B+59gAQX5BWIMgV08OB+UUGjVrh MlhjzKfMNheLVyRaDQt2hDQ3xPW4ZAxzyBUsFw2ztezE9ktFJeOfAMEHwGwakAECJAm3CbISGCXf kkJUTO0MqxZwTRFo1VZDnkzErgA6mSZZi8w3nimEJb2FyaKNXfjjIkcmNm8KyF5B2V3XdN1VYlwX TFfGPJvM83THm1GV4EuF8VKJFoYcfwNkmTDDAYxbcLa3d5GK9yLTMcwSAm/0GfAc+fkJ+6TMyzHz NpdkMgclAre2tOpsTIsIC4JCHUp6wnxomV/MT2TGyJt4Pm/YobXyZFxKVmso4QJV2KDv78APv3Vj wWnDVHRFZ46lq9BKKtVWqZTvlWXM6pqnreubQuKiGlawfWQvaqGXsBw7Z1AeVKsWGgozrLM8HEkF j6f0w5DgAYKvSOcUO4WFX1g8bT1w8/qYC04dkWEhyiktNcjC/wBh+5DHW7BaiO908pI7Kzk7kuRG GA97SQfH78AH/YB0lFDRnHCeGKoGWMxRxnSRcSBUihXbxkLpy0mWIYYWVIsZmKK2cM3NZIOZ3xuh Yvdx5H2FB7r4sUpoepAWDGu75bVXNQtpUrNtAbwdIW2ixpYur8V8P3U2dDr9k98J7wyWbWb4UJkz gTE3/wDuDf8AqSgUeQtq5E+vq5uCyBuaeoqXfBL7DwMA7q7kH5gyJweZMIB1We4wAbJ71erk+DhP 7/bu/gAD8AAQMys4eVbGzQBqAHbYdWqY/THbQaIyK8WwpQsPxsxCreGHsBbB3Sn3wcmdjWi5FlZR wlo7H3dYOAoNunz/AE7GSPXbbYFkHoqStja+cBrvfAYNUCm4FEPTgeFwx8PeJhgOPT657gIljTNz V3zFmRwiSE2A/gAP7Afx6kZaNICVyyUF1ghxjMdpsxhMzht2/dbbmXtTHlrkI7K60hplDHJ2ckbs jvS5Z0lLiMAG5N8VLHp8Iqn1v+Wo1nVpnVc72BW4ej1NbKPkQCBcGBPcJlqckr9bx08b68LbwzFC gx5OJKSkg9/qI/h2iQj/AFuV1Nnq9XJSq+shbW2iYSu6Qq6kK3dzBRWli2gPX8yZ4cwQl+PA6jIa zujQjMxzzaO/H37ABz/7AbR8u2KqkEqbH/Gs4WSNiTGc7OFeuBQ8plDzi4VuY+ZdgdP5V2v2PAZw PcyQNJdwnPj4DD78fQeoGZfK/mnFUWxku2KGhv6lHA1Wjyw74r6ZSiHah9wMMlbvi24OGqitGE81 GBmoUoLWSe972DAIAABbuIDqmkpWbZSS3Mqh+bjcJhga/kkwbFPuxvIV0UUKs6nfmR19jZ3yACOK HiRI5PPOGPF5Cq2rRvtdtaKwcke6aQpYa7UwqPE6Gq6nylJ+l9JuZ1sZ8bCY4R90MTLHc5wwqMWG u3sM2L6nowqSZJCJgahlJMnOvRxZqKrLrREB2O2PUsqBmrs2AmzmVezobSYSMhtZ5QBnZhGFXgDg kw5+mbIcszB0jS3g7FPxG5oKECTFmSPVnXOT+2Y4lWPZvABL+p0ougBdbxq/NWf9fNaJP7MiaR2Q 0rMWUbOqNAkEDnT/AKHSwmKdkafbYMVfSztJrKwQMksQyWSmLuDOQEsmylse4dt2RwW2Bb37CfB/ 2uTGA6T/AM8QCDjsAEB1VEhX4dyU6xss8Nq64M3OpSJaFhViwNgeubQmW0BuCv8AT3yRjwDr0yuY DhAnQlkYrq7MzVX9JOe2/n+mQwHV8OLyQy5T+ngwL06u7YrslhK9hWRcibqEAnmQgXhzQ4f6fBQ6 uAnMWYmr7Z4PELsHPn7fwG/9XY076U3wrp/tW/f4qGTS7eaqgc4tRbsBemJqu2aVSiGPmLbgH9vh 88o88D8Yh7mTOVdV/BwCCfX+fAPAdCWX6YPOghhlaYQbs8W3G8n9MFs2xvu+DX76XGAzIjl5FKI8 Y072Y8j3BzjzeK4njw3Hx1VGsw6e0R2R3qqpdnXIdgcwWzFTsJf6RbVSB+eB3yGt1WQmcTr98g8G eUN8ZlkGkmknwHPuA/r1PJ7A0am18bQ4Gq7IsJoW3+zQ7JqQHu5ix65bIt8GLQuH7gHmbPBgYd1L HGPO10bZm9u30Hf+Qfr0gaXmR5UfOFq4G41t3hya9eGri9ZIcrdmhNXB5i4GXh62wvgOfv1VoZMY hqywM+k7Hv58Bv4DpkSGBgyhcOUm3AyadcrmpYxnWEviQ9cxmxNKTK+Ww7gtw4fw2ptXzzUHGcXV 2ZGObJvu/gT4D+wVqF+pZZL/ALzC6nSqZthGjU8wyy4SdntyGHfx7ceU6eVEKB3cadgd8xxbsgxx CYxZpndtfetfu+rOWRbkjTmpuBnVAHGkor4SlyD1qWRgYqWxqytCN9PDrbJDh8DBHp/B2R5ZlcX2 zOO2yO4A+/AP0AdNQJVC2eH9tAy1RS2esJbs28A56wL5m0Ohy9PoFcX4a2hp8vbpiOBYa0nWojM1 YNKys8JtGrngAwY8BXz7+BAV1aFqyNdaHYSbqWyVtkQ0O7EhouB2MCeGtES0LGrev63Qk7h9br75 Yz4wQAYf9RdQfSMLR3/n3uAAb/0mVPlAvWWt2M7jQlkHhslTp+pSWpBIMVKelpqaHn1Wnp5in63o 8P20+qh/KIfnDex7/wCfPvx8BsBwLGiPJG6CWFMp42jExj8BAIs03s6ezlHgR4fPtfIiExKiSrpJ XCRBjsyN7ci6U+ONjEZEnI8iuSogyZYsOBaEh2CQ8owt1k0DbIHiZYFoU/lMlgBzFJ3yH5h9SHqQ OZyb7MTOWjvfAV9Bfn7wB9+h4ZDMlUPYS2rgX8a5HjfyLIqWjpa2r1evIZSHV8OH8NPuBgmI9t/x DzrIZrg4vUCNvaSbxPgD6CA4D1ZWetPh1Js1oU0Rcr7uER1NT75XZInCJouXygB8IahEMQoWotDp cFSUCFOrbNWhXkpIFdaTaXv7IAAAwIHVRROsJ8pO/wCJqApLSKOzcyRcSSOqsaqt1q2dMoUWnMZG WZT5UV6JemvLYYb4VTBRGw9TIURjgM4j8gQMV9/Xz2PTlPcx2N8rKty4Bs9r/LfZef8Aib8eOuZV MkbuNPSLIYzLjhGSNyQNh6sYpcGxTKzwK5grosRTDUeqoZmsVusTyeMsKtmSHZFmrYu2rYTXJ8r/ AIeGcE9kHh65rS0alRuM8XKPAwH3RCVX+/8A/gNuqTh2JZdh0/m1zLtEC+VWEE0+tmGCWyAVeXw2 FYAdPcHxbtTkiOpV/wAqQyZNXpsaT/0TB26ggD799B2DMrUZqDsVCs7UhqLdlJVA6kG27ldOARiy GUPWaK1BTK/h9hi9bp7hjakDgdcoQxZq8m8k9j/f9/Xz/gD/AFueK7aKgtCGkNnyaxclUlp7qdqf LgYXBypuIeFw2AxDQ7UcOY9nIFPqSq4VBZunNWZlg5aKS7nD4Du6A4+fAP2R23IJIpSjTBDG6I4l haNsfqo5DSb0aBYg60mWQ5WudkIeKVdRGHVFaNopyu28eoW9raNsUkJLU/ONDta+2pZB8eK5vC5k gyNr+yAyTGYV+wjzAJMajIrDKKMhBP1Ifs3zPgEPnB7MRkMo81mDCGzaPv8AwDwHVtLQ5RFy4djV fWMnOtomgCY9PpKe2B5UVhA3Itj7U42YMTB5hV248DmeywLRhmPez9OfAAHAdg68/qIaQ+mB0tRY Tr/rdKn6qGxr0/WpW4CZNFprCTTHtge8LImB4ZAy1AV/DANgiq74MWfuqQ8b97H9/wCrxyNXinSJ hVK2gYkp89kCKa/MiaZ6nMSlep4sWGPhmA+EMwwYNQ/lvw+MVdtn7Ib59+It/wAbdPgDklxMSLnE 8TiRo43xjaM1tMqYnDMh75bwOoJFkjkaRkkRkwjSaPKeIt7t1i4yypcbA9p56XtfsEcMnmADlnDc k9CUmxHfBrxEDnotTnpS3V9V7xaieyD0Nq7XwEbbFmm1dZ4O7JLsbP8Atv8Aigv3RhX9NaiKqvit 3zJhm4bxslOB6ffGheh6gikQWUmMBhbW3x77wQ4J4fANzBnF3z/e3gUE+AAAP38Jh3Q4XLU7JFsa YEG1oB3ZHMDWAsYrlzvnmcxf5hDuB8mD/wAlj0O1FtYwQyiyT3vmxw/v4DAB+/2Vqd0U6vcK3ikM iNSem58G3GvXkq7SHFi2Ha7I/nGQO4frOn1/3HT+Mi/Kd0UkJv8A9+ft/AAABI+GmlKwb6LnPSpu IkYKiQRS2Nxz2kJgmZHla6YY4tTqYiHwrbQOy+pLIhtEeLIbWVtRzk8HjjqOIR7gi1vDd2M8tJ8u zmS419qs6REWnKudUt8DLg/idTk9b03zMVt4beewWQnUDRQ6yjcJ4Thifxt1+AH34+A8/WRg1ANt gEtUAZJSYYGyHZ4ockeT1NPTalr080Q7QMIaGtrcwhxU9YAEFg89m2hmGnTlXG/PgD/7Dv74uBfT +6lqMdBc+uatGQ22R63r13LSz0r5V8TF+ZvC2nvg+YDxYLLnIYza2hZeXi0jiSj8Bt1BwAP2wAI1 4qrVpQUuyaWTXCroYuwo1e2g7ae5DYtNFXrzRYyIPD91IYd8HGFWA4QPh8ZfChNm+7OzxsG/vx/o 5FjbuNzvK7ySBu2R4wUyaSTuLbNjEYC9w8jnrFJuKpSJnKRQiEKzZVmF9QmhhGoXvajj2+erLL9b x23TvUrm+GDZ61bCJyzA2t63iMkpXXgMqHiyGLIZIbh8yCh/P3gnyho2z3NhDfPj/wC/n0EBpVg8 yjbwaVcW7INeJuMlTTx2rOmIqE0RcFcCnsER8b1BkDDzN4T1+2vh1mzbXhjjSVXO3PvA/wBAvwFJ 1nZHZHTJZ1JC0MmNihjVe2BzYepzVdyLRav9rgQ6HmWRMX4cCARno8xlJIe6DPd2N++G/n/fgPWn UoUB188OxkWnqVSriq2pC+H0Zh7jtSnLkXgLlDIMjJ3UmJ7B87h7a8GCZMpyZmR/NvADgG/7B59O oVxGyxSCR82UZLhH2YAl5LbDLLgYm6Jv46eFV1jKx+tgheXLhklC5R448XiO7I+Ca6h09806JBRb aJ7I7HosN2EuDUYDiZiHY6RUsWav1uHMVuYhsCG1T7AwVVsXxcXznZOE+A2B+4CeAHljqIIJ/wAy vbQTa3CLdVDW1tshPzpGzyrlE02U1CMG8cw3ggtvDbaClyQX+L6gGbIk1dx/YN/38+fAMhDq+wJe W7afAwfnYZDZIg/JrfhEzdJaurshGHDrf7J9HQ08FyR5Zyj4828j90at38Bv+B8+AAIJspx9Ocvv wxkFWyDDkeoqIj0/VZh3mNCJXr5Yy2P+G4h5gdg7qgV/e/Jq/OcLUSUmrcD/AL/l38QnyZywRpg6 udiExom4EykjjyLZJ53cguP2EXzYEwsygKyYI7agO5xzx27QCmrxy1mr9t8dVK/xNMGkHVnnY6ag ITVPWDs2sLghgXgt/MtgyKhj5iGH1H0m+V+nQoDAeuJbZxgvHawWOP8A7AMf0P3YslgtStJGo+Ba tY1dYWUtY04vmHut2FOi6fdKNSlIQAvDQqHMOKdNR21PwhMiNp7uTHAo8HPd3ffcAwYe+DAlCOnN bgZRK1cpVQE5zPYCWAl78kaAJaV+PxEzZ1vH5ljcfgPGFmM/jCYI394AHz4DfwCD7GxiRHDVPVd3 HraW0Or+0uNXhzAZ3cOBy/iOFgTFsxdifW69DgqQ9DnJ7NWaurE/uxtJwAbB5/fz/VmRXkjKn2ZB 2FpIshChkQgCOPGwSY4lzsZDtFaIEWOBhbl496J4pDFLGTJGYlZlkiawMyQoK3iVJN2GccmZh4xi h5ucSJNFhpLZZENDaIhi0LaltKuH+HDhzN4YJjU+Ve20DDGM4t8szYwlXhDn/wBAAbBW+HXcwNWa TYwEx8POmSVMwBmWgJQ4ibukVk+IH90+Gvw1VtXyE7k1ZiyhRZ837cBfj/uA4Af7AZRbAq6oZDHj ZIySrdTMd2jHD0P5YE8t2AYslPT3BPATPweeamRnZsRZNm82EeAADYN/wP7Bi37NFZ38Ust2N5wY kNXlfIzkeWyPkoS+NEMgY+GyGJjgtg8PgVzCJ2+hq/nUnwe/oID3AefODcFen/Jytt/T+xzx99nj 4x8m+s7csxzy7GesarHAV5PnP/bEijd9WWqBMtjUznrdfWY9hc4o1VNqZRs2pdQ7AoLCdp7xmTcG 5ktSq8FlOEY1Lb4EHT4t5xxxrO1MDKRyD1erFA9L7ifwq4RYbst2y6V09aYL4tPKktz9FtmpVXPK RK8WVPV6dTq/cTJcL6WJexsgGgqVprWFmISreArH1YhQZ63F9fxQvbB+K0uv6fFUf/iwLIZLOtAP GUzFhNThXtkOUpdjSpjBVdkMhiYtuCFy0h9P5MUV1lmBmwuni1D+GwW6f8+AT9iIce36Xs98tC2l sMGT7sqdfGoa9K5ldzY0IZjtu+WRD4ds5w8QqXmH7UMGebOf/wCvv3V1pi4Cqn0z8aWORLeNzVq4 sY7vHNn2HgjjqsWCKWYFo3WWSSCW0kjQUzBse7CxQoe6uOlLR9gSHdwGxNaWq7bc6pRt8yM5bHqc yxjxZovmyWCHcFbzKHcLAWwf5peA4wYU7Po+yGwhwB4Dr0aW3nm48OxoRjhOox8uwSQSdPbwwvnd BerlEZF9wDmA92LZGY8QGBtasBmnq0KvqAni7cJtXz+wYVF79VFS0ewKQzKx1c95glhWCHsiIPSX ZfYVuxpQmVFMEIi3yNbmEHEJt8A4h9zN0GLLwE+8b+A3/p8C7Qy2Mm4H01VUpgbuREvDJajEuZKs aXY13OA8OyJ8y1GQgY+v84cdsfODPPhDaP8AYD4BgAc+wRIYpJGeJ0WFqThs41AreheShhdx4vib pu0Y8tjWVUIdXz2ZWxfdj9NjHtuDHKmWdNww7aAB7yetGYvg81DW021VZtA5uTX7COLpJgt4FTKN D5s6fDp9bTyH8hV88HuYwXydZBm/9v4IH7/1yC7oMUijtXIw8k8pHq3qd4DrTRE/F9xpkWyGAzDW 7IW9wDnLMT+KmOcCygxZ4Sb/AH/wGH0EAziFbyIC+HM2XDG6b0jhJatzDteGHA+JlNnIrdbvktDm r8y1B6+eag4zte0DEZ4CGzbx5+3T/UPTen9bcnjOgRXBJtS7mtksIhbVY1/L5QerICr4j63DsiGh spBwsZttCBYxjuYLQ/6J2T3f/Pr+wAAC9tAmcxwviMVeTmiEPIrL888fBvoRuKzFVSZFQiUyJjJB G2FyNHbV7eFy76JyWuilTOaZ2i6CVyO+S/1WLh1LLHZLUHLB9QUVeA1LMAc8mMjhCTqrajyeB+YU GcX8Gk+DPYn18/sCD0oFcfDMlA6a52RKZKlzrId8XyG4WFDrloloaYY7qXBW4dk1IfDBtuPbkxyZ oVxgzhOybAfAef8AP9DY9LcM5wam1SG2RXr5nMlx1Otnl9dTygsSBKGPh/DDzFCr085/INRkYzFE MmzHEkIbOH9gPgD/AIDBV1uYOWM4TAzvnabxoGvVt3kNWlfURvD5SKQ0NCdaKGHDB1uY4Q/nr/Bw /fJYuRGZnjzZwCA8Af3/AGByRNDul5M0SFI8qx25PslrI3Vt22PPuHnqAxkRssXYzq6tmLbbxsUF Fe8G7PPNfHVjHBOTaCcmqrj6UlMcgCWy5MKQnXBSdiCYAk2KGmhon1tTYQHYzZsOPPw9WfHWAa0k j/RnZUFTWwgmPkwcrOudauWh67iEqyZNEumm/Myt2ZsVBlwAtY94iFd8H+hlKGs44mDAOSrhR6Rn GTJfLToUGKTzYa3lDYxhhOMGUWn5udA8gDsG0+RDkFvp6sgqLrcNXfiz/wCb1JEzKrCaFQQCBmTQ OPF8XWX4Hjqsd6tEMpQ8OexgbRAwLHSVMhajtV+o+HGPO75K2+yA+LJVb5/PT7AAnE9GeSgv+yef fkAAAAHwD91ajUbYF6ZofuXEakm4IGm/Srp7p+q08xETwB7CMUW7RT4bIHshbIOEI8P5VMWSfFxm xu92cHQf0+g7/jDvD5DpDT/fy5fCS7NWoyvhtOGKZPB1OHFTZabzAgnmIdkGGTzlaEFKueCvIt8Z lhH/ABcD4CA59USC/H35/aiKPbF2xE9civlJnoGdTgkOk50B37tVzYSa0cfmIafVZdlH4Tj1gPuJ hZRlfEmT9kkIDPsADHtFsABBBm0m7BAWQTTI8iRTxRJI8cUukjmmhEQj3IIxqEZ5SfJQKosnpCCV opZTIyVgHVGoo7WYkuu4SU4BoY4+Gy4SaAQF6ka7sI8nQwlPzxtXFu3unsOJcLuFy8ANw4W+nrfz DBBb36v54P6zzwmT/wA7UAAO0WwAPPw7jDj5rrMfLGQ4yfSMwbxdDo1XrLi5SspUoOP+h1u+ByKG jgV/4LgzYoavzlG3s3gf5Af/AGDYYdLX63SJAFDd3aNSeV2cteOBu0O73YBKMNoPj5X7IHhw+yfJ AdLEIFV85RmgqzLJyrgjs8Yb+BP7/wBaVs5aF0w85cyhpJqypqBZtwDciQ2GCiGw1zGW6v5LwOGn /VT1f1o8TGblFoE9jNhPP7AAqL/f2qJolWZQ+qk23QK0jmN5IxHDHHIWpss9pmxr0zYye76JllaO As6DLOliOUa0Y/alLgTfPJyFDiupjT2vslckQ+r7TdcFSPlv1j3CreZW5hTZHvVBXtDgHzZ4bI+L cwhZBxSYG2uYfGforzvaRVzw/cBP/Xz/ALL1gfLQMsCe+NDI/gbauB2s1fPEseYW0LUzz4yj3Cq2 Sq3C1HAw1dn56otjCfPHkZveyPGwf2DkHWRGtk0e2olaoK0xC5LbWNkafHc7pvsCwbTTpTY+NGm9 wDWQ+ImIge+NTYPsq0zD08vgwYSx4TV5vj79hx9+xxwmFMwbvOOHsFnT6uyTFhSbYMWr+TTD5V7Y 5NDJYD38x8p/j9qNWnjT/P54MGIauM8J4M+/L5/3590Ikkj1UqvppBDhDWsVs86zuJ4sRUkFjKbc 9fcvbi2+9DRoUK7yLMjsFjft3I+0JIGs1lRtcTXHcb6ku75Dj55XlGLRtqh69ZGuyK9ifW5SJX1o HlseI7qKBhP2d4AMCHBXBvA2fawdXBMcX7gL8AP47+f4hYbVfUCo30SBobBwrW6yNO6hw9KNMOE0 Poi4yyhP4hZC0yJ58PY/z8WtZZSZVCGf6X4m8PfABjhgwH2rW+le7DIDOlUEeJB60p+46nqd2s6v 5aeeKLyG5Mg9DQ7UqtwcCEMHPX60tRPJrLQLWSYPY0kHv78g7+fP4ACQ5alb3c6Pmwsjtf8AqCyX awk92PXAvGFh8UqlqWGwMi3ZCeyJ5CaqtvLYK33fV1cZj/Yz/wD/ABC/ADk242aSG1hkdmEg59c4 fTivyPU5vnjjqsXkgGcrnBEjKg1HIh/kWROcsu0qchhTcNl21XW46Wh1HcCQ5ZJtw1Ap8ZTz6rto gwvljPi9V9cuJCyLIrdPQsXCZBgONtU7MZuUboT+7VcD/YNg8/1aiv8Ag55cVUNXA36qlHZtYY9V qtsV6XchcuUeDsDg4p/zXDAOq7eeNmGYmhq9Z7GbSf09t/4C/n+lupkCAG3EkXKVAu/NS2po/bGv 5bIUV149Lhr4eq1uEYZN4araX3xHZBgxDVhjN/Wxzf8Aj/6fqeClvLXA4eqnJklWEBVf5gPTJhhM K4uW5VzZJBD2d8cFtgT2qAQUnhkZmZDaFl5d7RpN2N/v+ADABvwszyqzYP2O0qh1xwkfApgbPpxU cI/gsTlz02Mq0cYSNC4RQV04ztI/fI57ccclxWjlbdwrlJnKnQ7uU09jPKo4PlLZuzanau5DYhi3 NhlVLMIODIyIcN8sCHvzg3I/OSiuMJ+ESHZHQUHf+0WwbA5suv5DHV9naXz1bxpiGn3ZYV8w7Uj1 lDcj1T10erb8DrTIt8gQ7GBJ5A5W/JihRZ3zzZz9P2A+fwroYB02rkXw8GAu7tlATlOO8O5kdTDJ kqXXKvDX5lwcDQ/raqeYEPkm2PnBmbZAnsAAAAH7A/H5m1LIYNPrYk2/VWSNDu9erez5OcjqbHFi 3erxXzeDCHM+GP4O+L4E3MJ7piSJg3YJV3/f/wBgASR5JGjd5HZIrkhZGwuNCiGJgQ39KSRA98bl leCpGOPY3Iydt/UglFZZI2IYXYrLj4NAfPTC8IeKsgGdZBsa26iiUzEOSMy5kXTnEe3KEQ+Xs62y J63xJfrQHgTrPHtAzI5ve+0R9BAH/wBgQfkOxMwM6ATMqzuExQ7JEkHg9flrUfE3ECe7Pp8N8+Gh r8ydWmCkqzMHko+I3B/N0ef8A+vx/orX09nih+G1+NdryINT/MDIaSY5GLV16xlcPaExOW4b57rd 4AbBng1v6Gh2+MBmzaSjn/P/ALB1JWQ4U3FqdbPZTsMPXSYtGIQPUavr0xNQ69q9Dh/MMGIZiGnz XilnA81J/GeULLMc2NJOH0G3QH35gw6WZdzULK8jSwy3CFSO73MbZjnxjXaK7rPIrlgCBHjRMcc7 dTlHIYzF7GpbvPu47ePOXCraajTLpR74TMrOdu/GTaPskviQpsidUrFV4tkTtn1UTEMwnw508eB2 dGGInGUbuiDN7/v5/j+O/vxhMDNFaB2rSXcjhJqUoksjCYubOIqbIUtGXbQun0/gYcO+GGDtzPq9 8VbJeWZYV/YHj/597AH5B6JLIR7AApieZnh71D/W2xgcA7BLhnoqm0K/84YWw6fD8HP4HYzIzYoe LMTeDQT/ANj6+wb/ANOwpRZ+eQtrvdMN1Kep9AXtUC2HIXG4M8VsTQMMfDcA9VmWRwwaoFwdxoZR ZtCryazsmHgAC/8A9g6vdQSRtOiSYzGeOV1y+nktQAi8emOMEsY0eTfF7DCtrBOxI5MYwBIgPdn3 cu92z/5bo115+lLQMYLb2eKbat2OyIAn5mdX9ZGLQq8tY3dReDp4eFMmJ7IC08Ve2zphMYrlP3zE J9C/YNgP9ejTQh1EFsCmQzHcBLVRV42rrN5INsisodjWgvHnK4B7In1VDcFtvZAQFggTnD+l7MJg 6u2Sq/YAA56fP9IxkL3FlaNb+SkizEgPp/LscWx7BspXrHCr2m17tTw9POMRiwxfGAO1KU+pp+FF 8pKIwwHhj/y4Y1Fv/PcMcK+B09X4uSyjwGNDijYym4QwwdehtEVesaXSaeYWjBeHuDJOPp55qW7M eezdZkwfmweFugNgQf2AZWabblEm3g8qRSgeoa2sikilZIvtyCOMvknFaAJUlIv8iI5N+Luh45r4 6PMcuqxcgblXdDG2QmrZuwl8O7D7CMFALvSJRPIfNmBmSyF8O1PlXvmH+jhQn9JN7Hv/AO/8B6fB i3Fs8h17K/02yiTIw2BcGopgiQz132ahtE1fcNPdVskxDsD23Gy+NozNzwmT96udkf6/4A+/AACl xB6b7VV3Z3V2pA0u2pCJcgmV7X6o+RWhetD4fw6rT6rT/shwEQbbG3Puh9mOJITnAD7Bv/7BAp+j cwGIWEkZph2p+y63CNjwHQ2hT3RDs2UrB18xMQ3wwnuDJvzgpUdyZ5aOMs3m9jfkH2Qdg2AALDcn 3TKioayEhweL21ac+7n7hWJPTHWRIyQaR0jaF+e/TniMVYrHu5s3fAFWQO4LIsxuMNWa052m9k1D u1tRA7VcxBeuBElKb5p9DMKfcHJOH+CqW0G0GYRmZ7q/9fyiD7u+f3/6DI1/pDbKRF8SUnapbatV wZLNDw0NPEoZQoWAi6fI8k+yTN5VJ5A9jM+h8ZZvuxs5/T4B+AAD/UdM1EOCRYEyvmjJN3+G+SkV vZ8xfYUNDiu6vXKGPDrkOYn/AAHA4esEC1TNzVyjNvnv/wCfH8D/AE7BdoIBRHSa5KLdXAdS1Pkp bANcTAkxXP8AEzTdoMjAyWRW5gRyDYwOoD4OBSzFfUY84HAiSk+2/wD7/wCfBJ2jMSrA8MT7VyM8 SwJndetK8W5WJulFDyBY6jRxysZhMjojsiiS4n7cbyS5MfIoWfHnpb1Bp0sQU4XxmlAJsaxmKmLW uNmF0dkpuuWGualUOeQ3BkQjA9bnqR88jiBgzEqMGWpaHNQew4sHtgwMHTCHsAfKX3DgVGslVcPb anuBbuaOJfFfRG2RZVPp9VmIlqKD4oTDlL3hZcH3rMo+cGOBEk2DQPfnwA8/vz8q0dodE2QePaab ashPvh2bRJjJuaOvPdXoctEaE9guBw0xQ0N8IMliwP4eGpb2xCaOTWpjdqSD+ggD/Uk6Za3YIfTr UC4k204ZpJsiB3DlAkOm1ykIdymKvmLd2UnT8zupsI+2qBMdsxdNjKgtThPB/wBgP/sD8+WOV9Sw ek00rmVZdLJNFIXMMEUv1Bl08e/HJtRsEXHHuBbkEhE6QwSCEoJo4UhZp33I13tUQJNO+KXIu+SW rtxA53Ow1Q09Mnhx2bpzhLdhZRery1oPmTW/8QbO0UOLPoY+q5mjRjmBkCyOyzeQB4jFhoV7gZUa r9lwYN/P+wDDEBWSszKW225nC2imWTOtsPgWaKfPV/LW2ixnZ8KQyAcOnmA5i0JiqBIHuSDFl8fO MnElJ2PYD3/0C7FfvEOtCAEXpuznZbTYaS7tFqab3iI4dpROqBDDj0OyFtDhvloVXXL5sP0Zl05+ MOcJNgz+Hn9g+g05qevo/YsPm9saBDz0lb5RMcHCzQ8tXbJR6YQfDFwIVkTN4OdwLL2cmjC1dmJ+ EdvoJ/DHtF5+QyK67is6h67pI8HeiPdHk2FXx3NYJ9tV1UxVTSLSRViAckbPD2yUMsaAPbxx1uMI 8fKSzBTNvhJrcCBjahEcO1GJb5+Qruput1+YHrd8hmeH/AsA8qsnY1oF2YMB4mzZwAA9+fH9/Pm2 ZW6Hdy+TcsU+nMmzA63xe7O8HewXY1TuQsOwTKfodbcIa/alc6h8LpBp7yzofJhiO7G/dfAYvyC/ AN/PuYHwPKj21ArllSU/DVFW6mjWp8enIct8U3KuTCfcFVPgeq2QgGeDxD50MnyhoeUYHSYT6CAP 26/eAP8AUC2VPJbVutx7QBsipXLjZa6FUP8AL2Jod6lF2QQhob4Y/MD5OstPQ525vPKGW3+E9rt/ 7RAF8+/bAfMzJlG0ARHjdSrhfUeQ1hHIwbuz7grUMCCMWyNQKyq0Mwt0rj/CSL80bv8A28fNjpPr avHlL6qkZU1kT7LMKS8r2EBthTcL5KCbHlLfJEPTGnzOXw7G4+2qpis2amr4wswGE9njYAH7AA3+ 4Ec5p6PL5JXn17bSq7uDbLYJjU0JFqIbRplQyj4wVW4ODJvA9PeMbQqaxuM2Y+FGZm83vmwb+A/r 7qosN8dHdTJWDdOEa1EOzWSsmiyCW71XFPXIUPTE8O+Pkx8XHC4EgDgeBp5P2KDBiOECWjaiCA2A A/AAHVhMu2FOximdZdQTW1PDblZt8B2S2GH+JaLYRSxnz+G9wDzE+1CH5aYJ+mTtAsvmDy8nOE3Z pzfgB8AAPnwD8fUsdujBqSK8ImSJ42yxvcR0MZrAY7UcPk5Z9uNRsPVs4bmCll4kEYsOiP8Abnal jR9o4NdB5BfmpDAebT2c7OE6q9pRhrtIE4PkUSri4bgHfDFwUnM+HXJ+e+I8zckPjOGOyBEfE+g8 +fgAB+63GDAuvo8Olii3GajND1u7yGrOYNmlHhN8C8LP42+WS4Ibg+HLLX54N8GcDtEYznAng+An 19B4C/P3SHTyEh3uBP0t9zlJksxwC8HPGKvbO6IF3GAKfIdyDFDXxDIVvQJ4eBVRH5QV7MeKr7XO 2we3P+fW70/q7uxL4vn6frBD38ePB63XlepbOtjeJUXTg+HsbQZNQlbskyk7gwOHk++ONrNZq9yP LzvYQIcwfrd2AAg+fcsjR8CV8zWcakRyR1WO4tP7ucefIY/6UImDFCyMiuyJNG2ccmOAJU0vixY5 q/PSyHMhYquJzBB01EbSOtCeusz24D7yzMmaQdDg/LnzsxnBM6S4GlhulC80OSYhObnBBcwhPzGV XB+lTPgzBjOotvs+0KKIxa9s6qXGx2oYLh4YMCtY9aU/6stcjY5olLHHgdotS05lykZPFg80YXnK a7AGp0lVSQPpZwSgOfG3OlhYKHo61vHMeg0rofZyj4rkpoU1CwbroNyY8mlJokcmjwauhdfBr4HR 6YBlW0oBlMYFJrdos5t0yo8yyOEOB5904YtHvMWzFkB74ILdjPlP0PYzIsrKu0dzHirggRHPvwA/ sCCg0H1vR6rqNSHveVatwVdMV3Y3Ere1LCaEi1K5tpIcnNwYDFVzKfqtDq+ZBunznJ7fpto09LII IESQZ9Bfj4DgNRey2F35mZTANFuWm9StQDXsdTrfOQ7QbLgrA9sKaHcIdkWQ+Pkxwh78wAWowjM1 oFGbfDdXJKOAqLYUFCAHwHXYLzL8nwzCvPzgg1DmBGG6BrUwNhi0LkSBYqanp/G63tQwn8qbV9ta WQWs3JpzRibwb5sj93foPPj+J+kkmVAkUU2n7I5YhLHhHDIe1NhCT2RRqkeGQ9obLuoPkljdizum oLuzyBHrzjiDwaqmAPzya452zyAuLhkLjIdHPdOEiJaSt2aIU2/Cm5UpNmfDfLrpSY3p+OB6r0NV TyZN9KM2Ly6pLsDP+yEA/r7qfvBbuQ9YifKaKNCUDm5ykp1u1EiERaAtCQLtqk1+H23cA6Gvb4pO E9HXGZ5aKvFrJ027UmcPnz4ABv4EAATNyxNQFStkJcdz2quZaA2Spo/Gw6PMAxZYFymEGUwt8PD7 y8KQ8CDhlGZDKcZ//wAB9+8+bWpXavFs25rQAnpNbmUka75GdRo/TgtxSgipdnYHAx4eGnreDa3g Tjh2zV2gZb5zhITYH23ePoPgOjvUTx4zQpGskItV5vcx8hgY2wCg98beSRjzkCYqC8Tv2YiSOQ26 ycBkZa7MaFGznfhce7sh2BI1N3oM053TkoFelA6kptE0CnxIasUsKLV8weyQ3AOtmPmVyh2BPVoY zlDRyZIdtkBn/wD4A+YL7IptFfgZ5SwlIQ0OFosMdDvggW2toKplXrfAplPvtJhyHwQDgesbc+Lt CM8nDfa7gR8/UWwH9g6cFiU+yvkd81aRe5DhqMsitlMhnOGg+Y+OVcpCHaEMetw0/UJcIdgMI6Gn gKrhcZF05UCMctGrkl4AH8H4+AP7/gh6novTflaT2Se5NVXJJ6G23HU8MP2ncXKVbGwra+4GDNVW pMHQu0vaRHD8ZaBZMnanuExxAP2we4AB0lHiiSMaOZItO7rDGrQ7tTngxgmSPxxbeDY7RRtrxTtL K2ph3pnQ6xhuzRbenbGstp1uQURJGbw4piGJ6hhY9byrYhxQ2cpahIAd/wDDoVgO74MisKvUrgPh w1uyFtPcIYP9Jy3tnF7MRnjujSe//QefbCfARDpJfFzVIeXNRle+ZZLQs5wJDa3LYyk2vAMWGwTD PauH5lq7fIfwyYwosecN8JOf5IOwdNSZX+n9SILeVZa42zDIFS+QSs6PbBg8L1CYJsNhfE98MfMs CWqoaeenB0YYU3MY8JITDf8AYP8AMB1XsfVdPrF8ccsvJN2QhzLsiSVuwh8tkVnKXXL5NX5jgyVs t3ZV62jgXCBB3NGKDGZGB75sfgNg38B7MESlp2EnvhZygjmKQ7ePrIkSS+zPlWKZk8MMT0u2dII0 XshmjxG5EKyIv+R47vAe2+fNWLYQNgq+1a/au1TUcG18ytrDH065y+p2RujvxdkT4eCeh2qHXw6r hYFDgzFZMzRzjZNk4Rz4AfAbBiB6shV5yOkPr5WmUeSRtwXxqHofUhSV5L5aq1faTwsO4BzEzjd2 OBid9tVcFni4uzNjxN8439+9n7FB7vCqO2LF8Wxp1Tav0x1LyRPk2xU5IkwNlb/F1jOWD4QmVvDM Bw5APXClcCGD5MslLQRmbmu9nT4BBfgCDsB/pP61FO1FdofM0zxLOF1ibKsBin46QnlE1Tq+KZcN 4T/5wgY/n4FjTBn1fk3hAhx+AHz4DYPP5dQkWsnh0L6fcTT7OsemGmkE6SxS6aDa+piE4l2po9Um Z24nMD4TSSRw6tM30kE2ojmhDy5aRoSYmLwNW9Mrywy+mtJgQi7hZrK4jqyENPvC6SoIWBzn9VV7 sd2xwQ1sh2HTa5sJ8KLdX2o9h4a24L6f/wCn89OT2YYUQxayDCYm/v3t59+x6qKv1fYm1jcoXXvJ dI2cEU3C2obxEsgW5RBZ58HzA5hbMGGB82Gr21H+zbojM2+e7wfAc/8A2DqBru/Zb4YPHotwLdkS qxCL1H5x54SFuxnLs123YXBbW63mbgt7CvgXhkJjBfuT83+wfv2/89JLA1UA5MyHVVeobs4WUqku 4CeBaPYXV9hAShget42Rw9DH1u8YEG2DubMri7MrL6TsX9gQfAdOibuc1jeKqSdU8aot4CV/7zUn JykxTdoUnZ0kmEKot9lLZlbbeRZHxLmGOKGC42xAEZY7VEBmzNZvimGZENj+ZqimGRsnThZGcXeC xjS+Vu6kSgcenshik3zcFu1fAtQcmsi7PWBfZOk6uB7/AL9ifft/6shV8gxYJWyAzG4LeckAkB3e A95D5dbuXHj2zr/A6ffLIT2DfOYNuzvLPyhZ2PujqHR37tFsG/sHIN0fPOHnRPpu37+JIcWyQjAw JK2Qicoxqh8saZXxeHT8Rwl18HrmtdJ9tNT3gzNAtaJnOEhEb6CAAHz6/wBBMNkpd3sQwLSK3reZ ap9kiNFhTK/l88pGsgKuhp7IGfA74HT4dqQK/bZwazGZ8V3nfAlXJRz8RAT4AAg9RttWDBo1ljjR Jt2GIVR7DLtLHs33YhhNmQR24nIUVqLCFNl5IGgCUh3BEkojN3ee8AG4xKZUc6WBOOjwpI57FccL jmWWeSeL2on2QW3WK7i7kZB8Nx4fM2/CCBHviOtrBPi6yM5s7Ygz4Du6f38+AwmJi2KbdhFpFkak JjGtkiw9PT1dImVfdzvaB763g4MnJCHzm0e2g2TDaxazZmxmzbwA3/z6D59y2pDW4EdEsUoYqXTe hut1u9XpKq03xjYz3Q2AKaRWpiffFcOJD4CnWEBqrdnWVi42YmcC4b4AQWAAgAGBAfkKoAexCB5T D/4QdbxUs5bUyEyt9qZGgXU55XTyHzLU09/cOVNpCpYK2Mt/a9zB747c+QkE/sDAfQcdcTGJJTEd OXMz7uqkcYRgY4q617JLbJL7yo7lx6U+bOGljd0H086bXfIYzMkUpEdi9rdRicuSQOPPTszK7uy7 myk3KBcy3xKgUktIsk8Y2cDY1hSmh9H1uhuBhwhWDMVZ+oCe8snBkO0CexpKTaIPYH4+AAbByDJg +s4D5aiuBQ3ZVtBDN1OQh0/Itik/5s6LDV/DcHCZMcLA5xyACDtTc6a4MinDbsE59/1AH+pi0HCG UvQPYKunXZc1VU/GiMAEO8NlVtFcFqvF2QQT3DGx3CZy+4qHq+6UdPZv9TMUc39459wH32DpA5ty La5qYybQVxo3O4RJd2BVA0/Z0w8eXot3WQwJ8yq2SyIhGZakBPgTmTk3eUZ3Uq60auOcBP7Bz7f+ lqqxKgREwRA6iNbd9+WSUhZLG/t2FJwjxsGjnS07bhNjvkrJ/N4kVxx+T89RsdbS7fmQ3yvafsiY eAyWwwyMkiwltNAlYqu+EIb5gHhzE+H7788THlmFq7Nsft/sEAAP/QerErUz8brlI5tBILIYcVJT R6xv6v8AUJgmnlIohmG+4BDIxrbe/wCEEDZ9tKq1ijlEPH3SQgVIYEHkD8e56gL6UeOYJFf0yuAX e/QFX21aImwJuSPE8yQ3dDV1sfMT4a2tvhAPcUCv59jPiyM5RubxVxurXhB++nz9RP3R4UrN0tUg eisecyae7GshSbF8kSML0yuQIjUZFtQe+Mgfklbr7I1ASAHAOMZygtGWd7SXbDf37DAB+wgjqFIS J0TNirtLnv8AC27rtrt58b2mt/EfqnrQdwV3IPtbCPHGRayA7j3x2NuT7cj2m+jYWLvTNzEO2srJ fxpQOgSueTB6QnlFdTfMBBCYnmA7iHIB657f1NYzhwZ8V3kZ+pvYKif/AKDsHXG0FKTd9hFlLDsi ma0renLCshkPNDvCtraTzQY7qIbhpLZdJY/+wzpjMyq9X2+zAwZs2Dx7uoPgD+/pkwQa60MaaYGt yn38xS2TJs1gJODRZtwWN8TdHwen91E/jbBW/LWHnAdZWUPDjGGyd8Me/m/8+AcBYVZpfo+ZMsGg oeoen65zrsxkLaq8Kb5KaF485QyHw637qIdXmKdAsH8mjXk+C3nY3Y2k2oeAH+fHwGwHyZ5O8kY5 Y+jjE+5Vf1HhliGPxtM95d9UtrRY7J87Ts+7/wAvZx4x+d3PzkMAl92XbgOHqkumt7+1Sbwk2Qk1 iSrIheT4X+HXKtZr24sp8xiyOCehkZk7cALxtZN8aOTI4RJ8A/IP4iP4sHS3h2QHMr8NIF7I7baE rKQYJELNRAMVIodyQ/hzLUMahGRg4rAHgbGDjEYor3lWWybI8bA/H8H7YD5/qs24bO0roKlC0xen UMCF6jJdULWrZKuGu04tTrRZKcwubyyPywYxT9jHerED663ILA30jMPU7Ivr9fpPH8a/QgOGLWIJ epD+A8kLTVR2Q/8Ah9kiVsR6ZcFfh74+VlFfLIX4epDeEOt2Fwarpo+BeEPkwsXtmHCQm/279+wX 0BB6izTCWUNAgRpk2GR5RlBJe2XWV5rkUKcnUruWAQMR0mRIyyJE2TxbTTLVd6n33ZrdN8c4BPLX w5stLKWWtjW1jT9/zWRtYR5Kwo8RDcqvlq6uhr9bh9SCGZQ+H9y098v7c2Z8rCoEbAHsmwIP9AgP Y/S0PIFrZhqbVewm2nzwG2ncen8fEmBfHnI8+jzC2YmTEO8GSDPHnjhgmzFBbMsg7RwCHP7+A+/A G0vmXiuVMDaGnNw7nWWNN0j/AIKSPiCEMovFHyn+NzDAdxrdxDNTbeE+4kNGJ4q7MT/KJv8AEWwb 9z5Bfd3eSo7GqcOLumsfmOWSNXt45QWfGhDXnwWh8DmcwmB1/GxgLee1FuHd9oV+c8JdjSOfoM+f 2DYD4BaMQsgYu6F9uJ0js4REUrLlwRnxzzdfHTpRHJLEVk2nVAjptRUKqiTEkN3be4NVcEWbCWjL RzyvT9rV8ypIJchklOt4ZhPXpjk5LzkLfONuEzUIhw9n4kv1pOMM/PLkZll43vYvaoth2BBPn2oc uBgTe7VSgaZSXaKk0mw/4yTYDCYFyohSkWRg0xzHFD1CJ+KeqtqgB2fEXtbyMB0mb7VgAGID8uoJ /qHBp7YGmVLbVXodSw1y8iTvHsijNN7C+xRdZWhV80hW4cwYmLdf2ojga/Q4IfcxdDjGc4b3zgP/ AMAfVUS3KAR5aUm2UnKLtYWckREewQFb4mJL3pQsfmC/VZd8riuJY6JXNlJ9l1YhjGVX06WWynaT SHbYAFuYAQB8/UQAo4qMYkdJKtUwkie3bEqjCOR6yINE1WJoNzVzSRtaOBBlMCTUstxvRkeo4m/i KrQJGe5wRibBFcxmHks9PXKTjJ5RV5DX6TnODDMfGhhKxUMgGfIYhbML4dVbWCeDmcZK7ngDq7e0 fgIA+/HwHT4HMGnu0GhDqWBcxujRcO7OP1vYNsFk98TaR0llFsgt8kh2pC3ifUt4AdW/cx5Q9s2O rkk2c4C/W7sDAA2B/WoyQzNXzL4KIdFanLBuaNMvhVtOj2EP8XSIU4HwNDp98pOG4GK5rOwJ9jYD Hko0C7MOA+6OL9ihe/gN/rHdAtgV2yqyaGHW0mwbgNqafRuS3ryeUtB3cj34rcOSMi2wLaq21/dL UyorOL+jBAgRJBgH6ouAvwDwClmimktDqC8e7Mszx715GMlN3JNwdo5xXGxwb4ZhLplWU7MkI2YZ UbukHBCs4/pX3UO7OiARXdPEZlIWW+Hmh8mYUDd1MqTYQA6rq/tjtyetdNV4ZBbDsjgnrZDnH8UF tHJvY1Dq9ZGf6WvB8Agr4AAA3/o8bDFmV6PrGxophAcHxP0uqZjJDh8VtoTZZ+unBg09h6rvitw9 gVs1AbgA1zZHu0PjMzHO6JvYAAAB5/gOCqtRXsRyZGqwWOq4qRlBwhaNnHzFm97pSmLrl87PzA7I HfLgW7Usuv221JmLML2wmc+7vHIOQYoL8f6CnWRMUo4evmima37qw+Q2AHPV+WfMTzCruRiv9N+N bw63ML9cUD/9vDs5P6yyvGLsceEFBAffvAdGY2EkY1KpqEjhOnqVMJH07Y3G00DQyuaUczNNjdxi PJ81bzLkYht5PHJiD2LJFlgyJQxrNrFm+ORXMvZdW5NqHhzW/ouh2EwyFFOwzhGpsVYkCxljKmrY 45iiw513LZR5ZUyuZRiVXqqyeh1f1IhBV/VlIh8KnRQtfJOdKd/tS9mEmKDJeQ+IQit10VWWfAHp FsE2UwXVMM7LLsFlMcgO3Fj9gzJ0vOiFMo4UikUgQPBVblgFkYhDl8bnVxpqCiFB/aMKFVwhigKx xLSYxouZpEFKOfH+/VvJuOznXQAuxY83ySCfDD9/H5/PVjdPuq+0NOtlqt5Lk1Bs1omDdR0dqrh3 bbIOjIauKiYGWTG4IkKn/wCfHahwjIy2ZWHpRxmPpxwB4+kFhjhyBft6fBvGkys1hKrm39KUc+rN Zq+LHTnRYsKVQ9siD2AfHglWF1suQDeqy0CmDkSy8MaaWvU8Ou9emoQC9UB3H/mAsMRpvmZc9x00 rmpbcj1SgYxav2UPivQ65fKnirH54rdwQw5jjZv+F+tN4GDOUEyYP8Jo79/QNB1F4DjouRZFyj9Q Z6et23ajR3ILY21MIr3KJW6afVu0HCyLItR8/JFc1on74yM1Z/iAnzY2knF8+AAc/P8ATWMUchjE sweN9KzgLtXu7uJbufckOJzk7cu3tHQAMyQlsBn9RWD51sbAN9q1luAj8V83wVR8w4h0fpLY4qfW 54zYXxB6TeVX3ytPljFmgCydyN4ZEIx9qA3hS2IcnWb4UebMBhOEvHaI+fYH5+6D7oIODHHW7G1f DSQ233y2ki0Id8D69lngNZC3xwX1tlfHBPZHCZah6n3yj/8AS8XUAwHaIM3VYBCf8D4DHz+jTYJs udZhLO0y6cFFZzSSDYDOnUEkMSEKsb+HVgRH+qbep74d27x3MI1PDu0XZeFxvO+e+IRfr9AX39Cx PbC28vLpd3Q1Vinkq3agOTV1saX69VZFT9ka6bE0AtuEyt3wOn4L6G1IdoUs8TBlmPloec3t24Dy DsGf2DYACyRNEs7OHCGNYgsVxokssqxxadJ54nkTexmWUHCoypObAM24pEmKB3QTHGVlzjeooIz9 U2QutoGPjjJx9tnSYR7crShw+n2oHWTeWgBwf4hEC4VupzKb+WLivhBwshwTzCeQW8KlvD/cyv3y Znje0gGg8BQUHpD6fwZjuYyLlDgbae2ivQgm6Ji5Gr3hsoTEPMZCyO6kNk7gGMW0eP5ITwfLQWeD hLsSdgAAP7Bv6wV7YOaeKnsmpZWTW946eDo0S8WEH/KgG2hJSuUPgdbh7s+ZszUBcFJq2x54vWe+ BN7BgAB+3dg3/n1hbUfNUGaDGvnNquWzOHyx7tZAewg6bXImkdnHw3DSuHMU+wefHnoMMYTFq5N5 Bdr3Y4/bB+r91NN9TImqL6WNNMrvlMh9Cfbx9V5cfSkezlDjJtED1JM+0JhEuy6zXMmAdcP4ZJfc l5d+OA57S1+B8rG+Qa3b8dPnodPqWktDJVIp2QefGAs4NEVslFKrYLIquyA7KnkMLUgOF8TmQXwN WZ/728f/AJun37YHB3PcL4X8nNsat0ADPMSYgdJhh2wxEfBMp8W6/cOHww4ccyTj+m+eqp40ZV6u TJvHCeD+ffgHgOkbX9sW4LpujaM0+1WbT0fUU2u5DWMNqcsntFc7WBp/tuHY6TZC7B3UUkD+HJ83 O5Pcn4QJv78g8f2A/wBM3NIw1xPIwAN/aXc8DXFb0lPyNwlCMT1e78yMH0KrOR4RLFtkdPsax2dm s9YxKYGjaUDQH19PgMcV/DoIGdYoY4E1MSR7kMM0s0ru+zM0TSSPO0skjvgrMzS8WBX3G5QrySSh oS7JE77AxTuyAASzhVHmzl+BXQI+HNP9qkaS7QUO7MgbJCae3i7MmQkQwJ5sKAZhDkkMO+PjAt7C wgf6ZVxiyT2T22CokA+g8B6vI0K6/msB6/Qsz+F4Dnch23J1IdqinIWhomV+hmQ9bre/uE4Cnnnh k3N8KLOPCQhz8vHj7BsD8gdUVV2VfsKZDXD0NAzrBG3ZLtBqquRzw9yFXizG9P43DmQ+N8D4Gjwx gxXFszMDCG/9/L59+935+7B7YYzXBVdzK3Gds2GtxFcatsFsGKlOibGisjAYmQw9kTN4gnvo8xm4 HV7MT4Ukm/38AfP+AwLTQyymHPUOUjhbKT+0huR3HjRkOSZZ35NY4nzlwyaaNmlIgSN9RuYx6U/T xjIrZqpOV4rxZJ8dTDxQ9UV8vra5S6TetkXmAq2zVfVQNr8StgZSRcguHX5in4aHMhp5g421+eeH 0YTfFcY8nObJPaI/sB9+4Ev9PLU5MqvvQ1LoG5kFkVzAy7le+NSFPrxcDKKyykwe4rfeB8TyDI8W X9qp4YMFq6ws+aq7fz59+AH37pDrFLg8b7VWipRq3X1qVW2qZ/AxkNjIB1QFjr5yCIuPnJJm8I/b 6AEEMyyVaBgz6Sk7AAxQT+IDgPR7X9R1/p9rOwjVfOA18sF27xvGfXuoGJakr4loWNMIJ5in6r2e r0P84T50KsydoC/a1AjtjwE+gfiJ+fj4AjNu6qSRZkZFQ5Nec6zz00kE/jmGNdPKkn9TfcYJtXIs t/do4nV1zcSNGFx07IhARoDZ8yGeNxXaYkbnLFeKGwSIBiZAUqxQGp3yYsOtzGdg2Q7QTK9qXUZV a/DpNDDsrIwODW28DajBNGQ2gYT3vHYuA7/j/kANcu2LYsZgZMMqoKBr1ysJkl1+yTa/rIwLlWbY 0Wk19bcNN624Pi/sYFPnqqGs2YLKDBm91cbeAB9BAHz/AIBgEDBSPPQq9umparrcuB5t2PzhrAvX Yhn+/AGa4Q7IMOBh8YJljbe2o8xZvJoq+s3nhCSb+gn/AGPoL8f63WBIcGO2GrN1DmIySxmFsTgq hw9Th4tYWFKsaYwB1vuQyp7g4YkCFlhA6yTV7QswZ3R2Tf8A79wFBAP3S3CLgkmZ30V4ESWUbv8A zC+mgdJZo4skDSKH2sxajcFihoNi9OsyxSJXts2rXfN0eKHzzz1pQyCW0VncFXi9K9OHq5MWjp7M 3CejsRhpu5eTZTgnskyZT7JcFf1ZXJC0DyqhE1lXKPLzsnucAAPv2G/7/MXJyzTclZ0BtqsbYQuE Ns2p6Oh2eWuCkbaU/i2Qnvi3cHAw4+t3h8Xz1O3AsrO1s2x7HaX6oPn/AN/W2+WQBB8RnuFxpKRW 40QvmD5D5hQ8JAxWRwhVWYhQzHJHiewAZ3J0bi/gzeO+ef8AAb+f6MTC2ya3LQMVJKDv92X7c3cK 0bCsIeWW00ow7CtfMQ3BwcK3YJlOnh9LeM7X8GZtl4ThwHf0E+fPgOjcvuBHV44V8F5d3DLGyBgg 54vkWQP2egZrWR43y1LY1kLjf85pYyIul7h5I589LyoNbeqdJrC5NHFI0mOo0PcmNJV+0uxiLiTw s1oB7hMfbIm2Pdbitza2Halq4h4DCaEU5zVwMLz1gqI8AxP4YnrpumWy2C0GEiwWSSen6UUm+dQF /LdPu61FKab020C5AxagdPfU9g7Vnk+AEMDCauhrKzvZtJ39B/r4/v8A1Uu/JGoy1CCrZb4GGgWi vglTx87UUj/MQxdhAk5b+JW6G+TENxW1WB8Cq+dcnF4DN7B7Hv8AsAD260z5FF5XD56kkuteq/bZ IV1UDW7Y4npS9qMQ2T5kzUhdlwfzhzAhZZwxWZNo4yjfdkjYAADfv38+tFSNY5EO3uWzs/dnJ2Fn mm4q8hguBqmNnpsTb7OsvKLMsG2aSQIDcQdQO3bkVHFk5hSvbWXTgqO2I9crcOKBJKKeUrxSpyON rGyYjhzKvbalLezzE/TfMtRhcHgDo/8AndzSZPc3nsl/X3gEHwCD1MWQHjlBeSru7Ut39AfBruYr 12Hy+eWgjgVdkX1vjafMMkMLGn7DOcSfi3lmR7Rxw2DtEAt1BAeASV0WBDnqYeuU2nv8FoW34sQh 2cYSEM8Ud7Gpt94fDmae7Th8ENwKPnzpbNyfF5ZfuwRHAb+AX+QY7+bx9Tbo5L7gkBqx035wan9S FmyFugUehluWUiWM0J7hDcFuHT8OwHyuXzTfscPxbQU90qrrseEE/j/sEAg1htyISuac5NeISitc c5ZWfkVj83xHcSqVd8aKkmixEe3DLI9CrwzUVYyJuxdAkp+HdjGj2EBv3UIyf4QGSWq5UJK5ZPuT siLuSk2C+PD0nty3ObR/mCbM+Ifg9kN9ovsADgIDYEPRbRcjvV9faZFfVc2p1QJMZscAL5HXq3uS pWwXY4dgW4bhqcezC+YgqXEoKe87XzkmDCVcko+wAD4DwD90apcywLAX7ajZVD6kANyaewlDODg4 L93UOrgUjRvXKfX5hkxZA7gQXP8A1Iad5sxZZu6CysHLRN/7+P8A9/YGTVbAPYzmrTsjqudqlqpV 1IKbAnmKXtiYmyl3mVb2i+MlqU/T4fjYOyq/n0etvKy+f3s3+/gD/gMcerf6eW1aCH+76mHVaeFV qOLViVIuwWa2N0M3ncsDsqyxFeNFp5ZN2IxTMZO/UQHHFncqfdbEDE4i+WB6pmDv1HDD9RWaZtR2 fEevKuYXi2mpXXlur3J3i2M+L+nsx2rD7etwXxPbZzgzPPF0ZZB/i7z79bvPkEB1blBda5DItKPG RLtmRRVMMamj29qPgzXz0uEV+coTjDe73xUYT8/K1z4QQkysrMvn1C/SFOAzSRsOB3HFBAL59NAj AOBUYetGOpZNnSs6UWT3b5DDiBTdQgH4jAZW5i2thx61O5ghbwsrPa953yrnZJBgLdQT/Pum+jLF qBhdBFNQRKPVaadQUifXt5GRDi0HnfT6Bb8FDTe4S6Uqwc4YUvPUq4iMxNDWMFlIBmziPivv/H8X 0DhgeoVsXMauezUMZtuJtssIQDp4nSaWeQYm5IlTZsZhtxcV6ftcPmUptGlkyRp6Mok9SVZYoljf CmjlYBvKt2MDXy6L8zJ4fU7KgEiVkHnZkYa/tSvbAUzEuU7ngN8MGEPWAhocNgp85AcIHG+DK6uT Wt7SaueP+/n35gPz1BrUNjhp+odNSacJIYhkr1H1FJ7O2OAF8LRQNbjrUZGRkrdkr6Y1VLV98bOU JvlXVozHPNnPoPgN/Pn38jvlN2MLPoZS4Dbtq0D3JLDuGTcEszKV9Qp5otS8LIT5gfeF9wnf+oek JizwOrxnauru6JzYF9B8+/dAbQrw1LUoYTW1PJAZUNtrKv1Ua0S63PSpco9WxCJNhuEPj63ghuEB VmDCgsWs2YD8ID8//kAfsIrKrTTOe85zMf8AFRXt/VWebPnxx1A7SOqEIUOzBErpntRrlQBtcvPP C/H46FSFqXZPrPOSM0CbfK1DkogdJSa/pyZV4HT3KsaYAtSyO1a24D0NVPD3w4+cZpxXJ2Zzbwf/ AIFsHU8t5bRAYIZ60ANpTFymUm+a3mpNPqYfvcvSrkrcehh0NkuCyCHautKPPHHDjNNlPvDsD4Py ABUSD3dP+/ZltlPqRzHUZXw2T/ObsrmFrURWW11M7q6uZIIdkB4YeYwbG22BsdVrNmbWTKA3bzmH n9gxx2DsdZCnfCG+Cs0C7Eh42LUxh2VR8uWeTSwAXahAw+J7jDDuC3BgL8DGYs9m1fjJw3gbB/fj 6Dz4B0KhQyMomil+dQDt6hvaQzSd2cnJDviMuO0dX7M2llSRxjlG5E2BuxTWlZ1yaN0PFc/B63aF jKdemZ6ToVqWpVrATpHqUPV4kP8AKti0K52+yO9lkVsnuEz4GwfMrS8mnc2bZAmxgEH/ACYN/wAY 4eHrNXMae6Cv0abGpr4/qdoMd5WwpvmIynAPMOSQw6GH29kd5458p1PJoxQWLJo/CTd4VCfAfQQH UbDbcVwYBzVJDSd0AxpZA8YcC1kSuWafTxhPLh1uGHhp/FYCeB+Y87WLJk/u2+IOwf38/wBNqzFN 4codez812JWcxu0aXX8OZIlh022q9q9DW098quGYmVuvmGo8ngWrc3lXKcZ5sbCbA/8Ad33QX8Af jNPDJErFF0yRSMZS9auJ4ojFEVOJ+ojb6hjNHcX8aAscrUwsc2YvbmXBWY+yeNwM0d+NmsRRxlys 8DHnfX0O2L3um5zzHMUrmioYRheNQlnK8QxUrQ702muHbcPqoMUOnkEOxu+F007xmzHwWsPIT/Sv wADA/sHQQHzKzssXcEqtMk2BrRwJWEHzrODqbIrlPlVKyr+8UPdkx8T5jVUie2waG/iFKNBNZOJJ u7LU7RH7dPn6D3/oPqej3yLbB5Sl5xK2jyS23GQZHyt15k55XospDH7P/Jw2CGc89AWxjNugsYcC b0DP7BhsD959kD4bbXMyY5VVeVtJ+aepxhMWFk2RDDuYCZcj5ZA++Phsi2yODG8W2n3T2TWcbQ1G I3Bzf+4H5f8A8qi6jlo1jZncZIEAds/4yOfC1efI54+ehja8/TztDG3djhISua+DeHHPF3fFUQSt VbJtcBOanPWfp5pg56mhri56XbT85Z7tn4Zh6cV9bpNzpmmpkgZo+xpJSQ+hPWuZgtf2dihYQxub JwmGS+daazTbTsGukoecueqK/l1sCykOKuXox59Bz4AbOly38CNrJXzlrONHqUWwr3BT60aD3phZ mzLnrVlkOBQFZPBjs63jSxULKE0LMn9n7khPHvf6pc25FtiLPNDrH9RIOMIeOP8AiQPFDxtfv/x+ 6I2Sm4cCm7UuSjPjdqnDVpZqPW4FgYZloVLETVdPIOFbsjJcENwfAZ7iU4M8rHjFnm/+/j4DYD/d 3rjp/Vo8AV9wlVU4Eraba9Umyt3B8V1NPFLH8FtoB6f4HMW2RPq/GcBsACbWidZq5RmGPGyGznPj +wAN/QT/AGIalV8VstRSqDONhyiSDLMFeslkL0yr3yWrtHb/AJ4YfDCevmFVS4HVaezDBTQsozwE dTaOAqK3V/B+fgFRL+5LYENXywwuzKrSaBK3NW8tHyjzR3IKNEs9p9fE+q3wwhrX2Q4B1IQGpkwe Xyhyay8UmEq33+/fiLrnavSx6vRrFKJp0imik1Kx8R6qNbKwzpz2bgSZe41PDG9HCjrj1DxSvJF6 c0kMkKTDmSDcwBkiNCpBiCrfH/fpe2BbDQ+NCG+T6lGpOVTLb2nmEqnicDV2FNlbeYcK31CODHcE OdbVP21iyf8AqgFE2b7sbwYPAIPsffj+6vLEIXcLtmAxu2/Hsl/LVwkw6PiGMe7D4Mhp8xbqvZ/D zkPgcEwsrCG0LJMGk/RwADn2B/z/AE4KrF3gkVZDM3mYCZ1BanDZa6EMxV8uHUoGzSjQ4D4eMznk z+eUuBwLUt9GKK/sjhNk8A/IL8g/YOoxgIA1ePXtjIeyE3ya7cwJTE9SDgUOwhb4n4MjJM44HImA ajb4FqMExe1k1kHV+yAwB/EB/kf6ILcSiMI+oEJqSJ845NkjtjOK5O2fYlc0eeOaAxdpZw7abeXe BTCQb3KbaZNuVttn3JVr+evtqaalNIaIcBCPNtzZoH4mn8a7SKnZEMXbB4WtsBgxVbIybhNVR9wA XmYzLL4rk98djYRH3/YD4Df+qu5jIhJsOZPihySTF+NEMc2HpCHFfIjQAmEFuZ3UqvcODn6/5wh8 F5QzLIMI7pO//wBA8B8+aq9gOtoVfcAe+Hx/hoTtZHKNNMyRd3yqHiXI5PieYQ7UfGQPADgwDhPa v6oKExm9pBvf/wBgwP8An+2RWYeuVuHlWqyEq97YqV3MAExjEfH0XfO1mGBbZE+HD7fwzk4eeVbI ZifPCbNj+Lu7r8g4gPc/sDjKMVSUp2WyQZ5YxviFaePEfyY9gy4CPyb6DaVHkMIdEO3TOlf3iKWO ZaFnLbiEZPIv6j4w72FYlqNFS2DLSCj5UqGezlIvH1OAVezZkWxhPcaYnslqVXMQzA+1AYFwqU5L /F/aBnRwgTg78AQvoJ8+AxD7ouSGuauObhrmZD6QyG7CMMjVYHPKbq++dPoyG3p7IyOFVrjAtnG3 geExmGXIr1mT72uwR4PH+An/AD4AAW1dqy0mVPVVs1nYCNK1MXmGoxqEaaq4zYTEm1NSVnknM9Of QlVw5502PPejMHwkiyGu0Kz9Jz1hDCTiBNA1vMw9Prw/bpW9PuSvXrHETyUMC+Wgw4mGrUBZtj2g m2FSItlT0/eL4DzHANOgOCGdrd5t9pfFms/ChNg8+wbB4BUTLJbRxumX08McxX02ouGaPxuVYLCx Vryb4OVXWwWSZCd10RqB3KpSaNY4Gmo3fhas7tP7ACpum3yAUA04NM6hHZeR0kw0YbXbS+m3cYYD Fq2Rw9kYDFcz2CAqp4wX9GZtkSbRxAeA8+Aw6jbYOAxd2NVS03nXY+MbU/wx43JkVkYqUDqEpGxq 3YIbgnvidC42DqVw7jF2ZZ9u2e+f38AeX/PgEGST0+OZ0Z1jXwZDf3yUkjojwezg6nW9XxV6U0OM 9PMQ7shrbA+79aGHD+xqG+cmSDYRJqtBfj6CAPgEI+fakxbvy31OyHK0Jlfu1g0bSdI3RDarAiB6 QlacE2pTBC1JgeGHT1/g8BfunuqTWWhX5MDtIJjwHHYH7YD+wFGZI43lkffdppLDLjG1FAMwp3DV 8bcsfzllxiuTCUwIIn9IqGKDcA0kZ70YdtVkKPN3445rGjsAtNzM6BaBgI1JsONLq8PnXR8Mmr0i ecjFXw7gmMiIHX7JvB8wbQcPbEMWs2Yj2iku4M+AP+ft3YOrKg9OesDTzXkOr2KlDVZKWsZbrIxM T6mU+UWNYUWuLIHmE9kmslkWAZn0PYAA7cAzbBbyTBmzfsAQT5+ouP7AfqwRM6w3Z8zq60y2SNtR j0r05a7hScwzp8p+LyKnJfP4Le93At2qnsmD5AIU84vKxhg8Yg3bELx/2Xz9vHwHRJRdqQ21X706 vtVG8ZtY05Q1Xja3jsL5ckq7leuWQddtVoa38O0A7UBsCA1GMHkV3M5yECOwP9PAAMEHojLP2vgj bTqVWstQI15SOA8Y42c2o2ce0Y8gqwqmAd1yoFlEXfHwsqHcilr1AyAqRQjLEHIKgrWYtgwmLdI2 qk1+Gn2RaRZHJzHDgdXypepZXhuEwwnmO5K8tnKH4HBT1lmVqbWWZ4q43qHOb/UR/E+wcB6fGW0X BKB39WlaAVIPlHn9eYAK2nxLJKC7uA/MT0+q6fh1XqE3iEBT4Hwydv1fh94/F2CCA2AAAQPbqSjk FcoprZmLnVtZNg2dHs0xalYmWyt4tiiQJRbcK3WtPdwPkwc+Az3dqd+X1cWjIxzzdVvwD6Dv4B+Q ZhTeNQBm2KxKaeD2pBw1Sra2JRwOdHU5kpolOVc/cHxDcA9qfMBcfrT6ys8XebM9jaT58B4A+g8+ BoxqjmpR0DxSbaajEJIkscryO20bSTbVWfEbNWRJlSvaQxqVdkRo6yVI8R3VV9x/H/c/nqNkMFfp FR0/XL5W9tJNtVLhcVPtUJX+Y5Hl60HxPX+BmFuY4D+8SH/IzBgxoFvOx737/QUHYPPgIDNOalIF qZ2bTb3aIeAyLctfdrIR4kOpQMRNPQyDgtrnGw7At/AXp86GzbW0LKMctE3sewex8/sGIBz23adm PYvkVlWpZD3rCzvitNhuAYTWwquWFOrrFwEwxCeyUkn4bDQBDFlG1o02j+uynMcd/fgOIDFgALdT oNksFlyQM+YEodtyQdhR69PPBYxzJhPSjA9kW4eGzMGxnl9tBmRiML3NmeMTbs8b/wCAP+f6kOl0 2mjG7NqZNx5XDa+YNIMpmlKI+IuOLdEca0NuFIUtiufV6k6mWbKKKCDFIlZIY9uPmOKQEJkcaMmN WbAu+aCrh41euD5mzZw0wLT6uEp621B7YWxYuIhK7IwclcGRDDj/AJ2JA9BsgmT5Rtm9pJt4/Lr8 Aw58f6ZCVWbxUFiJ7G5IalnVLkm7YITbmsCG+AamLCzwdgT94re7FseHrmtB6F72YMV2gYM5s7Gz iCAXwDBv4BfPxrYPMAUcbFrRDW9PZlktGWGPTKvE0/jci9ckVPcEJwMcwZGAP89fnqsMn+G+S8J5 s8HwCCffsAGPUk2MludklV8fCUkxVSrJpwOqjSC9zKKJVuSMAdkZafmrY8wqgeeA3Dk74rrOxpJu k/7B+ngG66DFJYUkvPGEsk0um1C7nhoVifvojuVm/wANEWelaTUM8gkMMcTxxu6E/wAHATITihY4 GJ+O8Ub6XqO6A4CnkxWNPG3YZSTfKK3ANCnfB4DE5Q+DzD5ZFbmE8eng9PCf7Mm5tFXPKycSbs3x BxAb/sADoqKVPX5Q5DXANnJN/I7UD7b/AOCn0jVYt8LCyuoVfmzDFkQ3DGn4KkwPlHrZN5oe+Fl5 Bm9kObA++A+/dJ+s4an8cDm02kuwfVdMsiVHDZVgU6HPUO8FUMw4vmJin3DugYwn4Hq4DrBOz0Nm R8UnHtXivoJ5f2D9eqw9QWXrRXdLWnBI0j5AmtdJGHptiwl+AxJ4sTqCVYbev4XZY9jWnb5+FghL 8EJDaFrEbcH/ADJfqOHfZgYsV70+heXhaTGQFBWNZbUOGnW8QMu9tokjj35UfGPLGBNCVqruyK5S GMBdx3YVlha0KHLHnqUtCt0eVU9VvkCYyXBppSYtIh7mDq6RMq89LQ2hwX7UvihltPsget4vg/g9 V2+TV3xZsw53SN8+3/H9EHn0kwC6Pv23MkXRlhEq9rTmyn2xW5CQtprRw2+Idf1UYcKTT7U7qdlV 8DaiGjI2NyE7yRwgT6CfP93QD90X6jyi+GqLUhEi6e6L01JOq5bhvAdWklpli2Ok1yrsY9Ph6fET /lnrVcUPiicQeRiuh0+LNmbsSnjHgC+/AcAADr7mXYPlWZMsvWRk2RYbvDdq9V7O00vFYp6a+ahA ItbcGSGGuAOHT1tVUgAKdDqD8Dk98Nmwm/gAAAAg7A/HwaSXseOXU2UWPk72n1Mg4jWfT9ni3KHd OIL8G6EfaEjrggTMkAy7ckTsVEkccmL3XZk2IvgYiup3LsjLaIc2pc2yLjT5+kUbcaBT9hPDFSfD RIGmr4cGOq4bJZFV8wgtq+h1y+cZfcBay7hAnugsCDUXAdgfuq1ArUOWWj0+LPIY24MpDbacq/Uj Z1sQ8D2n2Imxe+C3VWL4Y5BMtRDsGf8AM3N80l6eifCau7Vc+Qd/t0/9BY7Tq0F0PWGbQdcVwbrG qhl11Rq3JWbW9T9+GikbuTrIXnGHRCe+uB9bVnysB7UGxeUL2GnMO12OKCwYY4797RzA8IbbZle6 QaHhqLJeenvsM4WRedLO8toVtR7lvDhD5ghoe4J6OBX/AMqLK0UaGYYc/h4ScD6EAAcBPn9/gCRS osmncTFJJImPsMcW2J2ievUCh4y3C0WU83wSF3iMoe4g8ccilauSW9pSb4ywfmvPxzRfFyJafbVP rdfSq+Nh4gck7h1RwaBMwWr0irnnAeYQzFD3YyJ63O4fq0BvhOzBbReSyD2Q3hsC/wABqLf+qozK 0shIh2Qxttem7CbVRbbHBqA1vLQwLkvVyL+n491E8OPZK5Ar4HBkeSf0b8omwhwAf/sG/gLdZliF MpXMymMDaNJ5RhTsJes6Xx7uhFUwCbdjhfFD0+nzHwf86BR4GcyIvPP97Vd5/wAABAHwHSZQ7caI FgMoaxryCVvFhg6ycALiPw7clNR9tFHxwZE+YyWQHT5kGevodjSyfF+TcHSQiTgAqIAAXwHgMZAN RLIsQR5EbLPKX1EyleULC+B2owJSuGLcqTlyAFTyQRZyDMumKxgJuRiMeI3jzXLDnFshdnjjpzGD FqUjHAhmNPoElK1LaeJdkVuStBsDFLGLJpRwp+rN4TzAcfMOAdQDaccEbi6usjP6JRsX3YMH5A4C fRoNPvjT7aGSr5R5kVbaahkSyLgznCnA4EpXp6pbUsEOtuFV7R8JqukhS1cGHlmaNzZuE73v4B+5 8/IL9sCZQx9oJF5w90h1LcyvMJMNgHkntk4Vyh1keKGB/beHW+pBcX3BqQ0+lniGMsxXKLDzgbw8 /j+vn/d5VGl3RFpewrk16krj73NaTYcgPYVbCTDm5O8Vyb+SLa24Pu3hzlLL7bj3fGC6u/ZHb/V7 wCD59ghj25NaqRxhJPp55b1JeOZ5IhGQpaaeVJEEAaVHiircjoyUSrjlLDpy8tudwCJl9SCMGPbR yrPG15NRSRvacgvFm3cQOkb8ZlViEdstqrewg6qYr8SHApq9Ywvh6fDfNnZCH8gvvkEwzE1coMFg zf8AYAC/v/791x7Qy5Riwt5Gksmr+ANivkw2iwoZQ8v7otj3BwT7Uh1tX62jto+Achs5MXthPHwg Q+g8Bxw3/oE1ENrAh2YBlNFhMtkZRhkXrILzGihn1Xi2xbRVPsCZvFVob4voljNvwHiGzDCnjNk7 o1Xif/ER8ABP9BJCyGhNrf5WzySSvabs12QeT2gTDFi/uQchDrdwZFtb842kN95MTKFCbz5tJ3/2 PgD+wdCI2Rknd5i8qK7ESUD+B7ft55+b6tmbZMZCAR1ShKkGRW9yS/UvHt7Ux7vOV9RqvZj5Xzwk T6HanYPAT4zFW9qLaew4y3Li9jJ9fzE9Dp+H/qNZaeeBoS0M3Tc9kSXYGggEI+AqPwB+YYJgOvtW lzXJPquMh5ucNlr7JM8xFPMMTyHMKgMIi2v4HEO0Lagw1mzUNXWVkHVwQ2cPgH8+AAe5/q3V4ab0 djZHZH5st2plU+EXh6HZ2l9smRSjZKPVXX7JwNwp+tx8wH3APckGe3+WJv8A8+Pvz9wDpV1Wh1/q CsgCZi1vGrdIG1uvcw1USCxhXcq9uSuUOwJhgxvENwQ9hp98eFsXRr5ue+BKSOPHaI/wF+8/0wvA 2cwkQ7+O86RYYYEYWM2yvJq5XGvm+FqrR+kRSJWA/AIAPwPwOrKaV9AtJ6iRV12Kul3FfrXM1E2a Fp6IoK9uamQ/qrIZ6QWIP0+m0apsQ+BJSBpCSYA52BTIAsZTARlthEaTyGWC3s+dUMzLap2gTzYi JQz/ABFb1H/SbBlLfWbbQ7ELjZwQLGh+tlEUsWUq8lSwMaDlJ3oKC8kkUlZCzlZLT61tqjGUBOzq 1FKoM1kAAnCrPHNZGvPPJ8H8dUZbJOPn9/8A86O2Uwhu4uyKlZ8mpc5kPah3en7hcbYLmIuqDT2V iw6vWrsTzEMOQcAfH3y8HyzGYpaFZjO6VopKP7n+7v790wtNa/Qd8SGRtuSybas7WvakZhpekhqu pocq0JZ6m08fMrfkjJDIGK5ss/2dhk0Yo0PSyDNJAQGfwfj+/wCwH+q60+ro9llbafAKeNJZsMld 0h2ya/d4ZSxrYaItkWBMfEQPagchDgvloKSPyZmV1d5t9HwtII8AH4Bv58/gAPz2ZWdoOS/RpRDy X/UsBaqBYbgsOyVaJL7jUNbVXw9ohreBhDX0+xgHaVVMbYrtBMZ5vfAB/wA+A+ggAWGUpHDBq5kC PHg23u+JYpTp2X6bUenqdoLIQY6MYJWSqBNNIktTaSA1WcDcxmwKYgrzIlHbeuzJu1suJit09kfA de6bnGwtnqADaNsNBICrFlsoUrJDimCEN8mJ5iEP2OBYAGCHZhavyYn2u2Q5wHYP38AAKbkujTI7 gz90Zd1rjgGh6oZSRYShp30zPYGTVCHFxgVWn3uhXwt4wwZ6BZQJOp+zMabGvGDrjg84H8GDFgwf 0F9CswfaljSK9QxbKMGu7haImwFZkH2FW6GebHIohj04OYQ94sCtziHxKctkxj5V+BM4E1Du2/7B wE/v/uH6d490JFduyaKJDUlcMdvSF5J5Cs1vgdxgZVq88ZE9btRaX3yxuPtpxb2xoaEZGeTYM3v4 ACAPgOA9FBpoocliWGDcueeGCleHVzySS6ggD+LPJF+7PbsY410DzM1ROrzuONx5B2ooURRqu2cY 4owqKuR8E8XQXsjLujNFjXKVMbQLRZCSWX8TBBeDgQOoUCLD2gtmPhh3AeYBqTAeRg61WYto4yd9 7RwAPz9+wANgf0Ok3+8yrhb+lah1Iwh6ewnMDxcewvmMqke0rhhxBluBPWx9WUfZdwHlWtyZNoV9 PIw5hshx9AfQT/H+jDVowWfpzmW0ByiSRXraHku6PM09vCQn6g4tDVffHb+7K3Mck+yI9aWAAOOD NUCHuYw4btFJBvx8+g/v+wVQOMmvhSltWjxocI1M1pcFXae08Dkr8tPps82U2ecGBkp+1HxPrcfj zxgbeN7Y0Pe2I92G0nDj78f/ANvn7llmnQCFYXhblZL3YF0jY7kqyKBIsjUuBSCTbxaxZXoTFCrE MZg6bEKtW3uT+psvamWM4jc4SSTEsMiMhc/fmW0T7MT7kXKTJQ219Ny7AhjWCkTFXIdsOSvZBBkf WSt8Jg8N4/g9kDCbTV7N2rNpGH//AHz9qEcpajJcFb2WH1ULbraF8aS2ExYVwXB/NK4kCrwyMN8o dPT5jA4b8vnkfkyMVaBn5ROWicfn4AfwAH8fYbONFbu7gSTcq2km5sqtyTvZDhZDhyQDSN86gmhw IOEOq0Mw+MGFxdwLL5JWaM0bmzbIknPAbBsAA/v69rJLIQJlMhuzLtfzbDwbMFuvV/8Ao2zXxDQ+ NuFqLbgtkJn5QgVWyLNltAtGWTmO9+58/wA+5B54ZAs0bl0RnwKMzrnlmVANWtY4nizdjkVyyNdi SN1dzuOqxSI23VmmLJTZeVoZD5+TwSTLkDlK/ZA9NwwieuEpKm8GENPbHBXsa2FdNZB5jjcPT2n1 eG36wB4OYUZhbQTZv2TkH/YOA9agaev20cA5qG7GyTJC+W4BzFkNkwXF54UcCDInokO1A4+Z5D2W 6zZvyYMwSQjsD/7C/AH7ojfK3bN0uWy21kf3YNpiksOlbOr28F7tK5Lya5cfhoa4tviGnh0cCwKU FkZeL8GWQnNjewPx9BQcD/gJ4GnlDymeiz4dXWdXyHGiWABZCBaYUsYTXNjQ2AzDmKEMw4MiOhp/ cUPWbNaHaBG3u7KTB/2DYAB8+pVVI21D+nGzl28NszrhQ+3PayPNLmWHC0AYy+ovxtOj5AVJwLpH +y77jTXQ4FdL05R94C1umdV/MAml20batqwk+t8lXLTALkw88Q+YfcGSqx/3yv7aOIf1dDJvJwIa 3w+/YbAv8+xX4GjzDZQ96Ld/TyQQlarhGiEDJ6MprZ75fKFvZ5hhOZJg+GqodgKVH2pxnlDNwf8A v4DwB9f2E/ZA4n0vQTgyJDu4WjbSlUqlLH2FfCOkGBaakPlyLa8yJ8N8Qoa+YVZ7ApHA/JtRn2be 3arjiDbu/wDH0E+A6orqM1GGIoNDyU2wls9aBgKJsgCk1ekWPF7eygNkOExwDmVswP2Oy08fhVay zC/cn5sJagDwHAfY+fNWklD4ineMxs45LyPW0K4q8X+T/wBOi2YoX3gH2krtd8sCcRwcR7q/wjnp 2UmDXwLJT6mGpkbZEpVsiXp3Q5iOw79K1YJspkHwk/khgwPhtYFP4rDJk1f8vgggQ3j/AP0FAwbV mA5hl0ST1fXBaEM87NsS0GrJHsMz5UQpw9hY7Hp+Hxtg4r/P1ynrKzqMKbmd7o84AYbAgn0HYD6T ZGR81BSOWu9p3ZQzRxtTsBqWqnpzdK5LJsVktB8D8krcywGNh4k8Mgzi6vj2OCf1Bv8AwF+Ae/Sx ZIdqGkPTHqHTeSJLHaZJhaE/Jju7gLTRLRV5hwD8wDmAw8M8AR6Hccxmt8pxjfcUlJeNgfj9un9/ PdHhLqJZJw/9GRV0bpEd52CBEmzRpIrpsWidbJbMNS0l2RI2Ss9yu8dkkePPYxDVllTcfb1dcfaD Q+A73ylx2tFwY5gReqe7O6GFkVL290lxRDB9PmLdkD7Irmen2X3I4yr/AJMB2iEdkbnx9+P8+fuv qWPoPKqu8rz1YXNGhHkOioket6lgS2R8PO4t8cOHp8N8hp9gGPgMClvCMslEOs8KrdglXPB9+/8A c/0gWw4tNDwttspwf7mPODawmLgVXBIQ4vcJNAvn5gW5lwByCGCgL7a8IbyTQ9sRqrChOcL78wPw D9/YBswD0v1LqAzraKDZJKr5jbEMWcNV3eG+Hl+K+Pjgnsdb2R4/524KfJFkYLfbM8I7JP8AT+IA /sB/rK0MepTELtuZt5dvsdOFtdMyjb03xuFITu9mQAQdPE7ws4d7zQqgYxPG8b4YyOkcst3RIVih HJBN9rydKLyzxgDmq9nP7Ux2oSd6fagNTrzJXNjS1eLaY+YtmK3mPlocqtqn7LeITyMV8dQow59J B7+A/QB4ADmKa3hpzod3nuwTnmcEwaGSGHs2ZYwtslFIXzA7IhzE9Ph1yAQICr+6C3n82BHa8LdQ T+wIIDfwF0jBRgY7AhrkaiBpKubC08YWBQ9EU+whhYvTghvhggyd7JjhDwMe2oBE+YTvLgZMl7gw nAfP/wCWOAHIeA9X1eYAocM2SSMGSnBzU+WDWRhyA1PUot8nmFuGt3Zjw+uQNP8Az2TjPA1nY/8A p4ABv/Aej3FEiiQPJtujq0a5I1GiFexd8WceD8c8W0e1W21PJnUO3LFjtyyR8xSou2ThZIaTIGji EDNXs4LbDxTGyx6rGGhkpcE7Cnr/AMx8illcpyBbM8wsgPAh/PYIAPtnwPjIwHib2M/wE/8A5b/G 5lkTHK1KZaCiTGPIaSyKbTNJamCycr6c3cXKmEQ92TGR83BwVa0r98R0Pa1er2as3g1hvngPoO/g OnkPB2e0GHBczXYJnd1ED8wAU/5gsWw1KrzB8MOtlw5j7xUv1Wk1kYU4N7G+1xzz/gMeQdV1Fw6b V6vs4zlXlf2SeslkrLhNhB2JkV9L9hLBRkYA76tl5iePh/AP6ecDLMTFoZNZO44OxzgH9P7/ALA5 gsiyqjojypgqpPV2ASSdvkgkUKF35HSo3+nl000g3EgfMm8K5Xgmm91f7V4N9SR2i/4pbYzq10R1 729qq8n5eq8lQIazflIYloTENgsdwT6rY7IwmA1Ng7cLdmPOHGWbGrsEkHUQAAA/VfPgIdwT2wC+ J+/WQShlE4lLaKBsgg7h00+JTWiGwLcMPjZEMgycS+Aq47YUKM3uk8338Bv4A/v/AESVNflQV7S9 2GbLfBrhfudV1ZVPp1p9fSWQCBiAXKHw98ZA8wwPshqQ3DTS8B1mzUN8ZsQZsGbww4CvgQF+8B66 9TGZaj5R9e2Mr1jonTw1wVdZ1P3xRtD8kPHpcWr09ftRk1OTFuEwYTp7gA42z8nuT9fCHNgt7nwA AAP9L0ciiYq6f3mMvEZ5UiJbci08oZZJZod3HMqQo7e0kjMU3URugEqS7V7MxWJcL8kR3k1RpZ21 rstvOXAhuEewSCquFHBts6fksgmt9nkO4er7QiXyUmcPqsw4Ia2wJ6rqHHz3gOTGPn2ZHNO3gP8A YL9v59+1PmLbk4PlSq9MkmUyHjFngk+PEN9pFzYUOm6T/nK3hmGP3VVJgUZy4Ms0YUGWY8JFopPA QL8APnkAAwH00fT3BDiHtRibYUaZxV/7PLd8csqtNcpdoXIhsDGyVWYEWqwQ523nka1EYn/TOyVc ER0E+g7AfAPz8AbLhRmmsDXa2dM6hFtb1StV+2wkGNK5hsuy+EKhotNoZGE3mC5nuA+2K3OOCOnL PA3vkx1KdXZ4XwCFv6+BX9gNpYmdcdQ7zah0STCtRu5D1SbKbWdKALe8f1ytUkjBURoEhoRqilaj NYqT3XjjwaF2eB0jqrMELQBtVXns52dp+QN3CjclfsJklFGGVbTg4TLsDuCfZFgMiqBHHvhs6xzw YM83diOAxP7AfPn+uM6LmVplkosDJkwyA03Ztfks5gLQ9+r2xkMOQfGTupVa3vEF8T+Kw/q6usjN 79/6Bfj/AOmPWmZR+WGIZ0oW7yT0DO2myDzJxOYhyl5ycltfDuAd8Tw9gTAaGwwHjDgzQ0bYDN75 +/gPf32CHkTBZ63K9PLgBJr0yqrglHJLbREhxRe1yk74fdSG+cwT+Wr75O2wZ9G/zNg/f/582LBS oUHRsAqmz7zW2h4Pv7qI8Y8gknoVijDxGRcNQjiR2ssVjQDNqAF1kOL5vpnVQwFDJRvHi88knHg+ 0tCTVY9I/iMlWFd28MCGHtSn9MQevzE7b0OuU95WbkaKz2M2kuyOA+gr+/8AUYlvAho08OC5mQ36 2mf8UBlzOk4GE7T7MqYUnv7JC0xvkS4HFwnTx4E37rNNqwwliFxxxAAQGOADAAAxVjI203Xy/DKA VW/iVXDVKWHMBx8St4vy9QTQnuExkQw7IYYDEECnVo1BifKEPnKObdgm/vyD/q774Xvw1R5euu0w 9xwNFFBAqHpqv6nD4zTNZTJNYV8BrkM/2PdiHakxjX8AaCv3S0p6yjq5R3rM3gEq8HjjsB7Fgxx6 AywiQFNNaR+quoEGz/HXuTUSQZySFu+RHasVyReCxMlLC31W4aji5O4I4E+67X2ZVQHfkRa1z55U uYBn+1dGKThiBckltL2AtjWCvU8o5CYtoGF4PVacYT7UX4bwevCfOmDPdXJvOyJJsGg9on5+AX51 ZzVJckd8mW1bQoa6vjHUpvBfrGGrxHCua5Xqlq/bzAcOyU+XHw2oCwPirDeXlDKec82cPgH4/sH0 DrSjxw9GWjTLlm5zahxckHqEM1JDX5a2hAZaa0Ia+nh1sOY7XzJ1tJ75OW7yrNXV9zqvsm7A0E+A t1A3/f8ApwPFN2QmvF5BWhbG1KmHkAqrvle1/YRg9/XnHvhp+EMz8w42sEBVZHlmF8mJ+ENnLdYD +G/7B1FRWnzZtyHZCxiaWvTnI3kU4Hztx2f0BQ6hZo42TB4nE0rFWFYyLt7bjzeFtY4vIWRXSBF3 ADn3RUpqgg8avSbIt1kYpk9GXq3fD0TUvXMz4fbd8MUmPMcuH2XagcZwNXJ4A975w/cffvvwDob0 92Q0Pl4LeaBoG9XDUjMdrC0/5NM0uvTNPoF3POcMhMuBPZLUmOEwHS1X1ps/fLFX1M6enjB28/v/ AIACA2BkNhRkrlPtrZrgW4R6Z/DLqQqV2q9IrdXPd7uXuD44Vun3xCIOEFSYJ6OYRbMaFf8AKf8A fwGL9jsHAT8CltD4UtyZqlqVwvUwxh0iwrQtQOHbDFjPhZ7irbBMmGGRwmXAh2MQr/Y8eMtHGd8x pQJ4AAv7+/bB1nMG5FGGLl5EMKTZYfU4yum1NIA2G7GIpUanw3HSm9zNBVZyt27PLKY1AWOF1heW NkW2/wCW6sLF2psY0bcUFnUS0513Q7WtrTgrvCTfLgitSlqhvjUJUF0Kr6CAqOZcIZpE0XeKwkN2 Vhd86zCAex80fMYnYTPhlDzE1y8cGctnXlV611CsyezNQHR0p6g5kqwrXyW9zFBayuyeNc/Rarrm m1tmfDA5uIFjeR/jxjkcpILf4jYtn15+9cfDMbvXIkZ0Y06gADVTACgBxwBh/wDrn/f8cwtqQabR wgg8j8HssXX681+fx07Fe1KTtBLMEKvPah6ZytN9tO+oBkDuGnBb1GVzTj2+TKfT8XCq0Kq+2+/E EOq1soTFvmqsmcq4JwhgAH0E/wA+39BsW2WxIp+zLCF1VbUmk0hkUkgfMZK/sO7bQi3GBih6vp98 vitgxghDVQNf2WqzFkm0Vf2zeLRCBKrfn6oX76DsGCxHyMyqhjU0TySTVavWAReX2RqV69h6gqvS LGtBbtBwrdbh1XMIMiO+af8AUtxtmxF2gss3a5JNnP3/AGBBAYr7IqdL1MT4afo8u52QLId3C7Cy O4zB5YOdtCnNRgHCv94W32biwfBgV++KrIs1mrtGnqzP7Fz/AGBBfufY9NEWDf3iRGQamN43QRDZ 87RYRxRgxw92UjEmmFKKNqV5CjtE+DrplUIYRLu+pBFSsdPPjIN3JI6XcIIy7bClfJCu7i+ZWDWM a1LLJEi1gXYn5DYYTQOJRomDvmY1vVZghDBqRHlS34u0GZG9zeGJ8+A3/f8ApwA8yl4qfqoozVeS bTxnm1sL+ntJDiQ9cnl4o5THCGYW9nDsC3BUvOVWL5RuYztdsmwfv+/8BwrqcOQ7GpevWhcdqlAn gQRhq9kp94lsiuepx8PKDhScSt4czh62cqXlsFOZfxezMxwJ+wPwDYH7kD91PbhHDV3cEANZz/ny mqri1kVXXshTuCxld3ixQ46H2fW3AOPMQYE9tVXCzBn5yRtkq524/wC58/h58AmHTqY63Js/qZGV 9z2SQytFJEyle+NqRnFplwPtsvfUsoYlEXchVnhQY3HKfScvzd09DHjnnqBr+jnjUOwp+n0XkIDg GZBrxZBi1LobPlRV5XtBPHp5hwMw7TT+6kDnhzjIyrxfbP8ArbYNgfj6D0mWBTvS0EusRll2p3gS ElbU2CsWQwWh2NaC80K8MhMDh/vg/nDan0thW9mbpgjEzgPznAffz/TrZNKi3d0xDtXTQn2QHFp9 J2E4WokkCxgCed5QGGwTLsQ08PiQ9qzT60nB0YYr85Z/Nu2B/gIDwHn2HIfJjk4AbBnuwRklDWRI rbhRCvJlcgWHSqLT18PM42tmXBkalK0OKzHknzzkyOEScAe/nz/AT/T0eWTb1CMjoEldXd9qePHa sDT0+efH9VccR7suMbLGd3M4THCuBJBqaBB/wZbX/bc/ddB+Y0HbBKU/PgadPmBVvS7Ep9br1fSN qV0hETYTA+U/dkxDWx/zrLT/AJz4MsxoaBn3bm2B/wDYP1AdbbIeKrq+0NLs/S+72QefDCkWj2pe VkRLIx0+qd8Sg6eYhmK3TzHzFX+RVUNmRimCys+E8Bv/AD4+e2Dpho9kGLBhodN1ynyVuVUtkXHZ BJw3YxSMqImyuPsggwhsnIFt4n8tOMhNH9uTA97dgewIOGAAAwH8a6smFXtDASqqVYSSNaPjO7wH iOHw5QFIaJRggyOC3DhzF8xYz44NrXthQZtmx/d+en+ffv4DqEYkiZLh0qRrJz78vafHaBgb93n9 dNkXMqsJymneR4z42628hXORNija1V1+LIr7RZjuDA2W5XN2fqC8luwl9wsJwr292jabGtBPq/vx W5hDrdghzkNPfJzJWVGtFoLKzR3Nt8X35BfgH9/UhyOyGWgDVRREGuFqzG1TaSVSp69DsYCJlAQ/ JOH2Qnp497sayl/GnXyshgvtmT3t2d0f2P8AnwABBPzy3VchyHp/PLOlPjbkoAlGziTRL37ESBQz HGzPdSGhkA848vqWzo3A8Rmx/wClfPtgQefdKpwp4HTbpnGf8ZtG0PWNOWw8JNPh+eK9jKdjckX+ SOFV2QYIB+5Y89+rMLQxjNVZv+gefILB+/n1LExjZrhEhdpY0h8GTsVGZr/oxrGg47zZtfHRSSqW 7O9B7X8ZeL7ear/U/wDnqwDIQbKgzMkXcirZFeiyf4v+WrxDAEW2WgVDkOYWpDmri+YR1K8KH5h5 Rosz8XY9q7dQX79/38+NR7oj1AQMGcow7KrdZFbie7Q0ww1XaAteTbGW1+t1u+JlPsjBMOVLX0+c YGeK84kpLscAP+D8ggD/AESKdmNlQTIYuVcBJ200niQlHA2E0XE4OdXidRjkhj1u+HCk2R8X0M5U pDuoYZyf3mjTqT4M+AxxAc+38+scyt6jXOYYZVP1dksaStxGjOs4OkBxcX7QHsB8UDCeYQx8OCeX 31Hrf752y3wI7ffgADgJ8AwIJ90kkQiDMXj2k09SZ7u8J/prngkUCRMt/vRIJq20ydcl6oaaeaeL RQRJLqZNSY1hG1DGzxQvIiyb0qRvngwUtLHt9xG5dBnLbQHM2Bqust31LpNkWrnP4mwEmHZAh8A2 gkAabZB9JoSFT4cwPWwbbaF0wnCzN0q9ZeXirjiT/X3/AOmlkMA9Xw+k6Rt/Jq6uLehskut945DT 9XptxvkV8sD5lkTWWt8WM42kOK7YMF85Jgzbsb9n5BP+f6GwH8Peayw7Qo0bW+JSsdPC9qwA21YC QHAFFP4odf8A2fZ6fT+5dgXxY0wpWSGriyZz32M/v4AB1iPT4cNp/wBJeoIzXqkqaRtStkcgD0nb DYY1Ld2LuF1vYH5IuzTehr8M4B55XKfzmr1es3o4ECG/PsGwb+g1FhkWWDYTVxy7aTlpoAdPtyTY 6YZwvozLuS39MtRyGHc3Di3pm3vptSsr6QxoZosYpdueKZFwrBllhaSN8+6wrdmPk302mRosTQ9D 1IaLaWA1LYbbdkanEdqs4ewp9ocsKRZnG7UD7xD4HBUhz4qhyayrUPZgzZKTNmz78gW6A8AA6ajR X8xoeFuuWlVXE+y6HSbusi1E+p0iq+42nur3xwYGRkT2RPWyDgDbU9DgzEYYhi+cvDt2u38/9fP9 U/MR2RtzDttJC3JAwK9kpEcw7J5bhsViV1eGPren0Nkhh2AxVfMICNMJjGl8/ZDZsG/e58+Aw+vm 0PsmruCqBSGS0q3SD1SrxAESX2wyftC7tVVNGN4fDDg4TfB8wso5DrMYUq9mWeE7IcAbB+h/z+vb UNIYlSHy0gRP5JIYtNGznkVnVgc4C1trvpCSMSSxuqC+BUa90acDnbkVHs+ccaF2CRbzBalMrGK7 3Abr1cG1xMr4lDj8lKPn3z8bdk3FPmfMOT6P7xGCWPKP1+knNgAc+Afv69KI+ZFkGGjh9bpNIraS 20dkmKfLTLkqWZYwGGvhw9kGENwIGJx7lqriMZnwpwbm1XY44gD6Dz4Bv4CxTwQKaLdRFAxSlhVd qhsGZTdhWAHqtXXkMo5RCljQ09cshEuCyDI58ONxA8jp4x5+8jAZs2bB+Ax8BsB+Hjvj5d0O5kOt KTGnhV5DbD1ENTKnxENWixJT4HH2p3ImMncCnoNluGniq+DM1Xoby81UkhOcH0G3QHPgADHpZ/kj kXuSTaxOUqE7lg/xyR3jQPdd3wFo5MjZnWVZDczPnJxWINFRXz7W54/NfmBr+QHrSYHlHluyEMpX rsWXyR5XEh+Glv5NwmJ8yYYh88eHxwPfMJ1BV5Tc6PCJJs4fAP2C/i/AD/XHbCdcjkt0/Q7kSpPO DIg1haA40jXpmK0CXxomL4cwHcHyG4B/n8tVVsmjVeVRhhwIb/YD/wB+wXz4APy70S1xfh83ZDSG m2H29+GBMMMw9KYU1X3AOthw8wwnmEbcFI4uIzy0bm8nHZJ5z/X78/H9/PyRgUjlA9nSmh2STy5n Rngg+KpBhcJLlQ3Mltw/nE9khsAexp6+BR5iysboMGfsZz3YAD9yD9VJFFNqBqJf6ErGNPPqbLQF 8v8A6U8i44/cTfFGNNIujm0kcaCGVEjdUGFxiWKbE+bG5DGwPGIUjnKwHo+n/SfbTZEocoHG5z4t kmEOSzh7vW5Rp36uf6w5JMZXDnAG8KzqtbJjBdX7Z7OxvwCCf+gnz/TORx+k+grgSYrk7f4IYa/t i/amorTPSO1i+0toJ/MFtD4eHT4YN8T3wHMJrNoIjyjWok/+P1FjgfwPr9FXyRQdBXYBPBiT/qcT IenivSGSHV4jIBilpR4O4Q/uBgOvw2rmFaTTCKTF93xiObdquBn/AO/nwHtd6qGAXYNZqoupaxjO 1aNVkbhnWov2bcFyHizmUZHCYHp+4HwOwIbVpaXwPk3kqLWXnvZaITj5/YNgP9outUkjlmRp0kSR I3YRdu3eVLEbbavnI02dLwuPOdI2DA7SZphnFINxO+SGJch2ZVmW+PB/xWKu2YDq88+adTL4qjal pskt0ijvlzSIkOxjynXNjIc9bre1LTMBx8OdZdgbHMJ4FFcYjg+Em9/QQHPj6Dbr8AganqOq9Oep QbSyakktYCuSJWEO09p8e2A/A7NiuVqD1unzETjdgVv2lcHyuXzkxQXtmyYfqf8AP7B0/SOZo5TQ mpRWZ5moayNTWc31lW+muvXFemgU1T9PIwDhgyPTIt4TJsDF8Ic3RmjB6Rt6COqOwYvwDn5/DDqu FuB6fqpLduOgeNmQ7v8Azie4MExoF7WeMMCf8xPhht4eMU9SrkMTWd093jZDewYe337gAC1ZXyoM MXZCxXCQY1yj22N/cKPgc9UI8GgdezTyyZqYprCbwWwRgMqxBBsXbcCubx5cyaUOWFVV+uGnhOt/ n9sdzrgcMWQ9V66e2fjcPTGHmVvPmNTavn+Sc5pu0NzwN72jn/oJ/gPn6dA7MFtsPODJpg2yC3YK JjmM4gkQ7QtCp3KKyXBvFJGE8wQquqzyeeazCyTKFMSZzZDZz3AH/fwPRUDbCESyFWwc2yP8A8Yr dTkKsNoiTGgC2WMBMMIf4bIoJ7BM4iQstH40TF7pvm9mznAT/AUE/h0+GSRdDlUdtO644EklylqV 8h74sIewhxVX2ELcjBC1IdVp9PhyEz5/LQe2VAUocYs/dvAvwB+P9RW2kGIsyOiRoe1Fu8i8tNj5 FDDmjyD5ORUdobWkhhfIg5O2GGOEdLlfN94xoWTfBeY0r6rKC3jTI7h1JqzbUUq9kMiHU7vUFS1K kPjkh2BW9bzS7g4YLc4FqQ+CtlCYvc1nhJsIjnz/AIDf+fdU6oeOHcih5DulqbeBvi07mK9r1flh wMotd+zp8yGt3wHwHuH++E/F5V0Pk2yWi7gwADYAAA+f9uys3Su8oxc10njzJamoKYSYVdPp+pxM zFN+LTdVkK35g4WQyMBi4tPA/TxVb4M+0LPBwiSko58B4DwGHTOjhl93ZK9FpjIOfCkwJLT7OTzI nhsqJY138PZJgcO+Mi/DBnk5SnB9PTNV74875shvn+AD/vwC4zKFCS4F5CGZo02kaQVmyozGOPOx YknXkcFqNAFjJeVGdscVCM2b7fG2ka0t4d2R4skcCuWon2Q0QKvrHKV31tuwpMq5gYbCA4Vk4OVS 6WhdSzCC24VvMT1tgD2NAr+f/Uz4rrOAMIk/ftg/fz/IF6rlBbQ8fKApLJcGa4Ru5FPslbiTCI0F nKUhkE+Ghhw8NxfDgIehvG2ExbQ875zbYwGwYgUHz6Cwlut7AsfT3WLHlU+S7cNVx17V6Tk0fbAa LcbDFsZ9cO6ifdlb8gWwd0/avJi8GdFBm0nwD8AfuA+A6CXSs49fHO32SyDTGVW6AkGKfs5orHng u2EPeCEP4bh8weYrm+F488ODMsq5RY2M5vZw+AAH/oL8f6VDCpd8QibaZ9iEZUVFEqzxH8gxySVZ BA7bce9cz750jdj5qvAybKVvnmSR/NqFtsrFadzEMzcmnuVUr5UrJFbyUSQ1LZivVsoCLHlf+cDh 0+HCITAdtMDaDm4DKvKclR7R2Tz/AOvaI/j1SfMIaf6bsw9VQuZjMulDQL5kWFVYdsDgZUSxgMOw A8OHajJMX2S1J5DTTBWxjMrq6MMtTA2cxAfl1+QQH2C10NkpdjsCww1l3lJJW/D48YqUwrsO142a +PjgQmLYeyON8D4lwIGHRkYpwYYjhEkIj93dg/r7DryStyh81ceDzlZedGW3yvX9tkNUNo/2m5Ab I42HhvhhwITK5nuM9qZEZZfPs3CcP3//AKH8OrgLTtOI80/iXviljzkYNthNxY8kkxYpIt+DaDiw nrTxwsUSRJM8GWWycNstkMOPcAOTxY69adJn/Fc08adE+wU9DfdcNG+k/bjQ7NNcqNe6Nz6YDZi4 dZHfFUDDqrjG0iCHrYVcDZctgj7lnzhU7NzvV6cPX6MnKzqm1hHQtfFRifOY6XQp4gDBzZyt6LTb lBOiyTOdMP8AqL1bKVXWSpOVbN/oK+hzX2pQLHFL0SWEmqrJT1BFeDChZ1nk0muLsU18KIWOKbOl bFbFLlsi6BoGhfHAvhseqxRFwvFFF5eaAF+3pq6eDFi6oNW9tVhquW6kojuFp5lV8BzdOFaQ5Ncq ZM/DIPcSq4YhDPuISprRug3CxZ3xCt8XveOKPvwEDhhifA9cdRlLEzUvT3Uu8XHQNS9/qy1AZ1YM EpbocXXrkmh19PcLhQ7UrceXuLb8YLJue6I2+JIQ3hv79sG/nwHTsh6g6ztpLs6tG3OW6rQ2q2lP UQyZO0uDRTensWhw8GT4dbp8wgHsatGDg4jk2BQmTwNu3+dRcBAb/j0kyhBwV3BVdwOntbGhs5bw sh2VE93MRD1OCnvug4Q0+yENwuAxBgL/ABUwMsy+MVl5B0m7Vd2DAHwFRAD/AOXTePTJIiiOY0jP FptQc9Q+1Dpo2EisDLL7VIzlOGZC+SSK7rxtIXR5cokl1ccku2c88SqQyQRmsWsKq+RZ6gUukz5S s74Ut+fzCa+SbDT2RbHsMOz3KwnKm+YXAhvl2Ib4wTJwEeBVbIZidoPhMmcNhN88/UIA/UT8/dWD stDELldB81ZiYWSMT5VfU/CAu+o6HE1AqTOrqEB8hWPinTIGNPNtYPbsIwZactFGKWoEC0qbYAQD BetzH/lQFXqvIWJftmaj3HNdo1bvcxjYLXJJ2Nsh06W2OStVa/hqErdbiVuRZUiCwIcGYsrNYFRt mA0rVEknD4A+fxfj9u9Kxo1E3IuVtTIuUNoqHbVPrde6Rxteo6nMrm7q9Q1dbTw8OHqEDzLA/o98 nWp+6I3B/Ngz+wH0DYMdgZNxHp5RPCiajUnEM/e2QQGFkobMjEDbmyfCm9Nr4qP05XSSJ89NCrkn tj9IVuLJzuxrlcsWKZAp6grptFHgPX0ebjedY1KHzbI+WPMODA779aAnGKtr5gOHpPh/w+IjwJxw WbMaNzZv87U/f9g/fzyn7czKHaKYv2AeSbClOyS2K+oSYObLUtoCvVzEW/yoH1IfMX98UrAgTvs3 KFkYc7ohNgwfkHE/jz7rsOHEOpRZKh21PoHJlTJKQR0orce7odjFWFDsat94T6Tsit3BPhVy2jx7 UZZkZoKExlVuwS7PvwAAf59j0q4YdLsZwGsbHp7dgK5T9b1lV+dYdgS7gAi6n36YvJ+8akK3hp+A SAPbbUMMxPi4smDNhOcP3AQGIABj0oJ9RYVZiiuyWkX8102meCfM1HJIhfLba9oLXNgmO2UVXhMk iK6szSiOO+HSWKWCPccxs6MquNrMMS2QBG7QzHStCg0Dcl2SZjQkmyysNAtDYtq1SiXyVD2dPqtw pPw9xe6kDcCe18GJnAgTfMd/PgN/Ab+NugcRYxAxQVgtSk7LjgELEKfmRxJhXaF5olB2BbDodqQ4 bAHsZ8cO3NbjBlYFBgtHSd8OH8bd/fz790bKCWwVphMY2Oh0hIsZ8G2a8NUOv75muRQSrvsPtWtL d2IbIvzEdD+ecT+5nPGYn/EO7cH/AH/YN/2BgnGDNd9Pb5LpamVt3zbmuNIr92yU+JDuS0FOrwAf mBgxT9qJzgHncfstUTyaNaDQsowNJ7JgwB8/wE/59+eHwlWJBjhOYS13neNMRQqqPFnz56GONWka yjZJkMGyxww4PA92XB/R454EI+ZV6RS9YZR6yJJltAhC2neGH0/lmRoV4j5FTyEOq0Ot3AxYC3O7 H2ZxsnZivaFG2/wnezh8AwbA+/fgDUT48ygrwW7uKIdtW00OBtejzA9XtYe2nITFTQ7BZEP+TfGC JBQ7gAgw6yMfMLLGWoEtE28AAGAABj7nz4pDzNK8Wq0+AApi/qZTXarl4OyOFfxIdjgVPX0mp7BZ Biq5kMwQD07Ar8CDcO5jQ0MzNgb2TDYEEAgn9/YD6+XxdoLifZCQ4kltVPWcpTKefBqeJMHkOJFl zE+yK3fEOYYYA5w9885MGFN0WSZw4Eq5HQQGL8vr5/f8c7ZzLK5TF2TBnWLZkOQDEo+T1hGsjkUc sAOLsVtRoYUDoqKgjjVHiltxiVUmNzjmbot4xNBuadmoy66Dd74uzKUg9o2Rpo1XNtOID4BeJf8A D4hpGoK2lsgHQ9Zlwe9fQ/r/APODLyxfEbfPNo78fPgEHwGB9GyDjY0avLIvh8o0bpXV0NSXrgM1 6rloiGr4Hk2iK/DQ7Hp9kXE9bB8fPPAd5KfefNpPOV9+AgT+PgMOOG0ZlS13Dt+1Q6iBiob+JHzF sPEZLGKcoKPg9kuBCp+7ENgMHFJfbTaftiuLJjDlXBO6gDj+wb+/P3T+c5ifF0v15V/bG0YZmsac bLYW63IXHW9oIf8ADketRPY0O7Fsun8kriliAEEYrNmfBbMMqs2k4f0Cgn9/AAOij242iiwmk3pI wzZblSCSKR5KoVmYlGN/vI1RYytKLaRBhwmZqkNBUB5vCjZ48jgfKlBi49lg63qrKMbbb4EavL4F VR3et+GiYtjQ8N4fIaeyL7KDrTto1IdZ1mUGdzAeyJO/4AD4A/iAAH+xXkL6ZIZDOnhDq6wl1VW3 cgSr22fPAYhS0JlgB63uDRnQ4cetg6lHUtBrZZGWhcoz+9vG/wDs/H0EB0YOCO4OwMbPq5wZE+yl sa73g1XYvu6eLQ7ZfSj5X9b2R2fD3AP+DP8AnvBhZKNCuTJo7vaIQHsB+ocH4/1I1PDXP4SIbRaC E2VW2LZJrHvc1OVESumiqIwFPgGGW+KHe4Z9asZsnzjnGGa46ceSn6++OGK/gAwfmD1MYMiPPLO0 2cjGOKOHHVq702zGNxqkmk3HUfdyOMLYQp3YooDt5wx7zzygxiAWZLYp2+V+Df6rlfLduVGGjjSm VailktGIRsH2Eqh3eGeV6RxV4fzA4dwMMg/Y7LH2W8B2ZmVyiMzb2bCYH3/YD4B+xx6cEy1Cjuh/ 4SvT6kyWgHZPj3ldi+j4WNV+wi+Ph5i24QzBDEGhsDbBDowxDFsyyD2R2/YNgP8AgOhtTrtbaLEa jTcyWQqlLr03xLQSdnYVsWUpyLaCGQmVW+GHBw4ejT6PPI5hGRrkV2ZZeLRCf7+/YEFg64xZVkaF fJd0NkN0y0WpGlr4epaHYYb4hNhSkbgIB2QPDDmLBZMIDh85bWdr7mebNVccQT+P37pZw74wqM4+ nzRZLkiM2YXcXDt/jYr3U9N4rlibsapOUdImeRBIRcb4YEvC1i5EyoNXp5eGzoI2HUZAyr5OVmgS WdYKTyyQNyQ/+o3xWhbITfmWQyw0/AH4FHZGas2j7OCCbJ+n0Hz/ALnk1bsRoqNbgPmdUqJWieFE yKrWx8RblJve4pMT3AxM09sjeQZHhDYJ7xVayzPmO5gwn3g+A8B9g60mChB3tAPXMWt5Om98PVdE aIedYBaYeKFmiVMIMj4+zTK0vhzkBPbZzITJi0N6WfCBPZ+58g4bAA6nrEugWZsGvMqoNPdXaezK 3UrC0WrXzxYXKQJa5KbcGEPDcFtkZCDhB7XW0c4yTaBb0TRzbtsfAX7+vt/fowYMSRmkFCJNncxj IBWJWzFydpwWvU55XDkYFBGAZU+pdoJ3kbFNtMfWmajUEeR3Y678k71x5UrQQW3yZbUtjuwaenoa TEthwviQ2ODkUa9+Q19bmLbJVcMcyQZ9gKX0blCGzDKruwIEBn/AYYIJ/wBySHSenNcsV2sEFqWJ Idl6eyTDdHbG+F4OUAtkqua3X4ZhkmbOnh/n88gshMYh7nUDw7JPn/v3gP0c1lunf23LC1SngLa+ z743Wr9RQ2n1OyFcC7gYq2QquGHMLcxgDqvH1FVWxm6CxjNve98+APz8A4CfwPocfU+Yrh1Vpn6e yTJAtpA7T0PYVPy8a5PCZUV8TzEPCGZmcw4GQ7VTLMWShSoFk5+UQdRH+Anz/IMOmjcjXcCvHIEY xo6ETrHGUxjEF92ORBbcX4GPQoyyPS2NtEDs026jSc5SO+CbOdDFcXuj3dvNutREyGLsx2cr4tpS zu1cntPMQ9N7ZuiakIbRDr8xW/Z+yIdfvnPGCf3IZhnF2as3h27XWofwt0AAQPvwCt+nNksDSrbk OAx3NJG5VAjROpBwloEuHQ/eOILDD1sPagdkuAeyUDZdwAUd8GDCiHxn/RMG/bD9gw3/AK46vT6b SAV/HqVuCiqTiXA7MNfWEh1eJmK7RU8VXmU8+IQeyFu7F9ktTj885/QaujewQIbR/wAu8+39+QUG XdO39l5Cqpz9K6SZgVvaFrmLsuan7jL2g0MIGIt4mENlWg5gcyBD9IPs5bWXjniMtfdklHPcBPr5 9+xAAKliSVFSR0KDyEOd2EDWe3G42kQVZ7y32U1whoyJIUQuKJLyFNuMY5uBg2dWLHb/AKm66jrg ZB6lYB4C+W02w3xwNiU/+JZHti1HJXsIpbVqML5T74tzDA5kqvtdAVWV5ZqvQ0ZZw3tJB7AfPn37 n3TOV3hPDJxLUEhquktqKDNPCRX7sNR2Ha7apECLQiH8Qm8MjJR4euHxPsyuQ6yzPiGsjLUdtPFo vH6AP9/Hw8oYrOql8O+Rc6nBuU1IEQheWcj1OyNAGnLaKGHCZDTnyG+EG9HQx9aPCG8rP8RlZrOD skm3jYH7gJ/+oAkfDbKpzHZSXHyQBrncncfNJUfLmWNKYZT4HT7sD6teN2oAhnAI+y4LIMrMpVyy jI9XO1oo4AAAP7/+/wAJcqioPYiqT+axAP68Hjni+elIFCu7i0XHI37bPHHzdV/2+enwvhw9QVWN /hy+PYWVnNlxq2TnD2xwVwRapQKenmafcENwshgMA55BtR/vNXq9ZjNkScDngF9BP/Qajre0C7Qb fhWXKAEsZ4eN3AQ69YC0woAXijkHT/sYeHyBkgz6/fAQcZ9oRsN8N/8ATDEAf2AA8dOanXaYUMV8 pE7ISdSLtZDDT4Fwsj5ttSlMDF4/s6fQ+ntbIMk4CwPlcviNjqLFvJM5dnNjh8/UR8+AwPn+kEuO ifFHtQEC7Sluy1tt4O7VK4d4KRA1Pciu+L6f8y1IbIOsgGfTwKoH3MWLszYzfe1Hvw+ggAHAQCC/ RxWTASB2xaNHTDOPwrhsmq+bFGuBZvi1X2ESbema8WxzxrC+LW7sfI4Hzd9EiWUsBIKOytXOd8OB qKq6Yr3nXgd389tbRt6GyB9ncPhtR6wJ+zLLy+K4z25sk7AAAYsGPgD7CqcolLiuqytUum/vwBmV K2VfQ9SoHD4tX2FYwswwOHL3xkcCHgbBUge5/Q3n+idj5B+uwdQLpbDgx6hENjyiRsMZZAneBkGB 5lP7DWVci1tfW+Np9kBuSHLar7s6tvNmY7mMBu2ynH4AvoPPt/A9ZIT1dj3gUUPDOW/JYXlPsKr0 fi/c0ohuLAHhzA5gwQh2MpD+KB1l55QzDPCb5sHtsG/9DGGeOEzLsu6afUlPfjll2ZUl1/ixHz28 dNm21mmWF96p3hjOOG4YggLe5sbzHHdX5qyE/pvKWJYKmt1KeatgXA4SWvnocjjcXTnp7aU1wr9D Q7gsjeCBiCPr88qmCbMUKYoxw2EduAn9/AAN/AAHZHFjuNjSmVZ1gctAqUQfZC3YAmnxcpsiyoY+ HW+GnuZVfJGo9R6kq2R3ftGr/BhEl2w8AggN/PgD6ZtmRXbQYDz4thSVtjSVKInuCTILGFcXXu67 fChw5sPmBg42p++cZ++POxhAlo8B2DBBx/f7UOPyEPR2eVzOCBQJkOpCdTGkVVcF6IetCWLKQ2AM tw63+Gvvhyyx7bPhs3KFcmsgwgT6CAP/AL/hh0yaCdtp4dLCsM8zQkqtSfZvMkv2btx2MTWC8kHp UcscSMjO5miQvKUbDKihUEd9eGo2eSeDfR5orr+9L4YLCzTIcbWKa1EkhorFUz2FPPRbCV9QMMgZ 8wYsghDeG2wHuctrDNQ7S8oyPV3gwADHYD76AAdJ9wU47OQMZp6jQiHcGTwjblu+N4cpUSLSK38O JyRkMJ7JXPMUOAno1Z4i3nY0k3SZwAgn0Hf/AL8g1XT6zF1nmKvcGGbT4thjV6v2TOpct/8Aea0+ lFtfZTCfDW2UgYqs8Q+dMswYhvjyMePuwNBAYgAHgen9Iug2kMfctNGoBjKzgjbX+NV2BbDI5Jol yV7IIJ8NbmUnDHrc5Sq+fOh1AzCijOzHAmN2I/AefbBv4DoYjqYmldVtJnV9O8BzkSAxxROA1LgZ xEhBo0VqjVk3wdVhKvA/OQdfFlCObF+D+KsfnrzA1h3rq3arkzpj2KVqfNxVkDkYV7pFU6Oi1eCj TvTKPer1FVKXYMorXlhE55mcVc0o3jFLwZ03JKTBw3Ex6IEfOvaFV16hkuU5ZogjateZDm4znnMr ahr6ryp6wr/0mxQaONWl5IvJKZ7BHejYhwkznSpk+KHKZhfcl0QICyYcDJzrUo0yKiDTf2lSIijO aXOlVR3ZFjkaN2xNnya6Xvany2r0ztwWdXQKx4JICxKoBrgAAUTx0j2FfXqtrunrfUgQyJYzZkao M+A1evJzPSZTCFM+un3ZfKAiUPNhkGGaZmOBpbYe58qwonprnOyqvWoq3XuX6lr13s0w6eq11Rf8 UzUJp/twGIkI6gw6jUKRJRE2uajOOmQsVdUB4OwuubVKUmhyZ3Ei4TsT8YeFEqrtFgC4L2sM0PLm 5M/Os65esdxHI4dg6pCFcMQwFvwGuwP0DXQxACRaAF6qzXFn8n9/vrzyvhnKaX6t0v2TSPpGKViX F/wvgF82E5zgohyLn23VCzuKxcILNyXmEyCMhCMAFRXFhE7IF5YxSjgB/rWcBcj5WdJt/d2k+kj9 64WvgqRg7A0NLUcPChUUVmKcpg9T3lB5h4euGRheCslCZ+PCsMjnKeALLkOo+Hj6cnLVMv1KuZnW daoif/UylnB9LqQ632uLg4ZfDDk8EEcnrY6I39jSsyqzRzaXbYqC0eWeWBItcqGWNXQvwOqfZyoh tWkt2a8a9TV0kng4rOnYqYzPB5ieZbxgUkX9amVyZuYxLYf1lAogp6FIMahJ2ZOGw8yYvy/RkenL wGq0gt9v/wDEAtWgsy4LlrGs/Tp5q5rnAaWsApWcUy9+hyW3dasAqPB+jALnN9fO5z1tVdkI4mLG UJ4oAOFwctdCwQmXnWdGpO2OTxHKw58MuGLD/MtnE+RZo9YSAPAA4XwK+B1fgOjZmQm/8WDLeXFu uxh0Xy78tehnS8M1dsg8uvsQs5IzUdmjC656UidjZQ9eAlnUflqMQZlMoUQbTISfJGQMI9YdMF/t hmo6jes8MtQzuoFmLKbziI5QIiQUkSxXOlZlfpuQPaI/qUa7L5HrzjJZAEZuSn5xHPzBkQLCTsfQ rejOs6W7u0+pyZmqd6yYmrq6smvA/wCnWuNVWNMVC3d4gC+U8158n/qevxBQhObQFm5/pnHIosCe QJkJZhEvVCXvQ81pZNe1SBtuPGjZWXND2yRVfVn5TY6rxANObsZxEcwZc5cITAWcwUitFlut21Mo n6jXwmTTrZRX1wMTxUlkCCBBUFqo7MFSD8kwR9cNWgl2qYtBDE4sAiFWqXNnCiOK1X2Wm51nTfEU jj3Lhi33LY5o+RdC6PPz1U/8h/2//Drj08V2GubT/dToyyiAj0q4TT1AHJyl6BIJCzo1yKLu9nvQ RWPQKkR5vqA+mcTUFPMzM7D1jVWfh65/qLNYhdaQyTsQzl1ppfTrcEAlsoZd1cA3yFw6Fi56YDLG CVTJhT0gwo7a874BAVYXr9c+AcIG48/OUFCPO9MkTkHxjDnWdU5P0+q5P8x/8gf+Olp7l/2/8J16 drS7AxbLKFBc0ip+iCna+myNmrJObCjeg5WitWTgif8AMuys6cn+tdWHe4XZ5FoXqXMa9yHHPEsG CpjPBCs2NTfPi41T/wAB/SjrNX55whaLw42wWz1phY2AnVKv62jItLJOREWv/QTijlDJn5dcruTn Sg+fkF8YGYbD7nsjAXGy86zpEABkjsX6qHn8i6P+o/PVt7JP3GwP7Bqwf0fkdVcql6MO/qxRhnp9 FaAIFNaVLBXcK1IMAcoqtFyUbW1OXJ6wxs0aYS8hctCvHYmvsSEfmG6/FRoIbBKVlT0j8PTm2cpU PM1FBKJsC5nGyHM1n1/X1lzvTjZDsu+kmyWRDMOLj6yRVSOAGeZlzmlZiHQ8zNP4m0sjKlZyKXWf 8AVgMzrOtOpASKB1AVtpUyXhsHYZJYo4tQyW6ahYNDpOmJMmpsk+t8m/ON+fz89UytHLJrr7bGny OyMefWkbIR5ceD6SOAQ5kyy9QuV7ZEnLaVPIXWHD1hHpRAYjfRiQxyJIUdFFsGUc9MaJnR7o6m9Y lx3jSw+zpfqUa2f7XXrlrV7c6rVYIBxMqanpSwsTCD6XQ162VwgciK6bkcSz+keeixiKyZdwcePB jsXp9UDOs6VIB9XEa5F0fkfxeD8dPj50Oqvmtpx+nUPiw/DLZxbyLNEdJj/hxMbrq10o3ERebEsZ IYtOtbW4IrZrqB6ZUJijxSxChcsjkGZkcjPjlhRYfYrCNalPNiZSRYHpywxixlluZwg09HbGdX8q ihutYnXz87xi2ka1rAyq/IG+HMnpacmY1aZsj/mscMaT5i2fKwO/Tlmg2oQFXXFezBqfgBYh2StQ 8r151nStP36PU59/r/f3ebvzfmhf5rpuoJjnUxkxk3eHb4269tfk9b82dbbDYo/OZ9QluNExqqSq vQwzj2XV86SePRR+ql5HuTNh20y47kzwSxtrh+rMdY7EGLhWsiMYwprKEqHqWrGaSaaVtRGqiw65 sLPlxhKyW01egUXRxKZXzPFFamVRjzGZWgGk9UEZoFIr9cToNfVCjrGUDU0ivirKs7OUjsBLNzs6 zqRABYgAAO7xx8p0pv8AinPycbPyeekJOqZUOimCnSvpmy1OvILq9jf1gZGcXmvgErqAnAjwuKPy FTPUoNhLeMr1Lw1bFQ3CKaJZlnc8MwlkwvQFZUKvjNJGl2ZNanNmL3Doh1328wH2nPVy5wMV0ak7 ISqdX1cj6lXJzBwOOGOZXqIlpmBOwR80LBkpDwnbm15bJnWdaGJyXk8SykfosYsiPwTQs/NC+lx+ 50+xkgDJ9jBdzEMvghbOIIIFmvJ6M12vjmm3UPXUSmrmulJw1FjoHptiSIbx8Gean0eASTK0eDzo QCLKTGNi9fqMjbAOJuaBIuYZsaxhXP8AVHM52Ho/cKp14dqHuNe9JA9NOk9Jz/Zti2UUmxCVhW61 W1odzdUbsQfyUsfmA8onOuBe9RqC1Iq8kvAaAXliRTTEih07BXzrOssYB1IcgF3giLuR3MVyxLN5 Yrk2JJNWaqz04E/T6Hk8GQD9BtnID8BqF15oX46SOqK0PSQS7/PjK3qZS9FIaXdPN8V8IVkiNBiD n6QeupTm4Sy8yWRcJyqXiAs0yypmcz4LDe5MLG7tww62To5iFEUssEa+0Q6V9YCQ7Na5c03UDbq3 kyo+UokFgeNkaIy1zTsrIWDioVHEMkhLnm6+mDT+BkL66wPEFvLF5U7IEmxmdZ1usnT6ZiSWbPJi bZqaKrJ5NWas8Wfz1kcAzoSBZu/37fP56YFZ+gZcFHWtcjGK2tlY3ILRzSPV2F1DhGWn7I0zVhbL bXZT04tEo3krpUk0T1Wd6BJwZOKI8YcDNTikiLiSzFZYzW0riTR9vjWZgz2I5Is2lo4VkMkHlGW1 8ZZRpLAmFlLe5DKBHmF8LDieoYLkRJqH6yeXnFiaWRIESsifnWdZk92m/USgfoApQH4A/HU1juul 1GLMtyMTixFm15NEWf2eeoW4dZ1zhE+6a+F+tUHgytE6fXw9IGANnLHCSAsNqeMDyCAaaP8AUKUi I2yyecWV1jLAiPkCRuQIjiBRNzGNd1aJUIl3UlpjlHzLUuErW0y1Nftjz1JmL5GW4t5DXkCjkxZo CxSWRTkLRGSkqhORG9C/lGsuaEi5UM7FG5kofIzrOsWpJTVRRoSkazR4opKotizSilFnk0Oeugiq wkyUNUMlZAGrVLq78/PVoNEv/Dg08anKU7kv3pYxx30OTMB9OUuwa3zMrNhxcyIU9GcQKttdtjWb m4SjEvIjSDrGTxEA8gOpgfSJUl1eBC86zrOu3HLKFUCSSuPvb8p++uPJHGXclEJLMSSqkk35Jr9D /p1//9k= "/></pattern><clipPath id="clipPath3834"><rect x="4" y="941.4" width="118" height="31.5" rx="4" ry="4" fill="#155293" opacity=".6457"/></clipPath><filter id="filter4584" x="-.01394" y="-.3486" width="1.028" height="1.697" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.70882694"/></filter><filter id="filter5616" color-interpolation-filters="sRGB"><feBlend blend="normal" in="SourceGraphic" in2="BackgroundImage" mode="lighten"/></filter><linearGradient id="linearGradient4582" x1="12.5" x2="12.5" y1="987.4" y2="937.4" gradientTransform="translate(0 5.818)" gradientUnits="userSpaceOnUse"><stop stop-color="#1a5187" offset="0"/><stop stop-color="#679ee0" offset="1"/></linearGradient><linearGradient id="linearGradient4584" x1="79" x2="79" y1="924.4" y2="1052" gradientTransform="translate(0 5.818)" gradientUnits="userSpaceOnUse"><stop stop-color="#aec7e7" stop-opacity="0" offset="0"/><stop stop-color="#abc5e6" stop-opacity=".498" offset=".04545"/><stop stop-color="#d6e3f3" offset=".134"/><stop stop-color="#80a7d9" offset=".9292"/><stop stop-color="#b5cce9" offset="1"/></linearGradient><linearGradient id="linearGradient4614" x1="3" x2="3" y1="968.3" y2="953" gradientTransform="translate(0 5.818)" gradientUnits="userSpaceOnUse"><stop stop-color="#34608f" offset="0"/><stop stop-color="#34608f" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient4622" x1="124" x2="124" y1="966.5" y2="935.3" gradientTransform="matrix(1.875 0 0 1 -112 5.818)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-color="#34608f" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient4630" x1="55" x2="55" y1="1036" y2="1032" gradientUnits="userSpaceOnUse"><stop stop-color="#003d7b" offset="0"/><stop stop-color="#003d7b" stop-opacity="0" offset="1"/></linearGradient><filter id="filter4720" x="-.04155" y="-1.257" width="1.083" height="3.514"><feGaussianBlur stdDeviation="2.0949721"/></filter><filter id="filter4724" x="-.01383" y="-.435" width="1.028" height="1.87"><feGaussianBlur stdDeviation="0.70324038"/></filter><radialGradient id="radialGradient4644" cx="39.7" cy="28.22" r="57.91" gradientTransform="matrix(2.914 -.1005 .02264 .6566 -76.32 9.458)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" stop-opacity=".6" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><linearGradient id="linearGradient4657" x1="7.474" x2="10" y1="945.4" y2="935.9" gradientTransform="matrix(1.895 0 0 1.895 -7.58 -831.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4651"/><linearGradient id="linearGradient4661" x1="7.742" x2="10" y1="944.4" y2="935.9" gradientTransform="matrix(-1 0 0 1 128 12.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4651"/><linearGradient id="linearGradient4722" x1="79.84" x2="79.84" y1="13.34" y2="27.85" gradientTransform="translate(0 930.2)" gradientUnits="userSpaceOnUse"><stop stop-color="#102134" offset="0"/><stop stop-color="#102134" stop-opacity="0" offset="1"/></linearGradient><filter id="filter4747" x="-.06459" y="-.1339" width="1.129" height="1.268"><feGaussianBlur stdDeviation="3.1247207"/></filter><filter id="filter3827" x="-.08473" y="-.1051" width="1.169" height="1.21"><feGaussianBlur stdDeviation="2.1734796"/></filter><filter id="filter3822"><feGaussianBlur stdDeviation="2.7153804"/></filter><filter id="filter4123"><feGaussianBlur stdDeviation="2.028"/></filter><linearGradient id="linearGradient4524-4" x1="47.24" x2="72" y1="22.15" y2="116.4" gradientTransform="matrix(.9417 0 0 .9415 3.516 3.146)" gradientUnits="userSpaceOnUse"><stop stop-color="#eeecec" offset="0"/><stop stop-color="#f4f4f4" offset=".4"/><stop stop-color="#f6f5f5" offset="1"/></linearGradient><filter id="filter6171-8" x="-.4787" y="-.5128" width="1.957" height="2.026" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="10.140743"/></filter><radialGradient id="radialGradient5988-0" cx="68.14" cy="89.42" r="47.5" fx="67.93" fy="72.69" gradientTransform="matrix(1.586 -.07936 .06485 1.295 -41.87 -14.43)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><clipPath id="clipPath6093-7"><path d="m17 8 0.7828 110h57.5c1.675 0 3.119 0.1806 4.9-1.6 8.798-8.798 21.48-23.38 28.74-30.71 2.441-2.463 2.801-4.471 2.801-6.724l-1.724-70.97z" fill="#fff"/></clipPath><linearGradient id="linearGradient3895-3" x1="82.16" x2="94.22" y1="90.38" y2="102.2" gradientTransform="matrix(1.334 0 0 1.364 -37.24 -43)" gradientUnits="userSpaceOnUse"><stop stop-color="#fcfcfc" offset="0"/><stop stop-color="#f8f8f8" offset=".5228"/><stop stop-color="#f0efef" offset=".7234"/><stop stop-color="#e3e1e1" offset=".8902"/><stop stop-color="#cecbcb" offset="1"/></linearGradient><filter id="filter3909-6" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.43040059"/></filter><clipPath id="clipPath3889-6"><path d="m112 82.5c0 4.465-2.797 6.41-5.28 8.094-5.109 3.465-14.94 3.325-20.72 3.406-0.081 5.781 0.1659 15.5-3.299 20.61-1.684 2.482-5.291 5.387-8.201 5.387 2.318 0 4.743-1.335 7.584-4.085 9.142-8.849 17.37-16.14 25.67-25.3 1.919-2.117 4.243-3.642 4.243-8.118z" fill="url(#linearGradient3893)"/></clipPath><radialGradient id="radialGradient3919-5" cx="90.75" cy="110.3" r="18.75" gradientTransform="matrix(1.307 0 0 1.307 -27.84 -33.82)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><linearGradient id="linearGradient3893" x1="86.74" x2="95.46" y1="93.62" y2="102.3" gradientTransform="matrix(1.012 0 0 1.012 -.8955 -.9872)" gradientUnits="userSpaceOnUse"><stop stop-color="#fcfcfc" offset="0"/><stop stop-color="#f8f8f8" offset=".5228"/><stop stop-color="#f0efef" offset=".7746"/><stop stop-color="#e3e1e1" offset=".9012"/><stop stop-color="#cecbcb" offset="1"/></linearGradient><clipPath id="clipPath20584"><rect x="5.936" y="48" width="120" height="102.3" ry="1.434" fill="#006c8a" opacity=".4385"/></clipPath></defs><g transform="translate(0,-924.4)"><path d="m8 932.4c-1.733 0-8 2.215-8 8v96c0 2.551 6.727 1.85 9.288 1.818l108.1-1.333c2.561-0.032 2.621 2.067 2.621-0.4847v-88c0-2.551-2.48-8-8-8h-64c0-5.376-5.625-8-8-8z" fill="url(#linearGradient4582)"/><path d="m8 932.4c-3.766 0-8 3.121-8 8v7.274c0 7.953-0.1102 14.77 0 23.27 0.1967 15.17 4.667 30.76 4.667 38.94v23.73c0 2.551 2.06 4.603 4.621 4.603h108.1c2.561 0 4.681-2.052 4.621-4.603l-2-85.22c-0.1025-4.367-3.936-8-8-8h-64c0-4.469-4.151-8-8-8z" fill="url(#pattern5614)" filter="url(#filter5616)" opacity=".1829"/><path d="m120 948.4v59c-9.699 3.819-8.005 2.236-8 0v-59c0-7.151 8-4.503 8 0z" fill="url(#linearGradient4661)" opacity=".4857"/><path d="m8 932.4c-3.074 0-8 2.632-8 9.456v62.54c0 3.149 2.535-2.999 5.685-2.999h1.895c-3.149 0 0.4203 6.148 0.4203 2.999v-62.54c-0.04038-4.95 0-9.456 0-9.456z" fill="url(#linearGradient4657)" opacity=".4857"/><path transform="translate(0,924.4)" d="m8 16v51h8v-43h16c0 3.262 4.971 8.136 8 8h64c0 3.75-0.195 15.27 0 16.81v18.19h8c0.057-7.148 0-26.51 0-35v-8h-72v-8z" fill="url(#radialGradient4644)" opacity=".3934"/><path d="m8 932.4c-4.27 0-8 3.73-8 8v40h8v-40h32v8h72v24h8v-24c0-5.006-4.786-8.017-8-8h-64c0-2.527-2.498-8-8-8z" fill="url(#linearGradient4722)" opacity=".2514"/><g transform="matrix(1 0 0 -1 -.07236 1052)" clip-path="url(#clipPath20584)"><path transform="matrix(.9417 0 0 .9415 3.516 3.146)" d="m13.33 5.336v118.3l49.85-0.0668c2.116-3e-3 4.529-1.772 7-4.25 0.7123-0.7144 1.441-1.394 2.156-2.094 0.4156-0.4065 0.8322-0.8144 1.25-1.219 7.774-7.41 26.98-25.12 34.22-33.1 0.4206-0.4206 0.8121-0.8111 1.156-1.188 1.464-1.498 2.762-2.838 2.994-5.862l0.0375-0.7312-3e-3 -69.82z" filter="url(#filter4123)" opacity=".4561"/><path transform="matrix(.9417 0 0 .9415 3.516 3.146)" d="m12.97 3.438c-1.48e-4 0.01042-1.48e-4 0.02083 0 0.03125-0.9212 0.1949-1.534 0.9334-1.531 1.875v118.7c-1.48e-4 0.0104-1.48e-4 0.0209 0 0.0313 0.01925 1.072 0.8029 1.856 1.875 1.875 0.01042 1.5e-4 0.02083 1.5e-4 0.03125 0h52.53c1.658 0 4.07 0.2469 7.156-1.844 0.09606-0.0692 0.1808-0.1539 0.25-0.25-0.05642 0.0503-0.1184 0.2292 0.0625-0.0625 0.05493-0.0473 0.1068-0.0903 0.1875-0.1562 0.2198-0.1795 0.5168-0.3862 0.7812-0.5938s0.4935-0.3947 0.6562-0.5312c0.0407-0.0341 0.0777-0.0491 0.125-0.0937 0.02365-0.0223 0.04509-0.0687 0.09375-0.125 0.02433-0.0281 0.07533-0.0459 0.125-0.125 0.01159-0.0185 0.01274-0.0566 0.03125-0.0937 9.793-9.351 27.46-28.63 38.5-39.81 1.711-1.711 3.781-3.906 3.781-8.562v-68.39c1.5e-4 -0.01042 1.5e-4 -0.02083 0-0.03125-0.0194-1.072-0.8028-1.856-1.875-1.875-0.0104-1.484e-4 -0.0209-1.484e-4 -0.0313 0h-102.3c-0.03303-0.00313-0.06067 0.00142-0.09375 0-0.08821-0.00379-0.1619-0.00834-0.25 0-0.04162-0.00237-0.08338-0.00237-0.125 0z" filter="url(#filter3822)"/><path d="m16.07 8.077v111.5l49.71-0.0771c1.578 0 3.686-0.5366 6.592-3.421 8.353-8.292 30.21-29.95 37.04-36.91 2.298-2.34 2.826-4.249 2.826-6.39l-3e-3 -64.78z" fill="#fff"/><path d="m22.33 13.86c-0.32 0-0.4709 0.2209-0.4709 0.4707v98.04c0 0.7735 0.6397 1.413 1.413 1.412l38.77-0.0295c0.04998-4e-5 0.7632 0.022 1.413 0.0295 1.674-0.0377 2.949-0.7096 4.102-1.5 0.9906-0.274 27.99-26.66 36.58-35.31 1.283-1.292 2.058-3.717 2.058-4.609v-58.04c0-0.3038-0.1537-0.4707-0.4709-0.4707z" fill="url(#linearGradient4524-4)"/><path d="m26.33 17.86c-0.32 0-0.4709 0.2209-0.4709 0.4707l-4 94.04c-0.03287 0.7728 0.6398 1.408 1.413 1.412l43.53 0.2644c0.04998 3e-4 3.083-7e-3 3.733 4e-5 6.16-4.24 28.88-26.12 37.3-34.59 0.619-0.6941 0.4309-0.3484 1.369-1.513v-63.61c0-0.3038-0.1537-0.4707-0.4709-0.4707z" fill="url(#radialGradient5988-0)" opacity=".8465"/><path transform="matrix(1.181,0,0,1.209,-24.26,-24.51)" d="m116.1 78.97c0 4.465-6.198 3.507-8.68 5.19-5.109 3.465-20.17 2.225-25.96 2.306-0.081 5.781-0.9372 19.68-0.9372 25.83 0 2.978-3.44 11.21-6.351 11.21-2.091 1.534 3.488 8.211 6.735 5.32 9.502-8.461 35.13-30.02 43.35-39.26 2.04-2.294-3.181-13.38-8.162-10.59z" clip-path="url(#clipPath6093-7)" filter="url(#filter6171-8)" opacity=".3473"/><path transform="matrix(1.286,0,0,1.316,-33.25,-37.13)" d="m113.9 82.5c0 4.465-10.44 5.304-13.43 5.728-6.395 0.9063-14.12-0.157-19.9-0.07598-0.5053 6.068 0.8669 24.05 1.224 26.58 0.4182 2.95-3.884 8.072-6.794 8.072-2.091 1.534 3.488 11.21 6.735 8.32 9.502-8.461 46-30.2 54.22-39.44 2.04-2.294-17.07-11.97-22.05-9.178z" clip-path="url(#clipPath6093-7)" filter="url(#filter3827)"/><path d="m111.6 69.54c0 6.019-3.689 8.64-6.962 10.91-6.736 4.671-20.6 3.682-28.23 3.791-0.1068 7.792 0.6819 20.81-3.887 27.7-2.22 3.346-6.538 8.148-10.38 8.148 3.057 0 6.254-1.799 10-5.506 12.06-11.93 22.9-21.75 33.85-34.1 2.53-2.853 5.595-4.909 5.595-10.94z" fill="url(#linearGradient3895-3)"/><path d="m110.7 68.28c-0.4172 5.256-4.273 7.093-6.373 8.549-4.978 3.451-11.59 3.17-32.34 3.17 0 19.1 0.4859 27.6-3.129 32.27-2.152 2.779-6.461 5.877-9.973 6.672 4.812 0 8.17-1.051 11.31-4.161 0.4472-0.5237 9.087-9.672 9.788-10.78v-16c7.623-0.1092 8 0 16 0 0.7468 0 10.14-9.613 10.69-10.16 3.053-3.053 3.715-4.999 4.018-9.556zm-51.81 50.66c-0.2079 0.0469-0.4133 0.0558-0.6181 0.0842 0.207-0.0228 0.4094-0.0452 0.6181-0.0842z" fill="#fff"/><path transform="matrix(1.319,0,0,1.348,-36.06,-41.67)" d="m109 89.51-29.04 28.7" clip-path="url(#clipPath3889-6)" fill="none" filter="url(#filter3909-6)" stroke="url(#radialGradient3919-5)" stroke-width="1.856"/></g><path d="m7 1046h114c2.216 0 4 0.8652 4 1.94 0 1.075-1.784 1.902-4 1.94-36.95 0.6329-74.7 0.7782-114 0-2.216-0.044-4-0.8653-4-1.94 0-1.075 1.784-1.94 4-1.94z" filter="url(#filter4724)" opacity=".5543"/><path transform="matrix(1.017,0,0,1.017,-4.068,15.76)" d="m45.9 963.4h-41.9l1e-7 46.11 118-0.1789v-49.35c0-2.541-2.06-4.584-4.621-4.584h-59.48c-9.375 0-5.067 7.848-12 8z" clip-path="url(#clipPath3834)" fill="#16375b" fill-opacity=".8015" filter="url(#filter4747)"/><path d="m56 988.4c-6.73 0-1.463 7.939-8 8h-40c-2.255 0-8 2.789-8 8v-1.422 33.42c0 1.778 5.042 8 8 8h112c1.646 0 8-6.012 8-8v-40c0-2.55-5.439-8-8-8z" fill="#6193cf"/><path d="m48 996.4h-40c-3.3 0-8 3.661-8 8v32c0 1.829 5.067 8 8 8h112c2.122 0 8-6.489 8-8v-40c0-2.541-5.439-8-8-8h-64c-6.613 0-1.738 7.971-8 8z" fill="url(#linearGradient4584)" opacity=".4629"/><path d="m56 988.4c-6.136 0.2789-2.452 8.011-8 8h-40c-4.356 0-8 4.853-8 8h52c7.71-0.3292 3.926-7.968 8-8h68c0-2.811-5.173-8-8-8z" color="#000000" enable-background="accumulate" fill="#d5f2f8" fill-opacity=".7279" opacity=".5657" style="text-indent:0;text-transform:none"/><rect transform="matrix(1,0,0,2.049,0,-1077)" x="3" y="1032" width="122" height="4.392" rx="2.44" ry="2.196" fill="url(#linearGradient4630)" filter="url(#filter4584)" opacity=".5771"/><path d="m4.312 1037c-0.1915 0.2846-0.3125 0.61-0.3125 0.9375v0.125c0 1.347 1.784 2.438 4 2.438h113c2.216 0 4-1.091 4-2.438v-0.125c0-0.3275-0.121-0.6529-0.3125-0.9375-0.5961 0.8858-2.01-0.5-3.688-0.5h-113c-1.677 0-3.091 1.386-3.688 0.5z" fill="#b8e6ff" filter="url(#filter4720)" opacity=".2686"/><path d="m56 988.4c-6.701 0-1.703 8.043-8 8h-40c-2.255 0-8 3.464-8 8v-1.452 33.45c0 1.778 5.073 8 8 8h112c2.132 0 8-6.388 8-8v-40c0-2.55-5.439-8-8-8z" fill="url(#pattern5626)" filter="url(#filter5616)" opacity=".4857"/><path d="m-0.0018 1020v8.728h128v-8.728z" fill="#00438a" opacity=".4"/><path d="m120.9 993.7c0.513 0 7.074 1.559 7.074 2.667v40c0 2.124-8 8-8 8-0.2724 0.025 0-6.407 0-7.515v-41.15c0-1.108 0.413-2 0.9259-2z" fill="url(#linearGradient4622)" opacity=".4057"/><path d="m8 995.4s0.389 4.679 0 8v41c-1.907 0-8-5.126-8-7.636v-33.36c0-4.003 5.169-8 8-8z" fill="url(#linearGradient4614)" opacity=".5943"/><rect x="-.0018" y="1029" width="128" height="4" rx="0" ry="1.434" fill="#fff" opacity=".1086"/></g></svg>
diff --git a/share/icons/svg/document-properties.svg b/share/icons/svg/document-properties.svg
deleted file mode 100644
index 59337c4aa..000000000
--- a/share/icons/svg/document-properties.svg
+++ /dev/null
@@ -1,601 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
- xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xml:space="preserve"
- enable-background="new 0 0 128 128"
- overflow="visible"
- viewBox="0 0 128 128"
- height="128"
- width="128"
- id="Layer_1"
- version="1.1"><defs
- id="defs105"><linearGradient
- id="linearGradient6113"><stop
- id="stop6115"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" /><stop
- id="stop6117"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" /></linearGradient><linearGradient
- id="linearGradient2232"><stop
- id="stop2234"
- offset="0"
- style="stop-color:#b4942a;stop-opacity:1;" /><stop
- id="stop2236"
- offset="1"
- style="stop-color:#e4dcc9;stop-opacity:1" /></linearGradient><linearGradient
- id="linearGradient3235"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3237" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3239" /></linearGradient><linearGradient
- id="linearGradient3207"><stop
- id="stop3209"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" /><stop
- id="stop3211"
- offset="1"
- style="stop-color:#252525;stop-opacity:0;" /></linearGradient><linearGradient
- id="linearGradient3225"><stop
- id="stop3227"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" /><stop
- id="stop3229"
- offset="1"
- style="stop-color:#aeaeae;stop-opacity:1;" /></linearGradient><linearGradient
- id="linearGradient3303"><stop
- id="stop3305"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:0.68345326;" /><stop
- id="stop3307"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" /></linearGradient><linearGradient
- id="linearGradient3058"><stop
- style="stop-color:#9a7600;stop-opacity:1;"
- offset="0"
- id="stop3060" /><stop
- id="stop3066"
- offset="0.09292036"
- style="stop-color:#e3ad00;stop-opacity:1;" /><stop
- style="stop-color:#ffcd2c;stop-opacity:1;"
- offset="0.5043171"
- id="stop3070" /><stop
- style="stop-color:#e3ad00;stop-opacity:1;"
- offset="0.91571385"
- id="stop3068" /><stop
- style="stop-color:#b98d00;stop-opacity:1;"
- offset="1"
- id="stop3062" /></linearGradient><linearGradient
- id="linearGradient2598"><stop
- style="stop-color:#252525;stop-opacity:1;"
- offset="0"
- id="stop2600" /><stop
- id="stop2606"
- offset="0.5"
- style="stop-color:#252525;stop-opacity:1;" /><stop
- style="stop-color:#252525;stop-opacity:1;"
- offset="0.75"
- id="stop2608" /><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="1"
- id="stop2602" /></linearGradient><linearGradient
- id="linearGradient2257"><stop
- id="stop2259"
- offset="0"
- style="stop-color:#b4942a;stop-opacity:1;" /><stop
- id="stop2261"
- offset="1"
- style="stop-color:#e4dcc9;stop-opacity:1" /></linearGradient><foreignObject
- id="foreignObject7"
- height="1"
- width="1"
- y="0"
- x="0"
- requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
- <i:pgfRef
- xlink:href="#adobe_illustrator_pgf">
- </i:pgfRef>
- </foreignObject><linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2291"
- xlink:href="#XMLID_9_" /><linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2293"
- xlink:href="#XMLID_10_" /><linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2295"
- xlink:href="#XMLID_11_" /><linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2297"
- xlink:href="#XMLID_12_" /><radialGradient
- r="139.55859"
- cy="112.3047"
- cx="102"
- gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2272"
- xlink:href="#XMLID_8_" /><radialGradient
- r="139.5585"
- cy="112.3047"
- cx="102"
- gradientTransform="translate(2.4e-6,0)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2275"
- xlink:href="#XMLID_7_" /><filter
- id="filter3241"><feGaussianBlur
- id="feGaussianBlur3243"
- stdDeviation="1.0394514" /></filter><filter
- id="filter6109"><feGaussianBlur
- id="feGaussianBlur6111"
- stdDeviation="2.44" /></filter><linearGradient
- y2="29.123526"
- x2="1.6579696"
- y1="47.098877"
- x1="23.487623"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6144"
- xlink:href="#linearGradient6113" /><radialGradient
- r="3.406888"
- fy="120.64188"
- fx="42.617531"
- cy="120.64188"
- cx="42.617531"
- gradientTransform="matrix(1.231616,1.291421,-11.70616,11.17834,1411.874,-1325.552)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6146"
- xlink:href="#linearGradient2257" /><radialGradient
- r="2.6143965"
- fy="58.089687"
- fx="15.727077"
- cy="58.089687"
- cx="15.727077"
- gradientTransform="matrix(1.54853,1.469114,-21.05168,22.68598,1272.946,-1291.402)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6148"
- xlink:href="#linearGradient2598" /><radialGradient
- r="47.746403"
- fy="64.141281"
- fx="16.217354"
- cy="95.769279"
- cx="36.675648"
- gradientTransform="matrix(5.267341e-2,5.051614e-2,-1.057794,1.116234,183.7751,-66.53858)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6150"
- xlink:href="#linearGradient3058" /><linearGradient
- y2="57.383999"
- x2="14.493531"
- y1="57.383999"
- x1="11.326384"
- gradientTransform="matrix(0.856502,0.799536,-0.796622,0.859634,115.5123,-21.93479)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6152"
- xlink:href="#linearGradient3058" /><radialGradient
- r="47.595197"
- fy="7.4622769"
- fx="34.677639"
- cy="7.4622769"
- cx="34.677639"
- gradientTransform="matrix(0.999914,-7.841646e-3,5.666079e-4,2.048306e-2,-1.242234e-3,7.581357)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6154"
- xlink:href="#linearGradient3303" /><radialGradient
- r="139.5585"
- cy="112.3047"
- cx="102"
- gradientTransform="translate(2.4000004e-6,0)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6156"
- xlink:href="#XMLID_7_" /><radialGradient
- r="3.9750405"
- fy="6.7701697"
- fx="47.370888"
- cy="8.4953122"
- cx="49.009884"
- gradientTransform="matrix(1.112439,1.035436,-0.388678,0.420644,60.1082,-43.23056)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6158"
- xlink:href="#linearGradient3225" /><radialGradient
- r="1.7246193"
- fy="2.6743078"
- fx="49.011971"
- cy="2.6743078"
- cx="49.011971"
- gradientTransform="matrix(1.519754,0,0,0.184942,14.80903,-77.11571)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6160"
- xlink:href="#linearGradient3207" /><linearGradient
- y2="2.3657269"
- x2="48.732723"
- y1="0.81150496"
- x1="48.498562"
- gradientTransform="matrix(1.112439,1.035436,-1.031663,1.116507,65.57053,-49.14214)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6162"
- xlink:href="#linearGradient3235" /><linearGradient
- y2="75.310318"
- x2="82.484642"
- y1="75.310318"
- x1="49.15303"
- gradientTransform="matrix(0.789159,0,0,0.789159,21.06854,3.497228e-2)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6164"
- xlink:href="#linearGradient2232" /><radialGradient
- r="1.7246193"
- fy="2.6743078"
- fx="49.011971"
- cy="2.6743078"
- cx="49.011971"
- gradientTransform="matrix(1.042254,0,0,0.126014,21.59014,-82.61791)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6166"
- xlink:href="#linearGradient3207" /><radialGradient
- r="139.5585"
- cy="112.3047"
- cx="102"
- gradientTransform="translate(8,0)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient6168"
- xlink:href="#XMLID_7_" /></defs>
-<metadata
- id="metadata3">
- <ns:sfw>
- <ns:slices>
- <ns:slice
- sliceID="1316743234"
- width="128"
- height="128"
- x="0"
- y="0" />
- </ns:slices>
- <ns:sliceSourceBounds
- bottomLeftOrigin="true"
- width="128"
- height="128"
- x="0"
- y="0" />
- <ns:optimizationSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="0">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="1696735251">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- </ns:optimizationSettings>
- </ns:sfw>
-<rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.5585"
- cy="112.3047"
- cx="102"
- id="XMLID_7_">
- <stop
- id="stop16"
- style="stop-color:#00537D"
- offset="0" />
- <stop
- id="stop18"
- style="stop-color:#186389"
- offset="0.0151" />
- <stop
- id="stop20"
- style="stop-color:#558CA8"
- offset="0.0558" />
- <stop
- id="stop22"
- style="stop-color:#89AFC3"
- offset="0.0964" />
- <stop
- id="stop24"
- style="stop-color:#B3CCD8"
- offset="0.1357" />
- <stop
- id="stop26"
- style="stop-color:#D4E2E9"
- offset="0.1737" />
- <stop
- id="stop28"
- style="stop-color:#ECF2F5"
- offset="0.2099" />
- <stop
- id="stop30"
- style="stop-color:#FAFCFD"
- offset="0.2435" />
- <stop
- id="stop32"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
-</radialGradient>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.55859"
- cy="112.3047"
- cx="102"
- id="XMLID_8_">
- <stop
- id="stop37"
- style="stop-color:#535557"
- offset="0" />
-
- <stop
- id="stop41"
- style="stop-color:#898A8C"
- offset="0.11366145" />
-
-
- <stop
- id="stop47"
- style="stop-color:#ECECEC"
- offset="0.20296688" />
- <stop
- id="stop49"
- style="stop-color:#FAFAFA"
- offset="0.2363" />
- <stop
- id="stop51"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
- <stop
- id="stop53"
- style="stop-color:#FAFAFA"
- offset="0.5313" />
- <stop
- id="stop55"
- style="stop-color:#EBECEC"
- offset="0.8449" />
- <stop
- id="stop57"
- style="stop-color:#E1E2E3"
- offset="1" />
-</radialGradient>
-
-<linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="XMLID_9_">
- <stop
- id="stop62"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop64"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_10_">
- <stop
- id="stop69"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop71"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_11_">
- <stop
- id="stop76"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop78"
- style="stop-color:#393B38"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="XMLID_12_">
- <stop
- id="stop83"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop85"
- style="stop-color:#8C8E89"
- offset="0.0072" />
- <stop
- id="stop87"
- style="stop-color:#ABACA9"
- offset="0.0673" />
- <stop
- id="stop89"
- style="stop-color:#C5C6C4"
- offset="0.1347" />
- <stop
- id="stop91"
- style="stop-color:#DBDBDA"
- offset="0.2115" />
- <stop
- id="stop93"
- style="stop-color:#EBEBEB"
- offset="0.3012" />
- <stop
- id="stop95"
- style="stop-color:#F7F7F6"
- offset="0.4122" />
- <stop
- id="stop97"
- style="stop-color:#FDFDFD"
- offset="0.5679" />
- <stop
- id="stop99"
- style="stop-color:#FFFFFF"
- offset="1" />
-</linearGradient>
-<path
- transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
- style="opacity:0.6;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
- d="M 23,9 L 23.040816,121 L 84.172,121 C 84.702,121 85.211,120.789 85.586,120.414 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9 L 23,9 z "
- id="path6594" /><path
- id="path34"
- d="M 16.000002,8 L 16.000002,120 L 77.172002,120 C 77.702002,120 78.211002,119.789 78.586002,119.414 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 L 16.000002,8 z "
- style="fill:url(#radialGradient2275)" /><path
- id="path59"
- d="M 18.978725,10 C 18.439449,10 18.000002,10.440836 18.000002,10.981818 L 18.000002,117.01818 C 18.000002,117.56015 18.439449,118 18.978725,118 L 76.891747,118 C 77.149151,118 77.401662,117.89593 77.583704,117.71233 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 L 110,10.981818 C 110,10.440836 109.56153,10 109.02128,10 L 18.978725,10 z "
- style="fill:url(#radialGradient2272);fill-opacity:1" /><g
- transform="translate(2.4e-6,0)"
- id="g1973"><path
- d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 C 86.346,93 85,94.346 85,96 C 85,101.035 78.336,119.664 78.586,119.414 L 111.414,86.586 z "
- id="path66"
- style="opacity:0.1;fill:url(#linearGradient2291)" /><path
- d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 C 86.897,94 86,94.897 86,96 C 86,105.444 78.211,119.789 78.586,119.414 L 111.414,86.586 z "
- id="path73"
- style="opacity:0.1;fill:url(#linearGradient2293)" /><path
- d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 C 87.447,95 87,95.447 87,96 C 87,105.807 78.347,119.653 78.586,119.414 L 111.414,86.586 z "
- id="path80"
- style="opacity:0.1;fill:url(#linearGradient2295)" /><path
- d="M 78.586,119.414 C 78.586,119.414 90.5,109.5 96,104 C 101.5,98.5 111.414,86.586 111.414,86.586 C 111.414,86.586 98.25,96 88,96 C 88,106.25 78.586,119.414 78.586,119.414 z "
- id="path101"
- style="fill:url(#linearGradient2297)" /></g>
-
-<g
- transform="matrix(1.1249999,0,0,-1.1153764,6.5344862e-6,134.10725)"
- id="g6121"><path
- style="opacity:0.5;fill:url(#linearGradient6144);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter6109)"
- d="M 7.7641113,32 C 7.0240637,32.00409 5.5964846,32.394358 4.1242461,33.626838 C 2.1419801,35.286255 1.7591591,36.88551 2.1223145,37.23897 C 2.1319535,37.248358 2.1430167,37.257158 2.1526557,37.266544 L 47.104973,81.108456 L 47.226299,81.21875 L 47.256631,81.246324 L 47.317294,81.30147 L 64.000003,92 L 53.444405,76.227942 C 53.453899,76.219995 53.374287,76.125528 53.383733,76.117648 L 53.262406,76.007353 C 53.262406,76.007353 8.0107938,31.998637 7.7641113,32 z "
- id="path4050"
- transform="matrix(0.9943712,0.1067095,-0.1056416,0.994324,6.7431152,-12.128099)" /><g
- id="g2244"
- transform="matrix(-0.7081385,0,0,0.7006176,86.548262,23.880927)"><path
- id="path3180"
- d="M 112.94799,0.35536433 C 113.36977,-0.10112165 116.08929,0.16409583 118.94522,2.822344 C 121.82917,5.5066515 122.37582,8.0670815 121.84747,8.6388446 C 121.5036,9.0110151 121.15971,9.3831833 120.81584,9.755353 C 117.84932,6.9941916 114.88282,4.2330325 111.91632,1.4718714 C 112.2602,1.0997023 112.60409,0.72753394 112.94799,0.35536433 C 112.94799,0.35536433 112.94799,0.35536433 112.94799,0.35536433"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 31.841596,97.227179 L 56.094706,79.936934 L 56.232212,79.788115 L 47.478778,71.346534 L 47.292399,71.548165 L 31.841596,97.227179 z "
- id="path3299" /><path
- id="path2247"
- d="M 33.24339,95.81655 L 55.860461,79.702444 L 55.997958,79.553632 L 47.713032,71.581016 L 47.526643,71.782654 L 33.24339,95.81655 z "
- style="fill:url(#radialGradient6146);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
- id="rect2192"
- d="M 51.062305,76.425915 C 52.15999,77.44761 53.282482,77.064589 53.674858,77.429794 C 53.738267,77.488809 53.78037,77.569396 53.810177,77.655531 L 119.0733,6.8873808 L 114.75934,2.8720371 L 49.372313,73.774261 C 49.569044,73.758395 49.743522,73.770577 49.867623,73.886088 C 50.226265,74.219915 49.959527,75.399465 51.062305,76.425915 z "
- style="fill:url(#radialGradient6148);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- style="opacity:0.35348834;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 56.139602,74.817489 L 53.58407,77.583178 C 53.92704,77.960365 53.456541,78.999374 54.115777,79.612969 C 54.826231,80.274252 55.597613,79.524733 56.059305,79.949435 L 58.645809,77.150195 L 56.139602,74.817489 z "
- id="path2233" /><path
- id="rect2190"
- d="M 118.9158,6.7407945 L 53.702245,77.455294 C 54.047095,77.834253 53.696117,78.746622 54.358731,79.36335 C 55.072808,80.028027 55.72626,79.406564 56.190293,79.83346 L 121.43482,9.0854486 L 118.9158,6.7407945 z "
- style="fill:url(#radialGradient6150);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- style="opacity:0.38604653;fill:#252525;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 51.110015,72.542739 L 49.799086,73.961482 L 49.749436,74.013992 C 50.042375,74.305002 49.614533,75.362109 50.554569,76.410532 L 50.609353,76.461513 L 50.999664,76.824805 L 51.054445,76.875799 C 52.177226,77.747447 53.194927,77.22099 53.587289,77.586183 L 54.975669,76.075788 L 51.110015,72.542739 z "
- id="path2231" /><path
- style="opacity:0.35348834;fill:#131313;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 48.617047,70.194463 L 47.290017,71.55189 C 47.30377,71.564632 47.195458,71.6829 47.209261,71.695753 C 47.490854,71.957847 47.10021,73.014438 47.568532,73.631194 L 47.616467,73.675797 L 47.828735,73.873385 L 47.856133,73.898865 C 48.519269,74.342691 49.409439,73.790447 49.749436,74.013992 L 51.123253,72.527199 L 48.617047,70.194463 z "
- id="path2229" /><path
- id="rect1315"
- d="M 47.968759,73.509359 C 48.659918,74.137778 49.501753,73.545547 49.867623,73.886088 L 115.08119,3.1715988 L 112.53531,0.80196718 L 47.290776,71.549985 C 47.304752,71.56292 47.318487,71.575773 47.332504,71.588842 C 47.618555,71.855082 47.272435,72.876102 47.968759,73.509359 z "
- style="fill:url(#linearGradient6152);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><rect
- transform="matrix(0.732512,0.680754,-0.680754,0.732512,0,0)"
- y="-76.585564"
- x="82.991852"
- height="2.8573658"
- width="12.154856"
- id="rect2069"
- style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- transform="matrix(0.56268,-0.608612,-1.155587,-1.072069,76.43844,59.62859)"
- d="M 82.172836,7.4622769 A 47.495197,0.97142172 0 0 1 34.677639,8.4336987 47.495197,0.97142172 0 0 1 -12.817558,7.4622769 47.495197,0.97142172 0 0 1 34.677639,6.4908552 47.495197,0.97142172 0 0 1 82.172836,7.4622769 Z"
- id="path3301"
- style="fill:url(#radialGradient6154);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- style="fill:url(#radialGradient6156);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- id="path3321"
- d="M 106.56087,7.4622769 A 71.883232,0.4230493 0 0 1 35.242273,7.8853132 71.883232,0.4230493 0 0 1 -37.196723,7.4689227 71.883232,0.4230493 0 0 1 32.983878,7.0393451 71.883232,0.4230493 0 0 1 106.52539,7.448987"
- transform="matrix(0.465919,-0.505717,-0.837024,-0.779688,72.02739,62.11862)" /><path
- style="fill:url(#radialGradient6158);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 108.38485,5.3016098 C 107.12716,6.0907828 105.93515,7.4663905 105.29482,8.6457647 L 112.44928,15.244444 L 115.5393,11.90029 L 108.38485,5.3016098 z M 114.78737,11.200422 L 111.69734,14.544576 L 114.20374,16.877473 C 115.29929,16.218853 116.5563,14.908329 117.29377,13.533321 L 114.78737,11.200422 z "
- id="path2274" /><path
- id="path2265"
- d="M 42.270532,89.826738 C 40.642899,89.666673 39.244128,87.199367 38.343975,86.444505 L 31.842881,97.22175 L 42.270532,89.826738 z "
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
- transform="matrix(0.731987,0.681319,-0.678649,0.734463,0,0)"
- y="-77.08168"
- x="86.674194"
- height="1.1477653"
- width="5.2419958"
- id="rect3205"
- style="fill:url(#radialGradient6160);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
- id="path3233"
- d="M 118.05347,2.2273398 C 119.90131,3.702737 121.20567,5.7188458 121.27612,5.9115603 C 121.34655,6.104276 119.56393,3.843466 118.03439,2.796435 C 116.51655,1.7573994 114.37282,1.6966458 114.21641,1.5706147 C 114.06,1.4445845 113.0071,0.2936384 113.97851,0.35151748 C 114.99456,0.41205659 116.62619,1.0887976 118.05347,2.2273398 z "
- style="fill:url(#linearGradient6162);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
- id="text3284"
- d="M 60.938379,71.528265 C 60.737529,71.745408 60.624099,71.95325 60.598062,72.151784 C 60.572028,72.350352 60.635855,72.521217 60.789541,72.66441 C 60.942579,72.806996 61.116775,72.857889 61.31212,72.817115 C 61.507471,72.776298 61.705561,72.647356 61.906402,72.430222 C 62.108398,72.21184 62.222394,72.003387 62.248438,71.804828 C 62.274468,71.606271 62.210955,71.435717 62.057927,71.293123 C 61.904234,71.149924 61.729721,71.098734 61.534375,71.139525 C 61.339026,71.180312 61.140366,71.309892 60.938379,71.528265 M 60.665848,71.274325 C 61.076665,70.830193 61.465536,70.544772 61.832483,70.418084 C 62.199416,70.291398 62.501091,70.338195 62.737478,70.558441 C 62.973215,70.778099 63.041762,71.076245 62.943125,71.452917 C 62.844476,71.829595 62.589749,72.239996 62.178932,72.684144 C 61.769262,73.127038 61.380392,73.412461 61.012299,73.540388 C 60.645362,73.667068 60.344024,73.620588 60.108276,73.400936 C 59.871891,73.180691 59.803015,72.882221 59.901665,72.505561 C 60.00145,72.127652 60.256176,71.71725 60.665848,71.274325 M 64.518178,68.599844 L 66.149189,68.33476 L 65.462784,69.076861 L 64.367222,69.258528 L 64.273145,70.363014 L 63.583328,71.108794 L 63.725644,69.456673 L 62.159159,69.712956 L 62.84727,68.969014 L 63.876849,68.801652 L 63.965025,67.760583 L 64.65656,67.012944 L 64.518178,68.599844 M 64.728452,66.935215 L 65.449085,66.156122 L 66.550732,66.011111 L 66.613054,64.897713 L 67.335398,64.116771 L 67.205402,65.956111 L 67.819831,66.528585 L 67.160808,67.241079 L 66.54639,66.668584 L 64.728452,66.935215 M 71.264932,62.585746 C 71.146178,62.80587 71.009768,63.022163 70.855686,63.234624 C 70.701601,63.447098 70.53041,63.655116 70.342125,63.858673 C 69.916473,64.318856 69.511545,64.620311 69.127319,64.763064 C 68.742451,64.905217 68.433771,64.867963 68.201285,64.651357 C 67.966186,64.432312 67.907916,64.123044 68.026455,63.72357 C 68.144983,63.32407 68.424501,62.886228 68.864974,62.410009 C 69.035013,62.226183 69.206743,62.058862 69.380171,61.90807 C 69.554743,61.756036 69.728971,61.622086 69.902865,61.506151 L 70.204708,61.787404 C 70.015824,61.898534 69.839238,62.019973 69.674943,62.151716 C 69.511793,62.282218 69.359453,62.423982 69.217958,62.576959 C 68.955495,62.860713 68.794952,63.118832 68.736311,63.351317 C 68.678167,63.581975 68.726912,63.769815 68.882551,63.914815 C 69.036886,64.058628 69.224537,64.095629 69.445484,64.02586 C 69.66642,63.956083 69.902981,63.784879 70.155183,63.512212 C 70.223643,63.438206 70.284694,63.367608 70.338341,63.300423 C 70.392467,63.231426 70.437727,63.166769 70.474082,63.106482 L 70.19081,62.842532 L 69.788549,63.277431 L 69.53654,63.042616 L 70.563569,61.932266 L 71.264932,62.585746 M 70.493519,60.702434 L 72.271996,58.779671 L 72.556244,59.044506 L 71.436779,60.254795 L 71.708338,60.507817 L 72.761047,59.369704 L 73.045301,59.634551 L 71.992593,60.772664 L 72.326672,61.083939 L 73.483793,59.832944 L 73.768049,60.097792 L 71.95191,62.061277 L 70.493519,60.702434 M 72.889928,58.111599 L 73.625965,57.315843 L 75.555696,57.242952 L 74.555431,56.310972 L 75.180207,55.635511 L 76.638602,56.99435 L 75.902562,57.790109 L 73.972828,57.862987 L 74.973099,58.79498 L 74.348322,59.47044 L 72.889928,58.111599 M 77.039134,53.625769 L 77.775172,52.830024 L 79.704899,52.757123 L 78.704636,51.825153 L 79.329411,51.14968 L 80.787805,52.50852 L 80.051769,53.304277 L 78.122034,53.377155 L 79.122304,54.30915 L 78.497528,54.98461 L 77.039134,53.625769 M 80.61079,49.711254 C 80.853859,49.448481 81.081706,49.27488 81.294353,49.190476 C 81.508145,49.104855 81.676896,49.119675 81.800632,49.234961 C 81.924357,49.350245 81.951861,49.517132 81.883135,49.735621 C 81.814408,49.954123 81.657944,50.195374 81.413739,50.459388 C 81.169534,50.723412 80.940864,50.898541 80.727723,50.984771 C 80.51573,51.069777 80.347863,51.054637 80.224139,50.939353 C 80.100402,50.824069 80.072583,50.656877 80.140656,50.437774 C 80.209874,50.217445 80.366591,49.975279 80.61079,49.711254 M 80.830617,51.335602 L 82.239362,49.81257 L 82.434721,49.994592 L 81.025975,51.517633 L 80.830617,51.335602 M 80.776848,49.865975 C 80.680998,49.969619 80.627338,50.068923 80.615866,50.163892 C 80.605539,50.25764 80.638149,50.339702 80.713692,50.410086 C 80.789232,50.480471 80.872865,50.506715 80.964595,50.488815 C 81.05746,50.469687 81.151825,50.408304 81.247675,50.30466 C 81.342396,50.202271 81.395239,50.104503 81.40622,50.011361 C 81.418333,49.916994 81.386619,49.834615 81.311081,49.764229 C 81.23554,49.693848 81.15101,49.667918 81.057489,49.686439 C 80.965116,49.703742 80.871569,49.763586 80.776848,49.865975 M 85.143468,46.216678 C 85.341176,46.054057 85.516123,45.954057 85.668296,45.916676 C 85.820965,45.877464 85.945815,45.90306 86.042849,45.993469 C 86.187414,46.128166 86.200472,46.335572 86.082018,46.615689 C 85.96291,46.895201 85.71735,47.236056 85.34534,47.638247 C 85.214107,47.780127 85.076124,47.916865 84.931369,48.048444 C 84.78842,48.179405 84.640423,48.303363 84.487385,48.420328 L 84.197259,48.150005 C 84.355672,48.049538 84.504472,47.9424 84.643666,47.828615 C 84.783351,47.712988 84.911968,47.591639 85.029505,47.464569 C 85.204096,47.275809 85.320358,47.115381 85.378279,46.983292 C 85.437329,46.849964 85.434627,46.753271 85.370156,46.693196 C 85.303734,46.631313 85.20566,46.636402 85.075942,46.708484 C 84.94671,46.778729 84.789096,46.914398 84.60309,47.115496 L 84.339485,47.400485 L 84.097235,47.174772 L 84.374533,46.874977 C 84.539999,46.696089 84.64859,46.549198 84.700304,46.434291 C 84.751372,46.318791 84.74662,46.232821 84.686066,46.176397 C 84.63005,46.12421 84.547384,46.126426 84.438031,46.183033 C 84.328688,46.239648 84.202126,46.345674 84.058334,46.501117 C 83.952213,46.615863 83.851785,46.738206 83.757046,46.86814 C 83.662315,46.998097 83.574666,47.13349 83.494094,47.274332 L 83.218636,47.017676 C 83.327885,46.857615 83.441204,46.703647 83.558593,46.555753 C 83.675982,46.407874 83.796305,46.267314 83.919543,46.134063 C 84.251619,45.77506 84.531068,45.535836 84.757914,45.416429 C 84.985246,45.295185 85.161427,45.292809 85.286461,45.409301 C 85.37177,45.488795 85.40241,45.596591 85.378374,45.732683 C 85.353676,45.868162 85.275376,46.029499 85.143468,46.216678"
- style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient6164);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" /><rect
- style="fill:url(#radialGradient6166);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- id="rect2956"
- width="3.5949802"
- height="0.78205258"
- x="70.875519"
- y="-82.594727"
- transform="matrix(0.685219,0.728337,-0.782272,0.622937,0,0)" /><rect
- transform="matrix(-0.743171,-0.669101,-0.605652,0.795729,0,0)"
- y="-75.74585"
- x="-102.72707"
- height="0.78204978"
- width="3.594974"
- id="rect2961"
- style="fill:url(#radialGradient6168);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /></g></g></svg> \ No newline at end of file
diff --git a/share/icons/svg/document-save-as.svg b/share/icons/svg/document-save-as.svg
deleted file mode 100644
index 833ebc6d3..000000000
--- a/share/icons/svg/document-save-as.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient17395"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".8" offset="1"/></linearGradient><linearGradient id="linearGradient17383"><stop stop-color="#202020" offset="0"/><stop stop-color="#202020" stop-opacity=".7636" offset="1"/></linearGradient><linearGradient id="linearGradient3215"><stop stop-color="#8a8a8a" offset="0"/><stop stop-color="#c6c6c6" offset="1"/></linearGradient><linearGradient id="linearGradient3088"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3111"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".6982" offset=".5"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3250" x1="-97.74" x2="-97.74" y1="1938" y2="1895" gradientTransform="matrix(2.56 0 0 2.583 325.2 -4887)" gradientUnits="userSpaceOnUse"><stop stop-color="#2e2a2b" offset="0"/><stop stop-color="#4c494a" offset=".335"/><stop stop-color="#5b595a" offset=".6675"/><stop stop-color="#6b696a" offset="1"/></linearGradient><filter id="filter3444" x="-.07098" y="-.7965" width="1.142" height="2.593"><feGaussianBlur stdDeviation="2.9868914"/></filter><clipPath id="clipPath3008"><rect x="24.68" y="-68.25" width="78.12" height="55.4" rx="1.134" ry="1.134" fill="none" opacity=".2656" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4"/></clipPath><radialGradient id="radialGradient3083" cx="100.3" cy="42.45" r="38" gradientTransform="matrix(4.571 7.265e-7 -2.985e-7 1.857 -408.6 -84.72)" gradientUnits="userSpaceOnUse"><stop stop-color="#d0ced9" offset="0"/><stop stop-color="#ecf1f9" offset=".25"/><stop stop-color="#fff" offset=".5"/><stop stop-color="#c6d5e3" offset="1"/></radialGradient><filter id="filter3105"><feGaussianBlur stdDeviation="0.66759571"/></filter><radialGradient id="radialGradient3117" cx="64.8" cy="63.78" r="34.04" gradientTransform="matrix(1.14 0 0 .01071 -1.062 63.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3111"/><clipPath id="clipPath3215"><path d="m11.38-167.7c-2.953 0-3.375 0.3641-3.375 3.344v0.7812c0-2.98 0.4216-3.312 3.375-3.312h105.2c2.953 0 3.375 0.3328 3.375 3.312v-0.7812c0-2.98-0.4216-3.344-3.375-3.344h-105.2z" fill="url(#linearGradient3219)"/></clipPath><linearGradient id="linearGradient3219" x1="-98.93" x2="-98.93" y1="1893" y2="1897" gradientTransform="matrix(2.56 0 0 2.583 317.2 -5063)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter3371" x="-.007141" y="-.2269" width="1.014" height="1.454"><feGaussianBlur stdDeviation="0.33324519"/></filter><filter id="filter3417"><feGaussianBlur stdDeviation="0.11145486"/></filter><linearGradient id="linearGradient3453" x1="69.91" x2="70.02" y1="-96.5" y2="-67.84" gradientTransform="translate(8.059 131.4)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3474" x1="107.1" x2="107.1" y1="-26.26" y2="134.6" gradientTransform="translate(17.4 .6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><filter id="filter3565" x="-.02336" y="-.1874" width="1.047" height="1.375"><feGaussianBlur stdDeviation="1.0149838"/></filter><radialGradient id="radialGradient3583" cx="28.48" cy="164.1" r="52.14" gradientTransform="matrix(5.492 -.115 .00261 .1246 -120.4 104.8)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></radialGradient><filter id="filter3659" x="-.06901" y="-.1203" width="1.138" height="1.241"><feGaussianBlur stdDeviation="1.9228365"/></filter><radialGradient id="radialGradient3692" cx="64.8" cy="63.78" r="34.04" gradientTransform="matrix(1.055 0 0 .02203 8.533 76.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3111"/><radialGradient id="radialGradient3704" cx="84" cy="91.98" r="32" gradientTransform="matrix(1 0 0 .621 8 37.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><linearGradient id="linearGradient3712" x1="47.61" x2="47.61" y1="104.4" y2="176.4" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter3726" x="-.006058" y="-.6241" width="1.012" height="2.248"><feGaussianBlur stdDeviation="0.18955201"/></filter><radialGradient id="radialGradient3039" cx="118.2" cy="9.12" r="1.284" gradientTransform="matrix(1.209 .9583 -1.402 1.769 -12 -120.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><filter id="filter3077"><feGaussianBlur stdDeviation="0.10453397"/></filter><radialGradient id="radialGradient3084" cx="118.2" cy="9.12" r="1.284" gradientTransform="matrix(1.209 .9583 -1.402 1.769 -11.1 -120.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><radialGradient id="radialGradient3094" cx="104.1" cy="9" r=".4688" gradientTransform="matrix(1 0 0 .8 7.536 1.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><filter id="filter3120"><feGaussianBlur stdDeviation="0.025961538"/></filter><radialGradient id="radialGradient3126" cx="104.1" cy="9" r=".4688" gradientTransform="matrix(1 0 0 .8 -80.46 1.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><linearGradient id="linearGradient3142" x1="-37.2" x2="-12.62" y1="42.34" y2="106.8" gradientTransform="translate(126.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3192"><feGaussianBlur stdDeviation="0.0231875"/></filter><clipPath id="clipPath3199"><path d="m18.19 132.4c-1.419 0-2.562 1.143-2.562 2.562v37.18h72v-37.18c0-1.419-1.143-2.562-2.562-2.562h-66.88z" fill-opacity=".1283"/></clipPath><linearGradient id="linearGradient3221" x1="64" x2="56" y1="120.1" y2="96.32" gradientTransform="matrix(1 0 0 1.01 8 -1.313)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3215"/><filter id="filter3271" x="-.1238" y="-.09288" width="1.248" height="1.186"><feGaussianBlur stdDeviation="1.2384615"/></filter><linearGradient id="linearGradient3281" x1="68" x2="36" y1="120" y2="84" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient17389" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -206 98.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17391" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.9 81.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17393" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -242.7 76.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17401" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -218.4 75.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17403" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189 83.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17405" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -240 64.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17927" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -169.1 86.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17929" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -217.8 54.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17931" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229.9 62.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17933" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -256.7 79.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17935" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.8 54.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17937" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187.5 97.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17939" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -200.2 81.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17941" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.7 55.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17943" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.6 97.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17945" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.3 61.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17947" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.7 52.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17949" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -248.6 59.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17951" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.5 60.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17953" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -174.9 58.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17955" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.6 67.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17957" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.7 62.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17959" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -233.4 73.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17961" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.9 66.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17963" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -204.1 84.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17965" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.9 77.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17967" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226.2 51.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17969" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -253.1 69.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17971" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.5 92.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17973" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -225.4 94.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17975" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -229.9 65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17977" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -201.8 67.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17979" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -216.7 78.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17981" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -235.6 51.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17983" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -219.9 68.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17985" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -245.5 55.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17987" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.2 71.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17989" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -230.6 56.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17991" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.7 74.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17993" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.5 53.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17995" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.6 61.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17997" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.3 66.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17999" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -179.1 67.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18001" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.3 72.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18003" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -194.3 87.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18005" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -236.4 82.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18007" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250 62.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18009" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.4 56.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18011" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.1 57.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18013" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.8 57.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18015" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190 48.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18017" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -192.6 63.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18019" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.9 95.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18021" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -205 77.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18023" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -206.2 48.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18025" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -240.7 82.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18027" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.2 92.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18029" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -183.7 79.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18031" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -189.5 78.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18033" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.7 84.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18035" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -232.3 52.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18037" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -253.5 86.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18039" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -224 90.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18041" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.9 82.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18043" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.6 49.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18045" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.4 83.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18047" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.4 82.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18049" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -217.9 93.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18051" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.2 89.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18053" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.1 52.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18055" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -205.5 84.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18057" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.6 48.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18059" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.6 65.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18061" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220 77.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18063" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -240.7 101.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18065" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.3 95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18067" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.8 89.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18069" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -184.7 49.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18071" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207.7 87.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18073" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.4 55.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18075" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -193.6 76.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18077" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -231.5 70.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18079" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.2 87.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18081" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.6 74.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18083" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -206.3 65.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18085" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -227.3 93.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18087" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.3 70.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18089" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.2 48.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18091" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.4 83.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18093" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.8 57.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18095" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -208.9 53.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18097" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193.9 94.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18099" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252.3 94.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18101" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -252.1 70.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18103" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -213 55.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18105" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239.6 51.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18107" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -196.3 56.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18109" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193.3 87.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18111" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -222 64.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18113" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -212.7 47.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18115" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -175.5 86.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18117" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.3 49.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18119" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -259.2 94.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18121" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.5 67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18123" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.6 62.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18125" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -247.2 61.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18127" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -175.5 61.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18129" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.4 88.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18131" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228.7 88.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18133" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -216.6 58.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18135" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -255 55.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18137" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.5 92.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18139" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.4 57.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18141" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -234.5 89.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18143" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226.6 94.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18145" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.4 73.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18147" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.6 71.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18149" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.3 58.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><clipPath id="clipPath25065"><path d="m-283.4 66c-1.177 0-2.125 0.9478-2.125 2.125v37.82h55.41v-37.82c0-1.177-0.9478-2.125-2.125-2.125h-51.16zm6.219 3.344h14.12c0.5196 0 0.9375 0.418 0.9375 0.9375v26.12c0 0.5196-0.418 0.9375-0.9375 0.9375h-14.12c-0.5196 0-0.9375-0.418-0.9375-0.9375v-26.12c0-0.5195 0.418-0.9375 0.9375-0.9375z" fill="url(#linearGradient25069)"/></clipPath><linearGradient id="linearGradient25069" x1="52" x2="52" y1="112" y2="80" gradientTransform="translate(-318.1 -14.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3215"/><linearGradient id="linearGradient25071" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.4 96.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25073" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.2 68.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25075" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -196.2 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25077" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -192.1 74.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25079" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.9 53.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25081" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -180.1 97.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25083" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.8 50.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25085" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243 84.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25087" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -225.5 76.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25089" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -205.7 57.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25091" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -245.9 66.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25093" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -219.8 50.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25095" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -185.1 74.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25097" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.1 42.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25099" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.7 93.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25101" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -201.7 51.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25103" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -212 53.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25105" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.4 89.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25107" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -193.7 64.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25109" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.9 81.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25111" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -204.3 47.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25113" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.7 91.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25115" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -247.7 98.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25117" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -236.3 95.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25119" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -226.7 53.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25121" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226.6 53.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25123" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221 47.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25125" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -247.4 58.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25127" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177.2 45.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25129" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -229.9 74.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25131" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -209.1 97.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25133" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -236.3 46.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25135" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -205.8 94.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25137" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.9 78.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25139" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -214.6 84.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25141" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -230.9 92.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25143" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238 71.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25145" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.6 87.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25147" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -224.3 81.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25149" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.1 90.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25151" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.8 75.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25153" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.1 67.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25155" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.9 54.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25157" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.8 79.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25159" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -243.1 80.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25161" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.5 50.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25163" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -202.3 62.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25165" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -232.5 79.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25167" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.4 54.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25169" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -177.6 80.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25171" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.7 82.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25173" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -216.3 94.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25175" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.1 95.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25177" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.6 43.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25179" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255 76.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25181" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245 89.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25183" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -176.5 72.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25185" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226 79.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25187" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -245.1 89.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25189" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -223 68.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25191" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.3 64.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25193" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.2 58.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25195" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.1 98.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25197" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229 60.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25199" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.7 52.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25201" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.8 73.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25203" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.3 88.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25205" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.3 78.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25207" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.8 94.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25209" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252 59.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25211" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -227 71.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25213" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -177.3 87.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25215" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.9 91.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25217" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226.6 82.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25219" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250 82.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25221" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218.6 48.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25223" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.2 82.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25225" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -244.3 75.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25227" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -178.4 58.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25229" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.7 55.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25231" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.4 62.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25233" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -234.4 79.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25235" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.7 68.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25237" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.9 55.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25239" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -178.2 55.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25241" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -244.8 74.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25243" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.2 52.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25245" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -225.8 97.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25247" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226 65.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25249" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -214.2 85.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25251" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -195.3 78.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25253" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.2 63.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25255" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -248.2 54.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25257" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.5 65.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25259" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226.1 48.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25261" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -242.8 51.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25263" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.1 72.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25265" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -227.1 73.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25267" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.7 102.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25269" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.4 101.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25271" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.1 63.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25273" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.9 72.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25275" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -222.9 73.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25277" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.1 78.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25279" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.5 61.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25281" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190 70.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25283" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -175.6 85.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25285" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.9 87.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25287" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -223.9 73.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25289" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -247.5 76.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25291" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -235.6 53.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25293" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.8 65.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25295" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.1 79.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25297" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.3 94.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25299" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -212.8 79.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25301" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.7 86.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25303" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -248.2 55.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25305" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.3 62.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25307" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -230 99.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25309" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.5 62.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25311" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218 67.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25313" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -219.2 88.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25315" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -238.6 100.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25317" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.9 89.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25319" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.8 78.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25321" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -196.1 69.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25323" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.2 96.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25325" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.5 95.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25327" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.1 101.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25329" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250 84.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25331" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.9 56.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25333" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.9 74.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25335" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.5 92.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25337" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -201 56.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25339" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -222 75.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25341" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.9 87.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25343" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.9 68.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25345" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.3 47.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25347" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179.9 83.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25349" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -253.9 89.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25351" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.7 61.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25353" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -195.1 77.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25355" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220 82.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25357" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -209.3 78.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25359" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.9 66.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25361" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191.9 90.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25363" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -192.1 53.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25365" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.6 51.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25367" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -200.6 97.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25369" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.7 78.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25371" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.1 63.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25373" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -231.4 90.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25375" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.1 66.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25377" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -207.2 89.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25379" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -219.8 73.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25381" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -201 85.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25383" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.6 93.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25385" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.3 48.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25387" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.4 87.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25389" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -211.9 46.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25391" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.8 57.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25393" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.3 55.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25395" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186 80.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25397" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.8 84.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25399" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -240.1 65.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25401" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.6 91.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25403" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.2 69.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25405" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -243.5 52.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25407" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.7 94.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25409" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.8 85.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25411" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.6 57.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25413" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -225.6 65.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25415" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -202.1 48.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25417" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.7 82.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25419" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.8 87.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25421" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.6 90.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25423" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -226.2 49.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25425" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.9 89.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25427" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -200.1 73.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25429" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.9 98.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25431" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -215.8 81.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25433" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -186.5 69.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25435" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.6 67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25437" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.4 86.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25439" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -195 53.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25441" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.6 60.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25443" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.5 93.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25445" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -218 46.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25447" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.4 80.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25449" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.3 74.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25451" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -244.8 56.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25453" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.2 57.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25455" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.2 43.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25457" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192 67.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25459" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -232.1 70.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25461" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -191 79.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25463" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -199.4 76.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25465" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -208.9 79.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25467" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -208.2 48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25469" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -199.4 62.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25471" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.7 102.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25473" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.5 73.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25475" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -215.9 64.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25477" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.8 77.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25479" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -208.1 63.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25481" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -248.3 97.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25483" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -204.8 85.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25485" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.9 54.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25487" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.5 67.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25489" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.3 72.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25491" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -201 88.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25493" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.8 88.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25495" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.3 56.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25497" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -184.4 88.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25499" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -199 91.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25501" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.5 50.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25503" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -254.9 69.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25505" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.9 67.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25507" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -245.4 74.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25509" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -184.4 57.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25511" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.5 92.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25513" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -176.8 50.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25515" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -221 65.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25517" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -221.7 84.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25519" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -180.3 59.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25521" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -233.9 59.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25523" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -183.1 59.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25525" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.9 95.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25527" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196.3 96.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25529" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -242 51.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25531" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.4 78.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25533" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -256.6 72.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25535" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.8 87.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25537" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.6 45.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25539" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.5 71.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25541" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.9 55.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25543" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221.5 73.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25545" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -220.8 49.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25547" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220.2 64.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25549" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.5 61.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25551" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -251.5 43.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25553" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -222.6 66.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25555" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -215.8 80.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25557" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -219.8 71.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25559" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.9 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25561" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -204.4 63.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25563" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179.4 90.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25565" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.1 43.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25567" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.7 94.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25569" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.4 100.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25571" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.9 84.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25573" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -211 65.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25575" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.8 83.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25577" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -204.8 62.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25579" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201.4 94.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25581" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.1 58.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25583" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -233.2 75.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25585" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.2 48.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25587" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -235 55.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25589" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -189.3 52.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25591" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -170.6 77.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25593" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -194.1 91.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25595" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.6 78.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25597" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -192.9 89.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25599" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.2 45.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25601" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.5 43.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25603" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.8 48.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25605" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.2 87.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25607" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -212.6 55.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25609" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207.8 79.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25611" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.9 50.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25613" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.9 47.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25615" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -178 76.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25617" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -249.9 78.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25619" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -203.7 56.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25621" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -179.4 72.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25623" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -194.8 70.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25625" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -227.6 85.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25627" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.4 91.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25629" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.1 83.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25631" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -225.7 50.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25633" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -212.8 76.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25635" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186.5 86.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25637" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -244.6 44.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25639" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.2 77.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25641" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.8 94.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25643" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.9 62.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25645" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -178.7 73.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25647" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187.5 77.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25649" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -240.5 69.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25651" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.2 66.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25653" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.1 62.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25655" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.5 90.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25657" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226 54.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25659" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.5 81.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25661" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -185.6 71.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25663" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.4 62.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25665" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -256.1 56.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25667" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.9 53.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25669" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -185.2 95.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25671" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.3 86.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25673" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -214.1 65.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25675" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -222.3 98.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25677" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.5 75.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25679" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220.1 90.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25681" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.3 94.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25683" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.7 58.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25685" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.2 88.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25687" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.9 85.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25689" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.4 99.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25691" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -200 52.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25693" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -190.3 78.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25695" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.4 76.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25697" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -221.8 48.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25699" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.8 65.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25701" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -241.8 76.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25703" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -213.1 99.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25705" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -257 83.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25707" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.4 61.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25709" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.7 81.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25711" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.7 82.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25713" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.9 85.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25715" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.1 80.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25717" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170.3 56.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25719" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239 90.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25721" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252.6 62.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25723" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -170.1 58.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25725" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -232.7 74.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25727" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.7 60.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25729" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.2 74.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25731" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.3 69.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25733" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -213.8 68.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25735" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.2 72.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25737" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -239.3 69.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25739" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -235.3 94.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25741" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -239.6 57.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25743" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -259.4 93.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25745" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -199.8 81.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25747" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.8 49.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25749" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.8 99.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25751" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -218.5 99.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25753" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -238.6 57.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25755" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.8 83.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25757" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.1 89.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25759" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.2 58.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25761" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.7 60.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25763" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.1 96.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25765" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -173.4 62.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25767" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.5 78.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25769" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.3 66.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25771" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -251.7 70.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25773" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -205.4 95.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25775" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.9 50.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25777" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -203.6 72.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25779" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -245.6 81.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25781" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.1 54.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25783" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -240.3 58.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25785" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -199.3 66.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25787" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.3 83.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25789" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.7 54.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25791" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.8 71.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25793" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192.4 50.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25795" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.5 95.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25797" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -215.1 80.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25799" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.1 94.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25801" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.1 48.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25803" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -242.5 69.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25805" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.1 68.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25807" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.9 91.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25809" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251 46.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25811" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.9 73.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25813" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -229.6 93.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25815" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -222.6 53.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25817" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.1 51.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25819" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.3 97.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25821" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.5 74.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25823" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.1 92.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25825" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -223.9 60.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25827" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179 78.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25829" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.9 51.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25831" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.3 85.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25833" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252.5 90.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25835" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.4 57.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25837" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.2 68.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25839" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.2 61.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25841" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -199.3 58.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25843" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.3 83.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25845" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -240.2 75.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25847" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254 55.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25849" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -176.9 96.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25851" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218 66.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25853" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.8 93.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25855" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -227 55.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25857" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.2 60.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25859" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -190.3 80.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25861" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.1 50.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25863" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239.5 78.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25865" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.7 79.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25867" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -177.8 77.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25869" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.9 54.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25871" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -244.1 96.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25873" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.7 77.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25875" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.5 44.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25877" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -203.6 70.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25879" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -210.8 63.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25881" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.4 58.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25883" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -225 100.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25885" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.3 51.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25887" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.2 93.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25889" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.3 41.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25891" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201.3 49.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25893" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -220.4 67.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25895" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -242.3 59.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25897" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -242.1 53.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25899" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -221.6 81.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25901" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179.9 83.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25903" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.5 89.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25905" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.3 89.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25907" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.3 68.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25909" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -256.2 44.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25911" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.6 59.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25913" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.1 56.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25915" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.8 75.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25917" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -199.9 101)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25919" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.3 68.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25921" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.8 55.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25923" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.6 50.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25925" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.3 92.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25927" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -181.7 69.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25929" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -205.2 88.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25931" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -207.7 95.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25933" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -208.9 91.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25935" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.2 61.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25937" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179 55.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25939" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -232.4 81.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25941" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.8 67.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25943" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -234.5 51.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25945" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.8 57.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25947" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -195.3 72.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25949" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.1 89.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25951" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.6 66.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25953" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -197.5 98.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25955" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.9 95.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25957" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.6 70.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25959" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.3 82.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25961" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -190 59.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25963" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.9 84.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25965" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -223.1 80.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25967" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -217 56.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25969" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -253.5 59.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25971" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.9 81.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25973" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -207.7 97.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25975" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.8 66.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25977" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.2 55.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25979" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -224.3 99.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25981" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -246.2 91.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25983" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -216 57.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25985" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -189.7 94.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25987" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217.9 80.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25989" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.9 84.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25991" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.1 60.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25993" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.4 60.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25995" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -193.5 47.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25997" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.4 59.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25999" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -237.6 47.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26001" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -232.8 100.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26003" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177.6 45.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26005" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.4 92.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26007" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.8 54.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26009" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.2 82.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26011" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -256.9 69.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26013" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -191.9 98.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26015" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -219.2 89.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26017" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.3 81.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26019" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -227.2 97.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26021" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -230.9 90.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26023" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.2 82.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26025" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.3 57.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26027" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.9 51.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26029" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -193.4 66.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26031" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.7 96.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26033" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.3 55.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26035" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -168.7 60.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26037" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -198.5 51.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26039" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.5 58.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26041" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.9 91.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26043" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.3 84.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26045" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -234.1 94.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26047" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -232.6 86.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26049" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -196.1 77.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26051" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -175 58.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26053" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.1 93.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26055" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -253.3 88.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26057" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -209.8 59.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26059" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.9 100.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26061" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -219.4 47.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26063" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254.7 67.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26065" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.5 73.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26067" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.9 71.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26069" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.7 74.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26071" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -188.1 99.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26073" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -211.8 83.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26075" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -243.5 58.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26077" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -227.7 53.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26079" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -209.7 56.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26081" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.5 45.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26083" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -246.2 82.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26085" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -188.9 73.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26087" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.6 65.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26089" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -254 60.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26091" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -195.6 94.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26093" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191 58.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26095" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221.8 57.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26097" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.9 81.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26099" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -234.4 64.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26101" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.9 53.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26103" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.2 62.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26105" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.7 57.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26107" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -219.2 73.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26109" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -198.1 81.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26111" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -188.7 64.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26113" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.1 96.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26115" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.9 82.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26117" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.8 74.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26119" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.6 96.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26121" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -248.6 90.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26123" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.2 44.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26125" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -185.6 77.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26127" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.5 74.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26129" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.7 47.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26131" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.2 84.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26133" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -244.1 100.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26135" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -189.5 85.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26137" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -212 96.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26139" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -234.9 43.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26141" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200 52.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26143" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.3 89.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26145" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -217 46.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26147" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256 89.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26149" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.6 96.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26151" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.4 53.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26153" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.9 65.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26155" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -188.5 79.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26157" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -217.7 70.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26159" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.4 72.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26161" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -209.6 74.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26163" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -194.7 48.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26165" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -175.9 74.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26167" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 101.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26169" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -242 76.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26171" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.3 100.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26173" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188 72.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26175" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -253.2 59.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26177" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.1 53.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26179" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203 53.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26181" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250.1 98.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26183" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -234.6 94.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26185" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.1 95.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26187" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -217.4 55.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26189" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.6 82.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26191" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -169.5 98.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26193" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -181 58.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26195" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.5 97.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26197" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -241 92.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26199" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.8 91.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26201" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.1 56.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26203" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.8 61.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26205" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.2 66.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26207" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.6 71.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26209" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -179.6 99.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26211" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -216 87.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26213" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192 75.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26215" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201.7 90.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26217" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -198.9 97.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26219" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.7 56.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26221" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -175.7 88.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26223" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231 69.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26225" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -255.4 78.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26227" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -243.5 71.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26229" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -208.4 89.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26231" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.1 100.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26233" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -169.8 88.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26235" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -241.4 81.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26237" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226.5 80.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26239" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.8 102.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26241" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.7 69.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26243" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.9 91.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26245" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.5 43.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26247" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -234.6 92.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26249" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179.9 93.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26251" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 67.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26253" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -255.2 61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26255" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.6 67.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26257" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -198.3 85.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26259" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.9 79.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26261" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -241.3 52.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26263" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.9 98.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26265" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -208.9 73.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26267" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -245.7 64.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26269" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -204.8 48.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26271" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.3 52.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26273" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -237.3 53.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26275" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.3 58.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26277" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.9 93.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26279" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -203 86.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26281" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170.5 94.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26283" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -205.8 73.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26285" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -218.1 91.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26287" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -196.4 88.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26289" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -194.3 63.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26291" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -192.9 49.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26293" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -174.3 91.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26295" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.9 86.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26297" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.6 53.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26299" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -176.4 70.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26301" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.4 49.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26303" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -207.8 81.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26305" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.7 77.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26307" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -228.9 68.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26309" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.2 65.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26311" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.8 74.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26313" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -210 90.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26315" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177.9 83.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26317" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.1 92.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26319" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214 42.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26321" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -188.8 95.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26323" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182.4 68.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26325" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -213.6 65.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26327" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -235.7 78.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26329" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.7 95.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26331" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.8 70.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26333" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192.9 77.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26335" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -258.4 93.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26337" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -196.6 76.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26339" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.4 89.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26341" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222 73.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26343" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -212.5 49.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26345" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -228.9 43.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26347" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -189.8 61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26349" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.5 54.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26351" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -183.2 61.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26353" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.9 67.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26355" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.2 56.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26357" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.7 65.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26359" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -229.4 47.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26361" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.4 80.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26363" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -212.6 71.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26365" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.5 58.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26367" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -257.1 75.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26369" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.8 88.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26371" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.6 72.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26373" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -193.4 56.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26375" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.9 99.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26377" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.9 76.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26379" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.8 73.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26381" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -174.5 68.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26383" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.3 73.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26385" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -233 98.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26387" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.5 54.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26389" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -236 63.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26391" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192 50)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26393" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.1 59.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26395" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -239.1 102.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26397" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.3 70.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26399" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.7 96.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26401" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.4 68.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26403" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233.6 60.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26405" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.4 53.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26407" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -170.3 92.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26409" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.7 68.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26411" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.7 53.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26413" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.2 84.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26415" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.4 85.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26417" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224 73.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26419" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.6 52.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26421" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245 68.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26423" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.7 95.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26425" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.9 53.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26427" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229 94.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26429" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252 95.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26431" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.8 59.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26433" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -199.3 64.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26435" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -190.6 97.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26437" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.1 71.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26439" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238.7 91.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26441" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -211.9 44.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26443" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.6 52.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26445" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.6 48.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26447" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -251 62.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26449" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.4 58.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26451" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218.3 46.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26453" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -211.1 58.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26455" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -230.6 101)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26457" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -219 46.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26459" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.3 67.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26461" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.8 59.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26463" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -226.5 71.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26465" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.6 67.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26467" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -255.5 96.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26469" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.2 62.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26471" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177 49.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26473" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -221.6 67.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26475" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -242.3 51.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26477" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -186.8 42.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26479" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -213.3 52.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26481" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.6 87.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26483" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.6 74.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26485" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -242.5 84.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26487" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -202.9 91.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26489" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -214 49.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26491" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -207.5 56.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26493" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.5 54.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26495" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -224.2 63.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26497" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228 64.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26499" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -188.7 54.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26501" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -236.6 82.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26503" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -238.7 55.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26505" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.7 93.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26507" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.1 98.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26509" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -196.4 58.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26511" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -188.8 60.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26513" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -256.5 67.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26515" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -252.1 52.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26517" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -235.9 73.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26519" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.7 94.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26521" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.5 73.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26523" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.2 75.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26525" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -244.4 83.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26527" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -184.2 85.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26529" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.2 54.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26531" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.3 65.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26533" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222 57.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26535" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -244.2 93.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26537" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.8 93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26539" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.7 51.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26541" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -178.5 61.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26543" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.8 51.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26545" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.4 61.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26547" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -201.7 73.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26549" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -211.6 66.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26551" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.7 68.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26553" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250.7 87.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26555" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.6 51.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26557" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -224.4 92.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26559" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -248.1 89.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26561" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -253.1 52.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26563" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -197.2 71.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26565" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252.7 80.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26567" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178 96.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26569" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -244.4 93.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26571" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -226.6 48.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26573" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.1 54.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26575" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -238.3 80.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26577" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.9 96.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26579" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -175.9 49.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26581" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.9 86.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26583" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.4 70.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26585" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -208.8 70.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26587" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202 53.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26589" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229 69.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26591" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -253.4 62.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26593" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -252.5 65.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26595" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.7 86.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26597" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -174.6 64.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26599" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -229.6 56.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26601" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -213.7 86.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26603" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.8 85.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26605" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.2 72.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26607" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -185.2 63.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26609" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -247.3 80.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26611" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -206 72.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26613" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -254 70.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26615" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.7 93.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26617" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.2 59.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26619" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218.8 89.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26621" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -225 84.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26623" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.6 91.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26625" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.4 97.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26627" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -252.7 97.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26629" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.9 94.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26631" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256.5 58.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26633" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.9 44.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26635" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.7 51.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26637" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.4 73.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26639" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.6 50.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26641" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -201 69.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26643" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196.8 94.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26645" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.1 94.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26647" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.1 67.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26649" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -214.2 58.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26651" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.7 82.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26653" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -189 48.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26655" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197 46.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26657" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.4 56.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26659" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -247.8 93.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26661" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.2 64.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26663" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -252.1 47.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26665" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.4 74.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26667" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -257.3 77.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26669" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -233 79.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26671" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.9 48.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26673" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.3 60.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26675" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220.9 52.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26677" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -252.6 67.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26679" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.5 48.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26681" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -206.6 60.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26683" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.5 94.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26685" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -224.1 48.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26687" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -242.6 82.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26689" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226.8 83.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26691" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.4 88.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26693" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.1 41.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26695" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.2 93.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26697" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -211.4 97.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26699" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226.1 82.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26701" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.2 78.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26703" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.7 92.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26705" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -230.1 85.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26707" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.9 84.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26709" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.5 62.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26711" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.7 99.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26713" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.2 85.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26715" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -184.3 54.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26717" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.9 91.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26719" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.5 88.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26721" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.1 72.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26723" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.7 77.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26725" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -180.4 57.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26727" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.3 89.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26729" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187 95.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26731" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -192.8 59.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26733" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -242.4 76.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26735" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226.4 74.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26737" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -173.2 83.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26739" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.4 62.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26741" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.5 76.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26743" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -239.1 78.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26745" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.4 72.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26747" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254.3 80.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26749" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.2 93.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26751" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -246.1 79.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26753" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.3 58.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26755" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.6 61.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26757" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -260.1 96.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26759" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.2 54.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26761" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.6 52.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26763" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.4 62.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26765" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187 42.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26767" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -235.1 58.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26769" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -206.8 98.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26771" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.3 45.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26773" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -193.4 48.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26775" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239.3 48.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26777" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.6 47.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26779" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -208.6 55.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26781" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -220.8 83.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26783" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -213.7 91.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26785" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226.9 74.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26787" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238.1 84.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26789" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -177.6 61.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26791" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -189.1 54.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26793" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -210.7 74.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26795" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -248.3 100.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26797" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207 89.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26799" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -235.5 98.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26801" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191.1 82.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26803" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -176.3 72.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26805" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.6 99.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26807" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.6 53.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26809" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -253.8 69.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26811" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -215.6 48.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26813" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.8 54.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26815" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257 67.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26817" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -249.9 99.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26819" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.6 49.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26821" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -169.2 75.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26823" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256.2 94.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26825" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.8 82.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26827" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -191 52.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26829" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -197.3 65.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26831" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.9 78.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26833" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170 55.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26835" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.1 96.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26837" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179.3 83.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26839" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -246.9 100.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26841" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.8 93.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26843" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -201.8 76.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26845" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -202 65.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26847" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -215.1 78.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26849" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252.2 50.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26851" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221.1 47.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26853" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.8 48.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26855" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193 90.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26857" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -239.8 74.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26859" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -241.4 43.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26861" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -190.8 79.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26863" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182 94.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26865" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -195.7 53.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26867" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.9 50.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26869" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.6 61.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26871" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.5 78.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26873" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.6 53.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26875" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.5 51.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26877" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.9 49.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26879" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.9 46.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26881" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -198.6 48.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26883" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -240.2 89.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26885" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -237.2 73.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26887" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -191.8 97.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26889" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.3 72.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26891" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.5 67.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26893" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.1 49.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26895" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -259.6 54.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26897" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -188 93.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26899" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -227 73.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26901" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -197.7 55.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26903" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.3 62.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26905" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -178 51.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26907" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.4 48.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26909" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.8 49.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26911" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.4 55.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26913" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.9 98.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26915" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -174.6 95.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26917" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.9 66.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26919" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190.2 43.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26921" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.8 59.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26923" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.4 67.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26925" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.4 56.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26927" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.3 47.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26929" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234 52.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26931" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -254.2 74.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26933" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -233.9 41.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26935" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.2 78.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26937" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.4 89.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26939" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.4 94.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26941" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.7 88.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26943" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -242.3 88.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26945" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -185.4 61.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26947" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -208 80.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26949" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221 59.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26951" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.9 46.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26953" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -239.9 86.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26955" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233.3 58.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26957" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -208.2 64.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26959" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -210.6 92.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26961" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.4 81.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26963" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.5 98.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26965" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.5 62.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26967" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.8 51.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26969" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194 73.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26971" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.1 75.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26973" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -254.7 58.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26975" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -232.9 95.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26977" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.9 52.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26979" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.3 68.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26981" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.3 73.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26983" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -253.8 68.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26985" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.2 67.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26987" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.7 54.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26989" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.9 93.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26991" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230 73.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26993" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -207.1 55.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26995" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -189.5 83.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26997" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -241.7 50.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26999" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -196.1 65.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27001" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -176.5 90.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27003" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179.8 48.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27005" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.2 47.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27007" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.5 54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27009" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.5 89.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27011" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.3 83.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27013" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.7 56.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27015" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -210.9 69.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27017" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -215.5 89.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27019" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.1 46.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27021" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.1 87.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27023" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.4 52.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27025" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -214.4 76.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27027" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.5 72.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27029" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.3 96.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27031" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -168.9 72.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27033" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -184.5 81.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27035" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.7 82.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27037" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207.7 94.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27039" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.6 67.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27041" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.9 95.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27043" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -214.7 91.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27045" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -216.4 79.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27047" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.2 93.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27049" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -198.7 60.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27051" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190 76.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27053" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.4 55.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27055" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -196.9 63.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27057" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.9 92.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27059" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.4 51.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27061" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -247.7 59.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27063" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -191.5 65.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27065" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.3 71.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27067" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.2 47.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27069" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -256.5 86.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27071" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -214.6 90.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27073" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -180 47.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27075" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.3 65.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27077" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.8 56.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27079" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -240.5 92.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27081" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.1 75.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27083" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.7 53.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27085" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -168.3 71.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27087" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -240.8 96.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27089" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.1 43.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27091" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.8 102.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27093" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.3 59.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27095" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.1 99.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27097" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235 83.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27099" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.5 73.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27101" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -205.8 53.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27103" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -251.8 93.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27105" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -181.9 47.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27107" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -213.6 50.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27109" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.4 81.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27111" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.2 79.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27113" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -229.2 71.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27115" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.8 50.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27117" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -247.2 67.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27119" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.4 69.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27121" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -252.9 88.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27123" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206 45.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27125" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -201.4 93.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27127" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -197.5 50.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27129" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -214.4 51.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27131" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -232.3 56.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27133" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -240.5 62.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27135" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.5 52.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27137" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -225.1 81.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27139" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.4 90.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27141" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.2 56.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27143" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.6 73.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27145" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -221.8 73.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27147" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.4 69.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27149" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -205.7 71.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27151" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.1 78.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27153" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226.8 67.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27155" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -216.1 98.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27157" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.3 52.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27159" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.5 49.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27161" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -186.9 66.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27163" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.6 62.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27165" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.4 58.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27167" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.4 61.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27169" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -246.8 55.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27171" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.8 56.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27173" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.8 46.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27175" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.5 79.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27177" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.7 98.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27179" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.5 86.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27181" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -190 63.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27183" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.6 86.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27185" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.5 61.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27187" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -208.4 103.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27189" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.5 47.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27191" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.1 92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27193" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -223.8 57.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27195" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186.7 79.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27197" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.3 49.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27199" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.9 65.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27201" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.3 65.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27203" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -207.3 56.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27205" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234.9 75.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27207" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -245.6 70.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27209" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -206.1 54.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27211" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -211.5 95.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27213" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.4 80.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27215" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.6 76.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27217" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -259.2 47.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27219" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -221.4 43.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27221" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -202.9 68.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27223" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.2 92.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27225" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -239.2 71.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27227" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.6 47.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27229" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.2 44.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27231" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192 90.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27233" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.9 43.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27235" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182.3 49.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27237" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.1 89.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27239" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -195.3 60.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27241" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.8 77.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27243" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.7 62.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27245" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -234.4 82.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27247" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.6 96.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27249" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.7 51.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27251" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.5 53.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27253" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -202.9 52.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27255" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.7 43.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27257" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.1 89.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27259" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -212.1 66.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27261" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.5 91.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27263" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.1 64.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27265" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245 52.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27267" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -184 50.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27269" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.7 73.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27271" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201 69.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27273" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -257.8 97.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27275" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193 59.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27277" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.6 72.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27279" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.7 76.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27281" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -216.5 44.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27283" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175 91.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27285" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -244.3 82.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27287" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -184 54.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27289" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228.4 70.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27291" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -235 50.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27293" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.9 65.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27295" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.4 77.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27297" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.8 69.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27299" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -188.4 78.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27301" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234.9 60.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27303" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196.7 46.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27305" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.6 70.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27307" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182.1 83.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27309" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -227.9 58.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27311" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.2 69.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27313" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -174.2 61.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27315" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190.2 92.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27317" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.6 85.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27319" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -207.9 72.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27321" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.2 54.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27323" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -215.4 58.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27325" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -174.8 54.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27327" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255 89.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27329" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -204.3 76.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27331" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -169.7 96.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27333" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.4 98.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27335" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -205.6 99.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27337" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.6 71.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27339" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187 42.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27341" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -256.3 55.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27343" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -200.6 90.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27345" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -258.8 84.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27347" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180 69.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27349" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -227.7 70.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27351" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.6 71.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27353" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.3 61.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27355" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -197.1 61.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27357" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -233.5 59.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27359" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -232.8 71.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27361" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -209 69.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27363" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249 72.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27365" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.2 93.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27367" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.7 86.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27369" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -200.6 88.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27371" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.8 53.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27373" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -172.7 63.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27375" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -228.4 98.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27377" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.9 71.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27379" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -177.6 56.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27381" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226.3 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27383" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.9 76.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27385" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.9 59.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27387" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.2 79.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27389" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -217.2 82.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27391" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -255.4 71.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27393" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -247.3 78.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27395" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.3 82.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27397" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -219.7 92.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27399" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -178.4 43.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27401" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -240.9 58.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27403" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223 102.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27405" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218.7 86.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27407" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.7 73.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27409" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -216.7 93.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27411" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -236.8 92.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27413" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.7 97.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27415" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.2 99.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27417" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -191.3 57.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27419" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -186.1 90.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27421" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -200.8 97.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27423" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238.8 49.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27425" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.6 76.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27427" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 97.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27429" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.5 101.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27431" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.4 67.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27433" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.2 53.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27435" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -200.4 77.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27437" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -242.4 63.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27439" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -242.8 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27441" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -188.6 77.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27443" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -248.6 70.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27445" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.6 95.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27447" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.1 79.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27449" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252.7 77.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27451" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217 95.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27453" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -255 49.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27455" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.8 45.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27457" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -211.5 60.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27459" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187.7 62.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27461" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.4 93.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27463" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -188.8 91.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27465" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.4 51.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27467" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.8 67.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27469" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.7 73.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27471" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.4 60.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27473" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.1 87.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27475" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -214.9 99.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27477" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.9 81.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27479" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -187.9 86.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27481" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.1 93.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27483" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.7 43.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27485" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -236.1 84.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27487" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.5 54.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27489" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.6 73.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27491" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.3 55.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27493" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.9 46.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27495" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233 91.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27497" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.7 59.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27499" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -204.5 65.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27501" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.5 90.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27503" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -197.2 81.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27505" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -210.8 79.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27507" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.4 93.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27509" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191.6 90.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27511" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199 100.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27513" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.9 48.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27515" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.9 55.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27517" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -257.5 56.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27519" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190.6 42.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27521" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -230.2 56.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27523" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -233.7 75.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27525" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229.5 62.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27527" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -230.7 81.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27529" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -254.7 61.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27531" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.2 49.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27533" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.5 86.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27535" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 47.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27537" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.8 79.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27539" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.2 46.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27541" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170.1 95.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27543" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.7 55.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27545" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.3 79.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27547" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.5 61.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27549" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.8 63.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27551" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -184 55.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27553" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -225.4 76.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27555" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.3 93.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27557" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -206.2 47.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27559" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -245.6 63.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27561" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.6 50.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27563" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.1 45.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27565" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182 82.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27567" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.8 74.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27569" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.4 70.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27571" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -252.1 61.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27573" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.6 69.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27575" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.8 49.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27577" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -203.2 91.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27579" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.2 84.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27581" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.9 92.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27583" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174 58.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27585" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.6 49.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27587" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -216.4 65.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27589" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -215.8 53.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27591" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -222.3 89.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27593" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.4 64.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27595" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.5 92.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27597" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -196.4 63.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27599" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254.4 92.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27601" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.8 73.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27603" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256 98.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27605" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -217.6 67.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27607" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -219.2 83.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27609" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.2 64.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27611" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -231.2 50.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27613" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.6 93.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27615" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.1 83.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27617" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -237.2 96.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27619" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -209 102.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27621" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.5 92.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27623" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.7 50.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27625" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -224.5 61.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27627" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.7 85.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27629" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226 93.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27631" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -190.1 77.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27633" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.5 86.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27635" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.8 90.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27637" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -224.2 74.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27639" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -244.9 42.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27641" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -253.7 88.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27643" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -218.9 53.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27645" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.8 100.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27647" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.4 81.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27649" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228.1 47.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27651" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -244.7 79.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27653" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -234.5 94.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27655" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -230.4 46.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27657" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -207.9 69.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27659" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.7 60.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27661" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -200 72.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27663" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233.2 88.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27665" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -228.8 53.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27667" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -251.8 65.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27669" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218 84.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27671" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -203.6 90.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27673" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.5 73.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27675" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -227.8 91.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27677" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.2 77.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27679" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -227.5 61.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27681" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -178.1 47.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27683" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -224.9 65.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27685" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.7 50.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27687" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.5 96.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27689" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -242.1 85.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27691" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -254.5 71.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27693" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.5 70.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27695" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220 86.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27697" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.5 92.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27699" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -223.9 55.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27701" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.5 45.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27703" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.6 53.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27705" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204 75.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27707" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -195.6 50.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27709" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -240 97.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27711" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.5 97.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27713" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -201.8 92.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27715" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.2 48.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27717" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.8 63.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27719" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -237 71.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27721" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -211.1 68.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27723" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.4 50.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27725" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.2 73.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27727" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -225.8 51.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27729" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -210.3 51.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27731" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.8 89.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27733" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -246.9 71.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27735" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.7 42.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27737" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.3 53.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27739" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -231.8 49.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27741" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218 48.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27743" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.1 52.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27745" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.1 54.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27747" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -198.1 60.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27749" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -241.4 59.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27751" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -245.1 63.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27753" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.3 55.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27755" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -227.7 54.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27757" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.6 84.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27759" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.4 46.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27761" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.8 50.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27763" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.9 87.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27765" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250.3 53.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27767" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -238.1 91.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27769" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -250.6 74.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27771" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.6 65.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27773" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.7 79.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27775" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -242.8 77.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27777" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.3 67.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27779" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -196.8 45.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27781" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234 96.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27783" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256.8 56.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27785" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -231.3 95.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27787" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.8 96.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27789" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.5 66.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27791" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.4 89.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27793" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -210.7 68.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27795" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196 61.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27797" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.7 87.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27799" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.9 70.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27801" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.5 99.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27803" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.4 45.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27805" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -175.9 66.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27807" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.5 46.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27809" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -231.8 47.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27811" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -258.8 102.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27813" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -193.8 73.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27815" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.9 47.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27817" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.7 65.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27819" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -200.2 55.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27821" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.5 48.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27823" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -184.5 77.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27825" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.5 80.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27827" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.1 93.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27829" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -227.8 93.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27831" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.4 60.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27833" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -240.3 51.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27835" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -225.9 56.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27837" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.3 64.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27839" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -218.1 62.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27841" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.1 68.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27843" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230 81.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27845" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.7 80.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27847" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217 59.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27849" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -215 47.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27851" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.3 83.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27853" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.1 98.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27855" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -202.9 68.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27857" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -216.7 62.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27859" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.8 49.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27861" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -202.4 88.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27863" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -247.1 68.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27865" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.1 71.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27867" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.7 74.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27869" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -209.2 73.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27871" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -241.1 102.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27873" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.4 85.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27875" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.7 69.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27877" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -238.5 55.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27879" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.2 91.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27881" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -232.7 79.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27883" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -169.3 50.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27885" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.8 91.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27887" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.9 52.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27889" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -178.8 64.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27891" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186.3 86.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27893" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.1 54.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27895" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217 71.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27897" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -213.6 98.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27899" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.5 77.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27901" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -203.8 72.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27903" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -208.7 67.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27905" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -225.4 74.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><filter id="filter27927"><feGaussianBlur stdDeviation="0.071512502"/></filter><radialGradient id="radialGradient27939" cx="59.98" cy="120.8" r="29.46" gradientTransform="matrix(1.879 -5.004e-7 5.925e-8 .2084 -52.74 95.65)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><filter id="filter27965" x="-.05577" y="-.5665" width="1.112" height="2.133"><feGaussianBlur stdDeviation="1.3689748"/></filter><linearGradient id="linearGradient27979" x1="-80.1" x2="-89.99" y1="78.44" y2="115.8" gradientTransform="matrix(1 0 0 1.01 -8 -1.313)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient27989" x1="86.69" x2="90.05" y1="100.8" y2="100.8" gradientTransform="translate(1)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter28003" x="-.2549" y="-.02261" width="1.51" height="1.045"><feGaussianBlur stdDeviation="0.35662617"/></filter><filter id="filter28031" x="-.1467" y="-.1015" width="1.293" height="1.203"><feGaussianBlur stdDeviation="0.55"/></filter><clipPath id="clipPath28041"><rect x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" opacity=".1836"/></clipPath><clipPath id="clipPath28045"><rect x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" opacity=".1836"/></clipPath><filter id="filter28101"><feGaussianBlur stdDeviation="0.04177847"/></filter><radialGradient id="radialGradient28110" cx="16" cy="18" r="4" gradientTransform="matrix(1,0,0,1.5,0,-9)" gradientUnits="userSpaceOnUse"><stop stop-color="#7a7a7a" offset="0"/><stop stop-opacity=".4909" offset="1"/></radialGradient><linearGradient id="linearGradient28112" x1="16" x2="16" y1="1.595" y2="18.76" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient28114" cx="14" cy="19.7" r="2.15" fy="18.84" gradientTransform="matrix(1.106 0 0 1.106 .5471 -2.299)" gradientUnits="userSpaceOnUse"><stop stop-color="#868385" offset="0"/><stop stop-color="#4a4949" offset="1"/></radialGradient><linearGradient id="linearGradient28116" x1="11.92" x2="11.92" y1="17.56" y2="20.04" gradientTransform="matrix(1.106 0 0 1.106 .5471 -2.299)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop offset="1"/></linearGradient><linearGradient id="linearGradient28138" x1="60.25" x2="60.25" y1="122" y2="118.5" gradientTransform="matrix(1 0 0 1.01 8 -1.313)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter3849"><feGaussianBlur stdDeviation="0.31468463"/></filter><filter id="filter3825"><feGaussianBlur stdDeviation="0.6715998"/></filter><filter id="filter3797"><feGaussianBlur stdDeviation="1.8568431"/></filter><linearGradient id="linearGradient3291"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient6026" cx="63.91" cy="115.7" r="63.91" fx="14.05" gradientTransform="matrix(1 0 0 .1978 0 92.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3291"/><linearGradient id="linearGradient6028" x1="63.91" x2="87.76" y1="80" y2="94" gradientTransform="matrix(1.376 0 0 1.857 -22.55 -92.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3291"/><radialGradient id="radialGradient6030" cx="42.62" cy="120.6" r="3.407" gradientTransform="matrix(1.909 1.839 -8.622 7.577 1010 -881.4)" gradientUnits="userSpaceOnUse"><stop stop-color="#b4942a" offset="0"/><stop stop-color="#e4dcc9" offset="1"/></radialGradient><linearGradient id="linearGradient6032" x1="75.85" x2="81.45" y1="72.8" y2="77.05" gradientTransform="matrix(.9986 0 0 .9999 .1404 .005323)" gradientUnits="userSpaceOnUse"><stop stop-color="#252525" offset="0"/><stop stop-color="#252525" offset=".2935"/><stop stop-color="#252525" offset=".4537"/><stop offset="1"/></linearGradient><linearGradient id="linearGradient6034" x1="76.71" x2="80.58" y1="83.33" y2="87.15" gradientTransform="matrix(.9986 0 0 .9999 .1404 .005323)" gradientUnits="userSpaceOnUse"><stop stop-color="#d4a100" stop-opacity=".9765" offset="0"/><stop stop-color="#ffc712" offset="1"/></linearGradient><linearGradient id="linearGradient6036" x1="11.33" x2="14.49" y1="57.38" y2="57.38" gradientTransform="matrix(1.288 1.174 -.5466 .6213 81.69 27.89)" gradientUnits="userSpaceOnUse"><stop stop-color="#9a7600" offset="0"/><stop stop-color="#e3ad00" offset=".09292"/><stop stop-color="#ffcd2c" offset=".5043"/><stop stop-color="#e3ad00" offset=".9157"/><stop stop-color="#b98d00" offset="1"/></linearGradient><linearGradient id="linearGradient6038" x1="114.9" x2="100.7" y1="-22.56" y2="-22.05" gradientTransform="matrix(.9992 0 0 .9993 .1084 -.09037)" gradientUnits="userSpaceOnUse"><stop stop-color="#980000" offset="0"/><stop stop-color="#db5c5c" offset="1"/></linearGradient><linearGradient id="linearGradient6040" x1="-12.82" x2="82.17" y1="7.462" y2="7.462" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient6042" cx="34.68" cy="7.462" r="47.6" gradientTransform="matrix(-1.51 .002641 -.0001167 -.00911 87.05 7.439)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><linearGradient id="linearGradient6044" x1="33.34" x2="24.45" y1="117.8" y2="107.4" gradientTransform="matrix(.6182 0 0 .6233 24.11 47.99)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-color="#515151" offset="1"/></linearGradient><linearGradient id="linearGradient6046" x1="48.5" x2="48.73" y1=".8115" y2="2.366" gradientTransform="matrix(1.673 1.519 -1.501 1.693 18.68 -24.47)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient6048" x1="92.23" x2="96.58" y1="54.12" y2="57.15" gradientTransform="matrix(.9973 0 0 .9998 .2807 .01065)" gradientUnits="userSpaceOnUse"><stop stop-color="#ea3838" offset="0"/><stop stop-color="#c40000" offset="1"/></linearGradient><radialGradient id="radialGradient6050" cx="49.01" cy="2.674" r="1.725" gradientTransform="matrix(2.26 0 0 .2752 -2.259 -25.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><radialGradient id="radialGradient6052" cx="49.01" cy="2.674" r="1.725" gradientTransform="matrix(1.551 0 0 .1873 21.62 -31.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><radialGradient id="radialGradient6054" cx="49.01" cy="2.674" r="1.725" gradientTransform="matrix(1.55 0 0 .1877 -193.2 -23.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/></defs><g><rect transform="matrix(1 0 0 1.01 8 -1.313)" x="30.53" y="117.9" width="58.92" height="5.8" rx=".7219" ry=".2886" fill="url(#radialGradient27939)" filter="url(#filter27965)"/><path d="m24 121h14v-1h58.2v1h27.8v-4l-103.3-6.998 3.289 11z" fill="url(#radialGradient3583)" fill-rule="evenodd" filter="url(#filter3565)"/><path d="m24 121h14v-1h60v1h29v-4l-106.3-0.9977 3.289 4.998z" fill-rule="evenodd" filter="url(#filter3444)" stroke="#000" stroke-width="1px"/><path d="m19.36 8c-1.809 0-3.361 1.625-3.36 3.327v98.93l10.64 10.65h98c2.953 0 3.36-0.3472 3.36-3.327v-106.3c0-1.813-1.558-3.327-3.36-3.327h-105.3z" fill="url(#linearGradient3250)"/></g><path transform="translate(8.3 76.48)" d="m24.69-69.48v56.66h78.1v-56.66h-78.1z" clip-path="url(#clipPath3008)" fill="none" filter="url(#filter3105)" stroke="#000" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round" stroke-width=".7"/><g><rect x="34" y="8" width="76" height="54" rx="1.235" ry="1.235" fill="url(#radialGradient3083)"/><rect x="34.15" y="8" width="3.849" height="53.92" rx=".9246" ry=".9246" fill="#cfdce7" opacity=".6133"/><rect x="106" y="8.5" width="3.794" height="53.47" rx=".8972" ry=".9246" fill="#cfdce7" opacity=".5469"/><rect x="34.02" y="63.42" width="75.09" height=".7289" fill="url(#radialGradient3117)" filter="url(#filter3726)"/></g><path transform="translate(8 176.9)" d="m12.38-168.3c-2.953 0-4.375 0.3641-4.375 3.344v0.7812c0-2.98 1.422-3.312 4.375-3.312h103.2c2.953 0 4.375 0.3328 4.375 3.312v-0.7812c0-2.98-1.422-3.344-4.375-3.344h-103.2z" clip-path="url(#clipPath3215)" fill-opacity=".3584" filter="url(#filter3371)"/><path d="m19.38 8.6c-2.056 0.1072-3.375 0.7053-3.375 3.312v0.5938c0-2.98 1.422-3.312 4.375-3.312h103.2c2.953 0 4.375 0.3328 4.375 3.312v-0.5938c0-2.98-1.422-3.312-4.375-3.312h-103.2c-0.3692 0-0.7062-0.01531-1 0z" fill="#fff" fill-opacity=".469" filter="url(#filter3417)"/><path d="m112.3 8.626c-0.1011 0-0.1885 0.03692-0.2812 0.0625-0.1043 0.02875-0.1916 0.06873-0.2812 0.125-0.08551 0.05367-0.1504 0.1133-0.2188 0.1875-0.02858 0.03101-0.06863 0.05969-0.09375 0.09375-0.0337 0.0406-0.06548 0.08064-0.09375 0.125-0.09343 0.169-0.1562 0.3571-0.1562 0.5625v51.38h0.4062v-51.38c0-0.2114 0.0889-0.3901 0.1875-0.5625h11.91c2.953 0 4.375 0.3328 4.375 3.312v-0.5938c0-2.607-1.316-3.177-3.375-3.281h-12.12c0.05359-0.00807 0.1003-0.03125 0.1562-0.03125h-0.4062zm-93.22 0.03125c-1.625 0.1537-2.962 0.7744-3 2.875 0.1211-2.06 1.759-2.312 4.344-2.312h12c0.1066 0.1773 0.1562 0.3733 0.1562 0.5938v51.38h0.4062v-51.38c0-0.2205-0.04966-0.4164-0.1562-0.5938-0.04526-0.07529-0.09582-0.156-0.1562-0.2188-0.09373-0.1056-0.2187-0.1909-0.3438-0.25-0.1163-0.05505-0.2344-0.09375-0.375-0.09375h-0.5-12.38zm-3 2.875c-0.002439 0.1347-0.03125 0.2589-0.03125 0.4062v0.5938c0-0.3725 0.01396-0.7057 0.03125-1z" fill="url(#linearGradient3453)" filter="url(#filter3417)" opacity=".2695"/><path d="m123.4 8.6c2.953 0 3.775 0.3328 3.775 3.312v103.3c0 2.979-2.822 5.312-5.775 5.312h0.7188c2.953 0 5.344-2.333 5.344-5.312v-103.3c0-2.98-0.3903-3.312-3.344-3.312h-0.7188z" fill="url(#linearGradient3474)"/><g fill="#b2c6d9" fill-rule="evenodd"><path d="m40 16.12v3.954h64v-3.954h-64z" opacity=".5652"/><path d="m40.03 32.23v3.89h64v-3.89h-64z" opacity=".5652"/><path d="m40 48.2v4h64v-4h-64z" opacity=".5652"/></g><g><path d="m109.4 8v53.81c0.183-0.1016 0.2943-0.251 0.4062-0.4v-53.41h-0.4062z" fill="#fff"/><path d="m34.11 8 0.01367 53.3c0.1031 0.1999 0.2525 0.338 0.4062 0.4703l-0.01367-53.77h-0.4062z" fill="#fff"/><path transform="translate(24.39 -52.35)" d="m16.78 130.4c-1.483 0-2.656 1.205-2.656 2.688v42.03c0 1.483 1.173 2.656 2.656 2.656h0.1562c-0.4078-0.4464-0.6875-1.032-0.6875-1.688v-39.97c0-1.391 1.112-2.531 2.5-2.531h65.59c1.388 0 2.5 1.14 2.5 2.531v39.97c2e-6 0.6557-0.2485 1.241-0.6562 1.688h0.125c1.483 0 2.688-1.173 2.688-2.656v-42.03c0-1.483-1.205-2.688-2.688-2.688h-69.53z" clip-path="url(#clipPath3199)" fill="url(#linearGradient3712)" filter="url(#filter3659)"/></g><path d="m42.54 80.01c-1.419 0-2.562 1.143-2.562 2.562l0.02469 37.15h72l-0.02469-37.15c0-1.419-1.143-2.562-2.562-2.562h-66.88z" fill-opacity=".1283"/><g><path d="m42.58 80.07c-1.419 0-2.562 1.143-2.562 2.562v37.18l71.98-0.1166v-37.18c0-1.419-1.143-2.562-2.562-2.562l-66.86 0.1166z" fill="url(#radialGradient3704)" opacity=".07422"/><path transform="matrix(1 0 0 1.01 8 -1.313)" d="m52.94 84c-0.5196 0-0.9375 0.418-0.9375 0.9375v23.06h-11.06c-0.5196 0-0.9375 0.418-0.9375 0.9375v6.125c0 0.5196 0.4179 0.9375 0.9375 0.9375h12 10.12c0.5196 0 0.9375-0.418 0.9375-0.9375v-6.125-24c0-0.5196-0.4179-0.9375-0.9375-0.9375h-10.12z" fill="url(#linearGradient3281)" filter="url(#filter3271)"/><rect x="41.01" y="77.6" width="69.52" height="1.5" fill="url(#radialGradient3692)" opacity=".3777"/><g fill-rule="evenodd"><path d="m111.9 8.735-0.75 0.6875 0.9375 0.0625-0.1875-0.75z" fill="url(#radialGradient3094)" filter="url(#filter3120)"/><path transform="matrix(-1 0 0 1 56.06 0)" d="m23.91 8.735-0.75 0.6875 0.9375 0.0625-0.1875-0.75z" fill="url(#radialGradient3126)" filter="url(#filter3120)"/><path transform="matrix(.9876 0 0 1 8.717 .2)" d="m112.1 97.38v6.719h-1.219-1.031l4.344 7.531 4.344-7.531h-1.031-1.219v-6.719h-2.094-2.094z" fill="url(#linearGradient3142)" filter="url(#filter3192)" opacity=".4531" stroke="#fff" stroke-width=".1"/></g><rect transform="matrix(1 0 0 1.01 8 -1.313)" x="87.69" y="81.91" width="3.358" height="37.85" fill="url(#linearGradient27989)" filter="url(#filter28003)" opacity=".2969"/><path d="m42.54 80.32c-1.177 0-2.125 0.9576-2.125 2.147l0.1768 38.07h55.41v-38.21c0-1.189-0.8228-2.004-2-2.004h-51.46zm6.396 8.032h14.12c0.5196 0 0.9375 0.4223 0.9375 0.9472v21.6c0 0.5249-0.418 0.9472-0.9375 0.9472h-14.12c-0.5196 0-0.9375-0.4223-0.9375-0.9472v-21.6c0-0.5249 0.418-0.9472 0.9375-0.9472z" fill="url(#linearGradient3221)"/></g><g transform="matrix(1 0 0 1.01 321.9 17.71)" clip-path="url(#clipPath25065)" filter="url(#filter27927)" opacity=".1836"><rect x="-290.8" y="84.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17393)" opacity=".1875"/><rect x="-260" y="91.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17391)" opacity=".1875"/><rect x="-256.9" y="109.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17389)" opacity=".1875"/><rect x="-288.1" y="76.49" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17405)" opacity=".4688"/><rect x="-236.1" y="96.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17403)" opacity=".4688"/><rect x="-269.2" y="89.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17401)" opacity=".4688"/><rect x="-242.4" y="67.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18149)" opacity=".1875"/><rect x="-283.7" y="80.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18147)" opacity=".1875"/><rect x="-255.3" y="84.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18145)" opacity=".1875"/><rect x="-274.8" y="106.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18143)" opacity=".4688"/><rect x="-281.6" y="102.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18141)" opacity=".4688"/><rect x="-235.3" y="71.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18139)" opacity=".4688"/><rect x="-297.6" y="100.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18137)" opacity=".1875"/><rect x="-302.1" y="65.36" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18135)" opacity=".1875"/><rect x="-267.5" y="69.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18133)" opacity=".1875"/><rect x="-276.9" y="99.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18131)" opacity=".4688"/><rect x="-258.5" y="101.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18129)" opacity=".4688"/><rect x="-226.4" y="75.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18127)" opacity=".4688"/><rect x="-295.3" y="69.59" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18125)" opacity=".1875"/><rect x="-232.6" y="71.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18123)" opacity=".1875"/><rect x="-231.3" y="77.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18121)" opacity=".1875"/><rect x="-307.4" y="105.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18119)" opacity=".4688"/><rect x="-299.4" y="62.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18117)" opacity=".4688"/><rect x="-226.4" y="99.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18115)" opacity=".4688"/><rect x="-260.9" y="56.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18113)" opacity=".1875"/><rect x="-269.1" y="74.34" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18111)" opacity=".1875"/><rect x="-244.1" y="98.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18109)" opacity=".1875"/><rect x="-244.5" y="67.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18107)" opacity=".4688"/><rect x="-286.7" y="64.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18105)" opacity=".4688"/><rect x="-263.8" y="69.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18103)" opacity=".4688"/><rect x="-300.2" y="79.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18101)" opacity=".1875"/><rect x="-299.4" y="104" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18099)" opacity=".1875"/><rect x="-244.8" y="105.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18097)" opacity=".1875"/><rect x="-257" y="65.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18095)" opacity=".4688"/><rect x="-258.9" y="69.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18093)" opacity=".4688"/><rect x="-305.3" y="97.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18091)" opacity=".4688"/><rect x="-243.3" y="57.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18089)" opacity=".1875"/><rect x="-277.4" y="79.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18087)" opacity=".1875"/><rect x="-278.2" y="103.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18085)" opacity=".1875"/><rect x="-254.4" y="77.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18083)" opacity=".4688"/><rect x="-227.7" y="87" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18081)" opacity=".4688"/><rect x="-246" y="101.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18079)" opacity=".4688"/><rect x="-279.6" y="79.22" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18077)" opacity=".1875"/><rect x="-240.7" y="85.52" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18075)" opacity=".1875"/><rect x="-233.3" y="66.15" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18073)" opacity=".1875"/><rect x="-255.9" y="99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18071)" opacity=".4688"/><rect x="-231.8" y="62.49" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18069)" opacity=".4688"/><rect x="-235.6" y="103.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18067)" opacity=".4688"/><rect x="-247.4" y="103.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18065)" opacity=".1875"/><rect x="-287.8" y="110.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18063)" opacity=".1875"/><rect x="-270.9" y="87.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18061)" opacity=".1875"/><rect x="-279.8" y="77.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18059)" opacity=".4688"/><rect x="-296.7" y="61.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18057)" opacity=".4688"/><rect x="-256.3" y="97.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18055)" opacity=".4688"/><rect x="-247.3" y="60.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18053)" opacity=".1875"/><rect x="-275.3" y="98.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18051)" opacity=".1875"/><rect x="-268.8" y="104.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18049)" opacity=".1875"/><rect x="-283.5" y="94.83" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18047)" opacity=".4688"/><rect x="-277.5" y="96.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18045)" opacity=".4688"/><rect x="-232.4" y="62.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18043)" opacity=".4688"/><rect x="-220" y="90.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18041)" opacity=".1875"/><rect x="-271.1" y="99.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18039)" opacity=".1875"/><rect x="-304.3" y="97.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18037)" opacity=".1875"/><rect x="-280.4" y="63.92" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18035)" opacity=".4688"/><rect x="-284.8" y="97.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18033)" opacity=".4688"/><rect x="-240.4" y="91.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18031)" opacity=".4688"/><rect x="-231.8" y="88.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18029)" opacity=".1875"/><rect x="-251.2" y="102.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18027)" opacity=".1875"/><rect x="-291.6" y="92.65" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18025)" opacity=".1875"/><rect x="-254.4" y="60.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18023)" opacity=".4688"/><rect x="-252.1" y="90.29" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18021)" opacity=".4688"/><rect x="-248.8" y="109.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18019)" opacity=".4688"/><rect x="-240.8" y="72.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18017)" opacity=".1875"/><rect x="-237.1" y="57.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18015)" opacity=".1875"/><rect x="-274.7" y="67.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18013)" opacity=".1875"/><rect x="-239.2" y="69.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18011)" opacity=".4688"/><rect x="-227.5" y="68.96" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18009)" opacity=".4688"/><rect x="-300.9" y="76.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18007)" opacity=".4688"/><rect x="-284.5" y="90.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18005)" opacity=".1875"/><rect x="-241.3" y="97.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18003)" opacity=".1875"/><rect x="-232.2" y="82.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18001)" opacity=".1875"/><rect x="-227.2" y="79.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17999)" opacity=".4688"/><rect x="-290.4" y="79.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17997)" opacity=".4688"/><rect x="-246.4" y="74.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17995)" opacity=".4688"/><rect x="-227.6" y="62.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17993)" opacity=".1875"/><rect x="-290.8" y="84.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17991)" opacity=".1875"/><rect x="-281.5" y="66.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17989)" opacity=".1875"/><rect x="-266.3" y="83.37" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17987)" opacity=".4688"/><rect x="-292.6" y="67.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17985)" opacity=".4688"/><rect x="-270.8" y="82.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17983)" opacity=".4688"/><rect x="-283.8" y="60.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17981)" opacity=".1875"/><rect x="-263.7" y="87.76" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17979)" opacity=".1875"/><rect x="-252.6" y="77.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17977)" opacity=".1875"/><rect x="-278" y="76.89" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17975)" opacity=".4688"/><rect x="-272.5" y="107.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17973)" opacity=".4688"/><rect x="-275.4" y="106.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17971)" opacity=".4688"/><rect x="-301.2" y="77.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17969)" opacity=".1875"/><rect x="-273.3" y="60.57" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17967)" opacity=".1875"/><rect x="-232.8" y="88.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17965)" opacity=".1875"/><rect x="-252.3" y="96.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17963)" opacity=".4688"/><rect x="-247" y="79.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17961)" opacity=".4688"/><rect x="-284.2" y="87.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17959)" opacity=".4688"/><rect x="-282.9" y="70.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17957)" opacity=".1875"/><rect x="-293.7" y="76.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17955)" opacity=".1875"/><rect x="-225.7" y="68.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17953)" opacity=".1875"/><rect x="-242.6" y="72.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17951)" opacity=".4688"/><rect x="-295.7" y="72.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17949)" opacity=".4688"/><rect x="-261.5" y="66.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17947)" opacity=".4688"/><rect x="-247.5" y="70.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17945)" opacity=".1875"/><rect x="-232.7" y="106.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17943)" opacity=".1875"/><rect x="-229.6" y="65.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17941)" opacity=".1875"/><rect x="-248.4" y="92.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17939)" opacity=".4688"/><rect x="-234.6" y="110.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17937)" opacity=".4688"/><rect x="-263.7" y="67.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17935)" opacity=".4688"/><rect x="-304.9" y="87.74" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17933)" opacity=".1875"/><rect x="-277" y="72.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17931)" opacity=".1875"/><rect x="-268.7" y="65.33" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17929)" opacity=".1875"/><rect x="-217.2" y="98.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17927)" opacity=".4688"/><rect x="-276.5" y="108.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25071)" opacity=".4688"/><rect x="-238" y="82.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25073)" opacity=".4688"/><rect x="-244.3" y="108.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25075)" opacity=".1875"/><rect x="-239.2" y="84.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25077)" opacity=".1875"/><rect x="-273.7" y="64.28" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25079)" opacity=".1875"/><rect x="-228.2" y="109.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25081)" opacity=".4688"/><rect x="-244.9" y="63.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25083)" opacity=".4688"/><rect x="-293.9" y="98.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25085)" opacity=".4688"/><rect x="-273.7" y="85.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25087)" opacity=".1875"/><rect x="-252.7" y="66.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25089)" opacity=".1875"/><rect x="-296.7" y="77.14" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25091)" opacity=".1875"/><rect x="-268" y="62.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25093)" opacity=".4688"/><rect x="-232.1" y="87.14" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25095)" opacity=".4688"/><rect x="-271" y="55.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25097)" opacity=".4688"/><rect x="-297.8" y="102" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25099)" opacity=".1875"/><rect x="-248.8" y="61.25" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25101)" opacity=".1875"/><rect x="-262.9" y="63.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25103)" opacity=".1875"/><rect x="-303.5" y="101.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25105)" opacity=".4688"/><rect x="-240.8" y="77.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25107)" opacity=".4688"/><rect x="-244.8" y="95.28" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25109)" opacity=".4688"/><rect x="-252.4" y="55.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25111)" opacity=".1875"/><rect x="-230.8" y="101.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25113)" opacity=".1875"/><rect x="-298.6" y="109.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25115)" opacity=".1875"/><rect x="-284.5" y="107" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25117)" opacity=".4688"/><rect x="-273.8" y="66.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25119)" opacity=".4688"/><rect x="-277.4" y="66.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25121)" opacity=".4688"/><rect x="-269.1" y="56.06" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25123)" opacity=".1875"/><rect x="-294.4" y="68.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25125)" opacity=".1875"/><rect x="-228.1" y="55.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25127)" opacity=".1875"/><rect x="-278" y="86.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25129)" opacity=".4688"/><rect x="-256.2" y="110.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25131)" opacity=".4688"/><rect x="-287.1" y="60.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25133)" opacity=".4688"/><rect x="-254" y="103.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25135)" opacity=".1875"/><rect x="-235" y="88.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25137)" opacity=".1875"/><rect x="-265.4" y="94.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25139)" opacity=".1875"/><rect x="-279" y="104" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25141)" opacity=".4688"/><rect x="-285.1" y="84.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25143)" opacity=".4688"/><rect x="-294.5" y="101.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25145)" opacity=".4688"/><rect x="-272.4" y="90.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25147)" opacity=".1875"/><rect x="-226.2" y="99.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25149)" opacity=".1875"/><rect x="-272.7" y="86.15" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25151)" opacity=".1875"/><rect x="-303.2" y="79.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25153)" opacity=".4688"/><rect x="-261" y="67.34" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25155)" opacity=".4688"/><rect x="-305.7" y="93.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25157)" opacity=".4688"/><rect x="-291.2" y="88.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25159)" opacity=".1875"/><rect x="-300.6" y="59.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25161)" opacity=".1875"/><rect x="-253.1" y="73.11" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25163)" opacity=".1875"/><rect x="-280.6" y="91.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25165)" opacity=".4688"/><rect x="-246.5" y="67.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25167)" opacity=".4688"/><rect x="-228.4" y="93.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25169)" opacity=".4688"/><rect x="-271.9" y="90.88" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25171)" opacity=".1875"/><rect x="-263.3" y="103.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25173)" opacity=".1875"/><rect x="-273" y="106.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25175)" opacity=".1875"/><rect x="-303.7" y="55.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25177)" opacity=".4688"/><rect x="-302.1" y="89.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25179)" opacity=".4688"/><rect x="-295.9" y="102.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25181)" opacity=".4688"/><rect x="-224.7" y="81.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25183)" opacity=".1875"/><rect x="-273.1" y="89.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25185)" opacity=".1875"/><rect x="-296" y="100.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25187)" opacity=".1875"/><rect x="-271.2" y="80.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25189)" opacity=".4688"/><rect x="-297.4" y="77.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25191)" opacity=".4688"/><rect x="-289.1" y="72.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25193)" opacity=".4688"/><rect x="-242.2" y="106.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25195)" opacity=".1875"/><rect x="-276.1" y="69.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25197)" opacity=".1875"/><rect x="-230.5" y="62.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25199)" opacity=".1875"/><rect x="-298" y="85.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25201)" opacity=".4688"/><rect x="-305.4" y="101.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25203)" opacity=".4688"/><rect x="-286.2" y="92.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25205)" opacity=".4688"/><rect x="-264.9" y="102.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25207)" opacity=".1875"/><rect x="-299.1" y="68.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25209)" opacity=".1875"/><rect x="-277.9" y="81.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25211)" opacity=".1875"/><rect x="-225.5" y="99.24" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25213)" opacity=".4688"/><rect x="-251" y="104.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25215)" opacity=".4688"/><rect x="-277.5" y="96.04" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25217)" opacity=".4688"/><rect x="-298.1" y="91.46" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25219)" opacity=".1875"/><rect x="-265.7" y="57.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25221)" opacity=".1875"/><rect x="-274" y="92.45" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25223)" opacity=".1875"/><rect x="-292.5" y="87.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25225)" opacity=".4688"/><rect x="-225.5" y="71.13" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25227)" opacity=".4688"/><rect x="-294.5" y="69.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25229)" opacity=".4688"/><rect x="-235.5" y="71.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25231)" opacity=".1875"/><rect x="-281.4" y="88.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25233)" opacity=".1875"/><rect x="-260.6" y="79.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25235)" opacity=".1875"/><rect x="-244.1" y="67.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25237)" opacity=".4688"/><rect x="-225.3" y="68.25" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25239)" opacity=".4688"/><rect x="-295.7" y="88.57" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25241)" opacity=".4688"/><rect x="-221.4" y="61.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25243)" opacity=".1875"/><rect x="-272.9" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25245)" opacity=".1875"/><rect x="-276.9" y="76.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25247)" opacity=".1875"/><rect x="-262.3" y="97.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25249)" opacity=".4688"/><rect x="-242.4" y="90.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25251)" opacity=".4688"/><rect x="-261.1" y="77.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25253)" opacity=".4688"/><rect x="-296.4" y="62.67" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25255)" opacity=".1875"/><rect x="-230.6" y="75.02" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25257)" opacity=".1875"/><rect x="-277" y="58.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25259)" opacity=".1875"/><rect x="-290.9" y="63.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25261)" opacity=".4688"/><rect x="-277.2" y="85.29" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25263)" opacity=".4688"/><rect x="-278" y="86.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25265)" opacity=".4688"/><rect x="-227.8" y="111.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25267)" opacity=".1875"/><rect x="-234.5" y="110.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25269)" opacity=".1875"/><rect x="-261.9" y="74.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25271)" opacity=".1875"/><rect x="-269.1" y="84.88" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25273)" opacity=".4688"/><rect x="-270" y="86.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25275)" opacity=".4688"/><rect x="-271" y="92.41" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25277)" opacity=".4688"/><rect x="-264.6" y="70.23" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25279)" opacity=".1875"/><rect x="-237.1" y="80" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25281)" opacity=".1875"/><rect x="-226.5" y="95.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25283)" opacity=".1875"/><rect x="-231" y="99.06" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25285)" opacity=".4688"/><rect x="-271" y="85.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25287)" opacity=".4688"/><rect x="-298.4" y="90.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25289)" opacity=".4688"/><rect x="-283.8" y="62.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25291)" opacity=".1875"/><rect x="-234.9" y="75.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25293)" opacity=".1875"/><rect x="-242" y="90.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25295)" opacity=".1875"/><rect x="-270.4" y="106.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25297)" opacity=".4688"/><rect x="-259.9" y="92.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25299)" opacity=".4688"/><rect x="-245.6" y="100.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25301)" opacity=".4688"/><rect x="-296.3" y="63.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25303)" opacity=".1875"/><rect x="-229.4" y="72.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25305)" opacity=".1875"/><rect x="-280.9" y="110.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25307)" opacity=".1875"/><rect x="-293.6" y="74.37" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25309)" opacity=".4688"/><rect x="-265.1" y="79.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25311)" opacity=".4688"/><rect x="-270.1" y="102" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25313)" opacity=".4688"/><rect x="-286.8" y="109.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25315)" opacity=".1875"/><rect x="-269" y="98.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25317)" opacity=".1875"/><rect x="-279.6" y="89.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25319)" opacity=".1875"/><rect x="-244.3" y="81.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25321)" opacity=".4688"/><rect x="-276.3" y="109.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25323)" opacity=".4688"/><rect x="-245.4" y="109" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25325)" opacity=".4688"/><rect x="-235.2" y="110.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25327)" opacity=".1875"/><rect x="-297" y="93.96" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25329)" opacity=".1875"/><rect x="-229.8" y="66.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25331)" opacity=".1875"/><rect x="-284" y="86.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25333)" opacity=".4688"/><rect x="-277.6" y="104.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25335)" opacity=".4688"/><rect x="-251.8" y="70.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25337)" opacity=".4688"/><rect x="-270.2" y="84.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25339)" opacity=".1875"/><rect x="-293" y="96.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25341)" opacity=".1875"/><rect x="-231.7" y="78.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25343)" opacity=".1875"/><rect x="-306.4" y="59.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25345)" opacity=".4688"/><rect x="-227" y="95.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25347)" opacity=".4688"/><rect x="-304.8" y="102.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25349)" opacity=".4688"/><rect x="-246.9" y="69.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25351)" opacity=".1875"/><rect x="-242.2" y="87.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25353)" opacity=".1875"/><rect x="-270.9" y="92.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25355)" opacity=".1875"/><rect x="-257.4" y="90.87" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25357)" opacity=".4688"/><rect x="-277" y="79.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25359)" opacity=".4688"/><rect x="-242.7" y="104.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25361)" opacity=".4688"/><rect x="-240.3" y="62.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25363)" opacity=".1875"/><rect x="-285.7" y="60.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25365)" opacity=".1875"/><rect x="-251.5" y="107.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25367)" opacity=".1875"/><rect x="-270.8" y="90.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25369)" opacity=".4688"/><rect x="-290.2" y="76.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25371)" opacity=".4688"/><rect x="-282.3" y="104.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25373)" opacity=".4688"/><rect x="-222.2" y="75.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25375)" opacity=".1875"/><rect x="-254.3" y="99.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25377)" opacity=".1875"/><rect x="-270.6" y="84.16" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25379)" opacity=".1875"/><rect x="-249.2" y="97.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25381)" opacity=".4688"/><rect x="-294.7" y="105.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25383)" opacity=".4688"/><rect x="-290.2" y="62.65" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25385)" opacity=".4688"/><rect x="-264.6" y="96.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25387)" opacity=".1875"/><rect x="-259" y="55.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25389)" opacity=".1875"/><rect x="-292.6" y="68.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25391)" opacity=".1875"/><rect x="-230.4" y="66.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25393)" opacity=".4688"/><rect x="-233.1" y="93.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25395)" opacity=".4688"/><rect x="-301.6" y="98.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25397)" opacity=".4688"/><rect x="-288.2" y="74.24" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25399)" opacity=".1875"/><rect x="-236.7" y="100.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25401)" opacity=".1875"/><rect x="-230.1" y="80.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25403)" opacity=".1875"/><rect x="-291.6" y="64.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25405)" opacity=".4688"/><rect x="-239.8" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25407)" opacity=".4688"/><rect x="-232.7" y="99.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25409)" opacity=".4688"/><rect x="-234.7" y="65.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25411)" opacity=".1875"/><rect x="-272.7" y="74.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25413)" opacity=".1875"/><rect x="-253" y="58.99" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25415)" opacity=".1875"/><rect x="-234.8" y="94.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25417)" opacity=".4688"/><rect x="-236.9" y="100.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25419)" opacity=".4688"/><rect x="-245.5" y="104.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25421)" opacity=".4688"/><rect x="-274.4" y="57.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25423)" opacity=".1875"/><rect x="-227" y="98.72" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25425)" opacity=".1875"/><rect x="-251" y="84.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25427)" opacity=".1875"/><rect x="-240.1" y="110.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25429)" opacity=".4688"/><rect x="-262.9" y="94.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25431)" opacity=".4688"/><rect x="-237.4" y="83.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25433)" opacity=".4688"/><rect x="-271.8" y="75.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25435)" opacity=".1875"/><rect x="-229.5" y="95.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25437)" opacity=".1875"/><rect x="-245.9" y="63.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25439)" opacity=".1875"/><rect x="-236.8" y="72.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25441)" opacity=".4688"/><rect x="-284.6" y="106.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25443)" opacity=".4688"/><rect x="-268.9" y="60.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25445)" opacity=".4688"/><rect x="-222.5" y="89.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25447)" opacity=".1875"/><rect x="-234.3" y="83.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25449)" opacity=".1875"/><rect x="-295.7" y="66.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25451)" opacity=".1875"/><rect x="-297.4" y="69.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25453)" opacity=".4688"/><rect x="-297.3" y="56.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25455)" opacity=".4688"/><rect x="-242.9" y="81.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25457)" opacity=".4688"/><rect x="-280.3" y="79.49" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25459)" opacity=".1875"/><rect x="-238.1" y="88.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25461)" opacity=".1875"/><rect x="-250.3" y="86.61" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25463)" opacity=".1875"/><rect x="-257" y="91.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25465)" opacity=".4688"/><rect x="-255.3" y="60.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25467)" opacity=".4688"/><rect x="-250.3" y="76.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25469)" opacity=".4688"/><rect x="-271.8" y="110.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25471)" opacity=".1875"/><rect x="-226.6" y="83.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25473)" opacity=".1875"/><rect x="-266.8" y="75.16" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25475)" opacity=".1875"/><rect x="-266" y="89.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25477)" opacity=".4688"/><rect x="-255.2" y="76.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25479)" opacity=".4688"/><rect x="-299.2" y="110.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25481)" opacity=".4688"/><rect x="-252.9" y="93.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25483)" opacity=".1875"/><rect x="-237" y="63.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25485)" opacity=".1875"/><rect x="-259.4" y="77.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25487)" opacity=".1875"/><rect x="-306.4" y="84.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25489)" opacity=".4688"/><rect x="-248.1" y="100.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25491)" opacity=".4688"/><rect x="-248.6" y="102.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25493)" opacity=".4688"/><rect x="-223.5" y="64.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25495)" opacity=".1875"/><rect x="-231.5" y="98.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25497)" opacity=".1875"/><rect x="-249.8" y="102.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25499)" opacity=".1875"/><rect x="-247.6" y="62.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25501)" opacity=".4688"/><rect x="-302" y="81.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25503)" opacity=".4688"/><rect x="-233.8" y="80.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25505)" opacity=".4688"/><rect x="-293.5" y="83.52" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25507)" opacity=".1875"/><rect x="-231.5" y="67.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25509)" opacity=".1875"/><rect x="-233.4" y="103.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25511)" opacity=".1875"/><rect x="-224.9" y="62.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25513)" opacity=".4688"/><rect x="-268.1" y="78.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25515)" opacity=".4688"/><rect x="-272.5" y="98.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25517)" opacity=".4688"/><rect x="-228.5" y="68.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25519)" opacity=".1875"/><rect x="-281" y="68.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25521)" opacity=".1875"/><rect x="-234" y="70.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25523)" opacity=".1875"/><rect x="-267" y="107.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25525)" opacity=".4688"/><rect x="-243.4" y="109.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25527)" opacity=".4688"/><rect x="-292.8" y="65.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25529)" opacity=".4688"/><rect x="-222.6" y="86.89" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25531)" opacity=".1875"/><rect x="-303.6" y="81.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25533)" opacity=".1875"/><rect x="-301.7" y="98.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25535)" opacity=".1875"/><rect x="-281.7" y="57.61" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25537)" opacity=".4688"/><rect x="-250.6" y="84.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25539)" opacity=".4688"/><rect x="-238.8" y="69.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25541)" opacity=".4688"/><rect x="-269.6" y="82.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25543)" opacity=".1875"/><rect x="-267.9" y="59.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25545)" opacity=".1875"/><rect x="-271.1" y="74.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25547)" opacity=".1875"/><rect x="-270.6" y="73.61" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25549)" opacity=".4688"/><rect x="-298.6" y="55.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25551)" opacity=".4688"/><rect x="-273.5" y="80.65" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25553)" opacity=".4688"/><rect x="-264" y="89.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25555)" opacity=".1875"/><rect x="-266.9" y="80.69" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25557)" opacity=".1875"/><rect x="-290.8" y="110.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25559)" opacity=".1875"/><rect x="-252.5" y="75.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25561)" opacity=".4688"/><rect x="-226.5" y="103.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25563)" opacity=".4688"/><rect x="-263" y="56.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25565)" opacity=".4688"/><rect x="-250.9" y="102.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25567)" opacity=".1875"/><rect x="-251.5" y="109.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25569)" opacity=".1875"/><rect x="-227.8" y="95.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25571)" opacity=".1875"/><rect x="-259.2" y="77.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25573)" opacity=".4688"/><rect x="-258.9" y="95.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25575)" opacity=".4688"/><rect x="-255.7" y="76.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25577)" opacity=".4688"/><rect x="-249.5" y="102.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25579)" opacity=".1875"/><rect x="-256.2" y="67.56" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25581)" opacity=".1875"/><rect x="-284.1" y="85.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25583)" opacity=".1875"/><rect x="-293.3" y="60.74" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25585)" opacity=".4688"/><rect x="-282.1" y="68.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25587)" opacity=".4688"/><rect x="-240.2" y="66" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25589)" opacity=".4688"/><rect x="-218.8" y="86.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25591)" opacity=".1875"/><rect x="-241.1" y="101.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25593)" opacity=".1875"/><rect x="-272.5" y="88.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25595)" opacity=".1875"/><rect x="-241" y="101.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25597)" opacity=".4688"/><rect x="-239.3" y="58.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25599)" opacity=".4688"/><rect x="-229.4" y="57.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25601)" opacity=".4688"/><rect x="-221.9" y="57.53" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25603)" opacity=".1875"/><rect x="-234.3" y="97.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25605)" opacity=".1875"/><rect x="-263.5" y="66.16" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25607)" opacity=".1875"/><rect x="-255.9" y="91.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25609)" opacity=".4688"/><rect x="-279" y="62.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25611)" opacity=".4688"/><rect x="-247.8" y="60.99" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25613)" opacity=".4688"/><rect x="-226.1" y="85.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25615)" opacity=".1875"/><rect x="-297" y="87.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25617)" opacity=".1875"/><rect x="-254.6" y="66.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25619)" opacity=".1875"/><rect x="-227.6" y="84.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25621)" opacity=".4688"/><rect x="-241.9" y="83.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25623)" opacity=".4688"/><rect x="-278.5" y="99.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25625)" opacity=".4688"/><rect x="-234.6" y="100.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25627)" opacity=".1875"/><rect x="-233.2" y="92.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25629)" opacity=".1875"/><rect x="-276.5" y="61.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25631)" opacity=".1875"/><rect x="-261" y="88.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25633)" opacity=".4688"/><rect x="-233.6" y="99.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25635)" opacity=".4688"/><rect x="-295.5" y="58.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25637)" opacity=".4688"/><rect x="-276.3" y="86.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25639)" opacity=".1875"/><rect x="-298.9" y="103.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25641)" opacity=".1875"/><rect x="-245.8" y="72.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25643)" opacity=".1875"/><rect x="-226.8" y="85.67" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25645)" opacity=".4688"/><rect x="-234.6" y="89.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25647)" opacity=".4688"/><rect x="-291.4" y="82.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25649)" opacity=".4688"/><rect x="-242.3" y="75.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25651)" opacity=".1875"/><rect x="-283.2" y="71.79" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25653)" opacity=".1875"/><rect x="-255.4" y="100.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25655)" opacity=".1875"/><rect x="-274.2" y="66.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25657)" opacity=".4688"/><rect x="-277.5" y="94.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25659)" opacity=".4688"/><rect x="-236.5" y="85.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25661)" opacity=".4688"/><rect x="-298.6" y="71.02" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25663)" opacity=".1875"/><rect x="-303.2" y="65.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25665)" opacity=".1875"/><rect x="-262.8" y="63.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25667)" opacity=".1875"/><rect x="-233.3" y="107.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25669)" opacity=".4688"/><rect x="-294.4" y="99.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25671)" opacity=".4688"/><rect x="-264.9" y="79.57" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25673)" opacity=".4688"/><rect x="-270.5" y="106.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25675)" opacity=".1875"/><rect x="-237.6" y="84.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25677)" opacity=".1875"/><rect x="-271" y="101.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25679)" opacity=".1875"/><rect x="-242.4" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25681)" opacity=".4688"/><rect x="-229.8" y="70.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25683)" opacity=".4688"/><rect x="-244.1" y="102.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25685)" opacity=".4688"/><rect x="-244" y="93.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25687)" opacity=".1875"/><rect x="-300.5" y="108.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25689)" opacity=".1875"/><rect x="-250.9" y="63.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25691)" opacity=".1875"/><rect x="-238.4" y="90.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25693)" opacity=".4688"/><rect x="-271.5" y="89.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25695)" opacity=".4688"/><rect x="-272.6" y="62.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25697)" opacity=".4688"/><rect x="-227.9" y="73.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25699)" opacity=".1875"/><rect x="-288.8" y="86.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25701)" opacity=".1875"/><rect x="-264" y="110.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25703)" opacity=".1875"/><rect x="-305.2" y="94.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25705)" opacity=".4688"/><rect x="-227.5" y="74.36" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25707)" opacity=".4688"/><rect x="-290.6" y="95.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25709)" opacity=".4688"/><rect x="-292.8" y="90.89" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25711)" opacity=".1875"/><rect x="-278" y="94.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25713)" opacity=".1875"/><rect x="-262" y="91.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25715)" opacity=".1875"/><rect x="-218.4" y="68.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25717)" opacity=".4688"/><rect x="-286.1" y="103" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25719)" opacity=".4688"/><rect x="-303.5" y="76.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25721)" opacity=".4688"/><rect x="-218.2" y="67.52" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25723)" opacity=".1875"/><rect x="-279.8" y="84.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25725)" opacity=".1875"/><rect x="-273.6" y="71.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25727)" opacity=".1875"/><rect x="-283.4" y="86.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25729)" opacity=".4688"/><rect x="-302.4" y="82.16" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25731)" opacity=".4688"/><rect x="-264.7" y="82.55" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25733)" opacity=".4688"/><rect x="-292.3" y="80.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25735)" opacity=".1875"/><rect x="-286.4" y="78.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25737)" opacity=".1875"/><rect x="-286.2" y="105" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25739)" opacity=".1875"/><rect x="-287.8" y="69.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25741)" opacity=".4688"/><rect x="-306.5" y="106.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25743)" opacity=".4688"/><rect x="-250.6" y="95.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25745)" opacity=".4688"/><rect x="-250.9" y="58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25747)" opacity=".1875"/><rect x="-237.9" y="108.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25749)" opacity=".1875"/><rect x="-269.4" y="110.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25751)" opacity=".1875"/><rect x="-286.7" y="69.13" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25753)" opacity=".4688"/><rect x="-294.8" y="95.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25755)" opacity=".4688"/><rect x="-245" y="103.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25757)" opacity=".4688"/><rect x="-276.4" y="67.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25759)" opacity=".1875"/><rect x="-284.8" y="70.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25761)" opacity=".1875"/><rect x="-259" y="107.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25763)" opacity=".1875"/><rect x="-221.5" y="74.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25765)" opacity=".4688"/><rect x="-290.5" y="91.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25767)" opacity=".4688"/><rect x="-296.1" y="80.28" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25769)" opacity=".4688"/><rect x="-299.8" y="78.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25771)" opacity=".1875"/><rect x="-252.5" y="104.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25773)" opacity=".1875"/><rect x="-242.8" y="60.51" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25775)" opacity=".1875"/><rect x="-251.8" y="84.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25777)" opacity=".4688"/><rect x="-292.7" y="93.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25779)" opacity=".4688"/><rect x="-245" y="68.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25781)" opacity=".4688"/><rect x="-288.4" y="67.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25783)" opacity=".1875"/><rect x="-246.4" y="75.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25785)" opacity=".1875"/><rect x="-227.2" y="93.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25787)" opacity=".1875"/><rect x="-279.9" y="66.44" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25789)" opacity=".4688"/><rect x="-236.9" y="83.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25791)" opacity=".4688"/><rect x="-243.2" y="64.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25793)" opacity=".4688"/><rect x="-292.7" y="104.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25795)" opacity=".1875"/><rect x="-262.2" y="89.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25797)" opacity=".1875"/><rect x="-261" y="105.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25799)" opacity=".1875"/><rect x="-270.3" y="60.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25801)" opacity=".4688"/><rect x="-289.6" y="82.01" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25803)" opacity=".4688"/><rect x="-248" y="82.58" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25805)" opacity=".4688"/><rect x="-277.1" y="99.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25807)" opacity=".1875"/><rect x="-298.1" y="56.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25809)" opacity=".1875"/><rect x="-306.8" y="83.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25811)" opacity=".1875"/><rect x="-277.7" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25813)" opacity=".4688"/><rect x="-269.6" y="65.83" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25815)" opacity=".4688"/><rect x="-244" y="64.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25817)" opacity=".4688"/><rect x="-298.4" y="106" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25819)" opacity=".1875"/><rect x="-259.6" y="84.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25821)" opacity=".1875"/><rect x="-228.9" y="103.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25823)" opacity=".1875"/><rect x="-272" y="72.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25825)" opacity=".4688"/><rect x="-226.1" y="91.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25827)" opacity=".4688"/><rect x="-290.7" y="65.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25829)" opacity=".4688"/><rect x="-264.5" y="94.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25831)" opacity=".1875"/><rect x="-299.6" y="100" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25833)" opacity=".1875"/><rect x="-262.3" y="68.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25835)" opacity=".1875"/><rect x="-281.4" y="80.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25837)" opacity=".4688"/><rect x="-267.3" y="73.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25839)" opacity=".4688"/><rect x="-250.2" y="72.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25841)" opacity=".4688"/><rect x="-298.4" y="91.75" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25843)" opacity=".1875"/><rect x="-287.2" y="84.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25845)" opacity=".1875"/><rect x="-304.9" y="66.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25847)" opacity=".1875"/><rect x="-225" y="108" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25849)" opacity=".4688"/><rect x="-265.1" y="78.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25851)" opacity=".4688"/><rect x="-233.6" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25853)" opacity=".4688"/><rect x="-275.1" y="64.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25855)" opacity=".1875"/><rect x="-292.3" y="70.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25857)" opacity=".1875"/><rect x="-241.2" y="90.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25859)" opacity=".1875"/><rect x="-232.2" y="62.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25861)" opacity=".4688"/><rect x="-286.6" y="91.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25863)" opacity=".4688"/><rect x="-296.6" y="92.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25865)" opacity=".4688"/><rect x="-225.9" y="85.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25867)" opacity=".1875"/><rect x="-286" y="63.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25869)" opacity=".1875"/><rect x="-295" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25871)" opacity=".1875"/><rect x="-297.9" y="89.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25873)" opacity=".4688"/><rect x="-297.6" y="57.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25875)" opacity=".4688"/><rect x="-254.5" y="84.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25877)" opacity=".4688"/><rect x="-258.9" y="71.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25879)" opacity=".1875"/><rect x="-298.5" y="68.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25881)" opacity=".1875"/><rect x="-275.9" y="111.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25883)" opacity=".1875"/><rect x="-299.4" y="63.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25885)" opacity=".4688"/><rect x="-258.3" y="106.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25887)" opacity=".4688"/><rect x="-263.2" y="55.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25889)" opacity=".4688"/><rect x="-249.5" y="57.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25891)" opacity=".1875"/><rect x="-267.5" y="77.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25893)" opacity=".1875"/><rect x="-293.2" y="69.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25895)" opacity=".1875"/><rect x="-290.2" y="65.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25897)" opacity=".4688"/><rect x="-268.6" y="94.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25899)" opacity=".4688"/><rect x="-230.8" y="97.11" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25901)" opacity=".4688"/><rect x="-305.6" y="97.91" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25903)" opacity=".1875"/><rect x="-284.4" y="98.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25905)" opacity=".1875"/><rect x="-292.1" y="78.44" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25907)" opacity=".1875"/><rect x="-304.3" y="55.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25909)" opacity=".4688"/><rect x="-277.7" y="72.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25911)" opacity=".4688"/><rect x="-304.9" y="70.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25913)" opacity=".4688"/><rect x="-265" y="84.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25915)" opacity=".1875"/><rect x="-246.9" y="110.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25917)" opacity=".1875"/><rect x="-230.1" y="78.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25919)" opacity=".1875"/><rect x="-268.9" y="66.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25921)" opacity=".4688"/><rect x="-261.7" y="63.68" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25923)" opacity=".4688"/><rect x="-234.2" y="106.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25925)" opacity=".4688"/><rect x="-229.8" y="78.04" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25927)" opacity=".1875"/><rect x="-252.2" y="97.77" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25929)" opacity=".1875"/><rect x="-258.6" y="105.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25931)" opacity=".1875"/><rect x="-257" y="103.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25933)" opacity=".4688"/><rect x="-246.3" y="74.45" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25935)" opacity=".4688"/><rect x="-229.9" y="68.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25937)" opacity=".4688"/><rect x="-280.5" y="89.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25939)" opacity=".1875"/><rect x="-278.9" y="76.67" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25941)" opacity=".1875"/><rect x="-285.4" y="61.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25943)" opacity=".1875"/><rect x="-244" y="69.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25945)" opacity=".4688"/><rect x="-242.4" y="85.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25947)" opacity=".4688"/><rect x="-246" y="103.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25949)" opacity=".4688"/><rect x="-243.8" y="75.56" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25951)" opacity=".1875"/><rect x="-244.6" y="107.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25953)" opacity=".1875"/><rect x="-230.7" y="105.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25955)" opacity=".1875"/><rect x="-306.8" y="82.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25957)" opacity=".4688"/><rect x="-253.4" y="95.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25959)" opacity=".4688"/><rect x="-240.8" y="72.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25961)" opacity=".4688"/><rect x="-299" y="93.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25963)" opacity=".1875"/><rect x="-270.2" y="89.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25965)" opacity=".1875"/><rect x="-267.9" y="66.82" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25967)" opacity=".1875"/><rect x="-301.6" y="71.22" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25969)" opacity=".4688"/><rect x="-230" y="94.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25971)" opacity=".4688"/><rect x="-258.5" y="111.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25973)" opacity=".4688"/><rect x="-246.9" y="75.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25975)" opacity=".1875"/><rect x="-278.3" y="64.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25977)" opacity=".1875"/><rect x="-275.2" y="109.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25979)" opacity=".1875"/><rect x="-294.3" y="103.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25981)" opacity=".4688"/><rect x="-263.1" y="70.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25983)" opacity=".4688"/><rect x="-240.5" y="108.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25985)" opacity=".4688"/><rect x="-266" y="89.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25987)" opacity=".1875"/><rect x="-238" y="93.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25989)" opacity=".1875"/><rect x="-272" y="71.04" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25991)" opacity=".1875"/><rect x="-234.6" y="72.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25993)" opacity=".4688"/><rect x="-240.6" y="60.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25995)" opacity=".4688"/><rect x="-229.3" y="72.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25997)" opacity=".4688"/><rect x="-285.8" y="56.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25999)" opacity=".1875"/><rect x="-279.9" y="110" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26001)" opacity=".1875"/><rect x="-228.5" y="55.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26003)" opacity=".1875"/><rect x="-306.5" y="104" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26005)" opacity=".4688"/><rect x="-305.8" y="67.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26007)" opacity=".4688"/><rect x="-235" y="96.54" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26009)" opacity=".4688"/><rect x="-305.1" y="77.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26011)" opacity=".1875"/><rect x="-239" y="107.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26013)" opacity=".1875"/><rect x="-270.1" y="100.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26015)" opacity=".1875"/><rect x="-281.5" y="93.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26017)" opacity=".4688"/><rect x="-274.3" y="110.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26019)" opacity=".4688"/><rect x="-281.8" y="104.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26021)" opacity=".4688"/><rect x="-282.3" y="90.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26023)" opacity=".1875"/><rect x="-236.4" y="66.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26025)" opacity=".1875"/><rect x="-274.8" y="61.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26027)" opacity=".1875"/><rect x="-241.6" y="78.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26029)" opacity=".4688"/><rect x="-305.7" y="109.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26031)" opacity=".4688"/><rect x="-275.2" y="69.12" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26033)" opacity=".4688"/><rect x="-216.8" y="69.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26035)" opacity=".1875"/><rect x="-245.6" y="60.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26037)" opacity=".1875"/><rect x="-292.4" y="69.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26039)" opacity=".1875"/><rect x="-266.1" y="103.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26041)" opacity=".4688"/><rect x="-250.4" y="97.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26043)" opacity=".4688"/><rect x="-284.9" y="108.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26045)" opacity=".4688"/><rect x="-280.7" y="94.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26047)" opacity=".1875"/><rect x="-243.2" y="86.57" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26049)" opacity=".1875"/><rect x="-225.9" y="68.45" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26051)" opacity=".1875"/><rect x="-242.3" y="105.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26053)" opacity=".4688"/><rect x="-300.3" y="101.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26055)" opacity=".4688"/><rect x="-260.7" y="72.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26057)" opacity=".4688"/><rect x="-244.1" y="109.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26059)" opacity=".1875"/><rect x="-266.5" y="56.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26061)" opacity=".1875"/><rect x="-305.6" y="77.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26063)" opacity=".1875"/><rect x="-265.6" y="84.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26065)" opacity=".4688"/><rect x="-295" y="84.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26067)" opacity=".4688"/><rect x="-301.5" y="87.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26069)" opacity=".4688"/><rect x="-236.3" y="107.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26071)" opacity=".1875"/><rect x="-258.9" y="92.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26073)" opacity=".1875"/><rect x="-294.4" y="68.46" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26075)" opacity=".1875"/><rect x="-275.9" y="65.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26077)" opacity=".4688"/><rect x="-256.8" y="68.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26079)" opacity=".4688"/><rect x="-263.4" y="58.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26081)" opacity=".4688"/><rect x="-294.3" y="91.27" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26083)" opacity=".1875"/><rect x="-235.9" y="82.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26085)" opacity=".1875"/><rect x="-233.5" y="75.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26087)" opacity=".1875"/><rect x="-302.1" y="72.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26089)" opacity=".4688"/><rect x="-242.7" y="106.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26091)" opacity=".4688"/><rect x="-241.9" y="71.96" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26093)" opacity=".4688"/><rect x="-269.9" y="66.49" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26095)" opacity=".1875"/><rect x="-251" y="90.45" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26097)" opacity=".1875"/><rect x="-285.3" y="74.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26099)" opacity=".1875"/><rect x="-237" y="65.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26101)" opacity=".4688"/><rect x="-253.3" y="74.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26103)" opacity=".4688"/><rect x="-246.6" y="70.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26105)" opacity=".4688"/><rect x="-267.3" y="82.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26107)" opacity=".1875"/><rect x="-245.2" y="90.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26109)" opacity=".1875"/><rect x="-239.6" y="74.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26111)" opacity=".1875"/><rect x="-296.2" y="108.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26113)" opacity=".4688"/><rect x="-254" y="94.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26115)" opacity=".4688"/><rect x="-289.7" y="88.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26117)" opacity=".4688"/><rect x="-235.8" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26119)" opacity=".1875"/><rect x="-295.7" y="99.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26121)" opacity=".1875"/><rect x="-300.1" y="55.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26123)" opacity=".1875"/><rect x="-233.7" y="89.73" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26125)" opacity=".4688"/><rect x="-297.6" y="87.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26127)" opacity=".4688"/><rect x="-246.6" y="61.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26129)" opacity=".4688"/><rect x="-243.3" y="93.36" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26131)" opacity=".1875"/><rect x="-291.2" y="109.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26133)" opacity=".1875"/><rect x="-240.3" y="95.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26135)" opacity=".1875"/><rect x="-260.1" y="108.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26137)" opacity=".4688"/><rect x="-282" y="56.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26139)" opacity=".4688"/><rect x="-250.9" y="66.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26141)" opacity=".4688"/><rect x="-233.4" y="98.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26143)" opacity=".1875"/><rect x="-264.1" y="56.13" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26145)" opacity=".1875"/><rect x="-306.9" y="99.44" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26147)" opacity=".1875"/><rect x="-245.7" y="108.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26149)" opacity=".4688"/><rect x="-284.5" y="66.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26151)" opacity=".4688"/><rect x="-232.8" y="79.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26153)" opacity=".4688"/><rect x="-236.7" y="88.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26155)" opacity=".1875"/><rect x="-264.8" y="79.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26157)" opacity=".1875"/><rect x="-300.3" y="82.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26159)" opacity=".1875"/><rect x="-257.8" y="86.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26161)" opacity=".4688"/><rect x="-241.8" y="61.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26163)" opacity=".4688"/><rect x="-226.8" y="88.58" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26165)" opacity=".4688"/><rect x="-305.4" y="110.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26167)" opacity=".1875"/><rect x="-289.1" y="86.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26169)" opacity=".1875"/><rect x="-280.1" y="111.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26171)" opacity=".1875"/><rect x="-236.1" y="84.35" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26173)" opacity=".4688"/><rect x="-300.3" y="71.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26175)" opacity=".4688"/><rect x="-274" y="67.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26177)" opacity=".4688"/><rect x="-251.1" y="61.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26179)" opacity=".1875"/><rect x="-297.2" y="107.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26181)" opacity=".1875"/><rect x="-285.4" y="105.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26183)" opacity=".1875"/><rect x="-279.3" y="107.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26185)" opacity=".4688"/><rect x="-264.4" y="67.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26187)" opacity=".4688"/><rect x="-275.5" y="96.64" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26189)" opacity=".4688"/><rect x="-217.6" y="107.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26191)" opacity=".1875"/><rect x="-228.1" y="67.92" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26193)" opacity=".1875"/><rect x="-261.3" y="107.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26195)" opacity=".1875"/><rect x="-289.1" y="104.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26197)" opacity=".4688"/><rect x="-299.9" y="103.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26199)" opacity=".4688"/><rect x="-235" y="69.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26201)" opacity=".4688"/><rect x="-292.9" y="70.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26203)" opacity=".1875"/><rect x="-290.3" y="75.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26205)" opacity=".1875"/><rect x="-230.5" y="81.98" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26207)" opacity=".1875"/><rect x="-227.8" y="111.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26209)" opacity=".4688"/><rect x="-263.1" y="99.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26211)" opacity=".4688"/><rect x="-242.9" y="88.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26213)" opacity=".4688"/><rect x="-249.9" y="99.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26215)" opacity=".1875"/><rect x="-246" y="106.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26217)" opacity=".1875"/><rect x="-262.6" y="66.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26219)" opacity=".1875"/><rect x="-223.8" y="100.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26221)" opacity=".4688"/><rect x="-278.1" y="81.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26223)" opacity=".4688"/><rect x="-306.3" y="92.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26225)" opacity=".4688"/><rect x="-291.6" y="79.63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26227)" opacity=".1875"/><rect x="-255.5" y="98.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26229)" opacity=".1875"/><rect x="-274" y="110.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26231)" opacity=".1875"/><rect x="-218" y="100.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26233)" opacity=".4688"/><rect x="-288.4" y="93.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26235)" opacity=".4688"/><rect x="-277.4" y="94.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26237)" opacity=".4688"/><rect x="-223" y="111.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26239)" opacity=".1875"/><rect x="-275.8" y="78.43" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26241)" opacity=".1875"/><rect x="-227.8" y="101.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26243)" opacity=".1875"/><rect x="-293.6" y="55.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26245)" opacity=".4688"/><rect x="-281.7" y="105.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26247)" opacity=".4688"/><rect x="-230.8" y="107.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26249)" opacity=".4688"/><rect x="-305.3" y="75.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26251)" opacity=".1875"/><rect x="-302.3" y="70.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26253)" opacity=".1875"/><rect x="-300.5" y="77.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26255)" opacity=".1875"/><rect x="-246.5" y="97.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26257)" opacity=".4688"/><rect x="-237" y="92.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26259)" opacity=".4688"/><rect x="-292.2" y="66.24" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26261)" opacity=".4688"/><rect x="-283.1" y="106.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26263)" opacity=".1875"/><rect x="-256" y="82.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26265)" opacity=".1875"/><rect x="-296.6" y="75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26267)" opacity=".1875"/><rect x="-252.9" y="60.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26269)" opacity=".4688"/><rect x="-296.4" y="65.57" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26271)" opacity=".4688"/><rect x="-288.2" y="66.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26273)" opacity=".4688"/><rect x="-235.5" y="67.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26275)" opacity=".1875"/><rect x="-251.9" y="102.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26277)" opacity=".1875"/><rect x="-253.8" y="97.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26279)" opacity=".1875"/><rect x="-218.6" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26281)" opacity=".4688"/><rect x="-252.9" y="86.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26283)" opacity=".4688"/><rect x="-269" y="105.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26285)" opacity=".4688"/><rect x="-244.6" y="96.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26287)" opacity=".1875"/><rect x="-241.4" y="72.43" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26289)" opacity=".1875"/><rect x="-243.7" y="60.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26291)" opacity=".1875"/><rect x="-222.5" y="103.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26293)" opacity=".4688"/><rect x="-247" y="99.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26295)" opacity=".4688"/><rect x="-271.5" y="67.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26297)" opacity=".4688"/><rect x="-224.6" y="78.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26299)" opacity=".1875"/><rect x="-300.5" y="58.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26301)" opacity=".1875"/><rect x="-258.6" y="92.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26303)" opacity=".1875"/><rect x="-268.8" y="89.63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26305)" opacity=".4688"/><rect x="-276" y="81.23" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26307)" opacity=".4688"/><rect x="-290.1" y="79.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26309)" opacity=".4688"/><rect x="-299" y="83.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26311)" opacity=".1875"/><rect x="-257.1" y="99.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26313)" opacity=".1875"/><rect x="-228.8" y="94.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26315)" opacity=".1875"/><rect x="-293.2" y="104.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26317)" opacity=".4688"/><rect x="-261.1" y="55.01" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26319)" opacity=".4688"/><rect x="-239.7" y="109.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26321)" opacity=".4688"/><rect x="-230.5" y="76.61" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26323)" opacity=".1875"/><rect x="-260.7" y="75.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26325)" opacity=".1875"/><rect x="-286.6" y="88.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26327)" opacity=".1875"/><rect x="-242.9" y="107.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26329)" opacity=".4688"/><rect x="-239.9" y="83.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26331)" opacity=".4688"/><rect x="-243.8" y="91.03" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26333)" opacity=".4688"/><rect x="-306.5" y="102.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26335)" opacity=".1875"/><rect x="-243.7" y="86.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26337)" opacity=".1875"/><rect x="-297.2" y="99.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26339)" opacity=".1875"/><rect x="-270.1" y="85.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26341)" opacity=".4688"/><rect x="-259.6" y="62.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26343)" opacity=".4688"/><rect x="-279.7" y="57.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26345)" opacity=".4688"/><rect x="-237.9" y="69.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26347)" opacity=".1875"/><rect x="-237.5" y="63.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26349)" opacity=".1875"/><rect x="-234.1" y="71.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26351)" opacity=".1875"/><rect x="-233" y="79.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26353)" opacity=".4688"/><rect x="-250.3" y="69.43" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26355)" opacity=".4688"/><rect x="-234.6" y="79.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26357)" opacity=".4688"/><rect x="-277.6" y="56.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26359)" opacity=".1875"/><rect x="-283.5" y="90.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26361)" opacity=".1875"/><rect x="-263.4" y="82.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26363)" opacity=".1875"/><rect x="-243.6" y="70.87" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26365)" opacity=".4688"/><rect x="-304.2" y="88.39" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26367)" opacity=".4688"/><rect x="-290.6" y="101.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26369)" opacity=".4688"/><rect x="-242.7" y="81.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26371)" opacity=".1875"/><rect x="-240.5" y="65.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26373)" opacity=".1875"/><rect x="-279.8" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26375)" opacity=".1875"/><rect x="-267" y="88.22" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26377)" opacity=".4688"/><rect x="-302.9" y="85.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26379)" opacity=".4688"/><rect x="-225.3" y="82.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26381)" opacity=".4688"/><rect x="-298.5" y="82.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26383)" opacity=".1875"/><rect x="-280.1" y="108.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26385)" opacity=".1875"/><rect x="-259.3" y="64.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26387)" opacity=".1875"/><rect x="-284.2" y="74.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26389)" opacity=".4688"/><rect x="-239.1" y="62.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26391)" opacity=".4688"/><rect x="-246" y="72.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26393)" opacity=".4688"/><rect x="-287.2" y="110.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26395)" opacity=".1875"/><rect x="-268.4" y="79.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26397)" opacity=".1875"/><rect x="-245.6" y="106.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26399)" opacity=".1875"/><rect x="-242.5" y="80.42" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26401)" opacity=".4688"/><rect x="-280.7" y="73.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26403)" opacity=".4688"/><rect x="-286.3" y="67.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26405)" opacity=".4688"/><rect x="-218.5" y="100.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26407)" opacity=".1875"/><rect x="-275.7" y="77.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26409)" opacity=".1875"/><rect x="-260.5" y="63.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26411)" opacity=".1875"/><rect x="-299.3" y="96.52" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26413)" opacity=".4688"/><rect x="-244.4" y="98.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26415)" opacity=".4688"/><rect x="-274.8" y="86.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26417)" opacity=".4688"/><rect x="-219.7" y="61.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26419)" opacity=".1875"/><rect x="-292.1" y="77.87" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26421)" opacity=".1875"/><rect x="-287.6" y="105.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26423)" opacity=".1875"/><rect x="-282" y="65.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26425)" opacity=".4688"/><rect x="-276.1" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26427)" opacity=".4688"/><rect x="-302.9" y="109.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26429)" opacity=".4688"/><rect x="-248" y="67.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26431)" opacity=".1875"/><rect x="-246.4" y="73.77" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26433)" opacity=".1875"/><rect x="-241.5" y="107.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26435)" opacity=".1875"/><rect x="-265.3" y="83.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26437)" opacity=".4688"/><rect x="-285.8" y="104.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26439)" opacity=".4688"/><rect x="-262.8" y="58.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26441)" opacity=".4688"/><rect x="-233.7" y="60.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26443)" opacity=".1875"/><rect x="-293.7" y="57.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26445)" opacity=".1875"/><rect x="-301.9" y="72.83" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26447)" opacity=".1875"/><rect x="-219.6" y="70.46" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26449)" opacity=".4688"/><rect x="-265.4" y="58.77" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26451)" opacity=".4688"/><rect x="-262" y="72.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26453)" opacity=".4688"/><rect x="-278.7" y="109.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26455)" opacity=".1875"/><rect x="-266.1" y="55.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26457)" opacity=".1875"/><rect x="-236.2" y="77.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26459)" opacity=".1875"/><rect x="-230.9" y="71.36" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26461)" opacity=".4688"/><rect x="-273.5" y="84.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26463)" opacity=".4688"/><rect x="-289.5" y="81.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26465)" opacity=".4688"/><rect x="-303.6" y="104.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26467)" opacity=".1875"/><rect x="-284.3" y="71.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26469)" opacity=".1875"/><rect x="-227.9" y="59.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26471)" opacity=".1875"/><rect x="-269.7" y="79.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26473)" opacity=".4688"/><rect x="-289.3" y="64.18" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26475)" opacity=".4688"/><rect x="-237.7" y="56.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26477)" opacity=".4688"/><rect x="-261.4" y="61.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26479)" opacity=".1875"/><rect x="-230.7" y="97.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26481)" opacity=".1875"/><rect x="-297.4" y="85.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26483)" opacity=".1875"/><rect x="-290.6" y="96.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26485)" opacity=".4688"/><rect x="-250" y="104.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26487)" opacity=".4688"/><rect x="-264.9" y="63.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26489)" opacity=".4688"/><rect x="-255.6" y="65.27" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26491)" opacity=".1875"/><rect x="-256.6" y="64.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26493)" opacity=".1875"/><rect x="-275.1" y="73.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26495)" opacity=".1875"/><rect x="-276.1" y="76.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26497)" opacity=".4688"/><rect x="-235.8" y="67.02" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26499)" opacity=".4688"/><rect x="-287.5" y="95.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26501)" opacity=".4688"/><rect x="-286.9" y="64.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26503)" opacity=".1875"/><rect x="-234.8" y="102.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26505)" opacity=".1875"/><rect x="-272" y="108.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26507)" opacity=".1875"/><rect x="-244.6" y="70.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26509)" opacity=".4688"/><rect x="-235.9" y="73.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26511)" opacity=".4688"/><rect x="-307.4" y="81.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26513)" opacity=".4688"/><rect x="-300.2" y="60.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26515)" opacity=".1875"/><rect x="-283" y="82.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26517)" opacity=".1875"/><rect x="-233.6" y="105" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26519)" opacity=".1875"/><rect x="-232.6" y="85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26521)" opacity=".4688"/><rect x="-227.3" y="87.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26523)" opacity=".4688"/><rect x="-295.3" y="97.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26525)" opacity=".4688"/><rect x="-232.4" y="94.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26527)" opacity=".1875"/><rect x="-233.3" y="64.08" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26529)" opacity=".1875"/><rect x="-255.2" y="75.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26531)" opacity=".1875"/><rect x="-270.2" y="69.01" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26533)" opacity=".4688"/><rect x="-291.3" y="106.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26535)" opacity=".4688"/><rect x="-294.7" y="106.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26537)" opacity=".4688"/><rect x="-292.8" y="60.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26539)" opacity=".1875"/><rect x="-225.5" y="70.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26541)" opacity=".1875"/><rect x="-262.7" y="61.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26543)" opacity=".1875"/><rect x="-231.6" y="73.23" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26545)" opacity=".4688"/><rect x="-248.8" y="86.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26547)" opacity=".4688"/><rect x="-262.5" y="80.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26549)" opacity=".4688"/><rect x="-222.8" y="77.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26551)" opacity=".1875"/><rect x="-297.7" y="97.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26553)" opacity=".1875"/><rect x="-280.5" y="61.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26555)" opacity=".1875"/><rect x="-272.5" y="104.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26557)" opacity=".4688"/><rect x="-295.2" y="102.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26559)" opacity=".4688"/><rect x="-303.9" y="66.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26561)" opacity=".4688"/><rect x="-245.4" y="79.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26563)" opacity=".1875"/><rect x="-299.8" y="89.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26565)" opacity=".1875"/><rect x="-228.9" y="106.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26567)" opacity=".1875"/><rect x="-292.6" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26569)" opacity=".4688"/><rect x="-273.6" y="61.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26571)" opacity=".4688"/><rect x="-234" y="68.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26573)" opacity=".4688"/><rect x="-286.5" y="88.59" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26575)" opacity=".1875"/><rect x="-293" y="105.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26577)" opacity=".1875"/><rect x="-226.8" y="59.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26579)" opacity=".1875"/><rect x="-282" y="98.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26581)" opacity=".4688"/><rect x="-261.5" y="83.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26583)" opacity=".4688"/><rect x="-259.6" y="84.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26585)" opacity=".4688"/><rect x="-250.1" y="62.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26587)" opacity=".1875"/><rect x="-276.1" y="79.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26589)" opacity=".1875"/><rect x="-304.3" y="72.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26591)" opacity=".1875"/><rect x="-300.7" y="77.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26593)" opacity=".4688"/><rect x="-236.8" y="98.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26595)" opacity=".4688"/><rect x="-225.4" y="78.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26597)" opacity=".4688"/><rect x="-277.8" y="65.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26599)" opacity=".1875"/><rect x="-260.8" y="96.14" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26601)" opacity=".1875"/><rect x="-260.7" y="96.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26603)" opacity=".1875"/><rect x="-231.4" y="84.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26605)" opacity=".4688"/><rect x="-232.2" y="76.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26607)" opacity=".4688"/><rect x="-298.2" y="94.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26609)" opacity=".4688"/><rect x="-254.2" y="80.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26611)" opacity=".1875"/><rect x="-301.1" y="79.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26613)" opacity=".1875"/><rect x="-300.5" y="104" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26615)" opacity=".1875"/><rect x="-303.4" y="71.01" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26617)" opacity=".4688"/><rect x="-265.9" y="102.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26619)" opacity=".4688"/><rect x="-275.9" y="98.33" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26621)" opacity=".4688"/><rect x="-223.8" y="99.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26623)" opacity=".1875"/><rect x="-283.5" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26625)" opacity=".1875"/><rect x="-303.6" y="108.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26627)" opacity=".1875"/><rect x="-300" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26629)" opacity=".4688"/><rect x="-303.6" y="71.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26631)" opacity=".4688"/><rect x="-300.7" y="58.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26633)" opacity=".4688"/><rect x="-292.8" y="60.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26635)" opacity=".1875"/><rect x="-268.5" y="83.14" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26637)" opacity=".1875"/><rect x="-307.4" y="61.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26639)" opacity=".1875"/><rect x="-249.1" y="81.73" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26641)" opacity=".4688"/><rect x="-243.9" y="106.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26643)" opacity=".4688"/><rect x="-305" y="108.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26645)" opacity=".4688"/><rect x="-276.3" y="76.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26647)" opacity=".1875"/><rect x="-261.3" y="67.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26649)" opacity=".1875"/><rect x="-306.5" y="92.74" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26651)" opacity=".1875"/><rect x="-237.2" y="60.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26653)" opacity=".4688"/><rect x="-244.1" y="59.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26655)" opacity=".4688"/><rect x="-238.3" y="70.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26657)" opacity=".4688"/><rect x="-295.9" y="102.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26659)" opacity=".1875"/><rect x="-251.2" y="74.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26661)" opacity=".1875"/><rect x="-303" y="58.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26663)" opacity=".1875"/><rect x="-242.5" y="86.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26665)" opacity=".4688"/><rect x="-304.4" y="90.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26667)" opacity=".4688"/><rect x="-283.9" y="93.24" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26669)" opacity=".4688"/><rect x="-277" y="56.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26671)" opacity=".1875"/><rect x="-283.4" y="70.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26673)" opacity=".1875"/><rect x="-271.8" y="62.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26675)" opacity=".1875"/><rect x="-300.7" y="79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26677)" opacity=".4688"/><rect x="-253.6" y="61.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26679)" opacity=".4688"/><rect x="-257.5" y="74.27" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26681)" opacity=".4688"/><rect x="-292.7" y="103" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26683)" opacity=".1875"/><rect x="-271.2" y="58.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26685)" opacity=".1875"/><rect x="-293.4" y="93.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26687)" opacity=".1875"/><rect x="-274.9" y="95.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26689)" opacity=".4688"/><rect x="-290.5" y="101.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26691)" opacity=".4688"/><rect x="-301" y="55.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26693)" opacity=".4688"/><rect x="-251.3" y="102.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26695)" opacity=".1875"/><rect x="-258.5" y="106.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26697)" opacity=".1875"/><rect x="-277" y="92.92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26699)" opacity=".1875"/><rect x="-231.3" y="90.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26701)" opacity=".4688"/><rect x="-227.8" y="105.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26703)" opacity=".4688"/><rect x="-281" y="98.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26705)" opacity=".4688"/><rect x="-220.1" y="93.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26707)" opacity=".1875"/><rect x="-233.6" y="71.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26709)" opacity=".1875"/><rect x="-245.6" y="110.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26711)" opacity=".1875"/><rect x="-299.4" y="96.91" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26713)" opacity=".4688"/><rect x="-231.4" y="67.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26715)" opacity=".4688"/><rect x="-305.8" y="105.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26717)" opacity=".4688"/><rect x="-247.7" y="96.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26719)" opacity=".1875"/><rect x="-298.2" y="82.29" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26721)" opacity=".1875"/><rect x="-301.6" y="87.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26723)" opacity=".1875"/><rect x="-228.5" y="69.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26725)" opacity=".4688"/><rect x="-276.4" y="102.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26727)" opacity=".4688"/><rect x="-237.8" y="108.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26729)" opacity=".4688"/><rect x="-241" y="68.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26731)" opacity=".1875"/><rect x="-289.5" y="86.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26733)" opacity=".1875"/><rect x="-277.2" y="85.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26735)" opacity=".1875"/><rect x="-221.3" y="95.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26737)" opacity=".4688"/><rect x="-290.5" y="75.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26739)" opacity=".4688"/><rect x="-296.4" y="90.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26741)" opacity=".4688"/><rect x="-287.2" y="87.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26743)" opacity=".1875"/><rect x="-229.5" y="82.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26745)" opacity=".1875"/><rect x="-305.2" y="90.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26747)" opacity=".1875"/><rect x="-219.3" y="105.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26749)" opacity=".4688"/><rect x="-293.2" y="92.52" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26751)" opacity=".4688"/><rect x="-286.1" y="72.21" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26753)" opacity=".4688"/><rect x="-221.8" y="70.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26755)" opacity=".1875"/><rect x="-307.2" y="105.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26757)" opacity=".1875"/><rect x="-236.1" y="65.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26759)" opacity=".1875"/><rect x="-247.8" y="64.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26761)" opacity=".4688"/><rect x="-284.5" y="74.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26763)" opacity=".4688"/><rect x="-237.9" y="55.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26765)" opacity=".4688"/><rect x="-283.3" y="67.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26767)" opacity=".1875"/><rect x="-253.9" y="107.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26769)" opacity=".1875"/><rect x="-261.2" y="55.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26771)" opacity=".1875"/><rect x="-241.5" y="60.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26773)" opacity=".4688"/><rect x="-286.4" y="60.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26775)" opacity=".4688"/><rect x="-261.5" y="61.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26777)" opacity=".4688"/><rect x="-256.7" y="63.91" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26779)" opacity=".1875"/><rect x="-267.9" y="92.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26781)" opacity=".1875"/><rect x="-264.6" y="101.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26783)" opacity=".1875"/><rect x="-275" y="86.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26785)" opacity=".4688"/><rect x="-285.1" y="97.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26787)" opacity=".4688"/><rect x="-228.5" y="75.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26789)" opacity=".4688"/><rect x="-237.3" y="63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26791)" opacity=".1875"/><rect x="-257.8" y="84.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26793)" opacity=".1875"/><rect x="-299.2" y="110.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26795)" opacity=".1875"/><rect x="-255.1" y="101.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26797)" opacity=".4688"/><rect x="-282.6" y="110.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26799)" opacity=".4688"/><rect x="-242" y="96.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26801)" opacity=".4688"/><rect x="-224.4" y="80.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26803)" opacity=".1875"/><rect x="-230.7" y="108.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26805)" opacity=".1875"/><rect x="-232.5" y="64.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26807)" opacity=".1875"/><rect x="-301.9" y="81.06" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26809)" opacity=".4688"/><rect x="-262.7" y="61.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26811)" opacity=".4688"/><rect x="-244.6" y="67.98" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26813)" opacity=".4688"/><rect x="-305.1" y="76.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26815)" opacity=".1875"/><rect x="-297" y="108.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26817)" opacity=".1875"/><rect x="-259.5" y="59.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26819)" opacity=".1875"/><rect x="-217.3" y="87.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26821)" opacity=".4688"/><rect x="-303.3" y="107" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26823)" opacity=".4688"/><rect x="-274.7" y="96.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26825)" opacity=".4688"/><rect x="-239.2" y="61.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26827)" opacity=".1875"/><rect x="-244.4" y="75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26829)" opacity=".1875"/><rect x="-260.8" y="88.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26831)" opacity=".1875"/><rect x="-218.1" y="67.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26833)" opacity=".4688"/><rect x="-250.2" y="109.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26835)" opacity=".4688"/><rect x="-230.2" y="96.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26837)" opacity=".4688"/><rect x="-295.1" y="109.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26839)" opacity=".1875"/><rect x="-284.8" y="103" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26841)" opacity=".1875"/><rect x="-252.7" y="87.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26843)" opacity=".1875"/><rect x="-250.1" y="77.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26845)" opacity=".4688"/><rect x="-262.2" y="90.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26847)" opacity=".4688"/><rect x="-303" y="64.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26849)" opacity=".4688"/><rect x="-269.2" y="56.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26851)" opacity=".1875"/><rect x="-237.9" y="57.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26853)" opacity=".1875"/><rect x="-243.8" y="101.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26855)" opacity=".1875"/><rect x="-287.9" y="85.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26857)" opacity=".4688"/><rect x="-288.5" y="56.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26859)" opacity=".4688"/><rect x="-241.7" y="92.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26861)" opacity=".4688"/><rect x="-230.1" y="102.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26863)" opacity=".1875"/><rect x="-242.8" y="62.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26865)" opacity=".1875"/><rect x="-301.8" y="61.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26867)" opacity=".1875"/><rect x="-296.7" y="73.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26869)" opacity=".4688"/><rect x="-278.6" y="91.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26871)" opacity=".4688"/><rect x="-229.5" y="67.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26873)" opacity=".4688"/><rect x="-243.6" y="59.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26875)" opacity=".1875"/><rect x="-278.9" y="59.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26877)" opacity=".1875"/><rect x="-273.8" y="57.04" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26879)" opacity=".1875"/><rect x="-246.7" y="60.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26881)" opacity=".4688"/><rect x="-287.3" y="101.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26883)" opacity=".4688"/><rect x="-288.1" y="86.82" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26885)" opacity=".4688"/><rect x="-239.9" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26887)" opacity=".1875"/><rect x="-268.4" y="81.96" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26889)" opacity=".1875"/><rect x="-245.3" y="78.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26891)" opacity=".1875"/><rect x="-296.3" y="61.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26893)" opacity=".4688"/><rect x="-306.7" y="67.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26895)" opacity=".4688"/><rect x="-238.9" y="106.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26897)" opacity=".4688"/><rect x="-275.2" y="81.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26899)" opacity=".1875"/><rect x="-244.8" y="65.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26901)" opacity=".1875"/><rect x="-227.1" y="73.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26903)" opacity=".1875"/><rect x="-226.1" y="63.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26905)" opacity=".4688"/><rect x="-302.5" y="61.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26907)" opacity=".4688"/><rect x="-274.7" y="62.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26909)" opacity=".4688"/><rect x="-264.6" y="63.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26911)" opacity=".1875"/><rect x="-278.9" y="108" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26913)" opacity=".1875"/><rect x="-225.5" y="106" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26915)" opacity=".1875"/><rect x="-220" y="78.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26917)" opacity=".4688"/><rect x="-237.3" y="56.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26919)" opacity=".4688"/><rect x="-251.6" y="73.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26921)" opacity=".4688"/><rect x="-298.6" y="76.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26923)" opacity=".1875"/><rect x="-268.5" y="65.49" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26925)" opacity=".1875"/><rect x="-306.2" y="57.92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26927)" opacity=".1875"/><rect x="-282.1" y="64.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26929)" opacity=".4688"/><rect x="-301.3" y="87.52" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26931)" opacity=".4688"/><rect x="-284.8" y="55.55" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26933)" opacity=".4688"/><rect x="-223.4" y="87.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26935)" opacity=".1875"/><rect x="-229.5" y="99.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26937)" opacity=".1875"/><rect x="-307.3" y="105.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26939)" opacity=".1875"/><rect x="-245.9" y="100.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26941)" opacity=".4688"/><rect x="-289.4" y="101.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26943)" opacity=".4688"/><rect x="-236.2" y="75.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26945)" opacity=".4688"/><rect x="-256.2" y="89.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26947)" opacity=".1875"/><rect x="-268.1" y="69.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26949)" opacity=".1875"/><rect x="-236.7" y="57.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26951)" opacity=".1875"/><rect x="-288" y="98.27" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26953)" opacity=".4688"/><rect x="-280.4" y="71.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26955)" opacity=".4688"/><rect x="-259" y="77.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26957)" opacity=".4688"/><rect x="-258.7" y="101.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26959)" opacity=".1875"/><rect x="-233.5" y="91.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26961)" opacity=".1875"/><rect x="-307.4" y="108.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26963)" opacity=".1875"/><rect x="-268.6" y="73.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26965)" opacity=".4688"/><rect x="-271.9" y="64.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26967)" opacity=".4688"/><rect x="-244.9" y="86.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26969)" opacity=".4688"/><rect x="-276.2" y="84.15" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26971)" opacity=".1875"/><rect x="-301.7" y="68.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26973)" opacity=".1875"/><rect x="-283.7" y="106.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26975)" opacity=".1875"/><rect x="-248" y="63.94" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26977)" opacity=".4688"/><rect x="-267.4" y="81.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26979)" opacity=".4688"/><rect x="-275.2" y="87.51" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26981)" opacity=".4688"/><rect x="-301.9" y="76.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26983)" opacity=".1875"/><rect x="-229.3" y="76.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26985)" opacity=".1875"/><rect x="-242.5" y="64.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26987)" opacity=".1875"/><rect x="-244" y="105.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26989)" opacity=".4688"/><rect x="-277.1" y="86.39" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26991)" opacity=".4688"/><rect x="-257.9" y="69.66" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26993)" opacity=".4688"/><rect x="-237.7" y="92.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26995)" opacity=".1875"/><rect x="-288.8" y="59.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26997)" opacity=".1875"/><rect x="-246.9" y="75.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26999)" opacity=".1875"/><rect x="-224.6" y="102.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27001)" opacity=".4688"/><rect x="-226.8" y="60.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27003)" opacity=".4688"/><rect x="-247" y="61.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27005)" opacity=".4688"/><rect x="-271.7" y="62.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27007)" opacity=".1875"/><rect x="-229.6" y="98.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27009)" opacity=".1875"/><rect x="-272.1" y="94.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27011)" opacity=".1875"/><rect x="-247.8" y="68.42" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27013)" opacity=".4688"/><rect x="-258" y="81.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27015)" opacity=".4688"/><rect x="-266.4" y="103.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27017)" opacity=".4688"/><rect x="-297.2" y="55.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27019)" opacity=".1875"/><rect x="-293.2" y="97.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27021)" opacity=".1875"/><rect x="-287.2" y="62.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27023)" opacity=".1875"/><rect x="-262.6" y="88.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27025)" opacity=".4688"/><rect x="-261.6" y="85.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27027)" opacity=".4688"/><rect x="-235.2" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27029)" opacity=".4688"/><rect x="-217" y="80.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27031)" opacity=".1875"/><rect x="-231.6" y="91.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27033)" opacity=".1875"/><rect x="-229.6" y="92.43" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27035)" opacity=".1875"/><rect x="-255.8" y="106.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27037)" opacity=".4688"/><rect x="-276.7" y="80.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27039)" opacity=".4688"/><rect x="-251.8" y="109.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27041)" opacity=".4688"/><rect x="-262.8" y="100.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27043)" opacity=".1875"/><rect x="-263.5" y="89.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27045)" opacity=".1875"/><rect x="-279.1" y="103.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27047)" opacity=".1875"/><rect x="-246.9" y="72.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27049)" opacity=".4688"/><rect x="-237.1" y="89.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27051)" opacity=".4688"/><rect x="-271.3" y="69.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27053)" opacity=".4688"/><rect x="-245.1" y="72.15" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27055)" opacity=".1875"/><rect x="-286" y="102.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27057)" opacity=".1875"/><rect x="-307.3" y="61.66" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27059)" opacity=".1875"/><rect x="-295.8" y="71.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27061)" opacity=".4688"/><rect x="-238.6" y="77.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27063)" opacity=".4688"/><rect x="-251.1" y="85.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27065)" opacity=".4688"/><rect x="-227.3" y="56.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27067)" opacity=".1875"/><rect x="-303.6" y="95.67" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27069)" opacity=".1875"/><rect x="-265.5" y="100.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27071)" opacity=".1875"/><rect x="-228.2" y="59.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27073)" opacity=".4688"/><rect x="-229.4" y="78.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27075)" opacity=".4688"/><rect x="-301.7" y="70.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27077)" opacity=".4688"/><rect x="-288.6" y="101.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27079)" opacity=".1875"/><rect x="-285.2" y="85.16" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27081)" opacity=".1875"/><rect x="-301.5" y="63.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27083)" opacity=".1875"/><rect x="-216.4" y="83.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27085)" opacity=".4688"/><rect x="-287.9" y="108.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27087)" opacity=".4688"/><rect x="-294" y="57.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27089)" opacity=".4688"/><rect x="-292.9" y="111" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27091)" opacity=".1875"/><rect x="-256.4" y="69.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27093)" opacity=".1875"/><rect x="-260" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27095)" opacity=".1875"/><rect x="-283.1" y="94.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27097)" opacity=".4688"/><rect x="-296.6" y="85.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27099)" opacity=".4688"/><rect x="-256.7" y="66.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27101)" opacity=".4688"/><rect x="-299.9" y="102.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27103)" opacity=".1875"/><rect x="-228.9" y="57.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27105)" opacity=".1875"/><rect x="-264.5" y="61.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27107)" opacity=".1875"/><rect x="-239.5" y="93.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27109)" opacity=".4688"/><rect x="-260.3" y="92.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27111)" opacity=".4688"/><rect x="-280.1" y="84.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27113)" opacity=".4688"/><rect x="-250.9" y="58.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27115)" opacity=".1875"/><rect x="-294.3" y="76.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27117)" opacity=".1875"/><rect x="-306.3" y="80.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27119)" opacity=".1875"/><rect x="-301" y="100.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27121)" opacity=".4688"/><rect x="-253.1" y="58.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27123)" opacity=".4688"/><rect x="-252.3" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27125)" opacity=".4688"/><rect x="-245.6" y="58.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27127)" opacity=".1875"/><rect x="-261.5" y="61.16" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27129)" opacity=".1875"/><rect x="-283.1" y="66.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27131)" opacity=".1875"/><rect x="-288.6" y="73.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27133)" opacity=".4688"/><rect x="-250.6" y="65.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27135)" opacity=".4688"/><rect x="-275.9" y="95.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27137)" opacity=".4688"/><rect x="-242.6" y="98.75" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27139)" opacity=".1875"/><rect x="-275.3" y="65.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27141)" opacity=".1875"/><rect x="-280.5" y="83.99" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27143)" opacity=".1875"/><rect x="-269.9" y="85.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27145)" opacity=".4688"/><rect x="-302.4" y="82.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27147)" opacity=".4688"/><rect x="-256.6" y="84.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27149)" opacity=".4688"/><rect x="-297.3" y="87.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27151)" opacity=".1875"/><rect x="-273.9" y="76.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27153)" opacity=".1875"/><rect x="-266.9" y="108.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27155)" opacity=".1875"/><rect x="-234.5" y="63.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27157)" opacity=".4688"/><rect x="-299.6" y="61.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27159)" opacity=".4688"/><rect x="-237.8" y="80.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27161)" opacity=".4688"/><rect x="-246.7" y="70.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27163)" opacity=".1875"/><rect x="-232.5" y="68.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27165)" opacity=".1875"/><rect x="-230.3" y="72.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27167)" opacity=".1875"/><rect x="-294.9" y="66.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27169)" opacity=".4688"/><rect x="-244.9" y="69.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27171)" opacity=".4688"/><rect x="-274.7" y="60.12" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27173)" opacity=".4688"/><rect x="-251.6" y="87.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27175)" opacity=".1875"/><rect x="-250.7" y="107.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27177)" opacity=".1875"/><rect x="-231.4" y="97.07" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27179)" opacity=".1875"/><rect x="-238.2" y="75.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27181)" opacity=".4688"/><rect x="-271.7" y="99.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27183)" opacity=".4688"/><rect x="-251.3" y="75.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27185)" opacity=".4688"/><rect x="-256.5" y="111.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27187)" opacity=".1875"/><rect x="-277.6" y="57.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27189)" opacity=".1875"/><rect x="-228.9" y="102.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27191)" opacity=".1875"/><rect x="-271.9" y="68.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27193)" opacity=".4688"/><rect x="-233.8" y="92.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27195)" opacity=".4688"/><rect x="-248.2" y="62.98" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27197)" opacity=".4688"/><rect x="-235" y="74.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27199)" opacity=".1875"/><rect x="-306.3" y="74.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27201)" opacity=".1875"/><rect x="-258.2" y="67.12" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27203)" opacity=".1875"/><rect x="-283" y="87.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27205)" opacity=".4688"/><rect x="-292.7" y="83.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27207)" opacity=".4688"/><rect x="-257" y="68.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27209)" opacity=".4688"/><rect x="-259.7" y="103.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27211)" opacity=".1875"/><rect x="-284.5" y="89.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27213)" opacity=".1875"/><rect x="-255.5" y="86.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27215)" opacity=".1875"/><rect x="-307.3" y="59.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27217)" opacity=".4688"/><rect x="-268.5" y="56.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27219)" opacity=".4688"/><rect x="-253.8" y="82.51" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27221)" opacity=".4688"/><rect x="-250.3" y="101.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27223)" opacity=".1875"/><rect x="-286.3" y="81.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27225)" opacity=".1875"/><rect x="-245.5" y="57.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27227)" opacity=".1875"/><rect x="-279.3" y="56.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27229)" opacity=".4688"/><rect x="-239.1" y="102.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27231)" opacity=".4688"/><rect x="-300.8" y="57.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27233)" opacity=".4688"/><rect x="-230.5" y="58.55" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27235)" opacity=".1875"/><rect x="-290.2" y="98.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27237)" opacity=".1875"/><rect x="-246.2" y="70.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27239)" opacity=".1875"/><rect x="-281.9" y="89.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27241)" opacity=".4688"/><rect x="-267.8" y="75.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27243)" opacity=".4688"/><rect x="-285.3" y="96.61" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27245)" opacity=".4688"/><rect x="-251.8" y="105.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27247)" opacity=".1875"/><rect x="-236.8" y="60.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27249)" opacity=".1875"/><rect x="-261.4" y="63.96" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27251)" opacity=".1875"/><rect x="-251" y="64.67" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27253)" opacity=".4688"/><rect x="-236.8" y="56.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27255)" opacity=".4688"/><rect x="-247" y="103.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27257)" opacity=".4688"/><rect x="-260.2" y="75.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27259)" opacity=".1875"/><rect x="-293.6" y="101.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27261)" opacity=".1875"/><rect x="-235.9" y="74.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27263)" opacity=".1875"/><rect x="-293.1" y="64.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27265)" opacity=".4688"/><rect x="-231.1" y="63.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27267)" opacity=".4688"/><rect x="-233.5" y="87.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27269)" opacity=".4688"/><rect x="-249.2" y="78.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27271)" opacity=".1875"/><rect x="-304.9" y="107" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27273)" opacity=".1875"/><rect x="-243.8" y="69.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27275)" opacity=".1875"/><rect x="-245.8" y="84.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27277)" opacity=".4688"/><rect x="-296.8" y="88.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27279)" opacity=".4688"/><rect x="-267.4" y="58.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27281)" opacity=".4688"/><rect x="-223.2" y="100.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27283)" opacity=".1875"/><rect x="-291.4" y="91.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27285)" opacity=".1875"/><rect x="-234.9" y="65.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27287)" opacity=".1875"/><rect x="-276.5" y="82.44" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27289)" opacity=".4688"/><rect x="-282.1" y="62.92" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27291)" opacity=".4688"/><rect x="-294.8" y="79.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27293)" opacity=".4688"/><rect x="-219.5" y="86.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27295)" opacity=".1875"/><rect x="-306.9" y="78.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27297)" opacity=".1875"/><rect x="-239.3" y="88.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27299)" opacity=".1875"/><rect x="-283.1" y="72.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27301)" opacity=".4688"/><rect x="-243.8" y="59.67" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27303)" opacity=".4688"/><rect x="-251.4" y="84.25" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27305)" opacity=".4688"/><rect x="-230.2" y="92.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27307)" opacity=".1875"/><rect x="-275" y="67.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27309)" opacity=".1875"/><rect x="-259" y="79.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27311)" opacity=".1875"/><rect x="-222.3" y="73.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27313)" opacity=".4688"/><rect x="-237.3" y="104.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27315)" opacity=".4688"/><rect x="-233.4" y="99.54" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27317)" opacity=".4688"/><rect x="-256" y="81.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27319)" opacity=".1875"/><rect x="-298.3" y="63.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27321)" opacity=".1875"/><rect x="-266.3" y="68.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27323)" opacity=".1875"/><rect x="-222.9" y="66.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27325)" opacity=".4688"/><rect x="-302.1" y="102.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27327)" opacity=".4688"/><rect x="-255.2" y="90.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27329)" opacity=".4688"/><rect x="-217.8" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27331)" opacity=".1875"/><rect x="-278.5" y="107.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27333)" opacity=".1875"/><rect x="-256.5" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27335)" opacity=".1875"/><rect x="-296.7" y="83.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27337)" opacity=".4688"/><rect x="-234.1" y="55.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27339)" opacity=".4688"/><rect x="-307.2" y="69.61" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27341)" opacity=".4688"/><rect x="-248.7" y="98.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27343)" opacity=".1875"/><rect x="-305.9" y="93.66" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27345)" opacity=".1875"/><rect x="-230.9" y="79.92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27347)" opacity=".1875"/><rect x="-275.8" y="82.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27349)" opacity=".4688"/><rect x="-294.7" y="84.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27351)" opacity=".4688"/><rect x="-296.1" y="75.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27353)" opacity=".4688"/><rect x="-245.2" y="69.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27355)" opacity=".1875"/><rect x="-280.6" y="68.56" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27357)" opacity=".1875"/><rect x="-283.6" y="81.57" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27359)" opacity=".1875"/><rect x="-257.2" y="81.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27361)" opacity=".4688"/><rect x="-296.1" y="85.68" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27363)" opacity=".4688"/><rect x="-229" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27365)" opacity=".4688"/><rect x="-234.8" y="95.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27367)" opacity=".1875"/><rect x="-247.7" y="98.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27369)" opacity=".1875"/><rect x="-233.7" y="63.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27371)" opacity=".1875"/><rect x="-220.9" y="75.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27373)" opacity=".4688"/><rect x="-275.5" y="111.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27375)" opacity=".4688"/><rect x="-232.7" y="85.41" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27377)" opacity=".4688"/><rect x="-225.8" y="65.04" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27379)" opacity=".1875"/><rect x="-273.4" y="109.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27381)" opacity=".1875"/><rect x="-287.8" y="87.24" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27383)" opacity=".1875"/><rect x="-235" y="70.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27385)" opacity=".4688"/><rect x="-261.2" y="91.74" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27387)" opacity=".4688"/><rect x="-268" y="96.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27389)" opacity=".4688"/><rect x="-303.5" y="80.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27391)" opacity=".1875"/><rect x="-294.4" y="87.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27393)" opacity=".1875"/><rect x="-287.1" y="92.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27395)" opacity=".1875"/><rect x="-267.9" y="104.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27397)" opacity=".4688"/><rect x="-225.5" y="56.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27399)" opacity=".4688"/><rect x="-291.8" y="71.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27401)" opacity=".4688"/><rect x="-271.1" y="110.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27403)" opacity=".1875"/><rect x="-265.8" y="95.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27405)" opacity=".1875"/><rect x="-260.6" y="83.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27407)" opacity=".1875"/><rect x="-264.8" y="105.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27409)" opacity=".4688"/><rect x="-283.9" y="105.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27411)" opacity=".4688"/><rect x="-247.5" y="110.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27413)" opacity=".4688"/><rect x="-233.3" y="108.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27415)" opacity=".1875"/><rect x="-238.4" y="66.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27417)" opacity=".1875"/><rect x="-237" y="100.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27419)" opacity=".1875"/><rect x="-248.9" y="109.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27421)" opacity=".4688"/><rect x="-285.8" y="61.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27423)" opacity=".4688"/><rect x="-263.5" y="90.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27425)" opacity=".4688"/><rect x="-305.3" y="105.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27427)" opacity=".1875"/><rect x="-306.6" y="110.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27429)" opacity=".1875"/><rect x="-273.3" y="78.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27431)" opacity=".1875"/><rect x="-245.4" y="65.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27433)" opacity=".4688"/><rect x="-247.5" y="90.01" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27435)" opacity=".4688"/><rect x="-293.3" y="77.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27437)" opacity=".4688"/><rect x="-290.9" y="108.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27439)" opacity=".1875"/><rect x="-235.7" y="86.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27441)" opacity=".1875"/><rect x="-299.5" y="81.27" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27443)" opacity=".1875"/><rect x="-242.7" y="107.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27445)" opacity=".4688"/><rect x="-296.2" y="91.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27447)" opacity=".4688"/><rect x="-303.5" y="91.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27449)" opacity=".4688"/><rect x="-265.2" y="104.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27451)" opacity=".1875"/><rect x="-302.1" y="58.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27453)" opacity=".1875"/><rect x="-261.6" y="55.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27455)" opacity=".1875"/><rect x="-259.7" y="72.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27457)" opacity=".4688"/><rect x="-234.8" y="75.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27459)" opacity=".4688"/><rect x="-305.3" y="107.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27461)" opacity=".4688"/><rect x="-236.9" y="100.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27463)" opacity=".1875"/><rect x="-278.5" y="61.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27465)" opacity=".1875"/><rect x="-292.7" y="77.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27467)" opacity=".1875"/><rect x="-281.9" y="85.35" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27469)" opacity=".4688"/><rect x="-278.5" y="73.69" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27471)" opacity=".4688"/><rect x="-232.9" y="101.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27473)" opacity=".4688"/><rect x="-263.1" y="108" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27475)" opacity=".1875"/><rect x="-294" y="90.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27477)" opacity=".1875"/><rect x="-238.7" y="97.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27479)" opacity=".1875"/><rect x="-247.3" y="105.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27481)" opacity=".4688"/><rect x="-229.8" y="56.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27483)" opacity=".4688"/><rect x="-287" y="98.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27485)" opacity=".4688"/><rect x="-251.6" y="63.42" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27487)" opacity=".1875"/><rect x="-278.7" y="82.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27489)" opacity=".1875"/><rect x="-279.2" y="66.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27491)" opacity=".1875"/><rect x="-284.1" y="58.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27493)" opacity=".4688"/><rect x="-280.1" y="103.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27495)" opacity=".4688"/><rect x="-235.6" y="72.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27497)" opacity=".4688"/><rect x="-252.6" y="74.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27499)" opacity=".1875"/><rect x="-277.6" y="99.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27501)" opacity=".1875"/><rect x="-248.1" y="92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27503)" opacity=".1875"/><rect x="-259" y="91.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27505)" opacity=".4688"/><rect x="-227.5" y="105.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27507)" opacity=".4688"/><rect x="-242.5" y="103.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27509)" opacity=".4688"/><rect x="-247.1" y="108.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27511)" opacity=".1875"/><rect x="-293" y="58.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27513)" opacity=".1875"/><rect x="-272.8" y="65.54" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27515)" opacity=".1875"/><rect x="-305.6" y="68.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27517)" opacity=".4688"/><rect x="-237.7" y="55.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27519)" opacity=".4688"/><rect x="-281.1" y="70" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27521)" opacity=".4688"/><rect x="-281.8" y="83.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27523)" opacity=".1875"/><rect x="-276.6" y="72.34" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27525)" opacity=".1875"/><rect x="-281.5" y="91.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27527)" opacity=".1875"/><rect x="-302.8" y="73.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27529)" opacity=".4688"/><rect x="-244.3" y="62.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27531)" opacity=".4688"/><rect x="-275.4" y="100.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27533)" opacity=".4688"/><rect x="-305.3" y="56.55" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27535)" opacity=".1875"/><rect x="-226.9" y="88.68" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27537)" opacity=".1875"/><rect x="-290" y="57.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27539)" opacity=".1875"/><rect x="-218.2" y="107.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27541)" opacity=".4688"/><rect x="-296.8" y="67.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27543)" opacity=".4688"/><rect x="-286.2" y="93.44" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27545)" opacity=".4688"/><rect x="-221.6" y="69.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27547)" opacity=".1875"/><rect x="-292.9" y="72.56" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27549)" opacity=".1875"/><rect x="-236.3" y="65.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27745)" opacity=".4688"/><rect x="-234.9" y="66.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27551)" opacity=".1875"/><rect x="-273.5" y="88.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27553)" opacity=".4688"/><rect x="-239.4" y="106.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27555)" opacity=".4688"/><rect x="-257.1" y="61.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27557)" opacity=".4688"/><rect x="-293.7" y="71.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27559)" opacity=".1875"/><rect x="-237.7" y="60.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27561)" opacity=".1875"/><rect x="-232" y="56.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27563)" opacity=".1875"/><rect x="-230.2" y="94.83" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27565)" opacity=".4688"/><rect x="-271.9" y="87.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27567)" opacity=".4688"/><rect x="-261.3" y="84.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27569)" opacity=".4688"/><rect x="-300.3" y="70.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27571)" opacity=".1875"/><rect x="-259.7" y="78.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27573)" opacity=".1875"/><rect x="-273.7" y="60.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27575)" opacity=".1875"/><rect x="-251.4" y="103.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27577)" opacity=".4688"/><rect x="-244.3" y="96.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27579)" opacity=".4688"/><rect x="-238.8" y="106.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27581)" opacity=".4688"/><rect x="-222.2" y="66.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27583)" opacity=".1875"/><rect x="-306.7" y="59.36" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27585)" opacity=".1875"/><rect x="-267.3" y="75.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27587)" opacity=".1875"/><rect x="-263.9" y="65.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27589)" opacity=".4688"/><rect x="-269.4" y="102.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27591)" opacity=".4688"/><rect x="-275.3" y="77.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27593)" opacity=".4688"/><rect x="-243.6" y="101.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27595)" opacity=".1875"/><rect x="-243.5" y="73.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27597)" opacity=".1875"/><rect x="-305.3" y="102.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27599)" opacity=".1875"/><rect x="-245.9" y="85.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27601)" opacity=".4688"/><rect x="-303.1" y="111.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27603)" opacity=".4688"/><rect x="-268.4" y="81.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27605)" opacity=".4688"/><rect x="-267.3" y="92.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27607)" opacity=".1875"/><rect x="-300.2" y="74.28" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27609)" opacity=".1875"/><rect x="-282.1" y="60.56" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27611)" opacity=".1875"/><rect x="-239.7" y="105.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27613)" opacity=".4688"/><rect x="-278.2" y="96.25" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27615)" opacity=".4688"/><rect x="-288" y="110.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27617)" opacity=".4688"/><rect x="-257.2" y="111.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27619)" opacity=".1875"/><rect x="-234.6" y="101.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27621)" opacity=".1875"/><rect x="-262.6" y="60.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27623)" opacity=".1875"/><rect x="-272.6" y="73.02" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27625)" opacity=".4688"/><rect x="-267.8" y="98.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27627)" opacity=".4688"/><rect x="-276.9" y="107.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27629)" opacity=".4688"/><rect x="-238.2" y="86.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27631)" opacity=".1875"/><rect x="-232.6" y="95.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27633)" opacity=".1875"/><rect x="-306.7" y="101.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27635)" opacity=".1875"/><rect x="-272.3" y="86.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27637)" opacity=".4688"/><rect x="-292" y="55.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27639)" opacity=".4688"/><rect x="-304.6" y="102.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27641)" opacity=".4688"/><rect x="-267" y="61.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27643)" opacity=".1875"/><rect x="-256.9" y="110.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27645)" opacity=".1875"/><rect x="-297.2" y="92.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27647)" opacity=".1875"/><rect x="-276.2" y="59.46" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27649)" opacity=".4688"/><rect x="-291.8" y="92.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27651)" opacity=".4688"/><rect x="-285.4" y="108.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27653)" opacity=".4688"/><rect x="-278.5" y="55.13" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27655)" opacity=".1875"/><rect x="-255" y="78.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27657)" opacity=".1875"/><rect x="-290.5" y="70.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27659)" opacity=".1875"/><rect x="-248.1" y="84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27661)" opacity=".4688"/><rect x="-280.3" y="100.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27663)" opacity=".4688"/><rect x="-279.7" y="67.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27665)" opacity=".4688"/><rect x="-300" y="73.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27667)" opacity=".1875"/><rect x="-265.1" y="94.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27669)" opacity=".1875"/><rect x="-254.5" y="100.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27671)" opacity=".1875"/><rect x="-231.6" y="85.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27673)" opacity=".4688"/><rect x="-274.8" y="103.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27675)" opacity=".4688"/><rect x="-289" y="90.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27677)" opacity=".4688"/><rect x="-275.7" y="70.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27679)" opacity=".1875"/><rect x="-225.2" y="57.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27681)" opacity=".1875"/><rect x="-275.8" y="76.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27683)" opacity=".1875"/><rect x="-230.8" y="62.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27685)" opacity=".4688"/><rect x="-305.6" y="109.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27687)" opacity=".4688"/><rect x="-293" y="99.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27689)" opacity=".4688"/><rect x="-302.7" y="80.13" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27691)" opacity=".1875"/><rect x="-232.5" y="80.02" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27693)" opacity=".1875"/><rect x="-270.9" y="96.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27695)" opacity=".1875"/><rect x="-236.7" y="104" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27697)" opacity=".4688"/><rect x="-271" y="68.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27699)" opacity=".4688"/><rect x="-294.3" y="59.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27701)" opacity=".4688"/><rect x="-233.7" y="62.55" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27703)" opacity=".1875"/><rect x="-251.1" y="84.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27705)" opacity=".1875"/><rect x="-246.5" y="61.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27707)" opacity=".1875"/><rect x="-288.2" y="109" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27709)" opacity=".4688"/><rect x="-276.6" y="110.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27711)" opacity=".4688"/><rect x="-252.7" y="105.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27713)" opacity=".4688"/><rect x="-223.3" y="56.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27715)" opacity=".1875"/><rect x="-290.9" y="72.45" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27717)" opacity=".1875"/><rect x="-287.8" y="81.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27719)" opacity=".1875"/><rect x="-259.3" y="80.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27721)" opacity=".4688"/><rect x="-299.5" y="63.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27723)" opacity=".4688"/><rect x="-229.1" y="86.82" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27725)" opacity=".4688"/><rect x="-273.9" y="60.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27727)" opacity=".1875"/><rect x="-257.4" y="61.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27729)" opacity=".1875"/><rect x="-297.7" y="99.56" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27731)" opacity=".1875"/><rect x="-295" y="83.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27733)" opacity=".4688"/><rect x="-296.8" y="55.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27735)" opacity=".4688"/><rect x="-274.2" y="67.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27737)" opacity=".4688"/><rect x="-279.9" y="58.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27739)" opacity=".1875"/><rect x="-265.1" y="57.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27741)" opacity=".1875"/><rect x="-230.9" y="62.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27743)" opacity=".1875"/><rect x="-245.2" y="73.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27747)" opacity=".4688"/><rect x="-292.3" y="72.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27749)" opacity=".4688"/><rect x="-293.2" y="71.63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27751)" opacity=".1875"/><rect x="-259.4" y="65.28" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27753)" opacity=".1875"/><rect x="-278.6" y="64.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27755)" opacity=".1875"/><rect x="-281.7" y="96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27757)" opacity=".4688"/><rect x="-260.5" y="59.46" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27759)" opacity=".4688"/><rect x="-296.7" y="64.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27761)" opacity=".4688"/><rect x="-247.1" y="95.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27763)" opacity=".1875"/><rect x="-297.3" y="63.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27765)" opacity=".1875"/><rect x="-289" y="101.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27767)" opacity=".1875"/><rect x="-298.7" y="86.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27769)" opacity=".4688"/><rect x="-278.7" y="78.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27771)" opacity=".4688"/><rect x="-229.5" y="93.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27773)" opacity=".4688"/><rect x="-290.9" y="85.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27775)" opacity=".1875"/><rect x="-250.4" y="77.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27777)" opacity=".1875"/><rect x="-247.7" y="56.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27779)" opacity=".1875"/><rect x="-282.2" y="107.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27781)" opacity=".4688"/><rect x="-303.9" y="69.24" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27783)" opacity=".4688"/><rect x="-282.2" y="109.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27785)" opacity=".4688"/><rect x="-282.9" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27787)" opacity=".1875"/><rect x="-290.6" y="75.87" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27789)" opacity=".1875"/><rect x="-290.3" y="99.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27791)" opacity=".1875"/><rect x="-258.8" y="80.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27793)" opacity=".4688"/><rect x="-243.1" y="73.92" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27795)" opacity=".4688"/><rect x="-234.6" y="101.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27797)" opacity=".4688"/><rect x="-247.1" y="78.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27799)" opacity=".1875"/><rect x="-300.6" y="109" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27801)" opacity=".1875"/><rect x="-280.3" y="56.03" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27803)" opacity=".1875"/><rect x="-224" y="78.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27805)" opacity=".4688"/><rect x="-250.6" y="59.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27807)" opacity=".4688"/><rect x="-282.7" y="61.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27809)" opacity=".4688"/><rect x="-306.9" y="111.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27811)" opacity=".1875"/><rect x="-240.8" y="83.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27813)" opacity=".1875"/><rect x="-262.8" y="57.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27815)" opacity=".1875"/><rect x="-232.8" y="77.15" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27817)" opacity=".4688"/><rect x="-247.3" y="68.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27819)" opacity=".4688"/><rect x="-238.4" y="61.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27821)" opacity=".4688"/><rect x="-232.7" y="86.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27823)" opacity=".1875"/><rect x="-250.6" y="89.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27825)" opacity=".1875"/><rect x="-242" y="103.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27827)" opacity=".1875"/><rect x="-275.9" y="105.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27829)" opacity=".4688"/><rect x="-236.5" y="73.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27831)" opacity=".4688"/><rect x="-291.2" y="64.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27833)" opacity=".4688"/><rect x="-274" y="64.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27835)" opacity=".1875"/><rect x="-233.4" y="73.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27837)" opacity=".1875"/><rect x="-269" y="73.14" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27839)" opacity=".1875"/><rect x="-219.3" y="80.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27841)" opacity=".4688"/><rect x="-277.1" y="94.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27843)" opacity=".4688"/><rect x="-300.6" y="94.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27845)" opacity=".4688"/><rect x="-265.1" y="68.01" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27847)" opacity=".1875"/><rect x="-262.1" y="57.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27849)" opacity=".1875"/><rect x="-292.2" y="94.14" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27851)" opacity=".1875"/><rect x="-266.2" y="110.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27853)" opacity=".4688"/><rect x="-250" y="80.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27855)" opacity=".4688"/><rect x="-267.6" y="76.41" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27857)" opacity=".4688"/><rect x="-305.9" y="58.02" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27859)" opacity=".1875"/><rect x="-249.5" y="97.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27861)" opacity=".1875"/><rect x="-298" y="79.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27863)" opacity=".1875"/><rect x="-297.2" y="83.74" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27865)" opacity=".4688"/><rect x="-258.8" y="87.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27867)" opacity=".4688"/><rect x="-260.1" y="87.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27869)" opacity=".4688"/><rect x="-289.2" y="111.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27871)" opacity=".1875"/><rect x="-259.5" y="94.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27873)" opacity=".1875"/><rect x="-259.6" y="79.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27875)" opacity=".1875"/><rect x="-286.6" y="67.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27877)" opacity=".4688"/><rect x="-260.3" y="104.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27879)" opacity=".4688"/><rect x="-283.5" y="93.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27881)" opacity=".4688"/><rect x="-217.4" y="58.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27883)" opacity=".1875"/><rect x="-237.9" y="100.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27885)" opacity=".1875"/><rect x="-242.7" y="63.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27887)" opacity=".1875"/><rect x="-226.9" y="76.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27889)" opacity=".4688"/><rect x="-233.4" y="98.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27891)" opacity=".4688"/><rect x="-299.9" y="67.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27893)" opacity=".4688"/><rect x="-265.1" y="80.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27895)" opacity=".1875"/><rect x="-260.7" y="107.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27897)" opacity=".1875"/><rect x="-236.3" y="88.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27899)" opacity=".1875"/><rect x="-251.9" y="84.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27901)" opacity=".4688"/><rect x="-255.8" y="80.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27903)" opacity=".4688"/><rect x="-276.3" y="88.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27905)" opacity=".4688"/></g><g><path d="m42.69 80.38c-1.177 0-2.125 0.9576-2.125 2.147v0.1894c0-1.189 0.9477-2.147 2.125-2.147h51.16c1.03 0 1.896 0.7564 2.094 1.737-0.1089-1.085-0.9904-1.926-2.094-1.926h-51.16zm5.281 30.72v0.1895c0 0.5249 0.4179 0.9472 0.9375 0.9472h14.12c0.5196 0 0.9375-0.4223 0.9375-0.9472v-0.1895c-1e-5 0.5249-0.418 0.9472-0.9375 0.9472h-14.12c-0.5196 0-0.9375-0.4223-0.9375-0.9472z" fill="#fff"/><path d="m42.69 80.28c-1.177 0-2.125 1.363-2.125 2.553v0.1894c0-1.189 0.9477-1.547 2.125-1.547h51.16c1.03 0 1.696 0.1564 1.894 1.137-0.1089-1.085-0.7904-2.23-1.894-2.23l-51.16-0.1015zm5.281 31.13v0.1894c0 0.5249 0.4179 0.9472 0.9375 0.9472h14.12c0.5196 0 0.9375-0.4223 0.9375-0.9472v-0.1894c-1e-5 0.5249-0.418 0.9472-0.9375 0.9472h-14.12c-0.5196 0-0.9375-0.4223-0.9375-0.9472z" fill="#fff"/><rect transform="scale(-1,1)" x="-95.87" y="81.92" width=".2529" height="38.26" rx="0" ry="0" fill="url(#linearGradient27979)"/></g><g transform="matrix(1.088 0 0 1.104 5.83 -3.434)" opacity=".7852" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round"><rect transform="matrix(.6942 0 0 .6942 4.893 5.504)" x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" clip-path="url(#clipPath28045)" fill="none" filter="url(#filter28031)" opacity="1" stroke="#000"/><rect transform="matrix(.6942 0 0 .6942 4.893 5.504)" x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" clip-path="url(#clipPath28041)" fill="url(#radialGradient28110)" filter="url(#filter28031)" opacity="1" stroke="url(#linearGradient28112)"/><rect x="13.9" y="18.03" width="4.35" height="3.676" rx=".4523" ry=".4523" fill="url(#radialGradient28114)" filter="url(#filter28101)" opacity="1" stroke="url(#linearGradient28116)" stroke-width=".3319"/></g><rect x="40.5" y="118.4" width="55.5" height="2.526" fill="url(#linearGradient28138)" opacity=".5469"/><path d="m19.38 8c-2.056 0.1072-3.375 1.705-3.375 4.312v0.5938c0-2.98 1.422-4.312 4.375-4.312 36.52-0.5738 76.29-0.2723 104.2 0 1.896 0 3.375 1.128 3.375 3.312v-0.5938c0-1.543-1.548-3.312-3.375-3.312h-104.2c-0.3692 0-0.7062-0.01531-1 0z" fill="#343434" fill-opacity=".8284"/><path transform="matrix(-1.389 0 0 1.389 183.7 -2.239)" d="m118 8.388 0.1105 1.105 1.458 1e-7c-0.09881-0.4722-0.1984-1.181-1.569-1.105z" fill="url(#radialGradient3084)" fill-rule="evenodd" filter="url(#filter3077)"/><path transform="matrix(1.283 0 0 1.283 -25.43 -2.365)" d="m117.1 8.688 0.1105 1.105h1.458c-0.09881-0.4722-0.1984-1.181-1.569-1.105z" fill="url(#radialGradient3039)" fill-rule="evenodd" filter="url(#filter3077)" opacity=".8614"/><g transform="matrix(1.451 0 0 1.451 -50.3 -58.2)"><path transform="matrix(.6191 0 0 .2597 30.89 94.66)" d="m119.3 115.7a55.41 59.28 0 0 1-55.41 59.28 55.41 59.28 0 0 1-55.41-59.28 55.41 59.28 0 0 1 55.41-59.28 55.41 59.28 0 0 1 55.41 59.28z" fill="url(#radialGradient6026)" filter="url(#filter3797)" opacity=".2472"/><g fill-rule="evenodd"><path d="m90.07 48.29c0.6136-0.6921 4.649-0.3631 8.944 3.536 4.338 3.938 5.21 7.748 4.441 8.615-0.5003 0.5643-1.001 1.129-1.501 1.693-4.462-4.051-8.924-8.101-13.39-12.15 0.5003-0.5643 1.001-1.129 1.501-1.693" fill="#bf0000"/><path d="m36 124 20.25-9.427 0.09417-0.1077-13.27-12.28-0.1277 0.1459-6.944 21.67z" fill="#b3925d" stroke-width="0"/><path d="m97.75 56c-1.026-0.04502-1.882 0.6145-2.666 0.9866-4.175 3.699-21.57 21.65-22 22.17l-17.27 20.66-0.1066 0.1161-9.682 17.63 23.6-5.262 29.94-36.05 3.59-4.294c0.6473-1.2 1.239-7.813-1.742-12.77-1.453-2.415-2.635-3.147-3.661-3.192zm5.402 15.96c-0.02657 0.04924-0.04455 0.1438-0.07109 0.1741-0.01293 0.01476 1.492-1.049 0.6753-0.8705l-0.6042 0.6964z" fill="url(#linearGradient6028)" filter="url(#filter3825)"/><path d="m37 123 18.89-8.78 0.09416-0.1077-12.55-11.61-0.1277 0.1459-6.3 20.35z" fill="url(#radialGradient6030)" stroke-width="0"/></g><g><path d="m49.16 108.9c1.649 1.501 2.755 1.511 3.345 2.047 0.09525 0.08671 0.1753 0.1885 0.2438 0.2917l44.64-51.27-6.481-5.899-44.72 51.36c0.2147 0.05644 0.4159 0.1345 0.6023 0.3042 0.5388 0.4904 0.7178 1.651 2.374 3.159z" fill="url(#linearGradient6032)"/><path d="m54.22 109.1-1.75 2.002c0.5388 0.5309 0.4317 1.466 1.422 2.367 1.067 0.9716 1.63 0.4585 2.322 1.084l1.771-2.026-3.765-3.427z" opacity=".3535"/><path d="m97.16 59.8-44.61 51.23c0.5416 0.5335 0.5174 1.377 1.513 2.284 1.073 0.9765 1.555 0.5563 2.25 1.185l44.63-51.25-3.784-3.445z" fill="url(#linearGradient6034)"/><path d="m47.64 104.8-0.8978 1.027-0.0345 0.03759c0.4475 0.4202 0.3957 1.39 1.878 2.861l0.7509 0.6836c1.616 1.35 2.547 1.167 3.136 1.704l0.9477-1.096-5.781-5.217z" fill="#252525" opacity=".386"/><path d="m43.88 101.4-0.9408 0.9553c0.02064 0.01874-0.05311 0.1047-0.03237 0.1236 0.423 0.3851 0.4128 1.368 1.19 2.202l0.072 0.06553 0.3189 0.2903 0.04115 0.03744c0.9258 0.7216 1.702 0.4636 2.175 0.8293l0.9409-1.076-3.765-3.427z" fill="#131313" opacity=".3535"/><path d="m44.5 104.7c1.032 0.9292 1.738 0.6105 2.288 1.111l44.61-51.23-3.824-3.481-44.63 51.25c0.02096 0.01903 0.04162 0.03789 0.06269 0.05708 0.4297 0.3912 0.4551 1.353 1.495 2.289z" fill="url(#linearGradient6036)"/></g><rect transform="matrix(.7409 .6716 -.6656 .7463 0 0)" x="99.38" y="-24.64" width="18.07" height="4.252" fill="url(#linearGradient6038)"/><path transform="matrix(.3855 -.4404 -1.735 -1.576 62.87 110.5)" d="m82.17 7.462a47.5 0.9714 0 0 1-47.5 0.9714 47.5 0.9714 0 0 1-47.5-0.9714 47.5 0.9714 0 0 1 47.5-0.9714 47.5 0.9714 0 0 1 47.5 0.9714z" fill="url(#linearGradient6040)" filter="url(#filter3849)"/><path transform="matrix(.3185 -.3665 -1.258 -1.145 66.93 101.5)" d="m106.6 7.462a71.88 0.423 0 0 1-71.32 0.423 71.88 0.423 0 0 1-72.44-0.4164 71.88 0.423 0 0 1 70.18-0.4296 71.88 0.423 0 0 1 73.54 0.4096" fill="url(#radialGradient6042)"/><path d="m44.72 120c-1.895-0.7782-4.469-3.936-5.788-5.078l-2.933 9.09 8.721-4.011z" fill="url(#linearGradient6044)" fill-rule="evenodd"/><path d="m97.68 50.96c2.773 2.158 4.755 5.137 4.864 5.423 0.109 0.2861-2.587-3.046-4.878-4.572-2.274-1.514-5.451-1.552-5.686-1.737-0.2348-0.1844-1.823-1.877-0.3822-1.815 1.507 0.06537 3.94 1.036 6.082 2.701z" fill="url(#linearGradient6046)" fill-rule="evenodd"/><g><path d="m93.65 51.59-2.774 3.218 6.482 5.874 2.774-3.187-6.482-5.905z" fill="url(#linearGradient6048)"/><rect transform="matrix(.7404 .6721 -.6634 .7482 0 0)" x="104.6" y="-25.36" width="7.795" height="1.708" fill="url(#radialGradient6050)"/><rect transform="matrix(.6942 .7198 -.7693 .6388 0 0)" x="94.95" y="-31.83" width="5.348" height="1.162" fill="url(#radialGradient6052)"/><rect transform="matrix(-.7515 -.6598 -.5893 .8079 0 0)" x="-120" y="-23.5" width="5.345" height="1.165" fill="url(#radialGradient6054)"/></g></g></svg>
diff --git a/share/icons/svg/document-save.svg b/share/icons/svg/document-save.svg
deleted file mode 100644
index 8e681fdb7..000000000
--- a/share/icons/svg/document-save.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient17395"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".8" offset="1"/></linearGradient><linearGradient id="linearGradient17383"><stop stop-color="#202020" offset="0"/><stop stop-color="#202020" stop-opacity=".7636" offset="1"/></linearGradient><linearGradient id="linearGradient3215"><stop stop-color="#8a8a8a" offset="0"/><stop stop-color="#c6c6c6" offset="1"/></linearGradient><linearGradient id="linearGradient3088"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3111"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".6982" offset=".5"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3250" x1="-97.74" x2="-97.74" y1="1938" y2="1895" gradientTransform="matrix(2.56 0 0 2.583 317.2 -4887)" gradientUnits="userSpaceOnUse"><stop stop-color="#2e2a2b" offset="0"/><stop stop-color="#4c494a" offset=".335"/><stop stop-color="#5b595a" offset=".6675"/><stop stop-color="#6b696a" offset="1"/></linearGradient><filter id="filter3444" x="-.07098" y="-.7965" width="1.142" height="2.593"><feGaussianBlur stdDeviation="2.9868914"/></filter><clipPath id="clipPath3008"><rect x="24.68" y="-68.25" width="78.12" height="55.4" rx="1.134" ry="1.134" fill="none" opacity=".2656" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4"/></clipPath><radialGradient id="radialGradient3083" cx="100.3" cy="42.45" r="38" gradientTransform="matrix(4.571 7.265e-7 -2.985e-7 1.857 -416.6 -84.72)" gradientUnits="userSpaceOnUse"><stop stop-color="#d0ced9" offset="0"/><stop stop-color="#ecf1f9" offset=".25"/><stop stop-color="#fff" offset=".5"/><stop stop-color="#c6d5e3" offset="1"/></radialGradient><filter id="filter3105"><feGaussianBlur stdDeviation="0.66759571"/></filter><radialGradient id="radialGradient3117" cx="64.8" cy="63.78" r="34.04" gradientTransform="matrix(1.14 0 0 .01071 -9.062 63.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3111"/><clipPath id="clipPath3215"><path d="m11.38-167.7c-2.953 0-3.375 0.3641-3.375 3.344v0.7812c0-2.98 0.4216-3.312 3.375-3.312h105.2c2.953 0 3.375 0.3328 3.375 3.312v-0.7812c0-2.98-0.4216-3.344-3.375-3.344h-105.2z" fill="url(#linearGradient3219)"/></clipPath><linearGradient id="linearGradient3219" x1="-98.93" x2="-98.93" y1="1893" y2="1897" gradientTransform="matrix(2.56 0 0 2.583 317.2 -5063)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter3371" x="-.007141" y="-.2269" width="1.014" height="1.454"><feGaussianBlur stdDeviation="0.33324519"/></filter><filter id="filter3417"><feGaussianBlur stdDeviation="0.11145486"/></filter><linearGradient id="linearGradient3453" x1="69.91" x2="70.02" y1="-96.5" y2="-67.84" gradientTransform="translate(.059 131.4)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3474" x1="107.1" x2="107.1" y1="-26.26" y2="134.6" gradientTransform="translate(9.4 .6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><filter id="filter3565" x="-.02336" y="-.1874" width="1.047" height="1.375"><feGaussianBlur stdDeviation="1.0149838"/></filter><radialGradient id="radialGradient3583" cx="28.48" cy="164.1" r="52.14" gradientTransform="matrix(5.492 -.115 .00261 .1246 -128.4 104.8)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></radialGradient><filter id="filter3659" x="-.06901" y="-.1203" width="1.138" height="1.241"><feGaussianBlur stdDeviation="1.9228365"/></filter><radialGradient id="radialGradient3692" cx="64.8" cy="63.78" r="34.04" gradientTransform="matrix(1.055 0 0 .02203 .5328 76.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3111"/><radialGradient id="radialGradient3704" cx="84" cy="91.98" r="32" gradientTransform="matrix(1 0 0 .621 0 37.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><linearGradient id="linearGradient3712" x1="47.61" x2="47.61" y1="104.4" y2="176.4" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter3726" x="-.006058" y="-.6241" width="1.012" height="2.248"><feGaussianBlur stdDeviation="0.18955201"/></filter><radialGradient id="radialGradient3039" cx="118.2" cy="9.12" r="1.284" gradientTransform="matrix(1.209 .9583 -1.402 1.769 -12 -120.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><filter id="filter3077"><feGaussianBlur stdDeviation="0.10453397"/></filter><radialGradient id="radialGradient3084" cx="118.2" cy="9.12" r="1.284" gradientTransform="matrix(1.209 .9583 -1.402 1.769 -11.1 -120.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><radialGradient id="radialGradient3094" cx="104.1" cy="9" r=".4688" gradientTransform="matrix(1 0 0 .8 -.464 1.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><filter id="filter3120"><feGaussianBlur stdDeviation="0.025961538"/></filter><radialGradient id="radialGradient3126" cx="104.1" cy="9" r=".4688" gradientTransform="matrix(1 0 0 .8 -80.46 1.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3088"/><linearGradient id="linearGradient3142" x1="-37.2" x2="-12.62" y1="42.34" y2="106.8" gradientTransform="translate(126.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3192"><feGaussianBlur stdDeviation="0.0231875"/></filter><clipPath id="clipPath3199"><path d="m18.19 132.4c-1.419 0-2.562 1.143-2.562 2.562v37.18h72v-37.18c0-1.419-1.143-2.562-2.562-2.562h-66.88z" fill-opacity=".1283"/></clipPath><linearGradient id="linearGradient3221" x1="64" x2="56" y1="120.1" y2="96.32" gradientTransform="matrix(1 0 0 1.01 0 -1.313)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3215"/><filter id="filter3271" x="-.1238" y="-.09288" width="1.248" height="1.186"><feGaussianBlur stdDeviation="1.2384615"/></filter><linearGradient id="linearGradient3281" x1="68" x2="36" y1="120" y2="84" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient17389" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -206 98.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17391" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.9 81.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17393" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -242.7 76.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17401" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -218.4 75.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17403" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189 83.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17405" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -240 64.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17927" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -169.1 86.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17929" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -217.8 54.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17931" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229.9 62.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17933" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -256.7 79.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17935" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.8 54.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17937" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187.5 97.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17939" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -200.2 81.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17941" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.7 55.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17943" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.6 97.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17945" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.3 61.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17947" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.7 52.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17949" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -248.6 59.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17951" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.5 60.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17953" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -174.9 58.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17955" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.6 67.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17957" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.7 62.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17959" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -233.4 73.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17961" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.9 66.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17963" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -204.1 84.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17965" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.9 77.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17967" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226.2 51.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17969" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -253.1 69.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17971" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.5 92.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17973" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -225.4 94.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17975" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -229.9 65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17977" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -201.8 67.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17979" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -216.7 78.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17981" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -235.6 51.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17983" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -219.9 68.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17985" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -245.5 55.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17987" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.2 71.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17989" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -230.6 56.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17991" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.7 74.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17993" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.5 53.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient17995" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.6 61.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17997" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.3 66.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient17999" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -179.1 67.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18001" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.3 72.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18003" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -194.3 87.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18005" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -236.4 82.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18007" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250 62.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18009" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.4 56.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18011" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.1 57.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18013" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.8 57.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18015" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190 48.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18017" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -192.6 63.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18019" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.9 95.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18021" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -205 77.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18023" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -206.2 48.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18025" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -240.7 82.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18027" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.2 92.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18029" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -183.7 79.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18031" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -189.5 78.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18033" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.7 84.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18035" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -232.3 52.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18037" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -253.5 86.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18039" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -224 90.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18041" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.9 82.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18043" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.6 49.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18045" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.4 83.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18047" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.4 82.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18049" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -217.9 93.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18051" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.2 89.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18053" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.1 52.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18055" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -205.5 84.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18057" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.6 48.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18059" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.6 65.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18061" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220 77.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18063" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -240.7 101.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18065" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.3 95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18067" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.8 89.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18069" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -184.7 49.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18071" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207.7 87.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18073" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.4 55.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18075" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -193.6 76.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18077" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -231.5 70.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18079" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.2 87.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18081" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.6 74.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18083" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -206.3 65.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18085" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -227.3 93.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18087" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.3 70.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18089" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.2 48.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18091" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.4 83.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18093" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.8 57.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18095" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -208.9 53.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18097" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193.9 94.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18099" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252.3 94.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18101" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -252.1 70.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18103" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -213 55.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18105" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239.6 51.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18107" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -196.3 56.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18109" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193.3 87.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18111" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -222 64.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18113" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -212.7 47.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18115" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -175.5 86.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18117" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.3 49.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18119" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -259.2 94.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18121" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.5 67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18123" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.6 62.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18125" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -247.2 61.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18127" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -175.5 61.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18129" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.4 88.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18131" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228.7 88.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18133" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -216.6 58.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18135" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -255 55.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18137" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.5 92.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18139" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.4 57.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18141" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -234.5 89.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18143" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226.6 94.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient18145" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.4 73.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18147" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.6 71.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient18149" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.3 58.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><clipPath id="clipPath25065"><path d="m-283.4 66c-1.177 0-2.125 0.9478-2.125 2.125v37.82h55.41v-37.82c0-1.177-0.9478-2.125-2.125-2.125h-51.16zm6.219 3.344h14.12c0.5196 0 0.9375 0.418 0.9375 0.9375v26.12c0 0.5196-0.418 0.9375-0.9375 0.9375h-14.12c-0.5196 0-0.9375-0.418-0.9375-0.9375v-26.12c0-0.5195 0.418-0.9375 0.9375-0.9375z" fill="url(#linearGradient25069)"/></clipPath><linearGradient id="linearGradient25069" x1="52" x2="52" y1="112" y2="80" gradientTransform="translate(-318.1 -14.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3215"/><linearGradient id="linearGradient25071" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.4 96.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25073" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.2 68.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25075" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -196.2 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25077" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -192.1 74.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25079" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.9 53.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25081" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -180.1 97.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25083" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.8 50.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25085" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243 84.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25087" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -225.5 76.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25089" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -205.7 57.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25091" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -245.9 66.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25093" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -219.8 50.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25095" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -185.1 74.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25097" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.1 42.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25099" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.7 93.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25101" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -201.7 51.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25103" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -212 53.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25105" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.4 89.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25107" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -193.7 64.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25109" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.9 81.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25111" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -204.3 47.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25113" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.7 91.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25115" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -247.7 98.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25117" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -236.3 95.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25119" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -226.7 53.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25121" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226.6 53.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25123" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221 47.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25125" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -247.4 58.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25127" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177.2 45.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25129" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -229.9 74.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25131" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -209.1 97.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25133" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -236.3 46.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25135" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -205.8 94.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25137" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.9 78.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25139" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -214.6 84.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25141" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -230.9 92.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25143" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238 71.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25145" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.6 87.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25147" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -224.3 81.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25149" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.1 90.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25151" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.8 75.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25153" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.1 67.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25155" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.9 54.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25157" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.8 79.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25159" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -243.1 80.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25161" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.5 50.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25163" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -202.3 62.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25165" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -232.5 79.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25167" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.4 54.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25169" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -177.6 80.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25171" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.7 82.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25173" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -216.3 94.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25175" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.1 95.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25177" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.6 43.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25179" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255 76.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25181" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245 89.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25183" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -176.5 72.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25185" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226 79.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25187" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -245.1 89.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25189" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -223 68.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25191" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.3 64.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25193" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.2 58.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25195" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.1 98.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25197" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229 60.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25199" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.7 52.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25201" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.8 73.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25203" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.3 88.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25205" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.3 78.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25207" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.8 94.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25209" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252 59.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25211" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -227 71.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25213" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -177.3 87.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25215" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.9 91.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25217" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226.6 82.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25219" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250 82.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25221" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218.6 48.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25223" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.2 82.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25225" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -244.3 75.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25227" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -178.4 58.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25229" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.7 55.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25231" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.4 62.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25233" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -234.4 79.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25235" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.7 68.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25237" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.9 55.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25239" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -178.2 55.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25241" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -244.8 74.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25243" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.2 52.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25245" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -225.8 97.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25247" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226 65.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25249" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -214.2 85.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25251" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -195.3 78.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25253" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.2 63.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25255" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -248.2 54.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25257" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.5 65.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25259" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226.1 48.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25261" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -242.8 51.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25263" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.1 72.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25265" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -227.1 73.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25267" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.7 102.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25269" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.4 101.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25271" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.1 63.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25273" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.9 72.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25275" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -222.9 73.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25277" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.1 78.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25279" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.5 61.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25281" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190 70.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25283" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -175.6 85.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25285" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.9 87.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25287" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -223.9 73.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25289" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -247.5 76.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25291" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -235.6 53.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25293" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.8 65.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25295" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.1 79.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25297" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.3 94.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25299" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -212.8 79.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25301" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.7 86.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25303" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -248.2 55.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25305" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.3 62.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25307" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -230 99.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25309" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.5 62.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25311" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218 67.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25313" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -219.2 88.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25315" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -238.6 100.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25317" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.9 89.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25319" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.8 78.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25321" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -196.1 69.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25323" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.2 96.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25325" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.5 95.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25327" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.1 101.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25329" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250 84.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25331" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.9 56.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25333" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.9 74.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25335" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.5 92.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25337" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -201 56.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25339" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -222 75.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25341" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.9 87.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25343" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.9 68.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25345" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.3 47.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25347" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179.9 83.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25349" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -253.9 89.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25351" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.7 61.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25353" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -195.1 77.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25355" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220 82.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25357" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -209.3 78.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25359" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.9 66.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25361" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191.9 90.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25363" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -192.1 53.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25365" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.6 51.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25367" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -200.6 97.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25369" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.7 78.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25371" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.1 63.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25373" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -231.4 90.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25375" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.1 66.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25377" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -207.2 89.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25379" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -219.8 73.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25381" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -201 85.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25383" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.6 93.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25385" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.3 48.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25387" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.4 87.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25389" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -211.9 46.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25391" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.8 57.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25393" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.3 55.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25395" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186 80.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25397" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.8 84.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25399" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -240.1 65.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25401" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.6 91.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25403" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.2 69.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25405" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -243.5 52.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25407" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.7 94.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25409" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.8 85.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25411" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.6 57.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25413" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -225.6 65.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25415" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -202.1 48.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25417" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.7 82.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25419" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.8 87.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25421" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.6 90.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25423" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -226.2 49.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25425" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.9 89.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25427" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -200.1 73.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25429" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.9 98.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25431" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -215.8 81.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25433" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -186.5 69.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25435" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.6 67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25437" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.4 86.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25439" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -195 53.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25441" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.6 60.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25443" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.5 93.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25445" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -218 46.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25447" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.4 80.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25449" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.3 74.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25451" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -244.8 56.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25453" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.2 57.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25455" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.2 43.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25457" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192 67.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25459" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -232.1 70.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25461" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -191 79.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25463" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -199.4 76.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25465" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -208.9 79.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25467" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -208.2 48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25469" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -199.4 62.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25471" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.7 102.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25473" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.5 73.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25475" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -215.9 64.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25477" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.8 77.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25479" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -208.1 63.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25481" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -248.3 97.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25483" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -204.8 85.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25485" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.9 54.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25487" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.5 67.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25489" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.3 72.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25491" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -201 88.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25493" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.8 88.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25495" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.3 56.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25497" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -184.4 88.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25499" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -199 91.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25501" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.5 50.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25503" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -254.9 69.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25505" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.9 67.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25507" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -245.4 74.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25509" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -184.4 57.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25511" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.5 92.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25513" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -176.8 50.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25515" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -221 65.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25517" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -221.7 84.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25519" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -180.3 59.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25521" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -233.9 59.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25523" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -183.1 59.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25525" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.9 95.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25527" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196.3 96.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25529" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -242 51.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25531" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.4 78.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25533" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -256.6 72.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25535" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.8 87.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25537" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.6 45.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25539" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.5 71.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25541" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.9 55.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25543" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221.5 73.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25545" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -220.8 49.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25547" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220.2 64.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25549" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.5 61.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25551" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -251.5 43.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25553" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -222.6 66.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25555" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -215.8 80.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25557" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -219.8 71.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25559" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.9 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25561" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -204.4 63.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25563" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179.4 90.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25565" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.1 43.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25567" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.7 94.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25569" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.4 100.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25571" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.9 84.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25573" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -211 65.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25575" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.8 83.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25577" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -204.8 62.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25579" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201.4 94.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25581" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.1 58.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25583" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -233.2 75.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25585" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.2 48.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25587" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -235 55.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25589" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -189.3 52.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25591" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -170.6 77.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25593" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -194.1 91.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25595" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.6 78.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25597" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -192.9 89.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25599" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.2 45.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25601" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.5 43.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25603" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.8 48.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25605" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.2 87.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25607" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -212.6 55.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25609" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207.8 79.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25611" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.9 50.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25613" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.9 47.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25615" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -178 76.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25617" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -249.9 78.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25619" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -203.7 56.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25621" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -179.4 72.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25623" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -194.8 70.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25625" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -227.6 85.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25627" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.4 91.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25629" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.1 83.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25631" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -225.7 50.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25633" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -212.8 76.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25635" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186.5 86.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25637" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -244.6 44.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25639" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.2 77.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25641" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.8 94.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25643" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.9 62.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25645" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -178.7 73.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25647" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187.5 77.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25649" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -240.5 69.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25651" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.2 66.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25653" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.1 62.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25655" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.5 90.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25657" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226 54.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25659" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.5 81.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25661" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -185.6 71.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25663" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.4 62.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25665" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -256.1 56.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25667" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.9 53.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25669" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -185.2 95.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25671" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.3 86.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25673" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -214.1 65.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25675" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -222.3 98.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25677" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.5 75.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25679" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220.1 90.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25681" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.3 94.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25683" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.7 58.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25685" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.2 88.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25687" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.9 85.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25689" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.4 99.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25691" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -200 52.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25693" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -190.3 78.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25695" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.4 76.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25697" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -221.8 48.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25699" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.8 65.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25701" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -241.8 76.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25703" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -213.1 99.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25705" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -257 83.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25707" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.4 61.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25709" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.7 81.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25711" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.7 82.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25713" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.9 85.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25715" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.1 80.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25717" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170.3 56.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25719" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239 90.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25721" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252.6 62.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25723" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -170.1 58.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25725" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -232.7 74.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25727" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.7 60.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25729" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.2 74.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25731" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.3 69.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25733" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -213.8 68.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25735" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.2 72.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25737" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -239.3 69.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25739" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -235.3 94.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25741" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -239.6 57.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25743" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -259.4 93.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25745" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -199.8 81.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25747" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.8 49.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25749" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.8 99.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25751" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -218.5 99.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25753" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -238.6 57.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25755" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.8 83.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25757" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.1 89.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25759" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.2 58.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25761" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.7 60.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25763" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.1 96.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25765" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -173.4 62.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25767" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.5 78.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25769" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.3 66.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25771" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -251.7 70.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25773" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -205.4 95.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25775" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.9 50.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25777" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -203.6 72.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25779" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -245.6 81.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25781" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194.1 54.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25783" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -240.3 58.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25785" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -199.3 66.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25787" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.3 83.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25789" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.7 54.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25791" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.8 71.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25793" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192.4 50.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25795" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.5 95.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25797" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -215.1 80.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25799" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.1 94.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25801" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222.1 48.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25803" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -242.5 69.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25805" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.1 68.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25807" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.9 91.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25809" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251 46.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25811" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.9 73.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25813" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -229.6 93.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25815" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -222.6 53.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25817" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.1 51.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25819" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.3 97.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25821" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.5 74.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25823" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.1 92.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25825" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -223.9 60.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25827" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179 78.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25829" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.9 51.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25831" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.3 85.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25833" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252.5 90.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25835" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.4 57.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25837" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.2 68.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25839" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.2 61.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25841" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -199.3 58.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25843" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.3 83.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25845" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -240.2 75.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25847" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254 55.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25849" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -176.9 96.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25851" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218 66.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25853" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.8 93.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25855" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -227 55.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25857" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.2 60.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25859" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -190.3 80.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25861" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.1 50.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25863" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239.5 78.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25865" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.7 79.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25867" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -177.8 77.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25869" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.9 54.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25871" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -244.1 96.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25873" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.7 77.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25875" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.5 44.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25877" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -203.6 70.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25879" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -210.8 63.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25881" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.4 58.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25883" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -225 100.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25885" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.3 51.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25887" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.2 93.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25889" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.3 41.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25891" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201.3 49.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25893" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -220.4 67.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25895" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -242.3 59.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25897" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -242.1 53.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25899" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -221.6 81.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25901" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179.9 83.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25903" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.5 89.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25905" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.3 89.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25907" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.3 68.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25909" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -256.2 44.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25911" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230.6 59.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25913" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.1 56.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25915" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.8 75.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25917" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -199.9 101)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25919" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.3 68.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25921" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.8 55.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25923" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.6 50.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25925" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.3 92.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25927" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -181.7 69.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25929" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -205.2 88.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25931" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -207.7 95.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25933" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -208.9 91.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25935" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.2 61.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25937" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179 55.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25939" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -232.4 81.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25941" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.8 67.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25943" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -234.5 51.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25945" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.8 57.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25947" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -195.3 72.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25949" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.1 89.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25951" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.6 66.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25953" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -197.5 98.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25955" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.9 95.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25957" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.6 70.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25959" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.3 82.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25961" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -190 59.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25963" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.9 84.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25965" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -223.1 80.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25967" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -217 56.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25969" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -253.5 59.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25971" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.9 81.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25973" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -207.7 97.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25975" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.8 66.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25977" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.2 55.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25979" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -224.3 99.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25981" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -246.2 91.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25983" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -216 57.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25985" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -189.7 94.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25987" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217.9 80.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25989" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.9 84.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25991" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.1 60.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient25993" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.4 60.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25995" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -193.5 47.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25997" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.4 59.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient25999" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -237.6 47.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26001" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -232.8 100.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26003" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177.6 45.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26005" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -258.4 92.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26007" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.8 54.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26009" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.2 82.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26011" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -256.9 69.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26013" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -191.9 98.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26015" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -219.2 89.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26017" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.3 81.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26019" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -227.2 97.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26021" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -230.9 90.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26023" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.2 82.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26025" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.3 57.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26027" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.9 51.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26029" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -193.4 66.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26031" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.7 96.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26033" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.3 55.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26035" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -168.7 60.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26037" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -198.5 51.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26039" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.5 58.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26041" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.9 91.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26043" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.3 84.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26045" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -234.1 94.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26047" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -232.6 86.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26049" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -196.1 77.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26051" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -175 58.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26053" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.1 93.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26055" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -253.3 88.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26057" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -209.8 59.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26059" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.9 100.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26061" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -219.4 47.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26063" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254.7 67.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26065" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.5 73.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26067" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.9 71.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26069" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.7 74.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26071" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -188.1 99.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26073" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -211.8 83.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26075" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -243.5 58.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26077" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -227.7 53.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26079" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -209.7 56.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26081" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.5 45.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26083" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -246.2 82.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26085" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -188.9 73.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26087" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.6 65.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26089" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -254 60.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26091" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -195.6 94.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26093" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191 58.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26095" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221.8 57.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26097" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.9 81.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26099" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -234.4 64.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26101" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.9 53.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26103" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.2 62.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26105" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.7 57.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26107" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -219.2 73.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26109" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -198.1 81.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26111" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -188.7 64.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26113" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.1 96.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26115" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.9 82.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26117" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.8 74.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26119" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.6 96.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26121" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -248.6 90.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26123" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.2 44.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26125" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -185.6 77.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26127" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -250.5 74.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26129" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.7 47.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26131" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.2 84.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26133" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -244.1 100.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26135" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -189.5 85.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26137" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -212 96.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26139" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -234.9 43.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26141" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200 52.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26143" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.3 89.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26145" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -217 46.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26147" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256 89.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26149" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.6 96.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26151" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.4 53.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26153" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.9 65.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26155" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -188.5 79.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26157" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -217.7 70.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26159" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.4 72.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26161" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -209.6 74.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26163" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -194.7 48.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26165" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -175.9 74.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26167" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 101.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26169" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -242 76.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26171" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.3 100.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26173" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188 72.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26175" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -253.2 59.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26177" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.1 53.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26179" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203 53.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26181" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250.1 98.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26183" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -234.6 94.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26185" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.1 95.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26187" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -217.4 55.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26189" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.6 82.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26191" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -169.5 98.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26193" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -181 58.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26195" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.5 97.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26197" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -241 92.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26199" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.8 91.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26201" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.1 56.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26203" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.8 61.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26205" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.2 66.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26207" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.6 71.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26209" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -179.6 99.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26211" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -216 87.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26213" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192 75.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26215" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201.7 90.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26217" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -198.9 97.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26219" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.7 56.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26221" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -175.7 88.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26223" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231 69.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26225" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -255.4 78.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26227" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -243.5 71.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26229" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -208.4 89.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26231" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -223.1 100.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26233" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -169.8 88.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26235" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -241.4 81.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26237" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226.5 80.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26239" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.8 102.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26241" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.7 69.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26243" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.9 91.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26245" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.5 43.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26247" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -234.6 92.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26249" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179.9 93.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26251" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 67.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26253" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -255.2 61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26255" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.6 67.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26257" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -198.3 85.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26259" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.9 79.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26261" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -241.3 52.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26263" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.9 98.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26265" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -208.9 73.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26267" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -245.7 64.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26269" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -204.8 48.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26271" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.3 52.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26273" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -237.3 53.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26275" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -187.3 58.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26277" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.9 93.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26279" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -203 86.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26281" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170.5 94.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26283" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -205.8 73.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26285" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -218.1 91.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26287" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -196.4 88.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26289" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -194.3 63.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26291" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -192.9 49.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26293" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -174.3 91.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26295" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -199.9 86.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26297" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.6 53.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26299" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -176.4 70.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26301" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.4 49.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26303" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -207.8 81.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26305" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.7 77.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26307" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -228.9 68.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26309" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.2 65.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26311" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.8 74.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26313" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -210 90.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26315" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177.9 83.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26317" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245.1 92.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26319" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214 42.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26321" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -188.8 95.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26323" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182.4 68.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26325" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -213.6 65.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26327" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -235.7 78.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26329" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.7 95.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26331" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.8 70.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26333" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -192.9 77.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26335" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -258.4 93.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26337" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -196.6 76.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26339" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.4 89.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26341" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222 73.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26343" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -212.5 49.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26345" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -228.9 43.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26347" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -189.8 61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26349" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.5 54.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26351" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -183.2 61.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26353" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.9 67.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26355" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.2 56.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26357" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.7 65.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26359" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -229.4 47.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26361" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.4 80.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26363" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -212.6 71.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26365" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.5 58.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26367" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -257.1 75.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26369" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -239.8 88.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26371" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.6 72.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26373" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -193.4 56.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26375" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.9 99.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26377" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.9 76.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26379" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.8 73.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26381" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -174.5 68.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26383" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.3 73.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26385" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -233 98.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26387" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.5 54.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26389" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -236 63.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26391" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192 50)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26393" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -195.1 59.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26395" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -239.1 102.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26397" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.3 70.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26399" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.7 96.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26401" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.4 68.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26403" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233.6 60.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26405" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.4 53.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26407" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -170.3 92.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26409" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.7 68.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26411" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.7 53.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26413" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.2 84.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26415" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.4 85.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26417" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224 73.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26419" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.6 52.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26421" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245 68.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26423" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.7 95.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26425" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.9 53.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26427" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229 94.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26429" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252 95.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26431" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.8 59.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26433" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -199.3 64.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26435" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -190.6 97.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26437" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -217.1 71.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26439" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238.7 91.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26441" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -211.9 44.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26443" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.6 52.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26445" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.6 48.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26447" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -251 62.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26449" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.4 58.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26451" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218.3 46.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26453" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -211.1 58.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26455" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -230.6 101)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26457" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -219 46.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26459" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.3 67.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26461" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.8 59.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26463" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -226.5 71.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26465" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.6 67.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26467" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -255.5 96.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26469" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.2 62.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26471" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -177 49.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26473" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -221.6 67.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26475" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -242.3 51.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26477" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -186.8 42.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26479" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -213.3 52.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26481" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.6 87.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26483" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.6 74.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26485" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -242.5 84.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26487" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -202.9 91.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26489" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -214 49.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26491" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -207.5 56.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26493" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.5 54.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26495" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -224.2 63.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26497" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228 64.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26499" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -188.7 54.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26501" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -236.6 82.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26503" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -238.7 55.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26505" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.7 93.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26507" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.1 98.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26509" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -196.4 58.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26511" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -188.8 60.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26513" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -256.5 67.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26515" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -252.1 52.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26517" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -235.9 73.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26519" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.7 94.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26521" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.5 73.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26523" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.2 75.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26525" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -244.4 83.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26527" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -184.2 85.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26529" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.2 54.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26531" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.3 65.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26533" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -222 57.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26535" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -244.2 93.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26537" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.8 93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26539" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.7 51.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26541" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -178.5 61.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26543" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.8 51.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26545" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.4 61.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26547" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -201.7 73.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26549" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -211.6 66.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26551" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174.7 68.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26553" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250.7 87.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26555" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.6 51.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26557" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -224.4 92.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26559" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -248.1 89.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26561" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -253.1 52.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26563" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -197.2 71.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26565" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -252.7 80.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26567" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178 96.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26569" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -244.4 93.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26571" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -226.6 48.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26573" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.1 54.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26575" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -238.3 80.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26577" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.9 96.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26579" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -175.9 49.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26581" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.9 86.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26583" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.4 70.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26585" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -208.8 70.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26587" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202 53.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26589" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229 69.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26591" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -253.4 62.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26593" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -252.5 65.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26595" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.7 86.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26597" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -174.6 64.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26599" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -229.6 56.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26601" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -213.7 86.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26603" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.8 85.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26605" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.2 72.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26607" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -185.2 63.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26609" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -247.3 80.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26611" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -206 72.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26613" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -254 70.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26615" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -249.7 93.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26617" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -255.2 59.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26619" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -218.8 89.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26621" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -225 84.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26623" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.6 91.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26625" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.4 97.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26627" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -252.7 97.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26629" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.9 94.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26631" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256.5 58.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26633" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.9 44.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26635" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.7 51.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26637" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.4 73.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26639" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.6 50.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26641" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -201 69.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26643" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196.8 94.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26645" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.1 94.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26647" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.1 67.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26649" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -214.2 58.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26651" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.7 82.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26653" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -189 48.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26655" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197 46.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26657" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.4 56.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26659" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -247.8 93.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26661" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204.2 64.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26663" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -252.1 47.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26665" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.4 74.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26667" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -257.3 77.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26669" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -233 79.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26671" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.9 48.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26673" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -236.3 60.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26675" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220.9 52.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26677" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -252.6 67.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26679" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206.5 48.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26681" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -206.6 60.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26683" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.5 94.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26685" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -224.1 48.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26687" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -242.6 82.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26689" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226.8 83.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26691" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.4 88.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26693" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.1 41.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26695" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.2 93.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26697" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -211.4 97.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26699" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226.1 82.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26701" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.2 78.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26703" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.7 92.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26705" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -230.1 85.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26707" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.9 84.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26709" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.5 62.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26711" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.7 99.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26713" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -251.2 85.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26715" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -184.3 54.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26717" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.9 91.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26719" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199.5 88.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26721" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.1 72.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26723" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.7 77.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26725" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -180.4 57.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26727" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.3 89.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26729" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187 95.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26731" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -192.8 59.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26733" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -242.4 76.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26735" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -226.4 74.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26737" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -173.2 83.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26739" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -243.4 62.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26741" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.5 76.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26743" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -239.1 78.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26745" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.4 72.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26747" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254.3 80.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26749" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.2 93.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26751" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -246.1 79.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26753" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.3 58.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26755" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.6 61.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26757" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -260.1 96.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26759" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.2 54.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26761" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.6 52.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26763" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -237.4 62.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26765" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187 42.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26767" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -235.1 58.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26769" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -206.8 98.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26771" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.3 45.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26773" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -193.4 48.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26775" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -239.3 48.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26777" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.6 47.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26779" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -208.6 55.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26781" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -220.8 83.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26783" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -213.7 91.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26785" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -226.9 74.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26787" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238.1 84.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26789" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -177.6 61.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26791" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -189.1 54.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26793" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -210.7 74.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26795" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -248.3 100.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26797" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207 89.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26799" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -235.5 98.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26801" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191.1 82.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26803" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -176.3 72.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26805" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -183.6 99.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26807" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.6 53.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26809" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -253.8 69.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26811" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -215.6 48.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26813" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -193.8 54.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26815" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257 67.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26817" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -249.9 99.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26819" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.6 49.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26821" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -169.2 75.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26823" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256.2 94.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26825" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.8 82.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26827" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -191 52.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26829" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -197.3 65.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26831" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.9 78.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26833" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170 55.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26835" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.1 96.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26837" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -179.3 83.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26839" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -246.9 100.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26841" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.8 93.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26843" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -201.8 76.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26845" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -202 65.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26847" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -215.1 78.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26849" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252.2 50.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26851" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -221.1 47.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26853" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.8 48.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26855" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193 90.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26857" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -239.8 74.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26859" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -241.4 43.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26861" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -190.8 79.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26863" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182 94.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26865" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -195.7 53.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26867" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.9 50.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26869" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.6 61.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26871" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.5 78.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26873" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.6 53.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26875" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.5 51.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26877" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.9 49.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26879" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.9 46.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26881" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -198.6 48.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26883" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -240.2 89.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26885" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -237.2 73.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26887" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -191.8 97.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26889" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.3 72.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26891" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.5 67.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26893" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.1 49.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26895" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -259.6 54.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26897" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -188 93.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26899" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -227 73.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26901" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -197.7 55.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26903" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -176.3 62.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26905" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -178 51.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26907" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.4 48.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26909" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.8 49.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26911" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -216.4 55.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26913" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.9 98.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26915" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -174.6 95.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26917" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.9 66.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26919" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190.2 43.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26921" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.8 59.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26923" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -250.4 67.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26925" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221.4 56.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26927" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.3 47.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26929" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234 52.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26931" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -254.2 74.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26933" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -233.9 41.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26935" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.2 78.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26937" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.4 89.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26939" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.4 94.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26941" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.7 88.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26943" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -242.3 88.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26945" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -185.4 61.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26947" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -208 80.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26949" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -221 59.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26951" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.9 46.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26953" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -239.9 86.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26955" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233.3 58.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26957" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -208.2 64.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26959" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -210.6 92.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26961" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.4 81.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26963" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.5 98.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26965" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -220.5 62.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26967" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.8 51.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26969" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -194 73.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26971" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -228.1 75.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26973" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -254.7 58.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26975" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -232.9 95.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26977" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.9 52.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26979" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.3 68.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26981" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.3 73.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26983" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -253.8 68.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26985" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.2 67.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26987" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.7 54.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26989" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -195.9 93.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26991" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230 73.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26993" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -207.1 55.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient26995" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -189.5 83.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26997" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -241.7 50.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient26999" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -196.1 65.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27001" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -176.5 90.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27003" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -179.8 48.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27005" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.2 47.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27007" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223.5 54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27009" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -182.5 89.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27011" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.3 83.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27013" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.7 56.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27015" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -210.9 69.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27017" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -215.5 89.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27019" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.1 46.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27021" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.1 87.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27023" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.4 52.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27025" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -214.4 76.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27027" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.5 72.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27029" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.3 96.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27031" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -168.9 72.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27033" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -184.5 81.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27035" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.7 82.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27037" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -207.7 94.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27039" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.6 67.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27041" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.9 95.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27043" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -214.7 91.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27045" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -216.4 79.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27047" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.2 93.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27049" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -198.7 60.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27051" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190 76.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27053" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -220.4 55.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27055" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -196.9 63.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27057" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.9 92.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27059" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -256.4 51.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27061" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -247.7 59.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27063" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -191.5 65.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27065" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.3 71.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27067" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -179.2 47.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27069" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -256.5 86.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27071" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -214.6 90.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27073" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -180 47.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27075" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.3 65.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27077" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -250.8 56.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27079" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -240.5 92.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27081" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -238.1 75.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27083" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -250.7 53.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27085" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -168.3 71.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27087" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -240.8 96.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27089" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.1 43.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27091" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -244.8 102.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27093" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.3 59.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27095" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.1 99.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27097" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235 83.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27099" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.5 73.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27101" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -205.8 53.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27103" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -251.8 93.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27105" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -181.9 47.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27107" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -213.6 50.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27109" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.4 81.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27111" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.2 79.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27113" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -229.2 71.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27115" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.8 50.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27117" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -247.2 67.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27119" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.4 69.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27121" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -252.9 88.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27123" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -206 45.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27125" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -201.4 93.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27127" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -197.5 50.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27129" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -214.4 51.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27131" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -232.3 56.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27133" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -240.5 62.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27135" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.5 52.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27137" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -225.1 81.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27139" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -194.4 90.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27141" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -228.2 56.49)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27143" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.6 73.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27145" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -221.8 73.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27147" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255.4 69.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27149" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -205.7 71.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27151" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -249.1 78.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27153" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226.8 67.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27155" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -216.1 98.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27157" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.3 52.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27159" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.5 49.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27161" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -186.9 66.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27163" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.6 62.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27165" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.4 58.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27167" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -179.4 61.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27169" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -246.8 55.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27171" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.8 56.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27173" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.8 46.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27175" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.5 79.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27177" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.7 98.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27179" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.5 86.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27181" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -190 63.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27183" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.6 86.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27185" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.5 61.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27187" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -208.4 103.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27189" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.5 47.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27191" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -178.1 92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27193" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -223.8 57.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27195" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186.7 79.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27197" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -197.3 49.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27199" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.9 65.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27201" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.3 65.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27203" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -207.3 56.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27205" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234.9 75.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27207" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -245.6 70.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27209" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -206.1 54.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27211" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -211.5 95.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27213" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -237.4 80.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27215" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -204.6 76.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27217" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -259.2 47.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27219" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -221.4 43.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27221" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -202.9 68.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27223" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -202.2 92.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27225" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -239.2 71.79)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27227" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -194.6 47.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27229" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -231.2 44.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27231" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192 90.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27233" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.9 43.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27235" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182.3 49.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27237" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.1 89.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27239" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -195.3 60.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27241" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.8 77.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27243" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.7 62.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27245" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -234.4 82.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27247" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.6 96.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27249" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -189.7 51.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27251" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.5 53.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27253" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -202.9 52.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27255" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.7 43.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27257" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.1 89.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27259" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -212.1 66.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27261" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.5 91.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27263" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.1 64.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27265" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -245 52.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27267" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -184 50.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27269" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.7 73.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27271" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -201 69.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27273" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -257.8 97.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27275" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -193 59.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27277" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.6 72.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27279" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.7 76.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27281" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -216.5 44.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27283" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175 91.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27285" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -244.3 82.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27287" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -184 54.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27289" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228.4 70.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27291" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -235 50.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27293" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.9 65.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27295" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -171.4 77.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27297" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.8 69.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27299" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -188.4 78.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27301" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234.9 60.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27303" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196.7 46.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27305" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -200.6 70.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27307" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -182.1 83.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27309" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -227.9 58.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27311" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.2 69.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27313" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -174.2 61.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27315" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190.2 92.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27317" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.6 85.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27319" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -207.9 72.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27321" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -251.2 54.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27323" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -215.4 58.31)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27325" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -174.8 54.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27327" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -255 89.66)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27329" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -204.3 76.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27331" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -169.7 96.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27333" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.4 98.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27335" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -205.6 99.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27337" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -248.6 71.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27339" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187 42.64)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27341" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -256.3 55.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27343" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -200.6 90.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27345" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -258.8 84.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27347" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180 69.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27349" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -227.7 70.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27351" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -247.6 71.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27353" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.3 61.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27355" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -197.1 61.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27357" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -233.5 59.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27359" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -232.8 71.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27361" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -209 69.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27363" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249 72.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27365" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.2 93.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27367" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -186.7 86.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27369" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -200.6 88.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27371" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -182.8 53.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27373" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -172.7 63.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27375" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -228.4 98.39)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27377" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -181.9 71.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27379" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -177.6 56.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27381" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -226.3 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27383" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.9 76.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27385" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -186.9 59.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27387" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -214.2 79.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27389" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -217.2 82.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27391" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -255.4 71.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27393" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -247.3 78.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27395" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -236.3 82.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27397" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -219.7 92.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27399" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -178.4 43.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27401" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -240.9 58.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27403" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -223 102.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27405" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218.7 86.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27407" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -209.7 73.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27409" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -216.7 93.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27411" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -236.8 92.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27413" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -196.7 97.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27415" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.2 99.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27417" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -191.3 57.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27419" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -186.1 90.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27421" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -200.8 97.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27423" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -238.8 49.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27425" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -212.6 76.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27427" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 97.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27429" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.5 101.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27431" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.4 67.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27433" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.2 53.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27435" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -200.4 77.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27437" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -242.4 63.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27439" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -242.8 100.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27441" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -188.6 77.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27443" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -248.6 70.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27445" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -194.6 95.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27447" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.1 79.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27449" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -252.7 77.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27451" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217 95.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27453" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -255 49.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27455" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -210.8 45.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27457" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -211.5 60.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27459" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -187.7 62.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27461" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -254.4 93.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27463" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -188.8 91.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27465" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.4 51.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27467" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.8 67.53)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27469" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.7 73.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27471" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.4 60.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27473" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -182.1 87.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27475" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -214.9 99.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27477" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -246.9 81.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27479" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -187.9 86.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27481" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -199.1 93.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27483" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -182.7 43.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27485" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -236.1 84.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27487" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -203.5 54.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27489" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -231.6 73.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27491" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -228.3 55.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27493" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -235.9 46.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27495" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233 91.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27497" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -184.7 59.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27499" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -204.5 65.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27501" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -230.5 90.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27503" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -197.2 81.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27505" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -210.8 79.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27507" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -180.4 93.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27509" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -191.6 90.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27511" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -199 100.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27513" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.9 48.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27515" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -221.9 55.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27517" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -257.5 56.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27519" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -190.6 42.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27521" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -230.2 56.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27523" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -233.7 75.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27525" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -229.5 62.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27527" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -230.7 81.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27529" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -254.7 61.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27531" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.2 49.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27533" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.5 86.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27535" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.2 47.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27537" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -179.8 79.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27539" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.2 46.78)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27541" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -170.1 95.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27543" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.7 55.18)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27545" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -235.3 79.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27547" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -173.5 61.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27549" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -245.8 63.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27551" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -184 55.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27553" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -225.4 76.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27555" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -192.3 93.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27557" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -206.2 47.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27559" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -245.6 63.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27561" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.6 50.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27563" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -181.1 45.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27565" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182 82.93)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27567" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -224.8 74.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27569" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -210.4 70.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27571" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -252.1 61.84)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27573" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.6 69.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27575" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -222.8 49.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27577" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -203.2 91.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27579" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -197.2 84.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27581" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.9 92.82)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27583" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -174 58.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27585" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -259.6 49.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27587" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -216.4 65.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27589" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -215.8 53.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27591" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -222.3 89.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27593" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -224.4 64.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27595" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -195.5 92.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27597" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -196.4 63.91)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27599" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -254.4 92.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27601" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -197.8 73.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27603" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256 98.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27605" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -217.6 67.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27607" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -219.2 83.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27609" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.2 64.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27611" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -231.2 50.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27613" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -191.6 93.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27615" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.1 83.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27617" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -237.2 96.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27619" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -209 102.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27621" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -187.5 92.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27623" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.7 50.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27625" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -224.5 61.12)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27627" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -220.7 85.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27629" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -226 93.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27631" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -190.1 77.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27633" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.5 86.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27635" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -255.8 90.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27637" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -224.2 74.42)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27639" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -244.9 42.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27641" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -253.7 88.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27643" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -218.9 53.07)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27645" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -209.8 100.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27647" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.4 81.97)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27649" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -228.1 47.57)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27651" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -244.7 79.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27653" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -234.5 94.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27655" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -230.4 46.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27657" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -207.9 69.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27659" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.7 60.35)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27661" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -200 72.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27663" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -233.2 88.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27665" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -228.8 53.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27667" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -251.8 65.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27669" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218 84.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27671" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -203.6 90.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27673" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -183.5 73.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27675" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -227.8 91.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27677" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -238.2 77.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27679" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -227.5 61.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27681" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -178.1 47.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27683" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -224.9 65.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27685" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -182.7 50.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27687" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -258.5 96.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27689" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -242.1 85.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27691" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -254.5 71.55)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27693" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -185.5 70.62)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27695" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -220 86.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27697" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.5 92.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27699" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -223.9 55.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27701" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -243.5 45.74)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27703" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -185.6 53.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27705" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -204 75.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27707" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -195.6 50.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27709" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -240 97.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27711" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -229.5 97.99)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27713" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -201.8 92.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27715" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -175.2 48.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27717" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.8 63.06)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27719" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -237 71.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27721" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -211.1 68.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27723" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -252.4 50.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27725" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.2 73.09)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27727" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -225.8 51.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27729" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -210.3 51.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27731" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -246.8 89.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27733" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -246.9 71.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27735" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -249.7 42.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27737" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -223.3 53.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27739" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -231.8 49.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27741" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -218 48.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27743" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -180.1 52.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27745" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -188.1 54.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27747" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -198.1 60.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27749" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -241.4 59.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27751" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -245.1 63.05)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27753" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.3 55.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27755" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -227.7 54.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27757" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -233.6 84.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27759" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.4 46.75)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27761" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -245.8 50.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27763" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.9 87.03)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27765" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -250.3 53.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27767" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -238.1 91.11)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27769" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -250.6 74.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27771" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -231.6 65.67)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27773" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -178.7 79.94)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27775" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -242.8 77.13)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27777" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.3 67.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27779" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -196.8 45.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27781" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -234 96.01)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27783" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -256.8 56.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27785" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -231.3 95.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27787" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -234.8 96.41)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27789" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -243.5 66.48)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27791" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -239.4 89.33)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27793" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -210.7 68.29)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27795" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -196 61.21)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27797" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -183.7 87.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27799" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -198.9 70.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27801" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -253.5 99.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27803" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -229.4 45.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27805" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -175.9 66.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27807" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -203.5 46.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27809" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -231.8 47.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27811" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -258.8 102.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27813" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -193.8 73.86)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27815" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -211.9 47.2)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27817" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -184.7 65.26)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27819" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -200.2 55.77)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27821" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -187.5 48.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27823" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -184.5 77.71)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27825" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -203.5 80.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27827" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.1 93.52)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27829" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -227.8 93.56)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27831" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -189.4 60.81)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27833" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -240.3 51.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27835" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -225.9 56.28)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27837" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -186.3 64.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27839" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -218.1 62.72)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27841" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -171.1 68.24)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27843" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -230 81.83)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27845" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.7 80.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27847" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217 59.43)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27849" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -215 47.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27851" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -241.3 83.73)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27853" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -218.1 98.54)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27855" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -202.9 68.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27857" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -216.7 62.68)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27859" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -257.8 49.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27861" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -202.4 88.14)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27863" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -247.1 68.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27865" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -249.1 71.85)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27867" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -211.7 74.37)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27869" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -209.2 73.58)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27871" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -241.1 102.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27873" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -212.4 85.59)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27875" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -208.7 69.44)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27877" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -238.5 55.92)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27879" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -213.2 91.45)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27881" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -232.7 79.34)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27883" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -169.3 50.25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27885" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -190.8 91.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27887" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -191.9 52.95)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27889" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -178.8 64.87)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27891" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -186.3 86.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27893" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -249.1 54.08)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27895" x1="-287.6" x2="-224.1" y1="52.07" y2="52.07" gradientTransform="matrix(.1674 0 0 .1674 -217 71.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27897" x1="-281.3" x2="-165.6" y1="56.95" y2="56.95" gradientTransform="matrix(.1674 0 0 .1674 -213.6 98.16)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27899" x1="-303.9" x2="-188.2" y1="63.21" y2="63.21" gradientTransform="matrix(.1674 0 0 .1674 -185.5 77.76)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17383"/><linearGradient id="linearGradient27901" x1="-287.6" x2="-224.1" y1="71.91" y2="71.91" gradientTransform="matrix(.1674 0 0 .1674 -203.8 72.15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27903" x1="-281.3" x2="-165.6" y1="76.79" y2="76.79" gradientTransform="matrix(.1674 0 0 .1674 -208.7 67.38)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><linearGradient id="linearGradient27905" x1="-303.9" x2="-188.2" y1="83.05" y2="83.05" gradientTransform="matrix(.1674 0 0 .1674 -225.4 74.32)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17395"/><filter id="filter27927"><feGaussianBlur stdDeviation="0.071512502"/></filter><radialGradient id="radialGradient27939" cx="59.98" cy="120.8" r="29.46" gradientTransform="matrix(1.879 -5.004e-7 5.925e-8 .2084 -52.74 95.65)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></radialGradient><filter id="filter27965" x="-.05577" y="-.5665" width="1.112" height="2.133"><feGaussianBlur stdDeviation="1.3689748"/></filter><linearGradient id="linearGradient27979" x1="-80.1" x2="-89.99" y1="78.44" y2="115.8" gradientTransform="matrix(1 0 0 1.01 0 -1.313)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient27989" x1="86.69" x2="90.05" y1="100.8" y2="100.8" gradientTransform="translate(1)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><filter id="filter28003" x="-.2549" y="-.02261" width="1.51" height="1.045"><feGaussianBlur stdDeviation="0.35662617"/></filter><filter id="filter28031" x="-.1467" y="-.1015" width="1.293" height="1.203"><feGaussianBlur stdDeviation="0.55"/></filter><clipPath id="clipPath28041"><rect x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" opacity=".1836"/></clipPath><clipPath id="clipPath28045"><rect x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" opacity=".1836"/></clipPath><filter id="filter28101"><feGaussianBlur stdDeviation="0.04177847"/></filter><radialGradient id="radialGradient28110" cx="16" cy="18" r="4" gradientTransform="matrix(1,0,0,1.5,0,-9)" gradientUnits="userSpaceOnUse"><stop stop-color="#7a7a7a" offset="0"/><stop stop-opacity=".4909" offset="1"/></radialGradient><linearGradient id="linearGradient28112" x1="16" x2="16" y1="1.595" y2="18.76" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient28114" cx="14" cy="19.7" r="2.15" fy="18.84" gradientTransform="matrix(1.106 0 0 1.106 .5471 -2.299)" gradientUnits="userSpaceOnUse"><stop stop-color="#868385" offset="0"/><stop stop-color="#4a4949" offset="1"/></radialGradient><linearGradient id="linearGradient28116" x1="11.92" x2="11.92" y1="17.56" y2="20.04" gradientTransform="matrix(1.106 0 0 1.106 .5471 -2.299)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop offset="1"/></linearGradient><linearGradient id="linearGradient28138" x1="60.25" x2="60.25" y1="122" y2="118.5" gradientTransform="matrix(1 0 0 1.01 0 -1.313)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient></defs><g><rect transform="matrix(1 0 0 1.01 0 -1.313)" x="30.53" y="117.9" width="58.92" height="5.8" rx=".7219" ry=".2886" fill="url(#radialGradient27939)" filter="url(#filter27965)"/><path d="m16 121h14v-1h58.2v1h27.8v-4l-103.3-6.998 3.289 11z" fill="url(#radialGradient3583)" fill-rule="evenodd" filter="url(#filter3565)"/><path d="m16 121h14v-1h60v1h29v-4l-106.3-0.9977 3.289 4.998z" fill-rule="evenodd" filter="url(#filter3444)" stroke="#000" stroke-width="1px"/><path d="m11.36 8c-1.809 0-3.361 1.625-3.36 3.327v98.93l10.64 10.65h98c2.953 0 3.36-0.3472 3.36-3.327v-106.3c0-1.813-1.558-3.327-3.36-3.327h-105.3z" fill="url(#linearGradient3250)"/></g><path transform="translate(.3 76.48)" d="m24.69-69.48v56.66h78.1v-56.66h-78.1z" clip-path="url(#clipPath3008)" fill="none" filter="url(#filter3105)" stroke="#000" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round" stroke-width=".7"/><g><rect x="26" y="8" width="76" height="54" rx="1.235" ry="1.235" fill="url(#radialGradient3083)"/><rect x="26.15" y="8" width="3.849" height="53.92" rx=".9246" ry=".9246" fill="#cfdce7" opacity=".6133"/><rect x="98" y="8.5" width="3.794" height="53.47" rx=".8972" ry=".9246" fill="#cfdce7" opacity=".5469"/><rect x="26.02" y="63.42" width="75.09" height=".7289" fill="url(#radialGradient3117)" filter="url(#filter3726)"/></g><path transform="translate(0 176.9)" d="m12.38-168.3c-2.953 0-4.375 0.3641-4.375 3.344v0.7812c0-2.98 1.422-3.312 4.375-3.312h103.2c2.953 0 4.375 0.3328 4.375 3.312v-0.7812c0-2.98-1.422-3.344-4.375-3.344h-103.2z" clip-path="url(#clipPath3215)" fill-opacity=".3584" filter="url(#filter3371)"/><path d="m11.38 8.6c-2.056 0.1072-3.375 0.7053-3.375 3.312v0.5938c0-2.98 1.422-3.312 4.375-3.312h103.2c2.953 0 4.375 0.3328 4.375 3.312v-0.5938c0-2.98-1.422-3.312-4.375-3.312h-103.2c-0.3692 0-0.7062-0.01531-1 0z" fill="#fff" fill-opacity=".469" filter="url(#filter3417)"/><path d="m104.3 8.626c-0.1011 0-0.1885 0.03692-0.2812 0.0625-0.1043 0.02875-0.1916 0.06873-0.2812 0.125-0.08551 0.05367-0.1504 0.1133-0.2188 0.1875-0.02858 0.03101-0.06863 0.05969-0.09375 0.09375-0.0337 0.0406-0.06548 0.08064-0.09375 0.125-0.09343 0.169-0.1562 0.3571-0.1562 0.5625v51.38h0.4062v-51.38c0-0.2114 0.0889-0.3901 0.1875-0.5625h11.91c2.953 0 4.375 0.3328 4.375 3.312v-0.5938c0-2.607-1.316-3.177-3.375-3.281h-12.12c0.05359-0.00807 0.1003-0.03125 0.1562-0.03125h-0.4062zm-93.22 0.03125c-1.625 0.1537-2.962 0.7744-3 2.875 0.1211-2.06 1.759-2.312 4.344-2.312h12c0.1066 0.1773 0.1562 0.3733 0.1562 0.5938v51.38h0.4062v-51.38c0-0.2205-0.04966-0.4164-0.1562-0.5938-0.04526-0.07529-0.09582-0.156-0.1562-0.2188-0.09373-0.1056-0.2187-0.1909-0.3438-0.25-0.1163-0.05505-0.2344-0.09375-0.375-0.09375h-0.5-12.38zm-3 2.875c-0.002439 0.1347-0.03125 0.2589-0.03125 0.4062v0.5938c0-0.3725 0.01396-0.7057 0.03125-1z" fill="url(#linearGradient3453)" filter="url(#filter3417)" opacity=".2695"/><path d="m115.4 8.6c2.953 0 3.775 0.3328 3.775 3.312v103.3c0 2.979-2.822 5.312-5.775 5.312h0.7188c2.953 0 5.344-2.333 5.344-5.312v-103.3c0-2.98-0.3903-3.312-3.344-3.312h-0.7188z" fill="url(#linearGradient3474)"/><g fill="#b2c6d9" fill-rule="evenodd"><path d="m32 16.12v3.954h64v-3.954h-64z" opacity=".5652"/><path d="m32.03 32.23v3.89h64v-3.89h-64z" opacity=".5652"/><path d="m32 48.2v4h64v-4h-64z" opacity=".5652"/></g><g><path d="m101.4 8v53.81c0.183-0.1016 0.2943-0.251 0.4062-0.4v-53.41h-0.4062z" fill="#fff"/><path d="m26.11 8 0.01367 53.3c0.1031 0.1999 0.2525 0.338 0.4062 0.4703l-0.01367-53.77h-0.4062z" fill="#fff"/><path transform="translate(16.39 -52.35)" d="m16.78 130.4c-1.483 0-2.656 1.205-2.656 2.688v42.03c0 1.483 1.173 2.656 2.656 2.656h0.1562c-0.4078-0.4464-0.6875-1.032-0.6875-1.688v-39.97c0-1.391 1.112-2.531 2.5-2.531h65.59c1.388 0 2.5 1.14 2.5 2.531v39.97c2e-6 0.6557-0.2485 1.241-0.6562 1.688h0.125c1.483 0 2.688-1.173 2.688-2.656v-42.03c0-1.483-1.205-2.688-2.688-2.688h-69.53z" clip-path="url(#clipPath3199)" fill="url(#linearGradient3712)" filter="url(#filter3659)"/></g><path d="m34.54 80.01c-1.419 0-2.562 1.143-2.562 2.562l0.02469 37.15h72l-0.02469-37.15c0-1.419-1.143-2.562-2.562-2.562h-66.88z" fill-opacity=".1283"/><g><path d="m34.58 80.07c-1.419 0-2.562 1.143-2.562 2.562v37.18l71.98-0.1166v-37.18c0-1.419-1.143-2.562-2.562-2.562l-66.86 0.1166z" fill="url(#radialGradient3704)" opacity=".07422"/><path transform="matrix(1 0 0 1.01 0 -1.313)" d="m52.94 84c-0.5196 0-0.9375 0.418-0.9375 0.9375v23.06h-11.06c-0.5196 0-0.9375 0.418-0.9375 0.9375v6.125c0 0.5196 0.4179 0.9375 0.9375 0.9375h12 10.12c0.5196 0 0.9375-0.418 0.9375-0.9375v-6.125-24c0-0.5196-0.4179-0.9375-0.9375-0.9375h-10.12z" fill="url(#linearGradient3281)" filter="url(#filter3271)"/><rect x="33.01" y="77.6" width="69.52" height="1.5" fill="url(#radialGradient3692)" opacity=".3777"/><g fill-rule="evenodd"><path d="m103.9 8.735-0.75 0.6875 0.9375 0.0625-0.1875-0.75z" fill="url(#radialGradient3094)" filter="url(#filter3120)"/><path transform="matrix(-1 0 0 1 48.06 0)" d="m23.91 8.735-0.75 0.6875 0.9375 0.0625-0.1875-0.75z" fill="url(#radialGradient3126)" filter="url(#filter3120)"/><path transform="matrix(.9876 0 0 1 .7169 .2)" d="m112.1 97.38v6.719h-1.219-1.031l4.344 7.531 4.344-7.531h-1.031-1.219v-6.719h-2.094-2.094z" fill="url(#linearGradient3142)" filter="url(#filter3192)" opacity=".4531" stroke="#fff" stroke-width=".1"/></g><rect transform="matrix(1 0 0 1.01 0 -1.313)" x="87.69" y="81.91" width="3.358" height="37.85" fill="url(#linearGradient27989)" filter="url(#filter28003)" opacity=".2969"/><path d="m34.54 80.32c-1.177 0-2.125 0.9576-2.125 2.147l0.1768 38.07h55.41v-38.21c0-1.189-0.8228-2.004-2-2.004h-51.46zm6.396 8.032h14.12c0.5196 0 0.9375 0.4223 0.9375 0.9472v21.6c0 0.5249-0.418 0.9472-0.9375 0.9472h-14.12c-0.5196 0-0.9375-0.4223-0.9375-0.9472v-21.6c0-0.5249 0.418-0.9472 0.9375-0.9472z" fill="url(#linearGradient3221)"/></g><g transform="matrix(1 0 0 1.01 313.9 17.71)" clip-path="url(#clipPath25065)" filter="url(#filter27927)" opacity=".1836"><rect x="-290.8" y="84.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17393)" opacity=".1875"/><rect x="-260" y="91.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17391)" opacity=".1875"/><rect x="-256.9" y="109.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17389)" opacity=".1875"/><rect x="-288.1" y="76.49" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17405)" opacity=".4688"/><rect x="-236.1" y="96.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17403)" opacity=".4688"/><rect x="-269.2" y="89.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17401)" opacity=".4688"/><rect x="-242.4" y="67.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18149)" opacity=".1875"/><rect x="-283.7" y="80.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18147)" opacity=".1875"/><rect x="-255.3" y="84.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18145)" opacity=".1875"/><rect x="-274.8" y="106.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18143)" opacity=".4688"/><rect x="-281.6" y="102.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18141)" opacity=".4688"/><rect x="-235.3" y="71.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18139)" opacity=".4688"/><rect x="-297.6" y="100.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18137)" opacity=".1875"/><rect x="-302.1" y="65.36" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18135)" opacity=".1875"/><rect x="-267.5" y="69.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18133)" opacity=".1875"/><rect x="-276.9" y="99.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18131)" opacity=".4688"/><rect x="-258.5" y="101.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18129)" opacity=".4688"/><rect x="-226.4" y="75.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18127)" opacity=".4688"/><rect x="-295.3" y="69.59" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18125)" opacity=".1875"/><rect x="-232.6" y="71.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18123)" opacity=".1875"/><rect x="-231.3" y="77.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18121)" opacity=".1875"/><rect x="-307.4" y="105.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18119)" opacity=".4688"/><rect x="-299.4" y="62.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18117)" opacity=".4688"/><rect x="-226.4" y="99.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18115)" opacity=".4688"/><rect x="-260.9" y="56.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18113)" opacity=".1875"/><rect x="-269.1" y="74.34" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18111)" opacity=".1875"/><rect x="-244.1" y="98.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18109)" opacity=".1875"/><rect x="-244.5" y="67.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18107)" opacity=".4688"/><rect x="-286.7" y="64.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18105)" opacity=".4688"/><rect x="-263.8" y="69.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18103)" opacity=".4688"/><rect x="-300.2" y="79.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18101)" opacity=".1875"/><rect x="-299.4" y="104" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18099)" opacity=".1875"/><rect x="-244.8" y="105.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18097)" opacity=".1875"/><rect x="-257" y="65.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18095)" opacity=".4688"/><rect x="-258.9" y="69.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18093)" opacity=".4688"/><rect x="-305.3" y="97.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18091)" opacity=".4688"/><rect x="-243.3" y="57.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18089)" opacity=".1875"/><rect x="-277.4" y="79.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18087)" opacity=".1875"/><rect x="-278.2" y="103.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18085)" opacity=".1875"/><rect x="-254.4" y="77.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18083)" opacity=".4688"/><rect x="-227.7" y="87" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18081)" opacity=".4688"/><rect x="-246" y="101.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18079)" opacity=".4688"/><rect x="-279.6" y="79.22" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18077)" opacity=".1875"/><rect x="-240.7" y="85.52" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18075)" opacity=".1875"/><rect x="-233.3" y="66.15" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18073)" opacity=".1875"/><rect x="-255.9" y="99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18071)" opacity=".4688"/><rect x="-231.8" y="62.49" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18069)" opacity=".4688"/><rect x="-235.6" y="103.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18067)" opacity=".4688"/><rect x="-247.4" y="103.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18065)" opacity=".1875"/><rect x="-287.8" y="110.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18063)" opacity=".1875"/><rect x="-270.9" y="87.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18061)" opacity=".1875"/><rect x="-279.8" y="77.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18059)" opacity=".4688"/><rect x="-296.7" y="61.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18057)" opacity=".4688"/><rect x="-256.3" y="97.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18055)" opacity=".4688"/><rect x="-247.3" y="60.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18053)" opacity=".1875"/><rect x="-275.3" y="98.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18051)" opacity=".1875"/><rect x="-268.8" y="104.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18049)" opacity=".1875"/><rect x="-283.5" y="94.83" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18047)" opacity=".4688"/><rect x="-277.5" y="96.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18045)" opacity=".4688"/><rect x="-232.4" y="62.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18043)" opacity=".4688"/><rect x="-220" y="90.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18041)" opacity=".1875"/><rect x="-271.1" y="99.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18039)" opacity=".1875"/><rect x="-304.3" y="97.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18037)" opacity=".1875"/><rect x="-280.4" y="63.92" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18035)" opacity=".4688"/><rect x="-284.8" y="97.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18033)" opacity=".4688"/><rect x="-240.4" y="91.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18031)" opacity=".4688"/><rect x="-231.8" y="88.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18029)" opacity=".1875"/><rect x="-251.2" y="102.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18027)" opacity=".1875"/><rect x="-291.6" y="92.65" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18025)" opacity=".1875"/><rect x="-254.4" y="60.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18023)" opacity=".4688"/><rect x="-252.1" y="90.29" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18021)" opacity=".4688"/><rect x="-248.8" y="109.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18019)" opacity=".4688"/><rect x="-240.8" y="72.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18017)" opacity=".1875"/><rect x="-237.1" y="57.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18015)" opacity=".1875"/><rect x="-274.7" y="67.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18013)" opacity=".1875"/><rect x="-239.2" y="69.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18011)" opacity=".4688"/><rect x="-227.5" y="68.96" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18009)" opacity=".4688"/><rect x="-300.9" y="76.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18007)" opacity=".4688"/><rect x="-284.5" y="90.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient18005)" opacity=".1875"/><rect x="-241.3" y="97.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient18003)" opacity=".1875"/><rect x="-232.2" y="82.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient18001)" opacity=".1875"/><rect x="-227.2" y="79.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17999)" opacity=".4688"/><rect x="-290.4" y="79.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17997)" opacity=".4688"/><rect x="-246.4" y="74.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17995)" opacity=".4688"/><rect x="-227.6" y="62.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17993)" opacity=".1875"/><rect x="-290.8" y="84.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17991)" opacity=".1875"/><rect x="-281.5" y="66.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17989)" opacity=".1875"/><rect x="-266.3" y="83.37" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17987)" opacity=".4688"/><rect x="-292.6" y="67.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17985)" opacity=".4688"/><rect x="-270.8" y="82.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17983)" opacity=".4688"/><rect x="-283.8" y="60.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17981)" opacity=".1875"/><rect x="-263.7" y="87.76" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17979)" opacity=".1875"/><rect x="-252.6" y="77.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17977)" opacity=".1875"/><rect x="-278" y="76.89" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17975)" opacity=".4688"/><rect x="-272.5" y="107.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17973)" opacity=".4688"/><rect x="-275.4" y="106.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17971)" opacity=".4688"/><rect x="-301.2" y="77.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17969)" opacity=".1875"/><rect x="-273.3" y="60.57" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17967)" opacity=".1875"/><rect x="-232.8" y="88.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17965)" opacity=".1875"/><rect x="-252.3" y="96.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17963)" opacity=".4688"/><rect x="-247" y="79.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17961)" opacity=".4688"/><rect x="-284.2" y="87.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17959)" opacity=".4688"/><rect x="-282.9" y="70.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17957)" opacity=".1875"/><rect x="-293.7" y="76.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17955)" opacity=".1875"/><rect x="-225.7" y="68.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17953)" opacity=".1875"/><rect x="-242.6" y="72.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17951)" opacity=".4688"/><rect x="-295.7" y="72.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17949)" opacity=".4688"/><rect x="-261.5" y="66.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17947)" opacity=".4688"/><rect x="-247.5" y="70.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17945)" opacity=".1875"/><rect x="-232.7" y="106.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17943)" opacity=".1875"/><rect x="-229.6" y="65.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17941)" opacity=".1875"/><rect x="-248.4" y="92.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17939)" opacity=".4688"/><rect x="-234.6" y="110.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17937)" opacity=".4688"/><rect x="-263.7" y="67.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17935)" opacity=".4688"/><rect x="-304.9" y="87.74" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17933)" opacity=".1875"/><rect x="-277" y="72.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient17931)" opacity=".1875"/><rect x="-268.7" y="65.33" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient17929)" opacity=".1875"/><rect x="-217.2" y="98.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient17927)" opacity=".4688"/><rect x="-276.5" y="108.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25071)" opacity=".4688"/><rect x="-238" y="82.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25073)" opacity=".4688"/><rect x="-244.3" y="108.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25075)" opacity=".1875"/><rect x="-239.2" y="84.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25077)" opacity=".1875"/><rect x="-273.7" y="64.28" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25079)" opacity=".1875"/><rect x="-228.2" y="109.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25081)" opacity=".4688"/><rect x="-244.9" y="63.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25083)" opacity=".4688"/><rect x="-293.9" y="98.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25085)" opacity=".4688"/><rect x="-273.7" y="85.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25087)" opacity=".1875"/><rect x="-252.7" y="66.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25089)" opacity=".1875"/><rect x="-296.7" y="77.14" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25091)" opacity=".1875"/><rect x="-268" y="62.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25093)" opacity=".4688"/><rect x="-232.1" y="87.14" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25095)" opacity=".4688"/><rect x="-271" y="55.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25097)" opacity=".4688"/><rect x="-297.8" y="102" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25099)" opacity=".1875"/><rect x="-248.8" y="61.25" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25101)" opacity=".1875"/><rect x="-262.9" y="63.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25103)" opacity=".1875"/><rect x="-303.5" y="101.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25105)" opacity=".4688"/><rect x="-240.8" y="77.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25107)" opacity=".4688"/><rect x="-244.8" y="95.28" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25109)" opacity=".4688"/><rect x="-252.4" y="55.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25111)" opacity=".1875"/><rect x="-230.8" y="101.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25113)" opacity=".1875"/><rect x="-298.6" y="109.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25115)" opacity=".1875"/><rect x="-284.5" y="107" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25117)" opacity=".4688"/><rect x="-273.8" y="66.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25119)" opacity=".4688"/><rect x="-277.4" y="66.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25121)" opacity=".4688"/><rect x="-269.1" y="56.06" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25123)" opacity=".1875"/><rect x="-294.4" y="68.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25125)" opacity=".1875"/><rect x="-228.1" y="55.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25127)" opacity=".1875"/><rect x="-278" y="86.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25129)" opacity=".4688"/><rect x="-256.2" y="110.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25131)" opacity=".4688"/><rect x="-287.1" y="60.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25133)" opacity=".4688"/><rect x="-254" y="103.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25135)" opacity=".1875"/><rect x="-235" y="88.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25137)" opacity=".1875"/><rect x="-265.4" y="94.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25139)" opacity=".1875"/><rect x="-279" y="104" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25141)" opacity=".4688"/><rect x="-285.1" y="84.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25143)" opacity=".4688"/><rect x="-294.5" y="101.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25145)" opacity=".4688"/><rect x="-272.4" y="90.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25147)" opacity=".1875"/><rect x="-226.2" y="99.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25149)" opacity=".1875"/><rect x="-272.7" y="86.15" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25151)" opacity=".1875"/><rect x="-303.2" y="79.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25153)" opacity=".4688"/><rect x="-261" y="67.34" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25155)" opacity=".4688"/><rect x="-305.7" y="93.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25157)" opacity=".4688"/><rect x="-291.2" y="88.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25159)" opacity=".1875"/><rect x="-300.6" y="59.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25161)" opacity=".1875"/><rect x="-253.1" y="73.11" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25163)" opacity=".1875"/><rect x="-280.6" y="91.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25165)" opacity=".4688"/><rect x="-246.5" y="67.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25167)" opacity=".4688"/><rect x="-228.4" y="93.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25169)" opacity=".4688"/><rect x="-271.9" y="90.88" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25171)" opacity=".1875"/><rect x="-263.3" y="103.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25173)" opacity=".1875"/><rect x="-273" y="106.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25175)" opacity=".1875"/><rect x="-303.7" y="55.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25177)" opacity=".4688"/><rect x="-302.1" y="89.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25179)" opacity=".4688"/><rect x="-295.9" y="102.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25181)" opacity=".4688"/><rect x="-224.7" y="81.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25183)" opacity=".1875"/><rect x="-273.1" y="89.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25185)" opacity=".1875"/><rect x="-296" y="100.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25187)" opacity=".1875"/><rect x="-271.2" y="80.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25189)" opacity=".4688"/><rect x="-297.4" y="77.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25191)" opacity=".4688"/><rect x="-289.1" y="72.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25193)" opacity=".4688"/><rect x="-242.2" y="106.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25195)" opacity=".1875"/><rect x="-276.1" y="69.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25197)" opacity=".1875"/><rect x="-230.5" y="62.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25199)" opacity=".1875"/><rect x="-298" y="85.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25201)" opacity=".4688"/><rect x="-305.4" y="101.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25203)" opacity=".4688"/><rect x="-286.2" y="92.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25205)" opacity=".4688"/><rect x="-264.9" y="102.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25207)" opacity=".1875"/><rect x="-299.1" y="68.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25209)" opacity=".1875"/><rect x="-277.9" y="81.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25211)" opacity=".1875"/><rect x="-225.5" y="99.24" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25213)" opacity=".4688"/><rect x="-251" y="104.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25215)" opacity=".4688"/><rect x="-277.5" y="96.04" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25217)" opacity=".4688"/><rect x="-298.1" y="91.46" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25219)" opacity=".1875"/><rect x="-265.7" y="57.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25221)" opacity=".1875"/><rect x="-274" y="92.45" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25223)" opacity=".1875"/><rect x="-292.5" y="87.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25225)" opacity=".4688"/><rect x="-225.5" y="71.13" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25227)" opacity=".4688"/><rect x="-294.5" y="69.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25229)" opacity=".4688"/><rect x="-235.5" y="71.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25231)" opacity=".1875"/><rect x="-281.4" y="88.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25233)" opacity=".1875"/><rect x="-260.6" y="79.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25235)" opacity=".1875"/><rect x="-244.1" y="67.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25237)" opacity=".4688"/><rect x="-225.3" y="68.25" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25239)" opacity=".4688"/><rect x="-295.7" y="88.57" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25241)" opacity=".4688"/><rect x="-221.4" y="61.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25243)" opacity=".1875"/><rect x="-272.9" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25245)" opacity=".1875"/><rect x="-276.9" y="76.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25247)" opacity=".1875"/><rect x="-262.3" y="97.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25249)" opacity=".4688"/><rect x="-242.4" y="90.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25251)" opacity=".4688"/><rect x="-261.1" y="77.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25253)" opacity=".4688"/><rect x="-296.4" y="62.67" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25255)" opacity=".1875"/><rect x="-230.6" y="75.02" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25257)" opacity=".1875"/><rect x="-277" y="58.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25259)" opacity=".1875"/><rect x="-290.9" y="63.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25261)" opacity=".4688"/><rect x="-277.2" y="85.29" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25263)" opacity=".4688"/><rect x="-278" y="86.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25265)" opacity=".4688"/><rect x="-227.8" y="111.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25267)" opacity=".1875"/><rect x="-234.5" y="110.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25269)" opacity=".1875"/><rect x="-261.9" y="74.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25271)" opacity=".1875"/><rect x="-269.1" y="84.88" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25273)" opacity=".4688"/><rect x="-270" y="86.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25275)" opacity=".4688"/><rect x="-271" y="92.41" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25277)" opacity=".4688"/><rect x="-264.6" y="70.23" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25279)" opacity=".1875"/><rect x="-237.1" y="80" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25281)" opacity=".1875"/><rect x="-226.5" y="95.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25283)" opacity=".1875"/><rect x="-231" y="99.06" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25285)" opacity=".4688"/><rect x="-271" y="85.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25287)" opacity=".4688"/><rect x="-298.4" y="90.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25289)" opacity=".4688"/><rect x="-283.8" y="62.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25291)" opacity=".1875"/><rect x="-234.9" y="75.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25293)" opacity=".1875"/><rect x="-242" y="90.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25295)" opacity=".1875"/><rect x="-270.4" y="106.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25297)" opacity=".4688"/><rect x="-259.9" y="92.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25299)" opacity=".4688"/><rect x="-245.6" y="100.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25301)" opacity=".4688"/><rect x="-296.3" y="63.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25303)" opacity=".1875"/><rect x="-229.4" y="72.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25305)" opacity=".1875"/><rect x="-280.9" y="110.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25307)" opacity=".1875"/><rect x="-293.6" y="74.37" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25309)" opacity=".4688"/><rect x="-265.1" y="79.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25311)" opacity=".4688"/><rect x="-270.1" y="102" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25313)" opacity=".4688"/><rect x="-286.8" y="109.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25315)" opacity=".1875"/><rect x="-269" y="98.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25317)" opacity=".1875"/><rect x="-279.6" y="89.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25319)" opacity=".1875"/><rect x="-244.3" y="81.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25321)" opacity=".4688"/><rect x="-276.3" y="109.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25323)" opacity=".4688"/><rect x="-245.4" y="109" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25325)" opacity=".4688"/><rect x="-235.2" y="110.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25327)" opacity=".1875"/><rect x="-297" y="93.96" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25329)" opacity=".1875"/><rect x="-229.8" y="66.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25331)" opacity=".1875"/><rect x="-284" y="86.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25333)" opacity=".4688"/><rect x="-277.6" y="104.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25335)" opacity=".4688"/><rect x="-251.8" y="70.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25337)" opacity=".4688"/><rect x="-270.2" y="84.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25339)" opacity=".1875"/><rect x="-293" y="96.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25341)" opacity=".1875"/><rect x="-231.7" y="78.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25343)" opacity=".1875"/><rect x="-306.4" y="59.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25345)" opacity=".4688"/><rect x="-227" y="95.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25347)" opacity=".4688"/><rect x="-304.8" y="102.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25349)" opacity=".4688"/><rect x="-246.9" y="69.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25351)" opacity=".1875"/><rect x="-242.2" y="87.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25353)" opacity=".1875"/><rect x="-270.9" y="92.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25355)" opacity=".1875"/><rect x="-257.4" y="90.87" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25357)" opacity=".4688"/><rect x="-277" y="79.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25359)" opacity=".4688"/><rect x="-242.7" y="104.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25361)" opacity=".4688"/><rect x="-240.3" y="62.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25363)" opacity=".1875"/><rect x="-285.7" y="60.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25365)" opacity=".1875"/><rect x="-251.5" y="107.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25367)" opacity=".1875"/><rect x="-270.8" y="90.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25369)" opacity=".4688"/><rect x="-290.2" y="76.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25371)" opacity=".4688"/><rect x="-282.3" y="104.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25373)" opacity=".4688"/><rect x="-222.2" y="75.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25375)" opacity=".1875"/><rect x="-254.3" y="99.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25377)" opacity=".1875"/><rect x="-270.6" y="84.16" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25379)" opacity=".1875"/><rect x="-249.2" y="97.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25381)" opacity=".4688"/><rect x="-294.7" y="105.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25383)" opacity=".4688"/><rect x="-290.2" y="62.65" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25385)" opacity=".4688"/><rect x="-264.6" y="96.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25387)" opacity=".1875"/><rect x="-259" y="55.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25389)" opacity=".1875"/><rect x="-292.6" y="68.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25391)" opacity=".1875"/><rect x="-230.4" y="66.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25393)" opacity=".4688"/><rect x="-233.1" y="93.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25395)" opacity=".4688"/><rect x="-301.6" y="98.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25397)" opacity=".4688"/><rect x="-288.2" y="74.24" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25399)" opacity=".1875"/><rect x="-236.7" y="100.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25401)" opacity=".1875"/><rect x="-230.1" y="80.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25403)" opacity=".1875"/><rect x="-291.6" y="64.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25405)" opacity=".4688"/><rect x="-239.8" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25407)" opacity=".4688"/><rect x="-232.7" y="99.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25409)" opacity=".4688"/><rect x="-234.7" y="65.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25411)" opacity=".1875"/><rect x="-272.7" y="74.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25413)" opacity=".1875"/><rect x="-253" y="58.99" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25415)" opacity=".1875"/><rect x="-234.8" y="94.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25417)" opacity=".4688"/><rect x="-236.9" y="100.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25419)" opacity=".4688"/><rect x="-245.5" y="104.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25421)" opacity=".4688"/><rect x="-274.4" y="57.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25423)" opacity=".1875"/><rect x="-227" y="98.72" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25425)" opacity=".1875"/><rect x="-251" y="84.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25427)" opacity=".1875"/><rect x="-240.1" y="110.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25429)" opacity=".4688"/><rect x="-262.9" y="94.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25431)" opacity=".4688"/><rect x="-237.4" y="83.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25433)" opacity=".4688"/><rect x="-271.8" y="75.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25435)" opacity=".1875"/><rect x="-229.5" y="95.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25437)" opacity=".1875"/><rect x="-245.9" y="63.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25439)" opacity=".1875"/><rect x="-236.8" y="72.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25441)" opacity=".4688"/><rect x="-284.6" y="106.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25443)" opacity=".4688"/><rect x="-268.9" y="60.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25445)" opacity=".4688"/><rect x="-222.5" y="89.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25447)" opacity=".1875"/><rect x="-234.3" y="83.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25449)" opacity=".1875"/><rect x="-295.7" y="66.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25451)" opacity=".1875"/><rect x="-297.4" y="69.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25453)" opacity=".4688"/><rect x="-297.3" y="56.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25455)" opacity=".4688"/><rect x="-242.9" y="81.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25457)" opacity=".4688"/><rect x="-280.3" y="79.49" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25459)" opacity=".1875"/><rect x="-238.1" y="88.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25461)" opacity=".1875"/><rect x="-250.3" y="86.61" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25463)" opacity=".1875"/><rect x="-257" y="91.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25465)" opacity=".4688"/><rect x="-255.3" y="60.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25467)" opacity=".4688"/><rect x="-250.3" y="76.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25469)" opacity=".4688"/><rect x="-271.8" y="110.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25471)" opacity=".1875"/><rect x="-226.6" y="83.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25473)" opacity=".1875"/><rect x="-266.8" y="75.16" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25475)" opacity=".1875"/><rect x="-266" y="89.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25477)" opacity=".4688"/><rect x="-255.2" y="76.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25479)" opacity=".4688"/><rect x="-299.2" y="110.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25481)" opacity=".4688"/><rect x="-252.9" y="93.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25483)" opacity=".1875"/><rect x="-237" y="63.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25485)" opacity=".1875"/><rect x="-259.4" y="77.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25487)" opacity=".1875"/><rect x="-306.4" y="84.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25489)" opacity=".4688"/><rect x="-248.1" y="100.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25491)" opacity=".4688"/><rect x="-248.6" y="102.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25493)" opacity=".4688"/><rect x="-223.5" y="64.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25495)" opacity=".1875"/><rect x="-231.5" y="98.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25497)" opacity=".1875"/><rect x="-249.8" y="102.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25499)" opacity=".1875"/><rect x="-247.6" y="62.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25501)" opacity=".4688"/><rect x="-302" y="81.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25503)" opacity=".4688"/><rect x="-233.8" y="80.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25505)" opacity=".4688"/><rect x="-293.5" y="83.52" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25507)" opacity=".1875"/><rect x="-231.5" y="67.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25509)" opacity=".1875"/><rect x="-233.4" y="103.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25511)" opacity=".1875"/><rect x="-224.9" y="62.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25513)" opacity=".4688"/><rect x="-268.1" y="78.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25515)" opacity=".4688"/><rect x="-272.5" y="98.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25517)" opacity=".4688"/><rect x="-228.5" y="68.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25519)" opacity=".1875"/><rect x="-281" y="68.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25521)" opacity=".1875"/><rect x="-234" y="70.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25523)" opacity=".1875"/><rect x="-267" y="107.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25525)" opacity=".4688"/><rect x="-243.4" y="109.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25527)" opacity=".4688"/><rect x="-292.8" y="65.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25529)" opacity=".4688"/><rect x="-222.6" y="86.89" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25531)" opacity=".1875"/><rect x="-303.6" y="81.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25533)" opacity=".1875"/><rect x="-301.7" y="98.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25535)" opacity=".1875"/><rect x="-281.7" y="57.61" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25537)" opacity=".4688"/><rect x="-250.6" y="84.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25539)" opacity=".4688"/><rect x="-238.8" y="69.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25541)" opacity=".4688"/><rect x="-269.6" y="82.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25543)" opacity=".1875"/><rect x="-267.9" y="59.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25545)" opacity=".1875"/><rect x="-271.1" y="74.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25547)" opacity=".1875"/><rect x="-270.6" y="73.61" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25549)" opacity=".4688"/><rect x="-298.6" y="55.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25551)" opacity=".4688"/><rect x="-273.5" y="80.65" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25553)" opacity=".4688"/><rect x="-264" y="89.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25555)" opacity=".1875"/><rect x="-266.9" y="80.69" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25557)" opacity=".1875"/><rect x="-290.8" y="110.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25559)" opacity=".1875"/><rect x="-252.5" y="75.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25561)" opacity=".4688"/><rect x="-226.5" y="103.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25563)" opacity=".4688"/><rect x="-263" y="56.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25565)" opacity=".4688"/><rect x="-250.9" y="102.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25567)" opacity=".1875"/><rect x="-251.5" y="109.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25569)" opacity=".1875"/><rect x="-227.8" y="95.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25571)" opacity=".1875"/><rect x="-259.2" y="77.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25573)" opacity=".4688"/><rect x="-258.9" y="95.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25575)" opacity=".4688"/><rect x="-255.7" y="76.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25577)" opacity=".4688"/><rect x="-249.5" y="102.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25579)" opacity=".1875"/><rect x="-256.2" y="67.56" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25581)" opacity=".1875"/><rect x="-284.1" y="85.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25583)" opacity=".1875"/><rect x="-293.3" y="60.74" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25585)" opacity=".4688"/><rect x="-282.1" y="68.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25587)" opacity=".4688"/><rect x="-240.2" y="66" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25589)" opacity=".4688"/><rect x="-218.8" y="86.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25591)" opacity=".1875"/><rect x="-241.1" y="101.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25593)" opacity=".1875"/><rect x="-272.5" y="88.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25595)" opacity=".1875"/><rect x="-241" y="101.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25597)" opacity=".4688"/><rect x="-239.3" y="58.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25599)" opacity=".4688"/><rect x="-229.4" y="57.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25601)" opacity=".4688"/><rect x="-221.9" y="57.53" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25603)" opacity=".1875"/><rect x="-234.3" y="97.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25605)" opacity=".1875"/><rect x="-263.5" y="66.16" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25607)" opacity=".1875"/><rect x="-255.9" y="91.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25609)" opacity=".4688"/><rect x="-279" y="62.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25611)" opacity=".4688"/><rect x="-247.8" y="60.99" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25613)" opacity=".4688"/><rect x="-226.1" y="85.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25615)" opacity=".1875"/><rect x="-297" y="87.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25617)" opacity=".1875"/><rect x="-254.6" y="66.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25619)" opacity=".1875"/><rect x="-227.6" y="84.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25621)" opacity=".4688"/><rect x="-241.9" y="83.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25623)" opacity=".4688"/><rect x="-278.5" y="99.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25625)" opacity=".4688"/><rect x="-234.6" y="100.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25627)" opacity=".1875"/><rect x="-233.2" y="92.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25629)" opacity=".1875"/><rect x="-276.5" y="61.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25631)" opacity=".1875"/><rect x="-261" y="88.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25633)" opacity=".4688"/><rect x="-233.6" y="99.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25635)" opacity=".4688"/><rect x="-295.5" y="58.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25637)" opacity=".4688"/><rect x="-276.3" y="86.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25639)" opacity=".1875"/><rect x="-298.9" y="103.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25641)" opacity=".1875"/><rect x="-245.8" y="72.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25643)" opacity=".1875"/><rect x="-226.8" y="85.67" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25645)" opacity=".4688"/><rect x="-234.6" y="89.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25647)" opacity=".4688"/><rect x="-291.4" y="82.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25649)" opacity=".4688"/><rect x="-242.3" y="75.11" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25651)" opacity=".1875"/><rect x="-283.2" y="71.79" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25653)" opacity=".1875"/><rect x="-255.4" y="100.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25655)" opacity=".1875"/><rect x="-274.2" y="66.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25657)" opacity=".4688"/><rect x="-277.5" y="94.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25659)" opacity=".4688"/><rect x="-236.5" y="85.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25661)" opacity=".4688"/><rect x="-298.6" y="71.02" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25663)" opacity=".1875"/><rect x="-303.2" y="65.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25665)" opacity=".1875"/><rect x="-262.8" y="63.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25667)" opacity=".1875"/><rect x="-233.3" y="107.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25669)" opacity=".4688"/><rect x="-294.4" y="99.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25671)" opacity=".4688"/><rect x="-264.9" y="79.57" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25673)" opacity=".4688"/><rect x="-270.5" y="106.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25675)" opacity=".1875"/><rect x="-237.6" y="84.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25677)" opacity=".1875"/><rect x="-271" y="101.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25679)" opacity=".1875"/><rect x="-242.4" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25681)" opacity=".4688"/><rect x="-229.8" y="70.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25683)" opacity=".4688"/><rect x="-244.1" y="102.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25685)" opacity=".4688"/><rect x="-244" y="93.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25687)" opacity=".1875"/><rect x="-300.5" y="108.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25689)" opacity=".1875"/><rect x="-250.9" y="63.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25691)" opacity=".1875"/><rect x="-238.4" y="90.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25693)" opacity=".4688"/><rect x="-271.5" y="89.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25695)" opacity=".4688"/><rect x="-272.6" y="62.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25697)" opacity=".4688"/><rect x="-227.9" y="73.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25699)" opacity=".1875"/><rect x="-288.8" y="86.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25701)" opacity=".1875"/><rect x="-264" y="110.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25703)" opacity=".1875"/><rect x="-305.2" y="94.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25705)" opacity=".4688"/><rect x="-227.5" y="74.36" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25707)" opacity=".4688"/><rect x="-290.6" y="95.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25709)" opacity=".4688"/><rect x="-292.8" y="90.89" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25711)" opacity=".1875"/><rect x="-278" y="94.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25713)" opacity=".1875"/><rect x="-262" y="91.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25715)" opacity=".1875"/><rect x="-218.4" y="68.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25717)" opacity=".4688"/><rect x="-286.1" y="103" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25719)" opacity=".4688"/><rect x="-303.5" y="76.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25721)" opacity=".4688"/><rect x="-218.2" y="67.52" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25723)" opacity=".1875"/><rect x="-279.8" y="84.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25725)" opacity=".1875"/><rect x="-273.6" y="71.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25727)" opacity=".1875"/><rect x="-283.4" y="86.64" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25729)" opacity=".4688"/><rect x="-302.4" y="82.16" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25731)" opacity=".4688"/><rect x="-264.7" y="82.55" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25733)" opacity=".4688"/><rect x="-292.3" y="80.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25735)" opacity=".1875"/><rect x="-286.4" y="78.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25737)" opacity=".1875"/><rect x="-286.2" y="105" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25739)" opacity=".1875"/><rect x="-287.8" y="69.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25741)" opacity=".4688"/><rect x="-306.5" y="106.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25743)" opacity=".4688"/><rect x="-250.6" y="95.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25745)" opacity=".4688"/><rect x="-250.9" y="58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25747)" opacity=".1875"/><rect x="-237.9" y="108.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25749)" opacity=".1875"/><rect x="-269.4" y="110.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25751)" opacity=".1875"/><rect x="-286.7" y="69.13" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25753)" opacity=".4688"/><rect x="-294.8" y="95.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25755)" opacity=".4688"/><rect x="-245" y="103.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25757)" opacity=".4688"/><rect x="-276.4" y="67.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25759)" opacity=".1875"/><rect x="-284.8" y="70.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25761)" opacity=".1875"/><rect x="-259" y="107.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25763)" opacity=".1875"/><rect x="-221.5" y="74.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25765)" opacity=".4688"/><rect x="-290.5" y="91.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25767)" opacity=".4688"/><rect x="-296.1" y="80.28" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25769)" opacity=".4688"/><rect x="-299.8" y="78.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25771)" opacity=".1875"/><rect x="-252.5" y="104.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25773)" opacity=".1875"/><rect x="-242.8" y="60.51" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25775)" opacity=".1875"/><rect x="-251.8" y="84.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25777)" opacity=".4688"/><rect x="-292.7" y="93.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25779)" opacity=".4688"/><rect x="-245" y="68.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25781)" opacity=".4688"/><rect x="-288.4" y="67.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25783)" opacity=".1875"/><rect x="-246.4" y="75.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25785)" opacity=".1875"/><rect x="-227.2" y="93.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25787)" opacity=".1875"/><rect x="-279.9" y="66.44" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25789)" opacity=".4688"/><rect x="-236.9" y="83.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25791)" opacity=".4688"/><rect x="-243.2" y="64.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25793)" opacity=".4688"/><rect x="-292.7" y="104.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25795)" opacity=".1875"/><rect x="-262.2" y="89.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25797)" opacity=".1875"/><rect x="-261" y="105.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25799)" opacity=".1875"/><rect x="-270.3" y="60.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25801)" opacity=".4688"/><rect x="-289.6" y="82.01" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25803)" opacity=".4688"/><rect x="-248" y="82.58" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25805)" opacity=".4688"/><rect x="-277.1" y="99.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25807)" opacity=".1875"/><rect x="-298.1" y="56.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25809)" opacity=".1875"/><rect x="-306.8" y="83.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25811)" opacity=".1875"/><rect x="-277.7" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25813)" opacity=".4688"/><rect x="-269.6" y="65.83" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25815)" opacity=".4688"/><rect x="-244" y="64.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25817)" opacity=".4688"/><rect x="-298.4" y="106" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25819)" opacity=".1875"/><rect x="-259.6" y="84.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25821)" opacity=".1875"/><rect x="-228.9" y="103.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25823)" opacity=".1875"/><rect x="-272" y="72.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25825)" opacity=".4688"/><rect x="-226.1" y="91.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25827)" opacity=".4688"/><rect x="-290.7" y="65.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25829)" opacity=".4688"/><rect x="-264.5" y="94.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25831)" opacity=".1875"/><rect x="-299.6" y="100" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25833)" opacity=".1875"/><rect x="-262.3" y="68.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25835)" opacity=".1875"/><rect x="-281.4" y="80.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25837)" opacity=".4688"/><rect x="-267.3" y="73.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25839)" opacity=".4688"/><rect x="-250.2" y="72.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25841)" opacity=".4688"/><rect x="-298.4" y="91.75" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25843)" opacity=".1875"/><rect x="-287.2" y="84.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25845)" opacity=".1875"/><rect x="-304.9" y="66.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25847)" opacity=".1875"/><rect x="-225" y="108" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25849)" opacity=".4688"/><rect x="-265.1" y="78.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25851)" opacity=".4688"/><rect x="-233.6" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25853)" opacity=".4688"/><rect x="-275.1" y="64.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25855)" opacity=".1875"/><rect x="-292.3" y="70.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25857)" opacity=".1875"/><rect x="-241.2" y="90.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25859)" opacity=".1875"/><rect x="-232.2" y="62.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25861)" opacity=".4688"/><rect x="-286.6" y="91.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25863)" opacity=".4688"/><rect x="-296.6" y="92.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25865)" opacity=".4688"/><rect x="-225.9" y="85.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25867)" opacity=".1875"/><rect x="-286" y="63.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25869)" opacity=".1875"/><rect x="-295" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25871)" opacity=".1875"/><rect x="-297.9" y="89.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25873)" opacity=".4688"/><rect x="-297.6" y="57.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25875)" opacity=".4688"/><rect x="-254.5" y="84.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25877)" opacity=".4688"/><rect x="-258.9" y="71.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25879)" opacity=".1875"/><rect x="-298.5" y="68.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25881)" opacity=".1875"/><rect x="-275.9" y="111.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25883)" opacity=".1875"/><rect x="-299.4" y="63.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25885)" opacity=".4688"/><rect x="-258.3" y="106.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25887)" opacity=".4688"/><rect x="-263.2" y="55.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25889)" opacity=".4688"/><rect x="-249.5" y="57.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25891)" opacity=".1875"/><rect x="-267.5" y="77.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25893)" opacity=".1875"/><rect x="-293.2" y="69.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25895)" opacity=".1875"/><rect x="-290.2" y="65.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25897)" opacity=".4688"/><rect x="-268.6" y="94.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25899)" opacity=".4688"/><rect x="-230.8" y="97.11" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25901)" opacity=".4688"/><rect x="-305.6" y="97.91" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25903)" opacity=".1875"/><rect x="-284.4" y="98.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25905)" opacity=".1875"/><rect x="-292.1" y="78.44" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25907)" opacity=".1875"/><rect x="-304.3" y="55.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25909)" opacity=".4688"/><rect x="-277.7" y="72.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25911)" opacity=".4688"/><rect x="-304.9" y="70.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25913)" opacity=".4688"/><rect x="-265" y="84.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25915)" opacity=".1875"/><rect x="-246.9" y="110.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25917)" opacity=".1875"/><rect x="-230.1" y="78.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25919)" opacity=".1875"/><rect x="-268.9" y="66.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25921)" opacity=".4688"/><rect x="-261.7" y="63.68" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25923)" opacity=".4688"/><rect x="-234.2" y="106.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25925)" opacity=".4688"/><rect x="-229.8" y="78.04" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25927)" opacity=".1875"/><rect x="-252.2" y="97.77" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25929)" opacity=".1875"/><rect x="-258.6" y="105.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25931)" opacity=".1875"/><rect x="-257" y="103.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25933)" opacity=".4688"/><rect x="-246.3" y="74.45" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25935)" opacity=".4688"/><rect x="-229.9" y="68.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25937)" opacity=".4688"/><rect x="-280.5" y="89.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25939)" opacity=".1875"/><rect x="-278.9" y="76.67" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25941)" opacity=".1875"/><rect x="-285.4" y="61.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25943)" opacity=".1875"/><rect x="-244" y="69.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25945)" opacity=".4688"/><rect x="-242.4" y="85.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25947)" opacity=".4688"/><rect x="-246" y="103.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25949)" opacity=".4688"/><rect x="-243.8" y="75.56" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25951)" opacity=".1875"/><rect x="-244.6" y="107.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25953)" opacity=".1875"/><rect x="-230.7" y="105.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25955)" opacity=".1875"/><rect x="-306.8" y="82.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25957)" opacity=".4688"/><rect x="-253.4" y="95.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25959)" opacity=".4688"/><rect x="-240.8" y="72.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25961)" opacity=".4688"/><rect x="-299" y="93.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25963)" opacity=".1875"/><rect x="-270.2" y="89.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25965)" opacity=".1875"/><rect x="-267.9" y="66.82" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25967)" opacity=".1875"/><rect x="-301.6" y="71.22" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25969)" opacity=".4688"/><rect x="-230" y="94.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25971)" opacity=".4688"/><rect x="-258.5" y="111.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25973)" opacity=".4688"/><rect x="-246.9" y="75.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25975)" opacity=".1875"/><rect x="-278.3" y="64.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25977)" opacity=".1875"/><rect x="-275.2" y="109.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25979)" opacity=".1875"/><rect x="-294.3" y="103.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25981)" opacity=".4688"/><rect x="-263.1" y="70.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25983)" opacity=".4688"/><rect x="-240.5" y="108.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25985)" opacity=".4688"/><rect x="-266" y="89.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25987)" opacity=".1875"/><rect x="-238" y="93.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25989)" opacity=".1875"/><rect x="-272" y="71.04" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25991)" opacity=".1875"/><rect x="-234.6" y="72.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25993)" opacity=".4688"/><rect x="-240.6" y="60.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient25995)" opacity=".4688"/><rect x="-229.3" y="72.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient25997)" opacity=".4688"/><rect x="-285.8" y="56.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient25999)" opacity=".1875"/><rect x="-279.9" y="110" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26001)" opacity=".1875"/><rect x="-228.5" y="55.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26003)" opacity=".1875"/><rect x="-306.5" y="104" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26005)" opacity=".4688"/><rect x="-305.8" y="67.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26007)" opacity=".4688"/><rect x="-235" y="96.54" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26009)" opacity=".4688"/><rect x="-305.1" y="77.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26011)" opacity=".1875"/><rect x="-239" y="107.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26013)" opacity=".1875"/><rect x="-270.1" y="100.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26015)" opacity=".1875"/><rect x="-281.5" y="93.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26017)" opacity=".4688"/><rect x="-274.3" y="110.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26019)" opacity=".4688"/><rect x="-281.8" y="104.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26021)" opacity=".4688"/><rect x="-282.3" y="90.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26023)" opacity=".1875"/><rect x="-236.4" y="66.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26025)" opacity=".1875"/><rect x="-274.8" y="61.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26027)" opacity=".1875"/><rect x="-241.6" y="78.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26029)" opacity=".4688"/><rect x="-305.7" y="109.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26031)" opacity=".4688"/><rect x="-275.2" y="69.12" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26033)" opacity=".4688"/><rect x="-216.8" y="69.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26035)" opacity=".1875"/><rect x="-245.6" y="60.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26037)" opacity=".1875"/><rect x="-292.4" y="69.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26039)" opacity=".1875"/><rect x="-266.1" y="103.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26041)" opacity=".4688"/><rect x="-250.4" y="97.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26043)" opacity=".4688"/><rect x="-284.9" y="108.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26045)" opacity=".4688"/><rect x="-280.7" y="94.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26047)" opacity=".1875"/><rect x="-243.2" y="86.57" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26049)" opacity=".1875"/><rect x="-225.9" y="68.45" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26051)" opacity=".1875"/><rect x="-242.3" y="105.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26053)" opacity=".4688"/><rect x="-300.3" y="101.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26055)" opacity=".4688"/><rect x="-260.7" y="72.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26057)" opacity=".4688"/><rect x="-244.1" y="109.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26059)" opacity=".1875"/><rect x="-266.5" y="56.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26061)" opacity=".1875"/><rect x="-305.6" y="77.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26063)" opacity=".1875"/><rect x="-265.6" y="84.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26065)" opacity=".4688"/><rect x="-295" y="84.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26067)" opacity=".4688"/><rect x="-301.5" y="87.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26069)" opacity=".4688"/><rect x="-236.3" y="107.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26071)" opacity=".1875"/><rect x="-258.9" y="92.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26073)" opacity=".1875"/><rect x="-294.4" y="68.46" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26075)" opacity=".1875"/><rect x="-275.9" y="65.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26077)" opacity=".4688"/><rect x="-256.8" y="68.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26079)" opacity=".4688"/><rect x="-263.4" y="58.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26081)" opacity=".4688"/><rect x="-294.3" y="91.27" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26083)" opacity=".1875"/><rect x="-235.9" y="82.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26085)" opacity=".1875"/><rect x="-233.5" y="75.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26087)" opacity=".1875"/><rect x="-302.1" y="72.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26089)" opacity=".4688"/><rect x="-242.7" y="106.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26091)" opacity=".4688"/><rect x="-241.9" y="71.96" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26093)" opacity=".4688"/><rect x="-269.9" y="66.49" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26095)" opacity=".1875"/><rect x="-251" y="90.45" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26097)" opacity=".1875"/><rect x="-285.3" y="74.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26099)" opacity=".1875"/><rect x="-237" y="65.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26101)" opacity=".4688"/><rect x="-253.3" y="74.82" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26103)" opacity=".4688"/><rect x="-246.6" y="70.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26105)" opacity=".4688"/><rect x="-267.3" y="82.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26107)" opacity=".1875"/><rect x="-245.2" y="90.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26109)" opacity=".1875"/><rect x="-239.6" y="74.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26111)" opacity=".1875"/><rect x="-296.2" y="108.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26113)" opacity=".4688"/><rect x="-254" y="94.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26115)" opacity=".4688"/><rect x="-289.7" y="88.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26117)" opacity=".4688"/><rect x="-235.8" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26119)" opacity=".1875"/><rect x="-295.7" y="99.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26121)" opacity=".1875"/><rect x="-300.1" y="55.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26123)" opacity=".1875"/><rect x="-233.7" y="89.73" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26125)" opacity=".4688"/><rect x="-297.6" y="87.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26127)" opacity=".4688"/><rect x="-246.6" y="61.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26129)" opacity=".4688"/><rect x="-243.3" y="93.36" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26131)" opacity=".1875"/><rect x="-291.2" y="109.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26133)" opacity=".1875"/><rect x="-240.3" y="95.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26135)" opacity=".1875"/><rect x="-260.1" y="108.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26137)" opacity=".4688"/><rect x="-282" y="56.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26139)" opacity=".4688"/><rect x="-250.9" y="66.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26141)" opacity=".4688"/><rect x="-233.4" y="98.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26143)" opacity=".1875"/><rect x="-264.1" y="56.13" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26145)" opacity=".1875"/><rect x="-306.9" y="99.44" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26147)" opacity=".1875"/><rect x="-245.7" y="108.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26149)" opacity=".4688"/><rect x="-284.5" y="66.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26151)" opacity=".4688"/><rect x="-232.8" y="79.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26153)" opacity=".4688"/><rect x="-236.7" y="88.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26155)" opacity=".1875"/><rect x="-264.8" y="79.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26157)" opacity=".1875"/><rect x="-300.3" y="82.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26159)" opacity=".1875"/><rect x="-257.8" y="86.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26161)" opacity=".4688"/><rect x="-241.8" y="61.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26163)" opacity=".4688"/><rect x="-226.8" y="88.58" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26165)" opacity=".4688"/><rect x="-305.4" y="110.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26167)" opacity=".1875"/><rect x="-289.1" y="86.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26169)" opacity=".1875"/><rect x="-280.1" y="111.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26171)" opacity=".1875"/><rect x="-236.1" y="84.35" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26173)" opacity=".4688"/><rect x="-300.3" y="71.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26175)" opacity=".4688"/><rect x="-274" y="67.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26177)" opacity=".4688"/><rect x="-251.1" y="61.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26179)" opacity=".1875"/><rect x="-297.2" y="107.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26181)" opacity=".1875"/><rect x="-285.4" y="105.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26183)" opacity=".1875"/><rect x="-279.3" y="107.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26185)" opacity=".4688"/><rect x="-264.4" y="67.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26187)" opacity=".4688"/><rect x="-275.5" y="96.64" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26189)" opacity=".4688"/><rect x="-217.6" y="107.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26191)" opacity=".1875"/><rect x="-228.1" y="67.92" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26193)" opacity=".1875"/><rect x="-261.3" y="107.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26195)" opacity=".1875"/><rect x="-289.1" y="104.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26197)" opacity=".4688"/><rect x="-299.9" y="103.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26199)" opacity=".4688"/><rect x="-235" y="69.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26201)" opacity=".4688"/><rect x="-292.9" y="70.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26203)" opacity=".1875"/><rect x="-290.3" y="75.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26205)" opacity=".1875"/><rect x="-230.5" y="81.98" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26207)" opacity=".1875"/><rect x="-227.8" y="111.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26209)" opacity=".4688"/><rect x="-263.1" y="99.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26211)" opacity=".4688"/><rect x="-242.9" y="88.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26213)" opacity=".4688"/><rect x="-249.9" y="99.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26215)" opacity=".1875"/><rect x="-246" y="106.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26217)" opacity=".1875"/><rect x="-262.6" y="66.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26219)" opacity=".1875"/><rect x="-223.8" y="100.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26221)" opacity=".4688"/><rect x="-278.1" y="81.99" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26223)" opacity=".4688"/><rect x="-306.3" y="92.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26225)" opacity=".4688"/><rect x="-291.6" y="79.63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26227)" opacity=".1875"/><rect x="-255.5" y="98.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26229)" opacity=".1875"/><rect x="-274" y="110.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26231)" opacity=".1875"/><rect x="-218" y="100.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26233)" opacity=".4688"/><rect x="-288.4" y="93.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26235)" opacity=".4688"/><rect x="-277.4" y="94.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26237)" opacity=".4688"/><rect x="-223" y="111.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26239)" opacity=".1875"/><rect x="-275.8" y="78.43" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26241)" opacity=".1875"/><rect x="-227.8" y="101.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26243)" opacity=".1875"/><rect x="-293.6" y="55.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26245)" opacity=".4688"/><rect x="-281.7" y="105.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26247)" opacity=".4688"/><rect x="-230.8" y="107.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26249)" opacity=".4688"/><rect x="-305.3" y="75.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26251)" opacity=".1875"/><rect x="-302.3" y="70.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26253)" opacity=".1875"/><rect x="-300.5" y="77.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26255)" opacity=".1875"/><rect x="-246.5" y="97.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26257)" opacity=".4688"/><rect x="-237" y="92.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26259)" opacity=".4688"/><rect x="-292.2" y="66.24" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26261)" opacity=".4688"/><rect x="-283.1" y="106.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26263)" opacity=".1875"/><rect x="-256" y="82.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26265)" opacity=".1875"/><rect x="-296.6" y="75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26267)" opacity=".1875"/><rect x="-252.9" y="60.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26269)" opacity=".4688"/><rect x="-296.4" y="65.57" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26271)" opacity=".4688"/><rect x="-288.2" y="66.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26273)" opacity=".4688"/><rect x="-235.5" y="67.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26275)" opacity=".1875"/><rect x="-251.9" y="102.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26277)" opacity=".1875"/><rect x="-253.8" y="97.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26279)" opacity=".1875"/><rect x="-218.6" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26281)" opacity=".4688"/><rect x="-252.9" y="86.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26283)" opacity=".4688"/><rect x="-269" y="105.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26285)" opacity=".4688"/><rect x="-244.6" y="96.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26287)" opacity=".1875"/><rect x="-241.4" y="72.43" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26289)" opacity=".1875"/><rect x="-243.7" y="60.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26291)" opacity=".1875"/><rect x="-222.5" y="103.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26293)" opacity=".4688"/><rect x="-247" y="99.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26295)" opacity=".4688"/><rect x="-271.5" y="67.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26297)" opacity=".4688"/><rect x="-224.6" y="78.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26299)" opacity=".1875"/><rect x="-300.5" y="58.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26301)" opacity=".1875"/><rect x="-258.6" y="92.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26303)" opacity=".1875"/><rect x="-268.8" y="89.63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26305)" opacity=".4688"/><rect x="-276" y="81.23" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26307)" opacity=".4688"/><rect x="-290.1" y="79.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26309)" opacity=".4688"/><rect x="-299" y="83.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26311)" opacity=".1875"/><rect x="-257.1" y="99.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26313)" opacity=".1875"/><rect x="-228.8" y="94.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26315)" opacity=".1875"/><rect x="-293.2" y="104.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26317)" opacity=".4688"/><rect x="-261.1" y="55.01" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26319)" opacity=".4688"/><rect x="-239.7" y="109.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26321)" opacity=".4688"/><rect x="-230.5" y="76.61" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26323)" opacity=".1875"/><rect x="-260.7" y="75.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26325)" opacity=".1875"/><rect x="-286.6" y="88.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26327)" opacity=".1875"/><rect x="-242.9" y="107.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26329)" opacity=".4688"/><rect x="-239.9" y="83.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26331)" opacity=".4688"/><rect x="-243.8" y="91.03" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26333)" opacity=".4688"/><rect x="-306.5" y="102.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26335)" opacity=".1875"/><rect x="-243.7" y="86.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26337)" opacity=".1875"/><rect x="-297.2" y="99.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26339)" opacity=".1875"/><rect x="-270.1" y="85.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26341)" opacity=".4688"/><rect x="-259.6" y="62.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26343)" opacity=".4688"/><rect x="-279.7" y="57.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26345)" opacity=".4688"/><rect x="-237.9" y="69.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26347)" opacity=".1875"/><rect x="-237.5" y="63.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26349)" opacity=".1875"/><rect x="-234.1" y="71.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26351)" opacity=".1875"/><rect x="-233" y="79.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26353)" opacity=".4688"/><rect x="-250.3" y="69.43" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26355)" opacity=".4688"/><rect x="-234.6" y="79.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26357)" opacity=".4688"/><rect x="-277.6" y="56.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26359)" opacity=".1875"/><rect x="-283.5" y="90.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26361)" opacity=".1875"/><rect x="-263.4" y="82.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26363)" opacity=".1875"/><rect x="-243.6" y="70.87" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26365)" opacity=".4688"/><rect x="-304.2" y="88.39" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26367)" opacity=".4688"/><rect x="-290.6" y="101.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26369)" opacity=".4688"/><rect x="-242.7" y="81.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26371)" opacity=".1875"/><rect x="-240.5" y="65.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26373)" opacity=".1875"/><rect x="-279.8" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26375)" opacity=".1875"/><rect x="-267" y="88.22" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26377)" opacity=".4688"/><rect x="-302.9" y="85.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26379)" opacity=".4688"/><rect x="-225.3" y="82.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26381)" opacity=".4688"/><rect x="-298.5" y="82.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26383)" opacity=".1875"/><rect x="-280.1" y="108.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26385)" opacity=".1875"/><rect x="-259.3" y="64.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26387)" opacity=".1875"/><rect x="-284.2" y="74.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26389)" opacity=".4688"/><rect x="-239.1" y="62.71" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26391)" opacity=".4688"/><rect x="-246" y="72.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26393)" opacity=".4688"/><rect x="-287.2" y="110.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26395)" opacity=".1875"/><rect x="-268.4" y="79.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26397)" opacity=".1875"/><rect x="-245.6" y="106.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26399)" opacity=".1875"/><rect x="-242.5" y="80.42" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26401)" opacity=".4688"/><rect x="-280.7" y="73.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26403)" opacity=".4688"/><rect x="-286.3" y="67.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26405)" opacity=".4688"/><rect x="-218.5" y="100.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26407)" opacity=".1875"/><rect x="-275.7" y="77.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26409)" opacity=".1875"/><rect x="-260.5" y="63.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26411)" opacity=".1875"/><rect x="-299.3" y="96.52" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26413)" opacity=".4688"/><rect x="-244.4" y="98.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26415)" opacity=".4688"/><rect x="-274.8" y="86.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26417)" opacity=".4688"/><rect x="-219.7" y="61.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26419)" opacity=".1875"/><rect x="-292.1" y="77.87" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26421)" opacity=".1875"/><rect x="-287.6" y="105.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26423)" opacity=".1875"/><rect x="-282" y="65.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26425)" opacity=".4688"/><rect x="-276.1" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26427)" opacity=".4688"/><rect x="-302.9" y="109.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26429)" opacity=".4688"/><rect x="-248" y="67.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26431)" opacity=".1875"/><rect x="-246.4" y="73.77" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26433)" opacity=".1875"/><rect x="-241.5" y="107.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26435)" opacity=".1875"/><rect x="-265.3" y="83.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26437)" opacity=".4688"/><rect x="-285.8" y="104.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26439)" opacity=".4688"/><rect x="-262.8" y="58.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26441)" opacity=".4688"/><rect x="-233.7" y="60.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26443)" opacity=".1875"/><rect x="-293.7" y="57.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26445)" opacity=".1875"/><rect x="-301.9" y="72.83" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26447)" opacity=".1875"/><rect x="-219.6" y="70.46" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26449)" opacity=".4688"/><rect x="-265.4" y="58.77" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26451)" opacity=".4688"/><rect x="-262" y="72.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26453)" opacity=".4688"/><rect x="-278.7" y="109.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26455)" opacity=".1875"/><rect x="-266.1" y="55.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26457)" opacity=".1875"/><rect x="-236.2" y="77.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26459)" opacity=".1875"/><rect x="-230.9" y="71.36" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26461)" opacity=".4688"/><rect x="-273.5" y="84.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26463)" opacity=".4688"/><rect x="-289.5" y="81.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26465)" opacity=".4688"/><rect x="-303.6" y="104.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26467)" opacity=".1875"/><rect x="-284.3" y="71.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26469)" opacity=".1875"/><rect x="-227.9" y="59.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26471)" opacity=".1875"/><rect x="-269.7" y="79.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26473)" opacity=".4688"/><rect x="-289.3" y="64.18" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26475)" opacity=".4688"/><rect x="-237.7" y="56.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26477)" opacity=".4688"/><rect x="-261.4" y="61.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26479)" opacity=".1875"/><rect x="-230.7" y="97.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26481)" opacity=".1875"/><rect x="-297.4" y="85.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26483)" opacity=".1875"/><rect x="-290.6" y="96.25" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26485)" opacity=".4688"/><rect x="-250" y="104.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26487)" opacity=".4688"/><rect x="-264.9" y="63.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26489)" opacity=".4688"/><rect x="-255.6" y="65.27" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26491)" opacity=".1875"/><rect x="-256.6" y="64.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26493)" opacity=".1875"/><rect x="-275.1" y="73.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26495)" opacity=".1875"/><rect x="-276.1" y="76.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26497)" opacity=".4688"/><rect x="-235.8" y="67.02" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26499)" opacity=".4688"/><rect x="-287.5" y="95.93" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26501)" opacity=".4688"/><rect x="-286.9" y="64.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26503)" opacity=".1875"/><rect x="-234.8" y="102.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26505)" opacity=".1875"/><rect x="-272" y="108.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26507)" opacity=".1875"/><rect x="-244.6" y="70.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26509)" opacity=".4688"/><rect x="-235.9" y="73.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26511)" opacity=".4688"/><rect x="-307.4" y="81.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26513)" opacity=".4688"/><rect x="-300.2" y="60.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26515)" opacity=".1875"/><rect x="-283" y="82.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26517)" opacity=".1875"/><rect x="-233.6" y="105" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26519)" opacity=".1875"/><rect x="-232.6" y="85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26521)" opacity=".4688"/><rect x="-227.3" y="87.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26523)" opacity=".4688"/><rect x="-295.3" y="97.67" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26525)" opacity=".4688"/><rect x="-232.4" y="94.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26527)" opacity=".1875"/><rect x="-233.3" y="64.08" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26529)" opacity=".1875"/><rect x="-255.2" y="75.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26531)" opacity=".1875"/><rect x="-270.2" y="69.01" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26533)" opacity=".4688"/><rect x="-291.3" y="106.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26535)" opacity=".4688"/><rect x="-294.7" y="106.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26537)" opacity=".4688"/><rect x="-292.8" y="60.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26539)" opacity=".1875"/><rect x="-225.5" y="70.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26541)" opacity=".1875"/><rect x="-262.7" y="61.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26543)" opacity=".1875"/><rect x="-231.6" y="73.23" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26545)" opacity=".4688"/><rect x="-248.8" y="86.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26547)" opacity=".4688"/><rect x="-262.5" y="80.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26549)" opacity=".4688"/><rect x="-222.8" y="77.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26551)" opacity=".1875"/><rect x="-297.7" y="97.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26553)" opacity=".1875"/><rect x="-280.5" y="61.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26555)" opacity=".1875"/><rect x="-272.5" y="104.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26557)" opacity=".4688"/><rect x="-295.2" y="102.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26559)" opacity=".4688"/><rect x="-303.9" y="66.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26561)" opacity=".4688"/><rect x="-245.4" y="79.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26563)" opacity=".1875"/><rect x="-299.8" y="89.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26565)" opacity=".1875"/><rect x="-228.9" y="106.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26567)" opacity=".1875"/><rect x="-292.6" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26569)" opacity=".4688"/><rect x="-273.6" y="61.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26571)" opacity=".4688"/><rect x="-234" y="68.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26573)" opacity=".4688"/><rect x="-286.5" y="88.59" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26575)" opacity=".1875"/><rect x="-293" y="105.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26577)" opacity=".1875"/><rect x="-226.8" y="59.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26579)" opacity=".1875"/><rect x="-282" y="98.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26581)" opacity=".4688"/><rect x="-261.5" y="83.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26583)" opacity=".4688"/><rect x="-259.6" y="84.06" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26585)" opacity=".4688"/><rect x="-250.1" y="62.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26587)" opacity=".1875"/><rect x="-276.1" y="79.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26589)" opacity=".1875"/><rect x="-304.3" y="72.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26591)" opacity=".1875"/><rect x="-300.7" y="77.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26593)" opacity=".4688"/><rect x="-236.8" y="98.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26595)" opacity=".4688"/><rect x="-225.4" y="78.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26597)" opacity=".4688"/><rect x="-277.8" y="65.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26599)" opacity=".1875"/><rect x="-260.8" y="96.14" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26601)" opacity=".1875"/><rect x="-260.7" y="96.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26603)" opacity=".1875"/><rect x="-231.4" y="84.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26605)" opacity=".4688"/><rect x="-232.2" y="76.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26607)" opacity=".4688"/><rect x="-298.2" y="94.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26609)" opacity=".4688"/><rect x="-254.2" y="80.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26611)" opacity=".1875"/><rect x="-301.1" y="79.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26613)" opacity=".1875"/><rect x="-300.5" y="104" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26615)" opacity=".1875"/><rect x="-303.4" y="71.01" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26617)" opacity=".4688"/><rect x="-265.9" y="102.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26619)" opacity=".4688"/><rect x="-275.9" y="98.33" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26621)" opacity=".4688"/><rect x="-223.8" y="99.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26623)" opacity=".1875"/><rect x="-283.5" y="107.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26625)" opacity=".1875"/><rect x="-303.6" y="108.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26627)" opacity=".1875"/><rect x="-300" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26629)" opacity=".4688"/><rect x="-303.6" y="71.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26631)" opacity=".4688"/><rect x="-300.7" y="58.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26633)" opacity=".4688"/><rect x="-292.8" y="60.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26635)" opacity=".1875"/><rect x="-268.5" y="83.14" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26637)" opacity=".1875"/><rect x="-307.4" y="61.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26639)" opacity=".1875"/><rect x="-249.1" y="81.73" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26641)" opacity=".4688"/><rect x="-243.9" y="106.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26643)" opacity=".4688"/><rect x="-305" y="108.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26645)" opacity=".4688"/><rect x="-276.3" y="76.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26647)" opacity=".1875"/><rect x="-261.3" y="67.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26649)" opacity=".1875"/><rect x="-306.5" y="92.74" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26651)" opacity=".1875"/><rect x="-237.2" y="60.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26653)" opacity=".4688"/><rect x="-244.1" y="59.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26655)" opacity=".4688"/><rect x="-238.3" y="70.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26657)" opacity=".4688"/><rect x="-295.9" y="102.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26659)" opacity=".1875"/><rect x="-251.2" y="74.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26661)" opacity=".1875"/><rect x="-303" y="58.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26663)" opacity=".1875"/><rect x="-242.5" y="86.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26665)" opacity=".4688"/><rect x="-304.4" y="90.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26667)" opacity=".4688"/><rect x="-283.9" y="93.24" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26669)" opacity=".4688"/><rect x="-277" y="56.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26671)" opacity=".1875"/><rect x="-283.4" y="70.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26673)" opacity=".1875"/><rect x="-271.8" y="62.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26675)" opacity=".1875"/><rect x="-300.7" y="79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26677)" opacity=".4688"/><rect x="-253.6" y="61.59" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26679)" opacity=".4688"/><rect x="-257.5" y="74.27" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26681)" opacity=".4688"/><rect x="-292.7" y="103" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26683)" opacity=".1875"/><rect x="-271.2" y="58.22" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26685)" opacity=".1875"/><rect x="-293.4" y="93.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26687)" opacity=".1875"/><rect x="-274.9" y="95.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26689)" opacity=".4688"/><rect x="-290.5" y="101.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26691)" opacity=".4688"/><rect x="-301" y="55.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26693)" opacity=".4688"/><rect x="-251.3" y="102.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26695)" opacity=".1875"/><rect x="-258.5" y="106.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26697)" opacity=".1875"/><rect x="-277" y="92.92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26699)" opacity=".1875"/><rect x="-231.3" y="90.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26701)" opacity=".4688"/><rect x="-227.8" y="105.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26703)" opacity=".4688"/><rect x="-281" y="98.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26705)" opacity=".4688"/><rect x="-220.1" y="93.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26707)" opacity=".1875"/><rect x="-233.6" y="71.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26709)" opacity=".1875"/><rect x="-245.6" y="110.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26711)" opacity=".1875"/><rect x="-299.4" y="96.91" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26713)" opacity=".4688"/><rect x="-231.4" y="67.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26715)" opacity=".4688"/><rect x="-305.8" y="105.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26717)" opacity=".4688"/><rect x="-247.7" y="96.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26719)" opacity=".1875"/><rect x="-298.2" y="82.29" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26721)" opacity=".1875"/><rect x="-301.6" y="87.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26723)" opacity=".1875"/><rect x="-228.5" y="69.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26725)" opacity=".4688"/><rect x="-276.4" y="102.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26727)" opacity=".4688"/><rect x="-237.8" y="108.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26729)" opacity=".4688"/><rect x="-241" y="68.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26731)" opacity=".1875"/><rect x="-289.5" y="86.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26733)" opacity=".1875"/><rect x="-277.2" y="85.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26735)" opacity=".1875"/><rect x="-221.3" y="95.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26737)" opacity=".4688"/><rect x="-290.5" y="75.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26739)" opacity=".4688"/><rect x="-296.4" y="90.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26741)" opacity=".4688"/><rect x="-287.2" y="87.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26743)" opacity=".1875"/><rect x="-229.5" y="82.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26745)" opacity=".1875"/><rect x="-305.2" y="90.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26747)" opacity=".1875"/><rect x="-219.3" y="105.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26749)" opacity=".4688"/><rect x="-293.2" y="92.52" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26751)" opacity=".4688"/><rect x="-286.1" y="72.21" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26753)" opacity=".4688"/><rect x="-221.8" y="70.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26755)" opacity=".1875"/><rect x="-307.2" y="105.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26757)" opacity=".1875"/><rect x="-236.1" y="65.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26759)" opacity=".1875"/><rect x="-247.8" y="64.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26761)" opacity=".4688"/><rect x="-284.5" y="74.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26763)" opacity=".4688"/><rect x="-237.9" y="55.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26765)" opacity=".4688"/><rect x="-283.3" y="67.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26767)" opacity=".1875"/><rect x="-253.9" y="107.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26769)" opacity=".1875"/><rect x="-261.2" y="55.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26771)" opacity=".1875"/><rect x="-241.5" y="60.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26773)" opacity=".4688"/><rect x="-286.4" y="60.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26775)" opacity=".4688"/><rect x="-261.5" y="61.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26777)" opacity=".4688"/><rect x="-256.7" y="63.91" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26779)" opacity=".1875"/><rect x="-267.9" y="92.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26781)" opacity=".1875"/><rect x="-264.6" y="101.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26783)" opacity=".1875"/><rect x="-275" y="86.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26785)" opacity=".4688"/><rect x="-285.1" y="97.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26787)" opacity=".4688"/><rect x="-228.5" y="75.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26789)" opacity=".4688"/><rect x="-237.3" y="63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26791)" opacity=".1875"/><rect x="-257.8" y="84.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26793)" opacity=".1875"/><rect x="-299.2" y="110.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26795)" opacity=".1875"/><rect x="-255.1" y="101.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26797)" opacity=".4688"/><rect x="-282.6" y="110.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26799)" opacity=".4688"/><rect x="-242" y="96.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26801)" opacity=".4688"/><rect x="-224.4" y="80.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26803)" opacity=".1875"/><rect x="-230.7" y="108.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26805)" opacity=".1875"/><rect x="-232.5" y="64.29" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26807)" opacity=".1875"/><rect x="-301.9" y="81.06" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26809)" opacity=".4688"/><rect x="-262.7" y="61.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26811)" opacity=".4688"/><rect x="-244.6" y="67.98" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26813)" opacity=".4688"/><rect x="-305.1" y="76.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26815)" opacity=".1875"/><rect x="-297" y="108.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26817)" opacity=".1875"/><rect x="-259.5" y="59.95" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26819)" opacity=".1875"/><rect x="-217.3" y="87.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26821)" opacity=".4688"/><rect x="-303.3" y="107" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26823)" opacity=".4688"/><rect x="-274.7" y="96.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26825)" opacity=".4688"/><rect x="-239.2" y="61.07" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26827)" opacity=".1875"/><rect x="-244.4" y="75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26829)" opacity=".1875"/><rect x="-260.8" y="88.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26831)" opacity=".1875"/><rect x="-218.1" y="67.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26833)" opacity=".4688"/><rect x="-250.2" y="109.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26835)" opacity=".4688"/><rect x="-230.2" y="96.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26837)" opacity=".4688"/><rect x="-295.1" y="109.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26839)" opacity=".1875"/><rect x="-284.8" y="103" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26841)" opacity=".1875"/><rect x="-252.7" y="87.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26843)" opacity=".1875"/><rect x="-250.1" y="77.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26845)" opacity=".4688"/><rect x="-262.2" y="90.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26847)" opacity=".4688"/><rect x="-303" y="64.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26849)" opacity=".4688"/><rect x="-269.2" y="56.08" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26851)" opacity=".1875"/><rect x="-237.9" y="57.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26853)" opacity=".1875"/><rect x="-243.8" y="101.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26855)" opacity=".1875"/><rect x="-287.9" y="85.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26857)" opacity=".4688"/><rect x="-288.5" y="56.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26859)" opacity=".4688"/><rect x="-241.7" y="92.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26861)" opacity=".4688"/><rect x="-230.1" y="102.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26863)" opacity=".1875"/><rect x="-242.8" y="62.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26865)" opacity=".1875"/><rect x="-301.8" y="61.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26867)" opacity=".1875"/><rect x="-296.7" y="73.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26869)" opacity=".4688"/><rect x="-278.6" y="91.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26871)" opacity=".4688"/><rect x="-229.5" y="67.36" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26873)" opacity=".4688"/><rect x="-243.6" y="59.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26875)" opacity=".1875"/><rect x="-278.9" y="59.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26877)" opacity=".1875"/><rect x="-273.8" y="57.04" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26879)" opacity=".1875"/><rect x="-246.7" y="60.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26881)" opacity=".4688"/><rect x="-287.3" y="101.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26883)" opacity=".4688"/><rect x="-288.1" y="86.82" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26885)" opacity=".4688"/><rect x="-239.9" y="106.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26887)" opacity=".1875"/><rect x="-268.4" y="81.96" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26889)" opacity=".1875"/><rect x="-245.3" y="78.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26891)" opacity=".1875"/><rect x="-296.3" y="61.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26893)" opacity=".4688"/><rect x="-306.7" y="67.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26895)" opacity=".4688"/><rect x="-238.9" y="106.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26897)" opacity=".4688"/><rect x="-275.2" y="81.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26899)" opacity=".1875"/><rect x="-244.8" y="65.12" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26901)" opacity=".1875"/><rect x="-227.1" y="73.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26903)" opacity=".1875"/><rect x="-226.1" y="63.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26905)" opacity=".4688"/><rect x="-302.5" y="61.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26907)" opacity=".4688"/><rect x="-274.7" y="62.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26909)" opacity=".4688"/><rect x="-264.6" y="63.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26911)" opacity=".1875"/><rect x="-278.9" y="108" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26913)" opacity=".1875"/><rect x="-225.5" y="106" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26915)" opacity=".1875"/><rect x="-220" y="78.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26917)" opacity=".4688"/><rect x="-237.3" y="56.17" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26919)" opacity=".4688"/><rect x="-251.6" y="73.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26921)" opacity=".4688"/><rect x="-298.6" y="76.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26923)" opacity=".1875"/><rect x="-268.5" y="65.49" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26925)" opacity=".1875"/><rect x="-306.2" y="57.92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26927)" opacity=".1875"/><rect x="-282.1" y="64.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26929)" opacity=".4688"/><rect x="-301.3" y="87.52" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26931)" opacity=".4688"/><rect x="-284.8" y="55.55" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26933)" opacity=".4688"/><rect x="-223.4" y="87.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26935)" opacity=".1875"/><rect x="-229.5" y="99.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26937)" opacity=".1875"/><rect x="-307.3" y="105.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26939)" opacity=".1875"/><rect x="-245.9" y="100.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26941)" opacity=".4688"/><rect x="-289.4" y="101.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26943)" opacity=".4688"/><rect x="-236.2" y="75.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26945)" opacity=".4688"/><rect x="-256.2" y="89.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26947)" opacity=".1875"/><rect x="-268.1" y="69.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26949)" opacity=".1875"/><rect x="-236.7" y="57.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26951)" opacity=".1875"/><rect x="-288" y="98.27" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26953)" opacity=".4688"/><rect x="-280.4" y="71.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26955)" opacity=".4688"/><rect x="-259" y="77.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26957)" opacity=".4688"/><rect x="-258.7" y="101.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26959)" opacity=".1875"/><rect x="-233.5" y="91.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26961)" opacity=".1875"/><rect x="-307.4" y="108.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26963)" opacity=".1875"/><rect x="-268.6" y="73.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26965)" opacity=".4688"/><rect x="-271.9" y="64.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26967)" opacity=".4688"/><rect x="-244.9" y="86.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26969)" opacity=".4688"/><rect x="-276.2" y="84.15" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26971)" opacity=".1875"/><rect x="-301.7" y="68.04" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26973)" opacity=".1875"/><rect x="-283.7" y="106.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26975)" opacity=".1875"/><rect x="-248" y="63.94" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26977)" opacity=".4688"/><rect x="-267.4" y="81.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26979)" opacity=".4688"/><rect x="-275.2" y="87.51" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26981)" opacity=".4688"/><rect x="-301.9" y="76.72" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26983)" opacity=".1875"/><rect x="-229.3" y="76.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26985)" opacity=".1875"/><rect x="-242.5" y="64.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26987)" opacity=".1875"/><rect x="-244" y="105.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26989)" opacity=".4688"/><rect x="-277.1" y="86.39" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26991)" opacity=".4688"/><rect x="-257.9" y="69.66" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26993)" opacity=".4688"/><rect x="-237.7" y="92.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient26995)" opacity=".1875"/><rect x="-288.8" y="59.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient26997)" opacity=".1875"/><rect x="-246.9" y="75.97" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient26999)" opacity=".1875"/><rect x="-224.6" y="102.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27001)" opacity=".4688"/><rect x="-226.8" y="60.75" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27003)" opacity=".4688"/><rect x="-247" y="61.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27005)" opacity=".4688"/><rect x="-271.7" y="62.57" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27007)" opacity=".1875"/><rect x="-229.6" y="98.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27009)" opacity=".1875"/><rect x="-272.1" y="94.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27011)" opacity=".1875"/><rect x="-247.8" y="68.42" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27013)" opacity=".4688"/><rect x="-258" y="81.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27015)" opacity=".4688"/><rect x="-266.4" y="103.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27017)" opacity=".4688"/><rect x="-297.2" y="55.45" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27019)" opacity=".1875"/><rect x="-293.2" y="97.33" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27021)" opacity=".1875"/><rect x="-287.2" y="62.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27023)" opacity=".1875"/><rect x="-262.6" y="88.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27025)" opacity=".4688"/><rect x="-261.6" y="85.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27027)" opacity=".4688"/><rect x="-235.2" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27029)" opacity=".4688"/><rect x="-217" y="80.84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27031)" opacity=".1875"/><rect x="-231.6" y="91.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27033)" opacity=".1875"/><rect x="-229.6" y="92.43" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27035)" opacity=".1875"/><rect x="-255.8" y="106.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27037)" opacity=".4688"/><rect x="-276.7" y="80.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27039)" opacity=".4688"/><rect x="-251.8" y="109.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27041)" opacity=".4688"/><rect x="-262.8" y="100.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27043)" opacity=".1875"/><rect x="-263.5" y="89.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27045)" opacity=".1875"/><rect x="-279.1" y="103.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27047)" opacity=".1875"/><rect x="-246.9" y="72.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27049)" opacity=".4688"/><rect x="-237.1" y="89.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27051)" opacity=".4688"/><rect x="-271.3" y="69.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27053)" opacity=".4688"/><rect x="-245.1" y="72.15" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27055)" opacity=".1875"/><rect x="-286" y="102.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27057)" opacity=".1875"/><rect x="-307.3" y="61.66" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27059)" opacity=".1875"/><rect x="-295.8" y="71.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27061)" opacity=".4688"/><rect x="-238.6" y="77.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27063)" opacity=".4688"/><rect x="-251.1" y="85.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27065)" opacity=".4688"/><rect x="-227.3" y="56.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27067)" opacity=".1875"/><rect x="-303.6" y="95.67" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27069)" opacity=".1875"/><rect x="-265.5" y="100.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27071)" opacity=".1875"/><rect x="-228.2" y="59.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27073)" opacity=".4688"/><rect x="-229.4" y="78.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27075)" opacity=".4688"/><rect x="-301.7" y="70.22" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27077)" opacity=".4688"/><rect x="-288.6" y="101.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27079)" opacity=".1875"/><rect x="-285.2" y="85.16" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27081)" opacity=".1875"/><rect x="-301.5" y="63.53" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27083)" opacity=".1875"/><rect x="-216.4" y="83.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27085)" opacity=".4688"/><rect x="-287.9" y="108.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27087)" opacity=".4688"/><rect x="-294" y="57.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27089)" opacity=".4688"/><rect x="-292.9" y="111" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27091)" opacity=".1875"/><rect x="-256.4" y="69.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27093)" opacity=".1875"/><rect x="-260" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27095)" opacity=".1875"/><rect x="-283.1" y="94.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27097)" opacity=".4688"/><rect x="-296.6" y="85.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27099)" opacity=".4688"/><rect x="-256.7" y="66.78" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27101)" opacity=".4688"/><rect x="-299.9" y="102.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27103)" opacity=".1875"/><rect x="-228.9" y="57.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27105)" opacity=".1875"/><rect x="-264.5" y="61.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27107)" opacity=".1875"/><rect x="-239.5" y="93.16" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27109)" opacity=".4688"/><rect x="-260.3" y="92.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27111)" opacity=".4688"/><rect x="-280.1" y="84.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27113)" opacity=".4688"/><rect x="-250.9" y="58.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27115)" opacity=".1875"/><rect x="-294.3" y="76.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27117)" opacity=".1875"/><rect x="-306.3" y="80.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27119)" opacity=".1875"/><rect x="-301" y="100.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27121)" opacity=".4688"/><rect x="-253.1" y="58.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27123)" opacity=".4688"/><rect x="-252.3" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27125)" opacity=".4688"/><rect x="-245.6" y="58.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27127)" opacity=".1875"/><rect x="-261.5" y="61.16" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27129)" opacity=".1875"/><rect x="-283.1" y="66.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27131)" opacity=".1875"/><rect x="-288.6" y="73.95" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27133)" opacity=".4688"/><rect x="-250.6" y="65.03" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27135)" opacity=".4688"/><rect x="-275.9" y="95.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27137)" opacity=".4688"/><rect x="-242.6" y="98.75" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27139)" opacity=".1875"/><rect x="-275.3" y="65.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27141)" opacity=".1875"/><rect x="-280.5" y="83.99" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27143)" opacity=".1875"/><rect x="-269.9" y="85.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27145)" opacity=".4688"/><rect x="-302.4" y="82.21" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27147)" opacity=".4688"/><rect x="-256.6" y="84.86" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27149)" opacity=".4688"/><rect x="-297.3" y="87.09" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27151)" opacity=".1875"/><rect x="-273.9" y="76.85" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27153)" opacity=".1875"/><rect x="-266.9" y="108.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27155)" opacity=".1875"/><rect x="-234.5" y="63.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27157)" opacity=".4688"/><rect x="-299.6" y="61.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27159)" opacity=".4688"/><rect x="-237.8" y="80.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27161)" opacity=".4688"/><rect x="-246.7" y="70.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27163)" opacity=".1875"/><rect x="-232.5" y="68.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27165)" opacity=".1875"/><rect x="-230.3" y="72.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27167)" opacity=".1875"/><rect x="-294.9" y="66.96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27169)" opacity=".4688"/><rect x="-244.9" y="69.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27171)" opacity=".4688"/><rect x="-274.7" y="60.12" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27173)" opacity=".4688"/><rect x="-251.6" y="87.97" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27175)" opacity=".1875"/><rect x="-250.7" y="107.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27177)" opacity=".1875"/><rect x="-231.4" y="97.07" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27179)" opacity=".1875"/><rect x="-238.2" y="75.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27181)" opacity=".4688"/><rect x="-271.7" y="99.55" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27183)" opacity=".4688"/><rect x="-251.3" y="75.01" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27185)" opacity=".4688"/><rect x="-256.5" y="111.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27187)" opacity=".1875"/><rect x="-277.6" y="57.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27189)" opacity=".1875"/><rect x="-228.9" y="102.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27191)" opacity=".1875"/><rect x="-271.9" y="68.99" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27193)" opacity=".4688"/><rect x="-233.8" y="92.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27195)" opacity=".4688"/><rect x="-248.2" y="62.98" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27197)" opacity=".4688"/><rect x="-235" y="74.33" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27199)" opacity=".1875"/><rect x="-306.3" y="74.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27201)" opacity=".1875"/><rect x="-258.2" y="67.12" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27203)" opacity=".1875"/><rect x="-283" y="87.62" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27205)" opacity=".4688"/><rect x="-292.7" y="83.07" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27207)" opacity=".4688"/><rect x="-257" y="68.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27209)" opacity=".4688"/><rect x="-259.7" y="103.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27211)" opacity=".1875"/><rect x="-284.5" y="89.42" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27213)" opacity=".1875"/><rect x="-255.5" y="86.76" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27215)" opacity=".1875"/><rect x="-307.3" y="59.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27217)" opacity=".4688"/><rect x="-268.5" y="56.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27219)" opacity=".4688"/><rect x="-253.8" y="82.51" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27221)" opacity=".4688"/><rect x="-250.3" y="101.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27223)" opacity=".1875"/><rect x="-286.3" y="81.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27225)" opacity=".1875"/><rect x="-245.5" y="57.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27227)" opacity=".1875"/><rect x="-279.3" y="56.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27229)" opacity=".4688"/><rect x="-239.1" y="102.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27231)" opacity=".4688"/><rect x="-300.8" y="57.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27233)" opacity=".4688"/><rect x="-230.5" y="58.55" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27235)" opacity=".1875"/><rect x="-290.2" y="98.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27237)" opacity=".1875"/><rect x="-246.2" y="70.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27239)" opacity=".1875"/><rect x="-281.9" y="89.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27241)" opacity=".4688"/><rect x="-267.8" y="75.27" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27243)" opacity=".4688"/><rect x="-285.3" y="96.61" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27245)" opacity=".4688"/><rect x="-251.8" y="105.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27247)" opacity=".1875"/><rect x="-236.8" y="60.86" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27249)" opacity=".1875"/><rect x="-261.4" y="63.96" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27251)" opacity=".1875"/><rect x="-251" y="64.67" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27253)" opacity=".4688"/><rect x="-236.8" y="56.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27255)" opacity=".4688"/><rect x="-247" y="103.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27257)" opacity=".4688"/><rect x="-260.2" y="75.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27259)" opacity=".1875"/><rect x="-293.6" y="101.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27261)" opacity=".1875"/><rect x="-235.9" y="74.69" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27263)" opacity=".1875"/><rect x="-293.1" y="64.29" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27265)" opacity=".4688"/><rect x="-231.1" y="63.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27267)" opacity=".4688"/><rect x="-233.5" y="87.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27269)" opacity=".4688"/><rect x="-249.2" y="78.34" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27271)" opacity=".1875"/><rect x="-304.9" y="107" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27273)" opacity=".1875"/><rect x="-243.8" y="69.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27275)" opacity=".1875"/><rect x="-245.8" y="84.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27277)" opacity=".4688"/><rect x="-296.8" y="88.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27279)" opacity=".4688"/><rect x="-267.4" y="58.72" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27281)" opacity=".4688"/><rect x="-223.2" y="100.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27283)" opacity=".1875"/><rect x="-291.4" y="91.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27285)" opacity=".1875"/><rect x="-234.9" y="65.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27287)" opacity=".1875"/><rect x="-276.5" y="82.44" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27289)" opacity=".4688"/><rect x="-282.1" y="62.92" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27291)" opacity=".4688"/><rect x="-294.8" y="79.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27293)" opacity=".4688"/><rect x="-219.5" y="86.38" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27295)" opacity=".1875"/><rect x="-306.9" y="78.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27297)" opacity=".1875"/><rect x="-239.3" y="88.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27299)" opacity=".1875"/><rect x="-283.1" y="72.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27301)" opacity=".4688"/><rect x="-243.8" y="59.67" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27303)" opacity=".4688"/><rect x="-251.4" y="84.25" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27305)" opacity=".4688"/><rect x="-230.2" y="92.54" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27307)" opacity=".1875"/><rect x="-275" y="67.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27309)" opacity=".1875"/><rect x="-259" y="79.79" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27311)" opacity=".1875"/><rect x="-222.3" y="73.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27313)" opacity=".4688"/><rect x="-237.3" y="104.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27315)" opacity=".4688"/><rect x="-233.4" y="99.54" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27317)" opacity=".4688"/><rect x="-256" y="81.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27319)" opacity=".1875"/><rect x="-298.3" y="63.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27321)" opacity=".1875"/><rect x="-266.3" y="68.73" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27323)" opacity=".1875"/><rect x="-222.9" y="66.71" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27325)" opacity=".4688"/><rect x="-302.1" y="102.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27327)" opacity=".4688"/><rect x="-255.2" y="90.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27329)" opacity=".4688"/><rect x="-217.8" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27331)" opacity=".1875"/><rect x="-278.5" y="107.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27333)" opacity=".1875"/><rect x="-256.5" y="109.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27335)" opacity=".1875"/><rect x="-296.7" y="83.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27337)" opacity=".4688"/><rect x="-234.1" y="55.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27339)" opacity=".4688"/><rect x="-307.2" y="69.61" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27341)" opacity=".4688"/><rect x="-248.7" y="98.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27343)" opacity=".1875"/><rect x="-305.9" y="93.66" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27345)" opacity=".1875"/><rect x="-230.9" y="79.92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27347)" opacity=".1875"/><rect x="-275.8" y="82.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27349)" opacity=".4688"/><rect x="-294.7" y="84.64" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27351)" opacity=".4688"/><rect x="-296.1" y="75.39" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27353)" opacity=".4688"/><rect x="-245.2" y="69.85" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27355)" opacity=".1875"/><rect x="-280.6" y="68.56" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27357)" opacity=".1875"/><rect x="-283.6" y="81.57" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27359)" opacity=".1875"/><rect x="-257.2" y="81.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27361)" opacity=".4688"/><rect x="-296.1" y="85.68" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27363)" opacity=".4688"/><rect x="-229" y="107.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27365)" opacity=".4688"/><rect x="-234.8" y="95.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27367)" opacity=".1875"/><rect x="-247.7" y="98.06" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27369)" opacity=".1875"/><rect x="-233.7" y="63.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27371)" opacity=".1875"/><rect x="-220.9" y="75.47" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27373)" opacity=".4688"/><rect x="-275.5" y="111.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27375)" opacity=".4688"/><rect x="-232.7" y="85.41" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27377)" opacity=".4688"/><rect x="-225.8" y="65.04" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27379)" opacity=".1875"/><rect x="-273.4" y="109.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27381)" opacity=".1875"/><rect x="-287.8" y="87.24" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27383)" opacity=".1875"/><rect x="-235" y="70.93" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27385)" opacity=".4688"/><rect x="-261.2" y="91.74" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27387)" opacity=".4688"/><rect x="-268" y="96.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27389)" opacity=".4688"/><rect x="-303.5" y="80.43" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27391)" opacity=".1875"/><rect x="-294.4" y="87.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27393)" opacity=".1875"/><rect x="-287.1" y="92.52" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27395)" opacity=".1875"/><rect x="-267.9" y="104.8" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27397)" opacity=".4688"/><rect x="-225.5" y="56.44" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27399)" opacity=".4688"/><rect x="-291.8" y="71.84" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27401)" opacity=".4688"/><rect x="-271.1" y="110.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27403)" opacity=".1875"/><rect x="-265.8" y="95.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27405)" opacity=".1875"/><rect x="-260.6" y="83.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27407)" opacity=".1875"/><rect x="-264.8" y="105.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27409)" opacity=".4688"/><rect x="-283.9" y="105.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27411)" opacity=".4688"/><rect x="-247.5" y="110.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27413)" opacity=".4688"/><rect x="-233.3" y="108.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27415)" opacity=".1875"/><rect x="-238.4" y="66.73" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27417)" opacity=".1875"/><rect x="-237" y="100.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27419)" opacity=".1875"/><rect x="-248.9" y="109.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27421)" opacity=".4688"/><rect x="-285.8" y="61.88" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27423)" opacity=".4688"/><rect x="-263.5" y="90.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27425)" opacity=".4688"/><rect x="-305.3" y="105.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27427)" opacity=".1875"/><rect x="-306.6" y="110.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27429)" opacity=".1875"/><rect x="-273.3" y="78.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27431)" opacity=".1875"/><rect x="-245.4" y="65.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27433)" opacity=".4688"/><rect x="-247.5" y="90.01" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27435)" opacity=".4688"/><rect x="-293.3" y="77.31" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27437)" opacity=".4688"/><rect x="-290.9" y="108.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27439)" opacity=".1875"/><rect x="-235.7" y="86.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27441)" opacity=".1875"/><rect x="-299.5" y="81.27" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27443)" opacity=".1875"/><rect x="-242.7" y="107.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27445)" opacity=".4688"/><rect x="-296.2" y="91.95" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27447)" opacity=".4688"/><rect x="-303.5" y="91.42" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27449)" opacity=".4688"/><rect x="-265.2" y="104.2" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27451)" opacity=".1875"/><rect x="-302.1" y="58.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27453)" opacity=".1875"/><rect x="-261.6" y="55.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27455)" opacity=".1875"/><rect x="-259.7" y="72.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27457)" opacity=".4688"/><rect x="-234.8" y="75.61" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27459)" opacity=".4688"/><rect x="-305.3" y="107.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27461)" opacity=".4688"/><rect x="-236.9" y="100.3" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27463)" opacity=".1875"/><rect x="-278.5" y="61.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27465)" opacity=".1875"/><rect x="-292.7" y="77.94" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27467)" opacity=".1875"/><rect x="-281.9" y="85.35" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27469)" opacity=".4688"/><rect x="-278.5" y="73.69" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27471)" opacity=".4688"/><rect x="-232.9" y="101.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27473)" opacity=".4688"/><rect x="-263.1" y="108" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27475)" opacity=".1875"/><rect x="-294" y="90.51" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27477)" opacity=".1875"/><rect x="-238.7" y="97.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27479)" opacity=".1875"/><rect x="-247.3" y="105.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27481)" opacity=".4688"/><rect x="-229.8" y="56.58" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27483)" opacity=".4688"/><rect x="-287" y="98.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27485)" opacity=".4688"/><rect x="-251.6" y="63.42" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27487)" opacity=".1875"/><rect x="-278.7" y="82.93" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27489)" opacity=".1875"/><rect x="-279.2" y="66.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27491)" opacity=".1875"/><rect x="-284.1" y="58.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27493)" opacity=".4688"/><rect x="-280.1" y="103.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27495)" opacity=".4688"/><rect x="-235.6" y="72.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27497)" opacity=".4688"/><rect x="-252.6" y="74.48" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27499)" opacity=".1875"/><rect x="-277.6" y="99.89" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27501)" opacity=".1875"/><rect x="-248.1" y="92" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27503)" opacity=".1875"/><rect x="-259" y="91.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27505)" opacity=".4688"/><rect x="-227.5" y="105.8" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27507)" opacity=".4688"/><rect x="-242.5" y="103.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27509)" opacity=".4688"/><rect x="-247.1" y="108.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27511)" opacity=".1875"/><rect x="-293" y="58.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27513)" opacity=".1875"/><rect x="-272.8" y="65.54" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27515)" opacity=".1875"/><rect x="-305.6" y="68.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27517)" opacity=".4688"/><rect x="-237.7" y="55.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27519)" opacity=".4688"/><rect x="-281.1" y="70" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27521)" opacity=".4688"/><rect x="-281.8" y="83.69" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27523)" opacity=".1875"/><rect x="-276.6" y="72.34" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27525)" opacity=".1875"/><rect x="-281.5" y="91.49" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27527)" opacity=".1875"/><rect x="-302.8" y="73.18" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27529)" opacity=".4688"/><rect x="-244.3" y="62.3" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27531)" opacity=".4688"/><rect x="-275.4" y="100.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27533)" opacity=".4688"/><rect x="-305.3" y="56.55" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27535)" opacity=".1875"/><rect x="-226.9" y="88.68" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27537)" opacity=".1875"/><rect x="-290" y="57.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27539)" opacity=".1875"/><rect x="-218.2" y="107.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27541)" opacity=".4688"/><rect x="-296.8" y="67.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27543)" opacity=".4688"/><rect x="-286.2" y="93.44" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27545)" opacity=".4688"/><rect x="-221.6" y="69.78" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27547)" opacity=".1875"/><rect x="-292.9" y="72.56" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27549)" opacity=".1875"/><rect x="-236.3" y="65.98" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27745)" opacity=".4688"/><rect x="-234.9" y="66.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27551)" opacity=".1875"/><rect x="-273.5" y="88.79" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27553)" opacity=".4688"/><rect x="-239.4" y="106.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27555)" opacity=".4688"/><rect x="-257.1" y="61.13" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27557)" opacity=".4688"/><rect x="-293.7" y="71.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27559)" opacity=".1875"/><rect x="-237.7" y="60.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27561)" opacity=".1875"/><rect x="-232" y="56.35" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27563)" opacity=".1875"/><rect x="-230.2" y="94.83" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27565)" opacity=".4688"/><rect x="-271.9" y="87.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27567)" opacity=".4688"/><rect x="-261.3" y="84.09" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27569)" opacity=".4688"/><rect x="-300.3" y="70.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27571)" opacity=".1875"/><rect x="-259.7" y="78.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27573)" opacity=".1875"/><rect x="-273.7" y="60.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27575)" opacity=".1875"/><rect x="-251.4" y="103.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27577)" opacity=".4688"/><rect x="-244.3" y="96.78" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27579)" opacity=".4688"/><rect x="-238.8" y="106.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27581)" opacity=".4688"/><rect x="-222.2" y="66.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27583)" opacity=".1875"/><rect x="-306.7" y="59.36" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27585)" opacity=".1875"/><rect x="-267.3" y="75.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27587)" opacity=".1875"/><rect x="-263.9" y="65.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27589)" opacity=".4688"/><rect x="-269.4" y="102.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27591)" opacity=".4688"/><rect x="-275.3" y="77.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27593)" opacity=".4688"/><rect x="-243.6" y="101.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27595)" opacity=".1875"/><rect x="-243.5" y="73.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27597)" opacity=".1875"/><rect x="-305.3" y="102.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27599)" opacity=".1875"/><rect x="-245.9" y="85.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27601)" opacity=".4688"/><rect x="-303.1" y="111.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27603)" opacity=".4688"/><rect x="-268.4" y="81.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27605)" opacity=".4688"/><rect x="-267.3" y="92.51" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27607)" opacity=".1875"/><rect x="-300.2" y="74.28" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27609)" opacity=".1875"/><rect x="-282.1" y="60.56" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27611)" opacity=".1875"/><rect x="-239.7" y="105.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27613)" opacity=".4688"/><rect x="-278.2" y="96.25" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27615)" opacity=".4688"/><rect x="-288" y="110.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27617)" opacity=".4688"/><rect x="-257.2" y="111.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27619)" opacity=".1875"/><rect x="-234.6" y="101.4" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27621)" opacity=".1875"/><rect x="-262.6" y="60.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27623)" opacity=".1875"/><rect x="-272.6" y="73.02" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27625)" opacity=".4688"/><rect x="-267.8" y="98.47" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27627)" opacity=".4688"/><rect x="-276.9" y="107.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27629)" opacity=".4688"/><rect x="-238.2" y="86.31" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27631)" opacity=".1875"/><rect x="-232.6" y="95.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27633)" opacity=".1875"/><rect x="-306.7" y="101.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27635)" opacity=".1875"/><rect x="-272.3" y="86.32" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27637)" opacity=".4688"/><rect x="-292" y="55.32" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27639)" opacity=".4688"/><rect x="-304.6" y="102.1" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27641)" opacity=".4688"/><rect x="-267" y="61.65" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27643)" opacity=".1875"/><rect x="-256.9" y="110.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27645)" opacity=".1875"/><rect x="-297.2" y="92.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27647)" opacity=".1875"/><rect x="-276.2" y="59.46" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27649)" opacity=".4688"/><rect x="-291.8" y="92.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27651)" opacity=".4688"/><rect x="-285.4" y="108.4" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27653)" opacity=".4688"/><rect x="-278.5" y="55.13" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27655)" opacity=".1875"/><rect x="-255" y="78.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27657)" opacity=".1875"/><rect x="-290.5" y="70.77" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27659)" opacity=".1875"/><rect x="-248.1" y="84" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27661)" opacity=".4688"/><rect x="-280.3" y="100.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27663)" opacity=".4688"/><rect x="-279.7" y="67.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27665)" opacity=".4688"/><rect x="-300" y="73.58" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27667)" opacity=".1875"/><rect x="-265.1" y="94.37" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27669)" opacity=".1875"/><rect x="-254.5" y="100.7" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27671)" opacity=".1875"/><rect x="-231.6" y="85.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27673)" opacity=".4688"/><rect x="-274.8" y="103.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27675)" opacity=".4688"/><rect x="-289" y="90.88" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27677)" opacity=".4688"/><rect x="-275.7" y="70.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27679)" opacity=".1875"/><rect x="-225.2" y="57.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27681)" opacity=".1875"/><rect x="-275.8" y="76.34" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27683)" opacity=".1875"/><rect x="-230.8" y="62.41" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27685)" opacity=".4688"/><rect x="-305.6" y="109.5" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27687)" opacity=".4688"/><rect x="-293" y="99.26" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27689)" opacity=".4688"/><rect x="-302.7" y="80.13" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27691)" opacity=".1875"/><rect x="-232.5" y="80.02" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27693)" opacity=".1875"/><rect x="-270.9" y="96.71" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27695)" opacity=".1875"/><rect x="-236.7" y="104" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27697)" opacity=".4688"/><rect x="-271" y="68.65" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27699)" opacity=".4688"/><rect x="-294.3" y="59.48" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27701)" opacity=".4688"/><rect x="-233.7" y="62.55" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27703)" opacity=".1875"/><rect x="-251.1" y="84.63" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27705)" opacity=".1875"/><rect x="-246.5" y="61.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27707)" opacity=".1875"/><rect x="-288.2" y="109" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27709)" opacity=".4688"/><rect x="-276.6" y="110.7" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27711)" opacity=".4688"/><rect x="-252.7" y="105.8" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27713)" opacity=".4688"/><rect x="-223.3" y="56.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27715)" opacity=".1875"/><rect x="-290.9" y="72.45" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27717)" opacity=".1875"/><rect x="-287.8" y="81.6" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27719)" opacity=".1875"/><rect x="-259.3" y="80.26" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27721)" opacity=".4688"/><rect x="-299.5" y="63.05" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27723)" opacity=".4688"/><rect x="-229.1" y="86.82" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27725)" opacity=".4688"/><rect x="-273.9" y="60.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27727)" opacity=".1875"/><rect x="-257.4" y="61.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27729)" opacity=".1875"/><rect x="-297.7" y="99.56" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27731)" opacity=".1875"/><rect x="-295" y="83.77" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27733)" opacity=".4688"/><rect x="-296.8" y="55.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27735)" opacity=".4688"/><rect x="-274.2" y="67.23" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27737)" opacity=".4688"/><rect x="-279.9" y="58.03" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27739)" opacity=".1875"/><rect x="-265.1" y="57.62" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27741)" opacity=".1875"/><rect x="-230.9" y="62.89" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27743)" opacity=".1875"/><rect x="-245.2" y="73.31" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27747)" opacity=".4688"/><rect x="-292.3" y="72.87" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27749)" opacity=".4688"/><rect x="-293.2" y="71.63" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27751)" opacity=".1875"/><rect x="-259.4" y="65.28" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27753)" opacity=".1875"/><rect x="-278.6" y="64.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27755)" opacity=".1875"/><rect x="-281.7" y="96" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27757)" opacity=".4688"/><rect x="-260.5" y="59.46" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27759)" opacity=".4688"/><rect x="-296.7" y="64.19" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27761)" opacity=".4688"/><rect x="-247.1" y="95.6" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27763)" opacity=".1875"/><rect x="-297.3" y="63.35" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27765)" opacity=".1875"/><rect x="-289" y="101.5" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27767)" opacity=".1875"/><rect x="-298.7" y="86.17" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27769)" opacity=".4688"/><rect x="-278.7" y="78.38" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27771)" opacity=".4688"/><rect x="-229.5" y="93.68" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27773)" opacity=".4688"/><rect x="-290.9" y="85.7" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27775)" opacity=".1875"/><rect x="-250.4" y="77.19" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27777)" opacity=".1875"/><rect x="-247.7" y="56.18" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27779)" opacity=".1875"/><rect x="-282.2" y="107.9" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27781)" opacity=".4688"/><rect x="-303.9" y="69.24" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27783)" opacity=".4688"/><rect x="-282.2" y="109.3" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27785)" opacity=".4688"/><rect x="-282.9" y="105" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27787)" opacity=".1875"/><rect x="-290.6" y="75.87" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27789)" opacity=".1875"/><rect x="-290.3" y="99.75" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27791)" opacity=".1875"/><rect x="-258.8" y="80.19" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27793)" opacity=".4688"/><rect x="-243.1" y="73.92" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27795)" opacity=".4688"/><rect x="-234.6" y="101.2" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27797)" opacity=".4688"/><rect x="-247.1" y="78.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27799)" opacity=".1875"/><rect x="-300.6" y="109" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27801)" opacity=".1875"/><rect x="-280.3" y="56.03" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27803)" opacity=".1875"/><rect x="-224" y="78.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27805)" opacity=".4688"/><rect x="-250.6" y="59.41" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27807)" opacity=".4688"/><rect x="-282.7" y="61.63" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27809)" opacity=".4688"/><rect x="-306.9" y="111.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27811)" opacity=".1875"/><rect x="-240.8" y="83.26" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27813)" opacity=".1875"/><rect x="-262.8" y="57.62" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27815)" opacity=".1875"/><rect x="-232.8" y="77.15" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27817)" opacity=".4688"/><rect x="-247.3" y="68.48" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27819)" opacity=".4688"/><rect x="-238.4" y="61.91" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27821)" opacity=".4688"/><rect x="-232.7" y="86.28" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27823)" opacity=".1875"/><rect x="-250.6" y="89.97" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27825)" opacity=".1875"/><rect x="-242" y="103.9" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27827)" opacity=".1875"/><rect x="-275.9" y="105.5" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27829)" opacity=".4688"/><rect x="-236.5" y="73.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27831)" opacity=".4688"/><rect x="-291.2" y="64.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27833)" opacity=".4688"/><rect x="-274" y="64.86" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27835)" opacity=".1875"/><rect x="-233.4" y="73.94" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27837)" opacity=".1875"/><rect x="-269" y="73.14" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27839)" opacity=".1875"/><rect x="-219.3" y="80.14" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27841)" opacity=".4688"/><rect x="-277.1" y="94.54" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27843)" opacity=".4688"/><rect x="-300.6" y="94.47" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27845)" opacity=".4688"/><rect x="-265.1" y="68.01" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27847)" opacity=".1875"/><rect x="-262.1" y="57.15" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27849)" opacity=".1875"/><rect x="-292.2" y="94.14" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27851)" opacity=".1875"/><rect x="-266.2" y="110.4" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27853)" opacity=".4688"/><rect x="-250" y="80.81" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27855)" opacity=".4688"/><rect x="-267.6" y="76.41" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27857)" opacity=".4688"/><rect x="-305.9" y="58.02" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27859)" opacity=".1875"/><rect x="-249.5" y="97.53" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27861)" opacity=".1875"/><rect x="-298" y="79.38" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27863)" opacity=".1875"/><rect x="-297.2" y="83.74" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27865)" opacity=".4688"/><rect x="-258.8" y="87.09" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27867)" opacity=".4688"/><rect x="-260.1" y="87.32" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27869)" opacity=".4688"/><rect x="-289.2" y="111.1" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27871)" opacity=".1875"/><rect x="-259.5" y="94.98" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27873)" opacity=".1875"/><rect x="-259.6" y="79.85" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27875)" opacity=".1875"/><rect x="-286.6" y="67.81" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27877)" opacity=".4688"/><rect x="-260.3" y="104.2" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27879)" opacity=".4688"/><rect x="-283.5" y="93.08" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27881)" opacity=".4688"/><rect x="-217.4" y="58.82" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27883)" opacity=".1875"/><rect x="-237.9" y="100.9" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27885)" opacity=".1875"/><rect x="-242.7" y="63.37" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27887)" opacity=".1875"/><rect x="-226.9" y="76.76" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27889)" opacity=".4688"/><rect x="-233.4" y="98.91" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27891)" opacity=".4688"/><rect x="-299.9" y="67.81" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27893)" opacity=".4688"/><rect x="-265.1" y="80.21" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27895)" opacity=".1875"/><rect x="-260.7" y="107.6" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27897)" opacity=".1875"/><rect x="-236.3" y="88.17" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27899)" opacity=".1875"/><rect x="-251.9" y="84.05" width="10.63" height=".2811" rx="0" ry="0" fill="url(#linearGradient27901)" opacity=".4688"/><rect x="-255.8" y="80.1" width="19.37" height=".2811" rx="0" ry="0" fill="url(#linearGradient27903)" opacity=".4688"/><rect x="-276.3" y="88.05" width="19.37" height=".3322" rx="0" ry="0" fill="url(#linearGradient27905)" opacity=".4688"/></g><g><path d="m34.69 80.38c-1.177 0-2.125 0.9576-2.125 2.147v0.1894c0-1.189 0.9477-2.147 2.125-2.147h51.16c1.03 0 1.896 0.7564 2.094 1.737-0.1089-1.085-0.9904-1.926-2.094-1.926h-51.16zm5.281 30.72v0.1895c0 0.5249 0.4179 0.9472 0.9375 0.9472h14.12c0.5196 0 0.9375-0.4223 0.9375-0.9472v-0.1895c-1e-5 0.5249-0.418 0.9472-0.9375 0.9472h-14.12c-0.5196 0-0.9375-0.4223-0.9375-0.9472z" fill="#fff"/><path d="m34.69 80.28c-1.177 0-2.125 1.363-2.125 2.553v0.1894c0-1.189 0.9477-1.547 2.125-1.547h51.16c1.03 0 1.696 0.1564 1.894 1.137-0.1089-1.085-0.7904-2.23-1.894-2.23l-51.16-0.1015zm5.281 31.13v0.1894c0 0.5249 0.4179 0.9472 0.9375 0.9472h14.12c0.5196 0 0.9375-0.4223 0.9375-0.9472v-0.1894c-1e-5 0.5249-0.418 0.9472-0.9375 0.9472h-14.12c-0.5196 0-0.9375-0.4223-0.9375-0.9472z" fill="#fff"/><rect transform="scale(-1,1)" x="-87.87" y="81.92" width=".2529" height="38.26" rx="0" ry="0" fill="url(#linearGradient27979)"/></g><g transform="matrix(1.088 0 0 1.104 -2.17 -3.434)" opacity=".7852" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round"><rect transform="matrix(.6942 0 0 .6942 4.893 5.504)" x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" clip-path="url(#clipPath28045)" fill="none" filter="url(#filter28031)" opacity="1" stroke="#000"/><rect transform="matrix(.6942 0 0 .6942 4.893 5.504)" x="12" y="12" width="8" height="12" rx="1.079" ry="1.079" clip-path="url(#clipPath28041)" fill="url(#radialGradient28110)" filter="url(#filter28031)" opacity="1" stroke="url(#linearGradient28112)"/><rect x="13.9" y="18.03" width="4.35" height="3.676" rx=".4523" ry=".4523" fill="url(#radialGradient28114)" filter="url(#filter28101)" opacity="1" stroke="url(#linearGradient28116)" stroke-width=".3319"/></g><rect x="32.5" y="118.4" width="55.5" height="2.526" fill="url(#linearGradient28138)" opacity=".5469"/><path d="m11.38 8c-2.056 0.1072-3.375 1.705-3.375 4.312v0.5938c0-2.98 1.422-4.312 4.375-4.312 36.52-0.5738 76.29-0.2723 104.2 0 1.896 0 3.375 1.128 3.375 3.312v-0.5938c0-1.543-1.548-3.312-3.375-3.312h-104.2c-0.3692 0-0.7062-0.01531-1 0z" fill="#343434" fill-opacity=".8284"/><path transform="matrix(-1.389 0 0 1.389 175.7 -2.239)" d="m118 8.388 0.1105 1.105 1.458 1e-7c-0.09881-0.4722-0.1984-1.181-1.569-1.105z" fill="url(#radialGradient3084)" fill-rule="evenodd" filter="url(#filter3077)"/><path transform="matrix(1.283 0 0 1.283 -33.43 -2.365)" d="m117.1 8.688 0.1105 1.105h1.458c-0.09881-0.4722-0.1984-1.181-1.569-1.105z" fill="url(#radialGradient3039)" fill-rule="evenodd" filter="url(#filter3077)" opacity=".8614"/></svg>
diff --git a/share/icons/svg/edit-clear-locationbar-ltr.svg b/share/icons/svg/edit-clear-locationbar-ltr.svg
deleted file mode 100644
index 010d954ac..000000000
--- a/share/icons/svg/edit-clear-locationbar-ltr.svg
+++ /dev/null
@@ -1,391 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient3227">
- <stop
- id="stop3229"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3231"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3207">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48"
- offset="0"
- id="stop3209" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3211" />
- </linearGradient>
- <linearGradient
- id="linearGradient3195">
- <stop
- id="stop3197"
- offset="0"
- style="stop-color:#d3d3d3;stop-opacity:1;" />
- <stop
- id="stop3199"
- offset="1"
- style="stop-color:#d3d3d3;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3159">
- <stop
- id="stop3161"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3163"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2974">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient26907"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-12.0029"
- y2="-383.9971"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
- <stop
- offset="0"
- style="stop-color:#888a85;stop-opacity:1;"
- id="stop26909" />
- <stop
- offset="1"
- style="stop-color:#000000;stop-opacity:1;"
- id="stop26911" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,127.99347,0)"
- gradientUnits="userSpaceOnUse"
- y2="64"
- x2="72"
- y1="-16"
- x1="72"
- id="linearGradient2963"
- xlink:href="#linearGradient26907" />
- <radialGradient
- r="56"
- fy="114.95621"
- fx="79.339813"
- cy="114.95621"
- cx="79.339813"
- gradientTransform="matrix(-1,-3.8781302e-8,-2.0820407e-8,0.5714285,127.33328,38.310745)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2965"
- xlink:href="#linearGradient26907" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,252.99347,0)"
- gradientUnits="userSpaceOnUse"
- y2="88"
- x2="205"
- y1="-32"
- x1="181"
- id="linearGradient2980"
- xlink:href="#linearGradient2974" />
- <filter
- id="filter3550">
- <feGaussianBlur
- stdDeviation="1.23375"
- id="feGaussianBlur3552" />
- </filter>
- <linearGradient
- id="linearGradient3554">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3556" />
- <stop
- style="stop-color:#dfdfdf;stop-opacity:1"
- offset="1"
- id="stop3558" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,114.56528,2.3017641)"
- y2="103.40701"
- x2="68.9375"
- y1="38.90625"
- x1="68.9375"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3124"
- xlink:href="#linearGradient3554" />
- <radialGradient
- r="29.84375"
- fy="66.175667"
- fx="62.78125"
- cy="66.175667"
- cx="62.78125"
- gradientTransform="matrix(1.3513697,0,0,1.3513697,-8.6312401,-20.634014)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3133"
- xlink:href="#linearGradient3207" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,127.99347,0)"
- gradientUnits="userSpaceOnUse"
- y2="44"
- x2="72"
- y1="68"
- x1="80"
- id="linearGradient3165"
- xlink:href="#linearGradient3159" />
- <linearGradient
- y2="88"
- x2="205"
- y1="-8"
- x1="185.04645"
- gradientTransform="matrix(-1,0,0,1,253.03992,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3189"
- xlink:href="#linearGradient2974" />
- <linearGradient
- y2="31"
- x2="142.0327"
- y1="95"
- x1="270.03271"
- gradientTransform="matrix(-1,0,0,1,253.05565,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3191"
- xlink:href="#linearGradient2974" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="60"
- x2="72"
- y1="108"
- x1="72"
- id="linearGradient3201"
- xlink:href="#linearGradient3195" />
- <filter
- id="filter3221">
- <feGaussianBlur
- id="feGaussianBlur3223"
- stdDeviation="0.2125" />
- </filter>
- <linearGradient
- gradientTransform="translate(0,0.8)"
- gradientUnits="userSpaceOnUse"
- y2="-8"
- x2="88"
- y1="112"
- x1="88"
- id="linearGradient3233"
- xlink:href="#linearGradient3227" />
- <filter
- id="filter3243">
- <feGaussianBlur
- id="feGaussianBlur3245"
- stdDeviation="1.3800491" />
- </filter>
- <filter
- height="1.7275585"
- y="-0.36377926"
- width="1.8915753"
- x="-0.44578766"
- id="filter3383">
- <feGaussianBlur
- id="feGaussianBlur3385"
- stdDeviation="1.0041831" />
- </filter>
- <filter
- height="1.8118028"
- y="-0.4059014"
- width="1.9291719"
- x="-0.46458594"
- id="filter3387">
- <feGaussianBlur
- id="feGaussianBlur3389"
- stdDeviation="1.0041831" />
- </filter>
- <filter
- height="1.5508662"
- y="-0.27543309"
- width="1.6885827"
- x="-0.34429136"
- id="filter3391">
- <feGaussianBlur
- id="feGaussianBlur3393"
- stdDeviation="1.0041831" />
- </filter>
- <filter
- height="1.535564"
- y="-0.26778201"
- width="1.6765023"
- x="-0.33825116"
- id="filter3395">
- <feGaussianBlur
- id="feGaussianBlur3397"
- stdDeviation="1.0041831" />
- </filter>
- <clipPath
- id="clipPath3405"
- clipPathUnits="userSpaceOnUse">
- <path
- style="fill:url(#linearGradient3409);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 142.8125,65.03125 C 141.97272,65.789734 141.49347,66.868398 141.49347,68 C 141.49347,69.131602 141.97272,70.210266 142.8125,70.96875 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 185.5,28 z"
- id="path3407" />
- </clipPath>
- <linearGradient
- y2="64"
- x2="72"
- y1="-16"
- x1="72"
- gradientTransform="translate(129.5,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3409"
- xlink:href="#linearGradient26907" />
- <radialGradient
- r="3.5625"
- fy="31.163853"
- fx="185.8528"
- cy="31.163853"
- cx="185.8528"
- gradientTransform="matrix(0.9135171,-0.4068004,1,2.2456148,-16.006057,35.372984)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3411"
- xlink:href="#linearGradient3159" />
- <radialGradient
- r="3.5"
- fy="31.512632"
- fx="241.76289"
- cy="31.512632"
- cx="241.76289"
- gradientTransform="matrix(0.8076259,0.5896951,-1.6428571,2.25,99.016782,-182.84482)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3413"
- xlink:href="#linearGradient3159" />
- <radialGradient
- r="2.59375"
- fy="105.53125"
- fx="243.40625"
- cy="105.53125"
- cx="243.40625"
- gradientTransform="matrix(0.7165883,-0.6974964,1.9764912,2.0305916,-139.5974,61.015368)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3415"
- xlink:href="#linearGradient3195" />
- <radialGradient
- r="2.703125"
- fy="105.38967"
- fx="184.82086"
- cy="105.38967"
- cx="184.82086"
- gradientTransform="matrix(0.7757118,0.6310874,-3.3294798,4.0924865,391.47818,-441.38143)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3417"
- xlink:href="#linearGradient3195" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- transform="matrix(-1,0,0,1,127.99347,0)"
- style="fill:url(#linearGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3243)"
- d="M 56,28.8 C 55.00724,28.798369 54.049339,29.165936 53.3125,29.83125 L 13.3125,65.83125 C 12.472723,66.589734 11.993466,67.668398 11.993466,68.8 C 11.993466,69.931602 12.472723,71.010266 13.3125,71.76875 L 53.3125,107.76875 C 54.049339,108.43406 55.00724,108.80163 56,108.8 L 112,108.8 C 114.20905,108.79978 115.99978,107.00905 116,104.8 L 116,32.8 C 115.99978,30.590952 114.20905,28.800221 112,28.8 L 56,28.8 z "
- id="path3225" />
- <path
- id="path2941"
- d="M 71.993466,28 C 72.986226,27.998369 73.944127,28.365936 74.680966,29.03125 L 114.68097,65.03125 C 115.52074,65.789734 116,66.868398 116,68 C 116,69.131602 115.52074,70.210266 114.68097,70.96875 L 74.680966,106.96875 C 73.944127,107.63406 72.986226,108.00163 71.993466,108 L 15.993466,108 C 13.784416,107.99978 11.993686,106.20905 11.993466,104 L 11.993466,32 C 11.993686,29.790952 13.784416,28.000221 15.993466,28 L 71.993466,28 z "
- style="fill:url(#linearGradient2963);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <g
- style="stroke:none"
- transform="matrix(-1,0,0,1,257.49347,0)"
- clip-path="url(#clipPath3405)"
- id="g3399">
- <path
- style="fill:url(#radialGradient3411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3395)"
- d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 181.875,29.875 L 188,36 L 188,28 L 185.5,28 z "
- id="path3251" />
- <path
- style="fill:url(#radialGradient3413);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3391)"
- d="M 240,28 L 239.5,35.75 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 240,28 z "
- id="path3253" />
- <path
- style="fill:url(#radialGradient3415);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3387)"
- d="M 241.3125,103.0625 L 241.375,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,103.09375 L 241.3125,103.0625 z "
- id="path3255" />
- <path
- style="fill:url(#radialGradient3417);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3383)"
- d="M 186.15625,102.375 L 181.75,106 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 185.53125,108 L 186.15625,102.375 z "
- id="path3257" />
- </g>
- <path
- id="rect1969"
- d="M 71.993466,32 L 111.99347,68 L 71.993466,104 L 15.993466,104 L 15.993466,32 L 71.993466,32 z "
- style="fill:url(#radialGradient2965);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- id="path2967"
- d="M 71.993466,32 L 111.99347,68 L 107.08722,72.40625 C 99.926016,72.9539 92.539626,73.25 84.993466,73.25 C 59.303776,73.25 35.520926,69.930267 15.993466,64.28125 L 15.993466,32 L 71.993466,32 z "
- style="fill:url(#linearGradient2980);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- transform="matrix(-1,0,0,1,127.99347,0)"
- style="fill:none;fill-opacity:1;stroke:url(#radialGradient3133);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3550)"
- d="M 59.17819,37.864264 L 47.36569,49.645514 L 64.42819,66.708014 L 47.36569,83.739264 L 59.17819,95.551764 L 76.20944,78.489264 L 93.27194,95.551764 L 105.05319,83.739264 L 88.02194,66.708014 L 105.05319,49.645514 L 93.27194,37.864264 L 76.20944,54.895514 L 59.17819,37.864264 z "
- id="path3528" />
- <path
- id="rect3376"
- d="M 68.815276,37.864264 L 80.627776,49.645514 L 63.565276,66.708014 L 80.627776,83.739264 L 68.815276,95.551764 L 51.784026,78.489264 L 34.721526,95.551764 L 22.940276,83.739264 L 39.971526,66.708014 L 22.940276,49.645514 L 34.721526,37.864264 L 51.784026,54.895514 L 68.815276,37.864264 z "
- style="fill:url(#linearGradient3124);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3152"
- d="M 68.805966,37.875 L 80.618466,49.65625 L 63.555966,66.71875 L 69.712216,72.84375 C 58.400522,72.251707 47.563106,71.012655 37.462216,69.21875 L 39.962216,66.71875 L 22.930966,49.65625 L 34.712216,37.875 L 51.774716,54.90625 L 68.805966,37.875 z "
- style="fill:url(#linearGradient3165);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3169"
- d="M 72.040986,32 L 112.04099,68 L 72.040986,33 L 16.040986,33 L 16.040986,32 L 72.040986,32 z "
- style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- id="path3177"
- d="M 16.960436,63.28125 C 36.487899,68.930267 60.270749,72.25 85.960439,72.25 C 93.506599,72.25 100.89299,71.9539 108.05419,71.40625 L 111.96044,67.90625 L 112.05419,68 L 107.14794,72.40625 C 99.986739,72.9539 92.600349,73.25 85.054189,73.25 C 59.364499,73.25 35.581649,69.930267 16.054186,64.28125 L 16.054186,32 L 16.960436,63.28125 z "
- style="fill:url(#linearGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- transform="matrix(-1,0,0,1,127.99347,0)"
- style="opacity:0.60399996;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3201);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3221)"
- d="M 56,32 L 16,68 L 56,104 L 112,104 L 112,32 L 56,32 z "
- id="path3193" />
- </g>
-</svg>
diff --git a/share/icons/svg/edit-clear-locationbar-rtl.svg b/share/icons/svg/edit-clear-locationbar-rtl.svg
deleted file mode 100644
index d656a0b0d..000000000
--- a/share/icons/svg/edit-clear-locationbar-rtl.svg
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient3227">
- <stop
- id="stop3229"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3231"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3207">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48"
- offset="0"
- id="stop3209" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3211" />
- </linearGradient>
- <linearGradient
- id="linearGradient3195">
- <stop
- id="stop3197"
- offset="0"
- style="stop-color:#d3d3d3;stop-opacity:1;" />
- <stop
- id="stop3199"
- offset="1"
- style="stop-color:#d3d3d3;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3159">
- <stop
- id="stop3161"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3163"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2974">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient26907"
- gradientUnits="userSpaceOnUse"
- x1="-84.002403"
- y1="-383.9971"
- x2="-12.0029"
- y2="-383.9971"
- gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
- <stop
- offset="0"
- style="stop-color:#888a85;stop-opacity:1;"
- id="stop26909" />
- <stop
- offset="1"
- style="stop-color:#000000;stop-opacity:1;"
- id="stop26911" />
- </linearGradient>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="64"
- x2="72"
- y1="-16"
- x1="72"
- id="linearGradient2963"
- xlink:href="#linearGradient26907" />
- <radialGradient
- r="56"
- fy="114.95621"
- fx="79.339813"
- cy="114.95621"
- cx="79.339813"
- gradientTransform="matrix(1,-3.8781302e-8,2.0820407e-8,0.5714285,0.6601855,38.310745)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2965"
- xlink:href="#linearGradient26907" />
- <linearGradient
- gradientTransform="translate(-125,0)"
- gradientUnits="userSpaceOnUse"
- y2="88"
- x2="205"
- y1="-32"
- x1="181"
- id="linearGradient2980"
- xlink:href="#linearGradient2974" />
- <filter
- id="filter3550">
- <feGaussianBlur
- stdDeviation="1.23375"
- id="feGaussianBlur3552" />
- </filter>
- <linearGradient
- id="linearGradient3554">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3556" />
- <stop
- style="stop-color:#dfdfdf;stop-opacity:1"
- offset="1"
- id="stop3558" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(13.42819,2.3017641)"
- y2="103.40701"
- x2="68.9375"
- y1="38.90625"
- x1="68.9375"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3124"
- xlink:href="#linearGradient3554" />
- <radialGradient
- r="29.84375"
- fy="66.175667"
- fx="62.78125"
- cy="66.175667"
- cx="62.78125"
- gradientTransform="matrix(1.3513697,0,0,1.3513697,-8.6312401,-20.634014)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3133"
- xlink:href="#linearGradient3207" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="44"
- x2="72"
- y1="68"
- x1="80"
- id="linearGradient3165"
- xlink:href="#linearGradient3159" />
- <linearGradient
- y2="88"
- x2="205"
- y1="-8"
- x1="185.04645"
- gradientTransform="translate(-125.04645,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3189"
- xlink:href="#linearGradient2974" />
- <linearGradient
- y2="31"
- x2="142.0327"
- y1="95"
- x1="270.03271"
- gradientTransform="translate(-125.06218,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3191"
- xlink:href="#linearGradient2974" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="60"
- x2="72"
- y1="108"
- x1="72"
- id="linearGradient3201"
- xlink:href="#linearGradient3195" />
- <filter
- id="filter3221">
- <feGaussianBlur
- id="feGaussianBlur3223"
- stdDeviation="0.2125" />
- </filter>
- <linearGradient
- gradientTransform="translate(0,0.8)"
- gradientUnits="userSpaceOnUse"
- y2="-8"
- x2="88"
- y1="112"
- x1="88"
- id="linearGradient3233"
- xlink:href="#linearGradient3227" />
- <filter
- id="filter3243">
- <feGaussianBlur
- id="feGaussianBlur3245"
- stdDeviation="1.3800491" />
- </filter>
- <filter
- height="1.7275585"
- y="-0.36377926"
- width="1.8915753"
- x="-0.44578766"
- id="filter3383">
- <feGaussianBlur
- id="feGaussianBlur3385"
- stdDeviation="1.0041831" />
- </filter>
- <filter
- height="1.8118028"
- y="-0.4059014"
- width="1.9291719"
- x="-0.46458594"
- id="filter3387">
- <feGaussianBlur
- id="feGaussianBlur3389"
- stdDeviation="1.0041831" />
- </filter>
- <filter
- height="1.5508662"
- y="-0.27543309"
- width="1.6885827"
- x="-0.34429136"
- id="filter3391">
- <feGaussianBlur
- id="feGaussianBlur3393"
- stdDeviation="1.0041831" />
- </filter>
- <filter
- height="1.535564"
- y="-0.26778201"
- width="1.6765023"
- x="-0.33825116"
- id="filter3395">
- <feGaussianBlur
- id="feGaussianBlur3397"
- stdDeviation="1.0041831" />
- </filter>
- <clipPath
- id="clipPath3405"
- clipPathUnits="userSpaceOnUse">
- <path
- style="fill:url(#linearGradient3409);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 142.8125,65.03125 C 141.97272,65.789734 141.49347,66.868398 141.49347,68 C 141.49347,69.131602 141.97272,70.210266 142.8125,70.96875 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 185.5,28 z"
- id="path3407" />
- </clipPath>
- <linearGradient
- y2="64"
- x2="72"
- y1="-16"
- x1="72"
- gradientTransform="translate(129.5,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3409"
- xlink:href="#linearGradient26907" />
- <radialGradient
- r="3.5625"
- fy="31.163853"
- fx="185.8528"
- cy="31.163853"
- cx="185.8528"
- gradientTransform="matrix(0.9135171,-0.4068004,1,2.2456148,-16.006057,35.372984)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3411"
- xlink:href="#linearGradient3159" />
- <radialGradient
- r="3.5"
- fy="31.512632"
- fx="241.76289"
- cy="31.512632"
- cx="241.76289"
- gradientTransform="matrix(0.8076259,0.5896951,-1.6428571,2.25,99.016782,-182.84482)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3413"
- xlink:href="#linearGradient3159" />
- <radialGradient
- r="2.59375"
- fy="105.53125"
- fx="243.40625"
- cy="105.53125"
- cx="243.40625"
- gradientTransform="matrix(0.7165883,-0.6974964,1.9764912,2.0305916,-139.5974,61.015368)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3415"
- xlink:href="#linearGradient3195" />
- <radialGradient
- r="2.703125"
- fy="105.38967"
- fx="184.82086"
- cy="105.38967"
- cx="184.82086"
- gradientTransform="matrix(0.7757118,0.6310874,-3.3294798,4.0924865,391.47818,-441.38143)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3417"
- xlink:href="#linearGradient3195" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- style="fill:url(#linearGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3243)"
- d="M 56,28.8 C 55.00724,28.798369 54.049339,29.165936 53.3125,29.83125 L 13.3125,65.83125 C 12.472723,66.589734 11.993466,67.668398 11.993466,68.8 C 11.993466,69.931602 12.472723,71.010266 13.3125,71.76875 L 53.3125,107.76875 C 54.049339,108.43406 55.00724,108.80163 56,108.8 L 112,108.8 C 114.20905,108.79978 115.99978,107.00905 116,104.8 L 116,32.8 C 115.99978,30.590952 114.20905,28.800221 112,28.8 L 56,28.8 z"
- id="path3225" />
- <path
- id="path2941"
- d="M 56,28 C 55.00724,27.998369 54.049339,28.365936 53.3125,29.03125 L 13.3125,65.03125 C 12.472723,65.789734 11.993466,66.868398 11.993466,68 C 11.993466,69.131602 12.472723,70.210266 13.3125,70.96875 L 53.3125,106.96875 C 54.049339,107.63406 55.00724,108.00163 56,108 L 112,108 C 114.20905,107.99978 115.99978,106.20905 116,104 L 116,32 C 115.99978,29.790952 114.20905,28.000221 112,28 L 56,28 z"
- style="fill:url(#linearGradient2963);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <g
- style="stroke:none"
- transform="translate(-129.5,0)"
- clip-path="url(#clipPath3405)"
- id="g3399">
- <path
- style="fill:url(#radialGradient3411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3395)"
- d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 181.875,29.875 L 188,36 L 188,28 L 185.5,28 z"
- id="path3251" />
- <path
- style="fill:url(#radialGradient3413);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3391)"
- d="M 240,28 L 239.5,35.75 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 240,28 z"
- id="path3253" />
- <path
- style="fill:url(#radialGradient3415);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3387)"
- d="M 241.3125,103.0625 L 241.375,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,103.09375 L 241.3125,103.0625 z"
- id="path3255" />
- <path
- style="fill:url(#radialGradient3417);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3383)"
- d="M 186.15625,102.375 L 181.75,106 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 185.53125,108 L 186.15625,102.375 z"
- id="path3257" />
- </g>
- <path
- id="rect1969"
- d="M 56,32 L 16,68 L 56,104 L 112,104 L 112,32 L 56,32 z"
- style="fill:url(#radialGradient2965);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- id="path2967"
- d="M 56,32 L 16,68 L 20.90625,72.40625 C 28.06745,72.9539 35.45384,73.25 43,73.25 C 68.68969,73.25 92.47254,69.930267 112,64.28125 L 112,32 L 56,32 z"
- style="fill:url(#linearGradient2980);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="fill:none;fill-opacity:1;stroke:url(#radialGradient3133);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3550)"
- d="M 59.17819,37.864264 L 47.36569,49.645514 L 64.42819,66.708014 L 47.36569,83.739264 L 59.17819,95.551764 L 76.20944,78.489264 L 93.27194,95.551764 L 105.05319,83.739264 L 88.02194,66.708014 L 105.05319,49.645514 L 93.27194,37.864264 L 76.20944,54.895514 L 59.17819,37.864264 z"
- id="path3528" />
- <path
- id="rect3376"
- d="M 59.17819,37.864264 L 47.36569,49.645514 L 64.42819,66.708014 L 47.36569,83.739264 L 59.17819,95.551764 L 76.20944,78.489264 L 93.27194,95.551764 L 105.05319,83.739264 L 88.02194,66.708014 L 105.05319,49.645514 L 93.27194,37.864264 L 76.20944,54.895514 L 59.17819,37.864264 z"
- style="fill:url(#linearGradient3124);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3152"
- d="M 59.1875 37.875 L 47.375 49.65625 L 64.4375 66.71875 L 58.28125 72.84375 C 69.592944 72.251707 80.43036 71.012655 90.53125 69.21875 L 88.03125 66.71875 L 105.0625 49.65625 L 93.28125 37.875 L 76.21875 54.90625 L 59.1875 37.875 z "
- style="fill:url(#linearGradient3165);fill-opacity:1;stroke:none;stroke-width:0.88499998999999985;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3169"
- d="M 55.95248,32 L 15.95248,68 L 55.95248,33 L 111.95248,33 L 111.95248,32 L 55.95248,32 z"
- style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- id="path3177"
- d="M 111.03303,63.28125 C 91.505567,68.930267 67.722717,72.25 42.033027,72.25 C 34.486867,72.25 27.100477,71.9539 19.939277,71.40625 L 16.033027,67.90625 L 15.939277,68 L 20.845527,72.40625 C 28.006727,72.9539 35.393117,73.25 42.939277,73.25 C 68.628967,73.25 92.411817,69.930267 111.93928,64.28125 L 111.93928,32 L 111.03303,63.28125 z"
- style="fill:url(#linearGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3201);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3221);opacity:0.604"
- d="M 56,32 L 16,68 L 56,104 L 112,104 L 112,32 L 56,32 z"
- id="path3193" />
- </g>
-</svg>
diff --git a/share/icons/svg/internet-web-browser.svg b/share/icons/svg/internet-web-browser.svg
deleted file mode 100644
index 0d00ac6dc..000000000
--- a/share/icons/svg/internet-web-browser.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" enable-background="new 0 0 116 116" overflow="visible" version="1.0" viewBox="0 0 116 116" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient6454"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter6610"><feGaussianBlur stdDeviation="0.82949054"/></filter><filter id="filter3860" x="-.04981" y="-.2989" width="1.1" height="1.598"><feGaussianBlur stdDeviation="2.6055845"/></filter><filter id="filter3793" x="-.0435" y="-.1137" width="1.087" height="1.227"><feGaussianBlur stdDeviation="2.881027"/></filter><linearGradient id="linearGradient3142"><stop stop-color="#3cc1ee" offset="0"/><stop stop-color="#141b7c" offset="1"/></linearGradient><radialGradient id="XMLID_2_" cx="299.4" cy="-290.6" r="17.15" fx="297.4" fy="-289.9" gradientTransform="matrix(.8232 .2312 .2703 -.9626 -96.23 -315.3)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#91d3ff" stop-opacity="0" offset="1"/></radialGradient><linearGradient id="linearGradient6614"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient5011" x1="-20.86" x2="-754.4" y1="501.3" y2="361.1" gradientTransform="matrix(.114 0 0 .114 154.5 8.037)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_2_"/><linearGradient id="linearGradient5014" x1="-1086" x2="-474.7" y1="539.4" y2="375.6" gradientTransform="matrix(.114 0 0 .114 154.5 8.037)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_2_"/><linearGradient id="linearGradient5319" x1="2.286" x2="556.7" y1="278.9" y2="278.9" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6614"/><linearGradient id="linearGradient5857" x1="-933.6" x2="-806.7" y1="543.9" y2="70.05" gradientTransform="translate(939.5 -233.4)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient5859" x1="-1101" x2="-1101" y1="458" y2="379.9" gradientUnits="userSpaceOnUse"><stop stop-color="#4fd6ff" offset="0"/><stop stop-color="#4fd6ff" stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient5863" cx="99.16" cy="186.2" r="62.77" gradientTransform="matrix(1 0 0 .1667 0 155.1)" gradientUnits="userSpaceOnUse"><stop stop-color="#113a68" offset="0"/><stop stop-color="#1e63b1" stop-opacity=".498" offset=".5"/><stop stop-color="#1e63b1" stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient5865" cx="138.8" cy="147.8" r="92.35" fx="135.3" fy="217.5" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3142"/><linearGradient id="linearGradient6460" x1="97.53" x2="37.59" y1="51.7" y2="11.57" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6454"/><linearGradient id="linearGradient6500" x1="108.7" x2="-5.198" y1="-9.811" y2="6.688" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6454"/><linearGradient id="linearGradient6504" x1="119.6" x2="-6.849" y1="1.565" y2="8.759" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6454"/><filter id="filter6740" x="-.1053" y="-.04957" width="1.211" height="1.099"><feGaussianBlur stdDeviation="0.20714785"/></filter><linearGradient id="linearGradient6780" x1="100.9" x2="96.16" y1="45.8" y2="59.07" gradientTransform="translate(.9062 -1.812)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter4037"><feGaussianBlur stdDeviation="0.4732792"/></filter><linearGradient id="linearGradient4057" x1="22.2" x2="51.63" y1="-3.091" y2="35.57" gradientTransform="matrix(.6146 0 0 .6122 16.78 20.99)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3748"><feGaussianBlur stdDeviation="0.73328974"/></filter><filter id="filter3226"><feGaussianBlur stdDeviation="0.16853735"/></filter><filter id="filter3222"><feGaussianBlur stdDeviation="0.16853735"/></filter><filter id="filter3218"><feGaussianBlur stdDeviation="0.16853735"/></filter><filter id="filter3202"><feGaussianBlur stdDeviation="1.056"/></filter><linearGradient id="linearGradient3194" x1="179.1" x2="179.1" y1="59.99" y2="112" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6454"/><clipPath id="clipPath3190"><rect x="140" y="16" width="112" height="96" rx="3.978" ry="3.978" fill="none" stroke="url(#linearGradient3194)" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6"/></clipPath><radialGradient id="radialGradient3146" cx="113.6" cy="22.77" r="3.382" fx="112.4" fy="21.11" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3142"/><filter id="filter3122"><feGaussianBlur stdDeviation="1.6245487"/></filter><linearGradient id="linearGradient4073" x1="20" x2="20" y1="56" y2="-.1427" gradientTransform="matrix(.971 0 0 .9816 -4.143 -8.456)" gradientUnits="userSpaceOnUse"><stop stop-color="#bababa" offset="0"/><stop stop-color="#e7e7e7" offset="1"/></linearGradient></defs><g>
-
-<rect transform="matrix(.971 0 0 .9816 .5482 1.386)" x="3.169" y="5.974" width="112" height="96" rx="4.097" ry="4.053" filter="url(#filter3122)" opacity=".3755"/><rect x="3.625" y="7.25" width="108.8" height="94.24" rx="3.978" ry="3.978" fill="url(#linearGradient4073)"/><rect x="7.509" y="46.52" width="101" height="51.05" rx="0" ry="0" fill="#fff"/><rect x="7.509" y="22.96" width="101" height="35.06" rx="0" ry="0" fill="#fff"/></g><g fill="url(#radialGradient3146)"><path transform="matrix(1.149 0 0 1.161 -29.73 -11.34)" d="m117 22.77a3.382 3.382 0 1 1-6.763 0 3.382 3.382 0 1 1 6.763 0z" filter="url(#filter3226)"/><path transform="matrix(1.149 0 0 1.161 -41.38 -11.34)" d="m117 22.77a3.382 3.382 0 1 1-6.763 0 3.382 3.382 0 1 1 6.763 0z" filter="url(#filter3222)" opacity=".4387"/><path transform="matrix(1.149 0 0 1.161 -52.91 -11.34)" d="m117 22.77a3.382 3.382 0 1 1-6.763 0 3.382 3.382 0 1 1 6.763 0z" filter="url(#filter3218)" opacity=".4387"/></g><rect transform="matrix(.971 0 0 .9816 -132.3 -8.456)" x="140" y="16" width="112" height="96" rx="4.097" ry="4.053" clip-path="url(#clipPath3190)" fill="none" filter="url(#filter3202)" stroke="url(#linearGradient3194)" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.639"/><path transform="matrix(.6908 0 0 .6908 14.7 15.05)" d="m110.1 58.71a48.95 48.95 0 1 1-97.89 0 48.95 48.95 0 1 1 97.89 0z" fill="#11196b" filter="url(#filter3748)"/><path transform="matrix(.3642 0 0 .3642 6.448 1.566)" d="m231.2 147.8a92.35 92.35 0 1 1-184.7 0 92.35 92.35 0 1 1 184.7 0z" fill="url(#radialGradient5865)"/><g id="Background_Grid" transform="matrix(.1207 0 0 .1207 23.09 21.67)" filter="url(#filter6610)" opacity=".1273" stroke="#fff" stroke-opacity=".5185" stroke-width="1.534"><g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".5185"><g stroke-width="1.032"><polyline points="22.07 306.3 22.64 308.2 23.24 310.2 23.84 312.2 24.47 314.1 25.11 316.1 25.77 318 26.44 320 27.13 321.9 27.84 323.9 28.57 325.8 29.31 327.7 30.07 329.7 30.85 331.6 31.64 333.5 32.45 335.5 33.28 337.4 34.12 339.3 34.98 341.2 35.86 343.1 36.75 345 37.66 346.9 38.58 348.8 39.52 350.7 40.48 352.6 41.45 354.5 42.44 356.3 43.44 358.2 44.46 360.1 45.5 361.9 46.55 363.8 47.62 365.6 48.7 367.5"/><polyline points="146.3 468 148.1 469.2 150 470.4 152 471.6 153.9 472.8 155.8 474 157.7 475.1 159.7 476.3 161.6 477.4 163.6 478.5 165.6 479.6 167.5 480.7 169.5 481.8 171.5 482.9 173.5 483.9 175.5 485 177.5 486 179.5 487 181.6 488 183.6 489 185.6 490 187.7 490.9 189.7 491.9 191.8 492.8 193.8 493.7 195.9 494.6 198 495.5 200.1 496.3 202.1 497.2 204.2 498 206.3 498.9 208.4 499.7 210.5 500.5"/><polyline points="91.05 422.6 92.6 424.2 94.16 425.8 95.73 427.4 97.32 428.9 98.92 430.4 100.5 432 102.1 433.5 103.8 435 105.4 436.5 107.1 438 108.8 439.5 110.4 441 112.1 442.4 113.8 443.9 115.5 445.3 117.3 446.7 119 448.2 120.7 449.6 122.5 451 124.3 452.3 126 453.7 127.8 455.1 129.6 456.4 131.4 457.7 133.3 459.1 135.1 460.4 136.9 461.7 138.8 463 140.6 464.2 142.5 465.5 144.4 466.8 146.3 468"/><polyline points="12.99 243.2 13 245.2 13.03 247.1 13.07 249.1 13.13 251.1 13.21 253 13.31 255 13.43 257 13.56 258.9 13.71 260.9 13.88 262.9 14.07 264.9 14.27 266.8 14.5 268.8 14.74 270.8 15 272.7 15.27 274.7 15.56 276.7 15.88 278.7 16.2 280.6 16.55 282.6 16.92 284.6 17.3 286.6 17.7 288.6 18.11 290.5 18.55 292.5 19 294.5 19.47 296.4 19.95 298.4 20.46 300.4 20.98 302.4 21.52 304.3 22.07 306.3"/><polyline points="35.86 149.5 34.98 151.2 34.12 152.8 33.28 154.5 32.45 156.2 31.64 157.9 30.85 159.6 30.07 161.4 29.31 163.1 28.57 164.8 27.84 166.6 27.13 168.3 26.44 170.1 25.77 171.9 25.11 173.6 24.47 175.4 23.84 177.2 23.23 179 22.64 180.8 22.07 182.6"/><polyline points="22.07 182.6 21.52 184.4 20.98 186.3 20.46 188.1 19.95 189.9 19.47 191.8 19 193.6 18.55 195.5 18.11 197.3 17.7 199.2 17.3 201 16.92 202.9 16.55 204.8 16.2 206.7 15.88 208.6 15.56 210.5 15.27 212.4 15 214.3 14.74 216.2 14.5 218.1 14.27 220 14.07 221.9 13.88 223.8 13.71 225.8 13.56 227.7 13.43 229.6 13.31 231.6 13.21 233.5 13.13 235.4 13.07 237.4 13.03 239.3 13 241.3 12.99 243.2"/><polyline points="48.7 367.5 49.8 369.3 50.91 371.1 52.04 373 53.18 374.8 54.34 376.6 55.52 378.4 56.7 380.2 57.91 382 59.13 383.8 60.36 385.5 61.61 387.3 62.87 389.1 64.15 390.8 65.44 392.6 66.75 394.3 68.07 396.1 69.4 397.8 70.75 399.5 72.11 401.2 73.49 402.9 74.88 404.6 76.28 406.3 77.7 408 79.13 409.6 80.58 411.3 82.03 412.9 83.5 414.6 84.99 416.2 86.48 417.8 87.99 419.4 89.52 421 91.05 422.6"/><polyline points="277.3 517.5 275.1 517.2 273 516.9 270.8 516.6 268.6 516.2 266.4 515.8 264.3 515.4 262.1 515 259.9 514.6 257.7 514.1 255.6 513.7 253.4 513.2 251.2 512.7 249 512.2 246.9 511.7 244.7 511.1 242.6 510.6 240.4 510 238.2 509.4 236.1 508.8 233.9 508.2 231.8 507.6 229.7 507 227.5 506.3 225.4 505.6 223.2 504.9 221.1 504.2 219 503.5 216.9 502.8 214.8 502 212.6 501.2 210.5 500.5"/><polyline points="208.1 509.7 205.9 509.2 203.7 508.7 201.6 508.1 199.4 507.6 197.3 507 195.1 506.4 193 505.8 190.8 505.2 188.7 504.5 186.6 503.9 184.4 503.2 182.3 502.5 180.2 501.8 178.1 501.1 176 500.4 173.9 499.7 171.8 498.9 169.8 498.1 167.7 497.4 165.6 496.6 163.6 495.7 161.5 494.9 159.5 494.1 157.5 493.2 155.5 492.3 153.4 491.5 151.4 490.6 149.4 489.6 147.5 488.7 145.5 487.8 143.5 486.8 141.6 485.8"/><polyline points="84.4 447.9 86.01 449.2 87.62 450.6 89.25 452 90.89 453.3 92.55 454.6 94.21 456 95.89 457.3 97.58 458.6 99.29 459.8 101 461.1 102.7 462.4 104.5 463.6 106.2 464.9 108 466.1 109.8 467.3 111.5 468.5 113.3 469.7 115.1 470.8 117 472 118.8 473.1 120.6 474.3 122.5 475.4 124.3 476.5 126.2 477.6 128.1 478.7 130 479.7 131.9 480.8 133.8 481.8 135.7 482.8 137.7 483.9 139.6 484.9 141.6 485.8"/><polyline points="40.56 398.4 41.69 400.1 42.84 401.8 44.02 403.4 45.2 405.1 46.4 406.8 47.61 408.4 48.84 410 50.09 411.7 51.35 413.3 52.63 414.9 53.92 416.5 55.23 418.1 56.55 419.7 57.89 421.3 59.24 422.8 60.61 424.4 61.99 425.9 63.38 427.5 64.8 429 66.22 430.5 67.66 432 69.11 433.5 70.58 435 72.06 436.5 73.56 437.9 75.06 439.4 76.59 440.8 78.12 442.3 79.68 443.7 81.24 445.1 82.82 446.5 84.4 447.9"/><polyline points="3.598 280.9 3.625 282.8 3.672 284.8 3.737 286.8 3.82 288.7 3.922 290.7 4.042 292.6 4.18 294.6 4.337 296.5 4.512 298.5 4.707 300.4 4.917 302.4 5.148 304.3 5.397 306.2 5.665 308.2 5.95 310.1 6.253 312.1 6.576 314 6.916 315.9 7.274 317.9 7.651 319.8 8.046 321.7 8.459 323.6 8.89 325.5 9.341 327.5 9.807 329.4 10.29 331.3 10.8 333.2 11.32 335.1 11.86 337 12.42 338.9 12.99 340.8"/><polyline points="12.99 340.8 13.58 342.7 14.2 344.5 14.82 346.4 15.47 348.3 16.14 350.2 16.82 352 17.52 353.9 18.23 355.7 18.97 357.6 19.72 359.4 20.49 361.3 21.27 363.1 22.08 364.9 22.9 366.7 23.74 368.6 24.59 370.4 25.47 372.2 26.35 374 27.26 375.8 28.18 377.5 29.12 379.3 30.08 381.1 31.06 382.9 32.04 384.6 33.05 386.4 34.07 388.1 35.11 389.8 36.17 391.6 37.24 393.3 38.33 395 39.44 396.7 40.56 398.4"/><polyline points="277.3 517.8 275 517.8 272.7 517.8 270.5 517.7 268.2 517.6 266 517.6 263.7 517.5 261.5 517.3 259.2 517.2 257 517 254.7 516.9 252.5 516.7 250.2 516.5 248 516.3 245.7 516.1 243.5 515.8 241.3 515.5 239 515.3 236.8 515 234.6 514.7 232.3 514.3 230.1 514 227.9 513.6 225.7 513.3 223.5 512.9 221.3 512.5 219.1 512 216.9 511.6 214.7 511.2 212.5 510.7 210.3 510.2 208.1 509.7"/><polyline points="48.7 429.3 49.8 430.9 50.91 432.4 52.04 433.9 53.18 435.4 54.34 436.9 55.52 438.4 56.71 439.9 57.91 441.4 59.13 442.8 60.36 444.3 61.61 445.7 62.88 447.1 64.15 448.5 65.44 449.9 66.75 451.3 68.07 452.7 69.4 454.1 70.75 455.4 72.11 456.8 73.49 458.1 74.88 459.4 76.28 460.7 77.7 462 79.13 463.3 80.58 464.6 82.03 465.8 83.5 467.1 84.99 468.3 86.49 469.5 88 470.7 89.52 471.9 91.05 473.1"/><polyline points="146.3 503.7 144.4 503 142.5 502.2 140.6 501.5 138.8 500.7 136.9 499.9 135.1 499.1 133.3 498.3 131.4 497.4 129.6 496.6 127.8 495.7 126 494.8 124.3 493.9 122.5 493 120.7 492.1 119 491.2 117.3 490.2 115.5 489.2 113.8 488.3 112.1 487.3 110.4 486.3 108.8 485.2 107.1 484.2 105.4 483.2 103.8 482.1 102.2 481 100.5 479.9 98.92 478.8 97.32 477.7 95.74 476.6 94.16 475.4 92.6 474.3 91.05 473.1"/><polyline points="210.5 518.9 208.4 518.7 206.3 518.5 204.2 518.2 202.1 517.9 200.1 517.6 198 517.3 195.9 517 193.8 516.6 191.8 516.3 189.7 515.9 187.7 515.5 185.6 515.1 183.6 514.7 181.6 514.2 179.5 513.8 177.5 513.3 175.5 512.8 173.5 512.3 171.5 511.8 169.5 511.3 167.5 510.7 165.6 510.2 163.6 509.6 161.6 509 159.7 508.4 157.7 507.8 155.8 507.1 153.9 506.5 152 505.8 150 505.1 148.1 504.4 146.3 503.7"/><polyline points="36.75 410.1 37.66 411.7 38.58 413.4 39.52 415 40.48 416.6 41.45 418.2 42.44 419.9 43.44 421.5 44.46 423 45.5 424.6 46.55 426.2 47.62 427.8 48.7 429.3"/><polyline points="277.3 518.1 275.1 518.4 273 518.7 270.8 518.9 268.6 519.1 266.4 519.3 264.3 519.5 262.1 519.7 259.9 519.8 257.7 520 255.6 520.1 253.4 520.2 251.2 520.3 249 520.4 246.9 520.4 244.7 520.5 242.6 520.5 240.4 520.5 238.2 520.5 236.1 520.5 233.9 520.4 231.8 520.4 229.7 520.3 227.5 520.2 225.4 520.1 223.2 520 221.1 519.9 219 519.7 216.9 519.5 214.8 519.4 212.6 519.2 210.5 518.9"/><polyline points="217.7 527.6 215.8 527.6 213.9 527.6 212 527.6 210.1 527.6 208.3 527.5 206.4 527.5 204.6 527.4 202.7 527.3 200.9 527.2 199 527.1 197.2 527 195.3 526.8 193.5 526.7 191.7 526.5 189.9 526.3 188.1 526.1 186.3 525.8 184.5 525.6 182.7 525.3 180.9 525 179.1 524.7 177.3 524.4 175.6 524.1 173.8 523.7 172.1 523.3 170.3 523 168.6 522.6 166.9 522.2 165.1 521.7 163.4 521.3 161.7 520.8 160 520.3"/><polyline points="110.5 496.6 109.2 495.7 107.8 494.6 106.5 493.6 105.1 492.6 103.8 491.5 102.5 490.5 101.2 489.4 99.86 488.3"/><polyline points="160 520.3 158.3 519.8 156.7 519.3 155 518.8 153.3 518.2 151.7 517.7 150 517.1 148.4 516.5 146.8 515.9 145.1 515.3 143.5 514.6 141.9 514 140.3 513.3 138.7 512.6 137.2 511.9 135.6 511.2 134 510.5 132.5 509.7 131 508.9 129.4 508.2 127.9 507.4 126.4 506.6 124.9 505.7 123.4 504.9 122 504 120.5 503.2 119 502.3 117.6 501.4 116.2 500.5 114.7 499.5 113.3 498.6 111.9 497.6 110.5 496.6"/><polyline points="277.6 518.4 275.6 518.9 273.6 519.5 271.7 520 269.7 520.5 267.8 520.9 265.8 521.4 263.9 521.8 261.9 522.3 260 522.7 258 523.1 256.1 523.5 254.1 523.8 252.2 524.2 250.3 524.5 248.3 524.8 246.4 525.1 244.4 525.4 242.5 525.6 240.6 525.9 238.7 526.1 236.7 526.3 234.8 526.5 232.9 526.7 231 526.9 229.1 527 227.2 527.2 225.2 527.3 223.3 527.4 221.4 527.4 219.6 527.5 217.7 527.6"/><polyline points="277.9 518.6 276.3 519.4 274.7 520.2 273.1 520.9 271.5 521.6 269.9 522.3 268.3 523 266.7 523.7 265.2 524.4 263.6 525 262 525.6 260.4 526.3 258.8 526.9 257.2 527.4 255.6 528 254 528.5 252.5 529.1 250.9 529.6 249.3 530.1 247.7 530.5 246.2 531 244.6 531.4 243 531.9 241.4 532.3 239.9 532.7 238.3 533.1 236.8 533.4 235.2 533.8 233.7 534.1 232.1 534.4 230.6 534.7 229 535"/><polyline points="229 535 227.5 535.2 225.9 535.4 224.4 535.7 222.9 535.9 221.3 536.1 219.8 536.2 218.3 536.4 216.8 536.5 215.3 536.6 213.8 536.7 212.3 536.8 210.8 536.9 209.3 536.9 207.8 537 206.3 537 204.8 537 203.4 537 201.9 536.9 200.4 536.9 199 536.8 197.5 536.7 196.1 536.6 194.7 536.5 193.2 536.4 191.8 536.2 190.4 536 189 535.8 187.5 535.6 186.1 535.4 184.7 535.1 183.3 534.9 182 534.6"/><polyline points="182 534.6 180.6 534.3 179.2 534 177.8 533.7 176.5 533.3 175.1 533 173.8 532.6 172.4 532.2 171.1 531.8 169.8 531.3 168.5 530.9 167.2 530.4 165.9 529.9 164.6 529.4 163.3 528.9 162 528.4 160.7 527.9 159.5 527.3 158.2 526.7 157 526.1"/><polyline points="278.4 518.8 277.2 519.8 276.1 520.7 275 521.6 273.9 522.5 272.7 523.4 271.6 524.3 270.5 525.1 269.4 526 268.2 526.8 267.1 527.6 266 528.4 264.9 529.2 263.7 529.9 262.6 530.7 261.5 531.4 260.4 532.1 259.3 532.8 258.2 533.5 257 534.1 255.9 534.8 254.8 535.4 253.7 536 252.6 536.6 251.5 537.1 250.4 537.7 249.3 538.2 248.2 538.7 247.1 539.2 246 539.7 244.9 540.2 243.8 540.6"/><polyline points="243.8 540.6 242.7 541.1 241.6 541.5 240.5 541.9 239.5 542.2 238.4 542.6 237.3 542.9 236.2 543.3 235.2 543.6 234.1 543.9 233 544.1 232 544.4 230.9 544.6 229.9 544.8 228.8 545 227.8 545.2 226.7 545.4 225.7 545.5 224.6 545.6 223.6 545.8 222.6 545.9 221.5 545.9 220.5 546 219.5 546 218.5 546 217.5 546 216.5 546 215.5 546 214.5 545.9 213.5 545.9 212.5 545.8 211.5 545.7 210.5 545.6"/><polyline points="210.5 545.6 209.6 545.4 208.6 545.3 207.6 545.1 206.7 544.9 205.7 544.7 204.8 544.5 203.8 544.2"/><polyline points="278.9 518.9 278.3 520 277.8 521 277.2 522.1 276.6 523.1 276 524.1 275.4 525.1 274.8 526 274.3 527 273.7 527.9 273.1 528.9 272.5 529.8 271.9 530.6 271.3 531.5 270.8 532.4 270.2 533.2 269.6 534 269 534.8 268.5 535.6 267.9 536.4 267.3 537.1 266.7 537.8 266.2 538.6 265.6 539.2 265 539.9 264.4 540.6 263.9 541.2 263.3 541.9 262.7 542.5 262.2 543.1 261.6 543.6 261 544.2"/><polyline points="261 544.2 260.5 544.7 259.9 545.2 259.3 545.8 258.8 546.2 258.2 546.7 257.7 547.2 257.1 547.6 256.6 548 256 548.4 255.5 548.8 254.9 549.1 254.4 549.5 253.8 549.8 253.3 550.1 252.7 550.4 252.2 550.6 251.6 550.9 251.1 551.1 250.6 551.3 250 551.5 249.5 551.7 249 551.9 248.4 552 247.9 552.1 247.4 552.2 246.9 552.3 246.4 552.4 245.8 552.4 245.3 552.5 244.8 552.5 244.3 552.5 243.8 552.5"/><line x1="243.8" x2="243.3" y1="552.5" y2="552.4"/><polyline points="279.5 545.4 279.5 546 279.5 546.5 279.5 547.1 279.5 547.6 279.5 548.1 279.5 548.6 279.5 549.1 279.5 549.5 279.5 549.9 279.5 550.4 279.5 550.7 279.5 551.1 279.5 551.5 279.5 551.8 279.5 552.1 279.5 552.4 279.5 552.7 279.5 553 279.5 553.2 279.5 553.5 279.5 553.7 279.5 553.9 279.5 554.1 279.5 554.2 279.5 554.4 279.5 554.5 279.5 554.6 279.5 554.7 279.5 554.7 279.5 554.8 279.5 554.8 279.5 554.8"/><polyline points="279.5 519 279.5 520.1 279.5 521.2 279.5 522.2 279.5 523.3 279.5 524.3 279.5 525.4 279.5 526.4 279.5 527.3 279.5 528.3 279.5 529.3 279.5 530.2 279.5 531.1 279.5 532 279.5 532.9 279.5 533.8 279.5 534.7 279.5 535.5 279.5 536.3 279.5 537.1 279.5 537.9 279.5 538.7 279.5 539.4 279.5 540.2 279.5 540.9 279.5 541.6 279.5 542.3 279.5 542.9 279.5 543.6 279.5 544.2 279.5 544.8 279.5 545.4"/><polyline points="298 544.2 298.6 544.7 299.1 545.2 299.7 545.8 300.2 546.2 300.8 546.7 301.4 547.2 301.9 547.6 302.5 548 303 548.4 303.6 548.8 304.1 549.1 304.7 549.5 305.2 549.8 305.8 550.1 306.3 550.4 306.8 550.6 307.4 550.9 307.9 551.1 308.4 551.3 309 551.5 309.5 551.7 310 551.9 310.6 552 311.1 552.1 311.6 552.2 312.1 552.3 312.7 552.4 313.2 552.4 313.7 552.5 314.2 552.5 314.7 552.5 315.2 552.5"/><polyline points="280.1 518.9 280.7 520 281.3 521 281.8 522.1 282.4 523.1 283 524.1 283.6 525.1 284.2 526 284.8 527 285.3 527.9 285.9 528.9 286.5 529.8 287.1 530.6 287.7 531.5 288.2 532.4 288.8 533.2 289.4 534 290 534.8 290.6 535.6 291.1 536.4 291.7 537.1 292.3 537.8 292.9 538.6 293.4 539.2 294 539.9 294.6 540.6 295.2 541.2 295.7 541.9 296.3 542.5 296.9 543.1 297.4 543.6 298 544.2"/><line x1="315.2" x2="315.7" y1="552.5" y2="552.4"/><polyline points="315.2 540.6 316.3 541.1 317.4 541.5 318.5 541.9 319.6 542.2 320.6 542.6 321.7 542.9 322.8 543.3 323.9 543.6 324.9 543.9 326 544.1 327 544.4 328.1 544.6 329.2 544.8 330.2 545 331.3 545.2 332.3 545.4 333.3 545.5 334.4 545.6 335.4 545.8 336.4 545.9 337.5 545.9 338.5 546 339.5 546 340.5 546 341.5 546 342.5 546 343.5 546 344.5 545.9 345.5 545.9 346.5 545.8 347.5 545.7 348.5 545.6"/><polyline points="280.6 518.8 281.8 519.8 282.9 520.7 284 521.6 285.1 522.5 286.3 523.4 287.4 524.3 288.5 525.1 289.7 526 290.8 526.8 291.9 527.6 293 528.4 294.2 529.2 295.3 529.9 296.4 530.7 297.5 531.4 298.6 532.1 299.8 532.8 300.9 533.5 302 534.1 303.1 534.8 304.2 535.4 305.3 536 306.4 536.6 307.5 537.1 308.6 537.7 309.7 538.2 310.8 538.7 311.9 539.2 313 539.7 314.1 540.2 315.2 540.6"/><polyline points="348.5 545.6 349.5 545.4 350.4 545.3 351.4 545.1 352.4 544.9 353.3 544.7 354.3 544.5 355.2 544.2"/><polyline points="281.1 518.6 282.7 519.4 284.3 520.2 285.9 520.9 287.5 521.6 289.1 522.3 290.7 523 292.3 523.7 293.9 524.4 295.4 525 297 525.6 298.6 526.3 300.2 526.9 301.8 527.4 303.4 528 305 528.5 306.6 529.1 308.1 529.6 309.7 530.1 311.3 530.5 312.9 531 314.4 531.4 316 531.9 317.6 532.3 319.1 532.7 320.7 533.1 322.3 533.4 323.8 533.8 325.4 534.1 326.9 534.4 328.5 534.7 330 535"/><polyline points="330 535 331.5 535.2 333.1 535.4 334.6 535.7 336.1 535.9 337.7 536.1 339.2 536.2 340.7 536.4 342.2 536.5 343.7 536.6 345.2 536.7 346.7 536.8 348.2 536.9 349.7 536.9 351.2 537 352.7 537 354.2 537 355.6 537 357.1 536.9 358.6 536.9 360 536.8 361.5 536.7 362.9 536.6 364.4 536.5 365.8 536.3 367.2 536.2 368.6 536 370.1 535.8 371.5 535.6 372.9 535.4 374.3 535.1 375.7 534.9 377.1 534.6"/><polyline points="377.1 534.6 378.4 534.3 379.8 534 381.2 533.7 382.5 533.3 383.9 533 385.2 532.6 386.6 532.2 387.9 531.8 389.2 531.3 390.5 530.9 391.8 530.4 393.1 529.9 394.4 529.4 395.7 528.9 397 528.4 398.3 527.9 399.5 527.3 400.8 526.7 402 526.1"/><polyline points="448.5 496.6 449.8 495.6 451.2 494.6 452.6 493.6 453.9 492.6 455.2 491.5 456.6 490.5 457.9 489.4 459.2 488.3"/><polyline points="399 520.3 400.7 519.8 402.4 519.3 404 518.8 405.7 518.2 407.3 517.7 409 517.1 410.6 516.5 412.3 515.9 413.9 515.3 415.5 514.6 417.1 514 418.7 513.3 420.3 512.6 421.8 511.9 423.4 511.2 425 510.5 426.5 509.7 428.1 508.9 429.6 508.2 431.1 507.4 432.6 506.6 434.1 505.7 435.6 504.9 437.1 504 438.5 503.2 440 502.3 441.4 501.4 442.9 500.5 444.3 499.5 445.7 498.6 447.1 497.6 448.5 496.6"/><polyline points="341.4 527.6 343.2 527.6 345.1 527.6 347 527.6 348.9 527.6 350.7 527.5 352.6 527.5 354.5 527.4 356.3 527.3 358.2 527.2 360 527.1 361.8 527 363.7 526.8 365.5 526.7 367.3 526.5 369.1 526.3 370.9 526.1 372.8 525.8 374.5 525.6 376.3 525.3 378.1 525 379.9 524.7 381.7 524.4 383.4 524.1 385.2 523.7 386.9 523.3 388.7 523 390.4 522.6 392.1 522.1 393.9 521.7 395.6 521.3 397.3 520.8 399 520.3"/><polyline points="281.5 518.4 283.4 518.9 285.4 519.5 287.3 520 289.3 520.5 291.2 520.9 293.2 521.4 295.1 521.8 297.1 522.3 299 522.7 301 523.1 302.9 523.5 304.9 523.8 306.8 524.2 308.8 524.5 310.7 524.8 312.6 525.1 314.6 525.4 316.5 525.6 318.4 525.9 320.4 526.1 322.3 526.3 324.2 526.5 326.1 526.7 328 526.9 330 527 331.9 527.2 333.8 527.3 335.7 527.4 337.6 527.4 339.5 527.5 341.4 527.6"/><polyline points="412.8 503.7 414.6 503 416.5 502.2 418.4 501.4 420.2 500.7 422.1 499.9 423.9 499.1 425.8 498.3 427.6 497.4 429.4 496.6 431.2 495.7 433 494.8 434.7 493.9 436.5 493 438.3 492.1 440 491.2 441.7 490.2 443.5 489.2 445.2 488.3 446.9 487.3 448.6 486.3 450.3 485.2 451.9 484.2 453.6 483.2 455.2 482.1 456.9 481 458.5 479.9 460.1 478.8 461.7 477.7 463.3 476.6 464.9 475.4 466.4 474.3 468 473.1"/><polyline points="281.7 518.1 283.9 518.4 286 518.7 288.2 518.9 290.4 519.1 292.6 519.3 294.8 519.5 296.9 519.7 299.1 519.8 301.3 520 303.5 520.1 305.6 520.2 307.8 520.3 310 520.4 312.1 520.4 314.3 520.5 316.5 520.5 318.6 520.5 320.8 520.5 322.9 520.5 325.1 520.4 327.2 520.4 329.4 520.3 331.5 520.2 333.6 520.1 335.8 520 337.9 519.9 340 519.7 342.1 519.5 344.3 519.4 346.4 519.2 348.5 518.9"/><polyline points="510.3 429.3 511.4 427.8 512.5 426.2 513.5 424.6 514.6 423 515.6 421.5 516.6 419.9 517.6 418.2 518.5 416.6 519.5 415 520.4 413.4 521.4 411.7 522.3 410.1"/><polyline points="468 473.1 469.5 471.9 471 470.7 472.5 469.5 474 468.3 475.5 467.1 477 465.8 478.4 464.6 479.9 463.3 481.3 462 482.7 460.7 484.1 459.4 485.5 458.1 486.9 456.8 488.3 455.4 489.6 454.1 490.9 452.7 492.3 451.3 493.6 449.9 494.9 448.5 496.1 447.1 497.4 445.7 498.7 444.3 499.9 442.8 501.1 441.4 502.3 439.9 503.5 438.4 504.7 436.9 505.8 435.4 507 433.9 508.1 432.4 509.2 430.9 510.3 429.3"/><polyline points="348.5 518.9 350.6 518.7 352.7 518.5 354.8 518.2 356.9 517.9 359 517.6 361 517.3 363.1 517 365.2 516.6 367.2 516.3 369.3 515.9 371.3 515.5 373.4 515.1 375.4 514.7 377.5 514.2 379.5 513.8 381.5 513.3 383.5 512.8 385.5 512.3 387.5 511.8 389.5 511.3 391.5 510.7 393.5 510.2 395.4 509.6 397.4 509 399.3 508.4 401.3 507.8 403.2 507.1 405.1 506.5 407.1 505.8 409 505.1 410.9 504.4 412.8 503.7"/><polyline points="474.6 447.9 476.2 446.5 477.8 445.1 479.3 443.7 480.9 442.3 482.4 440.8 483.9 439.4 485.5 437.9 487 436.5 488.4 435 489.9 433.5 491.4 432 492.8 430.5 494.2 429 495.6 427.5 497 425.9 498.4 424.4 499.8 422.8 501.1 421.3 502.5 419.7 503.8 418.1 505.1 416.5 506.4 414.9 507.7 413.3 508.9 411.7 510.2 410 511.4 408.4 512.6 406.8 513.8 405.1 515 403.4 516.2 401.8 517.3 400.1 518.5 398.4"/><polyline points="417.5 485.8 419.4 484.9 421.4 483.9 423.3 482.8 425.2 481.8 427.1 480.8 429 479.7 430.9 478.7 432.8 477.6 434.7 476.5 436.5 475.4 438.4 474.3 440.2 473.1 442 472 443.9 470.8 445.7 469.7 447.5 468.5 449.3 467.3 451 466.1 452.8 464.9 454.5 463.6 456.3 462.4 458 461.1 459.7 459.8 461.4 458.6 463.1 457.3 464.8 456 466.5 454.6 468.1 453.3 469.8 452 471.4 450.6 473 449.2 474.6 447.9"/><polyline points="350.9 509.7 353.1 509.2 355.3 508.7 357.4 508.1 359.6 507.6 361.8 507 363.9 506.4 366.1 505.8 368.2 505.2 370.3 504.5 372.5 503.9 374.6 503.2 376.7 502.5 378.8 501.8 380.9 501.1 383 500.4 385.1 499.7 387.2 498.9 389.3 498.1 391.3 497.4 393.4 496.6 395.4 495.7 397.5 494.9 399.5 494.1 401.5 493.2 403.6 492.3 405.6 491.5 407.6 490.6 409.6 489.6 411.6 488.7 413.5 487.8 415.5 486.8 417.5 485.8"/><polyline points="281.8 517.8 284 517.8 286.3 517.8 288.5 517.7 290.8 517.6 293 517.6 295.3 517.5 297.6 517.3 299.8 517.2 302.1 517 304.3 516.9 306.6 516.7 308.8 516.5 311 516.3 313.3 516.1 315.5 515.8 317.8 515.5 320 515.3 322.2 515 324.4 514.7 326.7 514.3 328.9 514 331.1 513.6 333.3 513.3 335.5 512.9 337.8 512.5 340 512 342.2 511.6 344.4 511.2 346.5 510.7 348.7 510.2 350.9 509.7"/><polyline points="518.5 398.4 519.6 396.7 520.7 395 521.8 393.3 522.8 391.6 523.9 389.8 524.9 388.1 526 386.4 527 384.6 528 382.8 528.9 381.1 529.9 379.3 530.8 377.5 531.8 375.8 532.7 374 533.5 372.2 534.4 370.4 535.3 368.6 536.1 366.7 536.9 364.9 537.7 363.1 538.5 361.3 539.3 359.4 540 357.6 540.8 355.7 541.5 353.9 542.2 352 542.9 350.2 543.5 348.3 544.2 346.4 544.8 344.5 545.4 342.7 546 340.8"/><polyline points="546 340.8 546.6 338.9 547.2 337 547.7 335.1 548.2 333.2 548.7 331.3 549.2 329.4 549.7 327.5 550.1 325.5 550.6 323.6 551 321.7 551.4 319.8 551.7 317.9 552.1 315.9 552.4 314 552.8 312.1 553.1 310.1 553.4 308.2 553.6 306.2 553.9 304.3 554.1 302.4 554.3 300.4 554.5 298.5 554.7 296.5 554.8 294.6 555 292.6 555.1 290.7 555.2 288.7 555.3 286.8 555.3 284.8 555.4 282.8 555.4 280.9"/><polyline points="510.3 367.5 511.4 365.6 512.5 363.8 513.5 361.9 514.6 360.1 515.6 358.2 516.6 356.3 517.6 354.5 518.5 352.6 519.5 350.7 520.4 348.8 521.4 346.9 522.3 345 523.2 343.1 524 341.2 524.9 339.3 525.7 337.4 526.6 335.5 527.4 333.5 528.2 331.6 528.9 329.7 529.7 327.7 530.4 325.8 531.2 323.9 531.9 321.9 532.6 320 533.2 318 533.9 316.1 534.5 314.1 535.2 312.2 535.8 310.2 536.4 308.2 536.9 306.3"/><polyline points="536.9 182.6 537.5 184.4 538 186.3 538.6 188.1 539.1 189.9 539.5 191.8 540 193.6 540.5 195.5 540.9 197.3 541.3 199.2 541.7 201 542.1 202.9 542.5 204.8 542.8 206.7 543.1 208.6 543.4 210.5 543.7 212.4 544 214.3 544.3 216.2 544.5 218.1 544.7 220 544.9 221.9 545.1 223.8 545.3 225.8 545.5 227.7 545.6 229.6 545.7 231.6 545.8 233.5 545.9 235.4 545.9 237.4 546 239.3 546 241.3 546 243.2"/><polyline points="536.9 306.3 537.5 304.3 538 302.4 538.6 300.4 539.1 298.4 539.5 296.4 540 294.5 540.5 292.5 540.9 290.5 541.3 288.6 541.7 286.6 542.1 284.6 542.5 282.6 542.8 280.7 543.1 278.7 543.4 276.7 543.7 274.7 544 272.7 544.3 270.8 544.5 268.8 544.7 266.8 544.9 264.9 545.1 262.9 545.3 260.9 545.5 258.9 545.6 257 545.7 255 545.8 253 545.9 251.1 545.9 249.1 546 247.1 546 245.2 546 243.2"/><polyline points="412.8 468 414.6 466.8 416.5 465.5 418.4 464.2 420.2 463 422.1 461.7 423.9 460.4 425.8 459.1 427.6 457.8 429.4 456.4 431.2 455.1 433 453.7 434.7 452.3 436.5 451 438.3 449.6 440 448.2 441.8 446.7 443.5 445.3 445.2 443.9 446.9 442.4 448.6 441 450.3 439.5 451.9 438 453.6 436.5 455.2 435 456.9 433.5 458.5 432 460.1 430.4 461.7 428.9 463.3 427.4 464.9 425.8 466.4 424.2 468 422.6"/><polyline points="281.7 517.5 283.9 517.2 286 516.9 288.2 516.6 290.4 516.2 292.6 515.8 294.8 515.4 296.9 515 299.1 514.6 301.3 514.1 303.5 513.7 305.6 513.2 307.8 512.7 310 512.2 312.1 511.7 314.3 511.1 316.5 510.6 318.6 510 320.8 509.4 322.9 508.8 325.1 508.2 327.2 507.6 329.4 507 331.5 506.3 333.6 505.6 335.8 504.9 337.9 504.2 340 503.5 342.1 502.8 344.3 502 346.4 501.2 348.5 500.5"/><polyline points="468 422.6 469.5 421 471 419.4 472.5 417.8 474 416.2 475.5 414.6 477 412.9 478.4 411.3 479.9 409.6 481.3 408 482.7 406.3 484.1 404.6 485.5 402.9 486.9 401.2 488.3 399.5 489.6 397.8 490.9 396.1 492.3 394.3 493.6 392.6 494.9 390.8 496.1 389.1 497.4 387.3 498.7 385.5 499.9 383.8 501.1 382 502.3 380.2 503.5 378.4 504.7 376.6 505.8 374.8 507 373 508.1 371.1 509.2 369.3 510.3 367.5"/><polyline points="348.5 500.5 350.6 499.7 352.7 498.9 354.8 498 356.9 497.2 359 496.3 361 495.5 363.1 494.6 365.2 493.7 367.2 492.8 369.3 491.9 371.3 490.9 373.4 490 375.4 489 377.5 488 379.5 487 381.5 486 383.5 485 385.5 483.9 387.5 482.9 389.5 481.8 391.5 480.7 393.5 479.6 395.4 478.5 397.4 477.4 399.3 476.3 401.3 475.1 403.2 474 405.1 472.8 407.1 471.6 409 470.4 410.9 469.2 412.8 468"/><polyline points="523.2 149.5 524 151.2 524.9 152.8 525.7 154.5 526.6 156.2 527.4 157.9 528.2 159.6 528.9 161.4 529.7 163.1 530.4 164.8 531.2 166.6 531.9 168.3 532.6 170.1 533.2 171.9 533.9 173.6 534.5 175.4 535.2 177.2 535.8 179 536.4 180.8 536.9 182.6"/><polyline points="341.4 491.9 343.2 490.8 345.1 489.7 347 488.6 348.9 487.5 350.7 486.4 352.6 485.3 354.5 484.2 356.3 483 358.2 481.8 360 480.6 361.8 479.5 363.7 478.2 365.5 477 367.3 475.8 369.1 474.5 370.9 473.3 372.8 472 374.6 470.7 376.3 469.4 378.1 468.1 379.9 466.8 381.7 465.4 383.4 464.1 385.2 462.7 386.9 461.3 388.7 459.9 390.4 458.5 392.2 457.1 393.9 455.7 395.6 454.3 397.3 452.8 399 451.4"/><polyline points="510.3 274.2 510.8 272.1 511.3 270.1 511.8 268.1 512.2 266 512.7 264 513.1 262 513.5 259.9 513.9 257.9 514.2 255.9 514.6 253.8 514.9 251.8 515.3 249.8 515.6 247.8 515.9 245.8 516.2 243.8 516.4 241.7 516.7 239.7 516.9 237.7 517.1 235.7 517.3 233.7 517.5 231.7 517.7 229.7 517.8 227.7 518 225.7 518.1 223.8 518.2 221.8 518.3 219.8 518.3 217.8 518.4 215.9 518.4 213.9 518.5 211.9 518.5 210"/><polyline points="460.4 70.66 461.7 71.78 463 72.91 464.2 74.06 465.5 75.22 466.7 76.39 467.9 77.58 469.1 78.78 470.3 79.99 471.4 81.22 472.6 82.46 473.7 83.71 474.9 84.98 476 86.26 477.1 87.55 478.2 88.86 479.3 90.18 480.3 91.51 481.4 92.85 482.4 94.2 483.5 95.57 484.5 96.95 485.5 98.35 486.4 99.75"/><polyline points="448.5 399.1 449.8 397.3 451.2 395.5 452.6 393.7 453.9 391.9 455.2 390.1 456.6 388.3 457.9 386.4 459.2 384.6 460.4 382.8 461.7 380.9 463 379.1 464.2 377.2 465.5 375.3 466.7 373.4 467.9 371.6 469.1 369.7 470.3 367.8 471.4 365.9 472.6 364 473.7 362 474.9 360.1 476 358.2 477.1 356.3 478.2 354.3 479.3 352.4 480.3 350.4 481.4 348.5 482.4 346.5 483.5 344.6 484.5 342.6 485.5 340.6 486.4 338.7"/><polyline points="510.3 150.5 510.8 152.2 511.3 154 511.8 155.7 512.2 157.5 512.7 159.3 513.1 161.1 513.5 162.9 513.9 164.7 514.2 166.5 514.6 168.3 514.9 170.1 515.3 172 515.6 173.8 515.9 175.7 516.2 177.5 516.4 179.4 516.7 181.2 516.9 183.1 517.1 185 517.3 186.9 517.5 188.8 517.7 190.7 517.8 192.6 518 194.5 518.1 196.4 518.2 198.3 518.3 200.3 518.3 202.2 518.4 204.1 518.4 206.1 518.5 208 518.5 210"/><polyline points="399 451.4 400.7 449.9 402.4 448.4 404 446.9 405.7 445.4 407.3 443.9 409 442.4 410.6 440.8 412.3 439.3 413.9 437.7 415.5 436.1 417.1 434.6 418.7 433 420.3 431.4 421.9 429.7 423.4 428.1 425 426.5 426.5 424.9 428.1 423.2 429.6 421.5 431.1 419.9 432.6 418.2 434.1 416.5 435.6 414.8 437.1 413.1 438.5 411.4 440 409.6 441.4 407.9 442.9 406.2 444.3 404.4 445.7 402.7 447.1 400.9 448.5 399.1"/><polyline points="281.5 517.3 283.4 516.7 285.4 516.1 287.3 515.5 289.3 514.8 291.2 514.2 293.2 513.5 295.1 512.8 297.1 512.1 299 511.4 301 510.7 302.9 509.9 304.9 509.2 306.8 508.4 308.8 507.6 310.7 506.8 312.6 506 314.6 505.1 316.5 504.3 318.4 503.4 320.4 502.5 322.3 501.6 324.2 500.7 326.1 499.8 328 498.9 330 497.9 331.9 496.9 333.8 495.9 335.7 494.9 337.6 493.9 339.5 492.9 341.4 491.9"/><polyline points="486.4 338.7 487.4 336.7 488.4 334.7 489.3 332.7 490.2 330.7 491.2 328.7 492.1 326.7 492.9 324.8 493.8 322.7 494.7 320.7 495.5 318.7 496.3 316.7 497.2 314.7 498 312.7 498.7 310.7 499.5 308.7 500.3 306.6 501 304.6 501.7 302.6 502.4 300.6 503.1 298.5 503.8 296.5 504.5 294.5 505.1 292.5 505.8 290.4 506.4 288.4 507 286.4 507.6 284.3 508.2 282.3 508.7 280.3 509.3 278.2 509.8 276.2 510.3 274.2"/><polyline points="486.4 99.75 487.4 101.2 488.4 102.6 489.3 104 490.2 105.5 491.2 107 492.1 108.4 492.9 109.9 493.8 111.4 494.7 112.9 495.5 114.4 496.3 116 497.2 117.5 498 119.1 498.7 120.6 499.5 122.2 500.3 123.8 501 125.4 501.7 127 502.4 128.6 503.1 130.2 503.8 131.9 504.5 133.5 505.1 135.2 505.8 136.8 506.4 138.5 507 140.2 507.6 141.9 508.2 143.6 508.7 145.3 509.3 147 509.8 148.7 510.3 150.5"/><polyline points="417.5 378.9 418.6 377 419.7 375 420.8 373 421.9 371.1 423 369.1 424.1 367.1 425.1 365.1 426.2 363.1 427.2 361.1 428.3 359.1 429.3 357.1 430.3 355.1 431.3 353.1 432.3 351.1 433.3 349 434.3 347 435.3 345 436.2 342.9 437.2 340.9 438.1 338.8 439 336.8 439.9 334.7 440.8 332.6 441.7 330.6 442.6 328.5 443.5 326.4 444.3 324.4 445.2 322.3 446 320.2 446.9 318.1 447.7 316 448.5 313.9"/><polyline points="448.5 75.01 449.3 76.31 450 77.62 450.8 78.95 451.6 80.29 452.3 81.65 453.1 83.01 453.8 84.4 454.5 85.79 455.2 87.2 455.9 88.62 456.6 90.05 457.2 91.49 457.9 92.95 458.5 94.42 459.1 95.9 459.8 97.4 460.4 98.9 461 100.4 461.5 102 462.1 103.5 462.7 105 463.2 106.6 463.7 108.2 464.3 109.8 464.8 111.4 465.3 113 465.7 114.6 466.2 116.2 466.7 117.9 467.1 119.5 467.5 121.2 468 122.9"/><polyline points="468 122.9 468.4 124.6 468.8 126.3 469.2 128 469.5 129.7 469.9 131.4 470.2 133.2 470.5 134.9 470.9 136.7 471.2 138.4 471.5 140.2 471.7 142 472 143.8 472.3 145.6 472.5 147.4 472.7 149.2 472.9 151 473.1 152.9 473.3 154.7 473.5 156.6 473.7 158.5 473.8 160.3 474 162.2 474.1 164.1 474.2 166 474.3 167.9 474.4 169.8 474.5 171.7 474.5 173.6 474.6 175.6 474.6 177.5 474.6 179.4 474.6 181.4"/><polyline points="403.3 32.38 404.5 33.01 405.7 33.65 406.9 34.32 408.2 35 409.3 35.7 410.5 36.41 411.7 37.14 412.9 37.88 414 38.65 415.2 39.42 416.3 40.22 417.5 41.03"/><polyline points="377.1 437.1 378.4 435.4 379.8 433.7 381.2 432 382.5 430.3 383.9 428.6 385.2 426.9 386.6 425.1 387.9 423.4 389.2 421.6 390.5 419.9 391.8 418.1 393.2 416.3 394.4 414.5 395.7 412.7 397 410.9 398.3 409.1 399.5 407.3 400.8 405.4 402 403.6 403.3 401.7 404.5 399.9 405.7 398 406.9 396.1 408.2 394.2 409.3 392.4 410.5 390.5 411.7 388.6 412.9 386.6 414 384.7 415.2 382.8 416.3 380.8 417.5 378.9"/><polyline points="417.5 41.03 418.6 41.85 419.7 42.7 420.8 43.55 421.9 44.43 423 45.32 424.1 46.22 425.1 47.14 426.2 48.08 427.2 49.03 428.3 49.99 429.3 50.98 430.3 51.97 431.3 52.98 432.3 54.01 433.3 55.06 434.3 56.11 435.3 57.18 436.2 58.27 437.2 59.38 438.1 60.49 439 61.62 439.9 62.77 440.8 63.93 441.7 65.1 442.6 66.29 443.5 67.5 444.3 68.71 445.2 69.94 446 71.19 446.9 72.45 447.7 73.72 448.5 75.01"/><polyline points="448.5 313.9 449.3 311.8 450 309.7 450.8 307.6 451.6 305.5 452.3 303.4 453.1 301.3 453.8 299.2 454.5 297.1 455.2 295 455.9 292.9 456.6 290.8 457.2 288.7 457.9 286.6 458.5 284.5 459.1 282.4 459.8 280.3 460.4 278.1 461 276 461.5 273.9 462.1 271.8 462.7 269.7 463.2 267.6 463.7 265.5 464.3 263.4 464.8 261.3 465.3 259.2 465.7 257.1 466.2 255 466.7 252.9 467.1 250.8 467.5 248.7 468 246.6"/><polyline points="330 484.5 331.5 483.2 333.1 481.9 334.6 480.6 336.1 479.2 337.7 477.9 339.2 476.6 340.7 475.2 342.2 473.8 343.7 472.4 345.2 471 346.7 469.6 348.2 468.2 349.7 466.7 351.2 465.3 352.7 463.8 354.2 462.3 355.6 460.8 357.1 459.3 358.6 457.8 360 456.3 361.5 454.8 362.9 453.2 364.4 451.6 365.8 450.1 367.2 448.5 368.7 446.9 370.1 445.3 371.5 443.7 372.9 442 374.3 440.4 375.7 438.7 377.1 437.1"/><polyline points="468 246.6 468.4 244.5 468.8 242.4 469.2 240.3 469.5 238.2 469.9 236.1 470.2 234 470.5 232 470.9 229.9 471.2 227.8 471.5 225.7 471.7 223.7 472 221.6 472.3 219.6 472.5 217.5 472.7 215.5 472.9 213.4 473.1 211.4 473.3 209.3 473.5 207.3 473.7 205.3 473.8 203.3 474 201.2 474.1 199.2 474.2 197.2 474.3 195.2 474.4 193.2 474.5 191.3 474.5 189.3 474.6 187.3 474.6 185.3 474.6 183.4 474.6 181.4"/><polyline points="281.1 517 282.7 516.2 284.3 515.4 285.9 514.5 287.5 513.7 289.1 512.8 290.7 511.9 292.3 511 293.9 510 295.5 509.1 297 508.1 298.6 507.1 300.2 506.1 301.8 505.1 303.4 504.1 305 503.1 306.6 502 308.1 501 309.7 499.9 311.3 498.8 312.9 497.7 314.4 496.5 316 495.4 317.6 494.2 319.1 493.1 320.7 491.9 322.3 490.7 323.8 489.5 325.4 488.2 326.9 487 328.5 485.7 330 484.5"/><polyline points="377.1 25.53 377.9 26.23 378.6 26.94 379.4 27.68 380.2 28.43 381 29.19 381.7 29.98 382.5 30.78 383.2 31.6 384 32.43 384.7 33.28 385.4 34.14 386.2 35.03 386.9 35.93 387.6 36.84 388.3 37.77 389 38.72 389.6 39.69 390.3 40.66 391 41.66 391.7 42.67 392.3 43.7 393 44.74 393.6 45.8 394.2 46.88 394.8 47.97 395.5 49.07 396.1 50.19 396.7 51.33 397.3 52.48 397.8 53.65 398.4 54.83 399 56.02"/><polyline points="348.5 426.1 349.5 424.3 350.4 422.4 351.4 420.6 352.4 418.7 353.3 416.9 354.3 415 355.2 413.1 356.2 411.2 357.1 409.3 358 407.4 358.9 405.5 359.9 403.6 360.8 401.6 361.7 399.7 362.6 397.7 363.5 395.8 364.4 393.8 365.3 391.8 366.2 389.8 367 387.8 367.9 385.8 368.8 383.8 369.6 381.8 370.5 379.8 371.3 377.8 372.2 375.7 373 373.7 373.8 371.7 374.6 369.6 375.5 367.5 376.3 365.5 377.1 363.4"/><polyline points="315.2 478.8 316.3 477.3 317.4 475.9 318.5 474.4 319.6 472.9 320.6 471.4 321.7 469.9 322.8 468.3 323.9 466.8 324.9 465.2 326 463.6 327 462.1 328.1 460.5 329.2 458.8 330.2 457.2 331.3 455.6 332.3 453.9 333.3 452.3 334.4 450.6 335.4 448.9 336.4 447.3 337.5 445.5 338.5 443.8 339.5 442.1 340.5 440.4 341.5 438.6 342.5 436.9 343.5 435.1 344.5 433.3 345.5 431.5 346.5 429.7 347.5 427.9 348.5 426.1"/><polyline points="399 294.9 399.5 292.8 400.1 290.6 400.6 288.4 401.2 286.2 401.7 284 402.2 281.8 402.7 279.7 403.2 277.5 403.7 275.3 404.2 273.1 404.7 270.9 405.2 268.7 405.6 266.5 406.1 264.4 406.5 262.2 407 260 407.4 257.8 407.8 255.6 408.2 253.5 408.6 251.3 409 249.1 409.4 246.9 409.8 244.8 410.2 242.6 410.5 240.5 410.9 238.3 411.2 236.1 411.5 234 411.9 231.8 412.2 229.7 412.5 227.5 412.8 225.4"/><polyline points="280.6 516.9 281.8 515.9 282.9 514.8 284 513.8 285.1 512.8 286.3 511.7 287.4 510.6 288.5 509.5 289.7 508.4 290.8 507.3 291.9 506.1 293 505 294.2 503.8 295.3 502.6 296.4 501.4 297.5 500.2 298.6 499 299.8 497.7 300.9 496.5 302 495.2 303.1 493.9 304.2 492.6 305.3 491.3 306.4 490 307.5 488.6 308.6 487.2 309.7 485.9 310.8 484.5 311.9 483.1 313 481.7 314.1 480.2 315.2 478.8"/><polyline points="377.1 363.4 377.9 361.3 378.6 359.2 379.4 357.2 380.2 355.1 381 353 381.7 350.9 382.5 348.8 383.2 346.6 384 344.5 384.7 342.4 385.4 340.3 386.2 338.2 386.9 336 387.6 333.9 388.3 331.8 389 329.6 389.6 327.5 390.3 325.3 391 323.2 391.6 321 392.3 318.8 393 316.7 393.6 314.5 394.2 312.3 394.8 310.2 395.5 308 396.1 305.8 396.7 303.7 397.3 301.5 397.8 299.3 398.4 297.1 399 294.9"/><polyline points="412.8 101.7 413.1 103.4 413.3 105 413.6 106.7 413.9 108.3 414.1 110 414.4 111.7 414.6 113.4 414.8 115.2 415 116.9 415.2 118.6 415.4 120.4 415.6 122.2 415.8 123.9 416 125.7 416.1 127.5 416.3 129.3 416.4 131.1 416.6 133 416.7 134.8 416.8 136.6 416.9 138.5 417 140.4 417.1 142.2 417.2 144.1 417.2 146 417.3 147.9 417.4 149.8 417.4 151.7 417.4 153.7 417.5 155.6 417.5 157.5 417.5 159.5"/><polyline points="412.8 225.4 413.1 223.2 413.3 221.1 413.6 219 413.9 216.8 414.1 214.7 414.4 212.6 414.6 210.5 414.8 208.4 415 206.3 415.2 204.2 415.4 202.1 415.6 200 415.8 197.9 416 195.8 416.1 193.8 416.3 191.7 416.4 189.6 416.6 187.6 416.7 185.5 416.8 183.5 416.9 181.4 417 179.4 417.1 177.4 417.2 175.4 417.2 173.4 417.3 171.3 417.4 169.4 417.4 167.4 417.4 165.4 417.5 163.4 417.5 161.4 417.5 159.5"/><polyline points="399 56.02 399.5 57.24 400.1 58.46 400.6 59.7 401.2 60.96 401.7 62.23 402.2 63.52 402.7 64.81 403.2 66.13 403.7 67.46 404.2 68.8 404.7 70.15 405.2 71.52 405.6 72.91 406.1 74.31 406.5 75.72 407 77.14 407.4 78.58 407.8 80.03 408.2 81.5 408.6 82.98 409 84.47 409.4 85.97 409.8 87.49 410.2 89.02 410.5 90.56 410.9 92.12 411.2 93.69 411.5 95.27 411.9 96.86 412.2 98.47 412.5 100.1 412.8 101.7"/><polyline points="356.2 13.92 357.1 14.2 358 14.5 358.9 14.82 359.9 15.15 360.8 15.51 361.7 15.88 362.6 16.26 363.5 16.67 364.4 17.09 365.3 17.53 366.2 17.99 367 18.47 367.9 18.96 368.8 19.47 369.6 20 370.5 20.55 371.3 21.11 372.2 21.69 373 22.29 373.8 22.9 374.6 23.53 375.5 24.18 376.3 24.85 377.1 25.53"/><polyline points="330 353.7 330.4 351.5 330.8 349.3 331.2 347.2 331.6 345 332 342.8 332.4 340.7 332.8 338.5 333.2 336.3 333.6 334.1 334 331.9 334.3 329.7 334.7 327.5 335.1 325.3 335.5 323.1 335.8 320.9 336.2 318.7 336.5 316.5 336.9 314.2 337.2 312 337.6 309.8 337.9 307.6 338.2 305.3 338.6 303.1 338.9 300.9 339.2 298.7 339.5 296.4 339.8 294.2 340.2 292 340.5 289.7 340.8 287.5 341.1 285.2 341.4 283"/><polyline points="280.1 516.8 280.7 515.6 281.3 514.5 281.8 513.4 282.4 512.2 283 511 283.6 509.8 284.2 508.6 284.8 507.4 285.3 506.2 285.9 504.9 286.5 503.6 287.1 502.4 287.7 501.1 288.2 499.7 288.8 498.4 289.4 497.1 290 495.7 290.6 494.3 291.1 493 291.7 491.6 292.3 490.1 292.9 488.7 293.4 487.3 294 485.8 294.6 484.3 295.2 482.9 295.7 481.4 296.3 479.8 296.9 478.3 297.4 476.8 298 475.2"/><polyline points="348.5 212.1 348.6 209.9 348.8 207.7 348.9 205.6 349.1 203.4 349.2 201.3 349.3 199.1 349.4 197 349.6 194.9 349.7 192.7 349.8 190.6 349.9 188.5 350 186.4 350.1 184.3 350.2 182.2 350.2 180.1 350.3 178 350.4 175.9 350.5 173.9 350.5 171.8 350.6 169.8 350.6 167.7 350.7 165.7 350.7 163.6 350.8 161.6 350.8 159.6 350.8 157.6 350.9 155.6 350.9 153.6 350.9 151.6 350.9 149.6 350.9 147.7 350.9 145.7"/><polyline points="341.4 283 341.6 280.8 341.9 278.5 342.2 276.3 342.5 274.1 342.8 271.8 343 269.6 343.3 267.3 343.6 265.1 343.8 262.9 344.1 260.6 344.3 258.4 344.6 256.2 344.8 253.9 345 251.7 345.3 249.5 345.5 247.3 345.7 245 345.9 242.8 346.1 240.6 346.4 238.4 346.6 236.2 346.8 234 346.9 231.8 347.1 229.6 347.3 227.4 347.5 225.2 347.7 223 347.9 220.8 348 218.6 348.2 216.4 348.3 214.2 348.5 212.1"/><polyline points="341.4 44.09 341.6 45.25 341.9 46.42 342.2 47.6 342.5 48.81 342.8 50.02 343 51.26 343.3 52.5 343.6 53.77 343.8 55.05 344.1 56.34 344.3 57.65 344.6 58.97 344.8 60.31 345 61.66 345.3 63.03 345.5 64.41 345.7 65.81 345.9 67.22 346.1 68.64 346.4 70.08 346.6 71.53 346.8 73 346.9 74.48 347.1 75.97 347.3 77.48 347.5 79 347.7 80.54 347.9 82.08 348 83.64 348.2 85.22 348.3 86.8 348.5 88.4"/><polyline points="350.9 145.7 350.9 143.7 350.9 141.8 350.9 139.9 350.9 138 350.9 136 350.8 134.1 350.8 132.2 350.8 130.4 350.7 128.5 350.7 126.6 350.6 124.8 350.6 122.9 350.5 121.1 350.5 119.3 350.4 117.5 350.3 115.7 350.2 113.9 350.2 112.1 350.1 110.3 350 108.6 349.9 106.8 349.8 105.1 349.7 103.4 349.6 101.6 349.4 99.95 349.3 98.26 349.2 96.59 349.1 94.93 348.9 93.28 348.8 91.64 348.6 90.01 348.5 88.4"/><polyline points="315.2 419.2 315.7 417.3 316.2 415.4 316.7 413.4 317.2 411.5 317.7 409.5 318.2 407.5 318.7 405.6 319.2 403.6 319.7 401.6 320.2 399.6 320.6 397.6 321.1 395.5 321.6 393.5 322.1 391.5 322.5 389.4 323 387.4 323.4 385.3 323.9 383.2 324.4 381.2 324.8 379.1 325.3 377 325.7 374.9 326.2 372.8 326.6 370.7 327 368.6 327.5 366.5 327.9 364.4 328.3 362.2 328.8 360.1 329.2 358 329.6 355.8 330 353.7"/><polyline points="298 475.2 298.6 473.7 299.1 472.1 299.7 470.5 300.2 468.9 300.8 467.3 301.4 465.6 301.9 464 302.5 462.3 303 460.7 303.6 459 304.1 457.3 304.7 455.6 305.2 453.9 305.8 452.2 306.3 450.4 306.8 448.7 307.4 446.9 307.9 445.1 308.5 443.4 309 441.6 309.5 439.8 310 437.9 310.6 436.1 311.1 434.3 311.6 432.4 312.1 430.6 312.7 428.7 313.2 426.8 313.7 424.9 314.2 423 314.7 421.1 315.2 419.2"/><polyline points="330 15.78 330.4 16.4 330.8 17.04 331.2 17.7 331.6 18.37 332 19.06 332.4 19.77 332.8 20.49 333.2 21.23 333.6 21.99 334 22.77 334.3 23.56 334.7 24.38 335.1 25.2 335.5 26.05 335.8 26.91 336.2 27.79 336.5 28.68 336.9 29.6 337.2 30.52 337.6 31.47 337.9 32.43 338.2 33.41 338.6 34.41 338.9 35.42 339.2 36.45 339.5 37.49 339.8 38.55 340.2 39.63 340.5 40.72 340.8 41.83 341.1 42.95 341.4 44.09"/><polyline points="316.2 5.513 316.7 5.592 317.2 5.689 317.7 5.805 318.2 5.939 318.7 6.091 319.2 6.262 319.7 6.451 320.2 6.657 320.6 6.882 321.1 7.126 321.6 7.388 322.1 7.667 322.5 7.965 323 8.281 323.4 8.615 323.9 8.967 324.4 9.338 324.8 9.726 325.3 10.13 325.7 10.56 326.2 11 326.6 11.46 327 11.94 327.5 12.43 327.9 12.95 328.3 13.48 328.8 14.03 329.2 14.6 329.6 15.18 330 15.78"/><polyline points="279.5 12.46 279.5 13.05 279.5 13.66 279.5 14.29 279.5 14.94 279.5 15.6 279.5 16.28 279.5 16.98 279.5 17.7 279.5 18.43 279.5 19.19 279.5 19.96 279.5 20.74 279.5 21.54 279.5 22.36 279.5 23.2 279.5 24.06 279.5 24.93 279.5 25.82 279.5 26.73 279.5 27.65 279.5 28.59 279.5 29.55 279.5 30.52 279.5 31.51 279.5 32.52 279.5 33.54 279.5 34.58 279.5 35.64 279.5 36.71 279.5 37.79 279.5 38.9 279.5 40.02"/><polyline points="279.5 278.9 279.5 276.7 279.5 274.4 279.5 272.2 279.5 269.9 279.5 267.7 279.5 265.4 279.5 263.1 279.5 260.9 279.5 258.6 279.5 256.4 279.5 254.1 279.5 251.9 279.5 249.6 279.5 247.4 279.5 245.2 279.5 242.9 279.5 240.7 279.5 238.5 279.5 236.2 279.5 234 279.5 231.8 279.5 229.5 279.5 227.3 279.5 225.1 279.5 222.9 279.5 220.7 279.5 218.5 279.5 216.3 279.5 214.1 279.5 211.9 279.5 209.7 279.5 207.5"/><polyline points="279.5 83.86 279.5 82.27 279.5 80.7 279.5 79.13 279.5 77.58 279.5 76.05 279.5 74.52 279.5 73.02 279.5 71.52 279.5 70.04 279.5 68.57 279.5 67.12 279.5 65.68 279.5 64.26 279.5 62.85 279.5 61.45 279.5 60.07 279.5 58.7 279.5 57.35 279.5 56.01 279.5 54.69 279.5 53.38 279.5 52.09 279.5 50.81 279.5 49.55 279.5 48.31 279.5 47.08 279.5 45.86 279.5 44.66 279.5 43.48 279.5 42.31 279.5 41.16 279.5 40.02"/><polyline points="279.5 207.5 279.5 205.4 279.5 203.2 279.5 201 279.5 198.9 279.5 196.7 279.5 194.5 279.5 192.4 279.5 190.3 279.5 188.1 279.5 186 279.5 183.9 279.5 181.8 279.5 179.6 279.5 177.5 279.5 175.4 279.5 173.4 279.5 171.3 279.5 169.2 279.5 167.1 279.5 165.1 279.5 163 279.5 161 279.5 158.9 279.5 156.9 279.5 154.9 279.5 152.9 279.5 150.9 279.5 148.9 279.5 146.9 279.5 144.9 279.5 143 279.5 141"/><polyline points="279.5 141 279.5 139 279.5 137.1 279.5 135.2 279.5 133.3 279.5 131.3 279.5 129.4 279.5 127.5 279.5 125.7 279.5 123.8 279.5 121.9 279.5 120.1 279.5 118.2 279.5 116.4 279.5 114.6 279.5 112.8 279.5 111 279.5 109.2 279.5 107.4 279.5 105.7 279.5 103.9 279.5 102.2 279.5 100.5 279.5 98.74 279.5 97.04 279.5 95.35 279.5 93.67 279.5 92 279.5 90.35 279.5 88.71 279.5 87.08 279.5 85.46 279.5 83.86"/><polyline points="279.5 416.9 279.5 414.9 279.5 412.9 279.5 411 279.5 409 279.5 407 279.5 405 279.5 403 279.5 401 279.5 398.9 279.5 396.9 279.5 394.8 279.5 392.8 279.5 390.7 279.5 388.7 279.5 386.6 279.5 384.5 279.5 382.4 279.5 380.3 279.5 378.2 279.5 376.1 279.5 374 279.5 371.9 279.5 369.7 279.5 367.6 279.5 365.5 279.5 363.3 279.5 361.2 279.5 359 279.5 356.9 279.5 354.7 279.5 352.5 279.5 350.3"/><polyline points="279.5 474 279.5 472.4 279.5 470.8 279.5 469.2 279.5 467.5 279.5 465.9 279.5 464.2 279.5 462.5 279.5 460.8 279.5 459.1 279.5 457.4 279.5 455.7 279.5 453.9 279.5 452.2 279.5 450.4 279.5 448.7 279.5 446.9 279.5 445.1 279.5 443.3 279.5 441.5 279.5 439.6 279.5 437.8 279.5 435.9 279.5 434.1 279.5 432.2 279.5 430.3 279.5 428.4 279.5 426.5 279.5 424.6 279.5 422.7 279.5 420.8 279.5 418.8 279.5 416.9"/><polyline points="279.5 350.3 279.5 348.2 279.5 346 279.5 343.8 279.5 341.6 279.5 339.4 279.5 337.2 279.5 335 279.5 332.8 279.5 330.5 279.5 328.3 279.5 326.1 279.5 323.9 279.5 321.6 279.5 319.4 279.5 317.2 279.5 314.9 279.5 312.7 279.5 310.5 279.5 308.2 279.5 306 279.5 303.7 279.5 301.5 279.5 299.2 279.5 297 279.5 294.7 279.5 292.5 279.5 290.2 279.5 288 279.5 285.7 279.5 283.4 279.5 281.2 279.5 278.9"/><polyline points="279.5 516.7 279.5 515.6 279.5 514.4 279.5 513.2 279.5 512 279.5 510.8 279.5 509.6 279.5 508.3 279.5 507.1 279.5 505.8 279.5 504.5 279.5 503.2 279.5 501.9 279.5 500.5 279.5 499.2 279.5 497.8 279.5 496.4 279.5 495 279.5 493.6 279.5 492.2 279.5 490.8 279.5 489.3 279.5 487.8 279.5 486.3 279.5 484.9 279.5 483.3 279.5 481.8 279.5 480.3 279.5 478.7 279.5 477.2 279.5 475.6 279.5 474"/><polyline points="279.5 3.059 279.5 3.068 279.5 3.096 279.5 3.142 279.5 3.207 279.5 3.29 279.5 3.392 279.5 3.511 279.5 3.65 279.5 3.806 279.5 3.982 279.5 4.175 279.5 4.388 279.5 4.618 279.5 4.866 279.5 5.134 279.5 5.419 279.5 5.723 279.5 6.045 279.5 6.385 279.5 6.744 279.5 7.121 279.5 7.515 279.5 7.929 279.5 8.36 279.5 8.81 279.5 9.276 279.5 9.762 279.5 10.26 279.5 10.79 279.5 11.33 279.5 11.88 279.5 12.46"/><polyline points="229 353.7 228.6 351.5 228.2 349.3 227.8 347.2 227.4 345 227 342.8 226.6 340.7 226.2 338.5 225.8 336.3 225.4 334.1 225.1 331.9 224.7 329.7 224.3 327.5 223.9 325.3 223.6 323.1 223.2 320.9 222.9 318.7 222.5 316.5 222.2 314.2 221.8 312 221.5 309.8 221.1 307.6 220.8 305.3 220.5 303.1 220.1 300.9 219.8 298.7 219.5 296.4 219.2 294.2 218.9 292 218.6 289.7 218.3 287.5 218 285.2 217.7 283"/><polyline points="242.8 5.512 242.3 5.59 241.8 5.688 241.3 5.804 240.8 5.938 240.3 6.09 239.8 6.26 239.4 6.449 238.9 6.656 238.4 6.881 237.9 7.125 237.4 7.386 237 7.666 236.5 7.963 236 8.279 235.6 8.613 235.1 8.965 234.7 9.336 234.2 9.725 233.8 10.13 233.3 10.56 232.9 11 232.4 11.46 232 11.94 231.6 12.43 231.1 12.95 230.7 13.48 230.3 14.03 229.9 14.59 229.4 15.18 229 15.78"/><polyline points="243.8 419.2 243.3 417.3 242.8 415.4 242.3 413.4 241.8 411.5 241.3 409.5 240.8 407.5 240.3 405.6 239.8 403.6 239.4 401.6 238.9 399.6 238.4 397.5 237.9 395.5 237.4 393.5 237 391.5 236.5 389.4 236 387.4 235.6 385.3 235.1 383.2 234.7 381.2 234.2 379.1 233.8 377 233.3 374.9 232.9 372.8 232.4 370.7 232 368.6 231.6 366.5 231.1 364.4 230.7 362.2 230.3 360.1 229.9 358 229.4 355.8 229 353.7"/><polyline points="217.7 283 217.4 280.8 217.1 278.5 216.8 276.3 216.5 274.1 216.3 271.8 216 269.6 215.7 267.3 215.5 265.1 215.2 262.9 215 260.6 214.7 258.4 214.5 256.2 214.2 253.9 214 251.7 213.8 249.5 213.5 247.3 213.3 245 213.1 242.8 212.9 240.6 212.7 238.4 212.5 236.2 212.3 234 212.1 231.8 211.9 229.6 211.7 227.4 211.5 225.2 211.4 223 211.2 220.8 211 218.6 210.8 216.4 210.7 214.2 210.5 212.1"/><polyline points="261 475.2 260.5 473.7 259.9 472.1 259.3 470.5 258.8 468.9 258.2 467.3 257.7 465.6 257.1 464 256.6 462.3 256 460.7 255.5 459 254.9 457.3 254.4 455.6 253.8 453.9 253.3 452.2 252.7 450.4 252.2 448.7 251.6 446.9 251.1 445.1 250.6 443.4 250 441.6 249.5 439.8 249 437.9 248.5 436.1 247.9 434.3 247.4 432.4 246.9 430.6 246.4 428.7 245.8 426.8 245.3 424.9 244.8 423 244.3 421.1 243.8 419.2"/><polyline points="278.9 516.8 278.3 515.6 277.8 514.5 277.2 513.4 276.6 512.2 276 511 275.4 509.8 274.8 508.6 274.3 507.4 273.7 506.2 273.1 504.9 272.5 503.6 271.9 502.4 271.3 501.1 270.8 499.7 270.2 498.4 269.6 497.1 269 495.7 268.5 494.3 267.9 493 267.3 491.6 266.7 490.1 266.2 488.7 265.6 487.3 265 485.8 264.4 484.3 263.9 482.9 263.3 481.4 262.7 479.8 262.2 478.3 261.6 476.8 261 475.2"/><polyline points="217.7 44.09 218 42.95 218.3 41.82 218.6 40.72 218.9 39.62 219.2 38.55 219.5 37.49 219.8 36.44 220.1 35.42 220.5 34.4 220.8 33.41 221.1 32.43 221.5 31.47 221.8 30.52 222.2 29.59 222.5 28.68 222.9 27.79 223.2 26.91 223.6 26.05 223.9 25.2 224.3 24.37 224.7 23.56 225.1 22.77 225.4 21.99 225.8 21.23 226.2 20.49 226.6 19.77 227 19.06 227.4 18.37 227.8 17.7 228.2 17.04 228.6 16.4 229 15.78"/><polyline points="208.1 145.7 208.1 143.7 208.1 141.8 208.1 139.9 208.1 137.9 208.2 136 208.2 134.1 208.2 132.2 208.3 130.4 208.3 128.5 208.3 126.6 208.4 124.8 208.4 122.9 208.5 121.1 208.6 119.3 208.6 117.5 208.7 115.7 208.8 113.9 208.9 112.1 209 110.3 209.1 108.6 209.2 106.8 209.3 105.1 209.4 103.4 209.5 101.6 209.6 99.95 209.7 98.26 209.8 96.59 210 94.92 210.1 93.27 210.2 91.64 210.4 90.01 210.5 88.4"/><polyline points="210.5 88.4 210.7 86.8 210.8 85.21 211 83.64 211.2 82.08 211.4 80.53 211.5 79 211.7 77.48 211.9 75.97 212.1 74.48 212.3 73 212.5 71.53 212.7 70.08 212.9 68.64 213.1 67.22 213.3 65.8 213.5 64.41 213.8 63.03 214 61.66 214.2 60.31 214.5 58.97 214.7 57.65 215 56.34 215.2 55.04 215.5 53.77 215.7 52.5 216 51.25 216.3 50.02 216.5 48.8 216.8 47.6 217.1 46.42 217.4 45.24 217.7 44.09"/><polyline points="210.5 212.1 210.4 209.9 210.2 207.7 210.1 205.6 210 203.4 209.8 201.3 209.7 199.1 209.6 197 209.5 194.9 209.4 192.7 209.3 190.6 209.2 188.5 209.1 186.4 209 184.3 208.9 182.2 208.8 180.1 208.7 178 208.6 175.9 208.6 173.9 208.5 171.8 208.4 169.8 208.4 167.7 208.3 165.7 208.3 163.6 208.3 161.6 208.2 159.6 208.2 157.6 208.2 155.6 208.1 153.6 208.1 151.6 208.1 149.6 208.1 147.7 208.1 145.7"/><polyline points="210.5 426.1 209.6 424.3 208.6 422.4 207.6 420.6 206.7 418.7 205.7 416.9 204.7 415 203.8 413.1 202.9 411.2 201.9 409.3 201 407.4 200.1 405.5 199.2 403.6 198.2 401.6 197.3 399.7 196.4 397.7 195.5 395.8 194.6 393.8 193.7 391.8 192.9 389.8 192 387.8 191.1 385.8 190.3 383.8 189.4 381.8 188.5 379.8 187.7 377.8 186.9 375.7 186 373.7 185.2 371.6 184.4 369.6 183.6 367.5 182.8 365.5 182 363.4"/><polyline points="146.3 101.7 146.6 100.1 146.9 98.46 147.2 96.86 147.5 95.27 147.8 93.69 148.2 92.12 148.5 90.56 148.9 89.02 149.2 87.49 149.6 85.97 150 84.47 150.4 82.98 150.8 81.5 151.2 80.03 151.6 78.58 152.1 77.14 152.5 75.72 152.9 74.3 153.4 72.9 153.8 71.52 154.3 70.15 154.8 68.8 155.3 67.45 155.8 66.12 156.3 64.81 156.8 63.51 157.3 62.23 157.8 60.96 158.4 59.7 158.9 58.46 159.5 57.23 160 56.02"/><polyline points="243.8 478.8 242.7 477.3 241.6 475.9 240.5 474.4 239.5 472.9 238.4 471.4 237.3 469.9 236.2 468.3 235.2 466.8 234.1 465.2 233 463.6 232 462.1 230.9 460.5 229.9 458.8 228.8 457.2 227.8 455.6 226.7 453.9 225.7 452.3 224.6 450.6 223.6 448.9 222.6 447.3 221.5 445.5 220.5 443.8 219.5 442.1 218.5 440.4 217.5 438.6 216.5 436.9 215.5 435.1 214.5 433.3 213.5 431.5 212.5 429.7 211.5 427.9 210.5 426.1"/><polyline points="278.4 516.9 277.2 515.9 276.1 514.8 275 513.8 273.9 512.8 272.7 511.7 271.6 510.6 270.5 509.5 269.4 508.4 268.2 507.3 267.1 506.1 266 505 264.9 503.8 263.7 502.6 262.6 501.4 261.5 500.2 260.4 499 259.3 497.7 258.2 496.5 257 495.2 255.9 493.9 254.8 492.6 253.7 491.3 252.6 490 251.5 488.6 250.4 487.2 249.3 485.9 248.2 484.5 247.1 483.1 246 481.7 244.9 480.2 243.8 478.8"/><polyline points="182 363.4 181.2 361.3 180.4 359.2 179.6 357.2 178.8 355.1 178 353 177.3 350.9 176.5 348.8 175.8 346.6 175 344.5 174.3 342.4 173.6 340.3 172.9 338.2 172.2 336 171.4 333.9 170.7 331.7 170.1 329.6 169.4 327.5 168.7 325.3 168 323.2 167.4 321 166.7 318.8 166.1 316.7 165.4 314.5 164.8 312.3 164.2 310.2 163.6 308 163 305.8 162.4 303.7 161.8 301.5 161.2 299.3 160.6 297.1 160 294.9"/><polyline points="160 56.02 160.6 54.83 161.2 53.64 161.8 52.48 162.4 51.33 163 50.19 163.6 49.07 164.2 47.96 164.8 46.87 165.4 45.8 166.1 44.74 166.7 43.7 167.4 42.67 168 41.66 168.7 40.66 169.4 39.68 170.1 38.72 170.8 37.77 171.5 36.84 172.2 35.92 172.9 35.02 173.6 34.14 174.3 33.28 175 32.43 175.8 31.59 176.5 30.78 177.3 29.98 178.1 29.19 178.8 28.42 179.6 27.68 180.4 26.94 181.2 26.22 182 25.52"/><polyline points="141.6 159.5 141.6 157.5 141.6 155.6 141.6 153.6 141.6 151.7 141.7 149.8 141.7 147.9 141.8 146 141.8 144.1 141.9 142.2 142 140.4 142.1 138.5 142.2 136.6 142.3 134.8 142.5 133 142.6 131.1 142.7 129.3 142.9 127.5 143 125.7 143.2 123.9 143.4 122.2 143.6 120.4 143.8 118.6 144 116.9 144.2 115.2 144.4 113.4 144.7 111.7 144.9 110 145.2 108.3 145.4 106.7 145.7 105 146 103.4 146.3 101.7"/><polyline points="160 294.9 159.5 292.8 158.9 290.6 158.4 288.4 157.8 286.2 157.3 284 156.8 281.8 156.3 279.6 155.8 277.5 155.3 275.3 154.8 273.1 154.3 270.9 153.8 268.7 153.4 266.5 152.9 264.4 152.5 262.2 152.1 260 151.6 257.8 151.2 255.6 150.8 253.5 150.4 251.3 150 249.1 149.6 246.9 149.2 244.8 148.9 242.6 148.5 240.4 148.2 238.3 147.8 236.1 147.5 234 147.2 231.8 146.9 229.7 146.5 227.5 146.2 225.4"/><polyline points="182 25.52 182.8 24.84 183.6 24.18 184.4 23.53 185.2 22.9 186 22.28 186.9 21.69 187.7 21.11 188.5 20.54 189.4 20 190.3 19.47 191.1 18.96 192 18.47 192.9 17.99 193.7 17.53 194.6 17.09 195.5 16.67 196.4 16.26 197.3 15.87 198.2 15.5 199.2 15.15 200.1 14.82 201 14.5 201.9 14.2 202.9 13.92"/><polyline points="146.2 225.4 146 223.2 145.7 221.1 145.4 219 145.2 216.8 144.9 214.7 144.7 212.6 144.4 210.5 144.2 208.4 144 206.3 143.8 204.2 143.6 202.1 143.4 200 143.2 197.9 143 195.8 142.9 193.8 142.7 191.7 142.6 189.6 142.5 187.6 142.3 185.5 142.2 183.5 142.1 181.4 142 179.4 141.9 177.4 141.8 175.4 141.8 173.3 141.7 171.3 141.7 169.3 141.6 167.4 141.6 165.4 141.6 163.4 141.6 161.4 141.6 159.5"/><polyline points="110.5 313.9 109.8 311.8 109 309.7 108.2 307.6 107.4 305.5 106.7 303.4 106 301.3 105.2 299.2 104.5 297.1 103.8 295 103.1 292.9 102.5 290.8 101.8 288.7 101.1 286.6 100.5 284.5 99.87 282.4 99.25 280.3 98.65 278.1 98.06 276 97.48 273.9 96.91 271.8 96.35 269.7 95.81 267.6 95.28 265.5 94.76 263.4 94.25 261.3 93.75 259.2 93.27 257.1 92.8 254.9 92.35 252.8 91.9 250.8 91.47 248.7 91.05 246.6"/><polyline points="141.5 378.9 140.4 377 139.3 375 138.2 373 137.1 371.1 136 369.1 134.9 367.1 133.9 365.1 132.8 363.1 131.8 361.1 130.7 359.1 129.7 357.1 128.7 355.1 127.7 353.1 126.7 351.1 125.7 349 124.7 347 123.8 345 122.8 342.9 121.9 340.9 120.9 338.8 120 336.8 119.1 334.7 118.2 332.6 117.3 330.6 116.4 328.5 115.5 326.4 114.7 324.4 113.8 322.3 113 320.2 112.2 318.1 111.3 316 110.5 313.9"/><polyline points="182 437.1 180.6 435.4 179.2 433.7 177.8 432 176.5 430.3 175.1 428.6 173.8 426.9 172.4 425.1 171.1 423.4 169.8 421.6 168.5 419.9 167.2 418.1 165.9 416.3 164.6 414.5 163.3 412.7 162 410.9 160.7 409.1 159.5 407.3 158.2 405.4 157 403.6 155.7 401.7 154.5 399.9 153.3 398 152.1 396.1 150.9 394.2 149.7 392.4 148.5 390.5 147.3 388.5 146.1 386.6 145 384.7 143.8 382.8 142.7 380.8 141.5 378.9"/><polyline points="277.9 517 276.3 516.2 274.7 515.4 273.1 514.5 271.5 513.7 269.9 512.8 268.3 511.9 266.7 511 265.2 510 263.6 509.1 262 508.1 260.4 507.1 258.8 506.1 257.2 505.1 255.6 504.1 254 503.1 252.5 502 250.9 501 249.3 499.9 247.7 498.8 246.2 497.7 244.6 496.5 243 495.4 241.4 494.2 239.9 493.1 238.3 491.9 236.8 490.7 235.2 489.5 233.7 488.2 232.1 487 230.6 485.7 229 484.5"/><polyline points="229 484.5 227.5 483.2 225.9 481.9 224.4 480.6 222.9 479.2 221.3 477.9 219.8 476.6 218.3 475.2 216.8 473.8 215.3 472.4 213.8 471 212.3 469.6 210.8 468.2 209.3 466.7 207.8 465.3 206.3 463.8 204.8 462.3 203.4 460.8 201.9 459.3 200.4 457.8 199 456.3 197.5 454.8 196.1 453.2 194.6 451.6 193.2 450.1 191.8 448.5 190.4 446.9 188.9 445.3 187.5 443.7 186.1 442 184.7 440.4 183.3 438.7 182 437.1"/><polyline points="91.05 246.6 90.64 244.5 90.25 242.4 89.87 240.3 89.5 238.2 89.14 236.1 88.8 234 88.47 232 88.15 229.9 87.85 227.8 87.55 225.7 87.27 223.7 87.01 221.6 86.75 219.6 86.51 217.5 86.29 215.5 86.07 213.4 85.87 211.4 85.68 209.3 85.5 207.3 85.34 205.3 85.19 203.3 85.05 201.2 84.93 199.2 84.82 197.2 84.72 195.2 84.64 193.2 84.56 191.3 84.51 189.3 84.46 187.3 84.43 185.3 84.41 183.4 84.4 181.4"/><polyline points="110.5 75.01 111.3 73.72 112.2 72.45 113 71.19 113.8 69.94 114.7 68.71 115.5 67.5 116.4 66.29 117.3 65.1 118.2 63.93 119.1 62.77 120 61.62 120.9 60.49 121.9 59.37 122.8 58.27 123.8 57.18 124.7 56.11 125.7 55.05 126.7 54.01 127.7 52.98 128.7 51.97 129.7 50.98 130.7 49.99 131.8 49.03 132.8 48.08 133.9 47.14 134.9 46.22 136 45.32 137.1 44.43 138.2 43.55 139.3 42.7 140.4 41.85 141.5 41.03"/><polyline points="84.4 181.4 84.41 179.4 84.43 177.5 84.46 175.6 84.51 173.6 84.56 171.7 84.64 169.8 84.72 167.9 84.82 166 84.93 164.1 85.05 162.2 85.19 160.3 85.34 158.5 85.5 156.6 85.68 154.7 85.87 152.9 86.07 151 86.29 149.2 86.51 147.4 86.75 145.6 87.01 143.8 87.27 142 87.55 140.2 87.85 138.4 88.15 136.7 88.47 134.9 88.8 133.2 89.14 131.4 89.5 129.7 89.87 128 90.25 126.3 90.64 124.6 91.05 122.9"/><polyline points="141.5 41.03 142.7 40.22 143.8 39.42 145 38.65 146.1 37.88 147.3 37.14 148.5 36.41 149.7 35.7 150.9 35 152.1 34.32 153.3 33.65 154.5 33 155.7 32.37"/><polyline points="91.05 122.9 91.47 121.2 91.9 119.5 92.35 117.9 92.8 116.2 93.27 114.6 93.75 113 94.25 111.4 94.76 109.8 95.28 108.2 95.81 106.6 96.35 105 96.91 103.5 97.48 102 98.06 100.4 98.65 98.9 99.25 97.4 99.87 95.9 100.5 94.42 101.1 92.95 101.8 91.49 102.5 90.04 103.1 88.61 103.8 87.19 104.5 85.79 105.2 84.39 106 83.01 106.7 81.65 107.4 80.29 108.2 78.95 109 77.62 109.7 76.31 110.5 75.01"/><polyline points="261 544.2 261.6 544.3 262.2 544.3 262.7 544.4 263.3 544.5 263.9 544.5 264.4 544.6 265 544.7 265.6 544.7 266.2 544.8 266.7 544.8 267.3 544.9 267.9 544.9 268.5 545 269 545 269.6 545.1 270.2 545.1 270.8 545.1 271.3 545.2 271.9 545.2 272.5 545.2 273.1 545.3 273.7 545.3 274.3 545.3 274.8 545.3 275.4 545.3 276 545.4 276.6 545.4 277.2 545.4 277.8 545.4 278.3 545.4 278.9 545.4 279.5 545.4"/><polyline points="243.8 540.6 244.3 540.8 244.8 540.9 245.3 541.1 245.8 541.2 246.4 541.3 246.9 541.5 247.4 541.6 247.9 541.7 248.4 541.9 249 542 249.5 542.1 250 542.2 250.6 542.3 251.1 542.5 251.6 542.6 252.2 542.7 252.7 542.8 253.3 542.9 253.8 543 254.4 543.1 254.9 543.2 255.5 543.3 256 543.4 256.6 543.5 257.1 543.6 257.7 543.7 258.2 543.8 258.8 543.9 259.3 544 259.9 544 260.5 544.1 261 544.2"/><polyline points="348.5 500.5 348.3 500.2 348.2 499.9 348 499.6 347.8 499.3 347.7 499.1 347.5 498.8 347.3 498.5 347.1 498.2 346.9 498 346.7 497.7 346.5 497.4 346.3 497.1 346.1 496.9 345.9 496.6 345.7 496.3 345.5 496 345.3 495.8 345 495.5 344.8 495.2 344.6 495 344.3 494.7 344.1 494.4 343.8 494.2 343.6 493.9 343.3 493.7 343 493.4 342.8 493.1 342.5 492.9 342.2 492.6 341.9 492.4 341.6 492.1 341.4 491.9"/><polyline points="229 535 229.4 535.2 229.8 535.4 230.3 535.6 230.7 535.8 231.1 536 231.6 536.2 232 536.4 232.4 536.5 232.9 536.7 233.3 536.9 233.8 537.1 234.2 537.3 234.7 537.5 235.1 537.7 235.6 537.9 236 538 236.5 538.2 237 538.4 237.4 538.6 237.9 538.7 238.4 538.9 238.9 539.1 239.4 539.2 239.8 539.4 240.3 539.6 240.8 539.7 241.3 539.9 241.8 540 242.3 540.2 242.8 540.3 243.3 540.5 243.8 540.6"/><polyline points="217.7 527.6 218 527.8 218.3 528.1 218.6 528.3 218.9 528.6 219.2 528.8 219.5 529.1 219.8 529.3 220.1 529.5 220.5 529.8 220.8 530 221.1 530.3 221.5 530.5 221.8 530.7 222.1 531 222.5 531.2 222.9 531.4 223.2 531.7 223.6 531.9 223.9 532.1 224.3 532.4 224.7 532.6 225.1 532.8 225.4 533 225.8 533.2 226.2 533.5 226.6 533.7 227 533.9 227.4 534.1 227.8 534.3 228.2 534.5 228.6 534.7 229 535"/><polyline points="350.9 509.7 350.9 509.4 350.9 509.1 350.9 508.8 350.9 508.5 350.9 508.2 350.8 508 350.8 507.7 350.8 507.4 350.7 507.1 350.7 506.8 350.6 506.5 350.6 506.2 350.5 505.9 350.5 505.6 350.4 505.3 350.3 505 350.2 504.8 350.1 504.5 350.1 504.2 350 503.9 349.9 503.6 349.8 503.3 349.7 503 349.5 502.7 349.4 502.5 349.3 502.2 349.2 501.9 349.1 501.6 348.9 501.3 348.8 501 348.6 500.7 348.5 500.5"/><polyline points="315.2 540.6 315.7 540.5 316.2 540.3 316.7 540.2 317.2 540 317.7 539.9 318.2 539.7 318.7 539.6 319.2 539.4 319.7 539.2 320.1 539.1 320.6 538.9 321.1 538.7 321.6 538.6 322 538.4 322.5 538.2 323 538 323.4 537.9 323.9 537.7 324.4 537.5 324.8 537.3 325.3 537.1 325.7 536.9 326.2 536.7 326.6 536.5 327 536.4 327.5 536.2 327.9 536 328.3 535.8 328.7 535.6 329.2 535.4 329.6 535.2 330 535"/><polyline points="279.5 545.4 280.1 545.4 280.7 545.4 281.3 545.4 281.8 545.4 282.4 545.4 283 545.4 283.6 545.3 284.2 545.3 284.8 545.3 285.3 545.3 285.9 545.3 286.5 545.2 287.1 545.2 287.7 545.2 288.2 545.1 288.8 545.1 289.4 545.1 290 545 290.6 545 291.1 544.9 291.7 544.9 292.3 544.8 292.9 544.8 293.4 544.7 294 544.7 294.6 544.6 295.2 544.5 295.7 544.5 296.3 544.4 296.9 544.3 297.4 544.3 298 544.2"/><polyline points="341.4 491.9 341.1 491.6 340.8 491.4 340.5 491.1 340.2 490.9 339.8 490.6 339.5 490.4 339.2 490.1 338.9 489.9 338.6 489.6 338.2 489.4 337.9 489.2 337.6 488.9 337.2 488.7 336.9 488.4 336.5 488.2 336.2 488 335.8 487.7 335.4 487.5 335.1 487.3 334.7 487.1 334.3 486.8 334 486.6 333.6 486.4 333.2 486.2 332.8 485.9 332.4 485.7 332 485.5 331.6 485.3 331.2 485.1 330.8 484.9 330.4 484.7 330 484.5"/><polyline points="341.4 527.6 341.6 527.3 341.9 527 342.2 526.8 342.5 526.5 342.8 526.3 343 526 343.3 525.8 343.6 525.5 343.8 525.2 344.1 525 344.3 524.7 344.6 524.4 344.8 524.2 345 523.9 345.3 523.6 345.5 523.4 345.7 523.1 345.9 522.8 346.1 522.6 346.3 522.3 346.5 522 346.7 521.7 346.9 521.5 347.1 521.2 347.3 520.9 347.5 520.6 347.7 520.4 347.8 520.1 348 519.8 348.2 519.5 348.3 519.2 348.5 518.9"/><polyline points="348.5 518.9 348.6 518.7 348.8 518.4 348.9 518.1 349.1 517.8 349.2 517.5 349.3 517.2 349.4 517 349.5 516.7 349.7 516.4 349.8 516.1 349.9 515.8 350 515.5 350.1 515.2 350.1 514.9 350.2 514.7 350.3 514.4 350.4 514.1 350.5 513.8 350.5 513.5 350.6 513.2 350.6 512.9 350.7 512.6 350.7 512.3 350.8 512 350.8 511.8 350.8 511.5 350.9 511.2 350.9 510.9 350.9 510.6 350.9 510.3 350.9 510 350.9 509.7"/><polyline points="298 544.2 298.6 544.1 299.1 544 299.7 544 300.2 543.9 300.8 543.8 301.4 543.7 301.9 543.6 302.5 543.5 303 543.4 303.6 543.3 304.1 543.2 304.7 543.1 305.2 543 305.8 542.9 306.3 542.8 306.8 542.7 307.4 542.6 307.9 542.5 308.4 542.3 309 542.2 309.5 542.1 310 542 310.6 541.9 311.1 541.7 311.6 541.6 312.1 541.5 312.7 541.3 313.2 541.2 313.7 541.1 314.2 540.9 314.7 540.8 315.2 540.6"/><polyline points="243.8 478.8 243.3 478.9 242.8 479.1 242.3 479.2 241.8 479.4 241.3 479.5 240.8 479.7 240.3 479.9 239.8 480 239.3 480.2 238.9 480.4 238.4 480.5 237.9 480.7 237.4 480.9 237 481 236.5 481.2 236 481.4 235.6 481.6 235.1 481.7 234.7 481.9 234.2 482.1 233.8 482.3 233.3 482.5 232.9 482.7 232.4 482.9 232 483.1 231.5 483.3 231.1 483.5 230.7 483.6 230.3 483.9 229.8 484.1 229.4 484.3 229 484.5"/><polyline points="279.5 474 278.9 474 278.3 474 277.8 474 277.2 474 276.6 474 276 474 275.4 474.1 274.8 474.1 274.3 474.1 273.7 474.1 273.1 474.1 272.5 474.2 271.9 474.2 271.3 474.2 270.8 474.3 270.2 474.3 269.6 474.4 269 474.4 268.5 474.4 267.9 474.5 267.3 474.5 266.7 474.6 266.2 474.6 265.6 474.7 265 474.8 264.4 474.8 263.9 474.9 263.3 474.9 262.7 475 262.2 475.1 261.6 475.1 261 475.2"/><polyline points="298 475.2 297.4 475.1 296.9 475.1 296.3 475 295.7 474.9 295.2 474.9 294.6 474.8 294 474.8 293.4 474.7 292.9 474.6 292.3 474.6 291.7 474.5 291.1 474.5 290.6 474.4 290 474.4 289.4 474.4 288.8 474.3 288.3 474.3 287.7 474.2 287.1 474.2 286.5 474.2 285.9 474.1 285.3 474.1 284.8 474.1 284.2 474.1 283.6 474.1 283 474 282.4 474 281.8 474 281.3 474 280.7 474 280.1 474 279.5 474"/><polyline points="217.7 491.9 218 491.6 218.3 491.4 218.6 491.1 218.9 490.9 219.2 490.6 219.5 490.4 219.8 490.1 220.1 489.9 220.5 489.6 220.8 489.4 221.1 489.2 221.5 488.9 221.8 488.7 222.1 488.4 222.5 488.2 222.9 488 223.2 487.7 223.6 487.5 223.9 487.3 224.3 487.1 224.7 486.8 225.1 486.6 225.4 486.4 225.8 486.2 226.2 485.9 226.6 485.7 227 485.5 227.4 485.3 227.8 485.1 228.2 484.9 228.6 484.7 229 484.5"/><polyline points="210.5 518.9 210.7 519.2 210.8 519.5 211 519.8 211.2 520.1 211.3 520.4 211.5 520.6 211.7 520.9 211.9 521.2 212.1 521.5 212.3 521.7 212.5 522 212.7 522.3 212.9 522.6 213.1 522.8 213.3 523.1 213.5 523.4 213.8 523.6 214 523.9 214.2 524.2 214.5 524.4 214.7 524.7 215 525 215.2 525.2 215.5 525.5 215.7 525.8 216 526 216.3 526.3 216.5 526.5 216.8 526.8 217.1 527.1 217.4 527.3 217.7 527.6"/><polyline points="261 475.2 260.5 475.3 259.9 475.4 259.3 475.5 258.8 475.5 258.2 475.6 257.7 475.7 257.1 475.8 256.6 475.9 256 476 255.5 476.1 254.9 476.2 254.4 476.3 253.8 476.4 253.3 476.5 252.7 476.6 252.2 476.7 251.6 476.8 251.1 477 250.6 477.1 250 477.2 249.5 477.3 249 477.4 248.4 477.6 247.9 477.7 247.4 477.8 246.9 477.9 246.4 478.1 245.8 478.2 245.3 478.4 244.8 478.5 244.3 478.6 243.8 478.8"/><polyline points="315.2 478.8 314.7 478.6 314.2 478.5 313.7 478.4 313.2 478.2 312.7 478.1 312.1 477.9 311.6 477.8 311.1 477.7 310.6 477.6 310 477.4 309.5 477.3 309 477.2 308.4 477.1 307.9 477 307.4 476.8 306.8 476.7 306.3 476.6 305.8 476.5 305.2 476.4 304.7 476.3 304.1 476.2 303.6 476.1 303 476 302.5 475.9 301.9 475.8 301.4 475.7 300.8 475.6 300.2 475.5 299.7 475.5 299.1 475.4 298.6 475.3 298 475.2"/><polyline points="217.7 491.9 217.4 492.1 217.1 492.4 216.8 492.6 216.5 492.9 216.3 493.1 216 493.4 215.7 493.7 215.5 493.9 215.2 494.2 215 494.4 214.7 494.7 214.5 495 214.2 495.2 214 495.5 213.8 495.8 213.5 496 213.3 496.3 213.1 496.6 212.9 496.9 212.7 497.1 212.5 497.4 212.3 497.7 212.1 498 211.9 498.2 211.7 498.5 211.5 498.8 211.3 499.1 211.2 499.3 211 499.6 210.8 499.9 210.7 500.2 210.5 500.5"/><polyline points="330 484.5 329.6 484.3 329.2 484.1 328.8 483.9 328.3 483.6 327.9 483.5 327.5 483.3 327 483.1 326.6 482.9 326.2 482.7 325.7 482.5 325.3 482.3 324.8 482.1 324.4 481.9 323.9 481.7 323.4 481.6 323 481.4 322.5 481.2 322 481 321.6 480.9 321.1 480.7 320.6 480.5 320.1 480.4 319.7 480.2 319.2 480 318.7 479.9 318.2 479.7 317.7 479.5 317.2 479.4 316.7 479.2 316.2 479.1 315.7 478.9 315.2 478.8"/><polyline points="208.1 509.7 208.1 510 208.1 510.3 208.1 510.6 208.1 510.9 208.2 511.2 208.2 511.5 208.2 511.7 208.2 512 208.3 512.3 208.3 512.6 208.4 512.9 208.4 513.2 208.5 513.5 208.6 513.8 208.6 514.1 208.7 514.4 208.8 514.7 208.9 514.9 209 515.2 209 515.5 209.1 515.8 209.2 516.1 209.4 516.4 209.5 516.7 209.6 517 209.7 517.2 209.8 517.5 210 517.8 210.1 518.1 210.2 518.4 210.4 518.7 210.5 518.9"/><polyline points="210.5 500.5 210.4 500.7 210.2 501 210.1 501.3 210 501.6 209.8 501.9 209.7 502.2 209.6 502.5 209.5 502.7 209.4 503 209.2 503.3 209.1 503.6 209 503.9 209 504.2 208.9 504.5 208.8 504.8 208.7 505 208.6 505.3 208.6 505.6 208.5 505.9 208.4 506.2 208.4 506.5 208.3 506.8 208.3 507.1 208.2 507.4 208.2 507.7 208.2 508 208.2 508.2 208.1 508.5 208.1 508.8 208.1 509.1 208.1 509.4 208.1 509.7"/><polyline points="330 535 330.4 534.7 330.8 534.5 331.2 534.3 331.6 534.1 332 533.9 332.4 533.7 332.8 533.5 333.2 533.2 333.6 533 334 532.8 334.3 532.6 334.7 532.4 335.1 532.1 335.4 531.9 335.8 531.7 336.2 531.4 336.5 531.2 336.9 531 337.2 530.7 337.6 530.5 337.9 530.3 338.2 530 338.6 529.8 338.9 529.5 339.2 529.3 339.5 529.1 339.8 528.8 340.1 528.6 340.5 528.3 340.8 528.1 341.1 527.8 341.4 527.6"/><polyline points="141.6 485.8 141.6 486.4 141.6 487 141.6 487.5 141.6 488.1 141.7 488.7 141.7 489.2 141.8 489.8 141.8 490.4 141.9 490.9 142 491.5 142.1 492 142.2 492.6 142.3 493.2 142.5 493.7 142.6 494.3 142.7 494.8 142.9 495.4 143 496 143.2 496.5 143.4 497.1 143.6 497.6 143.8 498.2 144 498.7 144.2 499.3 144.4 499.9 144.7 500.4 144.9 501 145.2 501.5 145.4 502.1 145.7 502.6 146 503.1 146.3 503.7"/><polyline points="146.3 468 146 468.5 145.7 469.1 145.4 469.6 145.2 470.2 144.9 470.7 144.7 471.3 144.4 471.8 144.2 472.4 144 472.9 143.8 473.5 143.6 474 143.4 474.6 143.2 475.2 143 475.7 142.9 476.3 142.7 476.8 142.6 477.4 142.5 478 142.3 478.5 142.2 479.1 142.1 479.6 142 480.2 141.9 480.8 141.8 481.3 141.8 481.9 141.7 482.5 141.7 483 141.6 483.6 141.6 484.1 141.6 484.7 141.6 485.3 141.6 485.8"/><polyline points="377.1 534.6 377.9 534.2 378.6 533.8 379.4 533.4 380.2 533 381 532.6 381.7 532.2 382.5 531.7 383.2 531.3 384 530.9 384.7 530.5 385.4 530 386.1 529.6 386.9 529.2 387.6 528.7 388.3 528.3 389 527.8 389.6 527.4 390.3 526.9 391 526.5 391.6 526 392.3 525.6 392.9 525.1 393.6 524.6 394.2 524.2 394.8 523.7 395.5 523.2 396.1 522.7 396.7 522.3 397.3 521.8 397.8 521.3 398.4 520.8 399 520.3"/><polyline points="243.8 419.2 242.7 419.4 241.6 419.5 240.5 419.7 239.5 419.8 238.4 420 237.3 420.2 236.2 420.4 235.2 420.5 234.1 420.7 233 420.9 232 421.1 230.9 421.3 229.9 421.5 228.8 421.7 227.8 421.9 226.7 422.1 225.7 422.3 224.6 422.6 223.6 422.8 222.6 423 221.5 423.3 220.5 423.5 219.5 423.7 218.5 424 217.5 424.2 216.5 424.5 215.5 424.8 214.5 425 213.5 425.3 212.5 425.6 211.5 425.8 210.5 426.1"/><polyline points="348.5 545.6 349.5 545.3 350.4 545 351.4 544.7 352.4 544.4 353.3 544.1 354.3 543.8 355.2 543.5 356.2 543.2 357.1 542.9 358 542.5 358.9 542.2 359.9 541.9 360.8 541.6 361.7 541.2 362.6 540.9 363.5 540.6 364.4 540.2 365.3 539.9 366.2 539.5 367 539.2 367.9 538.8 368.8 538.4 369.6 538.1 370.5 537.7 371.3 537.3 372.2 536.9 373 536.6 373.8 536.2 374.6 535.8 375.4 535.4 376.3 535 377.1 534.6"/><polyline points="279.5 416.9 278.4 416.9 277.3 416.9 276.1 416.9 275 416.9 273.9 416.9 272.7 417 271.6 417 270.5 417 269.4 417.1 268.2 417.1 267.1 417.2 266 417.2 264.9 417.3 263.7 417.3 262.6 417.4 261.5 417.5 260.4 417.5 259.3 417.6 258.2 417.7 257 417.8 255.9 417.9 254.8 418 253.7 418.1 252.6 418.2 251.5 418.3 250.4 418.4 249.3 418.5 248.2 418.7 247.1 418.8 246 418.9 244.9 419.1 243.8 419.2"/><polyline points="412.8 503.7 413 503.1 413.3 502.6 413.6 502.1 413.9 501.5 414.1 501 414.4 500.4 414.6 499.8 414.8 499.3 415 498.7 415.2 498.2 415.4 497.6 415.6 497.1 415.8 496.5 416 496 416.1 495.4 416.3 494.8 416.4 494.3 416.6 493.7 416.7 493.2 416.8 492.6 416.9 492 417 491.5 417.1 490.9 417.2 490.4 417.2 489.8 417.3 489.2 417.3 488.7 417.4 488.1 417.4 487.5 417.4 487 417.5 486.4 417.5 485.8"/><polyline points="279.5 554.8 280.6 554.8 281.8 554.8 282.9 554.8 284 554.8 285.2 554.8 286.3 554.7 287.4 554.7 288.5 554.7 289.7 554.6 290.8 554.6 291.9 554.5 293 554.5 294.2 554.4 295.3 554.4 296.4 554.3 297.5 554.2 298.6 554.1 299.8 554.1 300.9 554 302 553.9 303.1 553.8 304.2 553.7 305.3 553.6 306.4 553.5 307.5 553.4 308.6 553.3 309.7 553.1 310.8 553 311.9 552.9 313 552.7 314.1 552.6 315.2 552.5"/><polyline points="315.2 419.2 314.1 419.1 313 418.9 311.9 418.8 310.8 418.7 309.7 418.6 308.6 418.4 307.5 418.3 306.4 418.2 305.3 418.1 304.2 418 303.1 417.9 302 417.8 300.9 417.7 299.8 417.6 298.6 417.5 297.5 417.5 296.4 417.4 295.3 417.3 294.2 417.3 293 417.2 291.9 417.2 290.8 417.1 289.7 417.1 288.5 417 287.4 417 286.3 417 285.2 416.9 284 416.9 282.9 416.9 281.8 416.9 280.6 416.9 279.5 416.9"/><polyline points="182 437.1 182.8 436.7 183.6 436.3 184.4 435.9 185.2 435.5 186 435.1 186.9 434.7 187.7 434.4 188.5 434 189.4 433.6 190.3 433.2 191.1 432.9 192 432.5 192.9 432.2 193.7 431.8 194.6 431.5 195.5 431.1 196.4 430.8 197.3 430.4 198.2 430.1 199.2 429.8 200.1 429.5 201 429.1 201.9 428.8 202.9 428.5 203.8 428.2 204.7 427.9 205.7 427.6 206.7 427.3 207.6 427 208.6 426.7 209.6 426.4 210.5 426.1"/><polyline points="399 520.3 399.5 519.8 400.1 519.3 400.6 518.8 401.2 518.4 401.7 517.9 402.2 517.4 402.7 516.8 403.2 516.3 403.7 515.8 404.2 515.3 404.7 514.8 405.2 514.3 405.6 513.8 406.1 513.3 406.5 512.8 407 512.2 407.4 511.7 407.8 511.2 408.2 510.7 408.6 510.1 409 509.6 409.4 509.1 409.8 508.5 410.1 508 410.5 507.5 410.8 506.9 411.2 506.4 411.5 505.9 411.8 505.3 412.2 504.8 412.5 504.2 412.8 503.7"/><polyline points="348.5 426.1 347.5 425.8 346.5 425.6 345.5 425.3 344.5 425 343.5 424.8 342.5 424.5 341.5 424.2 340.5 424 339.5 423.7 338.5 423.5 337.5 423.3 336.4 423 335.4 422.8 334.4 422.6 333.3 422.3 332.3 422.1 331.3 421.9 330.2 421.7 329.2 421.5 328.1 421.3 327 421.1 326 420.9 324.9 420.7 323.9 420.5 322.8 420.4 321.7 420.2 320.6 420 319.6 419.8 318.5 419.7 317.4 419.5 316.3 419.4 315.2 419.2"/><polyline points="412.8 468 412.5 467.4 412.2 466.9 411.8 466.4 411.5 465.8 411.2 465.3 410.8 464.7 410.5 464.2 410.1 463.7 409.8 463.1 409.4 462.6 409 462.1 408.6 461.5 408.2 461 407.8 460.5 407.4 460 407 459.4 406.5 458.9 406.1 458.4 405.6 457.9 405.2 457.4 404.7 456.9 404.2 456.4 403.7 455.8 403.2 455.3 402.7 454.8 402.2 454.3 401.7 453.8 401.2 453.3 400.6 452.8 400.1 452.3 399.5 451.8 399 451.4"/><polyline points="417.5 485.8 417.5 485.3 417.4 484.7 417.4 484.1 417.4 483.6 417.3 483 417.3 482.5 417.2 481.9 417.2 481.3 417.1 480.8 417 480.2 416.9 479.6 416.8 479.1 416.7 478.5 416.6 478 416.4 477.4 416.3 476.8 416.1 476.3 416 475.7 415.8 475.2 415.6 474.6 415.4 474.1 415.2 473.5 415 472.9 414.8 472.4 414.6 471.8 414.4 471.3 414.1 470.7 413.9 470.2 413.6 469.6 413.3 469.1 413.1 468.5 412.8 468"/><polyline points="399 451.4 398.4 450.9 397.8 450.4 397.3 449.9 396.7 449.4 396.1 448.9 395.5 448.5 394.8 448 394.2 447.5 393.6 447.1 392.9 446.6 392.3 446.1 391.6 445.7 391 445.2 390.3 444.8 389.6 444.3 389 443.9 388.3 443.4 387.6 443 386.9 442.5 386.1 442.1 385.4 441.7 384.7 441.2 384 440.8 383.2 440.4 382.5 439.9 381.7 439.5 381 439.1 380.2 438.7 379.4 438.3 378.6 437.9 377.9 437.5 377.1 437.1"/><polyline points="377.1 437.1 376.3 436.7 375.4 436.3 374.6 435.9 373.8 435.5 373 435.1 372.2 434.7 371.3 434.4 370.5 434 369.6 433.6 368.8 433.3 367.9 432.9 367 432.5 366.2 432.2 365.3 431.8 364.4 431.5 363.5 431.1 362.6 430.8 361.7 430.4 360.8 430.1 359.9 429.8 358.9 429.5 358 429.1 357.1 428.8 356.2 428.5 355.2 428.2 354.3 427.9 353.3 427.6 352.4 427.3 351.4 427 350.4 426.7 349.5 426.4 348.5 426.1"/><polyline points="243.8 552.5 244.9 552.6 246 552.7 247.1 552.9 248.2 553 249.3 553.1 250.4 553.3 251.5 553.4 252.6 553.5 253.7 553.6 254.8 553.7 255.9 553.8 257 553.9 258.2 554 259.3 554.1 260.4 554.1 261.5 554.2 262.6 554.3 263.7 554.4 264.9 554.4 266 554.5 267.1 554.5 268.2 554.6 269.4 554.6 270.5 554.7 271.6 554.7 272.7 554.7 273.9 554.8 275 554.8 276.1 554.8 277.3 554.8 278.4 554.8 279.5 554.8"/><polyline points="315.2 552.5 316.3 552.3 317.4 552.2 318.5 552 319.6 551.8 320.6 551.7 321.7 551.5 322.8 551.3 323.9 551.1 324.9 551 326 550.8 327 550.6 328.1 550.4 329.2 550.2 330.2 550 331.3 549.8 332.3 549.6 333.3 549.3 334.4 549.1 335.4 548.9 336.4 548.7 337.5 548.4 338.5 548.2 339.5 547.9 340.5 547.7 341.5 547.4 342.5 547.2 343.5 546.9 344.5 546.7 345.5 546.4 346.5 546.1 347.5 545.8 348.5 545.6"/><polyline points="160 451.4 159.5 451.8 158.9 452.3 158.4 452.8 157.8 453.3 157.3 453.8 156.8 454.3 156.3 454.8 155.8 455.3 155.3 455.8 154.8 456.4 154.3 456.9 153.8 457.4 153.4 457.9 152.9 458.4 152.5 458.9 152.1 459.4 151.6 460 151.2 460.5 150.8 461 150.4 461.5 150 462.1 149.6 462.6 149.2 463.1 148.9 463.7 148.5 464.2 148.2 464.7 147.8 465.3 147.5 465.8 147.2 466.4 146.9 466.9 146.5 467.4 146.3 468"/><polyline points="160 451.4 160.6 450.9 161.2 450.4 161.8 449.9 162.4 449.4 163 448.9 163.6 448.5 164.2 448 164.8 447.5 165.4 447.1 166.1 446.6 166.7 446.1 167.4 445.7 168 445.2 168.7 444.8 169.4 444.3 170.1 443.9 170.8 443.4 171.4 443 172.2 442.5 172.9 442.1 173.6 441.7 174.3 441.2 175 440.8 175.8 440.4 176.5 439.9 177.3 439.5 178 439.1 178.8 438.7 179.6 438.3 180.4 437.9 181.2 437.5 182 437.1"/><polyline points="210.5 545.6 211.5 545.8 212.5 546.1 213.5 546.4 214.5 546.7 215.5 546.9 216.5 547.2 217.5 547.4 218.5 547.7 219.5 547.9 220.5 548.2 221.5 548.4 222.6 548.7 223.6 548.9 224.6 549.1 225.7 549.3 226.7 549.6 227.8 549.8 228.8 550 229.9 550.2 230.9 550.4 232 550.6 233 550.8 234.1 551 235.2 551.1 236.2 551.3 237.3 551.5 238.4 551.7 239.5 551.8 240.5 552 241.6 552.2 242.7 552.3 243.8 552.5"/><polyline points="182 534.6 182.8 535 183.6 535.4 184.4 535.8 185.2 536.2 186 536.6 186.9 536.9 187.7 537.3 188.6 537.7 189.4 538.1 190.3 538.4 191.1 538.8 192 539.2 192.9 539.5 193.7 539.9 194.6 540.2 195.5 540.6 196.4 540.9 197.3 541.2 198.2 541.6 199.2 541.9 200.1 542.2 201 542.6 201.9 542.9 202.9 543.2 203.8 543.5 204.8 543.8 205.7 544.1 206.7 544.4 207.6 544.7 208.6 545 209.6 545.3 210.5 545.6"/><polyline points="146.3 503.7 146.6 504.2 146.9 504.8 147.2 505.3 147.5 505.9 147.8 506.4 148.2 506.9 148.5 507.5 148.9 508 149.2 508.5 149.6 509.1 150 509.6 150.4 510.1 150.8 510.7 151.2 511.2 151.6 511.7 152.1 512.2 152.5 512.8 152.9 513.3 153.4 513.8 153.8 514.3 154.3 514.8 154.8 515.3 155.3 515.8 155.8 516.3 156.3 516.8 156.8 517.4 157.3 517.9 157.8 518.4 158.4 518.9 158.9 519.3 159.5 519.8 160 520.3"/><polyline points="160 520.3 160.6 520.8 161.2 521.3 161.8 521.8 162.4 522.3 163 522.7 163.6 523.2 164.2 523.7 164.8 524.2 165.4 524.6 166.1 525.1 166.7 525.6 167.4 526 168 526.5 168.7 526.9 169.4 527.4 170.1 527.8 170.8 528.3 171.4 528.7 172.2 529.2 172.9 529.6 173.6 530 174.3 530.5 175 530.9 175.8 531.3 176.5 531.7 177.3 532.2 178.1 532.6 178.8 533 179.6 533.4 180.4 533.8 181.2 534.2 182 534.6"/><polyline points="110.5 496.6 111.4 497.3 112.2 498 113 498.7 113.8 499.4 114.7 500.1 115.5 500.7 116.4 501.4 117.3 502.1 118.2 502.7 119.1 503.4 120 504"/><polyline points="182 363.4 183.3 363 184.7 362.6 186.1 362.2 187.5 361.9 188.9 361.5 190.4 361.1 191.8 360.7 193.2 360.4 194.7 360 196.1 359.7 197.5 359.4 199 359 200.4 358.7 201.9 358.4 203.4 358.1 204.8 357.8 206.3 357.5 207.8 357.2 209.3 356.9 210.8 356.6 212.3 356.3 213.8 356 215.3 355.8 216.8 355.5 218.3 355.3 219.8 355 221.4 354.8 222.9 354.5 224.4 354.3 225.9 354.1 227.5 353.9 229 353.7"/><polyline points="91.05 473.1 91.47 473.9 91.9 474.7 92.35 475.4 92.81 476.2 93.28 477 93.76 477.7 94.25 478.5 94.76 479.2 95.28 480 95.81 480.7 96.35 481.5 96.91 482.2 97.48 483 98.06 483.7 98.65 484.5 99.26 485.2 99.88 485.9 100.5 486.7 101.1 487.4 101.8 488.1 102.5 488.9 103.1 489.6 103.8 490.3 104.5 491 105.2 491.7 106 492.4 106.7 493.1 107.4 493.9 108.2 494.6 109 495.3 109.8 495.9 110.5 496.6"/><polyline points="84.4 447.9 84.41 448.7 84.43 449.5 84.46 450.3 84.51 451.1 84.57 451.9 84.64 452.7 84.72 453.5 84.82 454.3 84.93 455 85.06 455.8 85.19 456.6 85.34 457.4 85.51 458.2 85.68 459 85.87 459.8 86.07 460.6 86.29 461.4 86.52 462.2 86.76 463 87.01 463.8 87.28 464.5 87.56 465.3 87.85 466.1 88.15 466.9 88.47 467.7 88.8 468.5 89.15 469.2 89.5 470 89.87 470.8 90.25 471.6 90.65 472.3 91.05 473.1"/><polyline points="110.5 399.1 109.8 399.8 109 400.5 108.2 401.2 107.4 401.9 106.7 402.6 106 403.3 105.2 404 104.5 404.7 103.8 405.4 103.1 406.2 102.5 406.9 101.8 407.6 101.1 408.3 100.5 409.1 99.87 409.8 99.26 410.5 98.65 411.3 98.06 412 97.48 412.8 96.91 413.5 96.35 414.3 95.81 415 95.28 415.8 94.76 416.5 94.25 417.3 93.76 418 93.27 418.8 92.8 419.6 92.35 420.3 91.9 421.1 91.47 421.9 91.05 422.6"/><polyline points="110.5 399.1 111.3 398.4 112.2 397.7 113 397 113.8 396.4 114.7 395.7 115.5 395 116.4 394.3 117.3 393.7 118.2 393 119.1 392.4 120 391.7 120.9 391.1 121.9 390.4 122.8 389.8 123.8 389.1 124.7 388.5 125.7 387.9 126.7 387.2 127.7 386.6 128.7 386 129.7 385.4 130.7 384.8 131.8 384.2 132.8 383.6 133.9 383 134.9 382.4 136 381.8 137.1 381.2 138.2 380.6 139.3 380 140.4 379.5 141.5 378.9"/><polyline points="279.5 350.3 277.9 350.3 276.3 350.3 274.7 350.4 273.1 350.4 271.5 350.4 269.9 350.5 268.3 350.5 266.8 350.5 265.2 350.6 263.6 350.7 262 350.7 260.4 350.8 258.8 350.9 257.2 351 255.6 351.1 254 351.2 252.5 351.3 250.9 351.4 249.3 351.5 247.7 351.6 246.2 351.8 244.6 351.9 243 352.1 241.5 352.2 239.9 352.4 238.3 352.5 236.8 352.7 235.2 352.9 233.7 353.1 232.1 353.3 230.6 353.5 229 353.7"/><polyline points="330 353.7 328.5 353.5 326.9 353.3 325.4 353.1 323.8 352.9 322.3 352.7 320.7 352.5 319.1 352.4 317.6 352.2 316 352.1 314.4 351.9 312.9 351.8 311.3 351.6 309.7 351.5 308.1 351.4 306.6 351.3 305 351.2 303.4 351.1 301.8 351 300.2 350.9 298.6 350.8 297 350.7 295.5 350.7 293.9 350.6 292.3 350.5 290.7 350.5 289.1 350.5 287.5 350.4 285.9 350.4 284.3 350.4 282.7 350.3 281.1 350.3 279.5 350.3"/><polyline points="468 473.1 468.4 472.3 468.8 471.6 469.1 470.8 469.5 470 469.9 469.2 470.2 468.5 470.5 467.7 470.9 466.9 471.2 466.1 471.5 465.3 471.7 464.5 472 463.8 472.3 463 472.5 462.2 472.7 461.4 472.9 460.6 473.1 459.8 473.3 459 473.5 458.2 473.7 457.4 473.8 456.6 474 455.8 474.1 455 474.2 454.3 474.3 453.5 474.4 452.7 474.4 451.9 474.5 451.1 474.6 450.3 474.6 449.5 474.6 448.7 474.6 447.9"/><polyline points="439 504 439.9 503.4 440.8 502.7 441.7 502.1 442.6 501.4 443.5 500.7 444.3 500.1 445.2 499.4 446 498.7 446.9 498 447.7 497.3 448.5 496.6"/><polyline points="448.5 496.6 449.3 495.9 450 495.2 450.8 494.6 451.6 493.8 452.3 493.1 453.1 492.4 453.8 491.7 454.5 491 455.2 490.3 455.9 489.6 456.6 488.9 457.2 488.1 457.9 487.4 458.5 486.7 459.1 485.9 459.8 485.2 460.4 484.5 461 483.7 461.5 483 462.1 482.2 462.7 481.5 463.2 480.7 463.7 480 464.3 479.2 464.8 478.5 465.3 477.7 465.7 476.9 466.2 476.2 466.7 475.4 467.1 474.7 467.5 473.9 468 473.1"/><polyline points="417.5 378.9 416.3 378.3 415.2 377.8 414 377.2 412.9 376.7 411.7 376.1 410.5 375.6 409.3 375.1 408.2 374.5 406.9 374 405.7 373.5 404.5 373 403.3 372.5 402 372 400.8 371.5 399.5 371 398.3 370.5 397 370 395.7 369.5 394.4 369.1 393.2 368.6 391.9 368.1 390.5 367.7 389.2 367.2 387.9 366.8 386.6 366.3 385.2 365.9 383.9 365.5 382.5 365 381.2 364.6 379.8 364.2 378.4 363.8 377.1 363.4"/><polyline points="377.1 363.4 375.7 363 374.3 362.6 372.9 362.2 371.5 361.9 370.1 361.5 368.7 361.1 367.2 360.8 365.8 360.4 364.4 360 362.9 359.7 361.5 359.4 360 359 358.6 358.7 357.1 358.4 355.6 358.1 354.2 357.8 352.7 357.5 351.2 357.2 349.7 356.9 348.2 356.6 346.7 356.3 345.2 356 343.7 355.8 342.2 355.5 340.7 355.3 339.2 355 337.7 354.8 336.1 354.5 334.6 354.3 333.1 354.1 331.5 353.9 330 353.7"/><polyline points="474.6 447.9 474.6 447.1 474.6 446.3 474.6 445.5 474.5 444.7 474.4 443.9 474.4 443.1 474.3 442.3 474.2 441.5 474.1 440.7 474 439.9 473.8 439.1 473.7 438.3 473.5 437.5 473.3 436.7 473.1 435.9 472.9 435.1 472.7 434.4 472.5 433.6 472.3 432.8 472 432 471.7 431.2 471.5 430.4 471.2 429.6 470.9 428.8 470.5 428.1 470.2 427.3 469.9 426.5 469.5 425.7 469.1 424.9 468.8 424.2 468.4 423.4 468 422.6"/><polyline points="448.5 399.1 447.7 398.4 446.9 397.7 446 397 445.2 396.4 444.3 395.7 443.5 395 442.6 394.4 441.7 393.7 440.8 393 439.9 392.4 439 391.7 438.1 391.1 437.2 390.4 436.2 389.8 435.3 389.1 434.3 388.5 433.3 387.9 432.3 387.2 431.3 386.6 430.3 386 429.3 385.4 428.3 384.8 427.2 384.2 426.2 383.6 425.1 383 424.1 382.4 423 381.8 421.9 381.2 420.8 380.6 419.7 380 418.6 379.5 417.5 378.9"/><polyline points="468 422.6 467.5 421.9 467.1 421.1 466.7 420.3 466.2 419.6 465.7 418.8 465.3 418 464.8 417.3 464.3 416.5 463.7 415.8 463.2 415 462.7 414.3 462.1 413.5 461.5 412.8 461 412 460.4 411.3 459.8 410.5 459.1 409.8 458.5 409.1 457.9 408.3 457.2 407.6 456.6 406.9 455.9 406.2 455.2 405.5 454.5 404.7 453.8 404 453.1 403.3 452.3 402.6 451.6 401.9 450.8 401.2 450 400.5 449.3 399.8 448.5 399.1"/><polyline points="141.5 378.9 142.7 378.3 143.8 377.8 145 377.2 146.1 376.7 147.3 376.1 148.5 375.6 149.7 375.1 150.9 374.5 152.1 374 153.3 373.5 154.5 373 155.7 372.5 157 372 158.2 371.5 159.5 371 160.7 370.5 162 370 163.3 369.5 164.6 369.1 165.9 368.6 167.2 368.1 168.5 367.7 169.8 367.2 171.1 366.8 172.4 366.3 173.8 365.9 175.1 365.5 176.5 365 177.8 364.6 179.2 364.2 180.6 363.8 182 363.4"/><polyline points="91.05 422.6 90.65 423.4 90.25 424.2 89.87 424.9 89.5 425.7 89.14 426.5 88.8 427.3 88.47 428.1 88.15 428.8 87.85 429.6 87.56 430.4 87.28 431.2 87.01 432 86.76 432.8 86.52 433.6 86.29 434.4 86.07 435.1 85.87 435.9 85.68 436.7 85.51 437.5 85.34 438.3 85.19 439.1 85.06 439.9 84.93 440.7 84.82 441.5 84.72 442.3 84.64 443.1 84.57 443.9 84.51 444.7 84.46 445.5 84.43 446.3 84.41 447.1 84.4 447.9"/><polyline points="486.4 338.7 485.5 337.8 484.5 337 483.5 336.1 482.4 335.3 481.4 334.5 480.3 333.7 479.3 332.8 478.2 332 477.1 331.2 476 330.4 474.9 329.6 473.7 328.8 472.6 328 471.4 327.2 470.3 326.4 469.1 325.7 467.9 324.9 466.7 324.1 465.5 323.4 464.2 322.6 463 321.9 461.7 321.1 460.4 320.4 459.2 319.6 457.9 318.9 456.6 318.2 455.2 317.4 453.9 316.7 452.6 316 451.2 315.3 449.9 314.6 448.5 313.9"/><polyline points="110.5 313.9 111.9 313.2 113.3 312.6 114.7 311.9 116.2 311.2 117.6 310.5 119 309.9 120.5 309.2 122 308.6 123.4 307.9 124.9 307.3 126.4 306.7 127.9 306 129.4 305.4 131 304.8 132.5 304.2 134 303.6 135.6 303 137.2 302.4 138.7 301.9 140.3 301.3 141.9 300.7 143.5 300.2 145.1 299.6 146.8 299.1 148.4 298.5 150 298 151.7 297.5 153.3 296.9 155 296.4 156.7 295.9 158.3 295.4 160 294.9"/><polyline points="448.5 313.9 447.1 313.2 445.7 312.6 444.3 311.9 442.9 311.2 441.4 310.5 440 309.9 438.5 309.2 437.1 308.6 435.6 307.9 434.1 307.3 432.6 306.7 431.1 306 429.6 305.4 428.1 304.8 426.5 304.2 425 303.6 423.4 303 421.9 302.4 420.3 301.9 418.7 301.3 417.1 300.7 415.5 300.2 413.9 299.6 412.3 299.1 410.6 298.5 409 298 407.4 297.5 405.7 296.9 404 296.4 402.4 295.9 400.7 295.4 399 294.9"/><polyline points="510.3 367.5 509.8 366.5 509.3 365.6 508.7 364.7 508.2 363.7 507.6 362.8 507 361.8 506.4 360.9 505.8 360 505.1 359.1 504.5 358.1 503.8 357.2 503.1 356.3 502.4 355.4 501.7 354.5 501 353.6 500.3 352.7 499.5 351.8 498.7 350.9 498 350 497.2 349.1 496.3 348.2 495.5 347.3 494.7 346.4 493.8 345.6 492.9 344.7 492.1 343.8 491.2 342.9 490.2 342.1 489.3 341.2 488.4 340.4 487.4 339.5 486.4 338.7"/><polyline points="510.3 429.3 510.8 428.4 511.3 427.4 511.8 426.5 512.2 425.5 512.7 424.6 513.1 423.6 513.5 422.7 513.9 421.7 514.2 420.7 514.6 419.8 514.9 418.8 515.3 417.8 515.6 416.9 515.9 415.9 516.2 415 516.4 414 516.7 413 516.9 412 517.1 411.1 517.3 410.1 517.5 409.1 517.7 408.2 517.8 407.2 517.9 406.2 518.1 405.2 518.2 404.3 518.3 403.3 518.3 402.3 518.4 401.3 518.4 400.3 518.5 399.4 518.5 398.4"/><polyline points="48.7 367.5 48.2 368.4 47.72 369.4 47.25 370.3 46.8 371.3 46.36 372.2 45.94 373.2 45.54 374.1 45.15 375.1 44.77 376 44.42 377 44.07 378 43.75 378.9 43.44 379.9 43.14 380.9 42.86 381.8 42.6 382.8 42.35 383.8 42.12 384.7 41.91 385.7 41.71 386.7 41.52 387.7 41.35 388.6 41.2 389.6 41.07 390.6 40.95 391.6 40.84 392.5 40.76 393.5 40.68 394.5 40.63 395.5 40.59 396.4 40.56 397.4 40.56 398.4"/><polyline points="518.5 398.4 518.5 397.4 518.4 396.4 518.4 395.5 518.3 394.5 518.3 393.5 518.2 392.5 518.1 391.6 517.9 390.6 517.8 389.6 517.7 388.6 517.5 387.7 517.3 386.7 517.1 385.7 516.9 384.7 516.7 383.8 516.4 382.8 516.2 381.8 515.9 380.9 515.6 379.9 515.3 378.9 514.9 378 514.6 377 514.2 376 513.9 375.1 513.5 374.1 513.1 373.2 512.7 372.2 512.2 371.3 511.8 370.3 511.3 369.4 510.8 368.4 510.3 367.5"/><polyline points="399 294.9 397.3 294.5 395.6 294 393.9 293.5 392.2 293 390.4 292.6 388.7 292.1 386.9 291.7 385.2 291.3 383.4 290.8 381.7 290.4 379.9 290 378.1 289.6 376.3 289.2 374.6 288.8 372.8 288.4 371 288 369.1 287.7 367.3 287.3 365.5 286.9 363.7 286.6 361.9 286.2 360 285.9 358.2 285.6 356.3 285.3 354.5 285 352.6 284.7 350.7 284.4 348.9 284.1 347 283.8 345.1 283.5 343.2 283.3 341.4 283"/><polyline points="48.7 429.3 49.21 430.3 49.74 431.2 50.29 432.1 50.85 433.1 51.42 434 52.01 434.9 52.62 435.9 53.24 436.8 53.88 437.7"/><polyline points="217.7 283 219.6 282.8 221.5 282.5 223.4 282.3 225.3 282.1 227.2 281.8 229.1 281.6 231 281.4 232.9 281.2 234.8 281 236.7 280.9 238.7 280.7 240.6 280.5 242.5 280.4 244.5 280.2 246.4 280.1 248.3 280 250.3 279.8 252.2 279.7 254.1 279.6 256.1 279.5 258 279.4 260 279.3 261.9 279.3 263.9 279.2 265.8 279.1 267.8 279.1 269.7 279 271.7 279 273.7 279 275.6 278.9 277.6 278.9 279.5 278.9"/><polyline points="40.56 398.4 40.56 399.4 40.59 400.3 40.63 401.3 40.68 402.3 40.76 403.3 40.84 404.3 40.95 405.2 41.07 406.2 41.2 407.2 41.36 408.2 41.52 409.1 41.71 410.1 41.91 411.1 42.12 412 42.35 413 42.6 414 42.86 415 43.14 415.9 43.44 416.9 43.75 417.9 44.07 418.8 44.42 419.8 44.78 420.7 45.15 421.7 45.54 422.7 45.94 423.6 46.36 424.6 46.8 425.5 47.25 426.5 47.72 427.4 48.2 428.4 48.7 429.3"/><polyline points="341.4 283 339.5 282.8 337.6 282.5 335.7 282.3 333.8 282.1 331.9 281.8 330 281.6 328 281.4 326.1 281.2 324.2 281 322.3 280.9 320.4 280.7 318.4 280.5 316.5 280.4 314.6 280.2 312.6 280.1 310.7 280 308.8 279.8 306.8 279.7 304.9 279.6 302.9 279.5 301 279.4 299 279.3 297.1 279.3 295.1 279.2 293.2 279.1 291.2 279.1 289.3 279 287.3 279 285.4 279 283.4 278.9 281.5 278.9 279.5 278.9"/><polyline points="72.57 338.7 73.55 337.8 74.55 337 75.56 336.1 76.59 335.3 77.63 334.5 78.68 333.7 79.75 332.8 80.82 332 81.92 331.2 83.02 330.4 84.14 329.6 85.28 328.8 86.42 328 87.58 327.2 88.75 326.4 89.93 325.7 91.13 324.9 92.34 324.1 93.56 323.4 94.79 322.6 96.04 321.9 97.3 321.1 98.57 320.4 99.85 319.6 101.1 318.9 102.5 318.2 103.8 317.4 105.1 316.7 106.4 316 107.8 315.3 109.2 314.6 110.5 313.9"/><polyline points="160 294.9 161.7 294.5 163.4 294 165.1 293.5 166.9 293 168.6 292.6 170.3 292.1 172.1 291.7 173.8 291.3 175.6 290.8 177.3 290.4 179.1 290 180.9 289.6 182.7 289.2 184.5 288.8 186.3 288.4 188.1 288 189.9 287.7 191.7 287.3 193.5 286.9 195.3 286.6 197.2 286.2 199 285.9 200.9 285.6 202.7 285.3 204.6 285 206.4 284.7 208.3 284.4 210.2 284.1 212 283.8 213.9 283.5 215.8 283.3 217.7 283"/><polyline points="72.57 338.7 71.6 339.5 70.64 340.4 69.7 341.2 68.77 342.1 67.86 342.9 66.96 343.8 66.07 344.7 65.2 345.6 64.34 346.4 63.5 347.3 62.67 348.2 61.85 349.1 61.06 350 60.27 350.9 59.5 351.8 58.74 352.7 58 353.6 57.28 354.5 56.57 355.4 55.87 356.3 55.19 357.2 54.52 358.1 53.87 359.1 53.24 360 52.62 360.9 52.01 361.8 51.42 362.8 50.84 363.7 50.28 364.6 49.74 365.6 49.21 366.5 48.7 367.5"/><polyline points="505.1 437.7 505.8 436.8 506.4 435.9 507 434.9 507.6 434 508.2 433.1 508.7 432.1 509.3 431.2 509.8 430.3 510.3 429.3"/><polyline points="543.1 360.3 543.4 359.2 543.7 358.2 544 357.1 544.3 356 544.5 354.9 544.7 353.8 544.9 352.7 545.1 351.7 545.3 350.6 545.5 349.5 545.6 348.4 545.7 347.3 545.8 346.2 545.9 345.1 545.9 344 546 342.9 546 341.9 546 340.8"/><polyline points="546 340.8 546 339.7 546 338.6 545.9 337.5 545.9 336.4 545.8 335.3 545.7 334.2 545.6 333.1 545.5 332.1 545.3 331 545.1 329.9 544.9 328.8 544.7 327.7 544.5 326.6 544.3 325.5 544 324.5 543.7 323.4 543.4 322.3 543.1 321.2 542.8 320.1 542.5 319.1 542.1 318 541.7 316.9 541.3 315.8 540.9 314.8 540.5 313.7 540 312.6 539.5 311.6 539.1 310.5 538.6 309.5 538 308.4 537.5 307.3 536.9 306.3"/><polyline points="510.3 274.2 509.2 273.2 508.1 272.3 507 271.3 505.8 270.4 504.7 269.5 503.5 268.6 502.3 267.7 501.1 266.7 499.9 265.8 498.7 264.9 497.4 264.1 496.1 263.2 494.9 262.3 493.6 261.4 492.3 260.5 491 259.7 489.6 258.8 488.3 257.9 486.9 257.1 485.5 256.2 484.1 255.4 482.7 254.6 481.3 253.7 479.9 252.9 478.4 252.1 477 251.3 475.5 250.5 474 249.7 472.5 248.9 471 248.1 469.5 247.3 468 246.6"/><polyline points="48.7 274.2 47.62 275.1 46.55 276 45.5 277 44.46 278 43.44 278.9 42.44 279.9 41.45 280.9 40.48 281.8 39.52 282.8 38.58 283.8 37.66 284.8 36.75 285.8 35.86 286.8 34.98 287.8 34.12 288.8 33.28 289.8 32.45 290.8 31.64 291.8 30.85 292.8 30.07 293.8 29.31 294.9 28.57 295.9 27.84 296.9 27.14 297.9 26.44 299 25.77 300 25.11 301.1 24.47 302.1 23.84 303.1 23.24 304.2 22.64 305.2 22.07 306.3"/><polyline points="412.8 225.4 410.9 224.8 409 224.3 407.1 223.8 405.1 223.3 403.2 222.8 401.3 222.3 399.3 221.8 397.4 221.3 395.4 220.8 393.5 220.3 391.5 219.9 389.5 219.4 387.5 219 385.5 218.5 383.5 218.1 381.5 217.7 379.5 217.3 377.5 216.9 375.4 216.5 373.4 216.1 371.4 215.7 369.3 215.3 367.2 215 365.2 214.6 363.1 214.3 361 213.9 359 213.6 356.9 213.3 354.8 213 352.7 212.7 350.6 212.4 348.5 212.1"/><polyline points="12.99 340.8 13 341.9 13.03 342.9 13.07 344 13.13 345.1 13.21 346.2 13.31 347.3 13.43 348.4 13.56 349.5 13.71 350.6 13.88 351.7 14.07 352.7 14.27 353.8 14.5 354.9 14.74 356 15 357.1 15.27 358.2 15.56 359.2 15.88 360.3"/><polyline points="22.07 306.3 21.52 307.3 20.98 308.4 20.46 309.5 19.95 310.5 19.47 311.6 19 312.6 18.55 313.7 18.11 314.8 17.7 315.8 17.3 316.9 16.91 318 16.55 319.1 16.2 320.1 15.88 321.2 15.56 322.3 15.27 323.4 15 324.5 14.74 325.5 14.5 326.6 14.27 327.7 14.07 328.8 13.88 329.9 13.71 331 13.56 332.1 13.43 333.1 13.31 334.2 13.21 335.3 13.13 336.4 13.07 337.5 13.03 338.6 13 339.7 12.99 340.8"/><polyline points="536.9 306.3 536.4 305.2 535.8 304.2 535.2 303.1 534.5 302.1 533.9 301.1 533.2 300 532.6 299 531.9 297.9 531.2 296.9 530.4 295.9 529.7 294.9 528.9 293.8 528.2 292.8 527.4 291.8 526.6 290.8 525.7 289.8 524.9 288.8 524 287.8 523.2 286.8 522.3 285.8 521.4 284.8 520.4 283.8 519.5 282.8 518.5 281.8 517.6 280.9 516.6 279.9 515.6 278.9 514.6 278 513.5 277 512.5 276 511.4 275.1 510.3 274.2"/><polyline points="91.05 246.6 92.6 245.8 94.16 245 95.73 244.3 97.32 243.5 98.92 242.8 100.5 242 102.1 241.3 103.8 240.6 105.4 239.9 107.1 239.2 108.8 238.5 110.4 237.8 112.1 237.1 113.8 236.4 115.5 235.7 117.3 235.1 119 234.4 120.7 233.8 122.5 233.1 124.3 232.5 126 231.8 127.8 231.2 129.6 230.6 131.4 230 133.3 229.4 135.1 228.8 136.9 228.2 138.8 227.6 140.6 227.1 142.5 226.5 144.4 225.9 146.2 225.4"/><polyline points="279.5 207.5 281.7 207.5 283.9 207.5 286.1 207.6 288.2 207.6 290.4 207.6 292.6 207.7 294.8 207.8 296.9 207.8 299.1 207.9 301.3 208 303.5 208.1 305.6 208.2 307.8 208.3 310 208.4 312.1 208.5 314.3 208.7 316.5 208.8 318.6 209 320.8 209.1 322.9 209.3 325.1 209.5 327.2 209.7 329.4 209.9 331.5 210.1 333.6 210.3 335.8 210.5 337.9 210.8 340 211 342.2 211.3 344.3 211.5 346.4 211.8 348.5 212.1"/><polyline points="48.7 274.1 49.8 273.2 50.91 272.3 52.04 271.3 53.18 270.4 54.34 269.5 55.51 268.6 56.7 267.7 57.91 266.7 59.12 265.8 60.36 264.9 61.61 264 62.87 263.2 64.15 262.3 65.44 261.4 66.74 260.5 68.06 259.7 69.4 258.8 70.75 257.9 72.11 257.1 73.49 256.2 74.88 255.4 76.28 254.6 77.7 253.7 79.13 252.9 80.57 252.1 82.03 251.3 83.5 250.5 84.98 249.7 86.48 248.9 87.99 248.1 89.52 247.3 91.05 246.6"/><polyline points="146.2 225.4 148.1 224.8 150 224.3 152 223.8 153.9 223.3 155.8 222.8 157.7 222.3 159.7 221.8 161.6 221.3 163.6 220.8 165.6 220.3 167.5 219.9 169.5 219.4 171.5 219 173.5 218.5 175.5 218.1 177.5 217.7 179.5 217.3 181.6 216.9 183.6 216.5 185.6 216.1 187.7 215.7 189.7 215.3 191.8 215 193.8 214.6 195.9 214.3 198 213.9 200.1 213.6 202.2 213.3 204.2 213 206.3 212.7 208.4 212.4 210.5 212.1"/><polyline points="210.5 212.1 212.6 211.8 214.8 211.5 216.9 211.3 219 211 221.1 210.8 223.3 210.5 225.4 210.3 227.5 210.1 229.7 209.9 231.8 209.7 234 209.5 236.1 209.3 238.3 209.1 240.4 209 242.6 208.8 244.7 208.7 246.9 208.5 249.1 208.4 251.2 208.3 253.4 208.2 255.6 208.1 257.7 208 259.9 207.9 262.1 207.8 264.3 207.8 266.4 207.7 268.6 207.6 270.8 207.6 273 207.6 275.2 207.5 277.3 207.5 279.5 207.5"/><polyline points="468 246.6 466.4 245.8 464.9 245 463.3 244.3 461.7 243.5 460.1 242.8 458.5 242 456.9 241.3 455.2 240.6 453.6 239.9 451.9 239.2 450.3 238.5 448.6 237.8 446.9 237.1 445.2 236.4 443.5 235.7 441.8 235.1 440 234.4 438.3 233.8 436.5 233.1 434.8 232.5 433 231.8 431.2 231.2 429.4 230.6 427.6 230 425.8 229.4 423.9 228.8 422.1 228.2 420.3 227.6 418.4 227.1 416.5 226.5 414.7 225.9 412.8 225.4"/></g><g stroke-width="2.684"><polyline points="417.5 159.5 419.4 160 421.4 160.6 423.3 161.2 425.2 161.8 427.1 162.4 429 163 430.9 163.6 432.8 164.2 434.7 164.9 436.5 165.5 438.4 166.2 440.2 166.8 442.1 167.5 443.9 168.1 445.7 168.8 447.5 169.5 449.3 170.2 451 170.9 452.8 171.6 454.6 172.3 456.3 173 458 173.8 459.7 174.5 461.4 175.2 463.1 176 464.8 176.7 466.5 177.5 468.1 178.3 469.8 179 471.4 179.8 473 180.6 474.6 181.4"/><polyline points="40.56 210 39.43 210.9 38.33 211.9 37.24 212.9 36.17 213.9 35.11 214.9 34.07 215.9 33.05 216.9 32.04 217.9 31.05 218.9 30.08 220 29.12 221 28.18 222 27.26 223 26.35 224.1 25.46 225.1 24.59 226.1 23.74 227.2 22.9 228.2 22.08 229.3 21.27 230.3 20.49 231.4 19.72 232.5 18.97 233.5 18.23 234.6 17.52 235.7 16.82 236.7 16.14 237.8 15.47 238.9 14.82 240 14.2 241.1 13.58 242.1 12.99 243.2"/><polyline points="350.9 145.7 353.1 146 355.3 146.3 357.4 146.6 359.6 146.9 361.8 147.3 363.9 147.6 366.1 148 368.2 148.3 370.3 148.7 372.5 149.1 374.6 149.4 376.7 149.8 378.8 150.2 380.9 150.7 383 151.1 385.1 151.5 387.2 151.9 389.3 152.4 391.3 152.8 393.4 153.3 395.4 153.8 397.5 154.2 399.5 154.7 401.5 155.2 403.6 155.7 405.6 156.2 407.6 156.8 409.6 157.3 411.6 157.8 413.5 158.4 415.5 158.9 417.5 159.5"/><polyline points="474.6 181.4 476.2 182.2 477.8 183 479.3 183.8 480.9 184.6 482.4 185.5 484 186.3 485.5 187.1 487 188 488.4 188.8 489.9 189.7 491.4 190.6 492.8 191.4 494.2 192.3 495.6 193.2 497 194.1 498.4 195 499.8 195.9 501.1 196.8 502.5 197.7 503.8 198.6 505.1 199.5 506.4 200.4 507.7 201.4 508.9 202.3 510.2 203.2 511.4 204.2 512.6 205.1 513.8 206.1 515 207.1 516.2 208 517.3 209 518.5 210"/><polyline points="208.1 145.7 210.3 145.4 212.5 145.1 214.7 144.9 216.9 144.6 219.1 144.3 221.3 144.1 223.5 143.9 225.7 143.6 227.9 143.4 230.1 143.2 232.3 143 234.6 142.8 236.8 142.7 239 142.5 241.3 142.3 243.5 142.2 245.7 142 248 141.9 250.2 141.8 252.5 141.7 254.7 141.6 257 141.5 259.2 141.4 261.5 141.3 263.7 141.2 266 141.2 268.2 141.1 270.5 141.1 272.7 141 275 141 277.3 141 279.5 141"/><polyline points="518.5 210 519.6 210.9 520.7 211.9 521.8 212.9 522.8 213.9 523.9 214.9 524.9 215.9 526 216.9 527 217.9 528 218.9 528.9 220 529.9 221 530.8 222 531.8 223 532.7 224.1 533.6 225.1 534.4 226.1 535.3 227.2 536.1 228.2 536.9 229.3 537.7 230.3 538.5 231.4 539.3 232.5 540 233.5 540.8 234.6 541.5 235.7 542.2 236.7 542.9 237.8 543.5 238.9 544.2 240 544.8 241.1 545.4 242.1 546 243.2"/><polyline points="546 243.2 546.6 244.3 547.2 245.4 547.7 246.5 548.2 247.6 548.7 248.7 549.2 249.8 549.7 250.9 550.1 252 550.6 253.1 551 254.2 551.4 255.4 551.7 256.5 552.1 257.6 552.4 258.7 552.8 259.8 553.1 260.9 553.4 262 553.6 263.2 553.9 264.3 554.1 265.4 554.3 266.5 554.5 267.7 554.7 268.8 554.8 269.9 555 271 555.1 272.2 555.2 273.3 555.3 274.4 555.3 275.6 555.4 276.7 555.4 277.8"/><polyline points="40.56 210 41.69 209 42.84 208 44.01 207.1 45.2 206.1 46.4 205.1 47.61 204.2 48.84 203.2 50.09 202.3 51.35 201.4 52.63 200.4 53.92 199.5 55.23 198.6 56.55 197.7 57.89 196.8 59.24 195.9 60.6 195 61.99 194.1 63.38 193.2 64.8 192.3 66.22 191.4 67.66 190.6 69.11 189.7 70.58 188.8 72.06 188 73.56 187.1 75.06 186.3 76.59 185.5 78.12 184.6 79.67 183.8 81.24 183 82.81 182.2 84.4 181.4"/><polyline points="279.5 141 281.8 141 284 141 286.3 141 288.5 141.1 290.8 141.1 293.1 141.2 295.3 141.2 297.6 141.3 299.8 141.4 302.1 141.5 304.3 141.6 306.6 141.7 308.8 141.8 311.1 141.9 313.3 142 315.5 142.2 317.8 142.3 320 142.5 322.2 142.7 324.5 142.8 326.7 143 328.9 143.2 331.1 143.4 333.3 143.6 335.6 143.9 337.8 144.1 340 144.4 342.2 144.6 344.4 144.9 346.6 145.1 348.7 145.4 350.9 145.7"/><polyline points="12.99 243.2 12.42 244.3 11.86 245.4 11.32 246.5 10.8 247.6 10.29 248.7 9.807 249.8 9.34 250.9 8.89 252 8.459 253.1 8.046 254.2 7.651 255.4 7.274 256.5 6.916 257.6 6.575 258.7 6.253 259.8 5.95 260.9 5.665 262 5.396 263.2 5.147 264.3 4.917 265.4 4.706 266.5 4.512 267.7 4.336 268.8 4.179 269.9 4.041 271 3.921 272.2 3.819 273.3 3.736 274.4 3.672 275.6 3.625 276.7 3.598 277.8"/><polyline points="84.4 181.4 86.01 180.6 87.62 179.8 89.25 179 90.89 178.3 92.55 177.5 94.21 176.7 95.89 176 97.58 175.2 99.29 174.5 101 173.8 102.7 173 104.5 172.3 106.2 171.6 108 170.9 109.8 170.2 111.5 169.5 113.3 168.8 115.1 168.1 117 167.5 118.8 166.8 120.6 166.2 122.5 165.5 124.3 164.9 126.2 164.2 128.1 163.6 130 163 131.9 162.4 133.8 161.8 135.7 161.2 137.7 160.6 139.6 160 141.6 159.5"/><polyline points="141.6 159.5 143.5 158.9 145.5 158.4 147.5 157.8 149.4 157.3 151.4 156.8 153.4 156.2 155.5 155.7 157.5 155.2 159.5 154.7 161.5 154.2 163.6 153.8 165.6 153.3 167.7 152.8 169.8 152.4 171.8 151.9 173.9 151.5 176 151.1 178.1 150.6 180.2 150.2 182.3 149.8 184.4 149.4 186.6 149.1 188.7 148.7 190.8 148.3 193 148 195.1 147.6 197.3 147.3 199.4 146.9 201.6 146.6 203.8 146.3 205.9 146 208.1 145.7"/></g><g stroke-width="1.032"><polyline points="210.5 88.4 212.6 88.12 214.8 87.85 216.9 87.59 219 87.34 221.1 87.1 223.3 86.86 225.4 86.64 227.5 86.42 229.7 86.21 231.8 86.01 234 85.82 236.1 85.64 238.3 85.47 240.4 85.3 242.6 85.15 244.7 85 246.9 84.86 249.1 84.73 251.2 84.61 253.4 84.5 255.6 84.4 257.7 84.31 259.9 84.22 262.1 84.15 264.3 84.08 266.4 84.02 268.6 83.97 270.8 83.93 273 83.9 275.2 83.88 277.3 83.87 279.5 83.86"/><polyline points="412.8 101.7 414.7 102.3 416.5 102.8 418.4 103.4 420.3 104 422.1 104.5 423.9 105.1 425.8 105.7 427.6 106.3 429.4 106.9 431.2 107.5 433 108.2 434.8 108.8 436.5 109.4 438.3 110.1 440 110.7 441.8 111.4 443.5 112.1 445.2 112.7 446.9 113.4 448.6 114.1 450.3 114.8 451.9 115.5 453.6 116.2 455.2 116.9 456.9 117.6 458.5 118.4 460.1 119.1 461.7 119.9 463.3 120.6 464.9 121.4 466.4 122.1 468 122.9"/><polyline points="48.7 150.5 49.79 149.5 50.91 148.6 52.04 147.7 53.18 146.7 54.34 145.8 55.51 144.9 56.7 144 57.9 143.1 59.12 142.2 60.36 141.3 61.61 140.4 62.87 139.5 64.15 138.6 65.44 137.7 66.74 136.9 68.06 136 69.4 135.1 70.75 134.3 72.11 133.4 73.49 132.6 74.88 131.7 76.28 130.9 77.7 130.1 79.13 129.2 80.57 128.4 82.03 127.6 83.5 126.8 84.98 126 86.48 125.2 87.99 124.4 89.52 123.7 91.05 122.9"/><polyline points="510.3 150.5 511.4 151.4 512.5 152.4 513.5 153.3 514.6 154.3 515.6 155.3 516.6 156.2 517.6 157.2 518.5 158.2 519.5 159.2 520.4 160.1 521.4 161.1 522.3 162.1 523.2 163.1 524 164.1 524.9 165.1 525.7 166.1 526.6 167.1 527.4 168.1 528.2 169.2 528.9 170.2 529.7 171.2 530.4 172.2 531.2 173.2 531.9 174.3 532.6 175.3 533.2 176.3 533.9 177.4 534.5 178.4 535.2 179.5 535.8 180.5 536.4 181.6 536.9 182.6"/><polyline points="146.3 101.7 148.1 101.2 150 100.6 152 100.1 153.9 99.59 155.8 99.08 157.7 98.58 159.7 98.09 161.6 97.6 163.6 97.12 165.6 96.65 167.5 96.19 169.5 95.74 171.5 95.29 173.5 94.85 175.5 94.42 177.5 94 179.5 93.59 181.6 93.18 183.6 92.79 185.6 92.4 187.7 92.02 189.7 91.65 191.8 91.29 193.8 90.93 195.9 90.58 198 90.25 200.1 89.92 202.2 89.6 204.2 89.28 206.3 88.98 208.4 88.69 210.5 88.4"/><polyline points="91.05 122.9 92.6 122.1 94.16 121.4 95.73 120.6 97.32 119.9 98.92 119.1 100.5 118.4 102.1 117.6 103.8 116.9 105.4 116.2 107.1 115.5 108.8 114.8 110.4 114.1 112.1 113.4 113.8 112.7 115.5 112.1 117.3 111.4 119 110.7 120.7 110.1 122.5 109.4 124.3 108.8 126 108.2 127.8 107.5 129.6 106.9 131.4 106.3 133.3 105.7 135.1 105.1 136.9 104.5 138.8 104 140.6 103.4 142.5 102.8 144.4 102.3 146.3 101.7"/><polyline points="48.7 150.5 47.61 151.4 46.55 152.4 45.5 153.3 44.46 154.3 43.44 155.3 42.44 156.2 41.45 157.2 40.48 158.2 39.52 159.1 38.58 160.1 37.66 161.1 36.75 162.1 35.86 163.1 34.98 164.1 34.12 165.1 33.28 166.1 32.45 167.1 31.64 168.1 30.85 169.1 30.07 170.2 29.31 171.2 28.57 172.2 27.84 173.2 27.14 174.3 26.44 175.3 25.77 176.3 25.11 177.4 24.47 178.4 23.84 179.5 23.24 180.5 22.64 181.6 22.07 182.6"/><polyline points="468 122.9 469.5 123.7 471 124.4 472.5 125.2 474 126 475.5 126.8 477 127.6 478.4 128.4 479.9 129.3 481.3 130.1 482.7 130.9 484.1 131.7 485.5 132.6 486.9 133.4 488.3 134.3 489.6 135.1 491 136 492.3 136.9 493.6 137.7 494.9 138.6 496.1 139.5 497.4 140.4 498.7 141.3 499.9 142.2 501.1 143.1 502.3 144 503.5 144.9 504.7 145.8 505.8 146.7 507 147.7 508.1 148.6 509.2 149.5 510.3 150.5"/><polyline points="22.07 182.6 21.52 183.7 20.98 184.7 20.46 185.8 19.95 186.8 19.47 187.9 19 189 18.54 190 18.11 191.1 17.7 192.2 17.3 193.2 16.91 194.3 16.55 195.4 16.2 196.5"/><polyline points="348.5 88.4 350.6 88.69 352.7 88.98 354.8 89.29 356.9 89.6 359 89.92 361 90.25 363.1 90.59 365.2 90.93 367.2 91.29 369.3 91.65 371.4 92.02 373.4 92.4 375.4 92.79 377.5 93.19 379.5 93.59 381.5 94 383.5 94.43 385.5 94.86 387.5 95.29 389.5 95.74 391.5 96.19 393.5 96.66 395.4 97.13 397.4 97.6 399.3 98.09 401.3 98.58 403.2 99.09 405.1 99.6 407.1 100.1 409 100.6 410.9 101.2 412.8 101.7"/><polyline points="536.9 182.6 537.5 183.7 538 184.7 538.6 185.8 539.1 186.8 539.5 187.9 540 189 540.5 190 540.9 191.1 541.3 192.2 541.7 193.2 542.1 194.3 542.5 195.4 542.8 196.5"/><polyline points="279.5 83.86 281.7 83.87 283.9 83.88 286.1 83.9 288.2 83.93 290.4 83.97 292.6 84.02 294.8 84.08 296.9 84.15 299.1 84.22 301.3 84.31 303.5 84.4 305.6 84.5 307.8 84.62 310 84.74 312.1 84.86 314.3 85 316.5 85.15 318.6 85.3 320.8 85.47 322.9 85.64 325.1 85.82 327.2 86.02 329.4 86.21 331.5 86.42 333.6 86.64 335.8 86.87 337.9 87.1 340 87.34 342.2 87.6 344.3 87.86 346.4 88.12 348.5 88.4"/><polyline points="110.5 75.01 111.9 74.32 113.3 73.64 114.7 72.96 116.2 72.29 117.6 71.62 119 70.96 120.5 70.31 122 69.66 123.4 69.02 124.9 68.39 126.4 67.76 127.9 67.14 129.4 66.52 131 65.91 132.5 65.3 134 64.7 135.6 64.11 137.2 63.53 138.7 62.95 140.3 62.38 141.9 61.81 143.5 61.25 145.1 60.7 146.8 60.15 148.4 59.61 150 59.08 151.7 58.55 153.3 58.03 155 57.52 156.7 57.01 158.3 56.51 160 56.02"/><polyline points="72.57 99.75 71.6 100.6 70.64 101.4 69.7 102.3 68.77 103.2 67.86 104 66.96 104.9 66.07 105.8 65.2 106.6 64.34 107.5 63.5 108.4 62.67 109.3 61.85 110.2 61.06 111.1 60.27 112 59.5 112.9 58.74 113.8 58 114.7 57.28 115.6 56.57 116.5 55.87 117.4 55.19 118.3 54.52 119.2"/><polyline points="160 56.02 161.7 55.54 163.4 55.06 165.2 54.59 166.9 54.12 168.6 53.67 170.3 53.22 172.1 52.77 173.8 52.34 175.6 51.91 177.3 51.49 179.1 51.07 180.9 50.67 182.7 50.27 184.5 49.87 186.3 49.49 188.1 49.11 189.9 48.74 191.7 48.38 193.5 48.02 195.3 47.68 197.2 47.33 199 47 200.9 46.68 202.7 46.36 204.6 46.05 206.4 45.74 208.3 45.45 210.2 45.16 212 44.88 213.9 44.61 215.8 44.34 217.7 44.09"/><polyline points="341.4 44.09 343.2 44.35 345.1 44.61 347 44.88 348.9 45.16 350.7 45.45 352.6 45.75 354.5 46.05 356.3 46.36 358.2 46.68 360 47 361.9 47.34 363.7 47.68 365.5 48.02 367.3 48.38 369.1 48.74 371 49.11 372.8 49.49 374.6 49.88 376.3 50.27 378.1 50.67 379.9 51.08 381.7 51.49 383.4 51.91 385.2 52.34 386.9 52.78 388.7 53.22 390.4 53.67 392.2 54.13 393.9 54.59 395.6 55.06 397.3 55.54 399 56.02"/><polyline points="448.5 75.01 449.9 75.7 451.2 76.4 452.6 77.11 453.9 77.82 455.2 78.54 456.6 79.26 457.9 79.98 459.2 80.71 460.4 81.45 461.7 82.2 463 82.94 464.2 83.7 465.5 84.45 466.7 85.22 467.9 85.98 469.1 86.76 470.3 87.54 471.4 88.32 472.6 89.1 473.7 89.9 474.9 90.7 476 91.5 477.1 92.3 478.2 93.11 479.3 93.93 480.3 94.75 481.4 95.57 482.4 96.4 483.5 97.23 484.5 98.06 485.5 98.9 486.4 99.75"/><polyline points="217.7 44.09 219.6 43.84 221.5 43.6 223.4 43.36 225.3 43.14 227.2 42.92 229.1 42.71 231 42.51 232.9 42.31 234.8 42.13 236.7 41.95 238.7 41.78 240.6 41.61 242.5 41.46 244.5 41.31 246.4 41.17 248.3 41.04 250.3 40.92 252.2 40.8 254.1 40.69 256.1 40.59 258 40.5 260 40.42 261.9 40.34 263.9 40.28 265.8 40.22 267.8 40.16 269.7 40.12 271.7 40.08 273.7 40.06 275.6 40.04 277.6 40.02 279.5 40.02"/><polyline points="399 56.02 400.7 56.52 402.4 57.02 404 57.52 405.7 58.04 407.4 58.56 409 59.08 410.6 59.61 412.3 60.15 413.9 60.7 415.5 61.25 417.1 61.81 418.7 62.38 420.3 62.95 421.9 63.53 423.4 64.12 425 64.71 426.5 65.3 428.1 65.91 429.6 66.52 431.1 67.14 432.6 67.76 434.1 68.39 435.6 69.02 437.1 69.67 438.5 70.31 440 70.97 441.4 71.63 442.9 72.29 444.3 72.96 445.7 73.64 447.1 74.32 448.5 75.01"/><polyline points="72.57 99.75 73.55 98.9 74.55 98.06 75.56 97.23 76.59 96.4 77.63 95.57 78.68 94.74 79.75 93.92 80.82 93.11 81.92 92.3 83.02 91.49 84.14 90.69 85.28 89.9 86.42 89.1 87.58 88.32 88.75 87.53 89.93 86.76 91.13 85.98 92.34 85.22 93.56 84.45 94.79 83.69 96.04 82.94 97.3 82.19 98.57 81.45 99.85 80.71 101.1 79.98 102.5 79.26 103.8 78.53 105.1 77.82 106.4 77.11 107.8 76.4 109.2 75.7 110.5 75.01"/><polyline points="279.5 40.02 281.5 40.02 283.4 40.04 285.4 40.06 287.3 40.08 289.3 40.12 291.2 40.16 293.2 40.22 295.1 40.28 297.1 40.34 299 40.42 301 40.5 302.9 40.6 304.9 40.7 306.8 40.8 308.8 40.92 310.7 41.04 312.6 41.17 314.6 41.31 316.5 41.46 318.4 41.62 320.4 41.78 322.3 41.95 324.2 42.13 326.1 42.32 328 42.51 330 42.71 331.9 42.92 333.8 43.14 335.7 43.37 337.6 43.6 339.5 43.84 341.4 44.09"/><polyline points="486.4 99.75 487.4 100.6 488.4 101.4 489.3 102.3 490.2 103.2 491.2 104 492.1 104.9 492.9 105.8 493.8 106.6 494.7 107.5 495.5 108.4 496.3 109.3 497.2 110.2 498 111.1 498.7 112 499.5 112.9 500.3 113.8 501 114.7 501.7 115.6 502.4 116.5 503.1 117.4 503.8 118.3 504.5 119.2"/><polyline points="229 15.78 230.6 15.58 232.1 15.38 233.7 15.19 235.2 15.01 236.8 14.83 238.3 14.66 239.9 14.49 241.5 14.33 243 14.18 244.6 14.03 246.2 13.9 247.7 13.76 249.3 13.64 250.9 13.51 252.5 13.4 254 13.29 255.6 13.19 257.2 13.1 258.8 13.01 260.4 12.93 262 12.85 263.6 12.78 265.2 12.72 266.8 12.67 268.3 12.62 269.9 12.58 271.5 12.54 273.1 12.51 274.7 12.49 276.3 12.47 277.9 12.46 279.5 12.46"/><polyline points="377.1 25.53 378.4 25.93 379.8 26.34 381.2 26.75 382.5 27.17 383.9 27.59 385.2 28.02 386.6 28.46 387.9 28.9 389.2 29.34 390.5 29.8 391.9 30.25 393.2 30.72 394.4 31.18 395.7 31.66 397 32.13 398.3 32.62 399.5 33.1 400.8 33.6 402 34.1 403.3 34.6 404.5 35.11 405.7 35.62 406.9 36.14 408.2 36.66 409.3 37.19 410.5 37.73 411.7 38.27 412.9 38.81 414 39.36 415.2 39.91 416.3 40.47 417.5 41.03"/><polyline points="417.5 41.03 418.6 41.6 419.7 42.17 420.8 42.74 421.9 43.32 423 43.91 424.1 44.5 425.1 45.09 426.2 45.69 427.2 46.29 428.3 46.9 429.3 47.51 430.3 48.12 431.3 48.74 432.3 49.36 433.3 49.99 434.3 50.62 435.3 51.26 436.2 51.9 437.2 52.54 438.1 53.18"/><polyline points="330 15.78 331.6 15.99 333.1 16.21 334.6 16.43 336.1 16.66 337.7 16.9 339.2 17.14 340.7 17.38 342.2 17.64 343.7 17.9 345.2 18.16 346.7 18.43 348.2 18.71 349.7 19 351.2 19.29 352.7 19.58 354.2 19.88 355.6 20.19 357.1 20.51 358.6 20.83 360 21.15 361.5 21.49 362.9 21.82 364.4 22.17 365.8 22.52 367.2 22.88 368.7 23.24 370.1 23.6 371.5 23.98 372.9 24.36 374.3 24.74 375.7 25.13 377.1 25.53"/><polyline points="182 25.52 183.3 25.13 184.7 24.74 186.1 24.35 187.5 23.98 189 23.6 190.4 23.23 191.8 22.87 193.2 22.52 194.7 22.17 196.1 21.82 197.5 21.48 199 21.15 200.4 20.82 201.9 20.5 203.4 20.19 204.9 19.88 206.3 19.58 207.8 19.28 209.3 18.99 210.8 18.71 212.3 18.43 213.8 18.16 215.3 17.89 216.8 17.63 218.3 17.38 219.8 17.13 221.4 16.89 222.9 16.66 224.4 16.43 225.9 16.21 227.5 15.99 229 15.78"/><polyline points="279.5 12.46 281.1 12.46 282.7 12.47 284.3 12.49 285.9 12.51 287.5 12.54 289.1 12.58 290.7 12.62 292.3 12.67 293.9 12.72 295.5 12.79 297 12.85 298.6 12.93 300.2 13.01 301.8 13.1 303.4 13.19 305 13.29 306.6 13.4 308.1 13.52 309.7 13.64 311.3 13.76 312.9 13.9 314.4 14.04 316 14.18 317.6 14.33 319.1 14.49 320.7 14.66 322.3 14.83 323.8 15.01 325.4 15.19 326.9 15.38 328.5 15.58 330 15.78"/><polyline points="120.9 53.18 121.9 52.54 122.8 51.89 123.8 51.25 124.7 50.62 125.7 49.99 126.7 49.36 127.7 48.74 128.7 48.12 129.7 47.5 130.7 46.9 131.8 46.29 132.8 45.69 133.9 45.09 134.9 44.5 136 43.9 137.1 43.32 138.2 42.74 139.3 42.16 140.4 41.59 141.5 41.03"/><polyline points="141.5 41.03 142.7 40.46 143.8 39.91 145 39.36 146.1 38.81 147.3 38.26 148.5 37.73 149.7 37.19 150.9 36.66 152.1 36.14 153.3 35.62 154.5 35.11 155.7 34.6 157 34.1 158.2 33.6 159.5 33.1 160.7 32.61 162 32.13 163.3 31.65 164.6 31.18 165.9 30.71 167.2 30.25 168.5 29.79 169.8 29.34 171.1 28.9 172.4 28.46 173.8 28.02 175.1 27.59 176.5 27.17 177.8 26.75 179.2 26.33 180.6 25.93 182 25.52"/><polyline points="72.57 338.7 72.05 337.6 71.54 336.6 71.02 335.5 70.52 334.4 70.01 333.4 69.52 332.3 69.02 331.3 68.53 330.2 68.04 329.1 67.56 328.1 67.08 327 66.6 325.9 66.13 324.9 65.66 323.8 65.2 322.7 64.74 321.7 64.28 320.6 63.83 319.5 63.39 318.5 62.94 317.4 62.51 316.3 62.07 315.3 61.64 314.2 61.22 313.1 60.79 312 60.38 311 59.96 309.9 59.55 308.8 59.14 307.7 58.74 306.6 58.35 305.6 57.95 304.5 57.56 303.4 57.18 302.3 56.8 301.2 56.42 300.2 56.05 299.1 55.69 298 55.32 296.9 54.97 295.8 54.61 294.8 54.26 293.7 53.92 292.6 53.58 291.5 53.24 290.4 52.9 289.3 52.58 288.3 52.25 287.2 51.93 286.1 51.62 285 51.3 283.9 51 282.8 50.69 281.7 50.4 280.7 50.1 279.6 49.81 278.5 49.67 277.9 49.53 277.4 49.39 276.9 49.24 276.3 49.11 275.8 48.97 275.2 48.83 274.7 48.7 274.1"/><polyline points="110.5 399.1 110.2 398.6 109.8 398.2 109.4 397.7 109.1 397.2 108.7 396.7 108.3 396.2 108 395.8 107.6 395.3 106.9 394.3 106.2 393.4 105.5 392.4 104.8 391.4 104 390.5 103.3 389.5 102.6 388.5 101.9 387.6 101.2 386.6 100.5 385.6 99.86 384.6 99.17 383.6 98.49 382.6 97.81 381.7 97.13 380.7 96.46 379.7 95.79 378.7 95.13 377.7 94.46 376.7 93.81 375.7 93.16 374.7 92.5 373.7 91.86 372.7 91.21 371.7 90.57 370.7 89.94 369.7 89.3 368.6 88.67 367.6 88.05 366.6 87.42 365.6 86.81 364.6 86.19 363.6 85.58 362.5 84.97 361.5 84.37 360.5 83.77 359.5 83.18 358.4 82.58 357.4 81.99 356.4 81.41 355.4 80.83 354.3 80.25 353.3 79.68 352.3 79.11 351.2 78.54 350.2 77.98 349.1 77.42 348.1 76.87 347.1 76.32 346 75.77 345 75.23 343.9 74.69 342.9 74.15 341.8 73.62 340.8 73.09 339.7 72.57 338.7"/><polyline points="160 451.4 159.1 450.6 158.2 449.8 157.3 449 156.4 448.2 155.5 447.4 154.7 446.6 153.8 445.8 152.9 445 152 444.2 151.1 443.4 150.2 442.6 149.4 441.7 148.5 440.9 147.6 440.1 146.8 439.3 145.9 438.4 145 437.6 144.2 436.8 143.3 435.9 142.4 435.1 141.6 434.2 140.7 433.4 139.9 432.5 139.1 431.7 138.2 430.8 137.4 430 136.5 429.1 135.7 428.2 134.9 427.4 134 426.5 133.2 425.6 132.4 424.7 131.6 423.9 130.8 423 129.9 422.1 129.1 421.2 128.3 420.3 127.5 419.4 126.7 418.5 125.9 417.6 125.1 416.7 124.3 415.8 123.5 414.9 122.7 414 122 413.1 121.2 412.2 120.4 411.3 119.6 410.3 118.8 409.4 118.1 408.5 117.3 407.6 116.5 406.6 115.8 405.7 115 404.8 114.3 403.8 113.5 402.9 113.1 402.4 112.8 401.9 112.4 401.5 112 401 111.7 400.5 111.3 400.1 110.9 399.6 110.5 399.1"/><polyline points="40.56 210 40.56 208.9 40.56 207.9 40.58 206.8 40.59 205.8 40.61 204.8 40.64 203.7 40.67 202.7 40.7 201.7 40.74 200.6 40.78 199.6 40.83 198.6 40.88 197.6 40.94 196.5 41 195.5 41.07 194.5 41.14 193.5 41.21 192.4 41.29 191.4 41.38 190.4 41.46 189.4 41.56 188.4 41.66 187.4 41.76 186.4 41.86 185.4 41.98 184.4 42.09 183.4 42.21 182.4 42.34 181.4 42.47 180.4 42.6 179.4 42.74 178.4 42.88 177.4 43.03 176.4 43.18 175.4 43.34 174.4 43.5 173.4 43.66 172.5 43.83 171.5 44.01 170.5 44.19 169.5 44.37 168.6 44.56 167.6 44.75 166.6 44.94 165.6 45.15 164.7 45.35 163.7 45.56 162.8 45.78 161.8 46 160.8 46.22 159.9 46.45 158.9 46.68 158 46.92 157 47.16 156.1 47.4 155.2 47.65 154.2 47.78 153.7 47.91 153.3 48.04 152.8 48.17 152.3 48.3 151.9 48.43 151.4 48.56 150.9 48.7 150.5"/><polyline points="48.7 274.1 48.56 273.6 48.43 273.1 48.3 272.5 48.17 272 48.04 271.4 47.91 270.9 47.78 270.4 47.65 269.8 47.4 268.7 47.16 267.6 46.92 266.6 46.68 265.5 46.45 264.4 46.22 263.3 46 262.2 45.78 261.1 45.56 260.1 45.35 259 45.15 257.9 44.94 256.8 44.75 255.7 44.56 254.7 44.37 253.6 44.19 252.5 44.01 251.4 43.83 250.3 43.66 249.3 43.5 248.2 43.34 247.1 43.18 246 43.03 245 42.88 243.9 42.74 242.8 42.6 241.7 42.47 240.7 42.34 239.6 42.21 238.5 42.09 237.5 41.98 236.4 41.86 235.3 41.76 234.2 41.66 233.2 41.56 232.1 41.46 231 41.38 230 41.29 228.9 41.21 227.9 41.14 226.8 41.07 225.7 41 224.7 40.94 223.6 40.88 222.6 40.83 221.5 40.78 220.4 40.74 219.4 40.7 218.3 40.67 217.3 40.64 216.2 40.61 215.2 40.59 214.1 40.58 213.1 40.56 212.1 40.56 211 40.56 210"/><polyline points="277.4 517.2 276.4 516.9 275.3 516.6 274.3 516.3 273.3 516 272.2 515.6 271.2 515.3 270.1 515 269.1 514.6 268 514.3 267 513.9 266 513.6 264.9 513.2 263.9 512.8 262.8 512.5 261.8 512.1 260.8 511.7 259.7 511.3 258.7 510.9 257.6 510.5 256.6 510.1 255.6 509.7 254.5 509.3 253.5 508.9 252.5 508.5 251.4 508.1 250.4 507.7 249.4 507.2 248.3 506.8 247.3 506.4 246.3 505.9 245.2 505.5 244.2 505 243.2 504.6 242.1 504.1 241.1 503.7 240.1 503.2 239 502.7 238 502.2 237 501.8 236 501.3 234.9 500.8 233.9 500.3 232.9 499.8 231.9 499.3 230.8 498.8 229.8 498.3 228.8 497.8 227.8 497.3 226.8 496.7 225.8 496.2 224.7 495.7 223.7 495.1 222.7 494.6 221.7 494.1 221.2 493.8 220.7 493.5 220.2 493.2 219.7 493 219.2 492.7 218.7 492.4 218.2 492.1 217.7 491.9"/><polyline points="48.7 150.5 48.83 150 48.97 149.6 49.11 149.1 49.24 148.6 49.39 148.2 49.53 147.7 49.67 147.2 49.81 146.8 50.1 145.9 50.4 145 50.69 144 51 143.1 51.3 142.2 51.62 141.3 51.93 140.4 52.25 139.5 52.58 138.6 52.9 137.7 53.24 136.8 53.58 135.9 53.92 135.1 54.26 134.2 54.61 133.3 54.97 132.4 55.32 131.5 55.69 130.7 56.05 129.8 56.43 128.9 56.8 128.1 57.18 127.2 57.56 126.3 57.95 125.5 58.35 124.6 58.74 123.8 59.14 122.9 59.55 122.1 59.96 121.3 60.38 120.4 60.79 119.6 61.22 118.8 61.64 117.9 62.07 117.1 62.5 116.3 62.94 115.5 63.38 114.6 63.83 113.8 64.28 113 64.74 112.2 65.2 111.4 65.66 110.6 66.13 109.8 66.6 109 67.08 108.2 67.56 107.4 68.04 106.7 68.53 105.9 69.02 105.1 69.51 104.3 70.01 103.5 70.52 102.8 71.02 102 71.54 101.3 72.05 100.5 72.57 99.75"/><polyline points="72.57 99.75 73.09 99 73.62 98.25 74.15 97.5 74.69 96.76 75.23 96.02 75.77 95.29 76.32 94.56 76.87 93.83 77.42 93.11 77.98 92.39 78.54 91.68 79.11 90.97 79.68 90.26 80.25 89.55 80.83 88.85 81.41 88.16 81.99 87.46 82.58 86.77 83.17 86.08 83.77 85.4 84.37 84.72 84.97 84.05 85.58 83.38 86.19 82.71 86.8 82.04 87.42 81.38 88.05 80.72 88.67 80.07 89.3 79.42 89.94 78.77 90.57 78.13 91.21 77.49 91.86 76.86 92.5 76.23 93.15 75.6 93.81 74.98 94.46 74.36 95.13 73.75 95.79 73.14 96.46 72.53 97.13 71.92 97.81 71.33 98.49 70.73"/><polyline points="217.7 491.9 217.2 491.6 216.7 491.3 216.2 491 215.7 490.7 215.2 490.4 214.6 490.2 214.1 489.9 213.6 489.6 212.6 489 211.6 488.4 210.6 487.8 209.6 487.2 208.7 486.7 207.7 486.1 206.7 485.5 205.7 484.8 204.7 484.2 203.7 483.6 202.7 483 201.7 482.4 200.7 481.8 199.7 481.1 198.8 480.5 197.8 479.8 196.8 479.2 195.8 478.6 194.8 477.9 193.9 477.3 192.9 476.6 191.9 475.9 191 475.3 190 474.6 189 473.9 188.1 473.3 187.1 472.6 186.1 471.9 185.2 471.2 184.2 470.5 183.3 469.8 182.3 469.1 181.4 468.4 180.4 467.7 179.5 467 178.5 466.3 177.6 465.6 176.6 464.9 175.7 464.2 174.8 463.4 173.8 462.7 172.9 462 172 461.2 171 460.5 170.1 459.8 169.2 459 168.3 458.3 167.3 457.5 166.4 456.8 165.5 456 164.6 455.2 163.7 454.5 162.8 453.7 161.8 452.9 160.9 452.1 160 451.4"/></g></g></g><path transform="matrix(.3461 0 0 .4364 21.74 7.213)" d="m161.9 186.2a62.77 10.46 0 1 1-125.5 0 62.77 10.46 0 1 1 125.5 0z" fill="url(#radialGradient5863)" filter="url(#filter3860)"/><g><path transform="matrix(.3763 0 0 .3763 470.8 -78.09)" d="m-1178 380.5c9.474 35.02 41.47 60.81 79.47 60.81 38 0 70.03-25.8 79.5-60.81-13.48 30.5-44.03 44.13-79.5 44.13-35.47-1e-5 -65.99-13.63-79.47-44.13z" fill="url(#linearGradient5859)" filter="url(#filter3793)" opacity=".5206"/><path transform="matrix(.3278 0 0 .3278 23.02 21.53)" d="m99.54 202.2c-0.3888-0.09876-1.071-0.4183-1.516-0.71-0.4453-0.2917-1.102-0.4395-1.459-0.3283-0.3572 0.1112-0.8875 0.05276-1.179-0.1298-0.4213-0.2643-0.3108-0.4216 0.5415-0.7713 0.9976-0.4093 0.8119-0.4723-2.72-0.9225-2.085-0.2658-4.765-0.7953-5.956-1.177-1.191-0.3814-2.694-0.8007-3.339-0.9318-0.6452-0.1311-1.173-0.3828-1.173-0.5593 0-0.1765 0.244-0.2273 0.5423-0.1129 0.2983 0.1144 0.9669 0.1015 1.486-0.02878 0.9426-0.2366 0.942-0.2377-0.4381-0.9414-0.76-0.3875-1.632-0.7159-1.937-0.7299-0.3055-0.01399-1.53-0.6371-2.721-1.385-2.031-1.274-2.168-1.448-2.195-2.772-0.03713-1.784 0.3984-2.676 1.306-2.676 0.3901 0 0.7092-0.1624 0.7092-0.361 0-0.1986 0.332-0.361 0.7378-0.361 0.4991 0 0.7035-0.2016 0.6317-0.6232-0.05995-0.3522 0.1294-0.6352 0.4354-0.651 1.373-0.07053 2.411-0.6646 3.159-1.806 0.4467-0.6826 0.8122-1.421 0.8122-1.642 0-0.2203 0.325-0.8571 0.7224-1.415 0.5088-0.7145 0.9358-0.9587 1.444-0.8258 1.078 0.2818 0.8812-0.5123-0.4209-1.702-1.324-1.21-2.255-1.612-4.994-2.16-2.595-0.5192-3.407-1.129-3.105-2.332 0.1271-0.5065 0.466-0.9209 0.753-0.9209 0.6735 0 1.33-1.226 1.049-1.959-0.2695-0.7022 1.701-2.628 3.434-3.356 1.413-0.5937 2.684-1.967 2.134-2.307-0.1994-0.1232 0.07205-0.3331 0.6032-0.4664 0.5312-0.1333 1.968-0.7059 3.193-1.272 2.597-1.201 5.656-1.672 5.656-0.8714 0 0.8701 1.018 0.9502 2.023 0.1594 1.032-0.8115 1.947-0.9911 1.947-0.3819 0 0.206 0.3655 0.3353 0.8122 0.2873 0.4467-0.04803 1.434 0.04755 2.195 0.2124 1.323 0.2869 1.781 0.1802 3.937-0.9164 0.935-0.4757 1.716-0.3865 1.95 0.2226 0.1143 0.2978 0.4205 0.5415 0.6806 0.5415s0.5312 0.1755 0.6028 0.39c0.09044 0.2714 0.4014 0.279 1.023 0.02496 0.491-0.2007 1.346-0.4622 1.9-0.581 0.5541-0.1188 0.91-0.3737 0.7909-0.5665-0.1191-0.1927 0.02708-0.3504 0.3249-0.3504s0.6459 0.169 0.7736 0.3757c0.1277 0.2066 0.5434 0.2769 0.9237 0.1562 0.4199-0.1333 0.6916-0.04885 0.6916 0.2149 0 0.305 0.4681 0.3702 1.572 0.2189 1.516-0.2078 1.566-0.1843 1.403 0.6681-0.1465 0.7663 0.05559 0.9797 1.523 1.609 1.285 0.5507 1.862 0.6344 2.398 0.3476 0.5539-0.2964 0.9137-0.214 1.673 0.3828 0.6426 0.5054 1.275 0.6964 1.885 0.5692 0.8812-0.1836 0.8863-0.1754 0.1248 0.2068-0.9615 0.4825-1.22 1.769-0.473 2.358 0.436 0.3438 0.4594 0.5683 0.1179 1.128-0.3392 0.5563-0.3136 0.8602 0.1254 1.487 0.4822 0.6884 0.6042 0.7183 0.9678 0.2373 0.4234-0.5601 1.144-0.5958 1.943-0.09642 0.2441 0.1525 0.7621 0.1069 1.151-0.1013 0.4246-0.2273 0.7901-0.245 0.914-0.04447 0.1136 0.1838 0.692 0.4408 1.285 0.5711 0.5933 0.1303 1.079 0.3468 1.079 0.4811 0 0.2527 1.38 0.9011 2.798 1.315 0.4467 0.1304 0.8122 0.0908 0.8122-0.08794 0-0.5733 1.568-0.2312 1.964 0.4285 0.3054 0.5087 0.2189 0.7481-0.4298 1.189-0.7668 0.521-1.225 2.566-0.4701 2.1 0.5028-0.3108 0.1634 1.056-0.5218 2.102-0.3258 0.4973-1.024 1.187-1.551 1.532l-0.9581 0.6278 1.254 0.4528c0.6897 0.249 1.033 0.4651 0.7641 0.4802-0.2884 0.01617-0.4022 0.2557-0.2768 0.5826 0.1212 0.3159-0.01773 0.6437-0.3224 0.7606-0.2945 0.113-0.5354 0.4182-0.5354 0.6782 0 0.26-0.1943 0.5375-0.4319 0.6167-0.271 0.09032-0.3992 0.7741-0.3444 1.835 0.06848 1.323-0.03403 1.691-0.4706 1.691-0.307 0-0.5581 0.1236-0.5581 0.2747 0 0.1511-0.5559 0.918-1.235 1.704s-1.157 1.556-1.062 1.711c0.09559 0.1546-0.08844 0.2812-0.4089 0.2812-0.3205 0-1.508 0.4807-2.638 1.068-3.669 1.907-8.581 2.849-15.05 2.887-3.776 0.02226-8.01 0.5566-8.656 1.092-0.208 0.1726-1.144 0.5067-2.08 0.7425-1.621 0.4082-1.696 0.4828-1.577 1.561 0.2185 1.973-0.2773 2.329-2.472 1.771zm84.36-43.6c0.2915-0.5956 0.7254-1.895 0.9644-2.888 0.4221-1.754 3.802-9.63 6.375-14.85 0.6991-1.42 1.359-3.206 1.465-3.971 0.2342-1.676 1.346-4.467 2.521-6.328 0.6364-1.008 0.9536-2.238 1.215-4.711 0.8543-8.076 1.043-9.306 1.93-12.55 0.5154-1.886 1.12-4.16 1.343-5.054 0.2234-0.8934 0.5545-2.123 0.7358-2.733 0.531-1.785 0.3789-6.481-0.3734-11.53-0.6499-4.358-2.18-10.84-4.724-20.02-0.5753-2.075-0.9855-3.833-0.9116-3.907 0.07389-0.07389 0.7587 1.168 1.522 2.759 0.7631 1.591 1.574 2.833 1.801 2.759 0.4357-0.1406 1.12 2.232 2.307 8.003 3.578 17.39 2.057 37.15-4.164 54.13-2.301 6.278-6.771 14.94-9.424 18.25-2.964 3.704-3.249 3.995-2.583 2.634zm-134.4-15.38c-0.4964-0.1969-1.39-0.8288-1.985-1.404-0.5956-0.5755-1.245-1.05-1.444-1.055-0.7972-0.01856-3.79-1.909-3.79-2.394 0-0.2854 0.1573-0.5189 0.3497-0.5189 0.1923 0 0.246-0.2843 0.1193-0.6317-0.2194-0.6016-0.196-0.6016 0.491 0 0.3968 0.3474 0.8531 0.6317 1.014 0.6317s0.4731 0.237 0.6935 0.5267c0.2204 0.2897 1.213 0.7175 2.206 0.9507 2.897 0.6805 5.463 2.199 4.666 2.761-0.213 0.1504-0.4922 0.5577-0.6204 0.9051-0.2625 0.7114-0.4256 0.7333-1.7 0.228zm-9.857-4.853c-0.7332-0.4982-1.333-1.062-1.333-1.254 0-0.1914-0.3133-0.348-0.6962-0.348-0.7181 0-1.831-0.8863-1.831-1.458 0-0.1781 0.2442-0.2301 0.5427-0.1156 0.3887 0.1492 0.6063-0.11 0.767-0.9138 0.2602-1.301 0.6669-1.428 1.226-0.3828 0.2176 0.4066 0.7984 0.8924 1.291 1.08 0.779 0.2962 0.8417 0.4399 0.4836 1.109-0.3389 0.6333-0.2723 0.9568 0.3782 1.837 1.046 1.414 0.7943 1.55-0.8286 0.4472zm-2.53-8.237c-0.1357-0.3536-0.2364-0.9139-0.2238-1.245 0.01515-0.3988 0.1405-0.3079 0.3713 0.2693 0.1916 0.4793 0.2923 1.04 0.2238 1.245-0.06849 0.2055-0.2356 0.08432-0.3713-0.2693zm32.03-0.2751c-0.7623-0.3699-1.957-2.08-1.957-2.801 0-0.2175 0.5151-0.3955 1.145-0.3955 0.6296 0 1.442-0.2688 1.805-0.5974 0.6313-0.5713 0.6601-0.5174 0.6601 1.234 0 1.87-0.2553 2.993-0.6703 2.949-0.1277-0.01343-0.57-0.1884-0.9829-0.3887zm120.2-2.275c-0.2651-1.056-0.2317-1.245 1.063-5.975 1.05-3.837 2.435-10.08 2.603-11.73 0.09619-0.9452 1.095-3.792 1.33-3.789 0.047 5.1e-4 0.1299 1.909 0.1843 4.241 0.05435 2.332 0.131 4.89 0.1702 5.684 0.04263 0.8618-0.2401 2.099-0.7013 3.068-0.425 0.8934-0.9632 2.599-1.196 3.79-0.2328 1.191-0.6908 2.572-1.018 3.068-0.3268 0.4963-0.7587 1.214-0.9596 1.596-0.5601 1.063-1.216 1.084-1.476 0.04745zm-122.5-5.614c-0.2978-0.1925-1.23-0.3524-2.071-0.3555-1.408-0.00507-1.572-0.107-2.063-1.283-0.6471-1.549-2.714-4.226-4.587-5.942-2.06-1.887-3.751-5.697-4.031-9.082-0.2417-2.927 0.09008-4.523 1.255-6.032 0.4105-0.5321 0.5818-1.168 0.4531-1.681-0.1514-0.6032-0.02473-0.8827 0.4712-1.04 0.4826-0.1532 0.8187-0.8482 1.165-2.409 0.3005-1.355 0.7433-2.354 1.157-2.613 0.3687-0.2303 0.6704-0.5566 0.6704-0.7252 0-0.1686 0.3334-0.5765 0.7409-0.9065 0.4756-0.3851 0.8592-1.311 1.071-2.585 0.6602-3.968 0.7568-4.526 0.9249-5.337 0.09403-0.4537 0.5495-0.9688 1.012-1.145 0.6079-0.2311 0.9031-0.7028 1.065-1.702 0.1233-0.7602 0.437-2.149 0.6972-3.086l0.4731-1.703 0.6179 1.162c0.6373 1.198 1.395 4.57 1.125 5.007-0.0838 0.1356 0.2762 1.235 0.8 2.442 0.7691 1.773 1.112 2.196 1.781 2.196 0.456 0 1.125-0.3663 1.487-0.814 0.6053-0.749 1.287-1.286 3.575-2.817 0.4629-0.3098 1.164-0.9728 1.558-1.473 0.6522-0.8291 0.6726-1.036 0.2297-2.325-0.2675-0.778-0.5885-1.333-0.7135-1.234-0.2374 0.1886-0.9077-0.6864-0.9173-1.197-0.00304-0.1623 0.3193-0.192 0.7164-0.06592 0.4142 0.1314 0.722 0.06486 0.722-0.1562 0-0.2119 0.2477-0.3853 0.5505-0.3853 0.3028 0 1.429-0.3087 2.502-0.6859 1.687-0.593 1.979-0.6135 2.157-0.151 0.1463 0.3812 0.5684 0.486 1.469 0.3646 0.6949-0.09366 1.263-0.02568 1.263 0.151s0.2437 0.3213 0.5415 0.3213c0.2978 0 0.5415 0.2858 0.5415 0.6351s0.3272 0.8395 0.7272 1.089c0.5395 0.337 0.6692 0.6854 0.5023 1.35-0.2532 1.009-0.08655 1.09 0.9322 0.4539 0.5429-0.339 0.8071-0.3431 1.133-0.01746 0.3256 0.3257 0.5717 0.1551 1.055-0.731 0.5052-0.9262 0.8341-1.14 1.656-1.076 0.5644 0.04393 1.082 0.247 1.15 0.4512 0.06808 0.2043 0.4447 0.3714 0.837 0.3714 0.3922 0 0.6311 0.1328 0.5307 0.2952-0.1003 0.1624 0.1337 0.5231 0.5202 0.8016s0.7026 0.8767 0.7026 1.329c0 0.845 0.5057 1.104 0.9024 0.4618 0.445-0.7201 0.7738-0.3363 0.6185 0.722-0.1827 1.245 0.4202 1.455 1.01 0.3524 0.3498-0.6537 0.4486-0.6728 0.9398-0.1816 0.3019 0.3019 0.4642 0.8336 0.3607 1.182-0.1153 0.3877 0.2597 1.157 0.968 1.985 1.139 1.332 3.213 2.195 7.513 3.124 1.305 0.2821 4.292 2.386 4.292 3.023 0 0.1866 0.2617 0.2388 0.5816 0.116 0.4702-0.1804 0.5383-0.05042 0.3552 0.679-0.1245 0.4962-0.03122 1.215 0.2073 1.597 0.3587 0.5744 0.2818 0.981-0.4442 2.35-0.6747 1.272-0.7887 1.797-0.4924 2.266 0.2976 0.4717 0.153 1.092-0.6329 2.714-0.5602 1.156-1.019 2.387-1.019 2.734s-0.3249 1.237-0.722 1.978c-0.7604 1.419-1.018 4.959-0.361 4.959 0.8384 0 0.2659 1.046-0.8668 1.583-1.536 0.729-2.881 0.745-3.465 0.0411-0.2471-0.2978-0.6035-0.5414-0.7919-0.5414-0.1884 0-0.5724-0.2299-0.8534-0.5108-0.2976-0.2977-1.228-0.5107-2.23-0.5104-3.44 8.9e-4 -3.65-0.04148-3.885-0.7836-0.126-0.3971-0.4212-0.723-0.656-0.7242-0.2348-0.00123-0.8661-0.2314-1.403-0.5114-0.5368-0.28-1.7-0.5092-2.585-0.5092-0.8848 0-1.937-0.176-2.339-0.3911-1.064-0.5697-4.215-0.4929-4.72 0.115-0.231 0.2783-0.86 0.6159-1.398 0.7501-1.111 0.2771-2.308 1.232-2.056 1.639 0.09239 0.1495-0.07532 0.4738-0.3727 0.7206-0.2974 0.2468-0.6406 1.074-0.7628 1.837l-0.2221 1.389-0.7033-0.8942c-0.3868-0.4918-0.9078-0.8941-1.158-0.8941s-0.6716-0.4061-0.9372-0.9024c-0.5141-0.9606-1.084-1.199-1.081-0.4512 0.00122 0.2482 0.2449 0.9165 0.5415 1.485 0.6736 1.291 0.6713 1.34-0.04828 1.064-0.4888-0.1876-0.5627-0.01274-0.4398 1.04 0.1252 1.072 0.04968 1.24-0.4954 1.097-0.6581-0.1721-0.8352 0.5405-0.6968 2.804 0.07129 1.166-0.1355 1.427-2.243 2.831-1.65 1.1-1.806 1.136-2.604 0.613-1.176-0.7709-1.547-0.7001-1.809 0.3459-0.2353 0.9376-1.008 1.152-1.953 0.5415zm10.83-8.291c0-0.1923 0.2437-0.2561 0.5415-0.1419 0.2978 0.1143 0.5415 0.2716 0.5415 0.3496 0 0.07803-0.2437 0.1419-0.5415 0.1419-0.2978 0-0.5415-0.1573-0.5415-0.3497zm-55.74-8.979c-0.125-0.2021-0.05131-0.4762 0.1638-0.609 0.555-0.343 0.913 0.1268 0.4497 0.5902-0.2593 0.2592-0.4612 0.2654-0.6134 0.0189zm14.62-2.583c-0.01087-0.2978 0.1377-0.7851 0.3301-1.083 0.4264-0.6598 0.4264-0.08992 0 0.9024-0.2045 0.476-0.3169 0.5375-0.3301 0.1805zm1.774-21.45c0-0.06874 0.2437-0.3272 0.5415-0.5743 0.3121-0.259 0.5415-0.2941 0.5415-0.08282 0 0.2016-0.2437 0.4601-0.5415 0.5743-0.2978 0.1143-0.5415 0.1515-0.5415 0.08282zm14.92-4.647c0.2327-0.3982 0.951-1.264 1.596-1.923 0.6452-0.6596 1.173-1.382 1.173-1.606 0-0.2235 0.3249-0.8193 0.722-1.324 0.8606-1.094 0.9601-2.072 0.1805-1.773-1.162 0.4458-0.4579-0.7166 0.9052-1.495 0.7926-0.4526 1.441-1.058 1.441-1.345 0-0.6491 2.137-2.637 3.906-3.634 1.263-0.7118 4.682-2.476 5.84-3.013 0.2978-0.1382 1.135-0.6111 1.861-1.051 1.182-0.7162 1.377-0.7422 1.869-0.2498 0.3024 0.3024 0.7799 0.5498 1.061 0.5498 0.2812 0 0.8053 0.3249 1.165 0.7219 0.8727 0.9644 1.307 0.9119 2.466-0.2975 0.7622-0.7956 1.218-0.984 2.075-0.8583 0.779 0.1143 1.039 0.3142 0.8957 0.688-0.1112 0.2898-0.2022 0.7572-0.2022 1.039 0 0.766-0.64 0.617-0.9024-0.21-0.2349-0.7402-0.9748-1.038-0.8122-0.3274 0.04965 0.217-0.2346 0.5825-0.6317 0.8122-0.3971 0.2297-0.8518 0.6207-1.011 0.8688-0.1588 0.2482-0.5421 0.4512-0.8519 0.4512-0.3098 0-1.49 0.4942-2.624 1.098-1.79 0.9541-2.14 1.321-2.669 2.798-0.7585 2.116-0.756 2.213 0.0514 2.002 0.3613-0.09451 0.8685 0.08315 1.127 0.3948 0.4169 0.5024 0.2581 0.5666-1.402 0.5666-1.636 0-1.987 0.1362-2.781 1.08-1.295 1.539-4.482 2.245-3.957 0.8769 0.1009-0.2631-0.1322-0.5764-0.5207-0.6997-0.3869-0.1228-0.7035-0.3607-0.7035-0.5287 0-0.168-0.3655-0.1921-0.8122-0.0536-1.265 0.3923-3.154 1.629-3.156 2.066-0.00126 0.2173-0.4082 0.867-0.9043 1.444-0.4961 0.5769-0.9022 1.158-0.9024 1.292-2.2e-4 0.134-0.8812 0.7206-1.958 1.304-1.7 0.9209-1.902 0.965-1.534 0.336zm-8.578-3.253c0.1356-0.356 0.3374-0.5564 0.4485-0.4452 0.1112 0.1111 2.5e-4 0.4024-0.2464 0.6473-0.3565 0.3538-0.398 0.3124-0.2021-0.2021zm38.88-0.1123c0.12-0.1199 0.4313-0.1328 0.6919-0.02848 0.288 0.1152 0.2024 0.2008-0.2181 0.2181-0.3805 0.01568-0.5937-0.06963-0.4738-0.1896zm-33.24-3.406c-1.168-1.088-0.9589-1.599 0.2904-0.7096 0.5943 0.4232 1.263 0.6564 1.486 0.5184 0.7063-0.4366 2.855-0.8213 2.64-0.4726-0.2348 0.38-2.564 1.4-3.198 1.4-0.2361 0-0.7848-0.3312-1.219-0.736zm44.06-0.2567c-0.3477-0.3474-1.444-0.9004-2.437-1.229-1.683-0.5571-1.726-0.5995-0.6346-0.6317 1.438-0.04244 4.786 1.37 4.786 2.018 0 0.6752-0.9708 0.5858-1.715-0.1579zm7.13 0.2666c0-0.4091 1.361-1.167 1.817-1.012 0.183 0.06251-0.1508 0.3904-0.742 0.7286-0.5911 0.3382-1.075 0.4658-1.075 0.2834zm93.03-2.072c-1.989-3.981-3.905-7.352-5.487-9.656-0.8179-1.191-2.036-3.14-2.706-4.332-0.6704-1.191-1.575-2.653-2.011-3.249-0.4354-0.5956-0.9853-1.458-1.222-1.916-0.7765-1.504 0.724-0.7816 2.106 1.014 0.6878 0.8934 1.686 2.061 2.219 2.595 1.243 1.246 6.432 11.53 7.659 15.18 0.5171 1.539 0.877 2.798 0.7997 2.798-0.07725 0-0.6885-1.096-1.358-2.437zm-88.15-0.09026c0.1227-0.1985 0.4572-0.361 0.7432-0.361 0.2861 0 0.5202 0.1624 0.5202 0.361 0 0.1986-0.3344 0.361-0.7432 0.361-0.4088 0-0.6428-0.1624-0.5202-0.361zm1.985-0.2018c0-0.3095 0.1624-0.4624 0.361-0.3397 0.1985 0.1227 0.361 0.376 0.361 0.5628 0 0.1868-0.1624 0.3397-0.361 0.3397s-0.361-0.2532-0.361-0.5628zm-7.49-0.1881c0.4291-0.2499 0.8343-0.2499 1.263 0 0.5154 0.3002 0.399 0.3679-0.6317 0.3679s-1.147-0.06775-0.6317-0.3679zm3.617 0.1718c0.12-0.12 0.4313-0.1328 0.6919-0.0285 0.288 0.1152 0.2024 0.2008-0.2181 0.2181-0.3805 0.01568-0.5937-0.06963-0.4738-0.1896zm5.849-0.1586c-0.1174-0.1899 0.1211-0.3452 0.5299-0.3452 0.8716 0 0.9595 0.2007 0.2134 0.4871-0.2914 0.1118-0.6259 0.048-0.7433-0.1419zm1.994-0.4264c4.9e-4 -0.4988 0.2153-0.5798 1.08-0.4068 0.8123 0.1624 1.237 0.03581 1.715-0.5118 0.6569-0.7524 3.343-1.381 3.343-0.7824 0 0.4717 3.378 0.4255 3.856-0.05278 0.5646-0.5646 3.76-0.4947 4.126 0.09024 0.2019 0.3227 0.09608 0.5248-0.3211 0.6133-0.3422 0.07261-0.7291 0.3018-0.8598 0.5092-0.1307 0.2075-1.511 0.4332-3.068 0.5016-1.557 0.06845-4.415 0.2454-6.351 0.3932-3.196 0.2441-3.52 0.2115-3.52-0.3539zm1.181-1.581c0.1199-0.1199 0.4313-0.1328 0.6919-0.02849 0.288 0.1152 0.2024 0.2008-0.2181 0.2181-0.3805 0.01569-0.5937-0.06963-0.4738-0.1896zm13.92-1.137c-0.4508-0.09715-0.6298-0.6213-0.722-2.113-0.1266-2.05 0.1402-2.668 1.152-2.668 0.3238 0 0.8017-0.3978 1.062-0.884 0.2602-0.4862 0.8156-0.9329 1.234-0.9927 0.6129-0.0875 0.7366-0.3162 0.6353-1.175-0.111-0.9415-0.0582-1.01 0.4512-0.5875 0.4961 0.4117 0.577 0.3771 0.577-0.2471 0-0.5439 0.3169-0.7854 1.263-0.963 0.6949-0.1304 1.263-0.3921 1.263-0.5816 0-0.1896 0.2843-0.3482 0.6317-0.3526 0.3475-0.00441 1.038-0.3257 1.534-0.7139 0.4964-0.3882 1.113-0.7095 1.37-0.7139 0.2572-0.00441 0.8673-0.4077 1.356-0.8962 0.7355-0.7356 1.198-0.8751 2.691-0.8122 0.9914 0.04182 1.803 0.2054 1.803 0.3635 8e-5 0.1581-0.5176 0.5642-1.15 0.9024-0.6327 0.3382-1.521 0.9678-1.974 1.399-0.4528 0.4313-1.136 0.8834-1.518 1.005-0.3821 0.1213-0.8848 0.6794-1.117 1.24s-0.8996 1.373-1.483 1.804c-0.5832 0.4312-1.06 1.014-1.06 1.296 0 0.2818-0.7716 1.307-1.715 2.279-2.37 2.441-4.763 3.741-6.285 3.413zm-25.44-3.789c0.01955-2.099-0.03785-2.265-0.8265-2.378-0.7002-0.1008-0.8138 0.00667-0.6538 0.6184 0.1074 0.4109-0.03077 0.9266-0.3106 1.159-0.2773 0.2301-0.5042 0.6596-0.5042 0.9543 0 0.3403-0.2084 0.4559-0.571 0.3168-0.314-0.1205-0.7526-0.2191-0.9746-0.2191-0.2811 0-0.2722-0.1315 0.02952-0.4332 0.2382-0.2382 0.4368-0.6849 0.4412-0.9927 0.00441-0.3077 0.3257-0.9656 0.7139-1.462 0.8883-1.136 0.8977-1.444 0.04422-1.444-0.3728 0-0.8877-0.2529-1.144-0.562-0.4034-0.4861-0.3484-0.5423 0.407-0.4165 0.4804 0.08005 1.179 0.2774 1.553 0.4385 0.404 0.1742 0.9509 0.1235 1.349-0.125 1.081-0.6749 1.56-0.492 1.981 0.7552 0.2178 0.6453 0.5104 1.436 0.6502 1.757 0.181 0.4158 0.02744 0.6436-0.5324 0.79-0.7125 0.1863-0.7634 0.361-0.5397 1.852 0.2199 1.467 0.1715 1.647-0.443 1.647-0.6079 0-0.6875-0.2682-0.6689-2.256zm-17.82-0.06484c0-0.09927 0.362-0.3743 0.8046-0.6111 1.028-0.5501 3.691-0.8743 3.407-0.4147-0.1158 0.1874-0.7875 0.3625-1.493 0.389-0.7051 0.0265-1.605 0.2212-2.001 0.4327s-0.7185 0.3033-0.7185 0.2041zm26.08-0.5616c-0.6452-0.3941-1.197-1.003-1.227-1.354-0.02941-0.3504-0.07002-0.8807-0.09026-1.178-0.02024-0.2978-0.4835-0.9808-1.029-1.518-0.546-0.537-0.9927-1.23-0.9927-1.539 0-1.043-0.797-1.908-1.591-1.727-0.7269 0.1665-0.7247 0.1501 0.0565-0.43 0.4467-0.3317 0.8122-0.8177 0.8122-1.08s0.2437-0.679 0.5415-0.9262c0.2978-0.2472 0.5414-0.6647 0.5414-0.928 0-0.6968-1.608-2.321-2.298-2.321-0.3247 0-0.5903-0.1624-0.5903-0.361 0-0.1986 0.3926-0.361 0.8723-0.361 0.5333 0 1.15-0.3815 1.588-0.9818l0.7152-0.9818 1.498 1.498c0.8241 0.8242 1.955 1.599 2.513 1.721 0.5579 0.1225 1.458 0.7787 1.999 1.458 0.6288 0.7886 1.42 1.317 2.187 1.461 0.8787 0.1648 1.319 0.5077 1.637 1.274 0.4875 1.177 0.4684 1.17 2.022 0.7243 0.9815-0.2815 1.187-0.2161 1.57 0.4984 0.5163 0.9648 0.2068 2.253-0.7635 3.179-0.3724 0.3552-0.6796 1.005-0.6827 1.444-0.00861 1.247-0.528 1.773-1.66 1.681-0.5729-0.04628-1.326 0.03777-1.673 0.1868-0.3474 0.149-0.8883 0.1724-1.202 0.05212-0.8912-0.342-3.352 0.1726-3.473 0.7262-0.08542 0.3926-0.3569 0.3464-1.282-0.2184zm-19.94 0.03336c0-0.4428 1.017-0.7984 1.242-0.4342 0.1002 0.1622 0.07837 0.3987-0.04859 0.5257-0.344 0.344-1.193 0.2789-1.193-0.09152zm32.49-0.1978c0-0.08755 0.1624-0.2596 0.361-0.3823 0.1986-0.1227 0.361-0.05108 0.361 0.1592 0 0.2102-0.1624 0.3823-0.361 0.3823-0.1985 0-0.361-0.07162-0.361-0.1592zm2.527 0.01732c0-0.07802 0.2521-0.2386 0.5602-0.3568 0.3212-0.1233 0.4661-0.06275 0.3397 0.1419-0.212 0.343-0.8999 0.5073-0.8999 0.215zm-46.92-1.753c0.00669-0.5852 0.3939-0.9892 1.385-1.446 1.309-0.6028 1.435-0.6029 2.608-0.00351 1.117 0.571 1.156 0.6409 0.4189 0.7488-0.4471 0.06541-0.9808 0.4325-1.186 0.8157-0.2721 0.5085-0.7596 0.6968-1.804 0.6968-1.246 0-1.43-0.1049-1.422-0.8122zm48 0.6703c0-0.07803 0.2436-0.2354 0.5415-0.3497 0.2978-0.1143 0.5414-0.05044 0.5414 0.1419 0 0.1923-0.2436 0.3496-0.5414 0.3496-0.2978 0-0.5415-0.06386-0.5415-0.1419zm38.33-2.859c-0.4317-0.4595-0.7797-1.231-0.7734-1.715 0.01074-0.823 0.729-2.143 1.166-2.143 0.3513 0 0.9882 2.245 0.9882 3.483 0 1.426-0.3134 1.51-1.381 0.3741zm3.739-1.668c-0.3146-0.6083-0.7302-1.106-0.9236-1.106-0.1935 0-0.3517-0.2321-0.3517-0.5157 0-0.2836-0.2123-0.7304-0.4718-0.9927-0.6388-0.6458-1.694-3.692-2.027-5.854-0.2078-1.347-0.5159-1.944-1.296-2.512-0.5628-0.41-2.469-2.132-4.236-3.827-1.767-1.695-3.688-3.382-4.269-3.75-0.5808-0.3677-1.056-0.8242-1.056-1.014 0-0.5969-2.238-2.421-2.737-2.229-0.4956 0.1902-2.593-0.8329-3.219-1.57-0.6762-0.7964-1.797-0.7209-1.918 0.1292-0.06154 0.4322-0.6893 1.226-1.395 1.765-1.196 0.9121-1.271 1.086-1.106 2.553 0.1486 1.318 0.07623 1.575-0.4448 1.575-0.3422 0-1.186-0.5475-1.875-1.217-1.058-1.027-1.347-1.147-1.86-0.7724-0.3346 0.2446-0.6075 0.9285-0.6075 1.522 0 0.5929-0.2394 1.558-0.5319 2.144-0.4928 0.9878-0.521 2.524-0.07876 4.279 0.1001 0.3971 0.296 1.169 0.4354 1.715 0.1394 0.546 0.114 0.9953-0.05637 0.9984-0.9213 0.01715-2.648 2.173-3.057 3.814-0.2426 0.9764-0.6986 2.13-1.013 2.565-0.7405 1.022-3.418 2.078-4.184 1.65-0.5024-0.2812-0.478-0.4341 0.2091-1.308 0.5513-0.7009 0.7187-1.286 0.5742-2.008-0.3005-1.502 0.6735-2.372 3.81-3.4 0.3412-0.1119 0.8601-0.7774 1.153-1.479 0.378-0.9047 0.6961-1.213 1.094-1.06 0.83 0.3185 0.7165-0.9366-0.2885-3.19-0.4674-1.048-0.9497-2.19-1.072-2.538-0.281-0.8006-1.688-0.8436-1.688-0.05164 0 0.388-0.1949 0.5053-0.5887 0.3542-0.3534-0.1356-1.084 0.1515-1.827 0.7185-0.681 0.5194-1.812 1.103-2.512 1.296-1.113 0.3072-1.246 0.4628-1.054 1.228 0.121 0.482 0.1299 0.8765 0.0199 0.8765-0.3721 0-2.158-1.243-2.447-1.703-0.1578-0.2513-1.087-0.8009-2.064-1.221-2.247-0.9665-2.612-1.42-2.587-3.216 0.02965-2.148 0.2949-2.675 1.784-3.54 1.68-0.9757 3.335-2.435 3.335-2.94 0-0.5418-1.779-2.246-3.124-2.992-1.18-0.6548-4.297-0.8893-3.93-0.2957 0.1142 0.1848 0.0426 0.4381-0.1592 0.5628-0.2018 0.1247-0.3669-0.01031-0.3669-0.3 0-0.3384-0.6777-0.6856-1.895-0.971-1.042-0.2444-2.115-0.6189-2.383-0.8324-0.5257-0.4184-0.6991-0.4572-3.594-0.8042-2.499-0.2995-7.289-2.697-7.289-3.649 0-0.2367-0.3249-0.5334-0.722-0.6594-0.397-0.126-0.7219-0.3697-0.7219-0.5415 0-0.1718-0.3249-0.4154-0.722-0.5415-1.137-0.3608-0.9308-1.619 0.2707-1.652 0.954-0.0264 0.9434-0.04525-0.2707-0.4839l-1.263-0.4564 1.444-0.3813c0.9274-0.2449 1.152-0.3946 0.6287-0.4186-0.7148-0.03271-0.7613-0.1238-0.3772-0.7387 0.2409-0.3858 0.8108-0.795 1.266-0.9093 1.212-0.3041 1.021-0.7385-0.7057-1.611l-1.534-0.7746 1.376 0.2136c1.392 0.216 3.858-0.3586 3.858-0.899 0-0.1614-0.5279-0.3833-1.173-0.4931-0.6452-0.1098-2.022-0.4024-3.059-0.6503-1.764-0.4217-2.933-0.2252-2.018 0.3394 0.2236 0.1381-0.6745 0.2511-1.996 0.2511-2.138 0-2.39 0.07346-2.288 0.6679 0.06299 0.3679-0.04501 0.5694-0.2404 0.4486-0.1952-0.1206-0.7613-0.06479-1.258 0.1241-0.6865 0.261-0.8789 0.5648-0.8019 1.266 0.09625 0.8769 0.0143 0.9226-1.654 0.9226-1.531 0-1.755-0.09501-1.755-0.7422 0-0.5332 0.46-0.9457 1.633-1.465 1.703-0.7535 1.851-1.403 0.3184-1.403-0.4916 0-1.254-0.2304-1.693-0.512-1.026-0.6572-1.913-0.757-3.611-0.4064-2.129 0.4392-6.352-0.91-5.737-1.833 0.2739-0.4109 2.627-1.067 5.12-1.427 0.8934-0.1291 1.787-0.362 1.985-0.5174 1.296-1.015 18.77-1.51 25.45-0.7206 12.56 1.485 22.32 4.334 33.39 9.748 13.58 6.643 25.66 16.53 35.1 28.73 1.763 2.278 0.3625 1.838-3.315-1.043-1.695-1.328-3.165-2.415-3.266-2.415s-0.184 0.2263-0.184 0.5029c0 0.7344-0.96 0.9827-1.462 0.3781-0.2374-0.286-0.6045-0.52-0.8159-0.52-0.2114 0 0.0655 0.4695 0.6153 1.043 0.6383 0.6662 0.8569 1.131 0.605 1.287-0.3516 0.2173-1.441-0.7327-2.86-2.494-0.5575-0.6922-1.064-0.4556-0.5255 0.2455 0.8088 1.053 1.623 4.663 1.429 6.334-0.2286 1.967-0.5593 3.636-0.8742 4.413-0.1207 0.2978-0.3918 1.259-0.6024 2.137-0.4726 1.968-1.066 2.222-1.815 0.7742zm-80.54-0.7771c0-0.485 0.123-0.5226 0.6446-0.1968 0.3545 0.2214 0.6446 0.4911 0.6446 0.5994 0 0.1082-0.2901 0.1968-0.6446 0.1968-0.36 0-0.6446-0.2646-0.6446-0.5994zm14.28 0.3406c0-0.2961-1.016-0.3574-3.58-0.2162-3.512 0.1935-3.596 0.1795-4.422-0.7414l-0.8416-0.9387 0.98 0.6134c1.109 0.6944 2.621 0.7642 4.945 0.2284 0.8848-0.204 1.688-0.2285 1.805-0.05509 0.1162 0.1718 0.4955 0.4172 0.8429 0.5453 0.5603 0.2067 0.9161 0.9777 0.4512 0.9777-0.09926 0-0.1805-0.1861-0.1805-0.4135zm-13.12-0.9101c-0.1324-0.1324-0.2407-0.4085-0.2407-0.6137 0-0.2262 0.1681-0.2049 0.4272 0.05413 0.2349 0.235 0.3432 0.5111 0.2406 0.6137-0.1026 0.1026-0.2948 0.0782-0.4271-0.05412zm93.93-6.889c-0.449-0.5725-0.4362-0.5853 0.1363-0.1363 0.6013 0.4716 0.7925 0.768 0.4954 0.768-0.07497 0-0.3592-0.2843-0.6317-0.6317zm-89.99-0.9783c0.2324-0.926-0.4837-1.641-0.9264-0.9245-0.5642 0.913-0.7447-0.3334-0.2275-1.571l0.5221-1.25 1.646 0.7571c1.132 0.5208 1.541 0.8836 1.309 1.162-0.185 0.2229-0.243 0.7623-0.1289 1.199 0.1141 0.4364 0.1469 0.7934 0.07276 0.7934-0.07411 0-0.6618 0.1512-1.306 0.3359-1.109 0.3181-1.16 0.2914-0.961-0.5021zm5.459-1.398c-0.108-0.2816-0.6222-0.5119-1.143-0.5119-1.081 0-1.447-0.2458-1.129-0.7589 0.1372-0.2219 0.6233-0.1544 1.292 0.1793 1.105 0.5513 1.65 1.13 1.348 1.431-0.09462 0.09462-0.2604-0.05832-0.3685-0.3399zm-1.337-2.875c0-0.3059-0.09859-0.8131-0.2191-1.127-0.1205-0.314-0.03928-0.571 0.1805-0.571 0.2198 0 0.3996 0.2301 0.3996 0.5114 0 0.2813 0.1802 0.5715 0.4006 0.6449 0.2506 0.08354 0.183 0.3141-0.1805 0.6158-0.4913 0.4078-0.581 0.3963-0.581-0.07393zm0.5668-2.018c-0.1088-0.176 0.1253-0.4044 0.5202-0.5077 0.4652-0.1216 0.7179-0.00904 0.7179 0.32 0 0.5578-0.9229 0.6977-1.238 0.1877zm-4.237-0.733c0.1656-0.4798 0.593-0.9153 0.9497-0.9677 0.5279-0.07748 0.5589-0.01584 0.1668 0.331-0.265 0.2344-0.6924 0.6698-0.9497 0.9677-0.3952 0.4574-0.4211 0.406-0.1667-0.331zm6.64-1.542c0.07858-0.2358 0.3359-0.493 0.5718-0.5716 0.2638-0.08793 0.3445 0.0771 0.2095 0.4287-0.2518 0.6562-0.9979 0.7927-0.7813 0.143zm-3.664-0.8047c-0.01568-0.3805 0.06965-0.5937 0.1896-0.4738 0.12 0.12 0.1328 0.4313 0.02849 0.6919-0.1152 0.288-0.2008 0.2024-0.2181-0.2181zm1.152-0.7896c0.1199-0.1199 0.4313-0.1328 0.6919-0.02848 0.288 0.1152 0.2024 0.2008-0.2181 0.2181-0.3805 0.01567-0.5937-0.06964-0.4738-0.1896zm2.546-0.8161c0.1588-0.794 0.0115-1.204-0.6343-1.766-1.273-1.106-0.8917-2.445 0.7265-2.554 0.6793-0.04573 1.248 0.04375 1.265 0.1989 0.1457 1.384 0.4326 2.468 0.6967 2.631 0.4237 0.2619-0.2073 1.258-0.8035 1.269-0.2554 0.00445-0.4166 0.2887-0.3583 0.6317 0.06532 0.3841-0.1253 0.6236-0.4964 0.6236-0.4705 0-0.5571-0.2264-0.3956-1.034zm18.77-4.09c-1.144-0.5527-1.359-1.374-0.3608-1.374 0.9884 0 2.506 1.004 2.22 1.469-0.2618 0.4236-0.8476 0.3938-1.859-0.09489zm-18.35-5.858c-0.728-1.352-0.5091-2.043 0.4548-1.435 1.096 0.6913 1.401 1.521 0.7867 2.136-0.5081 0.5081-0.6263 0.4414-1.241-0.7009zm-14.86-7.29c-0.2186-0.5695 0.4116-1.205 1.206-1.215 0.575-0.00761 0.179 1.34-0.4667 1.588-0.2857 0.1097-0.6183-0.05796-0.739-0.3725zm-6.48-1.038c-0.1165-0.3036-0.3877-0.4222-0.6204-0.2712-0.2274 0.1475-1.33 0.2684-2.451 0.2686-1.817 4.4e-4 -2.023-0.07469-1.904-0.6947 0.07358-0.3824-0.03271-0.8958-0.2362-1.141-0.4026-0.4851-0.2322-0.6535 1.22-1.206 0.6996-0.266 0.8968-0.2459 0.7777 0.0794-0.3084 0.8429 0.5061 1.469 2.005 1.542 1.568 0.07607 2.784 0.8825 2.361 1.567-0.3464 0.5605-0.9102 0.4902-1.154-0.1438zm4.2 0.3802c0-0.08754 0.1624-0.2596 0.361-0.3823 0.1985-0.1227 0.361-0.05107 0.361 0.1592 0 0.2103-0.1624 0.3823-0.361 0.3823s-0.361-0.07165-0.361-0.1592zm-1.346-0.4199c0.12-0.1199 0.4313-0.1328 0.6919-0.02848 0.288 0.1152 0.2024 0.2008-0.2181 0.2181-0.3805 0.01566-0.5937-0.06965-0.4738-0.1896zm0.3503-0.8769c0.9413-0.1585 2.16-0.1533 2.707 0.01143 0.7285 0.2192 0.2691 0.2965-1.711 0.2881-2.554-0.01078-2.611-0.02771-0.9958-0.2996zm-9.361-3.272c0.7564-0.178 1.709-0.5023 2.117-0.7208 0.5822-0.3116 0.7079-0.2945 0.5834 0.07912-0.1853 0.5559-1.456 0.9658-2.993 0.9655-0.9861-2.6e-4 -0.96-0.0292 0.2923-0.3238z" fill="url(#linearGradient5857)" filter="url(#filter4037)" opacity=".6479"/><path d="m53.17 85.11c-0.5833-0.1529-1.105-0.5662-0.8417-0.6671 0.253-0.09709 0.03377-0.6812-0.2838-0.7561-0.1578-0.03725-0.2776-0.1562-0.2906-0.2885-0.01216-0.1238-0.04166-0.2764-0.06554-0.3391-0.02387-0.06271 0.07687-0.308 0.2239-0.5451 0.202-0.3258 0.2457-0.5068 0.1787-0.7411-0.1286-0.4502-0.1387-0.8431-0.02939-1.145 0.1535-0.4242 0.2043-1.952 0.08585-2.579-0.1271-0.6734-0.2756-0.814-1.473-1.395-1.117-0.5421-1.824-1.029-1.824-1.256 0-0.1003-0.1724-0.3928-0.3832-0.6501-0.2107-0.2573-0.5461-0.7756-0.7454-1.152-0.4337-0.8191-0.8427-1.401-1.203-1.71-0.1459-0.1254-0.3206-0.3975-0.3883-0.6047-0.1177-0.3605-0.1058-0.3868 0.2778-0.6131 0.4318-0.2548 0.4915-0.6059 0.1031-0.6063-0.313-2.83e-4 -0.3548-0.4337-0.07965-0.8266 0.1208-0.1726 0.1986-0.3732 0.1729-0.4459-0.02581-0.07288 0.1094-0.1664 0.3014-0.2086 0.2398-0.05267 0.3697-0.1624 0.4175-0.3524 0.03809-0.1518 0.1476-0.276 0.2433-0.276 0.2276 0 0.789-0.6019 0.6153-0.6598-0.07685-0.02562-0.1303-0.3076-0.1308-0.6894-5.26e-4 -0.4517-0.06866-0.749-0.2265-0.9881-0.1241-0.1881-0.2008-0.4208-0.1704-0.517 0.03451-0.1091-0.07379-0.2513-0.2877-0.3776-0.311-0.1837-0.3597-0.186-0.5211-0.02452-0.09795 0.09796-0.2292 0.1781-0.2917 0.1781-0.06246 0-0.08099 0.1026-0.04118 0.228 0.05137 0.1618 0.02049 0.228-0.1063 0.228-0.0983 0-0.1787-0.08551-0.1787-0.19 0-0.1045-0.03387-0.1561-0.07528-0.1147-0.04141 0.04141-0.1469-0.02701-0.2345-0.152-0.08756-0.125-0.2331-0.2273-0.3234-0.2273-0.1639 0-1.189-1.007-1.19-1.169-3.55e-4 -0.04703-0.05498-0.08552-0.1214-0.08552-0.06642 0-0.08222 0.06414-0.03513 0.1425 0.05819 0.09684 0.02379 0.09237-0.1073-0.01396-0.1061-0.08607-0.1931-0.2913-0.1934-0.4561-2.61e-4 -0.1648-0.154-0.5305-0.3416-0.8127-0.1876-0.2822-0.3413-0.5772-0.3416-0.6556-2.78e-4 -0.07838-0.09541-0.1425-0.2114-0.1425-0.116 0-0.4146-0.1475-0.6635-0.3278-0.2489-0.1803-0.5542-0.3601-0.6784-0.3995-0.1242-0.03944-0.4183-0.3737-0.6535-0.7429-0.597-0.9371-0.7643-1.069-1.244-0.9786-0.377 0.07073-0.4369 0.03203-1.294-0.8365-1.299-1.316-1.55-1.615-1.864-2.214-0.2495-0.477-0.2653-0.5793-0.1425-0.9189 0.1845-0.5103 0.1743-0.8812-0.04759-1.718-0.1022-0.3853-0.2-0.8131-0.2173-0.9506-0.01732-0.1375-0.07332-0.3171-0.1245-0.3991-0.05114-0.08196-0.1034-0.3286-0.1161-0.5481-0.01274-0.2195-0.06242-0.6043-0.1104-0.8551-0.048-0.2508-0.09144-0.9435-0.09655-1.539-0.005107-0.5957-0.06614-1.181-0.1356-1.301-0.1213-0.209-0.1321-0.207-0.2695 0.04973-0.1582 0.2956-0.2365 4.444-0.08391 4.444 0.04703 1.5e-5 0.08176 0.1668 0.07718 0.3706-0.007593 0.3379-0.02803 0.3153-0.2321-0.2565-0.1525-0.4275-0.201-0.764-0.1522-1.057 0.04774-0.2872 0.002559-0.622-0.1359-1.007-0.1991-0.5537-0.1992-0.5814-0.003468-0.691 0.1722-0.09638 0.1923-0.2078 0.1287-0.7161-0.04316-0.3455-0.01265-0.9608 0.0716-1.444 0.1842-1.057 0.1733-1.591-0.04104-2.021-0.1023-0.2051-0.13-0.3978-0.07057-0.4915 0.05374-0.0848 0.0985-0.3363 0.09945-0.5589 9.6e-4 -0.2226 0.06332-0.4663 0.1386-0.5416 0.07525-0.07525 0.098-0.1368 0.05055-0.1368-0.04746 0-0.01027-0.1085 0.08262-0.2411 0.09288-0.1326 0.1447-0.3042 0.1151-0.3812-0.07248-0.1889 0.3617-1.269 0.6742-1.677 0.7902-1.032 1.717-2.022 1.832-1.957 0.07162 0.04093 0.09273 0.03296 0.04688-0.0177-0.08931-0.09872 0.3543-0.9706 0.4939-0.9706 0.1733 0 0.1723 0.2905-0.001479 0.4219-0.1563 0.1181-0.1481 0.1286 0.05965 0.07636 0.3729-0.09373 0.6795-0.7963 0.6653-1.524-0.008534-0.4373 0.05093-0.7187 0.1965-0.9297 0.1148-0.1665 0.2087-0.3845 0.2087-0.4846 0-0.1001 0.04785-0.1819 0.1063-0.1819 0.05849 0 0.1392-0.1036 0.1794-0.2301 0.04016-0.1266 0.2208-0.3919 0.4014-0.5896 0.1806-0.1977 0.3021-0.402 0.27-0.454-0.03211-0.05196-0.01511-0.09447 0.03778-0.09447 0.05289 0 0.1931-0.1667 0.3117-0.3705 0.1185-0.2038 0.2477-0.3962 0.2871-0.4276 0.03938-0.03136 0.187-0.247 0.3281-0.4792 0.253-0.4165 0.2533-0.4216 0.02192-0.377-0.2009 0.03869-0.2176 0.0134-0.116-0.1764 0.06523-0.1219 0.1711-0.2216 0.2353-0.2216 0.0642 0 0.08502-0.0513 0.04627-0.114-0.03876-0.06271-0.021-0.114 0.03945-0.114 0.06045 0 0.09062-0.2002 0.06705-0.4449-0.03065-0.3182 0.02113-0.5262 0.1819-0.7306 0.3018-0.3837 0.2991-0.5826-0.005676-0.4195-0.2298 0.123-0.4537 0.06937-0.4537-0.1087 0-0.1318 0.4377-0.2324 0.4791-0.1101 0.01868 0.05517 0.1745 0.00801 0.3463-0.1048l0.3123-0.2051-0.7114 0.05039c-0.3913 0.02772-0.7424 0.09882-0.7803 0.158-0.07638 0.1194-0.8579 0.009507-1.128-0.1586-0.123-0.07645-0.08002-0.09225 0.1528-0.05622 0.3676 0.05688 1.121-0.1409 1.039-0.2729-0.02958-0.04786 0.0212-0.162 0.1129-0.2537 0.09165-0.09165 0.1363-0.197 0.09925-0.234-0.03707-0.03706 0.06799-0.1189 0.2335-0.1818 0.1655-0.06292 0.3009-0.1686 0.3009-0.2348 0-0.06623 0.08978-0.1532 0.1995-0.1933 0.1097-0.04006 0.3219-0.1667 0.4714-0.2815 0.3217-0.2469 0.7934-0.2738 0.8792-0.05027 0.08965 0.2336 0.7108-0.02585 0.7538-0.3149 0.03892-0.2613 0.7745-0.7276 0.7745-0.491 0 0.08024-0.0571 0.203-0.1269 0.2728-0.06978 0.06979-0.08981 0.1869-0.0445 0.2602 0.05733 0.09275 0.1739 0.04825 0.3834-0.1463 0.5391-0.5008 0.8896-0.6751 1.118-0.5563 0.1149 0.05975 0.3603 0.169 0.5451 0.2428 0.1849 0.07377 0.2874 0.1691 0.2278 0.2118-0.2014 0.1445-0.4983 0.8922-0.5708 1.437-0.02438 0.1834-0.09695 0.3861-0.1613 0.4504-0.06431 0.0643-0.1169 0.2301-0.1169 0.3685 0 0.2015 0.04893 0.2388 0.2459 0.1873 0.1684-0.04405 0.2202-0.02274 0.1643 0.06768-0.04486 0.07259-0.02723 0.1384 0.03918 0.1462 0.0664 0.007846 0.1721 0.02708 0.2348 0.04276 0.06271 0.01568 0.1973 0.03492 0.299 0.04275 0.1488 0.01146 0.158 0.04676 0.0472 0.1803-0.1739 0.2096-0.05969 0.4041 0.2373 0.4041 0.1254 0 0.1959 0.05196 0.1567 0.1155-0.03924 0.06351 0.00903 0.2766 0.1073 0.4736 0.2233 0.4476 0.2245 0.4371-0.04938 0.4371-0.335 0-0.2779 0.2106 0.1174 0.4329 0.2694 0.1515 0.3316 0.2507 0.2829 0.4508-0.07438 0.3051 0.1157 0.3427 0.2705 0.05347 0.1601-0.2991 0.5301-0.2807 0.6989 0.03479 0.07988 0.1493 0.3046 0.3346 0.4994 0.4119 0.1948 0.07731 0.4009 0.1637 0.4579 0.192 0.05702 0.02832 0.07146-0.03248 0.03208-0.1351-0.03937-0.1026-0.01634-0.1866 0.0512-0.1866 0.07406 0 0.0944 0.1132 0.05126 0.285-0.04126 0.1644-0.02235 0.285 0.04465 0.285 0.0639 0 0.1162-0.05131 0.1162-0.114 0-0.06271 0.07696-0.114 0.171-0.114 0.09406 0 0.2748-0.1038 0.4017-0.2306 0.1795-0.1794 0.2048-0.2789 0.1143-0.448-0.09617-0.1797-0.05213-0.2679 0.2539-0.5084 0.4171-0.3279 0.5229-0.2092 0.3039 0.341-0.1411 0.3545-0.2035 0.9602-0.09893 0.9602 0.03449-1e-5 0.1243-0.06158 0.1995-0.1368 0.1064-0.1064 0.1368-0.09524 0.1368 0.05028 0 0.1029-0.05131 0.2188-0.114 0.2576-0.1543 0.09537-0.1452 0.399 0.01204 0.399 0.1705 0 0.8431-0.5741 0.8431-0.7197 0-0.2339 0.2734-0.1992 0.4077 0.05176 0.1022 0.191 0.1042 0.2693 0.007722 0.3015-0.0717 0.0239-0.1304 0.1612-0.1304 0.305 0 0.3862-0.2438 0.5278-0.7906 0.4591-0.2888-0.03628-0.4533-0.01721-0.4131 0.04788 0.1318 0.2133-0.403 0.2645-0.6287 0.06019-0.1952-0.1767-0.2199-0.1785-0.2199-0.01594 0 0.1007 0.08979 0.2368 0.1995 0.3026 0.1878 0.1126 0.1864 0.1297-0.02252 0.2912-0.1221 0.0944-0.3102 0.1437-0.418 0.1095-0.1077-0.0342-0.2313-0.004924-0.2745 0.06504-0.0525 0.08493-0.1694 0.04196-0.3516-0.1293-0.1502-0.1411-0.273-0.2025-0.273-0.1366 0 0.06597 0.07696 0.1838 0.171 0.2619 0.2374 0.197 0.2141 0.3799-0.03994 0.3135-0.116-0.03034-0.3341 0.0395-0.4846 0.1552-0.1505 0.1157-0.3154 0.2115-0.3665 0.2129-0.09095 0.002482-0.5486 0.5045-0.8645 0.9482-0.139 0.1953-0.1348 0.2374 0.0335 0.3316 0.1308 0.07322 0.1699 0.1875 0.1217 0.3559-0.1863 0.6505-0.1863 0.6474 0.0034 0.5746 0.1769-0.06788 0.8558 0.4547 0.8558 0.6588 0 0.1699 0.6149 0.6997 0.9042 0.779 0.2254 0.0618 0.2857 0.1438 0.2614 0.3552-0.01739 0.1512-0.04937 0.4616-0.07107 0.6899-0.0217 0.2283-0.07463 0.472-0.1176 0.5416-0.04539 0.07345 0.001951 0.1265 0.1129 0.1265 0.1328 0 0.1735 0.06729 0.1333 0.2207-0.06082 0.2326 0.2778 0.4645 0.3522 0.2412 0.02223-0.06668 0.08548-0.0934 0.1405-0.05937 0.05506 0.03403 0.2027-0.04073 0.3282-0.1662 0.1254-0.1254 0.1907-0.2511 0.1451-0.2793-0.04563-0.0282-0.06385-0.2915-0.04049-0.5852 0.0375-0.4716 0.08428-0.5524 0.4007-0.6921 0.197-0.08698 0.4355-0.2231 0.5301-0.3026 0.2388-0.2006 0.2788-1.157 0.05613-1.342-0.2435-0.2021-0.2128-0.3069 0.114-0.3889 0.2323-0.0583 0.285-0.1414 0.285-0.4494 0-0.2078 0.03783-0.4157 0.08406-0.4619 0.04623-0.04623 0.08471-0.1702 0.08551-0.2755 9.71e-4 -0.1277 0.07736-0.1789 0.2295-0.1537 0.1254 0.02078 0.393 0.06466 0.5947 0.09753 0.2273 0.03704 0.3931 0.143 0.4362 0.2788 0.03824 0.1205 0.1939 0.3005 0.3459 0.4001 0.3602 0.236 0.3738 0.5386 0.01986 0.4428-0.2476-0.06702-0.2486-0.0643-0.0285 0.07783 0.2473 0.1597 0.3552 0.4323 0.171 0.4323-0.06271 0-0.114 0.0465-0.114 0.1033 0 0.05684 0.1026 0.07651 0.228 0.04371 0.1586-0.04147 0.228-0.003498 0.228 0.1247 0 0.1014-0.05986 0.1843-0.133 0.1843-0.07316 0-0.109 0.02399-0.07971 0.05331 0.02931 0.02932 0.2502-0.007132 0.4909-0.081 0.3355-0.103 0.4773-0.2284 0.608-0.5379l0.1704-0.4036 0.1242 0.285c0.06831 0.1568 0.1754 0.3207 0.2381 0.3644 0.06263 0.04363 0.07909 0.1141 0.03659 0.1566-0.0425 0.0425 0.05443 0.25 0.2154 0.461 0.2443 0.3203 0.2638 0.3948 0.1179 0.4508-0.1502 0.05763-0.1439 0.09793 0.04442 0.2863 0.1206 0.1206 0.2582 0.2192 0.3058 0.2192 0.04763 0 0.1519 0.1046 0.2318 0.2325 0.07984 0.1278 0.1913 0.204 0.2476 0.1692 0.05633-0.03481 0.1352-0.01031 0.1752 0.05444 0.04003 0.06476 0.117 0.09041 0.171 0.05701 0.05404-0.0334 0.1305-0.008583 0.1699 0.05515 0.03939 0.06373 0.004461 0.1162-0.07763 0.1166-0.08208 3.87e-4 -0.2957 0.07708-0.4747 0.1704-0.179 0.09335-0.3714 0.1413-0.4276 0.1066-0.05618-0.03472-0.1021-0.01429-0.1021 0.04542 0 0.1965 0.3714 0.2557 0.5581 0.08897 0.2476-0.2212 0.6476-0.2824 0.6088-0.09314-0.01736 0.08476 0.05334 0.1334 0.1656 0.114 0.1252-0.02168 0.2349 0.07437 0.3042 0.2663 0.1466 0.4064 0.03261 0.6472-0.349 0.7372-0.1751 0.0413-0.4549 0.2019-0.6217 0.3569-0.2852 0.265-0.3749 0.281-1.505 0.2679-1.097-0.0127-1.213 0.006158-1.325 0.2166-0.06783 0.1268-0.2135 0.2305-0.3238 0.2305-0.1103 0-0.4426 0.2565-0.7385 0.5701-0.2959 0.3135-0.4951 0.5701-0.4425 0.5701 0.05256 0 0.2199-0.1345 0.372-0.2988 0.5024-0.543 1.787-0.9359 1.99-0.6084 0.1352 0.2188-0.1796 0.454-0.5007 0.3741-0.2732-0.06803-0.2859-0.05712-0.1397 0.1203 0.08844 0.1073 0.221 0.172 0.2946 0.1438 0.08354-0.03206 0.1338 0.07387 0.1338 0.2822 0 0.4127 0.3696 0.7776 0.8249 0.8145 0.5154 0.04179 0.4686 0.236-0.1028 0.4265-0.2822 0.09406-0.5801 0.2608-0.6621 0.3706-0.1664 0.2228-0.4262 0.2617-0.5382 0.08051-0.1185-0.1917 0.165-0.4391 0.672-0.5862 0.373-0.1083 0.4178-0.1457 0.2147-0.1798-0.1411-0.02364-0.2565-0.09363-0.2565-0.1555 0-0.0619-0.114-0.03268-0.2534 0.06494-0.1394 0.09762-0.3703 0.1775-0.5131 0.1775-0.1428 0-0.2597 0.04785-0.2597 0.1063 0 0.1223-0.444 0.2937-0.6556 0.2531-0.07839-0.01504-0.1425 0.0262-0.1425 0.09166s-0.09467 0.119-0.2104 0.119c-0.3895 0-0.783 0.6612-0.5986 1.006 0.08794 0.1644 0.0294 0.1955-0.4163 0.2216-0.6198 0.03627-1.111 0.2502-1.112 0.4842-4.01e-4 0.09327-0.06643 0.285-0.1467 0.4261-0.1338 0.2351-0.1672 0.2426-0.3996 0.09036-0.2778-0.1821-0.454-0.1187-0.5742 0.2065-0.05196 0.1405-0.1426 0.1866-0.2703 0.1376-0.1696-0.0651-0.1679-0.04691 0.01502 0.1552 0.1308 0.1445 0.1868 0.3355 0.1519 0.518-0.03039 0.159-0.01107 0.289 0.04295 0.289 0.05401 0 0.0982 0.07696 0.0982 0.171 0 0.09406-0.07696 0.171-0.171 0.171-0.09406 0-0.171 0.0513-0.171 0.114 0 0.06271 0.07999 0.114 0.1778 0.114 0.09777 0 0.1474 0.04907 0.1104 0.109-0.03706 0.05997-0.1427 0.08013-0.2348 0.04481-0.1145-0.04394-0.1674 0.01164-0.1674 0.176 0 0.1321-0.06908 0.2402-0.1535 0.2402-0.1982 0-0.8532 0.3211-1.202 0.589-0.1495 0.115-0.3561 0.2091-0.4591 0.2091-0.1029 0-0.3305 0.2181-0.5058 0.4846-0.2477 0.3768-0.3052 0.5733-0.2585 0.8836 0.03302 0.2195 0.1096 0.7192 0.1702 1.11 0.1183 0.7638-0.004587 1.513-0.248 1.511-0.1557-0.001011-0.4222-0.5143-0.4222-0.8132 0-0.1092-0.05719-0.2339-0.1271-0.2771-0.07662-0.04735-0.107-0.2879-0.07645-0.6057 0.06731-0.7005-0.2035-1.21-0.6429-1.21-0.1928 0-0.3983-0.1056-0.5363-0.2755-0.1421-0.175-0.3428-0.2755-0.5498-0.2755-0.2479 0-0.3109-0.04326-0.2631-0.1805 0.04793-0.1375 0.02966-0.1499-0.07669-0.052-0.09199 0.08469-0.2813 0.09656-0.5552 0.03481-0.3933-0.0887-0.6983-0.01907-0.3934 0.08981 0.07838 0.02799 0.1425 0.1236 0.1425 0.2124 0 0.2506-0.5426 0.1978-0.6841-0.06651-0.06712-0.1254-0.2198-0.228-0.3393-0.228-0.1195 0-0.2455-0.04564-0.28-0.1014-0.03448-0.05578-0.2372-0.1218-0.4506-0.1467-0.2864-0.03344-0.4222 0.009606-0.5189 0.1646-0.08997 0.1441-0.2044 0.1866-0.365 0.1356-0.3531-0.1121-0.8966 0.4541-0.8966 0.9339 0 0.2259-0.08963 0.4568-0.227 0.5848-0.1253 0.1168-0.2779 0.4801-0.3408 0.8114-0.06256 0.3299-0.1369 0.6373-0.1652 0.6831-0.02829 0.04578-0.007216 0.3625 0.04682 0.7038 0.2585 1.633 0.5378 2.041 1.399 2.044 0.2979 0.00109 0.5416 0.05328 0.5416 0.116 0 0.3858 0.6027-0.1193 0.8507-0.713 0.1662-0.3977 0.2009-0.4183 0.6905-0.4085 0.2835 0.005695 0.5437 0.05596 0.5782 0.1117 0.03446 0.05575 0.1108 0.07163 0.1696 0.03527 0.2006-0.124 0.2476 0.2982 0.05668 0.5092-0.1047 0.1157-0.2439 0.4042-0.3093 0.6412-0.0882 0.3195-0.1453 0.3893-0.2208 0.27-0.05602-0.08849-0.1061-0.1352-0.1113-0.1039-0.005184 0.03136-0.03215 0.2366-0.05991 0.4561-0.02775 0.2195-0.1527 0.5383-0.2777 0.7084-0.2196 0.2991-0.2202 0.3131-0.01621 0.4223 0.116 0.06211 0.5338 0.1649 0.9284 0.2284 0.3946 0.06355 0.8924 0.2327 1.106 0.3758 0.426 0.2851 0.421 0.2181 0.1171 1.563-0.187 0.8276-0.146 1.08 0.2601 1.605 0.1568 0.2025 0.319 0.4222 0.3606 0.4882 0.1001 0.1589 1.158 0.2006 1.254 0.04945 0.1232-0.1942 0.7537 0.1343 1.127 0.5871 0.228 0.2766 0.3373 0.3475 0.3373 0.2187 0-0.1048 0.1539-0.2815 0.342-0.3926 0.2164-0.1278 0.342-0.2949 0.342-0.4548 0-0.2591 0.3514-0.4603 0.5691-0.3258 0.06326 0.03911 0.115 0.02374 0.115-0.03416 0-0.05788 0.24-0.1381 0.5332-0.1783 0.2933-0.0402 0.6217-0.1531 0.7298-0.251 0.1314-0.1189 0.2216-0.1373 0.2721-0.05562 0.04156 0.06724-0.004296 0.1529-0.1019 0.1903-0.1227 0.04707-0.1562 0.1529-0.1085 0.3427 0.03867 0.1541 0.005746 0.3508-0.07501 0.4481-0.1161 0.1399-0.1149 0.2278 0.006535 0.4546 0.08276 0.1546 0.1947 0.2812 0.2488 0.2812 0.1754 0 0.2383-0.3497 0.1125-0.6257-0.1423-0.3122-0.03512-0.4388 0.4747-0.5608 0.4009-0.09594 1.1 0.1203 1.1 0.3402 0 0.1181 0.1513 0.1622 0.5561 0.1622 0.37 0 0.6066 0.06088 0.7071 0.1819 0.1139 0.1372 0.2631 0.164 0.6069 0.109 0.2508-0.0401 0.5153-0.1222 0.588-0.1825 0.08885-0.07374 0.2385-0.02547 0.4574 0.1475 0.1789 0.1414 0.4812 0.3093 0.6717 0.3732 0.2556 0.08563 0.3439 0.184 0.3368 0.3753-0.006665 0.1806 0.04522 0.2467 0.171 0.2178 0.2743-0.06291 1.054 0.3629 1.119 0.611 0.03151 0.1205 0.1121 0.2191 0.1792 0.2191 0.06703 0 0.2383 0.1094 0.3806 0.243 0.2122 0.1993 0.3871 0.2402 0.972 0.2269 0.815-0.01842 1.762 0.2211 2.093 0.5296 0.1242 0.1157 0.2728 0.2075 0.3303 0.204 0.05747-0.003515 0.1784 0.2154 0.2688 0.4865 0.09035 0.2711 0.2357 0.5203 0.323 0.5538 0.2525 0.09691 0.1885 0.2816-0.2556 0.7363-0.2648 0.2711-0.3894 0.4893-0.3452 0.6044 0.03802 0.09907 0.1283 0.1668 0.2006 0.1506 0.2209-0.04968 0.2445 0.2343 0.02399 0.2898-0.1134 0.02851 0.03761 0.0307 0.3355 0.004864 0.3723-0.0323 0.5416-0.004069 0.5416 0.0903 0 0.07551 0.1989-0.08469 0.442-0.356l0.442-0.4933 0.6126 0.1378c0.3369 0.07581 0.6977 0.1387 0.8018 0.1398 0.1048 0.001069 0.2205 0.1266 0.2593 0.2816 0.0613 0.2442 0.1007 0.2634 0.3106 0.151 0.1342-0.07181 0.4291-0.0985 0.6675-0.06038 0.2349 0.03756 0.677 0.0192 0.9824-0.04079 0.5074-0.09966 0.6133-0.07928 1.226 0.2361 0.464 0.2387 0.7964 0.3341 1.078 0.3095 0.3729-0.03271 0.4157-0.004673 0.515 0.3375 0.1674 0.5765-0.06641 1.134-0.8075 1.926-1.422 1.519-1.513 1.641-1.513 2.027 0 0.4405-0.1985 1.075-0.4152 1.327-0.08518 0.099-0.1551 0.2529-0.1555 0.342-3.25e-4 0.08913-0.3003 0.4755-0.6667 0.8587-0.5156 0.5392-0.7667 0.7148-1.111 0.7769-0.8942 0.1612-2.674 0.9927-2.923 1.365-0.04607 0.06901-0.08455 0.2397-0.08551 0.3794-0.001051 0.1524-0.1271 0.3321-0.3153 0.4494-0.1724 0.1075-0.4638 0.3427-0.6474 0.5227-0.1836 0.18-0.4915 0.4024-0.6841 0.4943-0.4509 0.2151-0.7952 0.4187-1.01 0.597-0.1879 0.156-1.472 0.2146-1.878 0.08575-0.1556-0.04939-0.2554-0.03351-0.2554 0.04064 0 0.06694 0.06556 0.1217 0.1457 0.1217s0.2305 0.09905 0.3341 0.2201c0.1774 0.2071 0.1726 0.2305-0.08044 0.3963-0.1728 0.1132-0.5976 0.1874-1.189 0.2075-0.8149 0.02768-0.9201 0.05588-0.9204 0.2467-3.13e-4 0.1913-0.06383 0.2079-0.5664 0.1484l-0.5661-0.06704 0.0656 0.328c0.06092 0.3046 0.03822 0.3307-0.3176 0.3647-0.4702 0.045-0.491 0.242-0.03466 0.3279 0.304 0.05727 0.2845 0.07135-0.206 0.1495-0.2979 0.04746-0.5416 0.1216-0.5417 0.1648-1.25e-4 0.1277-0.4751 0.1108-1.039-0.03697zm-1.413-1.196c-0.03876-0.06272-0.01614-0.114 0.05028-0.114 0.0664 0 0.1207 0.05131 0.1207 0.114 0 0.0627-0.02262 0.114-0.05028 0.114-0.02765 0-0.08199-0.05131-0.1207-0.114zm10.89-13.74c0-0.1568 0.01283-0.2882 0.0285-0.2921 0.01568-0.003899 0.2466-0.03212 0.5131-0.06271 0.3786-0.04345 0.4846-0.01837 0.4846 0.1146 0 0.2242-0.4392 0.5252-0.7665 0.5252-0.201 0-0.2597-0.06444-0.2597-0.285zm23.15-2.698c-0.00292-0.04165 0.1694-0.5335 0.3829-1.093 0.7222-1.893 0.9865-2.884 1.058-3.97 0.06226-0.9479 0.04479-1.091-0.1766-1.45-0.2275-0.3681-0.2403-0.4937-0.1717-1.695 0.06446-1.129 0.04946-1.318-0.1155-1.454-0.217-0.1801-0.1963-0.1933-0.5076 0.3241l-0.2359 0.392-0.1165-0.3065c-0.2256-0.5933-0.5492-0.3259-1.441 1.191-0.3302 0.5614-0.5397 0.7907-0.8123 0.8893-0.202 0.07306-0.5792 0.374-0.8382 0.6687-0.259 0.2947-0.5446 0.5776-0.6347 0.6287-0.1025 0.05807-0.5026-0.04575-1.069-0.2774-0.7462-0.3051-0.9256-0.4284-1.021-0.7014-0.06351-0.1822-0.2156-0.3574-0.3381-0.3895-0.1224-0.03202-0.2502-0.1301-0.2839-0.218-0.03372-0.08788-0.1399-0.1598-0.2359-0.1598-0.09603 0-0.1746-0.07696-0.1746-0.171 0-0.09406 0.05985-0.171 0.133-0.171 0.07316 0 0.1001-0.03297 0.05976-0.07326-0.04029-0.04029-0.145-0.01375-0.2326 0.05898-0.1786 0.1482-0.5225 0.05954-0.5448-0.1404-0.008011-0.07168-0.02682-0.2492-0.0418-0.3945-0.01499-0.1453-0.07946-0.3163-0.1433-0.3801-0.07004-0.07004-0.09262-0.4908-0.057-1.062 0.04593-0.7364 0.01776-1.028-0.1272-1.319-0.1024-0.2053-0.1862-0.4919-0.1862-0.6368 0-0.1517-0.1025-0.3183-0.2415-0.3928-0.2271-0.1215-0.2366-0.185-0.1585-1.059 0.04566-0.5112 0.1063-1.212 0.1347-1.556 0.1045-1.267 0.1849-1.651 0.4097-1.955 0.2683-0.3629 0.3925-1.33 0.2136-1.664-0.2362-0.4414-0.2748-1.463-0.07016-1.859 0.1556-0.3009 0.1668-0.4501 0.06433-0.8571-0.158-0.6275-0.161-0.6081 0.08383-0.5441 0.1143 0.0299 0.3897-0.0529 0.6119-0.184 0.3418-0.2017 0.4149-0.3179 0.4748-0.755 0.07669-0.5596 0.5513-1.471 0.8194-1.574 0.09145-0.0351 0.1663-0.1344 0.1663-0.2207 0-0.08631 0.09975-0.2472 0.2217-0.3575 0.1219-0.1103 0.2374-0.3016 0.2565-0.4251 0.05971-0.3844 0.7938 0.365 0.8806 0.8989 0.05942 0.3657 0.1152 0.4315 0.3833 0.4521 0.198 0.01522 0.3985-0.06684 0.5435-0.2225 0.1999-0.2146 0.2606-0.2273 0.4677-0.09796 0.1707 0.1066 0.2729 0.1137 0.3614 0.02524 0.06785-0.06785 0.2157-0.1234 0.3286-0.1234 0.2816 0 0.269-0.4583-0.0228-0.8292-0.2152-0.2736-0.3363-1.189-0.1413-1.069 0.04772 0.0295 0.1632-0.006981 0.2565-0.08106 0.3362-0.2667 0.434-0.6043 0.3845-1.327-0.04365-0.6379-0.1211-0.8325-0.6762-1.7-0.9292-1.452-1.49-2.041-1.136-1.192 0.1121 0.2682 0.1351 0.461 0.06506 0.5454-0.06694 0.08066-0.06791 0.1943-0.002557 0.2977 0.1443 0.2281 0.1355 0.3038-0.04346 0.3724-0.08399 0.03223-0.3918-0.1578-0.6841-0.4224-0.4168-0.3773-0.5314-0.5579-0.5314-0.8378 0-0.1962-0.0513-0.3885-0.114-0.4273-0.0627-0.03875-0.114-0.1683-0.114-0.2879s-0.08769-0.4013-0.1949-0.6261c-0.1554-0.3259-0.1676-0.4523-0.0601-0.6244 0.1697-0.2718-0.04517-0.8399-0.4835-1.278-0.2444-0.2444-0.3571-0.2829-0.6133-0.2094-0.2815 0.08075-0.3632 0.03156-0.7922-0.4774-0.2631-0.3121-0.4784-0.5109-0.4784-0.4418 0 0.2739 0.637 1.263 0.8144 1.264 0.2085 0.001832 0.3718 0.3018 0.2165 0.3978-0.05462 0.03375-0.1193 0.001399-0.1437-0.0719-0.05627-0.1688-0.4311-0.2306-0.4311-0.07105 0 0.1817 0.4607 0.887 0.5794 0.887 0.0576 0 0.1047 0.05717 0.1047 0.127 0 0.1899 1.14 1.469 1.309 1.469 0.1886 0 0.3028 0.5837 0.1502 0.7682-0.06613 0.07996-0.07692 0.2281-0.02492 0.342 0.05046 0.1105 0.09545 0.2582 0.09998 0.3281 0.01243 0.1918 0.551 0.7225 0.7459 0.735 0.1174 0.007533 0.1264 0.029 0.02851 0.06848-0.07839 0.03163-0.1425 0.1247-0.1425 0.2067 0 0.216-0.7898-0.2007-1.097-0.5788-0.1945-0.2394-0.3516-0.3021-0.8015-0.3203-0.3077-0.01244-0.6295-0.06589-0.7151-0.1188-0.08557-0.05288-0.3021-0.1132-0.4812-0.1341-0.252-0.02934-0.3257 0.00867-0.3257 0.168 0 0.2558 0.46 0.7018 0.724 0.7018 0.1079 0 0.3104 0.07483 0.45 0.1663 0.1445 0.09468 0.4618 0.1547 0.7368 0.1393 0.4115-0.023 0.4737 0.00207 0.4206 0.1694-0.04084 0.1287 0.03788 0.2621 0.2284 0.3869 0.1599 0.1048 0.2907 0.2371 0.2907 0.294s-0.1154 0.02879-0.2565-0.06256c-0.1411-0.09135-0.5568-0.1932-0.9239-0.2263-0.367-0.03313-0.8288-0.1539-1.026-0.2684-0.5626-0.3263-0.7395-0.2278-0.6716 0.374 0.04509 0.4001 0.01761 0.5206-0.1318 0.5779-0.3553 0.1363-0.4255 0.4519-0.1722 0.7739 0.1585 0.2015 0.2244 0.4339 0.2056 0.7248-0.05223 0.8069 0.01243 1.17 0.2511 1.408 0.3649 0.3649 0.3303 1.303-0.06149 1.666-0.1603 0.1486-0.2914 0.3737-0.2914 0.5001 0 0.2236-0.009202 0.2244-0.3374 0.03054-0.3218-0.1901-0.3478-0.1899-0.5619 0.003786-0.2176 0.1969-0.2301 0.1923-0.4085-0.1529-0.1012-0.1958-0.2275-0.3292-0.2805-0.2964-0.05303 0.03277-0.184-0.2082-0.2911-0.5355-0.1932-0.5908-0.5284-1.171-0.8122-1.406-0.2684-0.2225-0.04005-0.5653 0.6116-0.9179 0.8937-0.4835 0.9409-0.594 0.5344-1.25-0.3905-0.6304-0.8538-0.9387-1.428-0.9504-0.2247-0.004584-0.4392-0.03901-0.4767-0.07649-0.1088-0.1088 0.03987-0.3879 0.2066-0.3879 0.2595 0 0.3129-0.2353 0.09146-0.403-0.1954-0.148-0.1962-0.1601-0.01142-0.1634 0.1507-0.002738 0.1995-0.0997 0.1995-0.396 0-0.2158-0.05683-0.4275-0.1263-0.4704-0.07828-0.04838-0.09944-0.246-0.05566-0.5198 0.04294-0.2685 0.02539-0.4417-0.04472-0.4417-0.06345 0-0.1154-0.1283-0.1154-0.285 0-0.1568-0.05452-0.285-0.1212-0.285-0.1457 0-0.09612-0.4799 0.06118-0.5926 0.06478-0.04638-0.006482-0.2073-0.171-0.3862l-0.2821-0.3067 0.3135 0.05681c0.2501 0.04532 0.3135 0.01387 0.3135-0.1554 0-0.1167 0.07598-0.2122 0.1688-0.2122 0.1354 0 0.1544-0.1053 0.09609-0.5309-0.05316-0.3878-0.03721-0.5089 0.05919-0.4493 0.1457 0.09007 0.1852-0.1827 0.04643-0.3215-0.04703-0.04703-0.08551-0.1308-0.08551-0.1861 0-0.05532-0.2437-0.2551-0.5416-0.444-0.56-0.3551-0.6886-0.5735-0.342-0.5806 0.154-0.003164 0.1231-0.06661-0.1359-0.2782-0.1845-0.1508-0.3791-0.2471-0.4325-0.2141-0.17 0.1051-0.4291-0.2047-0.431-0.5151-0.002136-0.3688-0.15-0.6171-0.3882-0.652-0.2065-0.0303-0.2285 0.1533-0.06895 0.573 0.09657 0.254 0.08096 0.2925-0.1186 0.2925-0.4078 0-1.169-0.4711-1.681-1.041-0.4831-0.5374-0.9342-0.7269-0.9342-0.3925 0 0.1869 0.303 0.5212 0.4724 0.5212 0.1428 0 0.3095 0.1753 0.6507 0.6842 0.2313 0.345 1.514 1.327 1.317 1.008-0.04311-0.06976 0.01418-0.1002 0.1401-0.07444 0.1258 0.02574 0.1995 0.1229 0.1799 0.2372-0.02283 0.1336 0.0213 0.1727 0.1425 0.1262 0.1079-0.04142 0.1756-0.004232 0.1756 0.09651 0 0.09014 0.2309 0.3297 0.5131 0.5324 0.2953 0.2121 0.5131 0.4594 0.5131 0.5827 0 0.1178 0.05132 0.2459 0.114 0.2847 0.1703 0.1052 0.1376 0.247-0.05701 0.247-0.09406 0-0.171-0.04328-0.171-0.09618 0-0.0529-0.3976-0.2813-0.8836-0.5076-0.486-0.2263-0.934-0.4413-0.9955-0.4779-0.06156-0.03661 0.002577 0.07901 0.1425 0.2569 0.3158 0.4015 0.3337 0.7488 0.03859 0.7488-0.1187 0-0.2466-0.08021-0.2842-0.1783-0.03762-0.09804-0.1147-0.1496-0.1713-0.1147-0.05659 0.03497-0.1336-0.01634-0.171-0.114-0.03749-0.09768-0.114-0.1493-0.1701-0.1146-0.05605 0.03464-0.1653-0.01341-0.2428-0.1068-0.08553-0.1031-0.09434-0.1698-0.02241-0.1698 0.06516 0 0.1444 0.06413 0.176 0.1425 0.03319 0.08227 0.0613 0.08974 0.0665 0.01767 0.004946-0.06866-0.1024-0.2226-0.2386-0.342-0.1362-0.1195-0.2123-0.1566-0.1692-0.08256 0.04316 0.07405 0.03071 0.1642-0.02767 0.2002-0.1617 0.09993-0.6169-0.7153-0.6064-1.086 0.005116-0.1799-0.02572-0.3169-0.06851-0.3046-0.0428 0.01233-0.437-0.3601-0.8759-0.8275-0.439-0.4675-0.9018-0.9533-1.029-1.08-0.3279-0.3268-0.8188-1.146-0.618-1.031 0.1332 0.07615 0.1373 0.06487 0.02178-0.05963-0.07839-0.08445-0.1385-0.2587-0.1335-0.3873 0.004956-0.1286 0.03489-0.1696 0.06652-0.09121 0.03163 0.07839 0.1082 0.1425 0.1702 0.1425 0.1381 0 0.4384-0.2897 0.4384-0.4229 0-0.05344 0.1473-0.1528 0.3273-0.2207 0.2466-0.0931 0.4152-0.08657 0.6841 0.02651 0.4011 0.1687 0.4442 0.3316 0.1681 0.6366-0.1787 0.1975-0.1711 0.2085 0.1433 0.2085 0.1826 0 0.4957 0.04696 0.6958 0.1044 0.2674 0.0767 0.3971 0.06428 0.4893-0.04686 0.1505-0.1813-0.01343-0.3168-0.266-0.2199-0.1303 0.04998-0.1577 0.00783-0.111-0.1707 0.04738-0.1812 0.008709-0.237-0.164-0.237-0.2659 0-0.8547-0.4326-0.7716-0.567 0.03151-0.051-0.07061-0.1248-0.2269-0.1641-0.1563-0.03924-0.2843-0.1165-0.2843-0.1717 0-0.05518-0.2181-0.213-0.4846-0.3508-0.2665-0.1377-0.6318-0.3995-0.8116-0.5816-0.1799-0.1821-0.3753-0.3311-0.4343-0.3311-0.05896 0-0.0755-0.0513-0.03674-0.114 0.06447-0.1043-0.005442-0.127-0.5132-0.1663-0.2798-0.02164-0.4559-0.1756-0.4559-0.3983 0-0.2169-0.2934-0.4045-0.3894-0.2491-0.06858 0.111-1.412 0.03976-1.638-0.08683-0.2974-0.1664 1.582-0.2294 2.056-0.06895 0.2352 0.07959 0.4276 0.1018 0.4276 0.0494 0-0.127-0.7602-0.3326-1.232-0.3334-0.2224-3.72e-4 -0.3484-0.04745-0.3068-0.1146 0.03875-0.06271-0.03821-0.114-0.171-0.114-0.1328 0-0.2134 0.04547-0.179 0.1011 0.03436 0.05558-0.0524 0.1318-0.1928 0.1695-0.3798 0.1018-0.5625 0.08573-0.4833-0.0425 0.06972-0.1128-0.08364-0.1609-0.3823-0.1198-0.08483 0.01166-0.2338-0.009322-0.331-0.04663-0.1521-0.05836-0.1465-0.09079 0.04025-0.2321 0.2103-0.1592 0.2094-0.1644-0.03137-0.1679-0.1366-0.001993-0.3305 0.07852-0.4309 0.1789-0.1291 0.1291-0.2734 0.1581-0.4927 0.09911-0.321-0.08634-0.8555-0.1288-2.564-0.2039-0.5498-0.02414-1.033-0.07718-1.074-0.1178-0.04067-0.04067-0.2163-0.07394-0.3903-0.07394-0.6131 0-0.4362-0.2093 0.2683-0.3175l0.7131-0.1095-0.6841-0.03359c-0.3762-0.01848-1.197-0.03784-1.824-0.04303-0.7217-0.005975-1.238-0.06497-1.406-0.1607-0.146-0.08322-0.3512-0.1146-0.4561-0.06985-0.1048 0.04479-0.3923 0.1035-0.6387 0.1305-0.2465 0.02698-0.58 0.1166-0.7411 0.1991-0.1611 0.0825-0.751 0.2104-1.311 0.2843-0.5599 0.07385-1.195 0.2081-1.411 0.2983-0.216 0.09024-0.5424 0.1641-0.7254 0.1641-0.183 0-0.5487 0.1153-0.8127 0.2561-0.264 0.1409-0.6083 0.2848-0.7651 0.3199-0.1568 0.03507-0.2713 0.1279-0.2544 0.2063 0.01754 0.08159-0.397 0.3373-0.9691 0.5978-0.5499 0.2504-1.089 0.504-1.198 0.5637-0.1089 0.05966-0.2773 0.1085-0.3741 0.1085-0.09688 0-0.2062 0.07838-0.243 0.1742-0.09924 0.2586-0.4467 0.4068-0.7182 0.3064-0.2069-0.07654-0.1473-0.134 0.4427-0.427 0.6879-0.3416 0.8992-0.5426 0.4457-0.424-0.1684 0.04406-0.2202 0.02274-0.1643-0.06768 0.1048-0.1696 0.06416-0.1663-0.4138 0.03339l-0.3958 0.1654 0.1823-0.3897c0.1003-0.2143 0.2235-0.3914 0.2739-0.3934 0.05034-0.002042 0.2734-0.1273 0.4956-0.2783 0.3257-0.2213 0.3636-0.2823 0.1953-0.3148-0.1383-0.02664-0.0621-0.08518 0.2262-0.1737 0.3676-0.1128 0.4252-0.1082 0.3722 0.0297-0.0439 0.1144 0.02153 0.1632 0.2189 0.1632 0.1641 0 0.2815-0.06599 0.2815-0.1583 0-0.08978 0.1678-0.1898 0.3875-0.231 0.2131-0.03998 0.5081-0.1666 0.6556-0.2814 0.1475-0.1148 0.9094-0.3696 1.693-0.5662 6.926-1.737 14.47-0.9065 21.04 2.315 3.483 1.71 5.668 3.274 8.444 6.045 2.534 2.53 4.22 4.825 5.76 7.842 0.3761 0.7368 0.6649 1.34 0.6417 1.34-0.02313 0-0.2103-0.2342-0.4159-0.5205-0.2076-0.289-0.4382-0.4958-0.5185-0.465-0.07959 0.03054-0.2126-0.004594-0.2956-0.07808-0.2107-0.1866 0.1043 0.2471 0.4249 0.5849 0.4276 0.4506 1.264 1.757 1.62 2.531 0.7553 1.641 1.532 4.819 1.852 7.582 0.2013 1.734 0.1715 5.363-0.05889 7.172-0.3303 2.593-0.8798 4.827-1.798 7.308-0.4247 1.148-0.9872 2.388-1 2.205zm-31.99-6.936c-0.19-0.08165-0.1651-0.09932 0.1492-0.106 0.2242-0.004764 0.3487 0.03826 0.3068 0.106-0.08215 0.1329-0.1468 0.1329-0.4561 0zm-2.473-0.1211c-0.02477-0.07428-0.2481-0.1741-0.4964-0.2219-0.3372-0.06488-0.3748-0.09015-0.1485-0.09994 0.2544-0.01101 0.2928-0.05419 0.2401-0.2696-0.03455-0.1411-0.1195-0.3305-0.1889-0.4209-0.1002-0.1307-0.09173-0.1437 0.0413-0.06344 0.09205 0.05554 0.3892 0.114 0.6603 0.13 0.4482 0.0264 1.494 0.5414 1.506 0.7412 0.002299 0.0403-0.2652 0.05804-0.5944 0.03943-0.4048-0.02288-0.6594 0.02026-0.7863 0.1332-0.1354 0.1205-0.2003 0.1294-0.2327 0.03201zm-1.289-0.3331c-0.03939-0.06373 0.008367-0.1159 0.1061-0.1159 0.2003 0 0.2298 0.06841 0.07161 0.1662-0.05838 0.03608-0.1384 0.01345-0.1778-0.05028zm-1.339-1.273c0.01874-0.114-0.0728-0.2117-0.237-0.2529-0.1471-0.03693-0.3265-0.1966-0.3987-0.3549-0.07319-0.1606-0.2268-0.2878-0.3476-0.2878-0.1191 0-0.2776-0.07366-0.3524-0.1637-0.07473-0.09003-0.2862-0.1967-0.47-0.2371-0.1838-0.04036-0.3342-0.1428-0.3342-0.2277 0-0.1985-0.4254-0.3354-0.6041-0.1944-0.07538 0.05947-0.28 0.1339-0.4547 0.1654-0.3099 0.05589-0.3127 0.05181-0.114-0.1686 0.1741-0.1932 0.3068-0.2177 0.9162-0.1691 0.4332 0.03452 0.8306 0.1402 1.014 0.2694 0.1656 0.117 0.3812 0.264 0.4791 0.3267 0.09794 0.06271 0.4289 0.3064 0.7354 0.5416 0.3065 0.2351 0.6296 0.4276 0.7181 0.4276 0.08843 0 0.1608 0.05131 0.1608 0.114 0 0.06271 0.07068 0.114 0.1571 0.114 0.08638 0 0.216 0.07098 0.2879 0.1577 0.1013 0.1221 0.08947 0.1736-0.05238 0.228-0.1008 0.03868-0.2175 0.06357-0.2594 0.05531-0.2885-0.0779-0.7482-0.01578-0.8438-0.3436zm1.922-9.561c0.02615-0.6263 0.04213-0.6973 0.143-0.6349 0.1953 0.1207 0.209 0.4907 0.02713 0.7319-0.1829 0.2425-0.1843 0.2417-0.1701-0.09695zm6.314-3.74c0-0.05072 0.07441-0.1918 0.1654-0.3135 0.1581-0.2116 0.1623-0.2092 0.09605 0.05305-0.05251 0.2079-0.03308 0.252 0.0803 0.1819 0.09909-0.06125 0.1221-0.04802 0.06824 0.03918-0.0923 0.1494-0.4099 0.1799-0.4099 0.03941zm-0.7672-0.2047c0.03789-0.03789 0.1362-0.04193 0.2185-9e-3 0.09095 0.0364 0.06394 0.06341-0.06889 0.06889-0.1202 0.004945-0.1875-0.02199-0.1496-0.05989zm3.572-0.4545c-0.09495-0.2475 0.0451-0.4582 0.1717-0.2584 0.1284 0.2027 0.1282 0.4397-3.1e-4 0.4397-0.056 0-0.1331-0.08159-0.1714-0.1813zm-0.4486-0.2364c-0.03933-0.03934-0.4061-0.06233-0.815-0.05108-0.4491 0.01235-0.7435-0.02623-0.7435-0.09741 0-0.06483 0.05131-0.1179 0.114-0.1179s0.114-0.07058 0.114-0.1568c0-0.2416 0.5404-1.408 0.6974-1.505 0.09804-0.0606 0.1166-0.02671 0.06259 0.1141-0.144 0.3753-0.2222 0.8065-0.1309 0.7217 0.05009-0.04649 0.165-0.02314 0.2554 0.05189 0.0904 0.07503 0.3118 0.1252 0.4921 0.1114 0.26-0.0198 0.3131 0.0131 0.2571 0.1591-0.03886 0.1013-0.01076 0.2211 0.06242 0.2664 0.09525 0.05887 0.07237 0.1522-0.08047 0.3285-0.1175 0.1354-0.2457 0.214-0.2851 0.1747zm-3.147-0.9985c-0.1104-0.1331-0.09221-0.151 0.1018-0.1003 0.2852 0.07459 0.4258 0.2623 0.1965 0.2623-0.09008 0-0.2243-0.07292-0.2983-0.1621zm23.71-2.56c-0.3025-0.3546-0.4002-0.5842-0.2486-0.5842 0.1354 0 0.6132 0.6762 0.5698 0.8064-0.02034 0.06101-0.1649-0.03896-0.3212-0.2222zm1.255 0.03539c0-0.03548 0.0554-0.168 0.1231-0.2945 0.1186-0.2215 0.1289-0.2223 0.2814-0.021 0.2277 0.3005 0.2028 0.38-0.1195 0.38-0.1568 0-0.285-0.02902-0.285-0.0645zm-1.953-1.047c-0.1418-0.1808-0.1378-0.1849 0.04304-0.04305 0.1899 0.1489 0.2503 0.2426 0.1565 0.2426-0.02368 0-0.1135-0.08978-0.1995-0.1995zm2.893-0.6741c-0.153-0.06173-0.1998-0.3806-0.05592-0.3806 0.04762 0 0.1507 0.1026 0.229 0.228 0.1414 0.2265 0.1002 0.2628-0.1731 0.1525zm-9.708-0.4848c-0.09015-0.05709-0.1278-0.1824-0.08681-0.2892 0.04241-0.1105 0.02571-0.1596-0.0404-0.1188-0.06199 0.03832-0.1127-0.008717-0.1127-0.1045 0-0.108-0.06499-0.1492-0.171-0.1085-0.09406 0.0361-0.1764 0.02166-0.1829-0.03208-0.07404-0.6081-0.04413-0.9507 0.08744-1.001 0.2428-0.09316 0.4945 0.05376 0.4945 0.2886 0 0.1187 0.03943 0.2158 0.08761 0.2158 0.04818 0 0.1693 0.1347 0.2692 0.2993 0.16 0.2637 0.1622 0.3382 0.01806 0.6271-0.08995 0.1803-0.1726 0.327-0.1837 0.3261-0.01108-9.6e-4 -0.09176-0.04709-0.1793-0.1025zm1.524-0.494c0.04059-0.2667 0.0323-0.4298-0.01844-0.3625-0.05074 0.06728-0.182 0.1555-0.2918 0.1959-0.1463 0.05397-0.1995 0.01524-0.1995-0.1452 0-0.1203-0.08355-0.2655-0.1857-0.3227-0.1211-0.06776-0.1426-0.1305-0.06197-0.1803 0.06802-0.04204 0.09525-0.1505 0.06052-0.241-0.0877-0.2285-0.704-0.5244-0.7929-0.3806-0.03916 0.06336-0.1428 0.009137-0.2355-0.1233-0.09106-0.13-0.2396-0.2364-0.3301-0.2364-0.09051 0-0.1646-0.05434-0.1646-0.1207 0-0.06641-0.04013-0.09593-0.0892-0.06561-0.1408 0.087-0.6268-0.6959-0.5296-0.8532 0.05942-0.09614 0.117-0.05652 0.185 0.1272 0.07534 0.2037 0.1303 0.2353 0.232 0.1335 0.2031-0.2031 0.294-0.1642 0.4868 0.2087 0.0973 0.1881 0.2684 0.342 0.3802 0.342 0.1118 0 0.3029 0.07533 0.4246 0.1674 0.1217 0.09207 0.2904 0.169 0.3747 0.171 0.08438 0.001993 0.292 0.1023 0.4613 0.2229 0.1693 0.1206 0.4046 0.2104 0.5228 0.1995 0.142-0.01302 0.2403 0.07704 0.2899 0.2653 0.04124 0.1568 0.1346 0.2722 0.2074 0.2565 0.2328-0.05012 0.1426 0.1812-0.2123 0.5443-0.1896 0.1939-0.3181 0.3956-0.2857 0.448 0.03244 0.05249-0.02221 0.1266-0.1214 0.1647-0.1536 0.05895-0.1695-0.002787-0.1066-0.4156zm-35.19-0.1591c-0.02843-0.05373 0.006763-0.3799 0.07824-0.7248 0.1055-0.5093 0.1459-0.5797 0.2148-0.3749 0.04717 0.1402 0.02907 0.3564-0.04075 0.4869-0.06908 0.1291-0.101 0.2746-0.07085 0.3233 0.03011 0.04874 0.01325 0.1558-0.03749 0.2379-0.05072 0.08209-0.1155 0.1053-0.1439 0.05156zm22.74-0.34c-0.08053-0.0862-0.2935-0.1567-0.4733-0.1567-0.4274 0-1.596-1.078-1.391-1.283 0.1876-0.1876 0.1614-0.3494-0.04379-0.2707-0.1114 0.04275-0.2164-0.02511-0.2899-0.1873-0.06341-0.1399-0.1893-0.3826-0.2797-0.5394-0.236-0.409-0.2118-0.6841 0.06022-0.6841 0.19 0 0.228-0.07601 0.228-0.4561 0-0.3577-0.04304-0.4564-0.1995-0.4578-0.1097-9.63e-4 -0.2765-0.05642-0.3705-0.1232-0.1317-0.09355-0.09892-0.1058 0.1425-0.05309 0.1724 0.03762 0.3135 0.03058 0.3135-0.01565 0-0.1542-0.6216-0.6209-0.6627-0.4976-0.02222 0.06667-0.09089 0.1212-0.1526 0.1212-0.0617 0-0.08055-0.0997-0.04188-0.2215 0.06723-0.2119-0.2063-0.8552-0.5463-1.285-0.2139-0.2703-0.6741-0.4267-1.098-0.3731-0.1961 0.02481-0.3282-8.01e-4 -0.2935-0.05693 0.03468-0.05613-0.0278-0.1593-0.1389-0.2292-0.1682-0.1059-0.1401-0.1199 0.1686-0.08376 0.2412 0.02824 0.3705-0.005698 0.3705-0.09722 0-0.07983-0.08969-0.1171-0.2075-0.08634-0.1141 0.02985-0.2718-0.02327-0.3505-0.118-0.1219-0.1469-0.07464-0.1907 0.3215-0.2974 0.2744-0.07388 0.4645-0.1933 0.4645-0.2917 0-0.09165-0.06414-0.168-0.1425-0.1697-0.07839-0.001673-0.001431-0.09052 0.171-0.1974 0.1724-0.1069 0.3135-0.2368 0.3135-0.2887 0-0.05188 0.0513-0.06263 0.114-0.02387 0.06271 0.03875 0.114 0.01515 0.114-0.05245 0-0.07418 0.113-0.09455 0.285-0.05138 0.1796 0.04507 0.285 0.0233 0.285-0.05885 0-0.09506 0.06178-0.09732 0.228-0.008344 0.182 0.0974 0.228 0.08671 0.228-0.053 0-0.09627 0.05131-0.175 0.114-0.175s0.114-0.07147 0.114-0.1588c0-0.08736 0.07436-0.1874 0.1652-0.2222 0.1108-0.04254 0.1442-0.008609 0.1013 0.1031-0.04493 0.1171-0.009592 0.1457 0.1192 0.09627 0.1007-0.03864 0.1604-0.1069 0.1327-0.1517-0.02768-0.04479 0.1009-0.05924 0.2857-0.03212 0.4104 0.06023 0.4207 0.1109 0.05099 0.2515-0.1568 0.0596-0.285 0.1672-0.285 0.2392 0 0.09798 0.03929 0.09819 0.1566 8.59e-4 0.0861-0.07147 0.24-0.09792 0.342-0.05877 0.1147 0.04402 0.1864 0.01216 0.188-0.08354 0.001437-0.0871 0.09911-0.03014 0.2235 0.1303 0.1938 0.25 0.2135 0.2561 0.1606 0.04904-0.06917-0.2704 0.2269-0.5977 0.3542-0.3916 0.04234 0.0685 0.008415 0.2089-0.07536 0.3119-0.1315 0.1617-0.1258 0.1774 0.04139 0.1148 0.147-0.05506 0.177-0.02586 0.1243 0.1212-0.03814 0.1065-0.02904 0.1573 0.02025 0.1128 0.04929-0.04452 0.2002 0.08375 0.3354 0.285 0.1601 0.2384 0.3573 0.3789 0.5657 0.403 0.299 0.03462 0.3062 0.04734 0.1103 0.1941-0.195 0.1461-0.184 0.1624 0.1565 0.2328 0.2014 0.04167 0.3598 0.1082 0.3522 0.1479-0.007681 0.03968 0.04399 0.2123 0.1148 0.3835 0.08662 0.2094 0.186 0.2894 0.3034 0.2443 0.09607-0.03687 0.1747-0.01023 0.1747 0.05919 0 0.06942-0.09633 0.1262-0.2141 0.1262-0.1177 0-0.2713 0.06891-0.3411 0.1531-0.09871 0.1189-0.06243 0.1826 0.1624 0.285 0.1592 0.07255 0.3769 0.1335 0.4837 0.1355 0.234 0.004372 0.661 0.3087 0.5662 0.4035-0.03708 0.03709-0.1711 0.01196-0.2977-0.05583-0.1267-0.06779-0.3491-0.1181-0.4943-0.1119-0.2613 0.01125-0.2611 0.01232 0.02101 0.1027 0.1568 0.05021 0.2337 0.09719 0.171 0.1044-0.06271 0.007213-0.03706 0.06699 0.057 0.1329 0.1325 0.09276 0.111 0.1028-0.09529 0.04448-0.2418-0.06834-0.2546-0.0533-0.1385 0.1636 0.1522 0.2844 0.1972 0.2917 0.4211 0.0678 0.09406-0.09406 0.2673-0.171 0.385-0.171 0.1883 0 0.1996 0.04108 0.09449 0.3427-0.1559 0.4472-0.6335 0.8234-0.927 0.7302-0.1694-0.05377-0.201-0.03333-0.1288 0.08345 0.1321 0.2138 0.05763 0.7875-0.1261 0.9713-0.0836 0.0836-0.2328 0.121-0.3315 0.08312-0.1174-0.04506-0.1795-0.005519-0.1795 0.1143 0 0.1008-0.0513 0.1832-0.114 0.1832-0.06271 0-0.114 0.07696-0.114 0.171 0 0.09407-0.05759 0.171-0.128 0.171-0.09414 0-0.0944 0.04046-9.88e-4 0.153 0.06983 0.08416 0.09322 0.1868 0.05197 0.228-0.04127 0.04126-0.01812 0.07502 0.05144 0.07502 0.07363 0 0.1004 0.1072 0.06409 0.2565-0.07166 0.2947-0.08676 0.5487-0.04239 0.7126 0.01696 0.06271 0.02478 0.2753 0.01735 0.4724-0.01514 0.4018-0.2249 0.5483-0.4462 0.3115zm-6.193-0.7074c-0.1496-0.1147-0.365-0.2427-0.4787-0.2842-0.1137-0.04159-0.1746-0.1276-0.1353-0.1912 0.0393-0.0636-0.00876-0.1464-0.1068-0.184-0.09804-0.03762-0.1783-0.1373-0.1783-0.2216 0-0.2374-0.3586-0.3917-0.6045-0.2601-0.2928 0.1567-0.6047 0.03109-0.4338-0.1748 0.07792-0.09388 0.3046-0.141 0.5829-0.1212 0.382 0.02721 0.4554-0.002296 0.4554-0.1831 0-0.1185 0.1026-0.2704 0.228-0.3375 0.3508-0.1878 0.2783-0.6918-0.1777-1.235-0.08801-0.1048-0.2363-0.2931-0.3296-0.4185-0.09326-0.1254-0.1712-0.1671-0.1732-0.09268-0.00245 0.09174-0.1414 0.1143-0.4312 0.06992-0.7007-0.1072-1.391-0.5982-0.8551-0.608 0.1837-0.003337 0.1846-0.01495 0.01198-0.1463-0.2158-0.1642-0.115-0.3577 0.3554-0.6819 0.4001-0.2758 0.7106-0.2538 0.3747 0.02653-0.1406 0.1173-0.2703 0.308-0.2884 0.4238-0.01801 0.1158-0.07279 0.2747-0.1217 0.3531-0.05686 0.0911-0.02482 0.1425 0.08881 0.1425 0.1017 0 0.1777-0.09751 0.1777-0.228 0-0.1254 0.05434-0.228 0.1207-0.228 0.06641 0 0.08903-0.0513 0.05028-0.114-0.03876-0.06271 0.009514-0.114 0.1073-0.114 0.09776 0 0.1778-0.0513 0.1778-0.114 0-0.06271 0.1026-0.114 0.228-0.114 0.2561 0 0.3119 0.3266 0.09321 0.5453-0.1038 0.1038-0.04972 0.1104 0.2346 0.0289 0.4663-0.1337 0.6597-0.05985 0.7463 0.2852 0.0456 0.1817 0.1252 0.251 0.2383 0.2076 0.1079-0.0414 0.1699 0.002998 0.1699 0.1217 0 0.1028 0.1154 0.2333 0.2565 0.29 0.1411 0.05671 0.1906 0.1064 0.11 0.1103-0.1025 0.005055-0.1155 0.06721-0.0433 0.2068 0.05677 0.1097 0.08953 0.2841 0.07281 0.3875-0.01854 0.1146 0.1208 0.2693 0.3568 0.3965 0.213 0.1147 0.3873 0.24 0.3873 0.2783 0 0.03838 0.1411 0.1361 0.3135 0.2171 0.1808 0.08493 0.2532 0.1691 0.171 0.1988-0.07839 0.02836-0.1425 0.1023-0.1425 0.1642 0 0.06196-0.07708 0.1897-0.1713 0.284-0.1524 0.1524-0.2039 0.1326-0.4662-0.1792-0.3779-0.4491-0.6418-0.4663-0.5653-0.03693 0.03074 0.1725 0.1497 0.3905 0.2643 0.4846 0.2573 0.2111 0.3816 0.5169 0.2983 0.7339-0.07006 0.1826-0.3326 0.1244-0.6433-0.1425-0.3468-0.2979-0.3685-0.03497-0.02667 0.3219 0.3741 0.3905 0.1604 0.4849-0.2993 0.1322zm-2.951-0.1267c0-0.06641 0.05131-0.1207 0.114-0.1207 0.0627 0 0.114 0.02262 0.114 0.05028 0 0.02765-0.05131 0.08199-0.114 0.1207-0.06271 0.03875-0.114 0.01613-0.114-0.05028zm-0.9407-1.016c-0.03141-0.1201 0.04342-0.3772 0.1663-0.5712l0.2234-0.3528 0.2755 0.3274c0.1515 0.1801 0.2755 0.4098 0.2755 0.5105 0 0.1007 0.05985 0.1831 0.133 0.1831 0.07315 0 0.09913 0.03389 0.0577 0.07532-0.04142 0.04142-0.1739-0.01391-0.2944-0.123-0.2028-0.1835-0.2399-0.1846-0.4995-0.01455-0.2633 0.1725-0.2839 0.1704-0.3375-0.03466zm14.35-1.202c-0.1115-0.1374-0.1433-0.2541-0.0754-0.2768 0.06458-0.02153 0.1174-0.1029 0.1174-0.1808 0-0.0779 0.1172-0.2517 0.2604-0.3863 0.207-0.1945 0.3297-0.2261 0.5986-0.1542 0.4065 0.1087 0.4639 0.316 0.2375 0.8578-0.1502 0.3593-0.2155 0.4053-0.5579 0.3925-0.2423-0.009111-0.4602-0.1037-0.5806-0.2522zm8.292 0.115c-0.4295-0.2386-0.6107-0.4341-0.6107-0.6585 0-0.2031 0.01846-0.2001 0.2599 0.04247 0.3204 0.3219 0.7039 0.7782 0.6414 0.763-0.0254-0.006148-0.1562-0.07228-0.2906-0.147zm-20.09-0.2468c0.02166-0.1118 0.1084-0.2262 0.1928-0.2543 0.09812-0.03268 0.1392 0.02215 0.114 0.1521-0.02166 0.1118-0.1084 0.2262-0.1928 0.2543-0.09812 0.03268-0.1392-0.02214-0.114-0.1521zm11.31-0.3311c0-0.09131 0.0436-0.1391 0.09688-0.1061 0.05328 0.03292 0.06735 0.1076 0.03127 0.166-0.09219 0.1492-0.1282 0.1324-0.1282-0.05987zm9 0.09712c0.03789-0.03789 0.1362-0.04193 0.2185-9e-3 0.09096 0.03639 0.06393 0.06341-0.06888 0.06888-0.1202 0.004949-0.1875-0.02199-0.1496-0.05988zm-15.77-0.5012c0-0.1429 0.121-0.1429 0.342 0 0.1383 0.08937 0.1219 0.1109-0.08551 0.1123-0.1411 9.64e-4 -0.2565-0.04956-0.2565-0.1123zm-8.046-0.6968c-0.04309-0.06972-0.007642-0.1715 0.07879-0.2263 0.244-0.1546 0.3281-0.1225 0.3281 0.125 0 0.2434-0.2766 0.3122-0.4069 0.1013zm-0.9291-0.6745c-0.04336-0.1658-0.1217-0.2118-0.2769-0.1625-0.3597 0.1142-0.9105-0.05707-0.8752-0.2721 0.0171-0.1041-0.002724-0.243-0.04405-0.3087-0.04134-0.0657-0.0316-0.1899 0.02161-0.276 0.08024-0.1298 0.1488-0.1225 0.4014 0.04306 0.3827 0.2507 0.5452 0.1201 0.1994-0.1602-0.3155-0.2558-0.3236-0.3425-0.03209-0.3425 0.1431 0 0.2028-0.05656 0.1646-0.156-0.06432-0.1676 0.2634-0.297 0.7511-0.2967 0.2257 1.47e-4 0.2494 0.02321 0.114 0.1107-0.132 0.08528-0.1357 0.1109-0.01631 0.1123 0.09042 0.001023 0.1274 0.07283 0.0891 0.1728-0.04139 0.1079 0.001367 0.171 0.1158 0.171 0.1483 0 0.1555 0.03119 0.03947 0.171-0.2158 0.2601 0.007107 0.2041 0.3062-0.07688 0.3341-0.3139 0.3489-0.07774 0.02373 0.3789-0.1477 0.2074-0.2196 0.4447-0.1868 0.6162 0.04468 0.2337 0.008617 0.2789-0.2226 0.2789-0.1549 0-0.2451 0.05-0.2055 0.114 0.03875 0.06271-0.01432 0.114-0.118 0.114-0.1036 0-0.2156-0.1041-0.2489-0.2312zm-0.6308 0.0417c0.07839-0.03163 0.2067-0.03163 0.285 0 0.07838 0.03163 0.01426 0.05751-0.1425 0.05751-0.1568 0-0.2209-0.02588-0.1425-0.05751zm5.387-0.3129c0-0.1046 0.07986-0.1395 0.2298-0.1003 0.3505 0.09164 0.3906 0.2606 0.06195 0.2606-0.1747 0-0.2918-0.06433-0.2918-0.1603zm-3.11-0.3711c-0.03854-0.2016-0.01059-0.2635 0.09984-0.2211 0.08435 0.03237 0.2189-0.03416 0.299-0.1478 0.1039-0.1474 0.2111-0.181 0.3737-0.1173 0.1931 0.07573 0.1974 0.09068 0.0285 0.09746-0.1187 0.004766-0.1995 0.09761-0.1995 0.2293 0 0.4294-0.5234 0.5681-0.6015 0.1594zm0.8295 0.07797c0-0.2126 0.5494-0.4806 0.8135-0.3968 0.2526 0.08018 0.2522 0.08204-0.05413 0.2425-0.1698 0.08896-0.3588 0.1308-0.42 0.09295-0.06123-0.03784-0.1113-0.01446-0.1113 0.05195 0 0.06641-0.0513 0.1207-0.114 0.1207-0.06271 0-0.114-0.05012-0.114-0.1114zm1.995-0.3365c-0.6772-0.1634-1.066-0.489-0.7206-0.604 0.07399-0.02466 0.1062-0.1187 0.07152-0.209-0.09775-0.2547-0.09951-0.3377-0.006521-0.3067 0.04704 0.01568 0.07269 0.06698 0.05701 0.114-0.01568 0.04703 0.0212 0.08551 0.08193 0.08551 0.06075 0 0.08242 0.07303 0.04817 0.1623-0.07788 0.2029 0.2873 0.4078 0.727 0.4078 0.415 0 0.5165 0.09641 0.3142 0.2986-0.0866 0.0866-0.1739 0.1522-0.1941 0.1458-0.02016-0.006421-0.1906-0.04882-0.3787-0.09422zm-1.311-0.5782c0-0.06271 0.07999-0.114 0.1777-0.114 0.09777 0 0.146 0.05131 0.1073 0.114-0.03875 0.0627-0.1187 0.114-0.1777 0.114-0.05902 0-0.1073-0.05131-0.1073-0.114zm1.733-0.1125c-0.4279-0.1013-0.6105-0.2296-0.3268-0.2296 0.1045 0 0.1916-0.08978 0.1935-0.1995 0.00331-0.19 0.009009-0.19 0.1197 0 0.1418 0.2435 0.3514 0.2665 0.2601 0.0285-0.03835-0.09994-0.001312-0.1717 0.08909-0.1728 0.1204-0.001358 0.1167-0.02873-0.01631-0.1232-0.1331-0.09454-0.1051-0.1072 0.1264-0.05715 0.2671 0.0578 0.2919 0.03553 0.2432-0.2188-0.03151-0.1648-9.15e-4 -0.2832 0.07317-0.2832 0.07001 0 0.1333 0.08979 0.1405 0.1995 0.01168 0.1761 0.01912 0.1773 0.06329 0.01078 0.02754-0.1038 0.1755-0.2202 0.3288-0.2587 0.1533-0.03848 0.2788-0.1305 0.2788-0.2046 0-0.1023-0.03286-0.1018-0.1368 0.002176-0.1453 0.1453-0.5748 0.1853-0.6953 0.06482-0.1588-0.1588 0.1514-0.4776 0.4345-0.4465 0.159 0.01746 0.3128-0.006584 0.3417-0.05341 0.04581-0.07412 0.8627-0.07174 0.9395 0.002738 0.03404 0.03302 0.2101 0.07917 0.3773 0.0989 0.2351 0.02775-0.00722 0.2139-0.3749 0.288-0.2698 0.05437-0.3294 0.1023-0.2153 0.1733 0.1234 0.07683 0.1048 0.1149-0.08551 0.1753-0.1337 0.04244-0.2431 0.125-0.2431 0.1835s-0.1574 0.1063-0.3497 0.1063c-0.2872 0-0.3379 0.03735-0.2834 0.209 0.06886 0.217-0.3143 0.4751-0.7052 0.4751-0.1585 0-0.1533 0.02581 0.03388 0.1674 0.2183 0.1651 0.2182 0.1673-0.006718 0.1594-0.1254-0.004426-0.3974-0.04815-0.6044-0.09718zm-2.075-0.0876c0-0.152 0.4438-0.4821 0.5081-0.378 0.03299 0.05337-0.06785 0.1808-0.2241 0.2832-0.1562 0.1024-0.2841 0.145-0.2841 0.09482zm-3.798-0.4742c0.0325-0.1243 0.2447-0.2639 0.5295-0.3484 0.2614-0.07758 0.5372-0.1915 0.6128-0.2531 0.175-0.1426 0.4097-0.003818 0.3327 0.1968-0.03211 0.08367 0.002876 0.1747 0.07774 0.2022 0.2986 0.11-0.1217 0.28-0.8494 0.3436-0.6932 0.0606-0.7529 0.04863-0.7033-0.1411zm2.544 0.01274c-0.375-0.05164-0.3819-0.05991-0.114-0.1374l0.285-0.0824-0.2579-0.1039c-0.252-0.1016-0.2498-0.107 0.09641-0.2377 0.3432-0.1295 0.3521-0.125 0.2842 0.1455-0.07592 0.3025 0.1247 0.3852 0.3611 0.1488 0.09791-0.09791 0.1145-0.06947 0.06651 0.114-0.03516 0.1345-0.1221 0.2362-0.1931 0.2262-0.07107-0.01004-0.3088-0.04298-0.5283-0.0732zm3.078-0.3646c0-0.06271 0.08324-0.114 0.185-0.114 0.1453 0 0.1567-0.03414 0.05307-0.1589-0.1018-0.1227-0.09017-0.2007 0.05119-0.342 0.2719-0.2718 0.3949-0.2236 0.3949 0.1549 0 0.2175-0.07862 0.3801-0.2205 0.4561-0.2788 0.1492-0.4636 0.1508-0.4636 0.004011zm-0.5701-0.114c0-0.06271 0.02262-0.114 0.05028-0.114 0.02765 0 0.08199 0.05131 0.1207 0.114 0.03875 0.0627 0.01613 0.114-0.05028 0.114-0.0664 0-0.1207-0.05132-0.1207-0.114zm-0.3787-0.08102c-0.03429-0.05549-0.02085-0.1681 0.02988-0.2501 0.07007-0.1134 0.1125-0.1165 0.1764-0.01312 0.04627 0.07486 0.03281 0.1874-0.0299 0.2501-0.06378 0.06378-0.1415 0.06957-0.1764 0.01312zm-13.36-0.1457c-0.03995-0.06463 0.005817-0.08375 0.1073-0.04481 0.1975 0.0758 0.2337 0.1575 0.06965 0.1575-0.059 0-0.1386-0.05072-0.1769-0.1127zm11.17-0.2293c-0.3379-0.08598-0.3368-0.0872 0.09224-0.1005 0.2634-0.008184 0.4066 0.03136 0.3638 0.1005-0.03876 0.06271-0.08027 0.1079-0.09224 0.1005-0.01199-0.007425-0.1757-0.05266-0.3638-0.1005zm-2.482-3.663c0.07735-0.07792 0.1693-0.113 0.2044-0.07785 0.03511 0.03511-0.02817 0.09886-0.1406 0.1417-0.1625 0.06187-0.1756 0.04878-0.06383-0.06382z" fill="url(#linearGradient5014)"/><path d="m53.17 85.11c-0.5833-0.1529-1.105-0.5662-0.8417-0.6671 0.253-0.09709 0.03377-0.6812-0.2838-0.7561-0.1578-0.03725-0.2776-0.1562-0.2906-0.2885-0.01216-0.1238-0.04166-0.2764-0.06554-0.3391-0.02387-0.06271 0.07687-0.308 0.2239-0.5451 0.202-0.3258 0.2457-0.5068 0.1787-0.7411-0.1286-0.4502-0.1387-0.8431-0.02939-1.145 0.1535-0.4243 0.2043-1.952 0.08585-2.579-0.1271-0.6734-0.2756-0.814-1.473-1.395-1.117-0.5421-1.824-1.029-1.824-1.256 0-0.1003-0.1724-0.3928-0.3832-0.6501-0.2107-0.2573-0.5461-0.7757-0.7454-1.152-0.4337-0.8191-0.8427-1.401-1.203-1.71-0.1459-0.1254-0.3206-0.3975-0.3883-0.6047-0.1177-0.3605-0.1058-0.3868 0.2778-0.6131 0.4318-0.2548 0.4915-0.6059 0.1031-0.6063-0.313-2.83e-4 -0.3548-0.4337-0.07965-0.8266 0.1208-0.1726 0.1986-0.3732 0.1729-0.4459-0.02581-0.07288 0.1094-0.1664 0.3014-0.2086 0.2398-0.05267 0.3697-0.1624 0.4175-0.3524 0.03809-0.1518 0.1476-0.276 0.2433-0.276 0.2276 0 0.789-0.6019 0.6153-0.6598-0.07685-0.02561-0.1303-0.3076-0.1308-0.6894-5.22e-4 -0.4517-0.06866-0.749-0.2265-0.9881-0.1241-0.1881-0.2008-0.4208-0.1704-0.517 0.03451-0.1091-0.07379-0.2513-0.2877-0.3776-0.311-0.1837-0.3597-0.186-0.5211-0.02452-0.09795 0.09796-0.2292 0.1781-0.2917 0.1781-0.06246 0-0.08099 0.1026-0.04118 0.228 0.05137 0.1618 0.02049 0.228-0.1063 0.228-0.0983 0-0.1787-0.08551-0.1787-0.19 0-0.1045-0.03387-0.1561-0.07528-0.1147-0.04141 0.04141-0.1469-0.027-0.2345-0.152-0.08756-0.125-0.2331-0.2273-0.3234-0.2273-0.1639 0-1.189-1.007-1.19-1.169-3.55e-4 -0.04703-0.05498-0.08552-0.1214-0.08552-0.06642 0-0.08222 0.06414-0.03513 0.1425 0.05819 0.09684 0.02379 0.09237-0.1073-0.01396-0.1061-0.08607-0.1931-0.2913-0.1934-0.4561-2.61e-4 -0.1648-0.154-0.5305-0.3416-0.8127-0.1876-0.2822-0.3413-0.5772-0.3416-0.6556-2.78e-4 -0.07839-0.09541-0.1425-0.2114-0.1425-0.116 0-0.4146-0.1475-0.6635-0.3278-0.2489-0.1803-0.5542-0.3601-0.6784-0.3995-0.1242-0.03944-0.4183-0.3737-0.6535-0.7429-0.597-0.9371-0.7643-1.069-1.244-0.9786-0.377 0.07073-0.4369 0.03202-1.294-0.8365-1.299-1.316-1.55-1.615-1.864-2.214-0.2495-0.477-0.2653-0.5793-0.1425-0.9189 0.1845-0.5103 0.1743-0.8812-0.04759-1.718-0.1022-0.3853-0.2-0.8131-0.2173-0.9506-0.01732-0.1375-0.07332-0.3171-0.1245-0.3991-0.05114-0.08196-0.1034-0.3286-0.1161-0.5481-0.01274-0.2195-0.06242-0.6043-0.1104-0.8551-0.048-0.2508-0.09144-0.9435-0.09655-1.539-0.005107-0.5957-0.06614-1.181-0.1356-1.301-0.1213-0.209-0.1321-0.207-0.2695 0.04973-0.1582 0.2956-0.2365 4.444-0.08391 4.444 0.04703 1.5e-5 0.08176 0.1668 0.07718 0.3706-0.007593 0.3379-0.02803 0.3153-0.2321-0.2565-0.1525-0.4275-0.201-0.764-0.1522-1.057 0.04774-0.2872 0.002559-0.622-0.1359-1.007-0.1991-0.5537-0.1992-0.5814-0.003468-0.691 0.1722-0.09638 0.1923-0.2078 0.1287-0.7161-0.04316-0.3455-0.01265-0.9608 0.0716-1.444 0.1842-1.057 0.1733-1.591-0.04104-2.021-0.1023-0.2051-0.13-0.3978-0.07057-0.4915 0.05374-0.0848 0.0985-0.3363 0.09945-0.5589 9.6e-4 -0.2226 0.06332-0.4663 0.1386-0.5416 0.07525-0.07525 0.098-0.1368 0.05055-0.1368-0.04746 0-0.01028-0.1085 0.08262-0.2411 0.09288-0.1326 0.1447-0.3042 0.1151-0.3812-0.07248-0.1889 0.3617-1.269 0.6742-1.677 0.7902-1.032 1.717-2.022 1.832-1.957 0.07162 0.04093 0.09273 0.03296 0.04688-0.0177-0.08931-0.09872 0.3543-0.9706 0.4939-0.9706 0.1733 0 0.1723 0.2905-0.001479 0.4219-0.1563 0.1181-0.1481 0.1286 0.05965 0.07636 0.3729-0.09373 0.6795-0.7963 0.6653-1.524-0.008537-0.4373 0.05093-0.7187 0.1965-0.9297 0.1148-0.1665 0.2087-0.3845 0.2087-0.4846 0-0.1001 0.04785-0.1819 0.1063-0.1819 0.05849 0 0.1392-0.1036 0.1794-0.2301 0.04016-0.1266 0.2208-0.3919 0.4014-0.5896 0.1806-0.1977 0.3021-0.402 0.27-0.454-0.03211-0.05196-0.01511-0.09447 0.03778-0.09447 0.05289 0 0.1931-0.1667 0.3117-0.3705 0.1185-0.2038 0.2477-0.3962 0.2871-0.4276 0.03938-0.03136 0.187-0.247 0.3281-0.4792 0.253-0.4165 0.2533-0.4216 0.02192-0.377-0.2009 0.0387-0.2176 0.0134-0.116-0.1764 0.06523-0.1219 0.1711-0.2216 0.2353-0.2216 0.0642 0 0.08502-0.0513 0.04627-0.114-0.03876-0.06271-0.021-0.114 0.03945-0.114 0.06045 0 0.09062-0.2002 0.06705-0.4449-0.03065-0.3182 0.02113-0.5262 0.1819-0.7306 0.3018-0.3837 0.2991-0.5826-0.005676-0.4195-0.2298 0.123-0.4537 0.06937-0.4537-0.1087 0-0.1318 0.4377-0.2324 0.4791-0.1101 0.01868 0.05517 0.1745 0.00801 0.3463-0.1048l0.3123-0.2051-0.7114 0.05039c-0.3913 0.02772-0.7424 0.09882-0.7803 0.158-0.07638 0.1194-0.8579 0.009507-1.128-0.1586-0.123-0.07645-0.08002-0.09225 0.1528-0.05622 0.3676 0.05688 1.121-0.1409 1.039-0.2729-0.02958-0.04786 0.0212-0.162 0.1129-0.2537 0.09165-0.09165 0.1363-0.197 0.09925-0.234-0.03707-0.03706 0.06799-0.1189 0.2335-0.1818 0.1655-0.06292 0.3009-0.1686 0.3009-0.2348 0-0.06623 0.08978-0.1532 0.1995-0.1933 0.1097-0.04006 0.3219-0.1667 0.4714-0.2815 0.3217-0.2469 0.7934-0.2738 0.8792-0.05027 0.08965 0.2336 0.7108-0.02585 0.7538-0.3149 0.03892-0.2613 0.7745-0.7276 0.7745-0.491 0 0.08024-0.0571 0.203-0.1269 0.2728-0.06978 0.06979-0.08981 0.1869-0.0445 0.2602 0.05733 0.09275 0.1739 0.04825 0.3834-0.1463 0.5391-0.5008 0.8896-0.6751 1.118-0.5563 0.1149 0.05975 0.3603 0.169 0.5451 0.2428 0.1849 0.07377 0.2874 0.1691 0.2278 0.2118-0.2014 0.1445-0.4983 0.8922-0.5708 1.437-0.02438 0.1834-0.09695 0.3861-0.1613 0.4504-0.06431 0.0643-0.1169 0.2301-0.1169 0.3685 0 0.2015 0.04893 0.2388 0.2459 0.1873 0.1684-0.04405 0.2202-0.02274 0.1643 0.06768-0.04486 0.07259-0.02723 0.1384 0.03918 0.1462 0.0664 0.007846 0.1721 0.02708 0.2348 0.04276 0.06271 0.01568 0.1973 0.03492 0.299 0.04275 0.1488 0.01146 0.158 0.04676 0.0472 0.1803-0.1739 0.2096-0.05969 0.4041 0.2373 0.4041 0.1254 0 0.1959 0.05196 0.1567 0.1155-0.03924 0.06351 0.00903 0.2766 0.1073 0.4736 0.2233 0.4476 0.2245 0.4371-0.04938 0.4371-0.335 0-0.2779 0.2106 0.1174 0.4329 0.2694 0.1515 0.3316 0.2507 0.2829 0.4508-0.07438 0.3051 0.1157 0.3427 0.2705 0.05347 0.1601-0.2991 0.5301-0.2807 0.6989 0.03479 0.07988 0.1493 0.3046 0.3346 0.4994 0.4119 0.1948 0.07731 0.4009 0.1637 0.4579 0.192 0.05702 0.02832 0.07146-0.03248 0.03208-0.1351-0.03937-0.1026-0.01634-0.1866 0.0512-0.1866 0.07406 0 0.0944 0.1132 0.05126 0.285-0.04126 0.1644-0.02235 0.285 0.04465 0.285 0.0639 0 0.1162-0.05131 0.1162-0.114 0-0.06271 0.07696-0.114 0.171-0.114 0.09406 0 0.2748-0.1038 0.4017-0.2306 0.1795-0.1794 0.2048-0.2789 0.1143-0.448-0.09617-0.1797-0.05213-0.2679 0.2539-0.5084 0.4171-0.3279 0.5229-0.2092 0.3039 0.341-0.1411 0.3545-0.2035 0.9602-0.09893 0.9602 0.03449-1e-5 0.1243-0.06158 0.1995-0.1368 0.1064-0.1064 0.1368-0.09524 0.1368 0.05028 0 0.1029-0.05131 0.2188-0.114 0.2576-0.1543 0.09537-0.1452 0.399 0.01204 0.399 0.1705 0 0.8431-0.5741 0.8431-0.7197 0-0.2339 0.2734-0.1992 0.4077 0.05176 0.1022 0.191 0.1042 0.2693 0.007722 0.3015-0.0717 0.0239-0.1304 0.1612-0.1304 0.305 0 0.3862-0.2438 0.5278-0.7906 0.4591-0.2888-0.03628-0.4533-0.01721-0.4131 0.04788 0.1318 0.2133-0.403 0.2645-0.6287 0.06019-0.1952-0.1767-0.2199-0.1785-0.2199-0.01594 0 0.1007 0.08979 0.2368 0.1995 0.3026 0.1878 0.1126 0.1864 0.1297-0.02252 0.2912-0.1221 0.0944-0.3102 0.1437-0.418 0.1095-0.1077-0.0342-0.2313-0.004924-0.2745 0.06504-0.0525 0.08493-0.1694 0.04196-0.3516-0.1293-0.1502-0.1411-0.273-0.2025-0.273-0.1366 0 0.06597 0.07696 0.1838 0.171 0.2619 0.2374 0.197 0.2141 0.3799-0.03994 0.3135-0.116-0.03034-0.3341 0.0395-0.4846 0.1552-0.1505 0.1157-0.3154 0.2115-0.3665 0.2129-0.09095 0.002482-0.5486 0.5045-0.8645 0.9482-0.139 0.1953-0.1348 0.2374 0.03349 0.3316 0.1309 0.07322 0.1699 0.1875 0.1217 0.3559-0.1863 0.6505-0.1863 0.6474 0.0034 0.5746 0.1769-0.06788 0.8558 0.4547 0.8558 0.6588 0 0.1699 0.6149 0.6997 0.9042 0.779 0.2254 0.0618 0.2857 0.1438 0.2614 0.3552-0.01739 0.1512-0.04937 0.4616-0.07107 0.6899-0.0217 0.2283-0.07463 0.472-0.1176 0.5416-0.04539 0.07345 0.001954 0.1265 0.1129 0.1265 0.1328 0 0.1735 0.06729 0.1333 0.2207-0.06081 0.2326 0.2778 0.4645 0.3522 0.2412 0.02223-0.06668 0.08548-0.0934 0.1405-0.05937 0.05506 0.03403 0.2027-0.04073 0.3282-0.1662 0.1254-0.1254 0.1907-0.2511 0.1451-0.2793-0.04563-0.0282-0.06385-0.2915-0.04049-0.5852 0.0375-0.4716 0.08428-0.5524 0.4007-0.6921 0.197-0.08698 0.4355-0.2231 0.5301-0.3026 0.2388-0.2006 0.2788-1.157 0.05613-1.342-0.2435-0.2021-0.2128-0.3069 0.114-0.3889 0.2323-0.0583 0.285-0.1414 0.285-0.4494 0-0.2078 0.03783-0.4157 0.08406-0.4619 0.04623-0.04623 0.08471-0.1702 0.08551-0.2755 9.71e-4 -0.1277 0.07736-0.1789 0.2295-0.1537 0.1254 0.02078 0.393 0.06466 0.5947 0.09753 0.2273 0.03704 0.3931 0.143 0.4362 0.2788 0.03824 0.1205 0.1939 0.3005 0.3459 0.4001 0.3602 0.236 0.3738 0.5386 0.01986 0.4428-0.2476-0.06702-0.2486-0.0643-0.0285 0.07783 0.2473 0.1597 0.3552 0.4323 0.171 0.4323-0.06271 0-0.114 0.0465-0.114 0.1033 0 0.05684 0.1026 0.07651 0.228 0.04371 0.1586-0.04147 0.228-0.003498 0.228 0.1247 0 0.1014-0.05986 0.1843-0.133 0.1843-0.07315 0-0.109 0.02399-0.07971 0.05331 0.02931 0.02932 0.2502-0.007132 0.4909-0.081 0.3355-0.103 0.4773-0.2284 0.608-0.5379l0.1704-0.4036 0.1242 0.285c0.06831 0.1568 0.1754 0.3207 0.2381 0.3644 0.06263 0.04362 0.07909 0.1141 0.03659 0.1566-0.0425 0.0425 0.05443 0.25 0.2154 0.461 0.2443 0.3203 0.2638 0.3948 0.1179 0.4508-0.1502 0.05763-0.1439 0.09793 0.04442 0.2863 0.1206 0.1206 0.2582 0.2192 0.3058 0.2192 0.04762 0 0.1519 0.1046 0.2318 0.2325 0.07984 0.1278 0.1912 0.204 0.2476 0.1692 0.05633-0.03481 0.1352-0.01031 0.1752 0.05444 0.04003 0.06476 0.117 0.09041 0.171 0.05701 0.05404-0.0334 0.1305-0.008583 0.1699 0.05515 0.03939 0.06373 0.004461 0.1162-0.07764 0.1166-0.08208 3.87e-4 -0.2957 0.07708-0.4747 0.1704-0.179 0.09335-0.3714 0.1413-0.4276 0.1066-0.05618-0.03472-0.1021-0.01429-0.1021 0.04542 0 0.1965 0.3714 0.2557 0.5581 0.08897 0.2476-0.2212 0.6476-0.2824 0.6088-0.09314-0.01736 0.08476 0.05334 0.1334 0.1656 0.114 0.1252-0.02168 0.2349 0.07437 0.3042 0.2663 0.1466 0.4064 0.03261 0.6472-0.349 0.7372-0.1751 0.0413-0.4549 0.2019-0.6217 0.3569-0.2852 0.265-0.3749 0.281-1.505 0.2679-1.097-0.0127-1.213 0.006162-1.325 0.2166-0.06783 0.1268-0.2135 0.2305-0.3238 0.2305-0.1103 0-0.4426 0.2565-0.7385 0.5701-0.2959 0.3135-0.4951 0.5701-0.4425 0.5701 0.05256 0 0.2199-0.1345 0.372-0.2988 0.5024-0.543 1.787-0.9359 1.99-0.6084 0.1352 0.2188-0.1796 0.454-0.5007 0.3741-0.2732-0.06803-0.2859-0.05712-0.1397 0.1203 0.08844 0.1073 0.221 0.172 0.2946 0.1438 0.08354-0.03206 0.1338 0.07387 0.1338 0.2822 0 0.4127 0.3696 0.7776 0.8249 0.8145 0.5154 0.04179 0.4686 0.236-0.1028 0.4265-0.2822 0.09406-0.5801 0.2608-0.6621 0.3706-0.1664 0.2228-0.4262 0.2617-0.5382 0.08051-0.1185-0.1917 0.165-0.4391 0.672-0.5862 0.373-0.1083 0.4178-0.1457 0.2148-0.1798-0.1411-0.02364-0.2565-0.09363-0.2565-0.1555 0-0.0619-0.114-0.03268-0.2534 0.06494-0.1394 0.09762-0.3703 0.1775-0.5131 0.1775-0.1428 0-0.2597 0.04785-0.2597 0.1063 0 0.1223-0.444 0.2937-0.6556 0.2531-0.07839-0.01504-0.1425 0.0262-0.1425 0.09166s-0.09466 0.119-0.2104 0.119c-0.3895 0-0.783 0.6612-0.5986 1.006 0.08794 0.1644 0.0294 0.1955-0.4163 0.2216-0.6198 0.03627-1.111 0.2502-1.112 0.4842-4.01e-4 0.09327-0.06643 0.285-0.1467 0.4261-0.1338 0.2351-0.1672 0.2426-0.3996 0.09036-0.2778-0.1821-0.454-0.1187-0.5742 0.2065-0.05196 0.1405-0.1426 0.1866-0.2703 0.1376-0.1696-0.0651-0.1679-0.04691 0.01502 0.1552 0.1308 0.1445 0.1868 0.3355 0.1519 0.518-0.03039 0.159-0.01107 0.289 0.04295 0.289 0.05401 0 0.0982 0.07696 0.0982 0.171 0 0.09406-0.07696 0.171-0.171 0.171-0.09406 0-0.171 0.0513-0.171 0.114 0 0.06271 0.07999 0.114 0.1778 0.114 0.09777 0 0.1474 0.04907 0.1104 0.109-0.03706 0.05997-0.1427 0.08013-0.2348 0.04481-0.1145-0.04394-0.1674 0.01164-0.1674 0.176 0 0.1321-0.06908 0.2402-0.1535 0.2402-0.1982 0-0.8532 0.3211-1.202 0.589-0.1495 0.115-0.3561 0.2091-0.4591 0.2091-0.1029 0-0.3305 0.2181-0.5058 0.4846-0.2477 0.3768-0.3052 0.5733-0.2585 0.8836 0.03302 0.2195 0.1096 0.7192 0.1702 1.11 0.1183 0.7638-0.004587 1.513-0.248 1.511-0.1557-0.00101-0.4222-0.5143-0.4222-0.8132 0-0.1092-0.05719-0.2339-0.1271-0.2771-0.07662-0.04735-0.107-0.2879-0.07645-0.6057 0.06731-0.7005-0.2035-1.21-0.6429-1.21-0.1928 0-0.3983-0.1056-0.5363-0.2755-0.1421-0.175-0.3428-0.2755-0.5498-0.2755-0.2479 0-0.3109-0.04326-0.2631-0.1805 0.04793-0.1375 0.02966-0.1499-0.07669-0.052-0.09199 0.08469-0.2813 0.09656-0.5552 0.03481-0.3933-0.0887-0.6983-0.01907-0.3934 0.08981 0.07838 0.02799 0.1425 0.1236 0.1425 0.2124 0 0.2506-0.5426 0.1978-0.6841-0.06651-0.06712-0.1254-0.2198-0.228-0.3393-0.228-0.1195 0-0.2455-0.04564-0.28-0.1014-0.03448-0.05578-0.2372-0.1218-0.4506-0.1467-0.2864-0.03344-0.4222 0.009606-0.5189 0.1646-0.08997 0.1441-0.2044 0.1866-0.365 0.1356-0.3531-0.1121-0.8966 0.4541-0.8966 0.9339 0 0.2259-0.08963 0.4568-0.227 0.5848-0.1253 0.1168-0.2779 0.4801-0.3408 0.8114-0.06256 0.3299-0.1369 0.6373-0.1652 0.6831-0.02829 0.04578-0.007216 0.3625 0.04682 0.7038 0.2585 1.633 0.5378 2.041 1.399 2.044 0.2979 0.001082 0.5416 0.05328 0.5416 0.116 0 0.3858 0.6027-0.1193 0.8507-0.713 0.1662-0.3977 0.2009-0.4183 0.6905-0.4085 0.2835 0.005695 0.5437 0.05596 0.5782 0.1117 0.03446 0.05575 0.1108 0.07163 0.1696 0.03527 0.2006-0.124 0.2476 0.2982 0.05668 0.5092-0.1047 0.1157-0.2439 0.4042-0.3093 0.6412-0.0882 0.3195-0.1453 0.3893-0.2208 0.27-0.05602-0.08849-0.1061-0.1352-0.1113-0.1039-0.005184 0.03136-0.03215 0.2366-0.05991 0.4561-0.02775 0.2195-0.1527 0.5383-0.2777 0.7084-0.2196 0.2991-0.2202 0.3131-0.01621 0.4223 0.116 0.06211 0.5338 0.1649 0.9284 0.2284 0.3946 0.06355 0.8924 0.2327 1.106 0.3758 0.426 0.2851 0.421 0.2181 0.1171 1.563-0.187 0.8276-0.146 1.08 0.2601 1.605 0.1568 0.2025 0.319 0.4222 0.3606 0.4882 0.1001 0.1589 1.158 0.2006 1.254 0.04945 0.1232-0.1942 0.7537 0.1343 1.127 0.5871 0.228 0.2766 0.3373 0.3475 0.3373 0.2187 0-0.1048 0.1539-0.2815 0.342-0.3926 0.2164-0.1278 0.342-0.2949 0.342-0.4548 0-0.2591 0.3514-0.4603 0.5691-0.3258 0.06326 0.0391 0.115 0.02374 0.115-0.03415 0-0.05788 0.24-0.1381 0.5332-0.1783 0.2933-0.0402 0.6217-0.1531 0.7298-0.251 0.1314-0.1189 0.2216-0.1373 0.2721-0.05562 0.04156 0.06724-0.004296 0.1529-0.1019 0.1903-0.1227 0.04707-0.1562 0.1529-0.1085 0.3427 0.03867 0.1541 0.005746 0.3508-0.07501 0.4481-0.1161 0.1399-0.1149 0.2278 0.006535 0.4546 0.08276 0.1546 0.1947 0.2812 0.2488 0.2812 0.1754 0 0.2383-0.3497 0.1125-0.6257-0.1423-0.3122-0.03512-0.4388 0.4747-0.5608 0.4009-0.09594 1.1 0.1203 1.1 0.3402 0 0.1181 0.1513 0.1622 0.5561 0.1622 0.37 0 0.6066 0.06088 0.7071 0.1819 0.1139 0.1372 0.2631 0.164 0.6069 0.109 0.2508-0.0401 0.5153-0.1222 0.588-0.1825 0.08885-0.07374 0.2385-0.02547 0.4574 0.1475 0.1789 0.1414 0.4812 0.3093 0.6717 0.3732 0.2556 0.08563 0.3439 0.184 0.3368 0.3753-0.006662 0.1806 0.04523 0.2467 0.171 0.2178 0.2743-0.06291 1.054 0.3629 1.119 0.611 0.03151 0.1205 0.1121 0.2191 0.1792 0.2191 0.06703 0 0.2383 0.1094 0.3806 0.243 0.2122 0.1993 0.3871 0.2402 0.972 0.2269 0.815-0.01842 1.762 0.2211 2.093 0.5296 0.1242 0.1157 0.2728 0.2075 0.3303 0.204 0.05747-0.003518 0.1784 0.2154 0.2688 0.4865 0.09036 0.2711 0.2357 0.5203 0.323 0.5538 0.2525 0.09691 0.1885 0.2815-0.2556 0.7363-0.2648 0.2711-0.3894 0.4894-0.3452 0.6044 0.03802 0.09907 0.1283 0.1668 0.2006 0.1506 0.2209-0.04969 0.2444 0.2343 0.02399 0.2897-0.1134 0.02851 0.03761 0.0307 0.3355 0.004864 0.3723-0.0323 0.5416-0.004069 0.5416 0.0903 0 0.07551 0.1989-0.08469 0.442-0.356l0.442-0.4933 0.6126 0.1378c0.3369 0.07581 0.6977 0.1387 0.8018 0.1398 0.1048 0.001068 0.2205 0.1266 0.2593 0.2816 0.0613 0.2442 0.1006 0.2634 0.3106 0.151 0.1342-0.07181 0.4291-0.0985 0.6675-0.06038 0.2349 0.03756 0.677 0.0192 0.9824-0.0408 0.5074-0.09966 0.6133-0.07928 1.226 0.2361 0.464 0.2387 0.7964 0.3341 1.078 0.3095 0.3729-0.03271 0.4156-0.004673 0.515 0.3375 0.1674 0.5765-0.06641 1.134-0.8075 1.926-1.422 1.519-1.513 1.641-1.513 2.027 0 0.4405-0.1985 1.075-0.4152 1.327-0.08518 0.099-0.1551 0.2529-0.1555 0.342-3.25e-4 0.08913-0.3003 0.4755-0.6667 0.8587-0.5156 0.5392-0.7667 0.7148-1.111 0.7769-0.8942 0.1612-2.674 0.9926-2.923 1.365-0.04607 0.06901-0.08455 0.2397-0.08551 0.3794-0.001051 0.1524-0.1271 0.3321-0.3153 0.4494-0.1724 0.1075-0.4638 0.3427-0.6474 0.5227-0.1836 0.18-0.4915 0.4024-0.6841 0.4943-0.4509 0.2151-0.7952 0.4187-1.01 0.597-0.1879 0.156-1.472 0.2146-1.878 0.08574-0.1556-0.04939-0.2554-0.0335-0.2554 0.04066 0 0.06693 0.06556 0.1217 0.1457 0.1217 0.08012 0 0.2305 0.09905 0.3341 0.2201 0.1774 0.2071 0.1726 0.2305-0.08045 0.3963-0.1728 0.1132-0.5976 0.1874-1.189 0.2075-0.8149 0.02768-0.9201 0.05588-0.9204 0.2467-3.05e-4 0.1913-0.06383 0.2079-0.5664 0.1484l-0.5661-0.06704 0.0656 0.328c0.06092 0.3046 0.03822 0.3307-0.3176 0.3647-0.4702 0.04499-0.491 0.242-0.03466 0.3279 0.304 0.05727 0.2845 0.07136-0.206 0.1495-0.2979 0.04745-0.5416 0.1216-0.5417 0.1648-1.25e-4 0.1277-0.4751 0.1108-1.039-0.03697zm-1.413-1.196c-0.03876-0.06271-0.01614-0.114 0.05028-0.114 0.0664 0 0.1207 0.05132 0.1207 0.114 0 0.0627-0.02262 0.114-0.05028 0.114-0.02765 0-0.08199-0.05131-0.1207-0.114zm10.89-13.74c0-0.1568 0.01283-0.2882 0.0285-0.2921 0.01568-0.003899 0.2466-0.03212 0.5131-0.06271 0.3786-0.04346 0.4846-0.01838 0.4846 0.1146 0 0.2242-0.4392 0.5252-0.7665 0.5252-0.201 0-0.2597-0.06444-0.2597-0.285zm23.15-2.698c-0.00292-0.04165 0.1694-0.5335 0.3829-1.093 0.7222-1.893 0.9865-2.884 1.058-3.97 0.06226-0.9479 0.04479-1.091-0.1766-1.45-0.2275-0.3681-0.2403-0.4937-0.1716-1.695 0.06446-1.129 0.04945-1.318-0.1155-1.454-0.217-0.1801-0.1963-0.1933-0.5076 0.3241l-0.2359 0.392-0.1165-0.3065c-0.2256-0.5933-0.5492-0.3259-1.441 1.191-0.3302 0.5614-0.5397 0.7907-0.8123 0.8893-0.202 0.07306-0.5792 0.374-0.8382 0.6687-0.259 0.2947-0.5446 0.5776-0.6347 0.6287-0.1025 0.05806-0.5026-0.04575-1.069-0.2774-0.7462-0.3051-0.9256-0.4284-1.021-0.7014-0.0635-0.1822-0.2156-0.3574-0.3381-0.3895-0.1224-0.03201-0.2502-0.1301-0.2839-0.218-0.03372-0.08788-0.1399-0.1598-0.2359-0.1598-0.09603 0-0.1746-0.07696-0.1746-0.171 0-0.09406 0.05986-0.171 0.133-0.171 0.07316 0 0.1001-0.03297 0.05976-0.07326-0.04029-0.04029-0.145-0.01375-0.2326 0.05897-0.1786 0.1482-0.5225 0.05954-0.5448-0.1404-0.008011-0.07168-0.02682-0.2492-0.0418-0.3945-0.01499-0.1453-0.07946-0.3163-0.1433-0.3801-0.07004-0.07004-0.09262-0.4908-0.05699-1.062 0.04593-0.7364 0.01776-1.028-0.1272-1.319-0.1024-0.2053-0.1862-0.4919-0.1862-0.6368 0-0.1517-0.1025-0.3183-0.2415-0.3928-0.2271-0.1215-0.2366-0.185-0.1585-1.059 0.04565-0.5112 0.1063-1.212 0.1347-1.556 0.1045-1.267 0.1849-1.651 0.4097-1.955 0.2683-0.3629 0.3925-1.33 0.2136-1.664-0.2362-0.4414-0.2748-1.463-0.07015-1.859 0.1556-0.3009 0.1668-0.4501 0.06433-0.8571-0.158-0.6275-0.161-0.6081 0.08383-0.5441 0.1143 0.0299 0.3897-0.0529 0.6119-0.184 0.3418-0.2017 0.4149-0.3179 0.4748-0.755 0.07669-0.5596 0.5513-1.471 0.8194-1.574 0.09145-0.0351 0.1663-0.1344 0.1663-0.2207 0-0.08631 0.09975-0.2472 0.2217-0.3575 0.1219-0.1103 0.2374-0.3016 0.2565-0.4251 0.05971-0.3844 0.7938 0.365 0.8806 0.8989 0.05943 0.3657 0.1152 0.4315 0.3833 0.4521 0.198 0.01522 0.3985-0.06684 0.5435-0.2225 0.1999-0.2146 0.2606-0.2273 0.4677-0.09796 0.1707 0.1066 0.2729 0.1137 0.3614 0.02524 0.06785-0.06785 0.2157-0.1234 0.3286-0.1234 0.2816 0 0.269-0.4583-0.0228-0.8292-0.2152-0.2736-0.3363-1.189-0.1413-1.069 0.04772 0.0295 0.1632-0.006978 0.2565-0.08106 0.3362-0.2667 0.434-0.6043 0.3845-1.327-0.04365-0.6379-0.1211-0.8325-0.6762-1.7-0.9292-1.452-1.49-2.041-1.136-1.192 0.1121 0.2682 0.1351 0.461 0.06506 0.5454-0.06694 0.08065-0.06791 0.1943-0.002551 0.2977 0.1443 0.2281 0.1355 0.3038-0.04347 0.3724-0.08399 0.03223-0.3918-0.1578-0.6841-0.4224-0.4168-0.3773-0.5314-0.5579-0.5314-0.8378 0-0.1962-0.0513-0.3885-0.114-0.4273-0.0627-0.03875-0.114-0.1683-0.114-0.2879s-0.08769-0.4013-0.1949-0.6261c-0.1554-0.3259-0.1676-0.4523-0.06011-0.6244 0.1697-0.2718-0.04517-0.8399-0.4835-1.278-0.2444-0.2444-0.3571-0.2829-0.6133-0.2094-0.2815 0.08075-0.3632 0.03156-0.7922-0.4774-0.2631-0.3121-0.4784-0.5109-0.4784-0.4418 0 0.2739 0.637 1.263 0.8144 1.264 0.2085 0.001832 0.3718 0.3018 0.2165 0.3978-0.05461 0.03375-0.1193 0.001399-0.1437-0.0719-0.05627-0.1688-0.4311-0.2306-0.4311-0.07105 0 0.1817 0.4607 0.887 0.5794 0.887 0.05759 0 0.1047 0.05717 0.1047 0.127 0 0.1899 1.14 1.469 1.309 1.469 0.1886 0 0.3027 0.5837 0.1502 0.7682-0.06612 0.07996-0.07691 0.2281-0.02491 0.342 0.05046 0.1105 0.09545 0.2582 0.09998 0.3281 0.01243 0.1918 0.551 0.7225 0.7459 0.735 0.1174 0.007533 0.1264 0.029 0.02851 0.06848-0.07839 0.03163-0.1425 0.1247-0.1425 0.2067 0 0.216-0.7898-0.2007-1.097-0.5788-0.1945-0.2394-0.3516-0.3021-0.8014-0.3203-0.3077-0.01244-0.6295-0.06589-0.7151-0.1188-0.08557-0.05288-0.3021-0.1132-0.4812-0.1341-0.252-0.02934-0.3257 0.00867-0.3257 0.168 0 0.2558 0.46 0.7018 0.724 0.7018 0.1079 0 0.3104 0.07483 0.45 0.1663 0.1445 0.09468 0.4618 0.1547 0.7368 0.1393 0.4115-0.023 0.4737 0.00207 0.4206 0.1694-0.04085 0.1287 0.03788 0.2621 0.2284 0.3869 0.1599 0.1048 0.2907 0.2371 0.2907 0.294s-0.1154 0.02879-0.2565-0.06256c-0.1411-0.09135-0.5568-0.1932-0.9239-0.2263s-0.8288-0.1539-1.026-0.2684c-0.5626-0.3263-0.7395-0.2278-0.6716 0.374 0.04509 0.4001 0.01761 0.5206-0.1318 0.5779-0.3553 0.1363-0.4255 0.4519-0.1722 0.7739 0.1585 0.2015 0.2244 0.4339 0.2056 0.7248-0.05223 0.8069 0.01243 1.17 0.2511 1.408 0.3649 0.3649 0.3303 1.303-0.06149 1.666-0.1603 0.1486-0.2914 0.3737-0.2914 0.5001 0 0.2236-0.009196 0.2244-0.3374 0.03054-0.3218-0.1901-0.3478-0.1899-0.5619 0.003786-0.2176 0.1969-0.2301 0.1923-0.4085-0.1529-0.1012-0.1958-0.2275-0.3292-0.2805-0.2964-0.05302 0.03277-0.184-0.2082-0.2911-0.5355-0.1932-0.5908-0.5284-1.171-0.8122-1.406-0.2685-0.2225-0.04005-0.5653 0.6116-0.9179 0.8937-0.4835 0.9409-0.594 0.5344-1.25-0.3905-0.6304-0.8538-0.9387-1.428-0.9504-0.2247-0.004584-0.4392-0.03901-0.4767-0.07649-0.1088-0.1088 0.03987-0.3879 0.2066-0.3879 0.2595 0 0.3129-0.2353 0.09146-0.403-0.1954-0.148-0.1962-0.1601-0.01142-0.1634 0.1507-0.002738 0.1995-0.0997 0.1995-0.396 0-0.2158-0.05683-0.4275-0.1263-0.4704-0.07828-0.04838-0.09944-0.246-0.05566-0.5198 0.04294-0.2685 0.02539-0.4417-0.04472-0.4417-0.06345 0-0.1154-0.1283-0.1154-0.285 0-0.1568-0.05452-0.285-0.1212-0.285-0.1457 0-0.09612-0.4799 0.06118-0.5926 0.06477-0.04638-0.006482-0.2073-0.171-0.3862l-0.2821-0.3067 0.3135 0.05681c0.2501 0.04532 0.3135 0.01387 0.3135-0.1554 0-0.1167 0.07598-0.2122 0.1688-0.2122 0.1354 0 0.1544-0.1053 0.09609-0.5309-0.05316-0.3878-0.03721-0.5089 0.05919-0.4493 0.1457 0.09007 0.1852-0.1827 0.04643-0.3215-0.04703-0.04703-0.08551-0.1308-0.08551-0.1861 0-0.05532-0.2437-0.2551-0.5416-0.444-0.56-0.3551-0.6886-0.5735-0.342-0.5806 0.154-0.003164 0.1231-0.06661-0.1359-0.2782-0.1845-0.1508-0.3791-0.2471-0.4326-0.2141-0.17 0.1051-0.4291-0.2047-0.431-0.5151-0.002136-0.3688-0.15-0.6171-0.3882-0.652-0.2065-0.0303-0.2285 0.1533-0.06895 0.573 0.09657 0.254 0.08096 0.2925-0.1186 0.2925-0.4078 0-1.169-0.4711-1.681-1.041-0.4831-0.5374-0.9342-0.7269-0.9342-0.3925 0 0.1869 0.303 0.5212 0.4724 0.5212 0.1428 0 0.3095 0.1753 0.6507 0.6842 0.2313 0.345 1.514 1.327 1.317 1.008-0.04311-0.06976 0.01418-0.1002 0.1401-0.07444 0.1258 0.02574 0.1995 0.1229 0.18 0.2372-0.02283 0.1336 0.0213 0.1727 0.1425 0.1262 0.1079-0.04142 0.1756-0.004232 0.1756 0.09651 0 0.09014 0.2309 0.3297 0.5131 0.5324 0.2953 0.2121 0.5131 0.4594 0.5131 0.5827 0 0.1178 0.05131 0.2459 0.114 0.2847 0.1703 0.1052 0.1376 0.247-0.05701 0.247-0.09406 0-0.171-0.04328-0.171-0.09618 0-0.0529-0.3976-0.2813-0.8836-0.5076-0.486-0.2263-0.934-0.4413-0.9955-0.4779-0.06155-0.03661 0.002583 0.07901 0.1425 0.2569 0.3158 0.4015 0.3337 0.7488 0.03859 0.7488-0.1187 0-0.2466-0.08021-0.2842-0.1783-0.03763-0.09804-0.1147-0.1496-0.1713-0.1147-0.05659 0.03497-0.1336-0.01634-0.171-0.114-0.03749-0.09768-0.114-0.1493-0.1701-0.1146-0.05605 0.03464-0.1653-0.01341-0.2428-0.1068-0.08553-0.1031-0.09434-0.1698-0.02241-0.1698 0.06516 0 0.1444 0.06413 0.176 0.1425 0.03319 0.08227 0.0613 0.08974 0.06651 0.01767 0.004941-0.06866-0.1024-0.2226-0.2386-0.342-0.1362-0.1195-0.2123-0.1566-0.1692-0.08256 0.04316 0.07405 0.03071 0.1642-0.02767 0.2002-0.1617 0.09993-0.6169-0.7153-0.6064-1.086 0.00511-0.1799-0.02573-0.3169-0.06852-0.3046-0.0428 0.01233-0.437-0.3601-0.8759-0.8275-0.439-0.4675-0.9018-0.9533-1.029-1.08-0.3279-0.3268-0.8188-1.146-0.618-1.031 0.1332 0.07615 0.1373 0.06487 0.02178-0.05963-0.07839-0.08444-0.1385-0.2587-0.1335-0.3873 0.004961-0.1286 0.03489-0.1696 0.06652-0.09121 0.03163 0.07839 0.1082 0.1425 0.1702 0.1425 0.1381 0 0.4384-0.2897 0.4384-0.4229 0-0.05344 0.1473-0.1527 0.3273-0.2207 0.2466-0.0931 0.4152-0.08657 0.6841 0.02651 0.4011 0.1687 0.4442 0.3316 0.1681 0.6366-0.1787 0.1975-0.1711 0.2085 0.1433 0.2085 0.1826 0 0.4957 0.04696 0.6958 0.1044 0.2674 0.0767 0.3971 0.06428 0.4893-0.04686 0.1505-0.1813-0.01343-0.3168-0.266-0.2199-0.1303 0.04998-0.1577 0.00783-0.111-0.1707 0.04737-0.1812 0.008703-0.237-0.164-0.237-0.2659 0-0.8547-0.4326-0.7716-0.567 0.03151-0.051-0.07061-0.1248-0.2269-0.1641-0.1563-0.03924-0.2843-0.1165-0.2843-0.1717 0-0.05518-0.2181-0.213-0.4846-0.3508-0.2665-0.1377-0.6318-0.3995-0.8116-0.5816-0.1799-0.1821-0.3753-0.3311-0.4343-0.3311-0.05896 0-0.0755-0.0513-0.03675-0.114 0.06448-0.1043-0.005438-0.127-0.5132-0.1663-0.2798-0.02164-0.4559-0.1756-0.4559-0.3983 0-0.2169-0.2934-0.4045-0.3894-0.2491-0.06858 0.111-1.412 0.03976-1.638-0.08683-0.2974-0.1664 1.582-0.2294 2.056-0.06895 0.2352 0.07959 0.4276 0.1018 0.4276 0.0494 0-0.127-0.7602-0.3326-1.232-0.3334-0.2224-3.72e-4 -0.3484-0.04745-0.3068-0.1146 0.03875-0.06271-0.03821-0.114-0.171-0.114-0.1328 0-0.2134 0.04547-0.179 0.1011 0.03435 0.05558-0.0524 0.1318-0.1928 0.1695-0.3798 0.1018-0.5625 0.08573-0.4833-0.0425 0.06972-0.1128-0.08364-0.1609-0.3823-0.1198-0.08483 0.01166-0.2338-0.009322-0.331-0.04663-0.1521-0.05836-0.1465-0.09079 0.04025-0.2321 0.2103-0.1592 0.2094-0.1644-0.03137-0.1679-0.1366-0.001993-0.3305 0.07852-0.4309 0.1789-0.1291 0.1291-0.2734 0.1581-0.4927 0.09911-0.321-0.08634-0.8555-0.1288-2.564-0.2039-0.5498-0.02414-1.033-0.07718-1.074-0.1178-0.04067-0.04067-0.2163-0.07394-0.3903-0.07394-0.6131 0-0.4362-0.2093 0.2683-0.3175l0.7131-0.1095-0.6841-0.03359c-0.3762-0.01848-1.197-0.03784-1.824-0.04303-0.7217-0.005975-1.238-0.06497-1.406-0.1607-0.146-0.08322-0.3512-0.1146-0.4561-0.06985-0.1048 0.04479-0.3923 0.1035-0.6387 0.1305-0.2465 0.02698-0.58 0.1166-0.7411 0.1991-0.1611 0.0825-0.7511 0.2104-1.311 0.2843-0.5599 0.07385-1.195 0.2081-1.411 0.2983-0.216 0.09024-0.5424 0.1641-0.7254 0.1641-0.183 0-0.5487 0.1153-0.8127 0.2561-0.264 0.1409-0.6083 0.2848-0.7651 0.3199-0.1568 0.03507-0.2713 0.1279-0.2544 0.2063 0.01754 0.08159-0.397 0.3373-0.9691 0.5978-0.5499 0.2504-1.089 0.504-1.198 0.5637-0.1089 0.05966-0.2773 0.1085-0.3741 0.1085-0.09688 0-0.2062 0.07838-0.243 0.1742-0.09924 0.2586-0.4467 0.4068-0.7182 0.3064-0.2069-0.07654-0.1473-0.134 0.4427-0.427 0.6879-0.3416 0.8992-0.5425 0.4457-0.424-0.1684 0.04406-0.2202 0.02274-0.1643-0.06768 0.1048-0.1696 0.06416-0.1663-0.4138 0.03339l-0.3958 0.1654 0.1823-0.3897c0.1003-0.2143 0.2235-0.3914 0.2739-0.3934 0.05034-0.002042 0.2734-0.1273 0.4956-0.2783 0.3257-0.2213 0.3636-0.2823 0.1953-0.3148-0.1383-0.02664-0.0621-0.08518 0.2262-0.1737 0.3676-0.1128 0.4252-0.1082 0.3722 0.0297-0.0439 0.1144 0.02153 0.1632 0.2189 0.1632 0.1641 0 0.2815-0.06599 0.2815-0.1583 0-0.08978 0.1678-0.1898 0.3875-0.231 0.2131-0.03998 0.5081-0.1666 0.6556-0.2814 0.1475-0.1148 0.9094-0.3696 1.693-0.5662 6.926-1.737 14.47-0.9065 21.04 2.315 3.483 1.71 5.668 3.274 8.444 6.045 2.534 2.53 4.22 4.825 5.76 7.842 0.3761 0.7368 0.6649 1.34 0.6417 1.34-0.02313 0-0.2103-0.2342-0.4159-0.5205-0.2076-0.289-0.4382-0.4958-0.5185-0.465-0.07959 0.03054-0.2126-0.004594-0.2956-0.07808-0.2107-0.1866 0.1043 0.2471 0.4249 0.5849 0.4276 0.4506 1.264 1.757 1.62 2.531 0.7553 1.641 1.532 4.819 1.852 7.582 0.2013 1.734 0.1715 5.363-0.05888 7.172-0.3303 2.593-0.8798 4.827-1.798 7.308-0.4247 1.148-0.9872 2.388-1 2.205zm-31.99-6.936c-0.19-0.08165-0.1651-0.09932 0.1492-0.106 0.2242-0.004764 0.3487 0.03826 0.3068 0.106-0.08215 0.1329-0.1468 0.1329-0.4561 0zm-2.473-0.1211c-0.02477-0.07428-0.2481-0.1741-0.4964-0.2219-0.3372-0.06488-0.3748-0.09014-0.1485-0.09994 0.2544-0.01101 0.2928-0.05419 0.2401-0.2696-0.03455-0.1411-0.1195-0.3305-0.1889-0.4209-0.1002-0.1307-0.09173-0.1437 0.0413-0.06344 0.09205 0.05554 0.3892 0.114 0.6603 0.13 0.4482 0.0264 1.494 0.5414 1.506 0.7412 0.002299 0.0403-0.2652 0.05804-0.5944 0.03943-0.4048-0.02288-0.6594 0.02026-0.7863 0.1332-0.1354 0.1205-0.2003 0.1294-0.2327 0.03201zm-1.289-0.3331c-0.03939-0.06373 0.008367-0.1159 0.1061-0.1159 0.2003 0 0.2298 0.06841 0.07161 0.1662-0.05838 0.03608-0.1384 0.01345-0.1778-0.05028zm-1.339-1.273c0.01874-0.114-0.0728-0.2117-0.237-0.2529-0.1471-0.03693-0.3265-0.1966-0.3987-0.3549-0.07319-0.1606-0.2268-0.2878-0.3476-0.2878-0.1191 0-0.2776-0.07366-0.3524-0.1637-0.07473-0.09003-0.2862-0.1967-0.47-0.2371-0.1838-0.04036-0.3342-0.1428-0.3342-0.2277 0-0.1985-0.4254-0.3354-0.6041-0.1944-0.07538 0.05947-0.28 0.1339-0.4547 0.1654-0.3099 0.05589-0.3127 0.05181-0.114-0.1686 0.1741-0.1932 0.3068-0.2177 0.9162-0.1691 0.4332 0.03452 0.8306 0.1402 1.014 0.2694 0.1656 0.117 0.3812 0.264 0.4791 0.3267 0.09794 0.06271 0.4289 0.3064 0.7354 0.5416 0.3065 0.2351 0.6296 0.4276 0.7181 0.4276 0.08843 0 0.1608 0.05131 0.1608 0.114 0 0.06271 0.07068 0.114 0.1571 0.114 0.08638 0 0.216 0.07097 0.2879 0.1577 0.1013 0.1221 0.08947 0.1736-0.05238 0.228-0.1008 0.03868-0.2175 0.06357-0.2594 0.05531-0.2885-0.0779-0.7482-0.01578-0.8438-0.3436zm1.922-9.561c0.02615-0.6263 0.04213-0.6973 0.143-0.6349 0.1953 0.1207 0.209 0.4907 0.02713 0.7319-0.1829 0.2425-0.1843 0.2417-0.1701-0.09695zm6.314-3.74c0-0.05072 0.07441-0.1918 0.1654-0.3135 0.1581-0.2116 0.1623-0.2092 0.09604 0.05305-0.05251 0.2079-0.03307 0.252 0.08031 0.1819 0.09909-0.06125 0.1221-0.04802 0.06824 0.03918-0.0923 0.1494-0.4099 0.1799-0.4099 0.03941zm-0.7672-0.2047c0.03789-0.03789 0.1362-0.04193 0.2185-9e-3 0.09095 0.0364 0.06394 0.06341-0.06889 0.06889-0.1202 0.004949-0.1875-0.02199-0.1497-0.05989zm3.572-0.4545c-0.09496-0.2475 0.04509-0.4582 0.1717-0.2584 0.1284 0.2027 0.1282 0.4397-3.1e-4 0.4397-0.056 0-0.1331-0.08159-0.1714-0.1813zm-0.4486-0.2364c-0.03934-0.03934-0.4061-0.06233-0.815-0.05108-0.4491 0.01235-0.7435-0.02623-0.7435-0.09741 0-0.06483 0.05131-0.1179 0.114-0.1179s0.114-0.07058 0.114-0.1568c0-0.2416 0.5404-1.408 0.6974-1.505 0.09804-0.0606 0.1166-0.02671 0.06259 0.1141-0.144 0.3753-0.2223 0.8065-0.1309 0.7217 0.05009-0.04649 0.165-0.02314 0.2554 0.05189 0.09041 0.07503 0.3118 0.1252 0.4921 0.1114 0.26-0.0198 0.3131 0.0131 0.2571 0.1591-0.03886 0.1013-0.01076 0.2211 0.06242 0.2664 0.09525 0.05887 0.07237 0.1522-0.08047 0.3285-0.1174 0.1354-0.2457 0.214-0.2851 0.1747zm-3.147-0.9985c-0.1104-0.1331-0.0922-0.151 0.1018-0.1003 0.2852 0.07459 0.4258 0.2623 0.1965 0.2623-0.09008 0-0.2243-0.07292-0.2983-0.1621zm23.71-2.56c-0.3025-0.3546-0.4002-0.5842-0.2486-0.5842 0.1354 0 0.6132 0.6762 0.5698 0.8064-0.02034 0.06101-0.1649-0.03896-0.3212-0.2222zm1.255 0.03539c0-0.03548 0.0554-0.168 0.1231-0.2945 0.1186-0.2215 0.1289-0.2223 0.2814-0.021 0.2277 0.3005 0.2028 0.38-0.1195 0.38-0.1568 0-0.285-0.02902-0.285-0.0645zm-1.953-1.047c-0.1418-0.1808-0.1378-0.1849 0.04304-0.04305 0.1899 0.1489 0.2503 0.2426 0.1565 0.2426-0.02368 0-0.1135-0.08978-0.1995-0.1995zm2.893-0.6741c-0.153-0.06173-0.1998-0.3806-0.05592-0.3806 0.04762 0 0.1507 0.1026 0.229 0.228 0.1414 0.2265 0.1002 0.2628-0.1731 0.1525zm-9.708-0.4848c-0.09015-0.05709-0.1278-0.1824-0.08681-0.2892 0.04241-0.1105 0.02571-0.1596-0.0404-0.1188-0.06199 0.03832-0.1127-0.008717-0.1127-0.1045 0-0.108-0.06499-0.1492-0.171-0.1085-0.09406 0.0361-0.1764 0.02166-0.1829-0.03208-0.07404-0.6081-0.04413-0.9507 0.08744-1.001 0.2428-0.09316 0.4945 0.05376 0.4945 0.2886 0 0.1187 0.03943 0.2158 0.08761 0.2158 0.04818 0 0.1693 0.1347 0.2692 0.2993 0.16 0.2637 0.1622 0.3382 0.01806 0.6271-0.08995 0.1803-0.1726 0.327-0.1837 0.3261-0.01108-9.6e-4 -0.09176-0.04709-0.1793-0.1025zm1.524-0.494c0.04059-0.2667 0.0323-0.4298-0.01844-0.3625-0.05074 0.06728-0.182 0.1555-0.2918 0.1959-0.1463 0.05397-0.1995 0.01524-0.1995-0.1452 0-0.1203-0.08355-0.2655-0.1857-0.3227-0.1211-0.06776-0.1426-0.1305-0.06197-0.1803 0.06802-0.04204 0.09525-0.1505 0.06052-0.241-0.0877-0.2285-0.704-0.5244-0.7929-0.3806-0.03916 0.06336-0.1428 0.009137-0.2355-0.1233-0.09106-0.13-0.2396-0.2364-0.3301-0.2364-0.09051 0-0.1646-0.05434-0.1646-0.1207 0-0.06641-0.04013-0.09593-0.0892-0.06561-0.1408 0.087-0.6268-0.6959-0.5296-0.8532 0.05942-0.09614 0.117-0.05652 0.185 0.1272 0.07534 0.2037 0.1303 0.2353 0.232 0.1335 0.2031-0.2031 0.294-0.1642 0.4868 0.2087 0.09729 0.1881 0.2684 0.342 0.3802 0.342 0.1118 0 0.3029 0.07533 0.4246 0.1674 0.1217 0.09207 0.2904 0.169 0.3747 0.171 0.08438 0.001993 0.292 0.1023 0.4613 0.2229 0.1694 0.1206 0.4046 0.2104 0.5228 0.1995 0.142-0.01302 0.2403 0.07704 0.2899 0.2653 0.04125 0.1568 0.1346 0.2722 0.2074 0.2565 0.2328-0.05012 0.1426 0.1812-0.2123 0.5443-0.1896 0.1939-0.3181 0.3956-0.2857 0.448 0.03244 0.05249-0.02221 0.1266-0.1214 0.1647-0.1536 0.05895-0.1695-0.002787-0.1066-0.4156zm-35.19-0.1591c-0.02843-0.05373 0.006763-0.3799 0.07824-0.7248 0.1055-0.5093 0.1459-0.5797 0.2148-0.3749 0.04717 0.1402 0.02907 0.3564-0.04075 0.4869-0.06908 0.1291-0.101 0.2746-0.07085 0.3233 0.03011 0.04874 0.01325 0.1558-0.03749 0.2379-0.05072 0.08209-0.1155 0.1053-0.1439 0.05156zm22.74-0.34c-0.08054-0.0862-0.2935-0.1567-0.4733-0.1567-0.4274 0-1.596-1.078-1.391-1.283 0.1876-0.1876 0.1614-0.3494-0.04379-0.2707-0.1114 0.04275-0.2164-0.02511-0.2899-0.1873-0.06341-0.1399-0.1893-0.3826-0.2797-0.5394-0.236-0.409-0.2118-0.6841 0.06022-0.6841 0.19 0 0.228-0.07601 0.228-0.4561 0-0.3577-0.04304-0.4564-0.1995-0.4578-0.1097-9.63e-4 -0.2765-0.05642-0.3705-0.1232-0.1317-0.09355-0.09892-0.1058 0.1425-0.05309 0.1724 0.03762 0.3135 0.03058 0.3135-0.01565 0-0.1542-0.6216-0.6209-0.6627-0.4976-0.02223 0.06667-0.09089 0.1212-0.1526 0.1212-0.06171 0-0.08055-0.0997-0.04188-0.2215 0.06723-0.2119-0.2063-0.8552-0.5463-1.285-0.2139-0.2703-0.6741-0.4267-1.098-0.3731-0.1961 0.02481-0.3282-8.01e-4 -0.2935-0.05693 0.03469-0.05613-0.0278-0.1593-0.1389-0.2292-0.1682-0.1059-0.1401-0.1199 0.1686-0.08376 0.2412 0.02824 0.3705-0.005698 0.3705-0.09722 0-0.07983-0.08969-0.1171-0.2075-0.08634-0.1141 0.02985-0.2718-0.02327-0.3505-0.118-0.1219-0.1469-0.07464-0.1907 0.3215-0.2974 0.2744-0.07388 0.4645-0.1933 0.4645-0.2917 0-0.09165-0.06414-0.168-0.1425-0.1697-0.07839-0.001673-0.001428-0.09052 0.171-0.1974 0.1725-0.1069 0.3136-0.2368 0.3136-0.2887 0-0.05188 0.0513-0.06263 0.114-0.02387 0.06271 0.03875 0.114 0.01515 0.114-0.05245 0-0.07418 0.113-0.09455 0.285-0.05138 0.1796 0.04507 0.285 0.0233 0.285-0.05885 0-0.09506 0.06178-0.09732 0.228-0.008344 0.182 0.0974 0.228 0.08671 0.228-0.053 0-0.09627 0.05131-0.175 0.114-0.175 0.06271 0 0.114-0.07147 0.114-0.1588 0-0.08736 0.07436-0.1874 0.1652-0.2222 0.1108-0.04254 0.1442-0.008609 0.1013 0.1031-0.04493 0.1171-0.009589 0.1457 0.1192 0.09627 0.1007-0.03864 0.1604-0.1069 0.1327-0.1517-0.02768-0.04479 0.1009-0.05924 0.2857-0.03212 0.4104 0.06023 0.4207 0.1109 0.05099 0.2515-0.1568 0.0596-0.285 0.1672-0.285 0.2392 0 0.09798 0.03929 0.09819 0.1566 8.59e-4 0.0861-0.07147 0.24-0.09792 0.342-0.05877 0.1147 0.04402 0.1864 0.01216 0.188-0.08354 0.001437-0.0871 0.09911-0.03014 0.2235 0.1303 0.1938 0.25 0.2135 0.2561 0.1606 0.04904-0.06917-0.2704 0.2269-0.5977 0.3542-0.3916 0.04234 0.0685 0.008412 0.2089-0.07536 0.3119-0.1315 0.1617-0.1258 0.1774 0.04139 0.1148 0.147-0.05506 0.177-0.02586 0.1243 0.1212-0.03815 0.1065-0.02904 0.1573 0.02025 0.1128 0.04929-0.04452 0.2002 0.08375 0.3354 0.285 0.1601 0.2384 0.3573 0.3789 0.5657 0.403 0.299 0.03463 0.3062 0.04734 0.1103 0.1941-0.195 0.1461-0.184 0.1624 0.1565 0.2328 0.2014 0.04167 0.3598 0.1082 0.3522 0.1479-0.007681 0.03968 0.04399 0.2123 0.1148 0.3835 0.08661 0.2094 0.186 0.2894 0.3034 0.2443 0.09608-0.03687 0.1747-0.01023 0.1747 0.05919 0 0.06942-0.09633 0.1262-0.2141 0.1262-0.1177 0-0.2713 0.06891-0.3411 0.1531-0.0987 0.1189-0.06243 0.1826 0.1624 0.285 0.1592 0.07255 0.3769 0.1335 0.4837 0.1355 0.234 0.004372 0.661 0.3087 0.5662 0.4035-0.03708 0.03709-0.1711 0.01196-0.2977-0.05583-0.1267-0.06779-0.3491-0.1181-0.4943-0.1119-0.2613 0.01125-0.2611 0.01232 0.02101 0.1027 0.1568 0.05021 0.2337 0.09719 0.171 0.1044-0.06271 0.007213-0.03706 0.06699 0.05701 0.1329 0.1325 0.09276 0.111 0.1028-0.09529 0.04448-0.2418-0.06834-0.2546-0.0533-0.1385 0.1636 0.1522 0.2844 0.1972 0.2917 0.4211 0.0678 0.09406-0.09406 0.2673-0.171 0.385-0.171 0.1883 0 0.1996 0.04108 0.09449 0.3427-0.1559 0.4472-0.6335 0.8234-0.927 0.7302-0.1694-0.05377-0.201-0.03333-0.1288 0.08345 0.1321 0.2138 0.05763 0.7875-0.1261 0.9713-0.0836 0.0836-0.2328 0.121-0.3315 0.08312-0.1174-0.04506-0.1795-0.005519-0.1795 0.1143 0 0.1008-0.05131 0.1832-0.114 0.1832-0.06271 0-0.114 0.07696-0.114 0.171 0 0.09407-0.05759 0.171-0.128 0.171-0.09414 0-0.09441 0.04046-9.91e-4 0.153 0.06983 0.08416 0.09322 0.1868 0.05196 0.228-0.04126 0.04126-0.01812 0.07502 0.05145 0.07502 0.07363 0 0.1004 0.1072 0.06409 0.2565-0.07166 0.2947-0.08676 0.5487-0.04239 0.7126 0.01696 0.06271 0.02478 0.2753 0.01735 0.4724-0.01514 0.4018-0.2249 0.5483-0.4462 0.3115zm-6.193-0.7074c-0.1496-0.1147-0.365-0.2427-0.4787-0.2842-0.1137-0.04159-0.1746-0.1276-0.1353-0.1912 0.0393-0.0636-0.00876-0.1464-0.1068-0.184-0.09804-0.03762-0.1783-0.1373-0.1783-0.2216 0-0.2374-0.3586-0.3917-0.6045-0.2601-0.2928 0.1567-0.6047 0.03109-0.4338-0.1748 0.07792-0.09388 0.3046-0.141 0.5829-0.1212 0.382 0.02721 0.4554-0.002296 0.4554-0.1831 0-0.1185 0.1026-0.2704 0.228-0.3375 0.3508-0.1878 0.2783-0.6918-0.1777-1.235-0.08801-0.1048-0.2363-0.2931-0.3296-0.4185-0.09326-0.1254-0.1712-0.1671-0.1732-0.09268-0.00245 0.09174-0.1414 0.1143-0.4312 0.06992-0.7007-0.1072-1.391-0.5982-0.8551-0.608 0.1837-0.003337 0.1846-0.01495 0.01198-0.1463-0.2158-0.1642-0.115-0.3577 0.3554-0.6819 0.4001-0.2758 0.7106-0.2538 0.3747 0.02653-0.1406 0.1173-0.2703 0.308-0.2884 0.4238-0.01801 0.1158-0.07279 0.2747-0.1217 0.3531-0.05686 0.0911-0.02482 0.1425 0.08881 0.1425 0.1017 0 0.1777-0.09751 0.1777-0.228 0-0.1254 0.05434-0.228 0.1207-0.228 0.06641 0 0.08903-0.0513 0.05028-0.114-0.03876-0.06271 0.009514-0.114 0.1073-0.114 0.09776 0 0.1778-0.0513 0.1778-0.114 0-0.06271 0.1026-0.114 0.228-0.114 0.2561 0 0.3119 0.3266 0.09321 0.5453-0.1038 0.1038-0.04972 0.1104 0.2346 0.0289 0.4663-0.1337 0.6597-0.05985 0.7463 0.2852 0.0456 0.1817 0.1252 0.251 0.2383 0.2076 0.1079-0.0414 0.1699 0.002998 0.1699 0.1217 0 0.1028 0.1154 0.2333 0.2565 0.29 0.1411 0.05671 0.1906 0.1064 0.11 0.1103-0.1025 0.005055-0.1155 0.06721-0.04331 0.2068 0.05677 0.1097 0.08954 0.2841 0.07281 0.3875-0.01854 0.1146 0.1208 0.2693 0.3568 0.3965 0.213 0.1147 0.3873 0.24 0.3873 0.2783 0 0.03838 0.1411 0.1361 0.3135 0.2171 0.1808 0.08493 0.2532 0.1691 0.171 0.1988-0.07838 0.02836-0.1425 0.1023-0.1425 0.1642 0 0.06196-0.07709 0.1897-0.1713 0.284-0.1524 0.1524-0.2039 0.1326-0.4662-0.1792-0.3779-0.4491-0.6418-0.4663-0.5653-0.03693 0.03074 0.1725 0.1497 0.3905 0.2643 0.4846 0.2573 0.2111 0.3816 0.5169 0.2983 0.7339-0.07006 0.1826-0.3326 0.1244-0.6433-0.1425-0.3468-0.2979-0.3685-0.03497-0.02667 0.3219 0.3741 0.3905 0.1604 0.4849-0.2993 0.1322zm-2.951-0.1267c0-0.06641 0.05131-0.1207 0.114-0.1207 0.0627 0 0.114 0.02262 0.114 0.05028 0 0.02765-0.05131 0.08199-0.114 0.1207-0.06271 0.03875-0.114 0.01613-0.114-0.05028zm-0.9407-1.016c-0.03141-0.1201 0.04342-0.3772 0.1663-0.5712l0.2234-0.3528 0.2755 0.3274c0.1515 0.1801 0.2755 0.4098 0.2755 0.5105 0 0.1007 0.05985 0.1831 0.133 0.1831 0.07315 0 0.09913 0.03389 0.0577 0.07532-0.04142 0.04142-0.1739-0.01391-0.2944-0.123-0.2028-0.1835-0.2399-0.1846-0.4995-0.01455-0.2633 0.1725-0.2839 0.1704-0.3375-0.03466zm14.35-1.202c-0.1115-0.1374-0.1433-0.2541-0.0754-0.2768 0.06458-0.02153 0.1174-0.1029 0.1174-0.1808 0-0.0779 0.1172-0.2517 0.2604-0.3863 0.207-0.1945 0.3297-0.2261 0.5986-0.1542 0.4065 0.1087 0.4639 0.316 0.2375 0.8578-0.1502 0.3593-0.2155 0.4053-0.5579 0.3925-0.2423-0.009111-0.4602-0.1037-0.5806-0.2522zm8.292 0.115c-0.4295-0.2386-0.6107-0.4341-0.6107-0.6585 0-0.2032 0.01846-0.2001 0.2599 0.04246 0.3204 0.3219 0.7039 0.7782 0.6414 0.763-0.0254-0.006148-0.1562-0.07228-0.2905-0.147zm-20.09-0.2468c0.02166-0.1118 0.1084-0.2262 0.1928-0.2543 0.09812-0.03268 0.1392 0.02215 0.114 0.1521-0.02166 0.1118-0.1084 0.2262-0.1928 0.2543-0.09812 0.03268-0.1392-0.02214-0.114-0.1521zm11.31-0.3311c0-0.09131 0.0436-0.1391 0.09688-0.1061 0.05328 0.03292 0.06735 0.1076 0.03127 0.166-0.09219 0.1492-0.1282 0.1324-0.1282-0.05987zm9 0.09712c0.03789-0.03789 0.1362-0.04193 0.2185-9e-3 0.09096 0.03639 0.06393 0.06341-0.06888 0.06888-0.1202 0.004949-0.1875-0.02199-0.1496-0.05988zm-15.77-0.5012c0-0.1429 0.121-0.1429 0.342 0 0.1383 0.08937 0.1219 0.1109-0.08551 0.1123-0.1411 9.64e-4 -0.2565-0.04956-0.2565-0.1123zm-8.046-0.6968c-0.04309-0.06972-0.007642-0.1715 0.07879-0.2263 0.244-0.1546 0.3281-0.1225 0.3281 0.125 0 0.2434-0.2766 0.3122-0.4069 0.1013zm-0.9291-0.6745c-0.04336-0.1658-0.1217-0.2118-0.2769-0.1625-0.3597 0.1142-0.9105-0.05708-0.8752-0.2721 0.0171-0.1041-0.002724-0.243-0.04405-0.3087-0.04134-0.0657-0.0316-0.1899 0.02162-0.276 0.08024-0.1298 0.1488-0.1225 0.4014 0.04306 0.3827 0.2507 0.5452 0.1201 0.1994-0.1602-0.3155-0.2558-0.3236-0.3425-0.03209-0.3425 0.1431 0 0.2028-0.05656 0.1646-0.156-0.06432-0.1676 0.2634-0.297 0.7511-0.2967 0.2257 1.47e-4 0.2494 0.02321 0.114 0.1107-0.132 0.08528-0.1357 0.1109-0.01631 0.1123 0.09042 0.001023 0.1274 0.07283 0.0891 0.1728-0.04139 0.1079 0.001367 0.171 0.1158 0.171 0.1483 0 0.1555 0.03119 0.03947 0.171-0.2158 0.2601 0.007107 0.2041 0.3062-0.07688 0.3341-0.3139 0.3489-0.07774 0.02373 0.3789-0.1477 0.2074-0.2196 0.4447-0.1868 0.6162 0.04468 0.2337 0.008617 0.2789-0.2226 0.2789-0.1549 0-0.2451 0.05-0.2055 0.114 0.03875 0.06271-0.01432 0.114-0.118 0.114-0.1036 0-0.2156-0.1041-0.2489-0.2312zm-0.6308 0.0417c0.07839-0.03163 0.2067-0.03163 0.285 0 0.07838 0.03163 0.01426 0.05751-0.1425 0.05751-0.1568 0-0.2209-0.02588-0.1425-0.05751zm5.387-0.3129c0-0.1046 0.07986-0.1395 0.2298-0.1003 0.3505 0.09164 0.3906 0.2606 0.06195 0.2606-0.1747 0-0.2918-0.06433-0.2918-0.1603zm-3.11-0.3711c-0.03854-0.2016-0.01059-0.2635 0.09984-0.2211 0.08435 0.03237 0.2189-0.03416 0.299-0.1478 0.1039-0.1474 0.2111-0.181 0.3737-0.1173 0.1931 0.07573 0.1974 0.09067 0.0285 0.09746-0.1187 0.004766-0.1995 0.09761-0.1995 0.2293 0 0.4294-0.5234 0.5681-0.6015 0.1594zm0.8295 0.07797c0-0.2126 0.5494-0.4806 0.8135-0.3968 0.2526 0.08018 0.2522 0.08204-0.05413 0.2425-0.1698 0.08896-0.3588 0.1308-0.42 0.09295-0.06123-0.03784-0.1113-0.01446-0.1113 0.05195 0 0.06641-0.0513 0.1207-0.114 0.1207-0.06271 0-0.114-0.05012-0.114-0.1114zm1.995-0.3365c-0.6772-0.1634-1.066-0.489-0.7206-0.604 0.07399-0.02466 0.1062-0.1187 0.07152-0.209-0.09775-0.2547-0.09951-0.3377-0.006521-0.3067 0.04704 0.01568 0.07269 0.06698 0.05701 0.114-0.01568 0.04703 0.0212 0.08551 0.08193 0.08551 0.06075 0 0.08242 0.07303 0.04817 0.1623-0.07788 0.2029 0.2873 0.4078 0.727 0.4078 0.415 0 0.5165 0.09641 0.3142 0.2986-0.0866 0.0866-0.1739 0.1522-0.1941 0.1458-0.02016-0.006421-0.1906-0.04882-0.3787-0.09422zm-1.311-0.5782c0-0.06271 0.07999-0.114 0.1777-0.114 0.09777 0 0.146 0.05131 0.1073 0.114-0.03875 0.0627-0.1187 0.114-0.1777 0.114-0.05902 0-0.1073-0.05131-0.1073-0.114zm1.733-0.1125c-0.4279-0.1013-0.6105-0.2296-0.3268-0.2296 0.1045 0 0.1916-0.08978 0.1935-0.1995 0.00331-0.19 0.009009-0.19 0.1197 0 0.1418 0.2435 0.3514 0.2665 0.2601 0.0285-0.03835-0.09994-0.001312-0.1717 0.08909-0.1728 0.1204-0.001358 0.1167-0.02873-0.01631-0.1232-0.1331-0.09454-0.1051-0.1072 0.1264-0.05715 0.2671 0.0578 0.2919 0.03553 0.2432-0.2188-0.03151-0.1648-9.15e-4 -0.2832 0.07317-0.2832 0.07001 0 0.1333 0.08979 0.1405 0.1995 0.01168 0.1761 0.01912 0.1773 0.06329 0.01078 0.02754-0.1038 0.1755-0.2202 0.3288-0.2587 0.1533-0.03848 0.2788-0.1305 0.2788-0.2046 0-0.1023-0.03286-0.1018-0.1368 0.002176-0.1453 0.1453-0.5748 0.1853-0.6953 0.06482-0.1588-0.1588 0.1514-0.4776 0.4345-0.4465 0.159 0.01746 0.3128-0.006584 0.3417-0.05341 0.04581-0.07412 0.8627-0.07174 0.9395 0.002738 0.03404 0.03302 0.2101 0.07917 0.3773 0.0989 0.2351 0.02775-0.00722 0.2139-0.3749 0.288-0.2698 0.05437-0.3294 0.1023-0.2153 0.1733 0.1234 0.07683 0.1048 0.1149-0.08551 0.1753-0.1337 0.04244-0.2431 0.125-0.2431 0.1835s-0.1574 0.1063-0.3497 0.1063c-0.2872 0-0.3379 0.03735-0.2834 0.209 0.06886 0.217-0.3143 0.4751-0.7052 0.4751-0.1585 0-0.1533 0.02581 0.03388 0.1674 0.2183 0.1651 0.2182 0.1673-0.006718 0.1594-0.1254-0.004426-0.3974-0.04815-0.6044-0.09718zm-2.075-0.0876c0-0.152 0.4438-0.4821 0.5081-0.378 0.03299 0.05337-0.06785 0.1808-0.2241 0.2832-0.1562 0.1024-0.2841 0.145-0.2841 0.09482zm-3.798-0.4742c0.0325-0.1243 0.2447-0.2639 0.5295-0.3484 0.2614-0.07758 0.5372-0.1915 0.6128-0.2531 0.175-0.1426 0.4097-0.003818 0.3327 0.1968-0.03211 0.08367 0.002876 0.1747 0.07774 0.2022 0.2986 0.11-0.1217 0.28-0.8494 0.3436-0.6932 0.0606-0.7529 0.04863-0.7033-0.1411zm2.544 0.01274c-0.375-0.05164-0.3819-0.05991-0.114-0.1374l0.285-0.0824-0.2579-0.1039c-0.252-0.1016-0.2498-0.107 0.09641-0.2377 0.3432-0.1295 0.3521-0.125 0.2842 0.1455-0.07592 0.3025 0.1247 0.3852 0.3611 0.1488 0.09791-0.09791 0.1145-0.06947 0.06651 0.114-0.03516 0.1345-0.1221 0.2362-0.1931 0.2262-0.07107-0.01004-0.3088-0.04298-0.5283-0.0732zm3.078-0.3646c0-0.06271 0.08324-0.114 0.185-0.114 0.1453 0 0.1567-0.03414 0.05307-0.1589-0.1018-0.1227-0.09017-0.2007 0.05119-0.342 0.2719-0.2718 0.3949-0.2236 0.3949 0.1549 0 0.2175-0.07862 0.3801-0.2205 0.4561-0.2788 0.1492-0.4636 0.1508-0.4636 0.004011zm-0.5701-0.114c0-0.06271 0.02262-0.114 0.05028-0.114 0.02765 0 0.08199 0.05131 0.1207 0.114 0.03875 0.06271 0.01613 0.114-0.05028 0.114-0.0664 0-0.1207-0.05131-0.1207-0.114zm-0.3787-0.08102c-0.03429-0.05549-0.02085-0.1681 0.02988-0.2501 0.07007-0.1134 0.1125-0.1165 0.1764-0.01312 0.04627 0.07486 0.03281 0.1874-0.0299 0.2501-0.06378 0.06378-0.1415 0.06957-0.1764 0.01312zm-13.36-0.1457c-0.03995-0.06463 0.005817-0.08375 0.1073-0.04481 0.1975 0.0758 0.2337 0.1575 0.06965 0.1575-0.059 0-0.1386-0.05072-0.1769-0.1127zm11.17-0.2293c-0.3379-0.08598-0.3368-0.0872 0.09224-0.1005 0.2634-0.00818 0.4066 0.03137 0.3638 0.1005-0.03876 0.06271-0.08027 0.1079-0.09224 0.1005-0.01199-0.007425-0.1757-0.05266-0.3638-0.1005zm-2.482-3.663c0.07735-0.07792 0.1693-0.113 0.2044-0.07785 0.03511 0.03511-0.02817 0.09886-0.1406 0.1417-0.1625 0.06187-0.1756 0.04878-0.06383-0.06382z" fill="url(#linearGradient5011)"/></g><g id="Frame_copy" transform="translate(765.5 -314.1)" display="none"><g display="inline"><image width="571" height="571" opacity=".75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjsAAAI7CAYAAAAK1lpbAAAACXBIWXMAAAsSAAALEgHS3X78AAAA BGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAFS4SURB VHja7J0JdxrbkmaDFBpsX9fr//8rq969tqwJul2tfA6CiDhxkgQS2HstlgbbEsISufXFcFYCAJfK 6oC/syq8r/ftU7E98O3ofdn7q38OABf6ZAkAy/457RWX1uvV953jOWTbeL36vuz1XkFCggCQHQCY 4WeyJTS90qJfrg74O6d8HslEZhu8r/fvVP+sIjoIEACyA8DPX/H9VWnJxGQ109urQHiO+XwSpS5b 5yYzvj1FkBAgAGQHgJ+3othUZaYlJXPfhkSqjo0nIJtAeo51i+SoIkEIEACyA3BzctMrNBURqbw9 TPg33p+tOiTu0DQnS3Q2weuttzeNf5993DlEqPV1AgCyA3AVcpNJTUU8vJfR+6K/0/q4QyJL0dc4 d5rjyc7GeblpiIz9u623Wx9305CvQ5Ig5AcA2QG4KLmpJDUtgfHenvO2anwee59ETlPOyspXnqxs GnKT3T6Kf5Z9zkrCVOkJqiZBAIDsABz1Z2aK3NgkJZOYu+Tt1uut900VIZs4neK5xEtJNhOFxhMY 7+VH4e9UP08rDdpKfwkM+QFAdgCOnt5kU089YhNJyV3xbfu+6O+3RKiaHLVKWYc+v1T6daqCsw2S mUhuPhzRqdwiQcqkyKZP1X4gUh8AZAfgpOlNqxyVpTWRuKw7327dhuR1fZ+qJbLqKPoxU51tR5qz dYSjKjTvhdez9300UqJWCpT1AGWpD+IDgOwAlAWnld54vS6tpCaSm7Xz+jr5O5H4rJPPWS1prYqp zrnLWNtCalIpXUXiUnlZeV9VhqoCVCl7IT4AyA5ASXCy9CZKbVpCY2Umu90HEuR9zEq6E8lOZWqr d/z8FOlOayIrK2f1JDvvjdd7bpkQefLzIX39P4gPALIDfM93C06lgfjOSVyqEnPfeOndeiUnanRu SU0mOecePW9JTyZBUf9Or/Bktzfn9bfgzyvyk5XAEB8AZAegtO8mGwG/S9IbLSCRxFRfz4SnVcYa giTHK1lFkrNqyI0nO6dMdiLZyXbdtJKflvi8S17eiiTHe/nmvB3JUFQia8kP4gOA7AApTld6YyUi K0PdN24PieB4AlRNdHpHyyubkaMEZ6lnY1UkaCP1aa6etOejkOr03loC9C7t8hfiA4DsAIJTkhuv T+a+ITcPSmweAtmpJDlrJ8nJenGm9txkYiNymaee9wpQJD829bGJik19oqTHS3deG29777Mfb3w7 Kn8dIj5IDyA7AAv+Xo7KVPaC75WmouQmEpwHIzgPzvuqotNKcVoJTvX8q0pa0yM355Cdivz0pkAt 8akkP9Xylic0r8n7XpO/+yZx+atXfEh7ANkBuOAUpzU1VRGb+0Bmopv9+1XB0ZKTCU6W2AzJ4zFF alYLe+6oiE+vBE0VoOoIeyY8meRktzfz+hTxqY60Iz2A7AAsIMVpSU40Cm7l5qGR2lRu9t97pSpv fDxrMu4tR/WITY/QLOV5YztBhCriI1JrePYEyBtrj0pdFfHRQvOi3vfivO+1Q3zenfsZbXS2jw3i A8gOwJlTHG+CyktwtHhkUvPYeDuTHJvmVJuMexqKRdr9Na2UpvVccCnPE9vOP6smQJEEVRqes3JX pcyVyc5L8HpLfN4OTHxIewDZAThTimP7cLIS1b0jN4/Oy8fgz3oE517a/TfecQ2t9OaQxOaQn/+l PWdsZ/w3WSmsp/zVU/JqTXNFJS1Pdl6K4vM6k/hUUjQAZAfgQMmJUpxWierBCE1265GcdSPFaaU3 1eV91YmoFc8Dky7EUxuhe+Un2+nTkp4X5+VLQXxeAvHJ+nxIewDZATix5Nixaq/RuFdwnoLXM8mJ SlRTBGf8eqRTcKo/w/yczyNDVQmqTnxl8uMlPl4/z2uH9FSTn0h89H2sjLEjPYDsADQkR1/cvYV/ UR+OJzgPgdw8mdejVMcrU1X24FQO0azusmn9vPKzfB4JaglQK/mppD5e2uOJT5b2/HKE51ciP95Y e1Tm8sQH6QFkB6AgOba0U+nD8XpwbGrTIzpZihM1GU8VHJHaoj5+ZpcvQZXpr6r8ZD0+WV9PlvT8 Cl566U802VXZ32OFD+kBZAeQHCM5U1KcLL3J3o5KVtEkVUVwKlNTJDa3KUBV+cnEp9rb44mPlhx9 ezGvW+mJylxR2jPed6QHkB1AcgqSk6U4Xv9N65ZJjt6LE0lONb2pJDj8PCI/LfnJSl2Z+GRTXC+B 8PwKJGiOtAfpAWQHkBwjOfYU8ajRWMvLFyU0XwLJ8cpV3uK/VorTk94gN9ASoKzZ2ZOfSHyqTc1e WevZSM6zk/pk4tOa5EJ6ANkBJKczxXlyxOZLQXQejOS0SlXZBFV2CviKnzeYQX683pdNUXy8/h6v xGVLW8+B8DwH4mPLXN7hpEgPIDuA5DiSE6U4nuB8CURHJz9eP45XqhqSFKey+4afL5hbfloTXq1x 9krak5W1noOXlTKXN76O9ACyA0hOIjhWbqzwRCUruwDQS3G8c6i8AzURHLhE8fHKXJn0vCTC81wQ Hy/tQXoA2QEkJ5CcL4VbS3LuG5JTTXG8nxl+hmCJ4hOVukbRsCWuHunxxOdZ4sZmpAeQHUBylORk Cc7XJNWJylW6uTnaatzag4PgwLWIj3750Uh7qtKT3aZKz0ZYTgjIDixUcrTsDDNJzlclOV+DNOex IDlew7EnOQgOXKv4ZBNdFel5FX9yywrOz0B89L/NpCc6jkIkPnwUANmBo37feJKjD+acIjlfjeh4 iU4ryckajqOzqBAcuGbx8cbZvaWFVnyysXUv5fmpXv6UuMwVNTNnCwopbQGyA2dJc1bSPtLhvkNy WqKT9eRk/TiVUhU/E3BL4hOVuVpTXFnSY6Xnp5EfKz52iqvS04P0ALIDZ5WcrFxl9+N8KUjOV/H7 cnSSo5cAelNVpDgANfFplbi80XWvpycSnkx6tPiMHzeSHu/sLYQHkB2Y7XskO4XcSs6YuGSTVZHg fJW8L0dPV9mm42yqCsEB2BeDqMxlm5mt+OglhePN6+f5mdxazczRURTRKetIDyA7MFuaM4pEdDhn a3z8a3LzRsmznpyoH6d3szEAaU9+NpdNe0YBeQuSHtvP48nOD5P42C3Nr4n0UNoCZAeOIjleX07W eDxKi05wvnVKzqPs78mJzqmyy/9IcQAOT3si8dH7eqKeHjuqrsXmh3nppT26RPaWSA+lLUB2YNL3 Q1Sy8iRHl6sekxTnm3mpS1k9kpPtxyHFAZg/7elpZtZJz4uRHtvP8yMRH6+8NUqUPnsra2Im5QEu BlBKcwYnzRnlw5uuspLzLREdm+ZUJafSj8P3NcDx055oSaEnPbaJeRQaLTpR2vPLJD3RuHpW2kJ4 bpw1DwGi40hOVLLSY+Q6yXlKUhz9uk1zdCKE5AAs87lh6/ycbdVL/VzxYZ4v3iSeynyW/UN9f8j+ YMLPz3///PmxRum5k7yfR5z7j/QgO0CaU+rL8UbIvxq5+eakObZkpRcCIjkAlys9W+e540PiXVue +DzJfklb334o8fn1+fF+yZ/S1vApPCvZ7SmyKc8K4UF2gDRHTzd5zcf6yWeUl2+B6FjJsWnOFMmh 6Rjg8qXnviE9nvjohOen+ji/Pj+2Jz2kPIDskOaUSlZRX87XQHL+krg359FJc6ZIDoIDsDzpWTkJ iic9rc3qFenR5S29jmL8+GM/zyD7U1ukPMgO3HiaoxuQvb6crFz1l/i9OVHJKjvWAckBuLxfnrbq ZzaTnmii00t7npzU5zH4xelZfUzbz0PKA8gOaU46Sv6USM5f4petWiUrb+sxkgNwXWmPJz36uedD 4l1dWXnr0Xlu8X6R+iX7e7hIeZAdIM3ZSXOs5HxVcvOXIztZA3JlISCSA3D90jM+92ySpKclPp7s 2OeaZyU8pDyA7Nyg6GQ7c7ySlU1y/nISHS/NiUpWSA7AbUqPyO7IerTHKyptedLzmCQ8+rnnhZQH kJ3rlhyR+GRym+bofTmR5FjRiRqQo74cu/XYu78AcF3PR970ViQ+d5I3MlekZ/z7a/M8RMqD7MAN pTnezhyb5vwV3FppTrVkJaQ5ADed8owMzi9ktpcwkp7W7Z6UB5Cd63wyEYlPJ9dPGl4D8rdO0bGn kmdnWFGyAoBqE7Pe91WZ3noQv5ylb17KM+7keSukPAgPsgMLTHNWHWlOJDnfJS5beWnO+HnoywGA 3qTHK2utJkjPg8Q9PDbl+f3xxkWEWnhWRnooayE7sEDRiUbKK2nO90B0dNnKnmW1VpJzJ/TlAED9 +Svq59mYlz17elrSo2XHlrbGc7a03FDWQnbgzJIjEk82eEc96N6cUWa+O6KjtyF/baQ5UQOykOYA wISURz6fR1qTW5H0VHp7WstN3z/vB2UtZAcWlObouNc7uNNLc7TcfJf9/pxRdFq9OZSsAGBu6bH7 eXqlp9q8bFdj3AUpj1fWQniQHTih6EQj5VFvjic6UdnK7s2p7MxBcgBgzqTHPt9FSbb9RS8Sn3vx +3iiX+DeTbKzMfcZ6UF24Iiio3/YvTTnUfzenO+O5GjR0U3IXuTr9eaI0JcDAPM+32WlrY20z91a N1KeqIcn2gv2YdIdUh5kB44kOWJ+CPUPtm7Ki/bmZKJjm5C9NCcaJyfNAYBTpTxb9frg3Lz9PLaf 574hPVGJ/sNJeBAeZAdmTnNaZSvdhGzHySPRyZqQ18lvOqQ5ALCElKe1hXmdyM59Q3Zsyf7NSA/C g+zAkUQn2p1TTXNsf042Uk6aAwCXnPJEm5ij3TvrJOEZnwffkpRH1PsA2YFO0fEO8BxFZ5yW0qeT R5LzXfaXBEZNyPTmAMASnxsPTXnWSnDuzetWdKKS1pv6/PTxIDtwgOSI7G8RjcpWUZrzX1IvW40f m0krALiE58melCeTHk92KiUt28fDPh5kByakOVF/jt2d401a/Zd6qRcFRrtzspFy0hwAWOpzZk/K Y6XHkx9PdrKmZdvHwz4eZAcmiI7Xn6PLVnpvjhYdm+i0dudk0wekOQCw9OfOLOXJkh6b4FRlJytr CcKD7EBbdKL9Od7unL8cyfFExzvAMxopH0hzAOACn0ejlMf7RVJLj5Wfu0SGhob00LiM7ECH6OhG ZHu2lS1bWckZS1c60dFlK12jHsSfthJEBwAu9Pk02r4cpTxeecvr27kLpMf7HCI0LiM70BSdVn+O l+boRMcbK882IdsfUiQHAC75udVLeaaKj5Ugb0rL+4WRxmVkhx9G9VJPXGX7c7KyVSQ63pJAmpAB 4FaeY3ulJ5OcdUN2sudUGpeRnZsXHf1DFu3PicpW/5L9HTrRWLkVHdIcALiF51vvJHX95z2TW73l LHuQKMKD7NzMD57eoWMbkW1/zig63ztFR29D9o58QHQA4NZ+wdzK/g6zbOVHr/S09pMhPMjOzfyw RaPl3qJArz/nX7JfusoakXV/zuD8gCM6AHBLz8NeWct7bh5fv2tIzyBxKcu72UkthAfZuSnR8RqR o7LV+Lo3ceX150TTVkgOANy68FSmtjLpGSQfSY9Sno16ifAgO1ctOrp0Fe3PsZKjS1f66Af6cwAA pgnPIH19PIPEu3pa6c748W0fD8KD7FyN6EQ7dPTElT7bSgvO+LoVnVYjMksCAQDi5+dqH8/KPKfe FWSn1b+D8CA7Vy063g4dfVr5fxnJ8UpXWnS808rpzwEAqD1XV/p4rOzYdoTKZmXvufgD4UF2rl10 ngLR+ZcjO94Onex8K8pWAADThCfr41k5MjMUbl5i5IHwIDsXJzrZssBotPxf4ic63mi5FR36cwAA 5hGewZGN6gbmylRWBsKD7FyU6GTLAkfRyUpXNtGxomMnrujPAQA4/Dk86uNpTW6tGtLT85yM8CA7 FyU69tRyKzrfJe7RqYoO/TkAAPM+n0d9PCLtdGcl01MdhAfZuVjRyXbofDeCY5uRI9G5Q3QAAM4i PKvCrbVFGeFBdq5GdPRWZO8wT68ZOduKPH686MRyJAcA4HjCEz3PVmQnep6uPGcjPMjOokXHjpaP ovNfgeh8D0Qn26GD6AAAnE54dONyq5ende3oAeFBdhYvOt8C0fEmrrytyGOiw2g5AMD5hEeM9Ni/ 02piPvR5GuFBds4mOjqy9JqR9WGe3rSVHS0fd+jYZYGIDgDA+Z/3vUkt73n4WM/LCA+ycxbR0Rs0 bTOyJzr/R/zRcm8rsndqOaIDAHDea4BtXL6T/T6cVfFjITzIzkWIjt2jYw/0tKKjZSc7/iEbLUd0 AACWJTzDEaQG4UF2zvpNHh0B4Y2XW9H5P+p9VnQeP2+6EZllgQAAlyc8p3iORniQnaNJji1feUdA ZKJjx8tZFggAcJ3CcwoQHmTn7KLTmrr6Jn926LAsEAAA4bFsC+9HeJCdWb6R9eu6ITk66yqavPqX ER0v0WFZIADA7QpPj6y8IzzIzpyiE/Xo9IiObkaORIfRcgAAhKciRFslPPrzIjzIziyi442Ya9H5 LvvnXH2X3WbkJ0QHAADh6ZCa6H22nIXwIDsHiY4eMc+OgfAO9Gzt0UF0AAAQnor4tHp4EB5kp1t0 7HZkLTpe6cprSK5OXSE6AAAIj5UX72V0E0d4ANlpio4tXdkTzP+S+ATzsaT1DdEBAEB4OoWnR3Ky 0hbSg+w0RScrXY2iEzUj26krfagnW5EBABAeSaTEk5yNeenJjv27+n4gOxCKTmVpYKt0NfboeJuR ER0AAIQnEp9MdiL50TCSjuzsSU7P0kCvT2d8e0x0vgrNyAAAXGP6hSeSHXvLkh5G0pGdnW9C/bpX vvJEp7UwMBOdAdEBAEB4GnITCU4kPdG0FhNaNy47laWBdsQ8SnRsQ7LepaNLV4gOAADC4wmPyH7f Tq/4RL08Nz+htb7hbzqRuHxlR8wj0dGyY0VnTHTWQukKAADqJa1DEh4v6bn5Ca1bT3aiEXNbvvou +0dBeImOXRqoS1cDogMAgPBILeGJmpN/3z7MrSI7Nz2htb7RbzSb6OjFgY+SNyTrm7dLR/fo3BnJ AQAAiIRnK396RkX6k52spDVykxNa6xv8BtOvR306nuhkzcgsDQQAgEOF5069vv28rlSTnUrKc7MT Wusb+8bSkqPLV17pyvbp6DTHLg1EdAAAYA7hGZSMiPjlLC01WoBafTwjN9ewvL6hbygRvyH5XnbL V7ohOZKd6LwrtiMDAMAhwjPKzp0jO9tAcqKbLWlpwdmo+3D10nNryU525pU9xdxOX40LA1sHe7Id GQAA5hCeSHZ0utMSnaikpUtYV1/OWt/IN5GVHXuSeWtDsi5d2akrvUuHRAcAAOYQHv3L+dRkx5Oe m2xYXt/AN0+P6Hh9OrZH52siOiwNBACAOYSnsn/HS3feP29eD8/NHimxvvJvGis6Y+lqrUSn1afD dmQAADjXdUw3LN9LO915l76UR+QGGpZvIdnxjoN4ULIT9elURYfSFQAAzHnd8ia0vIZlPYXVkp1N Ijv65VWmO+sr/maxstNzknlFdLzyFaIDAADHEh5PdrYS9+68y25Zy5vQ0h9rda3Cs77SbxJPdHSq M4qOPffqu7SPgdDnXbEdGQAATiE8eiS9le58OJLTGku/6v6d9RV+c2jRWcn+4kA9Zv6XEhstOmMz MksDAQBgKcLjTWhF6c671NMdvXPnKvt3rjXZ6d2nYxMdvR3ZnmLO5BUAAJxDeLIDQ22zciQ7nvRE h4deTbqzvrJvCCs7ekuyPvdqTHX+SkTnayI6JDoAAHBq4RF1fdt+XpfsdFbWt+OVtjzZubr+nfUV fSN4orMuiM73hujQkAwAAEu61onEDcu6f+e9cIukR/fvXDzXluxk01e6IdlOX32X+CiIrCEZ0QEA gFNd46oNy17/ztvnLROdqy1nra/kG0AS0Rn7dLJUp3LmlVe+AgAAOJfwRA3L0WTWeyA+WePyVZSz 1lfwH++JTtSn860gOjQkAwDAJQhP1LCskxorOG9Gdt4c4dFTXldRzrqWZMfKzr3spzqe6ERnXo3/ noZkAABYqvCI+A3LD7Lbt/PhiM6rtEtbV1POWl/4f7ZIvjzwUXYP+bSy803aR0HQkAwAAEu+Dors Nyx7o+jvSnReZT/l8UTnKspZ6wv/D64cB2HLV/rlX0p0dKpj+3QE0QEAgIVdB7OGZU92snTH9vDY puWLLmdderJTaUr+JvtNybp09SURHdunAwAAsFThsddDLTxesvNq3rayczXlrPWF/ueKxE3JdvrK pjr2KAgWBwIAwDUIT7Rw8FH8dOfVER+b8FxFOWt9gf+pnuiMiU6W6mjhGUXnixKdUXaYvAIAgEsV HjHCE6U7Vdm5inLWpSY7veUrKzrRPh1EBwAALll6tOxo4fF6d14D4bm6ctb6Av8TK+Wrb7Lfq9Pq 0xmEPh0AALhc0fEalkfhefiUlifxe3dsD89VlbPWF/Sf6IlOpXxlRUfv09Fj5ndCqgMAAJcvPPp6 qaezRuFp9e5ECc/FlrMuLdmplq+ipuTsgE+b5iA6AABwqdIjsjuOXpnOeglk510uvJy1vqD/tOxI iKh81TN9RfkKAACuQXRa4+iPSmJeG7ds4eDFlLPWF/CflonOvfxZCOgd9On16TBmDgAAtyA8+vqp y1n3SnhsOcumO9GG5UEuqJx1KcmOlp1BdstX+kiIv8RPdb46okP5CgAArl16RNrlrKx3J+rf2Zqb lSxkp/M/SSQ+EsI70bw31aF8BQAA1yg6PeUsr3fnRfb37+h0x+vfWSSXUMbSiY495PNJiY5Nduz0 FeUrAAC4ReHR19NWOcuTHS/hsbKjp7QWJz3rBf8HSSA6rVRHNyRTvgIAAKTn/+OVs+yyQS03L+rm lbN0wrOSBTcrrxf8nxKNmlvRiWSHQz4BAADRyctZetmg7d3RouMdKWHLWYttVl5yshPt1NGj5l+l PWZulwdSvgIAgFsUHn19zZYNesmOt4PHG0dfZLPyeoH/IeLYp92pE/XqaNHRZ19RvgIAAKTn/zOo l7qc9f557XwLZGe8ZenOIpuVl1rGsr063pEQXwPRaR3ySfkKAABuUXRsOWtMd/Q6l3dHdn593rKE ZxSeQRbYrLxe2H+Elp3xP6I1gfXNER1v+upOKF8BAADCY4OFMVT4+Lx2ZqWsSjlrcc3KSyxjReWr SqpjRede/AM+ER0AALhl6RH5swX5Tv6Moutm5dfPa6tOd3TKE6U7i2tWXi/sge/dq/NN4j6de9k9 zZzyFQAAIDq7MqKFxw4C6XTHik62cHBxzcrrhTzwWnRsrPagHvivgez0bklGeAAA4NaFR8w1d5zO 0s3KWnY86XkNZGcjC0p3lpTseKPma9mdwPriyI4VHW+nDuUrAACAOGwYnKDh0QjP79uzIzteOWtM jBaR7qwX8kBbu4zKV1+V4GjR0Tt1okQHyQEAANiVDzsUZI+S0JNZvwXnL9kvZ+mEx9u9I0IZKz3V 3DYm20THGzPXvTpMXwEAALSFZ0xivOksfQ3+pV5WmpV1Kets6c76zA+yfl2Lzlr8Cayv0i5fadEZ EB0AAIDS9bjVrPziiI5OeGzvzti/8yGUsZrTV18cyfkq/U3JAAAAsH8d9pqVN+p6/C5/2kl0k/Kz /Onh8fp3xrLY2U9FX5/xwdWys5LdpmRvW3KW6tjyFU3JAAAA067L3pmU9pr8LH3lLJEbL2NFqY4+ 2bzSq+P16SA5AAAA7etxtFlZBxBvn9feLN0ZhUeXs8by2NnSnfWZHlRtj3YC616JTlTC8spX+vwr Uh0AAIDDrs9eujPKjk53vHLWmO68ywLSnfUCH1CvV+erkR1vpw6j5gAAANOvy3oUPWpW1sLzywiP V876/W/Pnu4MZ5ac1qj5V0d09E4db3kgo+YAAACHXaOjEw30NfqLCSS8Y5u8Bb8nvzYvoYzVSnWi 8pX3QDJqDgAAMM91Wqc7nvD8vi6Pe3ee1du/X19UujOc4cHzUp11YIzeBFYmOkgOAADA4ddqe71u Xat1KNGqwJz8Wn3uMlZrtM178OwEFuUrAACA+a/Xq+L12rtm6+u1HSI6ufQMJ3zQrCW2tiXbBYLR pmQWCAIAAMx/zbbX7ahZOQonFpPunLOMFdUAI0PMLJFRcwAAgPmv26sJ123ddrKIdGc40YNlHzjd 3a3P3vhizFC/zqg5AADA6QOKbNHgkyM8X2Rhk1mnLGN5UVir2Sl7sDgWAgAA4HTCY9MdL6zIem3P lu4MJ3qgRPJGp8wMHyXu1SHVAQAAOE1g0ZPuROtivLDiaspYnhXac7B0slNtcGICCwAA4PihRSXd iUILfR33Jqnl2NfxU5axsm5uT3SiOf3oQQIAAIDTBRfeZFZ0LbelrJNOUw9HfmCyB+hBdmt92YMT pTpHt0EAAABEZ+d6Hk1m2UO8KycfnOR6foqencgE7yUuYekHxk5grYReHQAAgHNIT7X/1mtJ0enO SftvhyM+IJEFeudgVVIdr3tbBOEBAAA4hei0rutZOat6ruVFyY59YKLTzaNU56wGCAAAAOn1Pevd eZRprSlHGzgajvQgiCM6U+xv3bA/hAcAAOD0oqOFxxs6ejpQeBYvO9b6VrK7RLDVqxONqJHqAAAA nFd0vDDDDh95wvMkfaWsWa/zxy5jZSWsHuu7EyawAAAAliI92fCRrd48OcITXeOPEmgMR3gAJHgQ 7BLBLwXr0w/CgOQAAACcXXQkuda3+nIfpT6GvljZ8YzPHvpp460nqcVbVqYAAADgfNKTlbK8UfTs Wu8Jz2zX+mHmL1wkPvQz69XRJSzdq8MEFgAAwPJEx5Oe6IQET3psFeeovbnHLGPZXp2sU9suEdQn o3IGFgAAwHKlx17zdbqjAw6d7LQalWe95h+zjNWyvOgLt1/00ZcNAQAAwGTRaS0ZjK77evJ67Vzz F1fGqpSwIsPz6ncnm70HAACAg67/1UblTHiO2qg8nOAL9vp1rOhER0Mwbg4AALBc0akKz5MjPCcr ZQ0zfrEitVSn8sXqcXNSHQAAgOWLj77+eyeiR2HH0as6c5axqiUs74s9+TZFAAAAOLkD9Kycmc0B jlXG0k1KUc0u6sa+kyM1KAEAAMDsomM9YM7AY5Z0Z5jpi4xEx0ZYj+qLO+sJqAAAADC79LQms/QJ CtoN9DT2nSywjOXN2euNyZHR6b06dokg4+YAAACXJzqVdOcxcYFMeCZ7wdw9O95ZWC3ZOWp0BQAA ACcVH69RuRJ+ZH07Z+vZ6dmt8yhxqpOdi3HwFwgAAAAnE53evTuPkld6FtOz41lcFlt5jcm2XwfJ AQAAuCzRsX6RpTteCKKdwJ6icJAbDDN8UT0Gl9XnaEwGAAC4fOnJFgzboaXHwAvWMuNywWHGL6jS jOR1XmcbkwEAAOByRCfyg+xQ8KOXsuYqY+mR80pUxcZkAACA6xafaPdelO5E25QPTniGiV+AZ252 CitrQoq+GO/zAAAAwGWJjohf+cmEp9XiMtkNhpm+kGx5kFfGynp1kBwAAIDLF52op/de9lfTVE5V OGvPTrRI0BOeB/V3sogKAAAALl98BmmvpsmalGcpZQ0T7nhmbOuGrXmd1uzWAQAAuD7R8Vwh6u09 ainr0J4dz9aiMhaHfgIAANyG6Ni39VSWDkYi4Zm1lHVIz060EjqbodclrOhoCIQHAADgesTHK2WN Acmj8YajlLKGzjsssh9NebGUd8crh3wBAADA9YhO6/iIk5SyDunZ0abmbUd8MK9njcnddxwAAAAW LTrWN4ZO4ZmtlDW1Z8dbFBTd8cjQKGEBAADchvhEO3dOUso6pGcnO+TL3u6FEhYAAMCtik40lVUp ZUXJzuw9O63zLnpSHUpYAAAAtyE61jkyd4j84eCzsg5pUPZSHS/Z8Xp1vI3JCA8AAMD1ik9WyvL6 faNe3+6EZzjCnfVkJ0p1EBwAAIDbEJ3WgsFq385RenayElZ01oWX6sx6qBcAAABchOjYt7NJ7soI endgMqVnxzYmZ6lOdCcRHgAAgNsTn0HOMODU27OTNSffS1+qg+AAAADcjuh4wUnmEeNtLf6ZmiLF 0GRKz85c/TrNOwcAAABXITpWerIKUXTMVNT7e3CDcmvkPIufsmVAiA4AAMBtik8mPFWfmL2M5QlP a+T8XvLjIVaB8QEAAMD1io5IfOTU2jiE9Yk7ySe7V4fIjgQW1mpOzs60QHAAAABuU3SiY6cqfTuT jo3olR17auna2Bcj5wAAAFBxCu9wUOsVlUrRQT07XqdztF+nIjqMnAMAACA6Vnis6HheoZ3C6wOe LDsi8SLBqIRlbYwSFgAAAHii02pU9pKdSUdPTe3Z6dmvMwiTWAAAALDvFlGjclTKOkqDspfsjMJz 7wiPNw9/h+gAAABA4hdRslNZZ9OsGg3JnfDMS9+ZtXNHKqecC9IDAABw06Ij0j5cPCpleS0yMkV2 RPajoVXxzlQakwEAAADRqSwYtH7RSndWPbIjgXnZzcneHdIlrFLzEAAAANyk/GR9O61kp9S3U+3Z ycpYWnSq1gUAAACITrVvJ9q3M7lB2duvUxkNW0u9nob0AAAA3LboWMdotcrYQKXctzN03onojkSi Q78OAAAAZI7RKzzdnlFpUB7Eb072hKd1FhbCAwAAANY3osXFFeHxPGNVlR0rPN4BoF6qwyJBAAAA qIpO66QGL1jxXKN7Gsv+Iy9aij5564gIpAcAAABWgfBEw1BZb3BayhqCT2ylJ/rka4knsJjCAgAA gKrw2BF0byDKBiulJuXWNJbXnOylO5O6owEAAOCmJUf7xipxDS9k8U4/d92jVcaqNCdHx66X598B AADgpsWnNf09JWBZtWRHpDZ27pWxuo9eBwAAAKRH6q0zXQHL0DAsrzv6rlN0AAAAACLBEam1zmS9 wmmT8uB8QnsnKvWzO4nPqkB4AAAAoCU6vX075cWCwwGGlU1iMW4OAAAAvfJTFZ4oZBFPerIy1tD4 hNkIGNNYAAAAMFV0omXGWd9O2KRcmcY6JNmhORkAAABaohP5R+YdWni8np10Gis67bz1iWhOBgAA gEOkpydoyXqF3TLWKhGd6idkczIAAAD0Co5IvUm5UsraozV63hKdO+lc2QwAAACQyE92CHlLdFwP iUbPo1TH+4T06gAAAMDcomP7du7M660m5f+8HJJPNN4yybmrfiL+DwEAAGCi9NwZ//A8pNmzUzWr ilFRygIAAIBewclE584RntaREf/5uNlSwYrolJuDAAAAABqiI+IHLi3pSRcLDhOsqmJTJDsAAABw iPhk6U7XMVU2ifF6dqJ0p7I1GeEBAACAXuGJJrJawUs6jeWtVx46P8lK2K8DAAAA84hORXoG8Zca h2WsyKiGxieJGpOZxAIAAIBDpGfocJFSg3KlhFWNjRAcAAAA6BUc6XSRTHhKyc7QYVSUsAAAAGBu +amkO60G5dVQsKpB8kQnO1odAAAAoCI2nocMEqc7mYs0j4vITGoomBTSAwAAAHOIjyc61XTnPz4y BB+4FR0N0o6OEB4AAACYKjyVgalSpSk7Gyv7oNmYF5IDAAAAcwnPkNyi/mER06Ac1ckym/IsCgAA AGAuyRGphzDpdPjQYVGVZiB27AAAAMCc0qMble8kD2BcJxmcDyiBRXkv09gIAAAAoFNwrEtkjcot 0flfevfseKKTHr4FAAAAMFF8vHRnaNz2psOrG5QrJgUAAABwiNxEwhOJTqWMFY6eV/p1mMQCAACA Y0lPFMCsekRHpD2NFS0VbB66BQAAAHCg8FSkJwtg/vfW2rMTCU/LohAeAAAAOFR4WsuOo/ftMDQ+ cKsBiDIWAAAAnFJ8ur3Ejp5LxwejORkAAABOLTmep6TT4a1kp8egvDsIAAAAMFVy5AAv2VsqKBI3 KK8kTnTYmgwAAADHlB6RWnuN17MTHhdRER5EBwAAAI4pOOI4yaSqUzQ6vko+OE3JAAAAcArpscFK JDilBmWRfHw8qp1lJgYAAAAwt/i0RtD3fCY7G0ukXrZCdAAAAGAOqamITiQ87rT4ULSoSIQQHQAA ADiW9KwawuP1Fu/9+6FgViwPBAAAgKUJTzZEteMy0annkrweSREAAADAscQnu4kkR1gNgbSsijeE BwAAAJYgPtHfLW1QRngAAADgnGIjjm9kLTc7f97aoNyzW4deHgAAADim+IjU2mx2GAJLysa7aFYG AACAc4hO9L5095899TxbybwqCg/yAwAAAKeSnuafZUsFq6uYAQAAABZLlOxE2wm9U0URHwAAAFgC q0h2bAnKS3KaJ4oCAAAALEFuPNnR/8BrUK6UsyZ9cgAAAIBjY5cKtkbOI9Fh3w4AAAAsWnYi4alM YCE6AAAAsGjZiTYQitQ3KAMAAAAsVnZEahuRSXAAAADgYmUnk5jKGVgIEAAAACxedgAAAACuWna2 wd/Zqj/L/g4AAADAYmVn25AcKQgPAAAAwCJlZ+sIztZ5O7oBAAAALFp2tOh4grP5vEWiQ+IDAAAA i5cdT3Q2gfggPAAAAHBxsiPil6825pYJj5iPBQAAALAI2bE9O57UWOGhZwcAAAAuRnZE4nLVJrl5 pS8AAACAU1FyjyH4h16akzUpAwAAACxSfqJkJ5rGak1mlS0LAAAA4BQMEi8O3BYlB7kBAACAU7Cd 8mfVPTve694nQXwAAADgFJKTVZW2kex4olPdoIzkAAAAwCmEZxu8HjIkRlQ9JgLRAQAAgGMJTuQc 28Rbdv58CP5i9EGk8T4AAACAUwhQpX94a2VHHFvaSn5QKAAAAMC5BCc7vPw//3YofGCRONkBAAAA OJbgSCIz0akPaRkrkhh6dgAAAGBJorNJhGfv32dlrJbYdHdDAwAAABQkJ3OS6EircE1OdOp59kkQ GwAAADi1BHmnO2SnPPzn3w6SNyFvG8KD+AAAAMCxBUckPqA8O7/TLWN5cuNFRFETEOIDAAAAh0pO JD3bRHo2gaM0j4vYSHwoKMIDAAAApxCfluRY4dn595XjIlo1sazXBwAAAGCK5GSTWJVU5z//fkg+ aOuDZYeCAgAAAMwlPdvAQ7K+nf/QSnZaMRHNygAAAHAO6Sl7ydD4YPaDfkihEQjpAQAAgBkFpzJy 7vXsyCg72ZZCT3Qi4UF0AAAAYC7RiaSn0ke8cxsC0dlInuhQxgIAAIBjik5LcqrVJneDcpbsZNID AAAAcKjkiOMmUcmqJDxD4wNvpD/lAQAAAJhDfipnYkU9O3sNytHxEDbVsX072XJBAAAAgF7BsS4R OUlpe7KWnegDeklOJdlBfAAAAOBQ8bGpzkdDesKlgtE0ltev8+F8AhqUAQAAYG7J8YTHc5Ksl7j7 uIjsg5PqAAAAwDGkJ+vPsV7ittVEo+fZjh3vAzOVBQAAAHOLjnaSD+e2qfhI5dTzj8InYd8OAAAA zCU6Ivnuvy4faR0XkX3g7BMAAAAATBEcKzrbouiUDwKVmT44wgMAAABTxafVO9wKX3Y+nrdBWZwP vpH+ZAfxAQAAgB7JsW8fXML6zeB8gpZNvYu/YJBSFgAAABwqPJXm5HfpCF56e3beC0aVWRoAAABA VXoqqY7XWrPjINlSwWzU6132Ex4WDAIAAMDcohM5yHvVQbxkRySvk0XREbt2AAAAYIrciLQXG7+L X2FqCk926rmX7rzLtHIWAAAAQEV8Wo3JUXUpmsZqHheRNShXylhMZAEAAEBFciLpiUTHBi+hfwwd ZpV9ouysLAAAAICK8GSBSyQ6Uaqzc+r53jtl/zh1L9XxeneYyAIAAIA5pCdrUP5IHCRsUPbKTa3x cyayAAAAYG7J8RYbvwc3LTphZam3Qbmyb2eD5AAAAEBRcOzLVnNyNI1VHj23wrMxwpOZVcmuAAAA AALh8cKWinukYcvUZKdn/JyJLAAAAKiKT1ZVymQnnAQfGp8wm8byambp6BcAAABAIjlV92gtNm6e jRV90pbsRJ8U0QEAAIBe4cm8w2tQDgOWaPRcAsOyn+QtkB4kBwAAAFpyYyWnKjpdJzi0GpTHm62b vSWikyU7CBAAAABEwpOVsDzv0M7RNXquqfbseJ/YPWYdAAAAIBCfbVF0spBlzzuqyY43/vUmuwlP Nu+O8AAAAEDLOWzI4nlHS3TEekc0ei4dn/i98MkRHQAAANgTEZnWmOyVsUSKZaysSVl/8jfZT3Yy 4QEAAACQxDvsQJTnHD1nc4ayI45pRX07b8kdyM7JQn4AAAAgWnfj9etkwUrz5IahcEeyWKlHeBAd AAAA8Dwj2uv35gjPeGstFCzJTlTKspLzKnGzMn07AAAA0BKeiui0PENkwjSWFGwrSnY84wIAAADI lgnaYaiW6DQXCkay0zoywitjvUot2aGcBQAAAFmo0mqVyZKdsux4d6gykUXfDgAAAPQIT8UxonaZ sl8MnXfEs65XqdfTEB0AAADQnpFVj1p9wSXh6W1Q1uYVWRd9OwAAAFBxiyhQmVI96p7Gap1E6tXT 6NsBAACAXuFp9QS/ir9QsNSvk8mOd8eyU0hfJW8iom8HAAAAxBGdKNXJ2mS6jqXqaVBuxUyv4qc7 5dEwAAAAuGrBidzCNie/Sp7sdA1ADcU7VmlSfjV3sNKkjPgAAADcpvT0TmG9yf6ZWEdvUP5w7kRl mzKSAwAAgOjYgz+9Xh1vAKqrX6clO94dzJqUszvmTWUhPAAAALcpPF4JywYn1iuysfOj9ezY2ppX ynoT9u0AAAAgOLtO4TUmR1NYWXOyyMw9OyLTmpRbjcqIDwAAwG0KT0t0oubkrvBkShkruoOvReFB dAAAAG5XeFpTWPZmS1gn7dmZcgcpZQEAANye4HiiE+3W8XqAtU90LykeDrijWRmrtXOHbcoAAAC3 KzytVOdF/OBkkkcME+5gZGTeHWylO4gOAADA7QhPJdV5kdoUVplh4p1tTWXZO5pZGQAAAFyv4HgO YY+eepW4HcYKT3c7zDDhTusyVqvWNt6iw7uyBwQAAACuQ3i86pAWndEhXqRdwure2dfboCySH9z1 6tzZNyM8Xr0N0QEAALhu4bHuYBcJZqmO15x8kgZl3aT8XrzDH4mdAQAAwHUJTiQ83vmaL+bWak4u M7VnJ2tS9u6sXQoUiQ7iAwAAcF3C0zoe4k35QuQNBw04TenZEWkvF3w1d9w7sZRSFgAAwG0IT9T+ MorOS+ANs5zCMLVnp3LHbcrTuuMAAABwPYITCY8XkETNyVFI0sVwwBeRnVbq3WlKWQAAALclPJUT zrP2l1l29E3t2cmEp9VoRCkLAADgdoQnm+Cu9PlGzckn7dlp9e1UOqspZQEAAFyP4GhX2Ep7Y/Kv xBUOKmFNkR37xWTnW7yYLyDbqMxZWQAAANcpPF4wkoUir4knTHKEYYYvwjO21hcRRVOIDgAAwPUI j3fqQuQIeqBpthLWVNmplrKiL0ILz+RzLgAAAGCRgmNFR09h2cbkX7Jfwmo1J3czzPBFVZqU9Rdj S1mTjmsHAACAxQpPax9fFobYye2D3eDQnh0rPJUm5Rdpb0ZEdAAAAC5PcjTZOVg2DBkDEW9FzaJ6 drxlQd4Xko2hbxoPHAAAACxbeLIprKjqc7QS1iGy431hPaWsaAydnTsAAACXLzytVOeX7Ich2cGf Imfu2fG+sPeOL8pLdxAdAACAyxKc8WUr1fklfj+vt19nln7eYeYvzNu343VcZxZHozIAAMBlC09r B9+z7FZ7Ric4yqT2MOMXGM3S6y/k1+cXWNmSiOgAAABcjuRoH7Dj5lGlp1LCWlTPTm8pq5LuCNID AABwEcJTcYGp/ToHucBcPTvSKTvPp7I5AAAAOJnwRB6Q9fBGW5MXXcbKtilHX6Q3akajMgAAwPIF J/MAL9V5lr4SlshCylgi9VLWs/SVsujfAQAAuAzhyRqTW5PZWTvLQQxH+IJb42ae1VWFBwAAAJYl OVp0pl7/j3o4+HCEL7p66FcrxprlWHcAAAA4qvBs1fW6muqcrIQ1p+z0lLI84bGnob8fy+4AAABg tuu+d+2v9uocvTF5btmxX7AVHq9vp7d3R5AeAACARQlP73BSzzT2bNf8Y5Wxqk1KVnp0uqO/8Nmb lQAAAOCg671IfA7WeD3X1/rKFNZRrvXDER+I1viZ/eJfhHQHAADgUoTHS3bGPl2vT8dLdcbr/VFb V4YTPAA23fF6dkbpqYyhIToAAADLEZ7KBFbWr3PUEtYxZGfqGJoXbUWlLDmG9QEAAED5Ol9tWXkW v5IzhhonOTnh2GWslvF5D4JXy7MPAqIDAABwPuHJrvG/itf4aApr9kDjWGWsQ4Snp3cHAAAATic5 In6qE/Xl/vy8taawjnp9H07wwFSOj/CEhyWDAAAAyxOeVpDxHNy8VOckU9fDiR+Q8UGJ+na8UXQa lQEAAM4vOSJxquOVsHSq82yu629ywonr4cgPiki9lGUflOxEdNIdAACA0wtPdE1/CUQnKmHZa/pR r+fDiR4YW8p6l3YpKypnke4AAACcVnK88MJLdTzRqZawjiY8wwkeHO8B8h4cr5HJi7xIdwAAAE4v PL2pjic6Xnhx9Ov4cKIHSCTv3M5iLz2TT7oDAABwWsnxQotWqvMsfgnr5KnOKWTHio4+ETUqZXnC Q7oDAABwPuE5pFcnGzg6yfV7OOEDJVLfuUO6AwAAcH7JEbnwVOdUstOb7vwU0h0AAIClCM9Fpzqn kp1IelrrpaemOwgPAADAfNfsi051Tik7c6U7rb07iA4AAMB81+6LT3VOKTuR9FTTnfHBi0bXOBEd AABg/mv1xac6p5adQ9Kd6qw+6Q4AAMB8onPxqc5v1md6IFeSpztesvPl832P/+/28P9u95/3/+5T 2jafH3dlPg8AAAD0XadbJ5tX207OnuqcQ3as6Kyklu78+JSdp8+bFZ6PT+HRsoPoAAAA9F2j9esb yU82jyowi0p1ziE7kfRED+STEp3xZZTujAnPVskO6Q4AAEDf9bl6gHfrwM9FpDrnkp0p6Y4WnjHZ icpZKyU9CA8AAEDt2qxfn3Ligd2Lt4hU51yyE0mP1/w0pjtaeL6IX8rSsrOS3YQHAAAA2tdlW77y enV0i8niU51zyk6W7ngP6pPsJjs63bl3hEcnOyKkOwAAANk1WdQ1eSt5U/KzEp0f6n1nPdl8ibIT SY+X7jwq4RmlRzcrP3zerOyQ7gAAANRFZ2tEx5uU/mlEZ/Gpzrllx0t3PhzheVbC46U7Wna8chbp DgAAQH499kpY3sLfn47oaNlZXKpzbtmx0qOFZ2yG+n3/7pXwPDk33btzL/vpDqPoAAAA/vVXv66b kqOdOj/UbRQfb+HvYlKdJciOTnfGt0fZuZPdMXSvnOVNZt3J7ij6RnbLWkgPAADAn+tuNmo+pjqR 6Cw+1VmC7Fi7tOnOmyM8XsJjJ7PWsj+ZxSg6AADA7nW3coTTT0d2RuHJDummjGUe8JXzoNt0Z3zA tex8kd1kx1s0uBGalQEAADzR0U3JWnS8pmQrOlmqs1mC5CxJdiLLtI3K958yo0tZT0p+Wnt3aFYG AADYF52oKTkSnR/iT2CNqY49mJsyliMfdjrLTmY9fD7Qj+KXsjzh8ZqVER4AALhFyRFzvc323I1y 88/nLUp1xhKWLl9tl/JFrxf6n9A6M8s2K2dHSNiEZ1DCAwAAcGuisxX/SAgv1fGSHW+JoO7V2QZy hezIbgOxriEOsj+K/vNTah6dW5busFkZAABuXXiyIyH09NXv2z/ipzovEk9gLSrVWZrsWOGxpayo WVmXs6rpDiejAwDArUmOJzyj6LzJfvlqFJxqU/LienWWKjv2P0ULz9untIzNyvfiJzt2yaBNd8YO ccpZAABwS6KTHQkRLQ9s9erYCazFic5SZcdrVh7LWaPw/JK8nBWNodt0h3IWAADcivB4O3VsT2wm Oj8LorNd4he/Xvh/jBUe20B1r8TmIZCdqHeHchYAANyC5FjhsTt1RtF5DkQnWiD4LvuJjixReJZc xrLNylp4xmbltRIeL9mJ0p1BiQ3lLAAAuGbRya6levrKis54y8pX3l6dxbH0ZCdqVh6U8DzLfrqj X+p0x1s2SDkLAACuWXjs9FU0Zm5Fx56BZRcIeqUrylgHmql3Kvqd/El37gPZeQhkh3IWAABcs+RY 4dHlK2/6KpIdu1Mn6tUh2TngP8trVh6XA97JfjnLu7V6d0QoZwEAwHWJTnaiuXfIpxUdr1fnYpqS L0l2vP8420X+In/KWfdGemwpi+ksAAC4FeGJylfemPlvwflb+lKdxZevLkl2bLOyTnf0KHor3cnK WfrMLBHKWQAAcLmSY4XHm76yywPt7Yf4m5IvpnR1abJjhUdkf/fOoIQnk54o3eHsLAAAuBbRseGA N31ly1c61dHTV79k96BPrzGZMtYR/yN1LDfIn3KWbViOZCc6FV2fjk66AwAAl3adzJYHVspXP5Ts vF666Fya7GTlrJX8OUqiIjs23bH9OyK7k1oIDwAAXEoYsJXalmQrOv8Y0bmYgz6vSXas8Ij45Sw9 oaUlp9W7Y5MdxtEBAOAaROdN9rckV0Unkh25JOFZX8F/bKWc5cmOFR5PekQJDwAAwNJFJxsz97Yk /y35QZ8XXb66ZNlplbMGJS9eSeu+ITu2WZn+HQAAWPp1sXdL8t+y36tzdeWrS5YdKzwiu+Use3aW TXjupXaMBOPoAACw9Guhfj0SnXH6yqY5UarzKldSvrp02bH/0fo/eezdeRE/3clkJ5rOGhAeAABY 8PXPpjrePp0f8ifR0aKjd+roLclXITqXLjutZYO2nGV38ETlrEH2j5OgfwcAAJYoOlvnF36d6nil Kys7XlPyVZSvrkF2rPCI7J+d5Z2fdR+ITiXdoX8HAACWJDqV4yD+cWQnOxLiqlKda5Ad7z/fm87y 0p2q9FipYf8OAACc+5oXTV7ZfTqR6NhNyVlT8kWLzrXIjlfOWslu3VIvD1wXRCfaqsz+HQAAOPcv 9vqX+3GfzntDdP79efNSnawheXsND9w1JTtROcsraXmiU21WFqFhGQAAziM6XukqO+DT69PRqY49 0dwe9CnXIDzrK/1m0OmO3b1jS1pr6ZvMEqFhGQAAziM6rcWBnuj8uyA6H9cqOtcmO166M8rIaL06 3bGNy1aA7oSGZQAAWJbotBqSI9Gx5SuvT8fr1bkKrjHZWZlvjGi7spfwVEVHQ8MyAACcQnRaDck/ jOxo0RllR4uOnb6yfTpXIzzrK/7mEPmT7thxdLuD586RHW8qiwNDAQDgXNc2ryHZHgVhE53xpbcl +eqWB96S7HhGbMfRbcPynSM6Vnai09FFaFgGAIDjXsMqDcladLzpq6s9DuJWZScaR3+X/ZJWtGn5 TvbLWV66I7LfsIzwAADAHKLjla+miM5PJTqvRnSusk/nFmTHCo/IbsNyq6TlvR2lOyK752chPAAA MJfojJIzRXT+NqKjy1c3k+pcu+zYb5ysf8c2Lkfyk/XuCMIDAAAzi45NdLIzr6zs6EM+bfnqasfM b1F2bLpjD0vzSlr2PC1vMqsynQUAADBVdLaJ6OgNyaPo/I/U+3RuSnRuQXas8GzU+1dKeFoJT0V4 rPgwkg4AAFNFR5eusjOv/p2Izs3t07ll2RHJ9++8yW55KpOeQdrpzloYSQcAgOmio8tXkejYslXU pzOKzpvE515dvfCsb/AbSmS3f0fEP0MrkxwrO5H4MJIOAAC9opMtDYx6dFp9OjrR2dyS6Nya7Nhv LlvS8tIdL+mxstM6PwvhAQCAyrVJT155iY6Wnf9RN69Pxx7w+WEk52ZE5xZlp9Kw3JIeT3ZWieyw gwcAAKJfvHXZSl+PosM9/y1+omMbknWfjm1IvplenVuVHSs8UcNyr/QMifT85g7hAQAAR3R0+aq1 HXmUG5vo/C35huSba0hGdnaFR1u17d/plR5PcuzHQXgAABAdkXxpYLRLx4qOd+7VWL7ylgbeVJ8O suP/Z28OlJ1WuiMIDwAAoiPx0sA3R3Ss5ESiY08y946DuEnRuXXZsd98dkJLHOnpFR1PZBAeAABE Z1sQHTtiXl0c6EnOzYoOshOfnyWy32zsiU9ryaD+WAgPAACi4y0NfJd4O7Lt0/kfJTo/pXaS+c32 6iA7sfBo214lotMqcWUTWggPAMDtio6dvHpRohP16HgNyT8T0bnphmRkpy08m+DveKLTalJuyQvC AwBwe6KTHQOhTzHPdul4fTqR6Ny88CA7vvB4Y+lZ4/JqouwgPAAAiI5XurLNyFp2es68ItlBdlLh kc9vmtXnN1JVeiLZWSE8AACIjtR7dPTLSqJz8yPmyE7/N6ko4ZFEdqrbk1sgPAAA1y06epeOtx35 b0d0xpKWTnTGPh2b6Nz8iDmyM/0btio7cqDsIDwAANcrOl6ikzUj2z4dPXk1HifBLh1k5+BvWG8k /SP4+9lenV4QHgCA6xedbGlgJjreKebs0kF2ZhceEf9ICGm8D+EBALgd0RlFpKcZOTvFnF06yM7J hEcf1jaH1CA8AACXLzladPQOnQ/Z3Yz861NexkRnlJv//rzppYGtwz0RHWTnaMKj0533jo+xmvjD g/AAAFym6ExJdHSq0xIdlgYiOycTno8Z5EYa36wIDwDAMkVHtzl4R0C8iL8wcBSd/zYv7Yi5PsWc pYHIzlmFZy6psb8h6LfvEB4AgMWJTuX0cp3o/CO7iY4uXUVLA70Rc0QH2Vm88PQK0Sg645EUWngE 6QEAWITovDdExzsCIpu80tuR34WlgcjOBQvPNrjpP7s3/2YwkkPKAwBwPtGxywLtHh1duoomr/5x REf36WyEXTrIzgUKz7ZDgPT77pTo2JQH4QEAOI/ojEv+9Fbk6AiI7ATzrEcH0UF2LkJ4to0fHP0D 1IoqbbqD8AAAnF509LLA6PiHv43gRKLjnXfFdmRk5yKFJ/s4kex4t7WRHoQHAOA0omOXBb7Jnx06 0TlXnujohYG6RwfRQXauSngikdkUxOc3dwgPAMBRJUekvSzQjpaPE1f2QE97qKfeo6OnrujRQXau SnjsVuboViltITwAAKcRnfdEdEaZ8fpzsrOuEB1k5yqFJ0t1WtLj7Vi4E0bTAQDmEp1sWWBLdP4n EJ1/JD7Uk2ZkZOfqhMebsoqkJpIefbOj6UxqAQAcJjpRovOaiE40Wu5NXHlHQHzIbpKP6CA7Fyk8 3jfvNvnBakmOd7sTJrUAAOYSnY9EdPQOHZvo6H4dnej8kvpZV4gOsnOxwvPu/D0rOq1kpyVANC4D APRJjkjciOwtC7THP0Q9OlZ0XhAdZOeWhKe1Z6f3Fi0ipI8HACAXHdufk+3Q8Y5/8MbL/1aio0fL sx06iA6yc1XCUylj9aY7nvTo/1v6eAAAfNHJJq7GrcijsHjHP+iSld2hY7cijwL1IZx1hexcufCs AtHxduzY20fyeiQ99PEAAMS/bFYmrkbR8RKdfweiY3fo2EQH0UF2rlp4RPxJrUo560N2a8kfgfRY caKPBwB4Ht59actWrYmrLNHRE1dWdN4QHWQH4dkVHU96toH0fCTSs0l+oOjjAYBbFp2obDUmOmN/ TnT8g71lo+XRskD7vA/IztULj/2Gb21W/ijcIuGxfTz6RsoDANcqOSLtspUWHW9Z4N+B6Oj+HDta zrJAZAfhUe/zUp5sB8+H+W3kvSA+Xh+PV9YSpAcArkh0WmWrUXK8iSsv0Rnf/kf8wzxZFojsQEF4 WhuWrexUE57ftwcjPNtEehAeALgG0amUraKJq78D2flH/P4cduggOxD8MIqRi9ZoetSk3Ep6rPis P29bJT12WkuQHgC44OdV75fFrGzl7dDRL72xct2fww4dZAeSH87KaHprMsuTnHfzg+fVjtdGbEh5 AOCSRSf6JbFVtvrREJ2obDVOXEWnliM6yA44wiOyP5pemcx6l/105z2RIZvy6BH1lZDyAMBlSU70 XFktW0Wi84/sHvuQHf3AaDmyAxOEp7J0sCU7WWnrMRCesaRFygMAl5LmiORlK+98K1u2+jtJc3TZ Su/PifpzEB1kB4rCM0pP9BtLVs7Sv8m8mx9MT34elPTcCSkPAFxumrMxz4He+VY/HNGxvTk2zfH2 5+g0ZxNIGCA70BCebfGHO2pW9mQnkh4tPKQ8AHBJac7WPAe+KdH5pUQnK1t5TchR2Yr+HGQHZvyt RaTeuBylO1p27G388yfxe3lIeQBgyWlO1IScbUOOEh2vCVmLjtf7SNkK2YEZfri9xuXektab+S1H v7TSM/by3AspDwBcRprTU7b6p5Hm/DBpTnS+FaKD7MCRhaeV8kSy85rIjpWeR1IeAFhomuM1IXuH eOptyHZRYFS2am1D9spWiA6yA0cQnmyfxNY8AWTSY29eL4+X8gyf0kPKAwCnlJzolzqd5rTGyq3k ULZCdmChP/w24ZHik4G9ebLz5ojPo/gNzIOwfRkAjvNc55Ws9KSVbUL2ylY/lNR4kuPtzqFshezA AlOejdR6eKrpjhWfbGJrLGtp4bEnqSM9ADBHmuP15nhLAr3+nH+CNOen5GdbWdERRAfZgfMJjzg/ jK0enqrsaOl5Uh/rXvzyFqUtAJhTcqppji1b/dOQnFF0XoSyFbIDFyE8W9ltGM6a+Fopz0tDfGxp SwvP2MsjQgMzAPRJjohfsop+UdO7c34moqMlJ2tCpmyF7MDCnywqx0y0RtJ7pOdLIDy6pDUIpS0A yJ+7vDTaGye3k1Z6d44nOp7k2CZkO5hB2QrZgQtKeSSRnuxoiaic9eKIjxak36WtByflsb08XmkL 6QG47TSnp2SVpTk20YlKVlkTMmUrZAcuTHi2JknZmt9WNs5vTdmUVquv5+nzYzwo8VnLbmnLTm1p 6UF4AG5XcuwGZO/wTq83R+/P+SdIcmzJKjry4cO5T4gOsgMLf0JppTzZWVrvsrt48CW5/f7zr4H0 6NLWRvypLVIegNuSHJH2UTdeA7JNczzRGV//GaQ5dsrUHo/DkkBkB2405fHKWVZ2xte/OsIzlrbW Snjo5wG4LdGJ+nKySdEX2d+b45Wtfsh+87FXsqpsQibNQXbghlKeqKz10kh6tBg9OSnP/afsrCXf zYP0AFxXmlM55iErWXlNyJnkeCWrVm8OooPswA2mPNlOnhfzW9eL+Q1qTHm09Dwo6fmQ3YWEA9ID cHOSUy1Z2TQnkpyf6t/qX76qaQ6ig+wAKc9eWaslO1p4Rul5NNKjhQfpAbh8wfEkx/slylsM6KU5 tjfH3nSSE5WsdAMyaQ6yA6Q84W9flZTnl/mtTD/xfDHC8yi7pa0p0oP4ACwrxRHp2+8V7czRk1Y/ xJ+usvtyfgWSQ5oDyA5PUqWUx5a03oPfyF4c2RlvX5X0PAUpT4/0CGkPwEVJTjRKrs+zaqU5VnKe zXOPnbKKJIc0B9kBUp6dt4dAerx9PJHo/FK/fX35FJ8vJuV5VMJTlR5BegAuSnJaJSuvN8dKju3L sZKTjZOT5iA7wBNYmvL0lrV+mSeyb+rlKD1fTNLzgPQAXKTkeGPknuS0GpB/BqJT7cvR2+H1/RLS HEB2oJryRP08bxKXtfSTmhaer07K0ys9K9lfToj0AMwvOCL75Z+N1Cas3pznhGfxe3N+GPHRE1bR KHm1ZIXoABcECL8n9MtRLEbZGPflrD+FZJSURyUuX4zYjKJjb18mSI9dTDiY+7vi+xxg9hTHS3u9 haTeAEPUm+NJTtR8/Ko+h5Wcjfg9OUgOcBGA0veFbRAelPDcKeHJpOeLkp6vndJjx9XtmVvZ9Jb3 tQBAnuKI5HtyojFyry/Hpjk/kxSn0nxs0xxKVoDswFFSnpVJVkbpuS8kPV+cxKclPd64ut3GPEh+ DIWQ9gCUUhyRuB/HK1e9y27f3pjEjMmMlhx9+2H+TA8zeEsBKVkBsgNnkR5dQrorJD2PSdLzJZCe 8e8/OknPWvzyVtbXQ9oDCE47xcn6cVorKLySlXfTf8dOWEWSY5uPkRxAduCo3yut0pYnPQ8m6Xkq SI+d3HqUeDHhWvK+HtIeQHJqKU5LcrwJTLsz59mRm5bkjB/7XfxRckpWgOzA2aXHS3q0hFSlJxMe nfI8St7T09vMjPgAKc5uihKNkEd9Oc+y35/z05Ege7yMTXJa+3JIcwDZgZN/72T9PMNE6fHSHm8/ z2MgPd7I+l0gPa0yFz8ncC2CI4UUJzsTz0tyfgWJznNDcnRPjh0jpy8HkB1YfMojRigOlZ4vQcLz VEh67p2kp1Liynp6+JmBSxEckXgBoG06fpf2wb92U/pz4fYrkRyb5HgTVpSsANmBq5Sex0R6vgTS Y5Oex6L0eM3M2c4exAeWLDgifpmqJ8XpkZxfidz0SI4da4/OsEJ0ANmBq5aeSH6eJkiPLnF5+3p0 2oP4wCUJjjgJjneUQ6VUFUnOL0dunhuCU+3J2ThfD5IDyA5cvfRE4vPFkZ+nidKTlbiyEXbEB04p NyJxSceWfWyKs1GCEaU4tun4xUjMc/DSCk7Uj4PkALIDSE8gPV7ak4mPJzxRM7MnPetEemziI1Jr bubnDOYWnFaZamqpKkty7PteCinOm+xuWkZyANkBpMdIj7eV2Ut7Hh3J8V5/TKTHW1JYFZ8pR1Tw cwctuZkiOK0FgG9JiuNJjn39ZUKKg+QAsgNIT0N6etOex0B4vMmtbGzdlrgy8VlJ+4gK5AemyI3I /iRVVKbSCYo9ymGK5ESNxp7gRNuOkRxAdoDvu07puXOkp1Lmim6PDemxaY8VH+8g0mriUzmugp/N 6xObTG4kSW8qZapqP07Uk1MVnFaK4+3IQXIA2QG+/xLpWTWkx0t7IvF5DITHlra8Ete9tMtcPeKD /NyG2EyRm6rgVEpVrZ6cluAcmuJskRxAdgDa0rOaMe3xyl2PQcoTiU+rzOWNsR8qPwjQZYuNvdj3 CI530rhtOPZKVa9KVKKSlX3fi/k3VnC8LcfRuVXsyQFkB6BDekTi87es9Nw50mPFx2tufkzeZ4Wn MsnVEp+ektch4+38bB9PalpiUxGcLL3JBMdLcd4cwfHKVlGTsT2jytuL827uWyQ4SA4gOwAzSY93 8Kg3vh6VuTz5yW4PzsuoxOWVuQ6RH5H5J734ua9fhFvL/CSQGnFEoFWe2pj0xCY4UakqKllF0mMT nKhMFU1UbQKBQ3IA2QE4kvREh4+2xCdKfR4awhM1M3vSM0V+ppa8KsnP6oaeG7YH/t2ekpQEUhON h09JcFqS8+qkNFH/zZRm400xxUFyANkBmOn7NEt7ot4e29+zDsQnSn482fFSnntHfO7N5281OB9S 8ooEsfJzv1rIc8vcF8tt8f3bwsvoaIaW3HgNxlZuIsl5DUTnpfjyVfZLVFGZihQHkB2AK0h7MvGJ Sl5e+uPJjtfIHPX3eFub50h9MgHq7QFaShK0neHvV8tRlZ6bjfT33rQSnKwXJxOd6H3ex3iXeJqq JTn2MUFyANkBOFPaEzU1j4JgRWItebnLSsxD4xZJz4MjVV7J607iJmdvtH0Qv48peizmkqDqn095 ftlO/LNeqWkJTaWpeFuQmx7BaSU5URnLS21aPTikOIDsAFxp2tOT+HjiY8telZf3xcSn1eCcHV1h U59K+hNJz6rxuFakc+pzzLbz7ZbUSHDB3so0uan03kRy05Kc10ai89YhNja98SapPhxxI8UBZAfg QtMeSaRnVRCfOyMi9xKXvu6T97XkJ2pubvX43AXSM6cAVURmakrUk8REF9wpi/sysdkWxCZb8vfh SMdbQXTeApmpik2U3lQTHFIcQHYAriTtkYnicydxz43XkHzfkJ+sqblXeu7M/a4mPz39P9JIfaZM ifU0CLf22vQIzqYoOC25qaQ4Wbmq92bToQ/npb3P2dI/JqoA2QG4gbSnR3yGIPXJ+n4qAtRqZr6X 9hj7IfIzx7h7pU+oRTbxtE1EqCo5Wb9Nb3oTJTnvTuLSEp73JK2JUhtvPDxKb1rj4qQ4gOwAID5h n0+U/kQCFMnPWvKRdfvv7Qh7dqvKT1V8vMdKpF4ay5KdSqkpS3mmCs6H+Mv9MsGJkpyq8LwHSU1F bD6c+xwlVRXBQXIA2QFAfFzxiZKfoUN+Ipm5T/7OuiA8UZmr1eszZaNz1gu1KiY8FVlplV6mNBdX SlSe4HwEQhKJS/b2R1FsrNxspb88heAAT/gA/Bx0iU8r+WklQJ6wrIs3r4R2V0x6MuGpjLZXG75X yb+VQHgqPTVZyuMt9tsmCU5FdLJE5yMRnvdEiFpS8xHc55bYIDgAyA7A7OIjQZpREaBW+esuEZsp gjNFeLyvKROdVjmsmuxkpadWP090TMMU0cmEJ2oMzpqGI6n5kHy0vTe5QXAAkB2AWcRHpL+sU0l/ WjLUIzKt/p1KWas6sRV9jatCuhOVoHov+D0bjT3ZqYjPh7T7aFpSkzUSRweHRkmWIDgAyA7AsX9W KtNJ1SQk6wEaOoWlV25a/TtTv55WutNKdTIRaB3nkPXpTJGfTeP1TeN1T9xaJanK6D2CA4DsAJwt 9emVn1VDGIainHh/ftf571uy0kp1op6fluxkk1NZ0uEdzLkp3D4KMhRJS1R+at3vav+RSFyaQm4A kB2ARaU+mfxk8tBq/B0ar7d260zZvSNSK2PZ99mv2V60bc9N1LdTbVKu7tSp/nlFZFpC09tvQ2kK ANkBuDr5kYJYDAfKUesoibnGzudqUJ5z/HxblKlN4X5UZKaa2gjpDQCyA3AL8lMRIJH5dt4Mxb9X WSq4lD07IvVjIloff06Z6dlUjNwAIDsAV/9z1zpxvFeIpCAuU87Gan3eIfk7LdmRQDgiqZgiPZW/ JzK9r4bUBgDZAYCJAjS3ELVeF8kPAe1Jn1pEAtKSDCkkKr2vV15WpQa5AUB2AGDiz+fqSFLUel+P XLU+RiQPh4rGdsLHrr6O2AAgOwCwgJ/Znh6hXnGqyk9FdKqSUU1Qth1vz1FqQmoAkB0AuBARav3b VefHXE24X9vOt3vl45CmYKQG4ML5vwIMADa9e26qZ/20AAAAAElFTkSuQmCC"/><circle cx="279.5" cy="278.9" r="275.9"/></g></g><g transform="translate(765.5 -314.1)" display="none"><circle cx="279.5" cy="278.9" r="275.9" display="inline" fill="#fff"/></g><g transform="matrix(.1205 0 0 .1205 22.81 21.75)" fill="none" opacity=".4007" stroke="url(#linearGradient5319)" stroke-linecap="round" stroke-linejoin="round"><g stroke-width="1.448"><polyline points="146.3 54.15 144.4 54.88 142.5 55.63 140.6 56.39 138.8 57.16 136.9 57.96 135.1 58.76 133.3 59.58 131.4 60.42 129.6 61.27 127.8 62.14 126.1 63.02 124.3 63.91 122.5 64.82 120.8 65.74 119 66.68 117.3 67.63 115.5 68.59 113.8 69.57 112.1 70.57 110.4 71.57 108.8 72.6 107.1 73.63 105.4 74.68 103.8 75.74 102.2 76.82 100.5 77.91 98.92 79.01 97.33 80.13 95.74 81.26 94.17 82.4 92.61 83.56 91.06 84.73"/><polyline points="91.06 84.73 89.52 85.91 88 87.1 86.49 88.31 85 89.53 83.51 90.76 82.04 92.01 80.58 93.27 79.14 94.54 77.71 95.82 76.29 97.12 74.89 98.43 73.5 99.75 72.12 101.1 70.76 102.4 69.41 103.8 68.07 105.1 66.75 106.5 65.45 107.9 64.16 109.3 62.88 110.7 61.62 112.2 60.37 113.6 59.13 115 57.92 116.5 56.71 118 55.52 119.4 54.35 120.9 53.19 122.4 52.05 123.9 50.92 125.5 49.8 127 48.71 128.5"/><polyline points="48.71 128.5 47.62 130.1 46.56 131.7 45.51 133.2 44.47 134.8 43.45 136.4 42.45 138 41.46 139.6 40.48 141.2 39.53 142.9 38.59 144.5 37.66 146.1 36.76 147.8"/><polyline points="210.5 38.89 208.4 39.12 206.3 39.37 204.2 39.63 202.1 39.91 200.1 40.21 198 40.52 195.9 40.85 193.8 41.19 191.8 41.55 189.7 41.93 187.7 42.32 185.6 42.72 183.6 43.15 181.6 43.59 179.5 44.04 177.5 44.51 175.5 45 173.5 45.5 171.5 46.02 169.5 46.55 167.5 47.1 165.6 47.66 163.6 48.24 161.6 48.84 159.7 49.45 157.7 50.07 155.8 50.71 153.9 51.37 152 52.04 150 52.73 148.1 53.43 146.3 54.15"/><polyline points="208.1 48.13 205.9 48.64 203.7 49.17 201.6 49.72 199.4 50.28 197.3 50.85 195.1 51.44 193 52.05 190.8 52.67 188.7 53.31 186.6 53.96 184.4 54.62 182.3 55.3 180.2 56 178.1 56.71 176 57.44 173.9 58.18 171.8 58.93 169.8 59.7 167.7 60.49 165.6 61.29 163.6 62.1 161.5 62.93 159.5 63.77 157.5 64.63 155.5 65.5 153.4 66.39 151.4 67.29 149.4 68.2 147.5 69.13 145.5 70.08 143.5 71.03 141.6 72"/><polyline points="141.6 72 139.6 72.99 137.7 73.98 135.7 75 133.8 76.02 131.9 77.06 130 78.11 128.1 79.18 126.2 80.26 124.4 81.35 122.5 82.46 120.6 83.58 118.8 84.71 117 85.86 115.2 87.01 113.3 88.18 111.5 89.37 109.8 90.56 108 91.77 106.2 93 104.5 94.23 102.7 95.48 101 96.73 99.29 98 97.59 99.29 95.9 100.6 94.22 101.9 92.55 103.2 90.9 104.5 89.26 105.9 87.63 107.2 86.01 108.6 84.41 110"/><polyline points="84.41 110 82.82 111.4 81.25 112.8 79.68 114.2 78.13 115.6 76.6 117 75.07 118.5 73.56 119.9 72.07 121.4 70.59 122.9 69.12 124.3 67.67 125.8 66.23 127.4 64.8 128.9 63.39 130.4 62 131.9 60.62 133.5 59.25 135 57.9 136.6 56.56 138.2 55.24 139.8 53.93 141.4 52.64 143 51.36 144.6 50.1 146.2 48.85 147.8 47.62 149.5 46.41 151.1 45.21 152.8 44.02 154.4 42.85 156.1 41.7 157.8 40.56 159.5"/><polyline points="40.56 159.5 39.44 161.2 38.34 162.9 37.25 164.6 36.18 166.3 35.12 168 34.08 169.8 33.06 171.5 32.05 173.3 31.06 175 30.09 176.8 29.13 178.5 28.19 180.3 27.27 182.1 26.36 183.9 25.47 185.7 24.6 187.5 23.75 189.3 22.91 191.1 22.09 192.9 21.28 194.8 20.5 196.6 19.73 198.4 18.98 200.3 18.24 202.1 17.52 204 16.83 205.8 16.14 207.7 15.48 209.6 14.83 211.4 14.2 213.3 13.59 215.2 13 217.1"/><polyline points="13 217.1 12.43 219 11.87 220.9 11.33 222.8 10.81 224.7 10.3 226.6 9.818 228.5 9.351 230.4 8.901 232.3 8.469 234.2 8.056 236.2 7.662 238.1 7.285 240 6.926 241.9 6.586 243.9 6.264 245.8 5.959 247.7 5.674 249.7 5.407 251.6 5.159 253.6 4.928 255.5 4.716 257.5 4.522 259.4 4.347 261.4 4.19 263.3 4.052 265.3 3.932 267.2 3.831 269.2 3.748 271.1 3.683 273.1 3.636 275 3.608 277 3.599 278.9"/><polyline points="13 314.6 13.01 316.6 13.04 318.6 13.08 320.5 13.15 322.4 13.23 324.4 13.32 326.3 13.44 328.3 13.58 330.2 13.73 332.1 13.9 334.1 14.08 336 14.29 337.9 14.51 339.8 14.75 341.7 15.01 343.6 15.28 345.5 15.58 347.4 15.89 349.3 16.22 351.2 16.56 353.1 16.93 355 17.31 356.8 17.71 358.7 18.12 360.6 18.56 362.4 19.01 364.3 19.48 366.1 19.97 368 20.47 369.8 20.99 371.6 21.53 373.5 22.08 375.3"/><polyline points="48.71 190.4 47.63 192.2 46.56 194.1 45.51 195.9 44.47 197.8 43.45 199.7 42.45 201.5 41.46 203.4 40.49 205.3 39.53 207.2 38.59 209.1 37.67 210.9 36.76 212.8 35.87 214.8 34.99 216.7 34.13 218.6 33.29 220.5 32.46 222.4 31.65 224.3 30.86 226.3 30.08 228.2 29.32 230.1 28.58 232.1 27.86 234 27.15 235.9 26.46 237.9 25.78 239.8 25.12 241.8 24.48 243.7 23.86 245.7 23.25 247.7 22.66 249.6 22.08 251.6"/><polyline points="22.08 251.6 21.53 253.5 20.99 255.5 20.47 257.5 19.97 259.5 19.48 261.4 19.01 263.4 18.56 265.4 18.12 267.3 17.71 269.3 17.31 271.3 16.93 273.3 16.56 275.2 16.22 277.2 15.89 279.2 15.58 281.2 15.28 283.2 15.01 285.1 14.75 287.1 14.51 289.1 14.29 291.1 14.08 293 13.9 295 13.73 297 13.58 298.9 13.44 300.9 13.32 302.9 13.23 304.8 13.15 306.8 13.08 308.8 13.04 310.7 13.01 312.7 13 314.6"/><polyline points="91.06 135.2 89.53 136.8 88 138.4 86.49 140 85 141.7 83.51 143.3 82.04 144.9 80.58 146.6 79.14 148.2 77.71 149.9 76.29 151.6 74.89 153.3 73.5 155 72.12 156.7 70.76 158.4 69.41 160.1 68.08 161.8 66.76 163.5 65.45 165.3 64.16 167 62.88 168.8 61.62 170.5 60.37 172.3 59.14 174.1 57.92 175.9 56.71 177.7 55.52 179.5 54.35 181.3 53.19 183.1 52.05 184.9 50.92 186.7 49.81 188.6 48.71 190.4"/><polyline points="146.3 89.86 144.4 91.09 142.5 92.34 140.6 93.6 138.8 94.88 136.9 96.16 135.1 97.46 133.3 98.78 131.4 100.1 129.6 101.4 127.8 102.8 126.1 104.1 124.3 105.5 122.5 106.9 120.8 108.3 119 109.7 117.3 111.1 115.5 112.5 113.8 114 112.1 115.4 110.4 116.9 108.8 118.4 107.1 119.8 105.4 121.3 103.8 122.8 102.2 124.3 100.5 125.9 98.93 127.4 97.33 128.9 95.74 130.5 94.17 132.1 92.61 133.6 91.06 135.2"/><polyline points="22.08 375.3 22.66 377.1 23.25 378.9 23.86 380.7 24.48 382.5 25.12 384.3 25.78 386 26.46 387.8 27.15 389.6 27.86 391.3 28.58 393.1 29.33 394.8 30.08 396.5 30.86 398.2 31.66 400 32.46 401.7 33.29 403.4 34.13 405.1 34.99 406.7 35.87 408.4"/><polyline points="210.5 57.37 208.4 58.17 206.3 58.98 204.2 59.8 202.1 60.64 200.1 61.5 198 62.37 195.9 63.25 193.8 64.15 191.8 65.06 189.7 65.99 187.7 66.93 185.6 67.88 183.6 68.85 181.6 69.83 179.5 70.83 177.5 71.84 175.5 72.87 173.5 73.91 171.5 74.96 169.5 76.02 167.5 77.1 165.6 78.2 163.6 79.3 161.6 80.42 159.7 81.56 157.7 82.7 155.8 83.86 153.9 85.04 152 86.22 150.1 87.42 148.2 88.63 146.3 89.86"/><polyline points="217.7 65.98 215.8 67.04 213.9 68.11 212 69.2 210.2 70.3 208.3 71.42 206.4 72.54 204.6 73.69 202.7 74.84 200.9 76.01 199 77.19 197.2 78.39 195.3 79.6 193.5 80.82 191.7 82.06 189.9 83.31 188.1 84.58 186.3 85.85 184.5 87.14 182.7 88.44 180.9 89.76 179.1 91.08 177.4 92.42 175.6 93.78 173.8 95.14 172.1 96.52 170.3 97.9 168.6 99.31 166.9 100.7 165.2 102.1 163.4 103.6 161.7 105 160 106.5"/><polyline points="98.58 487.2 97.31 486.1 96.05 485 94.81 483.8 93.57 482.7 92.35 481.5 91.14 480.3 89.95 479.1 88.76 477.9 87.59 476.7 86.44 475.4 85.29 474.2 84.16 472.9 83.04 471.6 81.93 470.3 80.84 469 79.76 467.7 78.69 466.4 77.64 465.1 76.6 463.7 75.58 462.3 74.56 460.9 73.57 459.6 72.58 458.1"/><polyline points="48.71 407.4 49.22 409.1 49.75 410.9 50.3 412.6 50.86 414.3 51.43 416 52.02 417.7 52.63 419.4 53.25 421.1 53.89 422.7 54.54 424.4 55.2 426 55.88 427.7 56.58 429.3 57.29 430.9 58.02 432.5 58.76 434.1 59.51 435.7 60.28 437.3 61.07 438.8 61.87 440.4 62.68 441.9 63.51 443.5 64.36 445 65.21 446.5 66.08 448 66.97 449.5 67.87 450.9 68.78 452.4 69.71 453.9 70.66 455.3 71.61 456.7 72.58 458.1"/><polyline points="160 106.5 158.4 108 156.7 109.4 155 110.9 153.3 112.4 151.7 114 150 115.5 148.4 117 146.8 118.6 145.1 120.1 143.5 121.7 141.9 123.3 140.3 124.9 138.7 126.5 137.2 128.1 135.6 129.7 134.1 131.4 132.5 133 131 134.7 129.4 136.3 127.9 138 126.4 139.7 124.9 141.4 123.4 143.1 122 144.8 120.5 146.5 119 148.2 117.6 149.9 116.2 151.7 114.8 153.4 113.3 155.2 111.9 157 110.6 158.8"/><polyline points="110.6 158.8 109.2 160.5 107.8 162.3 106.5 164.1 105.1 165.9 103.8 167.8 102.5 169.6 101.2 171.4 99.86 173.2 98.58 175.1 97.31 176.9 96.05 178.8 94.81 180.7 93.57 182.5 92.35 184.4 91.14 186.3 89.95 188.2 88.76 190.1 87.59 192 86.43 193.9 85.29 195.8 84.16 197.7 83.04 199.7 81.93 201.6 80.84 203.5 79.76 205.5 78.69 207.4 77.64 209.4 76.6 211.3 75.58 213.3 74.56 215.3 73.57 217.2 72.58 219.2"/><polyline points="40.57 347.9 40.58 349.9 40.6 351.8 40.64 353.8 40.7 355.7 40.77 357.6 40.86 359.6 40.96 361.5 41.08 363.4 41.22 365.3 41.37 367.2 41.54 369.1 41.72 371 41.92 372.9 42.14 374.8 42.37 376.6 42.61 378.5 42.88 380.4 43.16 382.2 43.45 384.1 43.76 385.9 44.09 387.8 44.43 389.6 44.79 391.4 45.16 393.2 45.55 395 45.96 396.8 46.38 398.6 46.81 400.4 47.26 402.1 47.73 403.9 48.21 405.7 48.71 407.4"/><polyline points="48.71 283.7 48.21 285.8 47.73 287.8 47.26 289.8 46.81 291.9 46.38 293.9 45.96 295.9 45.55 297.9 45.16 300 44.79 302 44.43 304 44.09 306 43.76 308.1 43.45 310.1 43.16 312.1 42.88 314.1 42.61 316.1 42.37 318.1 42.14 320.2 41.92 322.2 41.72 324.2 41.54 326.2 41.37 328.2 41.22 330.2 41.08 332.1 40.96 334.1 40.86 336.1 40.77 338.1 40.7 340.1 40.64 342 40.6 344 40.58 346 40.57 347.9"/><polyline points="72.58 219.2 71.61 221.2 70.66 223.2 69.71 225.1 68.78 227.1 67.87 229.1 66.97 231.1 66.08 233.1 65.21 235.1 64.35 237.1 63.51 239.1 62.68 241.1 61.87 243.2 61.07 245.2 60.28 247.2 59.51 249.2 58.76 251.2 58.02 253.2 57.29 255.3 56.58 257.3 55.88 259.3 55.2 261.4 54.54 263.4 53.89 265.4 53.25 267.4 52.63 269.5 52.02 271.5 51.43 273.6 50.86 275.6 50.3 277.6 49.75 279.7 49.22 281.7 48.71 283.7"/><polyline points="91.07 311.3 90.66 313.4 90.26 315.5 89.88 317.6 89.52 319.7 89.16 321.8 88.82 323.8 88.48 325.9 88.17 328 87.86 330.1 87.57 332.1 87.29 334.2 87.02 336.3 86.77 338.3 86.53 340.4 86.3 342.4 86.09 344.5 85.89 346.5 85.7 348.5 85.52 350.6 85.36 352.6 85.21 354.6 85.07 356.6 84.95 358.6 84.84 360.6 84.74 362.6 84.65 364.6 84.58 366.6 84.52 368.6 84.48 370.6 84.44 372.6 84.42 374.5 84.42 376.5"/><polyline points="141.6 179 140.4 180.9 139.3 182.9 138.2 184.8 137.1 186.8 136 188.8 135 190.7 133.9 192.7 132.8 194.7 131.8 196.7 130.7 198.7 129.7 200.7 128.7 202.8 127.7 204.8 126.7 206.8 125.7 208.8 124.7 210.9 123.8 212.9 122.8 214.9 121.9 217 120.9 219 120 221.1 119.1 223.2 118.2 225.2 117.3 227.3 116.4 229.4 115.5 231.4 114.7 233.5 113.8 235.6 113 237.7 112.2 239.8 111.4 241.9 110.6 243.9"/><polyline points="229 73.38 227.5 74.66 225.9 75.96 224.4 77.27 222.9 78.59 221.4 79.93 219.8 81.28 218.3 82.65 216.8 84.03 215.3 85.42 213.8 86.82 212.3 88.24 210.8 89.67 209.3 91.11 207.8 92.56 206.3 94.03 204.9 95.51 203.4 97 201.9 98.5 200.5 100 199 101.5 197.5 103.1 196.1 104.6 194.7 106.2 193.2 107.8 191.8 109.4 190.4 111 189 112.6 187.5 114.2 186.1 115.8 184.7 117.5 183.4 119.1 182 120.8"/><polyline points="110.6 243.9 109.8 246 109 248.1 108.2 250.2 107.5 252.3 106.7 254.4 106 256.5 105.2 258.6 104.5 260.7 103.8 262.8 103.1 265 102.5 267.1 101.8 269.2 101.2 271.3 100.5 273.4 99.89 275.5 99.27 277.6 98.66 279.7 98.07 281.8 97.49 284 96.92 286.1 96.37 288.2 95.82 290.3 95.29 292.4 94.77 294.5 94.26 296.6 93.77 298.7 93.29 300.8 92.82 302.9 92.36 305 91.92 307.1 91.48 309.2 91.07 311.3"/><polyline points="182 120.8 180.6 122.4 179.2 124.1 177.8 125.8 176.5 127.5 175.1 129.2 173.8 131 172.5 132.7 171.1 134.5 169.8 136.2 168.5 138 167.2 139.7 165.9 141.5 164.6 143.3 163.3 145.1 162 146.9 160.7 148.8 159.5 150.6 158.2 152.4 157 154.3 155.7 156.1 154.5 158 153.3 159.8 152.1 161.7 150.9 163.6 149.7 165.5 148.5 167.4 147.3 169.3 146.1 171.2 145 173.1 143.8 175.1 142.7 177 141.6 179"/><polyline points="141.6 516.9 140.4 516 139.3 515.2 138.2 514.4 137.1 513.5 136 512.6 135 511.7 133.9 510.8 132.8 509.8 131.8 508.9 130.7 507.9 129.7 506.9 128.7 505.9 127.7 504.9 126.7 503.9 125.7 502.8 124.7 501.8 123.8 500.7 122.8 499.6 121.9 498.5 120.9 497.4 120 496.3 119.1 495.1 118.2 494 117.3 492.8 116.4 491.6 115.5 490.4 114.7 489.2 113.8 488 113 486.7 112.2 485.4 111.4 484.2 110.6 482.9"/><polyline points="155.7 525.5 154.5 524.9 153.3 524.2 152.1 523.6 150.9 522.9 149.7 522.2 148.5 521.5 147.3 520.8 146.1 520 145 519.3 143.8 518.5 142.7 517.7 141.6 516.9"/><polyline points="84.42 376.5 84.42 378.4 84.44 380.4 84.48 382.3 84.52 384.3 84.58 386.2 84.65 388.1 84.74 390 84.84 391.9 84.95 393.8 85.07 395.7 85.21 397.6 85.36 399.4 85.52 401.3 85.7 403.2 85.89 405 86.09 406.8 86.3 408.7 86.53 410.5 86.77 412.3 87.02 414.1 87.29 415.9 87.57 417.7 87.86 419.5 88.17 421.2 88.48 423 88.82 424.7 89.16 426.5 89.52 428.2 89.88 429.9 90.26 431.6 90.66 433.3 91.07 435"/><polyline points="110.6 482.9 109.8 481.6 109 480.3 108.2 478.9 107.5 477.6 106.7 476.3 106 474.9 105.2 473.5 104.5 472.1 103.8 470.7 103.1 469.3 102.5 467.9 101.8 466.4 101.2 464.9 100.5 463.5 99.89 462 99.27 460.5 98.66 459 98.07 457.5 97.49 455.9 96.92 454.4 96.37 452.8 95.82 451.3 95.29 449.7 94.77 448.1 94.27 446.5 93.77 444.9 93.29 443.3 92.82 441.6 92.36 440 91.92 438.4 91.48 436.7 91.07 435"/><polyline points="160 501.9 159.5 500.7 158.9 499.4 158.4 498.2 157.9 496.9 157.3 495.7 156.8 494.4 156.3 493.1 155.8 491.8 155.3 490.4 154.8 489.1 154.3 487.7 153.9 486.4 153.4 485 152.9 483.6 152.5 482.2 152.1 480.8 151.6 479.3 151.2 477.9 150.8 476.4 150.4 474.9 150 473.4 149.6 471.9 149.2 470.4 148.9 468.9 148.5 467.3 148.2 465.8 147.8 464.2 147.5 462.6 147.2 461 146.9 459.4 146.6 457.8 146.3 456.2"/><polyline points="160 262.9 159.5 265.1 158.9 267.3 158.4 269.5 157.9 271.7 157.3 273.8 156.8 276 156.3 278.2 155.8 280.4 155.3 282.6 154.8 284.8 154.3 287 153.9 289.1 153.4 291.3 152.9 293.5 152.5 295.7 152.1 297.9 151.6 300.1 151.2 302.2 150.8 304.4 150.4 306.6 150 308.8 149.6 310.9 149.2 313.1 148.9 315.3 148.5 317.4 148.2 319.6 147.8 321.7 147.5 323.9 147.2 326.1 146.9 328.2 146.6 330.4 146.3 332.5"/><polyline points="243.8 79.05 242.7 80.51 241.6 81.98 240.5 83.46 239.5 84.96 238.4 86.47 237.3 87.99 236.2 89.52 235.2 91.07 234.1 92.63 233 94.2 232 95.79 230.9 97.39 229.9 99 228.8 100.6 227.8 102.3 226.7 103.9 225.7 105.6 224.6 107.2 223.6 108.9 222.6 110.6 221.6 112.3 220.5 114 219.5 115.7 218.5 117.5 217.5 119.2 216.5 121 215.5 122.7 214.5 124.5 213.5 126.3 212.5 128.1 211.5 129.9 210.5 131.7"/><polyline points="146.3 456.2 146 454.5 145.7 452.9 145.4 451.2 145.2 449.5 144.9 447.9 144.7 446.2 144.4 444.5 144.2 442.7 144 441 143.8 439.3 143.6 437.5 143.4 435.7 143.2 434 143.1 432.2 142.9 430.4 142.7 428.6 142.6 426.8 142.5 424.9 142.3 423.1 142.2 421.3 142.1 419.4 142 417.5 141.9 415.7 141.9 413.8 141.8 411.9 141.7 410 141.7 408.1 141.6 406.2 141.6 404.2 141.6 402.3 141.6 400.4 141.6 398.4"/><polyline points="182 194.5 181.2 196.5 180.4 198.6 179.6 200.7 178.8 202.8 178.1 204.9 177.3 207 176.5 209.1 175.8 211.2 175.1 213.3 174.3 215.4 173.6 217.6 172.9 219.7 172.2 221.8 171.5 224 170.8 226.1 170.1 228.3 169.4 230.4 168.7 232.6 168 234.7 167.4 236.9 166.7 239 166.1 241.2 165.4 243.4 164.8 245.5 164.2 247.7 163.6 249.9 163 252 162.4 254.2 161.8 256.4 161.2 258.6 160.6 260.7 160 262.9"/><polyline points="146.3 332.5 146 334.6 145.7 336.8 145.4 338.9 145.2 341 144.9 343.2 144.7 345.3 144.4 347.4 144.2 349.5 144 351.6 143.8 353.7 143.6 355.8 143.4 357.9 143.2 360 143.1 362.1 142.9 364.1 142.7 366.2 142.6 368.3 142.5 370.3 142.3 372.4 142.2 374.4 142.1 376.5 142 378.5 141.9 380.5 141.9 382.5 141.8 384.5 141.7 386.5 141.7 388.5 141.6 390.5 141.6 392.5 141.6 394.5 141.6 396.5 141.6 398.4"/><polyline points="202.9 544 201.9 543.7 201 543.4 200.1 543.1 199.2 542.8 198.2 542.4 197.3 542 196.4 541.6 195.5 541.2 194.6 540.8 193.8 540.4 192.9 539.9 192 539.4 191.1 538.9 190.3 538.4 189.4 537.9 188.6 537.4 187.7 536.8 186.9 536.2 186 535.6 185.2 535 184.4 534.4 183.6 533.7 182.8 533.1 182 532.4"/><polyline points="182 532.4 181.2 531.7 180.4 531 179.6 530.2 178.8 529.5 178.1 528.7 177.3 527.9 176.5 527.1 175.8 526.3 175.1 525.5 174.3 524.6 173.6 523.8 172.9 522.9 172.2 522 171.5 521.1 170.8 520.1 170.1 519.2 169.4 518.2 168.7 517.2 168 516.2 167.4 515.2 166.7 514.2 166.1 513.2 165.4 512.1 164.8 511 164.2 509.9 163.6 508.8 163 507.7 162.4 506.6 161.8 505.4 161.2 504.3 160.6 503.1 160 501.9"/><polyline points="210.5 131.7 209.6 133.6 208.6 135.4 207.6 137.3 206.7 139.1 205.7 141 204.8 142.9 203.8 144.7 202.9 146.6 201.9 148.5 201 150.4 200.1 152.4 199.2 154.3 198.2 156.2 197.3 158.2 196.4 160.1 195.5 162.1 194.6 164.1 193.8 166 192.9 168 192 170 191.1 172 190.3 174 189.4 176 188.6 178.1 187.7 180.1 186.9 182.1 186 184.2 185.2 186.2 184.4 188.3 183.6 190.3 182.8 192.4 182 194.5"/><polyline points="261 82.62 260.5 84.18 259.9 85.76 259.3 87.35 258.8 88.96 258.2 90.58 257.7 92.2 257.1 93.85 256.6 95.5 256 97.17 255.5 98.85 254.9 100.5 254.4 102.2 253.8 104 253.3 105.7 252.7 107.4 252.2 109.2 251.6 110.9 251.1 112.7 250.6 114.5 250 116.3 249.5 118.1 249 119.9 248.5 121.7 247.9 123.6 247.4 125.4 246.9 127.3 246.4 129.1 245.9 131 245.3 132.9 244.8 134.8 244.3 136.7 243.8 138.6"/><polyline points="217.7 274.9 217.4 277.1 217.1 279.3 216.8 281.6 216.5 283.8 216.3 286.1 216 288.3 215.7 290.5 215.5 292.8 215.2 295 215 297.2 214.7 299.5 214.5 301.7 214.2 303.9 214 306.2 213.8 308.4 213.5 310.6 213.3 312.8 213.1 315 212.9 317.3 212.7 319.5 212.5 321.7 212.3 323.9 212.1 326.1 211.9 328.3 211.7 330.5 211.5 332.7 211.4 334.9 211.2 337.1 211 339.3 210.8 341.5 210.7 343.6 210.5 345.8"/><polyline points="217.7 513.8 217.4 512.7 217.1 511.5 216.8 510.3 216.5 509.1 216.3 507.9 216 506.6 215.7 505.4 215.5 504.1 215.2 502.9 215 501.6 214.7 500.3 214.5 498.9 214.2 497.6 214 496.2 213.8 494.9 213.5 493.5 213.3 492.1 213.1 490.7 212.9 489.3 212.7 487.8 212.5 486.4 212.3 484.9 212.1 483.4 211.9 481.9 211.7 480.4 211.5 478.9 211.4 477.4 211.2 475.8 211 474.3 210.9 472.7 210.7 471.1 210.5 469.5"/><polyline points="243.8 138.6 243.3 140.6 242.8 142.5 242.3 144.4 241.8 146.4 241.3 148.4 240.8 150.3 240.3 152.3 239.8 154.3 239.4 156.3 238.9 158.3 238.4 160.3 237.9 162.3 237.4 164.4 237 166.4 236.5 168.4 236 170.5 235.6 172.5 235.1 174.6 234.7 176.7 234.2 178.8 233.8 180.8 233.3 182.9 232.9 185 232.4 187.1 232 189.3 231.6 191.4 231.1 193.5 230.7 195.6 230.3 197.8 229.9 199.9 229.4 202 229 204.2"/><polyline points="210.5 345.8 210.4 348 210.2 350.1 210.1 352.3 210 354.4 209.8 356.6 209.7 358.7 209.6 360.9 209.5 363 209.4 365.1 209.3 367.3 209.2 369.4 209.1 371.5 209 373.6 208.9 375.7 208.8 377.8 208.7 379.9 208.6 381.9 208.6 384 208.5 386.1 208.4 388.1 208.4 390.2 208.3 392.2 208.3 394.3 208.3 396.3 208.2 398.3 208.2 400.3 208.2 402.3 208.1 404.3 208.1 406.3 208.1 408.3 208.1 410.2 208.1 412.2"/><polyline points="210.5 469.5 210.4 467.9 210.2 466.3 210.1 464.6 210 463 209.8 461.3 209.7 459.6 209.6 457.9 209.5 456.2 209.4 454.5 209.3 452.8 209.2 451.1 209.1 449.3 209 447.6 208.9 445.8 208.8 444 208.7 442.2 208.6 440.4 208.6 438.6 208.5 436.8 208.4 435 208.4 433.1 208.3 431.3 208.3 429.4 208.3 427.5 208.2 425.6 208.2 423.8 208.2 421.9 208.1 419.9 208.1 418 208.1 416.1 208.1 414.1 208.1 412.2"/><polyline points="242.8 552.4 242.3 552.3 241.8 552.2 241.3 552.1 240.8 552 240.3 551.8 239.8 551.6 239.4 551.5 238.9 551.2 238.4 551 237.9 550.8 237.4 550.5 237 550.2 236.5 549.9 236 549.6 235.6 549.3 235.1 548.9 234.7 548.6 234.2 548.2 233.8 547.8 233.3 547.3 232.9 546.9 232.4 546.4 232 546 231.6 545.5 231.1 545 230.7 544.4 230.3 543.9 229.9 543.3 229.4 542.7 229 542.1"/><polyline points="229 542.1 228.6 541.5 228.2 540.9 227.8 540.2 227.4 539.5 227 538.8 226.6 538.1 226.2 537.4 225.8 536.7 225.4 535.9 225.1 535.1 224.7 534.3 224.3 533.5 223.9 532.7 223.6 531.9 223.2 531 222.9 530.1 222.5 529.2 222.2 528.3 221.8 527.4 221.5 526.4 221.1 525.5 220.8 524.5 220.5 523.5 220.1 522.5 219.8 521.5 219.5 520.4 219.2 519.4 218.9 518.3 218.6 517.2 218.3 516.1 218 515 217.7 513.8"/><polyline points="229 204.2 228.6 206.4 228.2 208.5 227.8 210.7 227.4 212.9 227 215 226.6 217.2 226.2 219.4 225.8 221.6 225.4 223.8 225.1 226 224.7 228.2 224.3 230.4 223.9 232.6 223.6 234.8 223.2 237 222.9 239.2 222.5 241.4 222.2 243.6 221.8 245.8 221.5 248.1 221.1 250.3 220.8 252.5 220.5 254.8 220.1 257 219.8 259.2 219.5 261.4 219.2 263.7 218.9 265.9 218.6 268.2 218.3 270.4 218 272.6 217.7 274.9"/><polyline points="279.5 554.8 279.5 554.8 279.5 554.8 279.5 554.7 279.5 554.6 279.5 554.5 279.5 554.4 279.5 554.3 279.5 554.1 279.5 553.9 279.5 553.7 279.5 553.5 279.5 553.3 279.5 553 279.5 552.8 279.5 552.5 279.5 552.2 279.5 551.9 279.5 551.5 279.5 551.2 279.5 550.8 279.5 550.4 279.5 550 279.5 549.5 279.5 549.1 279.5 548.6 279.5 548.1 279.5 547.6 279.5 547.1 279.5 546.6 279.5 546 279.5 545.4"/><polyline points="279.5 350.3 279.5 352.5 279.5 354.7 279.5 356.9 279.5 359 279.5 361.2 279.5 363.3 279.5 365.5 279.5 367.6 279.5 369.8 279.5 371.9 279.5 374 279.5 376.1 279.5 378.2 279.5 380.3 279.5 382.4 279.5 384.5 279.5 386.6 279.5 388.7 279.5 390.7 279.5 392.8 279.5 394.9 279.5 396.9 279.5 398.9 279.5 401 279.5 403 279.5 405 279.5 407 279.5 409 279.5 411 279.5 413 279.5 414.9 279.5 416.9"/><polyline points="279.5 207.5 279.5 209.7 279.5 211.9 279.5 214.1 279.5 216.3 279.5 218.5 279.5 220.7 279.5 222.9 279.5 225.1 279.5 227.3 279.5 229.5 279.5 231.8 279.5 234 279.5 236.2 279.5 238.4 279.5 240.7 279.5 242.9 279.5 245.2 279.5 247.4 279.5 249.6 279.5 251.9 279.5 254.1 279.5 256.4 279.5 258.6 279.5 260.9 279.5 263.1 279.5 265.4 279.5 267.6 279.5 269.9 279.5 272.2 279.5 274.4 279.5 276.7 279.5 278.9"/><polyline points="279.5 83.84 279.5 85.44 279.5 87.05 279.5 88.68 279.5 90.32 279.5 91.98 279.5 93.64 279.5 95.32 279.5 97.01 279.5 98.72 279.5 100.4 279.5 102.2 279.5 103.9 279.5 105.6 279.5 107.4 279.5 109.2 279.5 111 279.5 112.8 279.5 114.6 279.5 116.4 279.5 118.2 279.5 120.1 279.5 121.9 279.5 123.8 279.5 125.6 279.5 127.5 279.5 129.4 279.5 131.3 279.5 133.2 279.5 135.2 279.5 137.1 279.5 139 279.5 141"/><polyline points="279.5 545.4 279.5 544.9 279.5 544.2 279.5 543.6 279.5 543 279.5 542.3 279.5 541.6 279.5 540.9 279.5 540.2 279.5 539.5 279.5 538.7 279.5 537.9 279.5 537.2 279.5 536.4 279.5 535.5 279.5 534.7 279.5 533.8 279.5 533 279.5 532.1 279.5 531.2 279.5 530.3 279.5 529.3 279.5 528.4 279.5 527.4 279.5 526.4 279.5 525.4 279.5 524.4 279.5 523.3 279.5 522.3 279.5 521.2 279.5 520.1 279.5 519 279.5 517.9"/><polyline points="279.5 278.9 279.5 281.2 279.5 283.4 279.5 285.7 279.5 288 279.5 290.2 279.5 292.5 279.5 294.7 279.5 297 279.5 299.2 279.5 301.5 279.5 303.7 279.5 306 279.5 308.2 279.5 310.5 279.5 312.7 279.5 314.9 279.5 317.2 279.5 319.4 279.5 321.6 279.5 323.9 279.5 326.1 279.5 328.3 279.5 330.5 279.5 332.8 279.5 335 279.5 337.2 279.5 339.4 279.5 341.6 279.5 343.8 279.5 346 279.5 348.2 279.5 350.3"/><polyline points="279.5 141 279.5 142.9 279.5 144.9 279.5 146.9 279.5 148.9 279.5 150.9 279.5 152.9 279.5 154.9 279.5 156.9 279.5 158.9 279.5 161 279.5 163 279.5 165.1 279.5 167.1 279.5 169.2 279.5 171.3 279.5 173.3 279.5 175.4 279.5 177.5 279.5 179.6 279.5 181.7 279.5 183.9 279.5 186 279.5 188.1 279.5 190.2 279.5 192.4 279.5 194.5 279.5 196.7 279.5 198.8 279.5 201 279.5 203.2 279.5 205.3 279.5 207.5"/><polyline points="279.5 517.9 279.5 516.7 279.5 515.6 279.5 514.4 279.5 513.2 279.5 512 279.5 510.8 279.5 509.6 279.5 508.3 279.5 507.1 279.5 505.8 279.5 504.5 279.5 503.2 279.5 501.9 279.5 500.5 279.5 499.2 279.5 497.8 279.5 496.4 279.5 495.1 279.5 493.6 279.5 492.2 279.5 490.8 279.5 489.3 279.5 487.9 279.5 486.4 279.5 484.9 279.5 483.4 279.5 481.8 279.5 480.3 279.5 478.8 279.5 477.2 279.5 475.6 279.5 474"/><polyline points="279.5 474 279.5 472.4 279.5 470.8 279.5 469.2 279.5 467.5 279.5 465.9 279.5 464.2 279.5 462.5 279.5 460.9 279.5 459.2 279.5 457.4 279.5 455.7 279.5 454 279.5 452.2 279.5 450.5 279.5 448.7 279.5 446.9 279.5 445.1 279.5 443.3 279.5 441.5 279.5 439.6 279.5 437.8 279.5 436 279.5 434.1 279.5 432.2 279.5 430.3 279.5 428.4 279.5 426.5 279.5 424.6 279.5 422.7 279.5 420.8 279.5 418.8 279.5 416.9"/><polyline points="341.4 274.9 341.6 277.1 341.9 279.3 342.2 281.6 342.5 283.8 342.8 286.1 343 288.3 343.3 290.5 343.6 292.8 343.8 295 344.1 297.2 344.3 299.5 344.6 301.7 344.8 303.9 345 306.2 345.3 308.4 345.5 310.6 345.7 312.8 345.9 315 346.1 317.3 346.4 319.5 346.6 321.7 346.8 323.9 346.9 326.1 347.1 328.3 347.3 330.5 347.5 332.7 347.7 334.9 347.9 337.1 348 339.3 348.2 341.5 348.3 343.6 348.5 345.8"/><polyline points="341.4 513.8 341.6 512.7 341.9 511.5 342.2 510.3 342.5 509.1 342.8 507.9 343 506.6 343.3 505.4 343.6 504.1 343.8 502.9 344.1 501.6 344.3 500.2 344.6 498.9 344.8 497.6 345 496.2 345.3 494.9 345.5 493.5 345.7 492.1 345.9 490.7 346.1 489.3 346.4 487.8 346.6 486.4 346.8 484.9 346.9 483.4 347.1 481.9 347.3 480.4 347.5 478.9 347.7 477.4 347.9 475.8 348 474.3 348.2 472.7 348.3 471.1 348.5 469.5"/><polyline points="298 82.62 298.6 84.18 299.1 85.76 299.7 87.35 300.2 88.96 300.8 90.58 301.4 92.2 301.9 93.85 302.5 95.5 303 97.17 303.6 98.85 304.1 100.5 304.7 102.2 305.2 104 305.8 105.7 306.3 107.4 306.8 109.2 307.4 110.9 307.9 112.7 308.5 114.5 309 116.3 309.5 118.1 310 119.9 310.6 121.7 311.1 123.6 311.6 125.4 312.1 127.3 312.7 129.1 313.2 131 313.7 132.9 314.2 134.8 314.7 136.7 315.2 138.6"/><polyline points="330 204.2 330.4 206.4 330.8 208.5 331.2 210.7 331.6 212.8 332 215 332.4 217.2 332.8 219.4 333.2 221.6 333.6 223.8 334 226 334.3 228.2 334.7 230.4 335.1 232.6 335.4 234.8 335.8 237 336.2 239.2 336.5 241.4 336.9 243.6 337.2 245.8 337.6 248.1 337.9 250.3 338.2 252.5 338.6 254.8 338.9 257 339.2 259.2 339.5 261.4 339.8 263.7 340.2 265.9 340.5 268.2 340.8 270.4 341.1 272.6 341.4 274.9"/><polyline points="316.2 552.4 316.7 552.3 317.2 552.2 317.7 552.1 318.2 552 318.7 551.8 319.2 551.6 319.7 551.5 320.2 551.2 320.6 551 321.1 550.8 321.6 550.5 322.1 550.2 322.5 549.9 323 549.6 323.4 549.3 323.9 548.9 324.4 548.6 324.8 548.2 325.3 547.8 325.7 547.3 326.2 546.9 326.6 546.4 327 546 327.5 545.5 327.9 545 328.3 544.4 328.8 543.9 329.2 543.3 329.6 542.7 330 542.1"/><polyline points="315.2 138.6 315.7 140.6 316.2 142.5 316.7 144.4 317.2 146.4 317.7 148.4 318.2 150.3 318.7 152.3 319.2 154.3 319.7 156.3 320.2 158.3 320.6 160.3 321.1 162.3 321.6 164.4 322.1 166.4 322.5 168.4 323 170.5 323.4 172.5 323.9 174.6 324.4 176.7 324.8 178.8 325.3 180.8 325.7 182.9 326.2 185 326.6 187.1 327 189.3 327.5 191.4 327.9 193.5 328.3 195.6 328.8 197.8 329.2 199.9 329.6 202 330 204.2"/><polyline points="330 542.1 330.4 541.5 330.8 540.9 331.2 540.2 331.6 539.5 332 538.8 332.4 538.1 332.8 537.4 333.2 536.7 333.6 535.9 334 535.1 334.3 534.3 334.7 533.5 335.1 532.7 335.4 531.9 335.8 531 336.2 530.1 336.5 529.2 336.9 528.3 337.2 527.4 337.6 526.4 337.9 525.5 338.2 524.5 338.6 523.5 338.9 522.5 339.2 521.5 339.5 520.4 339.8 519.4 340.2 518.3 340.5 517.2 340.8 516.1 341.1 515 341.4 513.8"/><polyline points="348.5 345.8 348.6 348 348.8 350.1 348.9 352.3 349.1 354.4 349.2 356.6 349.3 358.7 349.4 360.9 349.6 363 349.7 365.1 349.8 367.3 349.9 369.4 350 371.5 350.1 373.6 350.2 375.7 350.2 377.8 350.3 379.9 350.4 381.9 350.5 384 350.5 386.1 350.6 388.1 350.6 390.2 350.7 392.2 350.7 394.2 350.8 396.3 350.8 398.3 350.8 400.3 350.9 402.3 350.9 404.3 350.9 406.3 350.9 408.3 350.9 410.2 350.9 412.2"/><polyline points="348.5 469.5 348.6 467.9 348.8 466.3 348.9 464.6 349.1 463 349.2 461.3 349.3 459.6 349.4 457.9 349.6 456.2 349.7 454.5 349.8 452.8 349.9 451.1 350 449.3 350.1 447.6 350.2 445.8 350.2 444 350.3 442.2 350.4 440.4 350.5 438.6 350.5 436.8 350.6 435 350.6 433.1 350.7 431.3 350.7 429.4 350.8 427.5 350.8 425.6 350.8 423.8 350.9 421.8 350.9 419.9 350.9 418 350.9 416.1 350.9 414.1 350.9 412.2"/><polyline points="399 262.9 399.5 265.1 400.1 267.3 400.6 269.5 401.2 271.7 401.7 273.8 402.2 276 402.7 278.2 403.2 280.4 403.7 282.6 404.2 284.8 404.7 287 405.2 289.1 405.6 291.3 406.1 293.5 406.5 295.7 407 297.9 407.4 300.1 407.8 302.2 408.2 304.4 408.6 306.6 409 308.8 409.4 310.9 409.8 313.1 410.1 315.3 410.5 317.4 410.9 319.6 411.2 321.7 411.5 323.9 411.9 326.1 412.2 328.2 412.5 330.4 412.8 332.5"/><polyline points="315.2 79.05 316.3 80.51 317.4 81.98 318.5 83.46 319.6 84.96 320.6 86.47 321.7 87.99 322.8 89.52 323.9 91.07 324.9 92.63 326 94.2 327 95.79 328.1 97.39 329.2 99 330.2 100.6 331.3 102.3 332.3 103.9 333.3 105.6 334.4 107.2 335.4 108.9 336.4 110.6 337.5 112.3 338.5 114 339.5 115.7 340.5 117.5 341.5 119.2 342.5 121 343.5 122.7 344.5 124.5 345.5 126.3 346.5 128.1 347.5 129.9 348.5 131.7"/><polyline points="412.8 456.2 413.1 454.5 413.3 452.9 413.6 451.2 413.9 449.5 414.1 447.9 414.4 446.2 414.6 444.4 414.8 442.7 415 441 415.2 439.2 415.4 437.5 415.6 435.7 415.8 434 416 432.2 416.1 430.4 416.3 428.6 416.4 426.8 416.6 424.9 416.7 423.1 416.8 421.3 416.9 419.4 417 417.5 417.1 415.7 417.2 413.8 417.2 411.9 417.3 410 417.4 408.1 417.4 406.2 417.4 404.2 417.5 402.3 417.5 400.4 417.5 398.4"/><polyline points="348.5 131.7 349.5 133.6 350.4 135.4 351.4 137.3 352.4 139.1 353.3 141 354.3 142.9 355.2 144.7 356.2 146.6 357.1 148.5 358 150.4 358.9 152.4 359.9 154.3 360.8 156.2 361.7 158.2 362.6 160.1 363.5 162.1 364.4 164.1 365.3 166 366.2 168 367 170 367.9 172 368.8 174 369.6 176 370.5 178.1 371.3 180.1 372.2 182.1 373 184.2 373.8 186.2 374.6 188.3 375.5 190.3 376.3 192.4 377.1 194.5"/><polyline points="356.2 544 357.1 543.7 358 543.4 358.9 543.1 359.9 542.8 360.8 542.4 361.7 542 362.6 541.6 363.5 541.2 364.4 540.8 365.3 540.4 366.2 539.9 367 539.4 367.9 538.9 368.8 538.4 369.6 537.9 370.5 537.4 371.3 536.8 372.2 536.2 373 535.6 373.8 535 374.6 534.4 375.5 533.7 376.3 533.1 377.1 532.4"/><polyline points="399 501.9 399.5 500.7 400.1 499.4 400.6 498.2 401.2 496.9 401.7 495.7 402.2 494.4 402.7 493.1 403.2 491.8 403.7 490.4 404.2 489.1 404.7 487.7 405.2 486.4 405.6 485 406.1 483.6 406.5 482.2 407 480.8 407.4 479.3 407.8 477.9 408.2 476.4 408.6 474.9 409 473.4 409.4 471.9 409.8 470.4 410.1 468.9 410.5 467.3 410.9 465.8 411.2 464.2 411.5 462.6 411.9 461 412.2 459.4 412.5 457.8 412.8 456.2"/><polyline points="377.1 194.5 377.9 196.5 378.6 198.6 379.4 200.7 380.2 202.8 381 204.9 381.7 207 382.5 209.1 383.2 211.2 384 213.3 384.7 215.4 385.4 217.6 386.2 219.7 386.9 221.8 387.6 224 388.3 226.1 389 228.3 389.6 230.4 390.3 232.6 391 234.7 391.6 236.9 392.3 239 392.9 241.2 393.6 243.4 394.2 245.5 394.8 247.7 395.5 249.9 396.1 252 396.7 254.2 397.3 256.4 397.8 258.6 398.4 260.7 399 262.9"/><polyline points="412.8 332.5 413.1 334.6 413.3 336.8 413.6 338.9 413.9 341 414.1 343.2 414.4 345.3 414.6 347.4 414.8 349.5 415 351.6 415.2 353.7 415.4 355.8 415.6 357.9 415.8 360 416 362.1 416.1 364.1 416.3 366.2 416.4 368.3 416.6 370.3 416.7 372.4 416.8 374.4 416.9 376.4 417 378.5 417.1 380.5 417.2 382.5 417.2 384.5 417.3 386.5 417.4 388.5 417.4 390.5 417.4 392.5 417.5 394.5 417.5 396.4 417.5 398.4"/><polyline points="377.1 532.4 377.9 531.7 378.6 531 379.4 530.2 380.2 529.5 381 528.7 381.7 527.9 382.5 527.1 383.2 526.3 384 525.5 384.7 524.6 385.4 523.8 386.2 522.9 386.9 522 387.6 521.1 388.3 520.1 389 519.2 389.6 518.2 390.3 517.2 391 516.2 391.6 515.2 392.3 514.2 392.9 513.2 393.6 512.1 394.2 511 394.8 509.9 395.5 508.8 396.1 507.7 396.7 506.6 397.3 505.4 397.8 504.3 398.4 503.1 399 501.9"/><polyline points="468 435 468.4 433.3 468.8 431.6 469.1 429.9 469.5 428.2 469.9 426.5 470.2 424.7 470.5 423 470.9 421.2 471.2 419.5 471.5 417.7 471.7 415.9 472 414.1 472.3 412.3 472.5 410.5 472.7 408.7 472.9 406.8 473.1 405 473.3 403.2 473.5 401.3 473.7 399.4 473.8 397.6 474 395.7 474.1 393.8 474.2 391.9 474.3 390 474.4 388.1 474.4 386.2 474.5 384.2 474.6 382.3 474.6 380.4 474.6 378.4 474.6 376.5"/><polyline points="417.5 179 418.6 180.9 419.7 182.9 420.8 184.8 421.9 186.8 423 188.8 424.1 190.7 425.1 192.7 426.2 194.7 427.2 196.7 428.3 198.7 429.3 200.7 430.3 202.8 431.3 204.8 432.3 206.8 433.3 208.8 434.3 210.9 435.3 212.9 436.2 214.9 437.2 217 438.1 219 439 221.1 439.9 223.2 440.8 225.2 441.7 227.3 442.6 229.4 443.5 231.4 444.3 233.5 445.2 235.6 446 237.7 446.9 239.8 447.7 241.8 448.5 243.9"/><polyline points="417.5 516.9 418.6 516 419.7 515.2 420.8 514.3 421.9 513.5 423 512.6 424.1 511.7 425.1 510.8 426.2 509.8 427.2 508.9 428.3 507.9 429.3 506.9 430.3 505.9 431.3 504.9 432.3 503.9 433.3 502.8 434.3 501.8 435.3 500.7 436.2 499.6 437.2 498.5 438.1 497.4 439 496.3 439.9 495.1 440.8 494 441.7 492.8 442.6 491.6 443.5 490.4 444.3 489.2 445.2 488 446 486.7 446.9 485.4 447.7 484.2 448.5 482.9"/><polyline points="468 311.3 468.4 313.4 468.8 315.5 469.1 317.6 469.5 319.7 469.9 321.8 470.2 323.8 470.5 325.9 470.9 328 471.2 330.1 471.5 332.1 471.7 334.2 472 336.3 472.3 338.3 472.5 340.4 472.7 342.4 472.9 344.5 473.1 346.5 473.3 348.5 473.5 350.6 473.7 352.6 473.8 354.6 474 356.6 474.1 358.6 474.2 360.6 474.3 362.6 474.4 364.6 474.4 366.6 474.5 368.6 474.6 370.6 474.6 372.6 474.6 374.5 474.6 376.5"/><polyline points="330 73.38 331.5 74.66 333.1 75.96 334.6 77.27 336.1 78.59 337.7 79.93 339.2 81.28 340.7 82.65 342.2 84.02 343.7 85.42 345.2 86.82 346.7 88.24 348.2 89.66 349.7 91.11 351.2 92.56 352.7 94.03 354.2 95.51 355.6 97 357.1 98.5 358.6 100 360 101.5 361.5 103.1 362.9 104.6 364.4 106.2 365.8 107.8 367.2 109.4 368.7 111 370.1 112.6 371.5 114.2 372.9 115.8 374.3 117.5 375.7 119.1 377.1 120.8"/><polyline points="448.5 482.9 449.3 481.6 450 480.3 450.8 478.9 451.6 477.6 452.3 476.2 453.1 474.9 453.8 473.5 454.5 472.1 455.2 470.7 455.9 469.3 456.6 467.8 457.2 466.4 457.9 464.9 458.5 463.5 459.1 462 459.8 460.5 460.4 459 461 457.5 461.5 455.9 462.1 454.4 462.7 452.8 463.2 451.3 463.7 449.7 464.3 448.1 464.8 446.5 465.3 444.9 465.7 443.3 466.2 441.6 466.7 440 467.1 438.3 467.5 436.7 468 435"/><polyline points="448.5 243.9 449.3 246 450 248.1 450.8 250.2 451.6 252.3 452.3 254.4 453.1 256.5 453.8 258.6 454.5 260.7 455.2 262.8 455.9 265 456.6 267.1 457.2 269.2 457.9 271.3 458.5 273.4 459.1 275.5 459.8 277.6 460.4 279.7 461 281.8 461.5 284 462.1 286.1 462.7 288.2 463.2 290.3 463.7 292.4 464.3 294.5 464.8 296.6 465.3 298.7 465.7 300.8 466.2 302.9 466.7 305 467.1 307.1 467.5 309.2 468 311.3"/><polyline points="377.1 120.8 378.4 122.4 379.8 124.1 381.2 125.8 382.5 127.5 383.9 129.2 385.2 131 386.6 132.7 387.9 134.5 389.2 136.2 390.5 138 391.9 139.7 393.2 141.5 394.4 143.3 395.7 145.1 397 146.9 398.3 148.7 399.5 150.6 400.8 152.4 402 154.3 403.3 156.1 404.5 158 405.7 159.8 406.9 161.7 408.1 163.6 409.3 165.5 410.5 167.4 411.7 169.3 412.9 171.2 414 173.1 415.2 175.1 416.3 177 417.5 179"/><polyline points="403.3 525.5 404.5 524.9 405.7 524.2 406.9 523.6 408.1 522.9 409.3 522.2 410.5 521.5 411.7 520.8 412.9 520 414 519.3 415.2 518.5 416.3 517.7 417.5 516.9"/><polyline points="486.4 458.1 487.4 456.7 488.4 455.3 489.3 453.9 490.2 452.4 491.2 450.9 492.1 449.5 492.9 448 493.8 446.5 494.7 445 495.5 443.5 496.3 441.9 497.2 440.4 498 438.8 498.7 437.3 499.5 435.7 500.3 434.1 501 432.5 501.7 430.9 502.4 429.3 503.1 427.7 503.8 426 504.5 424.4 505.1 422.7 505.8 421.1 506.4 419.4 507 417.7 507.6 416 508.2 414.3 508.7 412.6 509.3 410.9 509.8 409.1 510.3 407.4"/><polyline points="460.4 487.2 461.7 486.1 463 485 464.2 483.8 465.5 482.7 466.7 481.5 467.9 480.3 469.1 479.1 470.3 477.9 471.4 476.7 472.6 475.4 473.7 474.2 474.9 472.9 476 471.6 477.1 470.3 478.2 469 479.3 467.7 480.3 466.4 481.4 465 482.4 463.7 483.4 462.3 484.5 460.9 485.5 459.6 486.4 458.1"/><polyline points="510.3 407.4 510.8 405.7 511.3 403.9 511.8 402.1 512.2 400.4 512.7 398.6 513.1 396.8 513.5 395 513.9 393.2 514.2 391.4 514.6 389.6 514.9 387.7 515.3 385.9 515.6 384.1 515.9 382.2 516.2 380.4 516.4 378.5 516.7 376.6 516.9 374.8 517.1 372.9 517.3 371 517.5 369.1 517.7 367.2 517.8 365.3 517.9 363.4 518.1 361.5 518.2 359.6 518.3 357.6 518.3 355.7 518.4 353.8 518.4 351.8 518.4 349.9 518.5 347.9"/><polyline points="399 106.5 400.7 108 402.4 109.4 404 110.9 405.7 112.4 407.3 114 409 115.5 410.6 117 412.3 118.6 413.9 120.1 415.5 121.7 417.1 123.3 418.7 124.9 420.3 126.5 421.9 128.1 423.4 129.7 425 131.4 426.5 133 428.1 134.6 429.6 136.3 431.1 138 432.6 139.7 434.1 141.4 435.6 143.1 437.1 144.8 438.5 146.5 440 148.2 441.4 149.9 442.9 151.7 444.3 153.4 445.7 155.2 447.1 157 448.5 158.7"/><polyline points="486.4 219.2 487.4 221.2 488.4 223.2 489.3 225.1 490.2 227.1 491.2 229.1 492.1 231.1 492.9 233.1 493.8 235.1 494.7 237.1 495.5 239.1 496.3 241.1 497.2 243.1 498 245.2 498.7 247.2 499.5 249.2 500.3 251.2 501 253.2 501.7 255.3 502.4 257.3 503.1 259.3 503.8 261.4 504.5 263.4 505.1 265.4 505.8 267.4 506.4 269.5 507 271.5 507.6 273.5 508.2 275.6 508.7 277.6 509.3 279.6 509.8 281.7 510.3 283.7"/><polyline points="510.3 283.7 510.8 285.8 511.3 287.8 511.8 289.8 512.2 291.8 512.7 293.9 513.1 295.9 513.5 297.9 513.9 300 514.2 302 514.6 304 514.9 306 515.3 308.1 515.6 310.1 515.9 312.1 516.2 314.1 516.4 316.1 516.7 318.1 516.9 320.2 517.1 322.2 517.3 324.2 517.5 326.2 517.7 328.2 517.8 330.1 517.9 332.1 518.1 334.1 518.2 336.1 518.3 338.1 518.3 340.1 518.4 342 518.4 344 518.4 346 518.5 347.9"/><polyline points="448.5 158.7 449.8 160.5 451.2 162.3 452.6 164.1 453.9 165.9 455.2 167.8 456.6 169.6 457.9 171.4 459.2 173.2 460.4 175.1 461.7 176.9 463 178.8 464.2 180.7 465.5 182.5 466.7 184.4 467.9 186.3 469.1 188.2 470.3 190.1 471.4 192 472.6 193.9 473.7 195.8 474.9 197.7 476 199.7 477.1 201.6 478.2 203.5 479.3 205.5 480.3 207.4 481.4 209.4 482.4 211.3 483.5 213.3 484.5 215.3 485.5 217.2 486.4 219.2"/><polyline points="341.4 65.98 343.2 67.04 345.1 68.11 347 69.2 348.9 70.3 350.7 71.41 352.6 72.54 354.5 73.68 356.3 74.84 358.2 76.01 360 77.19 361.8 78.39 363.7 79.6 365.5 80.82 367.3 82.06 369.1 83.31 371 84.57 372.8 85.85 374.6 87.14 376.3 88.44 378.1 89.75 379.9 91.08 381.7 92.42 383.4 93.77 385.2 95.14 386.9 96.51 388.7 97.9 390.4 99.3 392.2 100.7 393.9 102.1 395.6 103.6 397.3 105 399 106.5"/><polyline points="536.9 375.3 537.5 373.5 538 371.6 538.6 369.8 539.1 368 539.5 366.1 540 364.3 540.5 362.4 540.9 360.6 541.3 358.7 541.7 356.8 542.1 355 542.5 353.1 542.8 351.2 543.1 349.3 543.4 347.4 543.7 345.5 544 343.6 544.3 341.7 544.5 339.8 544.7 337.9 544.9 336 545.1 334 545.3 332.1 545.4 330.2 545.6 328.3 545.7 326.3 545.8 324.4 545.9 322.4 545.9 320.5 546 318.5 546 316.6 546 314.6"/><polyline points="536.9 251.6 537.5 253.5 538 255.5 538.6 257.5 539.1 259.4 539.5 261.4 540 263.4 540.5 265.4 540.9 267.3 541.3 269.3 541.7 271.3 542.1 273.3 542.5 275.2 542.8 277.2 543.1 279.2 543.4 281.2 543.7 283.1 544 285.1 544.3 287.1 544.5 289.1 544.7 291 544.9 293 545.1 295 545.3 297 545.4 298.9 545.6 300.9 545.7 302.9 545.8 304.8 545.9 306.8 545.9 308.8 546 310.7 546 312.7 546 314.6"/><polyline points="348.5 57.37 350.6 58.17 352.7 58.98 354.8 59.8 356.9 60.64 359 61.5 361 62.36 363.1 63.25 365.2 64.15 367.2 65.06 369.3 65.98 371.3 66.92 373.4 67.88 375.4 68.85 377.5 69.83 379.5 70.83 381.5 71.84 383.5 72.86 385.5 73.9 387.5 74.96 389.5 76.02 391.5 77.1 393.5 78.2 395.4 79.3 397.4 80.42 399.3 81.56 401.3 82.7 403.2 83.86 405.1 85.03 407.1 86.22 409 87.42 410.9 88.63 412.8 89.85"/><polyline points="523.2 408.4 524 406.7 524.9 405.1 525.7 403.4 526.6 401.7 527.4 400 528.2 398.2 528.9 396.5 529.7 394.8 530.4 393.1 531.2 391.3 531.9 389.6 532.6 387.8 533.2 386 533.9 384.2 534.5 382.5 535.2 380.7 535.8 378.9 536.4 377.1 536.9 375.3"/><polyline points="468 135.2 469.5 136.8 471 138.4 472.5 140 474 141.7 475.5 143.3 477 144.9 478.4 146.6 479.9 148.2 481.3 149.9 482.7 151.6 484.1 153.3 485.5 154.9 486.9 156.6 488.3 158.4 489.6 160.1 490.9 161.8 492.3 163.5 493.6 165.3 494.9 167 496.1 168.8 497.4 170.5 498.7 172.3 499.9 174.1 501.1 175.9 502.3 177.7 503.5 179.5 504.7 181.3 505.8 183.1 507 184.9 508.1 186.7 509.2 188.5 510.3 190.4"/><polyline points="412.8 89.85 414.6 91.09 416.5 92.34 418.4 93.6 420.2 94.88 422.1 96.16 423.9 97.46 425.8 98.77 427.6 100.1 429.4 101.4 431.2 102.8 433 104.1 434.7 105.5 436.5 106.9 438.3 108.3 440 109.7 441.8 111.1 443.5 112.5 445.2 114 446.9 115.4 448.6 116.9 450.3 118.3 451.9 119.8 453.6 121.3 455.2 122.8 456.9 124.3 458.5 125.9 460.1 127.4 461.7 128.9 463.3 130.5 464.9 132.1 466.4 133.6 468 135.2"/><polyline points="510.3 190.4 511.4 192.2 512.5 194.1 513.5 195.9 514.6 197.8 515.6 199.6 516.6 201.5 517.6 203.4 518.5 205.3 519.5 207.2 520.4 209 521.4 210.9 522.3 212.8 523.2 214.7 524 216.7 524.9 218.6 525.7 220.5 526.6 222.4 527.4 224.3 528.2 226.3 528.9 228.2 529.7 230.1 530.4 232.1 531.2 234 531.9 235.9 532.6 237.9 533.2 239.8 533.9 241.8 534.5 243.7 535.2 245.7 535.8 247.7 536.4 249.6 536.9 251.6"/><polyline points="474.6 110 476.2 111.4 477.8 112.8 479.3 114.2 480.9 115.6 482.4 117 483.9 118.5 485.5 119.9 487 121.4 488.4 122.9 489.9 124.3 491.4 125.8 492.8 127.3 494.2 128.9 495.6 130.4 497 131.9 498.4 133.5 499.8 135 501.1 136.6 502.5 138.2 503.8 139.8 505.1 141.3 506.4 143 507.7 144.6 508.9 146.2 510.2 147.8 511.4 149.5 512.6 151.1 513.8 152.8 515 154.4 516.2 156.1 517.3 157.8 518.5 159.5"/><polyline points="350.9 48.13 353.1 48.64 355.3 49.17 357.4 49.72 359.6 50.28 361.8 50.85 363.9 51.44 366.1 52.05 368.2 52.67 370.3 53.3 372.5 53.96 374.6 54.62 376.7 55.3 378.8 56 380.9 56.71 383 57.44 385.1 58.18 387.2 58.93 389.3 59.7 391.3 60.49 393.4 61.29 395.4 62.1 397.5 62.93 399.5 63.77 401.5 64.63 403.6 65.5 405.6 66.39 407.6 67.29 409.6 68.2 411.6 69.13 413.5 70.07 415.5 71.03 417.5 72"/><polyline points="417.5 72 419.4 72.98 421.4 73.98 423.3 75 425.2 76.02 427.1 77.06 429 78.11 430.9 79.18 432.8 80.26 434.7 81.35 436.5 82.46 438.4 83.58 440.2 84.71 442.1 85.85 443.9 87.01 445.7 88.18 447.5 89.36 449.3 90.56 451 91.77 452.8 92.99 454.5 94.23 456.3 95.47 458 96.73 459.7 98 461.4 99.28 463.1 100.6 464.8 101.9 466.5 103.2 468.1 104.5 469.8 105.9 471.4 107.2 473 108.6 474.6 110"/><polyline points="546 217.1 546.6 219 547.2 220.9 547.7 222.8 548.2 224.7 548.7 226.6 549.2 228.5 549.7 230.4 550.1 232.3 550.6 234.2 551 236.2 551.4 238.1 551.7 240 552.1 241.9 552.4 243.9 552.8 245.8 553.1 247.7 553.3 249.7 553.6 251.6 553.9 253.6 554.1 255.5 554.3 257.5 554.5 259.4 554.7 261.4 554.8 263.3 555 265.3 555.1 267.2 555.2 269.2 555.3 271.1 555.3 273.1 555.4 275 555.4 277 555.4 278.9"/><polyline points="518.5 159.5 519.6 161.2 520.7 162.9 521.8 164.6 522.8 166.3 523.9 168 524.9 169.8 526 171.5 527 173.3 528 175 528.9 176.8 529.9 178.5 530.8 180.3 531.8 182.1 532.7 183.9 533.5 185.7 534.4 187.5 535.3 189.3 536.1 191.1 536.9 192.9 537.7 194.8 538.5 196.6 539.3 198.4 540 200.3 540.8 202.1 541.5 204 542.2 205.8 542.9 207.7 543.5 209.6 544.2 211.4 544.8 213.3 545.4 215.2 546 217.1"/><polyline points="412.8 54.15 414.6 54.88 416.5 55.63 418.4 56.39 420.2 57.17 422.1 57.96 423.9 58.76 425.8 59.58 427.6 60.42 429.4 61.27 431.2 62.14 433 63.02 434.7 63.91 436.5 64.82 438.3 65.74 440 66.68 441.8 67.63 443.5 68.6 445.2 69.57 446.9 70.57 448.6 71.58 450.3 72.6 451.9 73.63 453.6 74.68 455.2 75.74 456.9 76.82 458.5 77.91 460.1 79.01 461.7 80.13 463.3 81.26 464.9 82.4 466.4 83.56 468 84.73"/><polyline points="348.5 38.89 350.6 39.12 352.7 39.37 354.8 39.63 356.9 39.91 359 40.21 361 40.52 363.1 40.85 365.2 41.19 367.2 41.55 369.3 41.93 371.3 42.32 373.4 42.73 375.4 43.15 377.5 43.59 379.5 44.04 381.5 44.51 383.5 45 385.5 45.5 387.5 46.02 389.5 46.55 391.5 47.1 393.5 47.66 395.4 48.24 397.4 48.84 399.3 49.45 401.3 50.07 403.2 50.71 405.1 51.37 407.1 52.04 409 52.73 410.9 53.43 412.8 54.15"/><polyline points="468 84.73 469.5 85.91 471 87.1 472.5 88.31 474 89.53 475.5 90.77 477 92.01 478.4 93.27 479.9 94.54 481.3 95.82 482.7 97.12 484.1 98.43 485.5 99.75 486.9 101.1 488.3 102.4 489.6 103.8 490.9 105.1 492.3 106.5 493.6 107.9 494.9 109.3 496.1 110.7 497.4 112.2 498.7 113.6 499.9 115 501.1 116.5 502.3 118 503.5 119.4 504.7 120.9 505.8 122.4 507 123.9 508.1 125.5 509.2 127 510.3 128.5"/><polyline points="510.3 128.5 511.4 130.1 512.5 131.7 513.5 133.2 514.6 134.8 515.6 136.4 516.6 138 517.6 139.6 518.5 141.2 519.5 142.9 520.4 144.5 521.4 146.1 522.3 147.8"/><polyline points="448.5 61.2 449.9 62.19 451.2 63.2 452.6 64.22 453.9 65.25 455.2 66.3 456.6 67.36 457.9 68.44 459.2 69.53"/><polyline points="341.4 30.28 343.2 30.25 345.1 30.23 347 30.23 348.9 30.25 350.7 30.29 352.6 30.34 354.5 30.41 356.3 30.5 358.2 30.6 360 30.72 361.8 30.85 363.7 31.01 365.5 31.17 367.3 31.36 369.1 31.56 371 31.78 372.8 32.02 374.6 32.27 376.3 32.54 378.1 32.82 379.9 33.12 381.7 33.44 383.4 33.77 385.2 34.12 386.9 34.49 388.7 34.87 390.4 35.27 392.2 35.69 393.9 36.12 395.6 36.57 397.3 37.03 399 37.51"/><polyline points="399 37.51 400.7 38.01 402.4 38.52 404 39.05 405.7 39.6 407.3 40.16 409 40.73 410.6 41.33 412.3 41.94 413.9 42.56 415.5 43.2 417.1 43.86 418.7 44.53 420.3 45.22 421.9 45.92 423.4 46.64 425 47.38 426.5 48.12 428.1 48.89 429.6 49.67 431.1 50.47 432.6 51.28 434.1 52.11 435.6 52.95 437.1 53.81 438.5 54.68 440 55.56 441.4 56.47 442.9 57.38 444.3 58.32 445.7 59.26 447.1 60.22 448.5 61.2"/><polyline points="377.1 23.23 378.4 23.52 379.8 23.83 381.2 24.16 382.5 24.51 383.9 24.87 385.2 25.25 386.6 25.65 387.9 26.06 389.2 26.49 390.5 26.94 391.9 27.41 393.2 27.89 394.4 28.39 395.7 28.9 397 29.43 398.3 29.98 399.5 30.55 400.8 31.13 402 31.73"/><polyline points="330 22.88 331.5 22.63 333.1 22.39 334.6 22.16 336.1 21.96 337.7 21.77 339.2 21.6 340.7 21.45 342.2 21.31 343.7 21.19 345.2 21.09 346.7 21.01 348.2 20.94 349.7 20.89 351.2 20.86 352.7 20.84 354.2 20.85 355.6 20.87 357.1 20.9 358.6 20.96 360 21.03 361.5 21.12 362.9 21.22 364.4 21.34 365.8 21.48 367.2 21.64 368.7 21.82 370.1 22.01 371.5 22.22 372.9 22.44 374.3 22.69 375.7 22.95 377.1 23.23"/><polyline points="315.2 17.21 316.3 16.78 317.4 16.37 318.5 15.97 319.6 15.6 320.6 15.24 321.7 14.9 322.8 14.57 323.9 14.26 324.9 13.98 326 13.71 327 13.45 328.1 13.22 329.2 13 330.2 12.8 331.3 12.62 332.3 12.46 333.3 12.31 334.4 12.18 335.4 12.07 336.4 11.98 337.5 11.9 338.5 11.85 339.5 11.81 340.5 11.79 341.5 11.78 342.5 11.8 343.5 11.83 344.5 11.88 345.5 11.95 346.5 12.04 347.5 12.14 348.5 12.26"/><polyline points="348.5 12.26 349.5 12.4 350.4 12.56 351.4 12.74 352.4 12.93 353.3 13.14 354.3 13.37 355.2 13.62"/><polyline points="298 13.64 298.6 13.1 299.1 12.58 299.7 12.08 300.2 11.6 300.8 11.13 301.4 10.68 301.9 10.25 302.5 9.835 303 9.44 303.6 9.063 304.1 8.705 304.7 8.364 305.2 8.041 305.8 7.736 306.3 7.45 306.8 7.182 307.4 6.932 307.9 6.7 308.5 6.486 309 6.292 309.5 6.114 310 5.955 310.6 5.814 311.1 5.692 311.6 5.589 312.1 5.503 312.7 5.436 313.2 5.387 313.7 5.356 314.2 5.343 314.7 5.349 315.2 5.374"/><line x1="315.2" x2="315.7" y1="5.374" y2="5.416"/><polyline points="279.5 12.42 279.5 11.85 279.5 11.29 279.5 10.75 279.5 10.23 279.5 9.726 279.5 9.241 279.5 8.773 279.5 8.324 279.5 7.892 279.5 7.479 279.5 7.084 279.5 6.708 279.5 6.349 279.5 6.008 279.5 5.686 279.5 5.383 279.5 5.097 279.5 4.83 279.5 4.581 279.5 4.351 279.5 4.139 279.5 3.945 279.5 3.77 279.5 3.613 279.5 3.475 279.5 3.354 279.5 3.253 279.5 3.17 279.5 3.105 279.5 3.059 279.5 3.032"/><line x1="243.8" x2="243.3" y1="5.372" y2="5.414"/><polyline points="261 13.64 260.5 13.1 259.9 12.58 259.3 12.08 258.8 11.59 258.2 11.13 257.7 10.68 257.1 10.25 256.6 9.834 256 9.439 255.5 9.062 254.9 8.704 254.4 8.362 253.8 8.04 253.3 7.735 252.7 7.449 252.2 7.181 251.6 6.931 251.1 6.699 250.6 6.486 250 6.29 249.5 6.113 249 5.954 248.5 5.813 247.9 5.691 247.4 5.587 246.9 5.501 246.4 5.434 245.9 5.385 245.3 5.354 244.8 5.342 244.3 5.348 243.8 5.372"/><polyline points="243.8 17.21 242.7 16.78 241.6 16.36 240.5 15.97 239.5 15.59 238.4 15.24 237.3 14.89 236.2 14.57 235.2 14.26 234.1 13.98 233 13.7 232 13.45 230.9 13.22 229.9 13 228.8 12.8 227.8 12.62 226.7 12.46 225.7 12.31 224.6 12.18 223.6 12.07 222.6 11.98 221.6 11.9 220.5 11.85 219.5 11.81 218.5 11.79 217.5 11.78 216.5 11.8 215.5 11.83 214.5 11.88 213.5 11.95 212.5 12.04 211.5 12.14 210.5 12.26"/><polyline points="203.8 13.62 204.8 13.37 205.7 13.14 206.7 12.93 207.6 12.74 208.6 12.56 209.6 12.4 210.5 12.26"/><polyline points="182 23.23 183.3 22.95 184.7 22.69 186.1 22.44 187.5 22.22 189 22.01 190.4 21.82 191.8 21.64 193.2 21.48 194.7 21.34 196.1 21.22 197.5 21.12 199 21.03 200.4 20.96 201.9 20.9 203.4 20.86 204.8 20.85 206.3 20.84 207.8 20.86 209.3 20.89 210.8 20.94 212.3 21.01 213.8 21.09 215.3 21.19 216.8 21.31 218.3 21.45 219.8 21.6 221.4 21.77 222.9 21.96 224.4 22.16 225.9 22.39 227.5 22.62 229 22.88"/><polyline points="157 31.73 158.2 31.13 159.5 30.55 160.7 29.98 162 29.43 163.3 28.9 164.6 28.39 165.9 27.89 167.2 27.4 168.5 26.94 169.8 26.49 171.1 26.06 172.4 25.65 173.8 25.25 175.1 24.87 176.5 24.51 177.8 24.16 179.2 23.83 180.6 23.52 182 23.23"/><polyline points="120.9 504.7 121.9 505.4 122.8 506 123.8 506.6 124.7 507.3 125.7 507.9 126.7 508.5 127.7 509.2 128.7 509.8 129.7 510.4 130.7 511 131.8 511.6 132.8 512.2 133.9 512.8 135 513.4 136 514 137.1 514.6 138.2 515.2 139.3 515.7 140.4 516.3 141.6 516.9"/><polyline points="141.6 516.9 142.7 517.4 143.8 518 145 518.5 146.1 519.1 147.3 519.6 148.5 520.2 149.7 520.7 150.9 521.2 152.1 521.8 153.3 522.3 154.5 522.8 155.7 523.3 157 523.8 158.2 524.3 159.5 524.8 160.7 525.3 162 525.8 163.3 526.2 164.6 526.7 165.9 527.2 167.2 527.6 168.5 528.1 169.8 528.6 171.1 529 172.5 529.4 173.8 529.9 175.1 530.3 176.5 530.7 177.8 531.2 179.2 531.6 180.6 532 182 532.4"/><polyline points="229 542.1 230.6 542.3 232.1 542.5 233.7 542.7 235.2 542.9 236.8 543.1 238.3 543.2 239.9 543.4 241.5 543.6 243 543.7 244.6 543.9 246.2 544 247.7 544.1 249.3 544.3 250.9 544.4 252.5 544.5 254 544.6 255.6 544.7 257.2 544.8 258.8 544.9 260.4 545 262 545 263.6 545.1 265.2 545.2 266.8 545.2 268.3 545.3 269.9 545.3 271.5 545.4 273.1 545.4 274.7 545.4 276.3 545.4 277.9 545.4 279.5 545.4"/><polyline points="417.5 516.9 418.6 516.3 419.7 515.7 420.8 515.2 421.9 514.6 423 514 424.1 513.4 425.1 512.8 426.2 512.2 427.2 511.6 428.3 511 429.3 510.4 430.3 509.8 431.3 509.2 432.3 508.5 433.3 507.9 434.3 507.3 435.3 506.6 436.2 506 437.2 505.4 438.1 504.7"/><polyline points="377.1 532.4 378.4 532 379.8 531.6 381.2 531.2 382.5 530.7 383.9 530.3 385.2 529.9 386.6 529.4 387.9 529 389.2 528.6 390.5 528.1 391.9 527.6 393.2 527.2 394.4 526.7 395.7 526.2 397 525.8 398.3 525.3 399.5 524.8 400.8 524.3 402 523.8 403.3 523.3 404.5 522.8 405.7 522.3 406.9 521.8 408.1 521.2 409.3 520.7 410.5 520.2 411.7 519.6 412.9 519.1 414 518.5 415.2 518 416.3 517.4 417.5 516.9"/><polyline points="279.5 545.4 281.1 545.4 282.7 545.4 284.3 545.4 285.9 545.4 287.5 545.4 289.1 545.3 290.7 545.3 292.3 545.2 293.9 545.2 295.5 545.1 297 545 298.6 545 300.2 544.9 301.8 544.8 303.4 544.7 305 544.6 306.6 544.5 308.1 544.4 309.7 544.3 311.3 544.1 312.9 544 314.4 543.9 316 543.7 317.6 543.6 319.1 543.4 320.7 543.2 322.3 543.1 323.8 542.9 325.4 542.7 326.9 542.5 328.5 542.3 330 542.1"/><polyline points="330 542.1 331.5 541.9 333.1 541.7 334.6 541.5 336.1 541.2 337.7 541 339.2 540.8 340.7 540.5 342.2 540.3 343.7 540 345.2 539.7 346.7 539.5 348.2 539.2 349.7 538.9 351.2 538.6 352.7 538.3 354.2 538 355.6 537.7 357.1 537.4 358.6 537.1 360 536.7 361.5 536.4 362.9 536.1 364.4 535.7 365.8 535.4 367.2 535 368.7 534.7 370.1 534.3 371.5 533.9 372.9 533.5 374.3 533.2 375.7 532.8 377.1 532.4"/><polyline points="182 532.4 183.4 532.8 184.7 533.2 186.1 533.5 187.5 533.9 189 534.3 190.4 534.7 191.8 535 193.2 535.4 194.7 535.7 196.1 536.1 197.5 536.4 199 536.8 200.5 537.1 201.9 537.4 203.4 537.7 204.9 538 206.3 538.3 207.8 538.6 209.3 538.9 210.8 539.2 212.3 539.5 213.8 539.7 215.3 540 216.8 540.3 218.3 540.5 219.8 540.8 221.4 541 222.9 541.2 224.4 541.5 225.9 541.7 227.5 541.9 229 542.1"/><polyline points="72.58 458.1 73.57 459 74.56 459.8 75.58 460.7 76.6 461.5 77.64 462.3 78.69 463.2 79.76 464 80.84 464.8 81.93 465.6 83.04 466.4 84.16 467.2 85.29 468 86.44 468.8 87.59 469.6 88.76 470.4 89.95 471.1 91.14 471.9 92.35 472.7 93.57 473.4 94.81 474.2 96.05 475 97.31 475.7 98.58 476.4 99.87 477.2 101.2 477.9 102.5 478.6 103.8 479.4 105.1 480.1 106.5 480.8 107.8 481.5 109.2 482.2 110.6 482.9"/><polyline points="54.54 438.7 55.2 439.6 55.88 440.5 56.58 441.4 57.29 442.3 58.02 443.2 58.76 444.1 59.51 445 60.28 445.9 61.07 446.8 61.87 447.7 62.68 448.6 63.51 449.5 64.35 450.4 65.21 451.3 66.08 452.1 66.97 453 67.87 453.9 68.78 454.7 69.71 455.6 70.66 456.4 71.61 457.3 72.58 458.1"/><polyline points="399 501.9 400.7 501.4 402.4 500.9 404 500.4 405.7 499.9 407.3 499.3 409 498.8 410.6 498.3 412.3 497.7 413.9 497.2 415.5 496.6 417.1 496.1 418.7 495.5 420.3 494.9 421.9 494.4 423.4 493.8 425 493.2 426.5 492.6 428.1 492 429.6 491.4 431.1 490.8 432.6 490.1 434.1 489.5 435.6 488.9 437.1 488.2 438.5 487.6 440 486.9 441.4 486.3 442.9 485.6 444.3 484.9 445.7 484.3 447.1 483.6 448.5 482.9"/><polyline points="341.4 513.8 343.2 513.6 345.1 513.3 347 513 348.9 512.7 350.7 512.4 352.6 512.2 354.5 511.8 356.3 511.5 358.2 511.2 360 510.9 361.8 510.6 363.7 510.2 365.5 509.9 367.3 509.5 369.1 509.2 371 508.8 372.8 508.4 374.6 508 376.3 507.6 378.1 507.2 379.9 506.8 381.7 506.4 383.4 506 385.2 505.6 386.9 505.1 388.7 504.7 390.4 504.2 392.2 503.8 393.9 503.3 395.6 502.8 397.3 502.4 399 501.9"/><polyline points="279.5 517.9 281.5 517.9 283.4 517.9 285.4 517.8 287.3 517.8 289.3 517.8 291.2 517.7 293.2 517.7 295.1 517.6 297.1 517.6 299 517.5 301 517.4 302.9 517.3 304.9 517.2 306.8 517.1 308.8 517 310.7 516.9 312.6 516.7 314.6 516.6 316.5 516.4 318.4 516.3 320.4 516.1 322.3 515.9 324.2 515.8 326.1 515.6 328 515.4 330 515.2 331.9 515 333.8 514.8 335.7 514.5 337.6 514.3 339.5 514.1 341.4 513.8"/><polyline points="217.7 513.8 219.6 514.1 221.5 514.3 223.4 514.5 225.3 514.8 227.2 515 229.1 515.2 231 515.4 232.9 515.6 234.8 515.8 236.7 516 238.7 516.1 240.6 516.3 242.5 516.4 244.5 516.6 246.4 516.7 248.3 516.9 250.3 517 252.2 517.1 254.2 517.2 256.1 517.3 258 517.4 260 517.5 261.9 517.6 263.9 517.6 265.8 517.7 267.8 517.7 269.7 517.8 271.7 517.8 273.7 517.8 275.6 517.9 277.6 517.9 279.5 517.9"/><polyline points="110.6 482.9 111.9 483.6 113.3 484.3 114.8 484.9 116.2 485.6 117.6 486.3 119 486.9 120.5 487.6 122 488.2 123.4 488.9 124.9 489.5 126.4 490.1 127.9 490.8 129.4 491.4 131 492 132.5 492.6 134.1 493.2 135.6 493.8 137.2 494.4 138.8 494.9 140.3 495.5 141.9 496.1 143.5 496.6 145.1 497.2 146.8 497.7 148.4 498.3 150 498.8 151.7 499.3 153.3 499.9 155 500.4 156.7 500.9 158.4 501.4 160 501.9"/><polyline points="160 501.9 161.7 502.4 163.4 502.8 165.2 503.3 166.9 503.8 168.6 504.2 170.3 504.7 172.1 505.1 173.8 505.6 175.6 506 177.4 506.4 179.1 506.8 180.9 507.2 182.7 507.6 184.5 508 186.3 508.4 188.1 508.8 189.9 509.2 191.7 509.5 193.5 509.9 195.3 510.2 197.2 510.6 199 510.9 200.9 511.2 202.7 511.5 204.6 511.9 206.4 512.2 208.3 512.4 210.2 512.7 212 513 213.9 513.3 215.8 513.6 217.7 513.8"/><polyline points="486.4 458.1 487.4 457.3 488.4 456.4 489.3 455.6 490.2 454.7 491.2 453.9 492.1 453 492.9 452.1 493.8 451.2 494.7 450.4 495.5 449.5 496.3 448.6 497.2 447.7 498 446.8 498.7 445.9 499.5 445 500.3 444.1 501 443.2 501.7 442.3 502.4 441.4 503.1 440.5 503.8 439.6 504.5 438.7"/><polyline points="448.5 482.9 449.8 482.2 451.2 481.5 452.6 480.8 453.9 480.1 455.2 479.4 456.6 478.6 457.9 477.9 459.2 477.2 460.4 476.4 461.7 475.7 463 475 464.2 474.2 465.5 473.4 466.7 472.7 467.9 471.9 469.1 471.1 470.3 470.4 471.4 469.6 472.6 468.8 473.7 468 474.9 467.2 476 466.4 477.1 465.6 478.2 464.8 479.3 464 480.3 463.1 481.4 462.3 482.4 461.5 483.4 460.7 484.5 459.8 485.5 459 486.4 458.1"/><polyline points="91.07 435 92.61 435.8 94.18 436.5 95.75 437.3 97.33 438 98.93 438.8 100.5 439.5 102.2 440.2 103.8 441 105.4 441.7 107.1 442.4 108.8 443.1 110.4 443.8 112.1 444.5 113.8 445.2 115.6 445.8 117.3 446.5 119 447.2 120.8 447.8 122.5 448.5 124.3 449.1 126.1 449.7 127.8 450.4 129.6 451 131.5 451.6 133.3 452.2 135.1 452.8 136.9 453.4 138.8 453.9 140.6 454.5 142.5 455.1 144.4 455.6 146.3 456.2"/><polyline points="146.3 456.2 148.2 456.7 150.1 457.3 152 457.8 153.9 458.3 155.8 458.8 157.7 459.3 159.7 459.8 161.6 460.3 163.6 460.8 165.6 461.2 167.5 461.7 169.5 462.2 171.5 462.6 173.5 463 175.5 463.5 177.5 463.9 179.5 464.3 181.6 464.7 183.6 465.1 185.6 465.5 187.7 465.9 189.7 466.2 191.8 466.6 193.9 467 195.9 467.3 198 467.6 200.1 468 202.2 468.3 204.2 468.6 206.3 468.9 208.4 469.2 210.5 469.5"/><polyline points="536.9 375.3 537.5 374.2 538 373.2 538.6 372.1 539.1 371 539.5 370 540 368.9 540.5 367.8 540.9 366.8 541.3 365.7 541.7 364.6 542.1 363.6 542.5 362.5 542.8 361.4"/><polyline points="48.71 407.4 49.81 408.4 50.92 409.3 52.05 410.2 53.2 411.1 54.35 412.1 55.53 413 56.72 413.9 57.92 414.8 59.14 415.7 60.37 416.6 61.62 417.5 62.88 418.4 64.16 419.3 65.45 420.2 66.76 421 68.08 421.9 69.41 422.8 70.76 423.6 72.12 424.5 73.5 425.3 74.89 426.2 76.3 427 77.71 427.8 79.14 428.6 80.59 429.5 82.05 430.3 83.52 431.1 85 431.9 86.5 432.7 88.01 433.5 89.53 434.2 91.07 435"/><polyline points="468 435 469.5 434.2 471 433.4 472.5 432.7 474 431.9 475.5 431.1 477 430.3 478.4 429.5 479.9 428.6 481.3 427.8 482.7 427 484.1 426.2 485.5 425.3 486.9 424.5 488.3 423.6 489.6 422.8 490.9 421.9 492.3 421 493.6 420.2 494.9 419.3 496.1 418.4 497.4 417.5 498.7 416.6 499.9 415.7 501.1 414.8 502.3 413.9 503.5 413 504.7 412.1 505.8 411.1 507 410.2 508.1 409.3 509.2 408.3 510.3 407.4"/><polyline points="210.5 469.5 212.6 469.8 214.8 470 216.9 470.3 219 470.6 221.1 470.8 223.3 471 225.4 471.3 227.5 471.5 229.7 471.7 231.8 471.9 234 472.1 236.1 472.3 238.3 472.4 240.4 472.6 242.6 472.7 244.7 472.9 246.9 473 249.1 473.2 251.2 473.3 253.4 473.4 255.6 473.5 257.7 473.6 259.9 473.7 262.1 473.7 264.3 473.8 266.4 473.9 268.6 473.9 270.8 474 273 474 275.2 474 277.3 474 279.5 474"/><polyline points="510.3 407.4 511.4 406.5 512.5 405.5 513.5 404.6 514.6 403.6 515.6 402.6 516.6 401.7 517.6 400.7 518.5 399.7 519.5 398.7 520.4 397.8 521.4 396.8 522.3 395.8 523.2 394.8 524 393.8 524.9 392.8 525.7 391.8 526.6 390.8 527.4 389.8 528.2 388.7 528.9 387.7 529.7 386.7 530.4 385.7 531.2 384.6 531.9 383.6 532.6 382.6 533.2 381.5 533.9 380.5 534.5 379.5 535.2 378.4 535.8 377.4 536.4 376.3 536.9 375.3"/><polyline points="412.8 456.2 414.6 455.6 416.5 455.1 418.4 454.5 420.2 453.9 422.1 453.4 423.9 452.8 425.8 452.2 427.6 451.6 429.4 451 431.2 450.3 433 449.7 434.7 449.1 436.5 448.5 438.3 447.8 440 447.2 441.8 446.5 443.5 445.8 445.2 445.2 446.9 444.5 448.6 443.8 450.3 443.1 451.9 442.4 453.6 441.7 455.2 441 456.9 440.2 458.5 439.5 460.1 438.8 461.7 438 463.3 437.3 464.9 436.5 466.4 435.8 468 435"/><polyline points="348.5 469.5 350.6 469.2 352.7 468.9 354.8 468.6 356.9 468.3 359 468 361 467.6 363.1 467.3 365.2 467 367.2 466.6 369.3 466.2 371.3 465.9 373.4 465.5 375.4 465.1 377.5 464.7 379.5 464.3 381.5 463.9 383.5 463.5 385.5 463 387.5 462.6 389.5 462.2 391.5 461.7 393.5 461.2 395.4 460.8 397.4 460.3 399.3 459.8 401.3 459.3 403.2 458.8 405.1 458.3 407.1 457.8 409 457.3 410.9 456.7 412.8 456.2"/><polyline points="22.08 375.3 22.66 376.3 23.25 377.4 23.86 378.4 24.48 379.5 25.12 380.5 25.78 381.5 26.46 382.6 27.15 383.6 27.86 384.6 28.58 385.7 29.33 386.7 30.09 387.7 30.86 388.7 31.66 389.8 32.47 390.8 33.29 391.8 34.14 392.8 34.99 393.8 35.87 394.8 36.76 395.8 37.67 396.8 38.59 397.8 39.53 398.7 40.49 399.7 41.46 400.7 42.45 401.7 43.46 402.6 44.48 403.6 45.51 404.6 46.56 405.5 47.63 406.5 48.71 407.4"/><polyline points="279.5 474 281.7 474 283.9 474 286.1 474 288.2 474 290.4 473.9 292.6 473.9 294.8 473.8 296.9 473.7 299.1 473.7 301.3 473.6 303.5 473.5 305.6 473.4 307.8 473.3 310 473.2 312.1 473 314.3 472.9 316.5 472.7 318.6 472.6 320.8 472.4 322.9 472.3 325.1 472.1 327.2 471.9 329.4 471.7 331.5 471.5 333.6 471.3 335.8 471 337.9 470.8 340 470.6 342.2 470.3 344.3 470 346.4 469.8 348.5 469.5"/><polyline points="16.22 361.4 16.56 362.5 16.93 363.6 17.31 364.6 17.71 365.7 18.12 366.8 18.56 367.8 19.01 368.9 19.48 370 19.96 371 20.47 372.1 20.99 373.2 21.53 374.2 22.08 375.3"/></g><g stroke-width="4.137"><polyline points="208.1 412.2 205.9 411.9 203.8 411.6 201.6 411.3 199.4 411 197.3 410.6 195.1 410.3 193 409.9 190.8 409.6 188.7 409.2 186.6 408.8 184.4 408.4 182.3 408 180.2 407.6 178.1 407.2 176 406.8 173.9 406.4 171.8 406 169.8 405.5 167.7 405.1 165.6 404.6 163.6 404.1 161.6 403.6 159.5 403.2 157.5 402.7 155.5 402.2 153.5 401.6 151.4 401.1 149.5 400.6 147.5 400.1 145.5 399.5 143.5 399 141.6 398.4"/><polyline points="474.6 376.5 473 377.3 471.4 378.1 469.8 378.8 468.1 379.6 466.5 380.4 464.8 381.2 463.1 381.9 461.4 382.7 459.7 383.4 458 384.1 456.3 384.9 454.5 385.6 452.8 386.3 451 387 449.3 387.7 447.5 388.4 445.7 389.1 443.9 389.7 442.1 390.4 440.2 391.1 438.4 391.7 436.5 392.4 434.7 393 432.8 393.6 430.9 394.3 429 394.9 427.1 395.5 425.2 396.1 423.3 396.7 421.4 397.3 419.4 397.8 417.5 398.4"/><polyline points="350.9 412.2 348.7 412.5 346.6 412.8 344.4 413 342.2 413.3 340 413.5 337.8 413.8 335.6 414 333.3 414.2 331.1 414.5 328.9 414.7 326.7 414.9 324.5 415 322.2 415.2 320 415.4 317.8 415.6 315.5 415.7 313.3 415.9 311 416 308.8 416.1 306.6 416.2 304.3 416.3 302.1 416.4 299.8 416.5 297.6 416.6 295.3 416.7 293.1 416.7 290.8 416.8 288.5 416.8 286.3 416.8 284 416.9 281.8 416.9 279.5 416.9"/><polyline points="417.5 398.4 415.5 399 413.5 399.5 411.6 400.1 409.6 400.6 407.6 401.1 405.6 401.6 403.6 402.2 401.5 402.7 399.5 403.2 397.5 403.6 395.4 404.1 393.4 404.6 391.3 405.1 389.3 405.5 387.2 406 385.1 406.4 383 406.8 380.9 407.2 378.8 407.6 376.7 408 374.6 408.4 372.5 408.8 370.3 409.2 368.2 409.6 366.1 409.9 363.9 410.3 361.8 410.6 359.6 410.9 357.4 411.3 355.3 411.6 353.1 411.9 350.9 412.2"/><polyline points="279.5 416.9 277.3 416.9 275 416.9 272.7 416.8 270.5 416.8 268.2 416.8 266 416.7 263.7 416.7 261.5 416.6 259.2 416.5 257 416.4 254.7 416.3 252.5 416.2 250.2 416.1 248 416 245.7 415.9 243.5 415.7 241.3 415.6 239 415.4 236.8 415.2 234.6 415 232.3 414.9 230.1 414.7 227.9 414.5 225.7 414.2 223.5 414 221.3 413.8 219.1 413.5 216.9 413.3 214.7 413 212.5 412.8 210.3 412.5 208.1 412.2"/><polyline points="555.4 278.9 555.4 280.1 555.4 281.2 555.3 282.3 555.3 283.4 555.2 284.6 555.1 285.7 555 286.8 554.8 288 554.7 289.1 554.5 290.2 554.3 291.3 554.1 292.5 553.9 293.6 553.6 294.7 553.3 295.8 553.1 296.9 552.8 298.1 552.4 299.2 552.1 300.3 551.7 301.4 551.4 302.5 551 303.6 550.6 304.7 550.1 305.8 549.7 307 549.2 308.1 548.7 309.2 548.2 310.3 547.7 311.4 547.2 312.5 546.6 313.5 546 314.6"/><polyline points="518.5 347.9 517.3 348.9 516.2 349.9 515 350.8 513.8 351.8 512.6 352.7 511.4 353.7 510.2 354.6 508.9 355.6 507.7 356.5 506.4 357.4 505.1 358.4 503.8 359.3 502.5 360.2 501.1 361.1 499.8 362 498.4 362.9 497 363.8 495.6 364.7 494.2 365.6 492.8 366.5 491.4 367.3 489.9 368.2 488.4 369 487 369.9 485.5 370.7 483.9 371.6 482.4 372.4 480.9 373.2 479.3 374.1 477.8 374.9 476.2 375.7 474.6 376.5"/><polyline points="546 314.6 545.4 315.7 544.8 316.8 544.2 317.9 543.5 319 542.9 320.1 542.2 321.1 541.5 322.2 540.8 323.3 540 324.3 539.3 325.4 538.5 326.5 537.7 327.5 536.9 328.6 536.1 329.6 535.3 330.7 534.4 331.7 533.5 332.8 532.7 333.8 531.8 334.8 530.8 335.9 529.9 336.9 528.9 337.9 528 338.9 527 340 526 341 524.9 342 523.9 343 522.8 344 521.8 345 520.7 345.9 519.6 346.9 518.5 347.9"/><polyline points="3.599 278.9 3.609 280.1 3.637 281.2 3.683 282.3 3.748 283.5 3.831 284.6 3.933 285.7 4.052 286.8 4.191 288 4.348 289.1 4.523 290.2 4.717 291.3 4.929 292.5 5.159 293.6 5.408 294.7 5.676 295.8 5.961 296.9 6.265 298.1 6.587 299.2 6.928 300.3 7.286 301.4 7.664 302.5 8.059 303.6 8.472 304.7 8.903 305.9 9.353 307 9.82 308.1 10.31 309.2 10.81 310.3 11.33 311.4 11.87 312.5 12.43 313.6 13 314.6"/><polyline points="13 314.6 13.6 315.7 14.21 316.8 14.84 317.9 15.48 319 16.15 320.1 16.83 321.1 17.53 322.2 18.25 323.3 18.98 324.4 19.73 325.4 20.5 326.5 21.29 327.5 22.09 328.6 22.91 329.6 23.75 330.7 24.61 331.7 25.48 332.8 26.37 333.8 27.27 334.8 28.2 335.9 29.14 336.9 30.09 337.9 31.07 338.9 32.06 340 33.06 341 34.09 342 35.13 343 36.18 344 37.26 345 38.34 346 39.45 346.9 40.57 347.9"/><polyline points="141.6 398.4 139.6 397.8 137.7 397.3 135.7 396.7 133.8 396.1 131.9 395.5 130 394.9 128.1 394.3 126.2 393.6 124.4 393 122.5 392.4 120.6 391.7 118.8 391.1 117 390.4 115.2 389.7 113.4 389.1 111.6 388.4 109.8 387.7 108 387 106.2 386.3 104.5 385.6 102.7 384.9 101 384.1 99.3 383.4 97.6 382.7 95.91 381.9 94.23 381.2 92.56 380.4 90.91 379.6 89.27 378.9 87.64 378.1 86.02 377.3 84.42 376.5"/><polyline points="40.57 347.9 41.71 348.9 42.86 349.9 44.03 350.8 45.21 351.8 46.41 352.7 47.63 353.7 48.86 354.6 50.1 355.6 51.37 356.5 52.64 357.4 53.94 358.4 55.24 359.3 56.56 360.2 57.9 361.1 59.26 362 60.62 362.9 62 363.8 63.4 364.7 64.81 365.6 66.23 366.5 67.67 367.3 69.13 368.2 70.59 369 72.08 369.9 73.57 370.7 75.08 371.6 76.6 372.4 78.14 373.2 79.69 374.1 81.25 374.9 82.83 375.7 84.42 376.5"/></g><g stroke-width="1.448"><polyline points="468 311.3 466.4 312.1 464.9 312.8 463.3 313.6 461.7 314.3 460.1 315.1 458.5 315.8 456.9 316.6 455.2 317.3 453.6 318 451.9 318.7 450.3 319.4 448.6 320.1 446.9 320.8 445.2 321.5 443.5 322.1 441.8 322.8 440 323.5 438.3 324.1 436.5 324.8 434.7 325.4 433 326 431.2 326.7 429.4 327.3 427.6 327.9 425.8 328.5 423.9 329.1 422.1 329.7 420.2 330.2 418.4 330.8 416.5 331.4 414.7 331.9 412.8 332.5"/><polyline points="146.3 332.5 144.4 331.9 142.5 331.4 140.6 330.8 138.8 330.3 136.9 329.7 135.1 329.1 133.3 328.5 131.5 327.9 129.6 327.3 127.8 326.7 126.1 326 124.3 325.4 122.5 324.8 120.8 324.1 119 323.5 117.3 322.8 115.6 322.1 113.8 321.5 112.1 320.8 110.4 320.1 108.8 319.4 107.1 318.7 105.4 318 103.8 317.3 102.2 316.6 100.5 315.8 98.93 315.1 97.33 314.4 95.75 313.6 94.18 312.8 92.61 312.1 91.07 311.3"/><polyline points="91.07 311.3 89.53 310.5 88.01 309.8 86.5 309 85 308.2 83.52 307.4 82.05 306.6 80.59 305.8 79.14 305 77.71 304.1 76.3 303.3 74.89 302.5 73.5 301.6 72.12 300.8 70.76 299.9 69.42 299.1 68.08 298.2 66.76 297.3 65.45 296.5 64.16 295.6 62.88 294.7 61.62 293.8 60.37 292.9 59.14 292 57.92 291.1 56.72 290.2 55.53 289.3 54.35 288.4 53.2 287.5 52.05 286.5 50.92 285.6 49.81 284.7 48.71 283.7"/><polyline points="210.5 345.8 208.4 345.5 206.3 345.2 204.2 344.9 202.2 344.6 200.1 344.3 198 344 195.9 343.6 193.9 343.3 191.8 342.9 189.7 342.6 187.7 342.2 185.6 341.8 183.6 341.4 181.6 341 179.5 340.6 177.5 340.2 175.5 339.8 173.5 339.4 171.5 338.9 169.5 338.5 167.5 338 165.6 337.6 163.6 337.1 161.6 336.6 159.7 336.1 157.7 335.6 155.8 335.1 153.9 334.6 152 334.1 150.1 333.6 148.2 333 146.3 332.5"/><polyline points="536.9 251.6 536.4 252.6 535.8 253.7 535.2 254.7 534.5 255.8 533.9 256.8 533.2 257.9 532.6 258.9 531.9 259.9 531.2 261 530.4 262 529.7 263 528.9 264 528.2 265 527.4 266.1 526.6 267.1 525.7 268.1 524.9 269.1 524 270.1 523.2 271.1 522.3 272.1 521.4 273.1 520.4 274.1 519.5 275 518.5 276 517.6 277 516.6 278 515.6 278.9 514.6 279.9 513.5 280.9 512.5 281.8 511.4 282.8 510.3 283.7"/><polyline points="22.08 251.6 22.66 252.6 23.25 253.7 23.86 254.7 24.48 255.8 25.12 256.8 25.78 257.9 26.46 258.9 27.15 259.9 27.86 261 28.58 262 29.33 263 30.09 264 30.86 265.1 31.66 266.1 32.46 267.1 33.29 268.1 34.13 269.1 34.99 270.1 35.87 271.1 36.76 272.1 37.67 273.1 38.59 274.1 39.53 275.1 40.49 276 41.46 277 42.45 278 43.46 278.9 44.48 279.9 45.51 280.9 46.56 281.8 47.63 282.8 48.71 283.7"/><polyline points="412.8 332.5 410.9 333 409 333.6 407.1 334.1 405.1 334.6 403.2 335.1 401.3 335.6 399.3 336.1 397.4 336.6 395.4 337.1 393.5 337.6 391.5 338 389.5 338.5 387.5 338.9 385.5 339.4 383.5 339.8 381.5 340.2 379.5 340.6 377.5 341 375.4 341.4 373.4 341.8 371.4 342.2 369.3 342.6 367.2 342.9 365.2 343.3 363.1 343.6 361 344 359 344.3 356.9 344.6 354.8 344.9 352.7 345.2 350.6 345.5 348.5 345.8"/><polyline points="279.5 350.3 277.3 350.3 275.2 350.3 273 350.3 270.8 350.3 268.6 350.2 266.4 350.2 264.3 350.1 262.1 350.1 259.9 350 257.7 349.9 255.6 349.8 253.4 349.7 251.2 349.6 249.1 349.5 246.9 349.3 244.7 349.2 242.6 349.1 240.4 348.9 238.3 348.7 236.1 348.6 234 348.4 231.8 348.2 229.7 348 227.5 347.8 225.4 347.6 223.3 347.3 221.1 347.1 219 346.9 216.9 346.6 214.8 346.4 212.6 346.1 210.5 345.8"/><polyline points="348.5 345.8 346.4 346.1 344.3 346.4 342.2 346.6 340 346.9 337.9 347.1 335.8 347.3 333.6 347.6 331.5 347.8 329.4 348 327.2 348.2 325.1 348.4 322.9 348.6 320.8 348.7 318.6 348.9 316.5 349.1 314.3 349.2 312.1 349.3 310 349.5 307.8 349.6 305.6 349.7 303.5 349.8 301.3 349.9 299.1 350 296.9 350.1 294.8 350.1 292.6 350.2 290.4 350.2 288.2 350.3 286.1 350.3 283.9 350.3 281.7 350.3 279.5 350.3"/><polyline points="546 217.1 546 218.2 546 219.3 545.9 220.4 545.9 221.5 545.8 222.5 545.7 223.6 545.6 224.7 545.4 225.8 545.3 226.9 545.1 228 544.9 229.1 544.7 230.2 544.5 231.2 544.3 232.3 544 233.4 543.7 234.5 543.4 235.6 543.1 236.6 542.8 237.7 542.5 238.8 542.1 239.9 541.7 240.9 541.3 242 540.9 243.1 540.5 244.2 540 245.2 539.5 246.3 539.1 247.4 538.6 248.4 538 249.5 537.5 250.5 536.9 251.6"/><polyline points="13 217.1 13.01 218.2 13.04 219.3 13.08 220.4 13.14 221.5 13.22 222.5 13.32 223.6 13.44 224.7 13.57 225.8 13.72 226.9 13.89 228 14.08 229.1 14.28 230.2 14.51 231.2 14.75 232.3 15.01 233.4 15.28 234.5 15.58 235.6 15.89 236.6 16.22 237.7 16.56 238.8 16.93 239.9 17.31 241 17.71 242 18.12 243.1 18.56 244.2 19.01 245.2 19.48 246.3 19.96 247.4 20.47 248.4 20.99 249.5 21.53 250.5 22.08 251.6"/><polyline points="15.88 197.5 15.57 198.6 15.28 199.7 15 200.8 14.75 201.9 14.51 202.9 14.28 204 14.08 205.1 13.89 206.2 13.72 207.3 13.57 208.4 13.44 209.5 13.32 210.6 13.22 211.6 13.14 212.7 13.08 213.8 13.04 214.9 13.01 216 13 217.1"/><polyline points="543.1 197.5 543.4 198.6 543.7 199.7 544 200.8 544.3 201.9 544.5 202.9 544.7 204 544.9 205.1 545.1 206.2 545.3 207.3 545.4 208.4 545.6 209.5 545.7 210.6 545.8 211.6 545.9 212.7 545.9 213.8 546 214.9 546 216 546 217.1"/><polyline points="510.3 283.7 509.2 284.7 508.1 285.6 507 286.5 505.8 287.5 504.7 288.4 503.5 289.3 502.3 290.2 501.1 291.1 499.9 292 498.7 292.9 497.4 293.8 496.1 294.7 494.9 295.6 493.6 296.5 492.3 297.3 490.9 298.2 489.6 299.1 488.3 299.9 486.9 300.8 485.5 301.6 484.1 302.5 482.7 303.3 481.3 304.1 479.9 305 478.4 305.8 477 306.6 475.5 307.4 474 308.2 472.5 309 471 309.8 469.5 310.5 468 311.3"/><polyline points="217.7 274.9 215.8 274.6 213.9 274.3 212 274.1 210.2 273.8 208.3 273.5 206.4 273.2 204.6 272.9 202.7 272.6 200.9 272.3 199 272 197.2 271.6 195.3 271.3 193.5 270.9 191.7 270.6 189.9 270.2 188.1 269.8 186.3 269.5 184.5 269.1 182.7 268.7 180.9 268.3 179.1 267.9 177.4 267.5 175.6 267 173.8 266.6 172.1 266.2 170.3 265.7 168.6 265.3 166.9 264.8 165.2 264.4 163.4 263.9 161.7 263.4 160 262.9"/><polyline points="48.71 128.5 48.21 129.5 47.72 130.4 47.26 131.4 46.81 132.3 46.37 133.3 45.95 134.2 45.54 135.2 45.16 136.2 44.78 137.1 44.42 138.1 44.08 139 43.76 140 43.44 141 43.15 141.9 42.87 142.9 42.61 143.9 42.36 144.8 42.13 145.8 41.91 146.8 41.71 147.8 41.53 148.7 41.36 149.7 41.21 150.7 41.08 151.6 40.96 152.6 40.85 153.6 40.76 154.6 40.69 155.6 40.64 156.5 40.6 157.5 40.57 158.5 40.56 159.5"/><polyline points="40.56 159.5 40.57 160.4 40.6 161.4 40.64 162.4 40.69 163.4 40.76 164.4 40.85 165.3 40.96 166.3 41.08 167.3 41.21 168.3 41.36 169.2 41.53 170.2 41.72 171.2 41.92 172.1 42.13 173.1 42.36 174.1 42.61 175.1 42.87 176 43.15 177 43.45 178 43.76 178.9 44.08 179.9 44.43 180.9 44.78 181.8 45.16 182.8 45.55 183.7 45.95 184.7 46.37 185.6 46.81 186.6 47.26 187.5 47.73 188.5 48.21 189.4 48.71 190.4"/><polyline points="341.4 274.9 339.5 275.1 337.6 275.4 335.7 275.6 333.8 275.8 331.9 276 330 276.2 328 276.4 326.1 276.6 324.2 276.8 322.3 277 320.4 277.2 318.4 277.3 316.5 277.5 314.6 277.6 312.6 277.8 310.7 277.9 308.8 278 306.8 278.2 304.9 278.3 302.9 278.4 301 278.4 299 278.5 297.1 278.6 295.1 278.7 293.2 278.7 291.2 278.8 289.3 278.8 287.3 278.9 285.4 278.9 283.4 278.9 281.5 278.9 279.5 278.9"/><polyline points="279.5 278.9 277.6 278.9 275.6 278.9 273.7 278.9 271.7 278.9 269.7 278.8 267.8 278.8 265.8 278.7 263.9 278.7 261.9 278.6 260 278.5 258 278.4 256.1 278.4 254.2 278.3 252.2 278.2 250.3 278 248.3 277.9 246.4 277.8 244.5 277.6 242.5 277.5 240.6 277.3 238.7 277.2 236.7 277 234.8 276.8 232.9 276.6 231 276.4 229.1 276.2 227.2 276 225.3 275.8 223.4 275.6 221.5 275.4 219.6 275.1 217.7 274.9"/><polyline points="160 262.9 158.4 262.4 156.7 261.9 155 261.4 153.3 260.9 151.7 260.4 150 259.9 148.4 259.3 146.8 258.8 145.1 258.3 143.5 257.7 141.9 257.1 140.3 256.6 138.8 256 137.2 255.4 135.6 254.8 134.1 254.2 132.5 253.6 131 253 129.4 252.4 127.9 251.8 126.4 251.2 124.9 250.6 123.4 249.9 122 249.3 120.5 248.6 119 248 117.6 247.3 116.2 246.7 114.8 246 113.3 245.3 111.9 244.6 110.6 243.9"/><polyline points="72.58 219.2 71.61 218.4 70.66 217.5 69.71 216.6 68.78 215.8 67.87 214.9 66.97 214.1 66.08 213.2 65.21 212.3 64.35 211.4 63.51 210.5 62.68 209.7 61.87 208.8 61.07 207.9 60.28 207 59.51 206.1 58.76 205.2 58.02 204.3 57.29 203.4 56.58 202.5 55.88 201.6 55.2 200.6 54.54 199.7 53.88 198.8 53.25 197.9 52.63 196.9 52.02 196 51.43 195.1 50.86 194.1 50.3 193.2 49.75 192.3 49.22 191.3 48.71 190.4"/><polyline points="53.88 120.1 53.25 121.1 52.62 122 52.02 122.9 51.43 123.8 50.85 124.8 50.29 125.7 49.75 126.7 49.22 127.6 48.71 128.5"/><polyline points="110.6 243.9 109.2 243.2 107.8 242.6 106.5 241.8 105.1 241.1 103.8 240.4 102.5 239.7 101.2 239 99.87 238.2 98.58 237.5 97.31 236.8 96.06 236 94.81 235.3 93.57 234.5 92.35 233.7 91.14 233 89.95 232.2 88.76 231.4 87.59 230.6 86.43 229.8 85.29 229.1 84.16 228.3 83.04 227.5 81.93 226.6 80.84 225.8 79.76 225 78.69 224.2 77.64 223.4 76.6 222.6 75.58 221.7 74.56 220.9 73.57 220 72.58 219.2"/><polyline points="399 262.9 397.3 263.4 395.6 263.9 393.9 264.4 392.2 264.8 390.4 265.3 388.7 265.7 386.9 266.2 385.2 266.6 383.4 267 381.7 267.5 379.9 267.9 378.1 268.3 376.3 268.7 374.6 269.1 372.8 269.5 371 269.8 369.1 270.2 367.3 270.6 365.5 270.9 363.7 271.3 361.9 271.6 360 271.9 358.2 272.3 356.3 272.6 354.5 272.9 352.6 273.2 350.7 273.5 348.9 273.8 347 274.1 345.1 274.3 343.2 274.6 341.4 274.9"/><polyline points="448.5 243.9 447.1 244.6 445.7 245.3 444.3 246 442.9 246.7 441.4 247.3 440 248 438.5 248.6 437.1 249.3 435.6 249.9 434.1 250.6 432.6 251.2 431.1 251.8 429.6 252.4 428.1 253 426.5 253.6 425 254.2 423.4 254.8 421.9 255.4 420.3 256 418.7 256.6 417.1 257.1 415.5 257.7 413.9 258.3 412.3 258.8 410.6 259.3 409 259.9 407.4 260.4 405.7 260.9 404 261.4 402.4 261.9 400.7 262.4 399 262.9"/><polyline points="510.3 190.4 509.8 191.3 509.3 192.3 508.7 193.2 508.2 194.1 507.6 195.1 507 196 506.4 196.9 505.8 197.9 505.1 198.8 504.5 199.7 503.8 200.6 503.1 201.5 502.4 202.5 501.7 203.4 501 204.3 500.3 205.2 499.5 206.1 498.7 207 498 207.9 497.2 208.8 496.3 209.7 495.5 210.5 494.7 211.4 493.8 212.3 492.9 213.2 492.1 214 491.2 214.9 490.2 215.8 489.3 216.6 488.4 217.5 487.4 218.3 486.4 219.2"/><polyline points="486.4 219.2 485.5 220 484.5 220.9 483.5 221.7 482.4 222.6 481.4 223.4 480.3 224.2 479.3 225 478.2 225.8 477.1 226.6 476 227.5 474.9 228.3 473.7 229.1 472.6 229.8 471.4 230.6 470.3 231.4 469.1 232.2 467.9 233 466.7 233.7 465.5 234.5 464.2 235.3 463 236 461.7 236.8 460.4 237.5 459.2 238.2 457.9 239 456.6 239.7 455.2 240.4 453.9 241.1 452.6 241.8 451.2 242.5 449.8 243.2 448.5 243.9"/><polyline points="518.5 159.5 518.4 160.4 518.4 161.4 518.4 162.4 518.3 163.4 518.3 164.3 518.2 165.3 518.1 166.3 517.9 167.3 517.8 168.3 517.7 169.2 517.5 170.2 517.3 171.2 517.1 172.1 516.9 173.1 516.7 174.1 516.4 175.1 516.1 176 515.9 177 515.6 178 515.3 178.9 514.9 179.9 514.6 180.8 514.2 181.8 513.9 182.8 513.5 183.7 513.1 184.7 512.7 185.6 512.2 186.6 511.8 187.5 511.3 188.5 510.8 189.4 510.3 190.4"/><polyline points="505.1 120.1 505.8 121.1 506.4 122 507 122.9 507.6 123.8 508.2 124.8 508.7 125.7 509.3 126.7 509.8 127.6 510.3 128.5"/><polyline points="510.3 128.5 510.8 129.5 511.3 130.4 511.8 131.4 512.2 132.3 512.7 133.3 513.1 134.2 513.5 135.2 513.9 136.2 514.2 137.1 514.6 138.1 514.9 139 515.3 140 515.6 141 515.9 141.9 516.2 142.9 516.4 143.9 516.7 144.8 516.9 145.8 517.1 146.8 517.3 147.8 517.5 148.7 517.7 149.7 517.8 150.7 517.9 151.6 518.1 152.6 518.2 153.6 518.3 154.6 518.3 155.6 518.4 156.5 518.4 157.5 518.4 158.5 518.5 159.5"/><polyline points="468 135.2 467.5 136 467.1 136.8 466.7 137.5 466.2 138.3 465.7 139.1 465.3 139.8 464.8 140.6 464.3 141.3 463.7 142.1 463.2 142.8 462.7 143.6 462.1 144.3 461.5 145.1 461 145.8 460.4 146.6 459.8 147.3 459.1 148 458.5 148.8 457.9 149.5 457.2 150.2 456.6 151 455.9 151.7 455.2 152.4 454.5 153.1 453.8 153.8 453.1 154.5 452.3 155.3 451.6 156 450.8 156.7 450 157.4 449.3 158.1 448.5 158.7"/><polyline points="468 84.73 468.4 85.5 468.8 86.27 469.1 87.05 469.5 87.82 469.9 88.6 470.2 89.38 470.5 90.16 470.9 90.94 471.2 91.73 471.5 92.51 471.7 93.3 472 94.08 472.3 94.87 472.5 95.66 472.7 96.45 472.9 97.24 473.1 98.03 473.3 98.82 473.5 99.62 473.7 100.4 473.8 101.2 474 102 474.1 102.8 474.2 103.6 474.3 104.4 474.4 105.2 474.4 106 474.5 106.8 474.6 107.6 474.6 108.4 474.6 109.2 474.6 110"/><polyline points="439 53.81 439.9 54.46 440.8 55.12 441.7 55.78 442.6 56.44 443.5 57.11 444.3 57.79 445.2 58.46 446 59.14 446.9 59.82 447.7 60.51 448.5 61.2"/><polyline points="474.6 110 474.6 110.8 474.6 111.6 474.6 112.4 474.5 113.2 474.4 114 474.4 114.8 474.3 115.6 474.2 116.4 474.1 117.2 474 117.9 473.8 118.7 473.7 119.5 473.5 120.3 473.3 121.1 473.1 121.9 472.9 122.7 472.7 123.5 472.5 124.3 472.3 125.1 472 125.9 471.7 126.7 471.5 127.4 471.2 128.2 470.9 129 470.5 129.8 470.2 130.6 469.9 131.3 469.5 132.1 469.1 132.9 468.8 133.7 468.4 134.4 468 135.2"/><polyline points="448.5 61.2 449.3 61.89 450 62.59 450.8 63.29 451.6 63.99 452.3 64.7 453.1 65.4 453.8 66.12 454.5 66.83 455.2 67.55 455.9 68.27 456.6 68.99 457.2 69.72 457.9 70.44 458.5 71.17 459.1 71.91 459.8 72.64 460.4 73.38 461 74.12 461.5 74.87 462.1 75.61 462.7 76.36 463.2 77.11 463.7 77.86 464.3 78.62 464.8 79.38 465.3 80.13 465.7 80.9 466.2 81.66 466.7 82.42 467.1 83.19 467.5 83.96 468 84.73"/><polyline points="141.6 179 140.4 178.4 139.3 177.8 138.2 177.2 137.1 176.7 136 176.1 135 175.5 133.9 174.9 132.8 174.3 131.8 173.7 130.7 173.1 129.7 172.5 128.7 171.9 127.7 171.2 126.7 170.6 125.7 170 124.7 169.4 123.8 168.7 122.8 168.1 121.9 167.4 120.9 166.8 120 166.1 119.1 165.5 118.2 164.8 117.3 164.2 116.4 163.5 115.5 162.8 114.7 162.2 113.8 161.5 113 160.8 112.2 160.1 111.4 159.4 110.6 158.8"/><polyline points="110.6 61.2 111.4 60.51 112.2 59.82 113 59.14 113.8 58.46 114.7 57.78 115.5 57.11 116.4 56.44 117.3 55.78 118.2 55.12 119.1 54.46 120 53.8"/><polyline points="448.5 158.7 447.7 159.4 446.9 160.1 446 160.8 445.2 161.5 444.3 162.2 443.5 162.8 442.6 163.5 441.7 164.2 440.8 164.8 439.9 165.5 439 166.1 438.1 166.8 437.2 167.4 436.2 168.1 435.3 168.7 434.3 169.4 433.3 170 432.3 170.6 431.3 171.2 430.3 171.9 429.3 172.5 428.3 173.1 427.2 173.7 426.2 174.3 425.1 174.9 424.1 175.5 423 176.1 421.9 176.7 420.8 177.2 419.7 177.8 418.6 178.4 417.5 179"/><polyline points="110.6 158.8 109.8 158.1 109 157.4 108.2 156.7 107.5 156 106.7 155.3 106 154.5 105.2 153.8 104.5 153.1 103.8 152.4 103.1 151.7 102.5 151 101.8 150.2 101.2 149.5 100.5 148.8 99.88 148 99.27 147.3 98.66 146.6 98.07 145.8 97.49 145.1 96.92 144.3 96.36 143.6 95.82 142.8 95.29 142.1 94.77 141.3 94.26 140.6 93.77 139.8 93.28 139.1 92.82 138.3 92.36 137.5 91.91 136.8 91.48 136 91.06 135.2"/><polyline points="91.06 84.73 90.65 85.5 90.26 86.27 89.88 87.05 89.51 87.82 89.15 88.6 88.81 89.38 88.48 90.16 88.16 90.94 87.86 91.73 87.56 92.51 87.28 93.3 87.02 94.08 86.76 94.87 86.52 95.66 86.3 96.45 86.08 97.24 85.88 98.03 85.69 98.83 85.51 99.62 85.35 100.4 85.2 101.2 85.06 102 84.94 102.8 84.83 103.6 84.73 104.4 84.65 105.2 84.58 106 84.52 106.8 84.47 107.6 84.44 108.4 84.42 109.2 84.41 110"/><polyline points="91.06 135.2 90.66 134.5 90.26 133.7 89.88 132.9 89.51 132.1 89.15 131.4 88.81 130.6 88.48 129.8 88.16 129 87.86 128.2 87.56 127.4 87.28 126.7 87.02 125.9 86.76 125.1 86.52 124.3 86.3 123.5 86.08 122.7 85.88 121.9 85.69 121.1 85.52 120.3 85.35 119.5 85.2 118.7 85.06 117.9 84.94 117.2 84.83 116.4 84.73 115.6 84.65 114.8 84.58 114 84.52 113.2 84.47 112.4 84.44 111.6 84.42 110.8 84.41 110"/><polyline points="182 194.5 180.6 194.1 179.2 193.6 177.8 193.2 176.5 192.8 175.1 192.4 173.8 192 172.5 191.5 171.1 191.1 169.8 190.6 168.5 190.2 167.2 189.7 165.9 189.3 164.6 188.8 163.3 188.3 162 187.8 160.7 187.4 159.5 186.9 158.2 186.4 157 185.9 155.7 185.4 154.5 184.9 153.3 184.4 152.1 183.8 150.9 183.3 149.7 182.8 148.5 182.3 147.3 181.7 146.1 181.2 145 180.6 143.8 180.1 142.7 179.5 141.6 179"/><polyline points="110.6 61.2 109.8 61.89 109 62.59 108.2 63.29 107.4 63.99 106.7 64.69 106 65.4 105.2 66.11 104.5 66.83 103.8 67.54 103.1 68.26 102.5 68.99 101.8 69.71 101.1 70.44 100.5 71.17 99.88 71.91 99.26 72.64 98.66 73.38 98.06 74.12 97.48 74.86 96.92 75.61 96.36 76.36 95.82 77.11 95.28 77.86 94.77 78.62 94.26 79.37 93.76 80.13 93.28 80.89 92.81 81.66 92.36 82.42 91.91 83.19 91.48 83.96 91.06 84.73"/><polyline points="229 204.2 227.5 204 225.9 203.8 224.4 203.6 222.9 203.3 221.4 203.1 219.8 202.8 218.3 202.6 216.8 202.3 215.3 202.1 213.8 201.8 212.3 201.6 210.8 201.3 209.3 201 207.8 200.7 206.3 200.4 204.9 200.1 203.4 199.8 201.9 199.5 200.5 199.2 199 198.8 197.5 198.5 196.1 198.2 194.7 197.8 193.2 197.5 191.8 197.1 190.4 196.7 189 196.4 187.5 196 186.1 195.6 184.7 195.2 183.4 194.9 182 194.5"/><polyline points="377.1 194.5 375.7 194.8 374.3 195.2 372.9 195.6 371.5 196 370.1 196.4 368.7 196.7 367.2 197.1 365.8 197.5 364.4 197.8 362.9 198.2 361.5 198.5 360 198.8 358.6 199.2 357.1 199.5 355.6 199.8 354.2 200.1 352.7 200.4 351.2 200.7 349.7 201 348.2 201.3 346.7 201.5 345.2 201.8 343.7 202.1 342.2 202.3 340.7 202.6 339.2 202.8 337.7 203.1 336.1 203.3 334.6 203.6 333.1 203.8 331.5 204 330 204.2"/><polyline points="417.5 179 416.3 179.5 415.2 180.1 414 180.6 412.9 181.2 411.7 181.7 410.5 182.3 409.3 182.8 408.2 183.3 406.9 183.8 405.7 184.4 404.5 184.9 403.3 185.4 402 185.9 400.8 186.4 399.5 186.9 398.3 187.4 397 187.8 395.7 188.3 394.4 188.8 393.2 189.3 391.9 189.7 390.5 190.2 389.2 190.6 387.9 191.1 386.6 191.5 385.2 192 383.9 192.4 382.5 192.8 381.2 193.2 379.8 193.6 378.4 194.1 377.1 194.5"/><polyline points="330 204.2 328.5 204.4 326.9 204.6 325.4 204.8 323.8 205 322.3 205.2 320.7 205.3 319.1 205.5 317.6 205.6 316 205.8 314.4 205.9 312.9 206.1 311.3 206.2 309.7 206.3 308.1 206.5 306.6 206.6 305 206.7 303.4 206.8 301.8 206.9 300.2 207 298.6 207.1 297 207.1 295.5 207.2 293.9 207.3 292.3 207.3 290.7 207.4 289.1 207.4 287.5 207.4 285.9 207.5 284.3 207.5 282.7 207.5 281.1 207.5 279.5 207.5"/><polyline points="279.5 207.5 277.9 207.5 276.3 207.5 274.7 207.5 273.1 207.5 271.5 207.4 269.9 207.4 268.3 207.4 266.8 207.3 265.2 207.3 263.6 207.2 262 207.1 260.4 207.1 258.8 207 257.2 206.9 255.6 206.8 254 206.7 252.5 206.6 250.9 206.5 249.3 206.3 247.7 206.2 246.2 206.1 244.6 205.9 243 205.8 241.5 205.6 239.9 205.5 238.3 205.3 236.8 205.2 235.2 205 233.7 204.8 232.1 204.6 230.6 204.4 229 204.2"/><polyline points="160 106.5 159.5 106 158.9 105.5 158.4 105 157.8 104.5 157.3 104 156.8 103.5 156.3 103 155.8 102.5 155.3 102 154.8 101.5 154.3 101 153.9 100.5 153.4 99.96 152.9 99.44 152.5 98.92 152.1 98.4 151.6 97.88 151.2 97.35 150.8 96.83 150.4 96.3 150 95.77 149.6 95.24 149.2 94.71 148.9 94.18 148.5 93.64 148.2 93.1 147.8 92.57 147.5 92.03 147.2 91.48 146.9 90.94 146.6 90.4 146.3 89.86"/><polyline points="182 120.8 181.2 120.4 180.4 120 179.6 119.6 178.8 119.2 178.1 118.7 177.3 118.3 176.5 117.9 175.8 117.5 175.1 117.1 174.3 116.6 173.6 116.2 172.9 115.8 172.2 115.3 171.5 114.9 170.8 114.4 170.1 114 169.4 113.5 168.7 113.1 168 112.6 167.4 112.2 166.7 111.7 166.1 111.3 165.4 110.8 164.8 110.3 164.2 109.9 163.6 109.4 163 108.9 162.4 108.4 161.8 107.9 161.2 107.5 160.6 107 160 106.5"/><polyline points="210.5 131.7 209.6 131.5 208.6 131.2 207.6 130.9 206.7 130.6 205.7 130.3 204.8 130 203.8 129.7 202.9 129.4 201.9 129 201 128.7 200.1 128.4 199.2 128.1 198.2 127.7 197.3 127.4 196.4 127.1 195.5 126.7 194.6 126.4 193.8 126 192.9 125.7 192 125.3 191.1 125 190.3 124.6 189.4 124.2 188.6 123.9 187.7 123.5 186.9 123.1 186 122.7 185.2 122.3 184.4 122 183.6 121.6 182.8 121.2 182 120.8"/><polyline points="279.5 141 278.4 141 277.3 141 276.1 141 275 140.9 273.9 140.9 272.7 140.9 271.6 140.9 270.5 140.8 269.4 140.8 268.2 140.7 267.1 140.7 266 140.6 264.9 140.6 263.7 140.5 262.6 140.5 261.5 140.4 260.4 140.3 259.3 140.2 258.2 140.1 257 140.1 255.9 140 254.8 139.9 253.7 139.8 252.6 139.7 251.5 139.5 250.4 139.4 249.3 139.3 248.2 139.2 247.1 139 246 138.9 244.9 138.8 243.8 138.6"/><polyline points="243.8 138.6 242.7 138.5 241.6 138.3 240.5 138.2 239.5 138 238.4 137.8 237.3 137.7 236.2 137.5 235.2 137.3 234.1 137.1 233 136.9 232 136.8 230.9 136.6 229.9 136.4 228.8 136.2 227.8 135.9 226.7 135.7 225.7 135.5 224.6 135.3 223.6 135.1 222.6 134.8 221.6 134.6 220.5 134.4 219.5 134.1 218.5 133.9 217.5 133.6 216.5 133.4 215.5 133.1 214.5 132.8 213.5 132.6 212.5 132.3 211.5 132 210.5 131.7"/><polyline points="348.5 131.7 347.5 132 346.5 132.3 345.5 132.6 344.5 132.8 343.5 133.1 342.5 133.4 341.5 133.6 340.5 133.9 339.5 134.1 338.5 134.4 337.5 134.6 336.4 134.8 335.4 135.1 334.4 135.3 333.3 135.5 332.3 135.7 331.3 135.9 330.2 136.2 329.2 136.4 328.1 136.6 327 136.8 326 136.9 324.9 137.1 323.9 137.3 322.8 137.5 321.7 137.7 320.6 137.8 319.6 138 318.5 138.2 317.4 138.3 316.3 138.5 315.2 138.6"/><polyline points="315.2 138.6 314.1 138.8 313 138.9 311.9 139 310.8 139.2 309.7 139.3 308.6 139.4 307.5 139.5 306.4 139.7 305.3 139.8 304.2 139.9 303.1 140 302 140.1 300.9 140.1 299.8 140.2 298.6 140.3 297.5 140.4 296.4 140.5 295.3 140.5 294.2 140.6 293 140.6 291.9 140.7 290.8 140.7 289.7 140.8 288.5 140.8 287.4 140.9 286.3 140.9 285.2 140.9 284 140.9 282.9 141 281.8 141 280.6 141 279.5 141"/><polyline points="377.1 120.8 376.3 121.2 375.5 121.6 374.6 122 373.8 122.3 373 122.7 372.2 123.1 371.3 123.5 370.5 123.9 369.6 124.2 368.8 124.6 367.9 125 367 125.3 366.2 125.7 365.3 126 364.4 126.4 363.5 126.7 362.6 127.1 361.7 127.4 360.8 127.7 359.9 128.1 358.9 128.4 358 128.7 357.1 129 356.2 129.4 355.2 129.7 354.3 130 353.3 130.3 352.4 130.6 351.4 130.9 350.4 131.2 349.5 131.5 348.5 131.7"/><polyline points="182 23.23 182.8 22.83 183.6 22.43 184.4 22.04 185.2 21.66 186 21.27 186.9 20.89 187.7 20.51 188.6 20.14 189.4 19.77 190.3 19.4 191.1 19.04 192 18.68 192.9 18.32 193.8 17.97 194.6 17.62 195.5 17.28 196.4 16.93 197.3 16.6 198.2 16.26 199.2 15.93 200.1 15.6 201 15.28 201.9 14.96 202.9 14.65 203.8 14.33 204.8 14.03 205.7 13.72 206.7 13.42 207.6 13.13 208.6 12.84 209.6 12.55 210.5 12.26"/><polyline points="160 37.51 160.6 37.02 161.2 36.54 161.8 36.06 162.4 35.58 163 35.1 163.6 34.62 164.2 34.15 164.8 33.68 165.4 33.21 166.1 32.74 166.7 32.28 167.4 31.82 168 31.36 168.7 30.91 169.4 30.46 170.1 30.01 170.8 29.56 171.5 29.12 172.2 28.68 172.9 28.24 173.6 27.81 174.3 27.38 175 26.95 175.8 26.52 176.5 26.1 177.3 25.68 178.1 25.26 178.8 24.85 179.6 24.44 180.4 24.03 181.2 23.63 182 23.23"/><polyline points="160 37.51 159.5 38 158.9 38.49 158.4 38.99 157.8 39.48 157.3 39.98 156.8 40.48 156.3 40.99 155.8 41.49 155.3 42 154.8 42.51 154.3 43.02 153.9 43.53 153.4 44.05 152.9 44.56 152.5 45.08 152.1 45.6 151.6 46.12 151.2 46.65 150.8 47.18 150.4 47.7 150 48.23 149.6 48.76 149.2 49.29 148.9 49.83 148.5 50.36 148.2 50.9 147.8 51.44 147.5 51.98 147.2 52.52 146.9 53.06 146.6 53.6 146.3 54.15"/><polyline points="141.6 72 141.6 71.44 141.6 70.87 141.6 70.31 141.6 69.74 141.7 69.18 141.7 68.62 141.8 68.05 141.8 67.49 141.9 66.93 142 66.36 142.1 65.8 142.2 65.24 142.3 64.68 142.5 64.12 142.6 63.56 142.7 63 142.9 62.44 143 61.88 143.2 61.32 143.4 60.76 143.6 60.21 143.8 59.65 144 59.1 144.2 58.54 144.4 57.99 144.7 57.44 144.9 56.89 145.2 56.34 145.4 55.79 145.7 55.24 146 54.69 146.3 54.15"/><polyline points="146.3 89.86 146 89.31 145.7 88.76 145.4 88.22 145.2 87.67 144.9 87.12 144.7 86.56 144.4 86.01 144.2 85.46 144 84.91 143.8 84.35 143.6 83.8 143.4 83.24 143.2 82.68 143 82.12 142.9 81.57 142.7 81.01 142.6 80.45 142.5 79.89 142.3 79.32 142.2 78.76 142.1 78.2 142 77.64 141.9 77.08 141.9 76.51 141.8 75.95 141.7 75.39 141.7 74.82 141.6 74.26 141.6 73.7 141.6 73.13 141.6 72.57 141.6 72"/><polyline points="348.5 12.26 349.5 12.55 350.4 12.84 351.4 13.13 352.4 13.42 353.3 13.72 354.3 14.03 355.2 14.34 356.2 14.65 357.1 14.96 358 15.28 359 15.61 359.9 15.93 360.8 16.26 361.7 16.6 362.6 16.94 363.5 17.28 364.4 17.62 365.3 17.97 366.2 18.32 367 18.68 367.9 19.04 368.8 19.4 369.6 19.77 370.5 20.14 371.3 20.52 372.2 20.89 373 21.27 373.8 21.66 374.6 22.04 375.5 22.44 376.3 22.83 377.1 23.23"/><polyline points="210.5 12.26 211.5 11.98 212.5 11.71 213.5 11.43 214.5 11.17 215.5 10.9 216.5 10.64 217.5 10.39 218.5 10.14 219.5 9.887 220.5 9.644 221.6 9.404 222.6 9.17 223.6 8.938 224.6 8.712 225.7 8.49 226.7 8.271 227.8 8.058 228.8 7.848 229.9 7.643 230.9 7.442 232 7.246 233 7.053 234.1 6.865 235.2 6.682 236.2 6.503 237.3 6.328 238.4 6.157 239.5 5.991 240.6 5.83 241.6 5.673 242.7 5.52 243.8 5.372"/><polyline points="315.2 5.374 316.3 5.521 317.4 5.674 318.5 5.831 319.6 5.993 320.6 6.159 321.7 6.329 322.8 6.504 323.9 6.684 324.9 6.867 326 7.055 327.1 7.247 328.1 7.444 329.2 7.645 330.2 7.85 331.3 8.06 332.3 8.273 333.4 8.492 334.4 8.714 335.4 8.941 336.4 9.171 337.5 9.407 338.5 9.646 339.5 9.889 340.5 10.14 341.5 10.39 342.5 10.64 343.5 10.9 344.5 11.17 345.5 11.44 346.5 11.71 347.5 11.98 348.5 12.26"/><polyline points="243.8 5.372 244.9 5.228 246 5.088 247.1 4.954 248.2 4.824 249.3 4.697 250.4 4.576 251.5 4.459 252.6 4.347 253.7 4.239 254.8 4.136 255.9 4.037 257 3.943 258.2 3.854 259.3 3.769 260.4 3.688 261.5 3.612 262.6 3.541 263.7 3.474 264.9 3.412 266 3.354 267.1 3.301 268.2 3.252 269.4 3.208 270.5 3.169 271.6 3.135 272.7 3.105 273.9 3.08 275 3.059 276.1 3.043 277.3 3.032 278.4 3.024"/><polyline points="377.1 23.23 377.9 23.63 378.6 24.03 379.4 24.44 380.2 24.85 381 25.26 381.7 25.68 382.5 26.1 383.2 26.52 384 26.95 384.7 27.38 385.4 27.81 386.2 28.24 386.9 28.68 387.6 29.12 388.3 29.56 389 30.01 389.6 30.46 390.3 30.91 391 31.37 391.6 31.82 392.3 32.28 392.9 32.75 393.6 33.21 394.2 33.68 394.8 34.15 395.5 34.62 396.1 35.1 396.7 35.58 397.3 36.06 397.8 36.54 398.4 37.02 399 37.51"/><polyline points="399 106.5 398.4 107 397.8 107.5 397.3 107.9 396.7 108.4 396.1 108.9 395.5 109.4 394.8 109.9 394.2 110.3 393.6 110.8 392.9 111.3 392.3 111.7 391.6 112.2 391 112.6 390.3 113.1 389.6 113.5 389 114 388.3 114.4 387.6 114.9 386.9 115.3 386.2 115.8 385.4 116.2 384.7 116.6 384 117.1 383.2 117.5 382.5 117.9 381.7 118.3 381 118.7 380.2 119.2 379.4 119.6 378.6 120 377.9 120.4 377.1 120.8"/><polyline points="280.6 3.024 281.8 3.032 282.9 3.043 284 3.059 285.2 3.08 286.3 3.105 287.4 3.135 288.5 3.17 289.7 3.209 290.8 3.253 291.9 3.301 293 3.354 294.2 3.412 295.3 3.475 296.4 3.542 297.5 3.612 298.6 3.688 299.8 3.769 300.9 3.854 302 3.944 303.1 4.038 304.2 4.137 305.3 4.24 306.4 4.348 307.5 4.46 308.6 4.577 309.7 4.699 310.8 4.825 311.9 4.955 313 5.09 314.1 5.229 315.2 5.374"/><polyline points="412.8 89.85 412.5 90.4 412.2 90.94 411.8 91.48 411.5 92.02 411.2 92.56 410.9 93.1 410.5 93.64 410.1 94.17 409.8 94.71 409.4 95.24 409 95.77 408.6 96.3 408.2 96.82 407.8 97.35 407.4 97.88 407 98.4 406.5 98.92 406.1 99.44 405.6 99.95 405.2 100.5 404.7 101 404.2 101.5 403.7 102 403.2 102.5 402.7 103 402.2 103.5 401.7 104 401.2 104.5 400.6 105 400.1 105.5 399.5 106 399 106.5"/><polyline points="417.5 72 417.5 72.56 417.4 73.13 417.4 73.69 417.4 74.26 417.4 74.82 417.3 75.38 417.2 75.95 417.2 76.51 417.1 77.08 417 77.64 416.9 78.2 416.8 78.76 416.7 79.32 416.6 79.88 416.4 80.44 416.3 81 416.1 81.56 416 82.12 415.8 82.68 415.6 83.24 415.4 83.79 415.2 84.35 415 84.9 414.8 85.46 414.6 86.01 414.4 86.56 414.1 87.11 413.9 87.66 413.6 88.21 413.3 88.76 413.1 89.31 412.8 89.85"/><polyline points="412.8 54.15 413.1 54.69 413.3 55.24 413.6 55.79 413.9 56.34 414.1 56.89 414.4 57.44 414.6 57.99 414.8 58.54 415 59.1 415.2 59.65 415.4 60.21 415.6 60.76 415.8 61.32 416 61.88 416.1 62.44 416.3 63 416.4 63.56 416.6 64.12 416.7 64.68 416.8 65.24 416.9 65.8 417 66.36 417.1 66.93 417.2 67.49 417.2 68.05 417.3 68.62 417.4 69.18 417.4 69.74 417.4 70.31 417.4 70.87 417.5 71.44 417.5 72"/><polyline points="399 37.51 399.5 38 400.1 38.49 400.6 38.99 401.2 39.48 401.7 39.98 402.2 40.48 402.7 40.99 403.2 41.49 403.7 42 404.2 42.51 404.7 43.02 405.2 43.53 405.6 44.05 406.1 44.56 406.5 45.08 407 45.6 407.4 46.13 407.8 46.65 408.2 47.18 408.6 47.7 409 48.23 409.4 48.76 409.8 49.3 410.1 49.83 410.5 50.36 410.9 50.9 411.2 51.44 411.5 51.98 411.9 52.52 412.2 53.06 412.5 53.6 412.8 54.15"/><polyline points="243.8 79.05 243.3 78.9 242.8 78.76 242.3 78.6 241.8 78.45 241.3 78.3 240.8 78.14 240.3 77.98 239.8 77.82 239.4 77.66 238.9 77.49 238.4 77.32 237.9 77.15 237.4 76.98 237 76.81 236.5 76.63 236 76.46 235.6 76.28 235.1 76.1 234.7 75.92 234.2 75.73 233.8 75.54 233.3 75.36 232.9 75.17 232.4 74.98 232 74.78 231.6 74.59 231.1 74.39 230.7 74.19 230.3 73.99 229.8 73.79 229.4 73.58 229 73.38"/><polyline points="261 82.62 260.5 82.54 259.9 82.46 259.3 82.38 258.8 82.3 258.2 82.21 257.7 82.12 257.1 82.03 256.6 81.94 256 81.84 255.5 81.75 254.9 81.65 254.4 81.55 253.8 81.44 253.3 81.34 252.7 81.23 252.2 81.12 251.6 81 251.1 80.89 250.6 80.77 250 80.65 249.5 80.53 249 80.41 248.5 80.28 247.9 80.15 247.4 80.02 246.9 79.89 246.4 79.76 245.8 79.62 245.3 79.48 244.8 79.34 244.3 79.2 243.8 79.05"/><polyline points="315.2 79.05 314.7 79.2 314.2 79.34 313.7 79.48 313.2 79.62 312.7 79.76 312.1 79.89 311.6 80.02 311.1 80.15 310.6 80.28 310 80.41 309.5 80.53 309 80.65 308.5 80.77 307.9 80.89 307.4 81 306.8 81.12 306.3 81.23 305.8 81.34 305.2 81.44 304.7 81.55 304.1 81.65 303.6 81.75 303 81.84 302.5 81.94 301.9 82.03 301.4 82.12 300.8 82.21 300.2 82.3 299.7 82.38 299.1 82.46 298.6 82.54 298 82.62"/><polyline points="229 73.38 228.6 73.17 228.2 72.96 227.8 72.75 227.4 72.54 227 72.32 226.6 72.11 226.2 71.89 225.8 71.67 225.4 71.45 225.1 71.23 224.7 71.01 224.3 70.78 223.9 70.56 223.6 70.33 223.2 70.1 222.9 69.87 222.5 69.63 222.2 69.4 221.8 69.16 221.5 68.93 221.1 68.69 220.8 68.45 220.5 68.21 220.1 67.97 219.8 67.72 219.5 67.48 219.2 67.23 218.9 66.98 218.6 66.74 218.3 66.49 218 66.24 217.7 65.98"/><polyline points="298 82.62 297.4 82.69 296.9 82.76 296.3 82.83 295.7 82.9 295.2 82.97 294.6 83.03 294 83.09 293.4 83.15 292.9 83.2 292.3 83.26 291.7 83.31 291.1 83.36 290.6 83.4 290 83.45 289.4 83.49 288.8 83.53 288.3 83.57 287.7 83.6 287.1 83.63 286.5 83.66 285.9 83.69 285.3 83.72 284.8 83.74 284.2 83.76 283.6 83.78 283 83.79 282.4 83.8 281.8 83.82 281.3 83.82 280.7 83.83 280.1 83.83 279.5 83.84"/><polyline points="330 73.38 329.6 73.58 329.2 73.79 328.8 73.99 328.3 74.19 327.9 74.39 327.5 74.58 327 74.78 326.6 74.97 326.2 75.17 325.7 75.36 325.3 75.54 324.8 75.73 324.4 75.92 323.9 76.1 323.4 76.28 323 76.46 322.5 76.63 322.1 76.81 321.6 76.98 321.1 77.15 320.6 77.32 320.2 77.49 319.7 77.65 319.2 77.82 318.7 77.98 318.2 78.14 317.7 78.3 317.2 78.45 316.7 78.6 316.2 78.76 315.7 78.9 315.2 79.05"/><polyline points="341.4 65.98 341.1 66.23 340.8 66.48 340.5 66.74 340.2 66.98 339.8 67.23 339.5 67.48 339.2 67.72 338.9 67.97 338.6 68.21 338.2 68.45 337.9 68.69 337.6 68.93 337.2 69.16 336.9 69.4 336.5 69.63 336.2 69.86 335.8 70.1 335.4 70.33 335.1 70.55 334.7 70.78 334.3 71.01 334 71.23 333.6 71.45 333.2 71.67 332.8 71.89 332.4 72.11 332 72.32 331.6 72.54 331.2 72.75 330.8 72.96 330.4 73.17 330 73.38"/><polyline points="210.5 38.89 210.7 38.6 210.8 38.32 211 38.04 211.2 37.76 211.3 37.48 211.5 37.21 211.7 36.93 211.9 36.65 212.1 36.38 212.3 36.1 212.5 35.83 212.7 35.55 212.9 35.28 213.1 35.01 213.3 34.74 213.5 34.46 213.8 34.2 214 33.93 214.2 33.66 214.5 33.39 214.7 33.13 215 32.86 215.2 32.6 215.5 32.34 215.7 32.08 216 31.82 216.3 31.56 216.5 31.3 216.8 31.04 217.1 30.78 217.4 30.53 217.7 30.28"/><polyline points="208.1 48.13 208.1 47.84 208.1 47.55 208.1 47.25 208.1 46.96 208.2 46.67 208.2 46.38 208.2 46.09 208.3 45.8 208.3 45.5 208.3 45.21 208.4 44.92 208.4 44.63 208.5 44.34 208.6 44.05 208.6 43.76 208.7 43.47 208.8 43.18 208.9 42.89 209 42.6 209.1 42.31 209.2 42.02 209.3 41.74 209.4 41.45 209.5 41.16 209.6 40.88 209.7 40.59 209.8 40.31 210 40.02 210.1 39.74 210.2 39.45 210.4 39.17 210.5 38.89"/><polyline points="210.5 57.37 210.4 57.09 210.2 56.81 210.1 56.52 210 56.24 209.8 55.95 209.7 55.67 209.6 55.38 209.5 55.1 209.4 54.81 209.3 54.52 209.2 54.24 209.1 53.95 209 53.66 208.9 53.37 208.8 53.08 208.7 52.79 208.6 52.5 208.6 52.21 208.5 51.92 208.4 51.63 208.4 51.34 208.3 51.05 208.3 50.76 208.3 50.47 208.2 50.17 208.2 49.88 208.2 49.59 208.1 49.3 208.1 49.01 208.1 48.72 208.1 48.42 208.1 48.13"/><polyline points="217.7 65.98 217.4 65.73 217.1 65.48 216.8 65.22 216.5 64.96 216.3 64.7 216 64.44 215.7 64.18 215.5 63.92 215.2 63.66 215 63.4 214.7 63.13 214.5 62.87 214.2 62.6 214 62.33 213.8 62.06 213.5 61.8 213.3 61.52 213.1 61.25 212.9 60.98 212.7 60.71 212.5 60.43 212.3 60.16 212.1 59.88 211.9 59.61 211.7 59.33 211.5 59.05 211.3 58.78 211.2 58.5 211 58.22 210.8 57.94 210.7 57.65 210.5 57.37"/><polyline points="279.5 83.84 278.9 83.83 278.3 83.83 277.8 83.82 277.2 83.82 276.6 83.8 276 83.79 275.4 83.78 274.8 83.76 274.3 83.74 273.7 83.72 273.1 83.69 272.5 83.66 271.9 83.63 271.4 83.6 270.8 83.57 270.2 83.53 269.6 83.49 269 83.45 268.5 83.4 267.9 83.36 267.3 83.31 266.7 83.26 266.2 83.2 265.6 83.15 265 83.09 264.4 83.03 263.9 82.97 263.3 82.9 262.7 82.84 262.2 82.76 261.6 82.69 261 82.62"/><polyline points="298 13.64 298.6 13.72 299.1 13.8 299.7 13.88 300.2 13.96 300.8 14.05 301.4 14.14 301.9 14.23 302.5 14.32 303 14.41 303.6 14.51 304.1 14.61 304.7 14.71 305.2 14.82 305.8 14.92 306.3 15.03 306.8 15.14 307.4 15.26 307.9 15.37 308.5 15.49 309 15.61 309.5 15.73 310 15.85 310.6 15.98 311.1 16.11 311.6 16.24 312.1 16.37 312.7 16.5 313.2 16.64 313.7 16.78 314.2 16.92 314.7 17.06 315.2 17.21"/><polyline points="261 13.64 261.6 13.56 262.2 13.49 262.7 13.42 263.3 13.36 263.9 13.29 264.4 13.23 265 13.17 265.6 13.11 266.2 13.05 266.7 13 267.3 12.95 267.9 12.9 268.5 12.85 269 12.81 269.6 12.77 270.2 12.73 270.8 12.69 271.4 12.66 271.9 12.62 272.5 12.6 273.1 12.57 273.7 12.54 274.3 12.52 274.8 12.5 275.4 12.48 276 12.47 276.6 12.45 277.2 12.44 277.8 12.43 278.3 12.43 278.9 12.42 279.5 12.42"/><polyline points="279.5 12.42 280.1 12.42 280.7 12.43 281.3 12.44 281.8 12.44 282.4 12.45 283 12.47 283.6 12.48 284.2 12.5 284.8 12.52 285.4 12.54 285.9 12.57 286.5 12.6 287.1 12.62 287.7 12.66 288.3 12.69 288.8 12.73 289.4 12.77 290 12.81 290.6 12.85 291.1 12.9 291.7 12.95 292.3 13 292.9 13.05 293.4 13.11 294 13.17 294.6 13.23 295.2 13.29 295.7 13.36 296.3 13.42 296.9 13.49 297.4 13.57 298 13.64"/><polyline points="243.8 17.21 244.3 17.06 244.8 16.92 245.3 16.78 245.8 16.64 246.4 16.5 246.9 16.37 247.4 16.24 247.9 16.1 248.5 15.98 249 15.85 249.5 15.73 250 15.6 250.6 15.49 251.1 15.37 251.6 15.25 252.2 15.14 252.7 15.03 253.3 14.92 253.8 14.82 254.4 14.71 254.9 14.61 255.5 14.51 256 14.41 256.6 14.32 257.1 14.22 257.7 14.14 258.2 14.05 258.8 13.96 259.3 13.88 259.9 13.8 260.5 13.72 261 13.64"/><polyline points="229 22.88 229.4 22.68 229.8 22.47 230.3 22.27 230.7 22.07 231.1 21.87 231.6 21.67 232 21.48 232.4 21.28 232.9 21.09 233.3 20.9 233.8 20.71 234.2 20.53 234.7 20.34 235.1 20.16 235.6 19.98 236 19.8 236.5 19.62 237 19.45 237.4 19.28 237.9 19.1 238.4 18.94 238.9 18.77 239.4 18.6 239.8 18.44 240.3 18.28 240.8 18.12 241.3 17.96 241.8 17.81 242.3 17.65 242.8 17.5 243.3 17.35 243.8 17.21"/><polyline points="217.7 30.28 218 30.02 218.3 29.77 218.6 29.52 218.9 29.27 219.2 29.03 219.5 28.78 219.8 28.54 220.1 28.29 220.5 28.05 220.8 27.81 221.1 27.57 221.5 27.33 221.8 27.1 222.2 26.86 222.5 26.62 222.9 26.39 223.2 26.16 223.6 25.93 223.9 25.7 224.3 25.48 224.7 25.25 225.1 25.03 225.4 24.81 225.8 24.59 226.2 24.37 226.6 24.15 227 23.94 227.4 23.72 227.8 23.51 228.2 23.3 228.6 23.09 229 22.88"/><polyline points="348.5 38.89 348.6 39.17 348.8 39.45 348.9 39.74 349.1 40.02 349.2 40.31 349.3 40.59 349.4 40.88 349.6 41.16 349.7 41.45 349.8 41.74 349.9 42.02 350 42.31 350.1 42.6 350.1 42.89 350.2 43.18 350.3 43.47 350.4 43.76 350.5 44.05 350.5 44.34 350.6 44.63 350.6 44.92 350.7 45.21 350.7 45.5 350.8 45.79 350.8 46.09 350.8 46.38 350.9 46.67 350.9 46.96 350.9 47.25 350.9 47.54 350.9 47.84 350.9 48.13"/><polyline points="341.4 30.28 341.6 30.53 341.9 30.78 342.2 31.04 342.5 31.3 342.8 31.56 343 31.82 343.3 32.08 343.6 32.34 343.8 32.6 344.1 32.86 344.3 33.13 344.6 33.39 344.8 33.66 345 33.93 345.3 34.2 345.5 34.47 345.7 34.74 345.9 35.01 346.1 35.28 346.3 35.55 346.5 35.83 346.7 36.1 346.9 36.38 347.1 36.65 347.3 36.93 347.5 37.21 347.7 37.49 347.8 37.76 348 38.04 348.2 38.32 348.3 38.61 348.5 38.89"/><polyline points="348.5 57.37 348.3 57.65 348.2 57.93 348 58.21 347.8 58.49 347.7 58.77 347.5 59.05 347.3 59.33 347.1 59.61 346.9 59.88 346.7 60.16 346.5 60.43 346.3 60.71 346.1 60.98 345.9 61.25 345.7 61.52 345.5 61.79 345.3 62.06 345 62.33 344.8 62.6 344.6 62.86 344.3 63.13 344.1 63.4 343.8 63.66 343.6 63.92 343.3 64.18 343 64.44 342.8 64.7 342.5 64.96 342.2 65.22 341.9 65.47 341.6 65.73 341.4 65.98"/><polyline points="315.2 17.21 315.7 17.35 316.2 17.5 316.7 17.66 317.2 17.81 317.7 17.96 318.2 18.12 318.7 18.28 319.2 18.44 319.7 18.6 320.2 18.77 320.6 18.94 321.1 19.11 321.6 19.28 322.1 19.45 322.5 19.62 323 19.8 323.4 19.98 323.9 20.16 324.4 20.34 324.8 20.53 325.3 20.72 325.7 20.9 326.2 21.09 326.6 21.28 327 21.48 327.5 21.67 327.9 21.87 328.3 22.07 328.8 22.27 329.2 22.47 329.6 22.68 330 22.88"/><polyline points="350.9 48.13 350.9 48.42 350.9 48.71 350.9 49.01 350.9 49.3 350.9 49.59 350.8 49.88 350.8 50.17 350.8 50.46 350.7 50.76 350.7 51.05 350.6 51.34 350.6 51.63 350.5 51.92 350.5 52.21 350.4 52.5 350.3 52.79 350.2 53.08 350.1 53.37 350.1 53.66 350 53.95 349.9 54.23 349.8 54.52 349.7 54.81 349.6 55.1 349.4 55.38 349.3 55.67 349.2 55.95 349.1 56.24 348.9 56.52 348.8 56.8 348.6 57.09 348.5 57.37"/><polyline points="330 22.88 330.4 23.09 330.8 23.3 331.2 23.51 331.6 23.72 332 23.94 332.4 24.15 332.8 24.37 333.2 24.59 333.6 24.81 334 25.03 334.3 25.25 334.7 25.48 335.1 25.7 335.4 25.93 335.8 26.16 336.2 26.39 336.5 26.63 336.9 26.86 337.2 27.1 337.6 27.33 337.9 27.57 338.2 27.81 338.6 28.05 338.9 28.29 339.2 28.54 339.5 28.78 339.8 29.03 340.2 29.28 340.5 29.52 340.8 29.77 341.1 30.02 341.4 30.28"/><polyline points="160 37.51 160.9 37.25 161.8 37 162.8 36.75 163.7 36.5 164.6 36.26 165.5 36.03 166.4 35.8 167.3 35.57 168.3 35.35 169.2 35.13 170.1 34.92 171 34.71 172 34.51 172.9 34.31 173.8 34.12 174.8 33.93 175.7 33.75 176.6 33.57 177.6 33.39 178.5 33.22 179.5 33.06 180.4 32.9 181.4 32.74 182.3 32.59 183.3 32.44 184.2 32.3 185.2 32.16 186.1 32.03 187.1 31.9 188.1 31.78 189 31.66 190 31.55 191 31.44 191.9 31.33 192.9 31.23 193.9 31.14 194.9 31.05 195.8 30.96 196.8 30.88 197.8 30.8 198.8 30.73 199.8 30.67 200.7 30.6 201.7 30.55 202.7 30.5 203.7 30.45 204.7 30.4 205.7 30.37 206.7 30.33 207.7 30.3 208.7 30.28 209.7 30.26 210.7 30.25 211.6 30.24 212.6 30.23 213.7 30.23 214.2 30.23 214.7 30.24 215.2 30.24 215.7 30.24 216.2 30.25 216.7 30.26 217.2 30.27 217.7 30.28"/><polyline points="110.6 61.2 110.9 60.94 111.3 60.68 111.7 60.42 112 60.16 112.4 59.9 112.8 59.64 113.1 59.39 113.5 59.14 114.3 58.63 115 58.13 115.8 57.63 116.6 57.14 117.3 56.65 118.1 56.16 118.9 55.68 119.6 55.2 120.4 54.73 121.2 54.26 122 53.8 122.8 53.34 123.5 52.89 124.3 52.44 125.1 51.99 125.9 51.55 126.7 51.11 127.5 50.68 128.3 50.25 129.1 49.83 130 49.41 130.8 48.99 131.6 48.58 132.4 48.17 133.2 47.77 134.1 47.37 134.9 46.98 135.7 46.59 136.5 46.2 137.4 45.82 138.2 45.45 139.1 45.08 139.9 44.71 140.8 44.35 141.6 43.99 142.5 43.64 143.3 43.29 144.2 42.94 145 42.6 145.9 42.27 146.8 41.94 147.6 41.61 148.5 41.29 149.4 40.97 150.2 40.65 151.1 40.35 152 40.04 152.9 39.74 153.8 39.45 154.7 39.16 155.6 38.87 156.4 38.59 157.3 38.31 158.2 38.04 159.1 37.77 160 37.51"/><polyline points="99.18 70.11 99.86 69.52 100.6 68.94 101.2 68.36 101.9 67.78 102.6 67.21 103.3 66.64 104.1 66.08 104.8 65.52 105.5 64.97 106.2 64.42 106.9 63.87 107.6 63.33 108 63.06 108.4 62.79 108.7 62.52 109.1 62.26 109.4 61.99 109.8 61.72 110.2 61.46 110.6 61.2"/></g></g><g fill="none" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round"><path transform="matrix(.1727 .1727 -.2835 .2835 56.54 51.6)" d="m94.56 5.313a83.43 83.43 0 1 1-166.9 0 83.43 83.43 0 1 1 166.9 0z" stroke="url(#linearGradient6460)" stroke-width="3.791"/><path transform="matrix(-.2115 .1221 -.2005 -.3472 60.37 55.51)" d="m94.56 5.313a83.43 83.43 0 1 1-166.9 0 83.43 83.43 0 1 1 166.9 0z" stroke="url(#linearGradient6500)" stroke-width="2.916"/><path transform="matrix(-.06322 -.2359 .3872 -.1038 55.6 58.2)" d="m94.56 5.313a83.43 83.43 0 1 1-166.9 0 83.43 83.43 0 1 1 166.9 0z" stroke="url(#linearGradient6504)" stroke-width="2.916"/></g><path transform="matrix(.6366 -.05559 .05559 .6366 16.45 26.11)" d="m101.8 43.98-4.72 6.883 3.343 3.146 1.377-10.03z" fill="url(#linearGradient6780)" fill-rule="evenodd" filter="url(#filter6740)"/><path d="m56.83 22.66c-14.39 0-26.59 9.422-30.71 22.4 3.12 4.482 8.828 8.134 15.98 10.25 0.1975-0.8826 0.3991-1.767 0.631-2.659 4.273-16.44 12.97-28.67 20.38-29.38-2.029-0.3995-4.126-0.6122-6.272-0.6122z" fill="url(#linearGradient4057)"/></svg>
diff --git a/share/icons/svg/key-enter.svg b/share/icons/svg/key-enter.svg
deleted file mode 100644
index 7c983be54..000000000
--- a/share/icons/svg/key-enter.svg
+++ /dev/null
@@ -1,265 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg1307"
- height="128"
- width="128">
- <defs
- id="defs1309">
- <linearGradient
- id="linearGradient3588">
- <stop
- id="stop3590"
- offset="0"
- style="stop-color:#171717;stop-opacity:1;" />
- <stop
- id="stop3592"
- offset="1"
- style="stop-color:#171717;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3578">
- <stop
- id="stop3580"
- offset="0"
- style="stop-color:#a2a2a2;stop-opacity:1;" />
- <stop
- id="stop3582"
- offset="1"
- style="stop-color:#e0e0e0;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3552">
- <stop
- id="stop3554"
- offset="0"
- style="stop-color:#f9f9f9;stop-opacity:1;" />
- <stop
- id="stop3556"
- offset="1"
- style="stop-color:#f9f9f9;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3513">
- <stop
- id="stop3515"
- offset="0"
- style="stop-color:#f9f9f9;stop-opacity:1;" />
- <stop
- id="stop3517"
- offset="1"
- style="stop-color:#d1d1d1;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3148">
- <stop
- id="stop3150"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3152"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.222464,0,0,0.133333,-18.14476,131.7138)"
- r="80.225449"
- fy="156.53989"
- fx="81.921944"
- cy="151.97745"
- cx="81.562538"
- id="radialGradient3154"
- xlink:href="#linearGradient3148" />
- <linearGradient
- y2="96.644386"
- x2="95.164795"
- y1="49.883904"
- x1="98.85305"
- gradientTransform="matrix(1.435673,0,0,1.435673,-52.80851,-23.00559)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2424"
- xlink:href="#linearGradient3578" />
- <radialGradient
- r="8.5"
- fy="31.89937"
- fx="-56.712421"
- cy="33.918919"
- cx="-56.591835"
- gradientTransform="matrix(3.575392,2.760544e-6,-4.86208e-6,6.29725,322.2336,-134.8612)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2426"
- xlink:href="#linearGradient3552" />
- <radialGradient
- r="17.497653"
- fy="72.53923"
- fx="100.57152"
- cy="72.53923"
- cx="100.57152"
- gradientTransform="matrix(1.435673,0,0,1.792563,-52.80851,-49.67405)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2430"
- xlink:href="#linearGradient3588" />
- <radialGradient
- r="11.0625"
- fy="34.71875"
- fx="-68.375"
- cy="34.71875"
- cx="-68.375"
- gradientTransform="matrix(3.183957,0,0,4.324271,313.471,-67.08613)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2432"
- xlink:href="#linearGradient3513" />
- <radialGradient
- r="12.268356"
- fy="65.021912"
- fx="-190.90878"
- cy="65.021912"
- cx="-190.90878"
- gradientTransform="matrix(0.444461,0.444461,-1.29637,1.296386,192.5244,112.5809)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient3324"
- xlink:href="#linearGradient3552" />
- </defs>
- <metadata
- id="metadata1312">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- transform="matrix(-0.621085,0,0,0.560668,114.8089,37.21709)"
- d="M 179.63529 151.97745 A 98.072754 98.072754 0 1 1 -16.510216,151.97745 A 98.072754 98.072754 0 1 1 179.63529 151.97745 z"
- id="path3146"
- style="opacity:0.2213115;fill:url(#radialGradient3154);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M -228.9185,-67.271774 L -228.9185,-70.066483 L -228.9185,-67.271774 z "
- id="path2276" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 65.6909,-129.46266 L 65.6909,-132.25737 L 65.6909,-129.46266 z "
- id="path2191" />
- <path
- id="path2860"
- d="M -52.477129,-94.134134 C -57.816729,-94.134134 -62.133379,-89.817481 -62.133379,-84.477884 L -62.133379,-76.102884 L -110.38338,-76.102884 C -115.72298,-76.102884 -120.03963,-71.817477 -120.03963,-66.477884 L -120.03963,-25.727876 C -120.03963,-20.388286 -115.72298,-16.102876 -110.38338,-16.102876 L -52.477129,-16.102876 L -14.91463,-16.102876 L -13.85213,-16.102876 C -8.51253,-16.102876 -4.22713,-20.388276 -4.22713,-25.727876 L -4.22713,-84.477884 C -4.22713,-89.817479 -8.51254,-94.134134 -13.85213,-94.134134 L -52.477129,-94.134134 z "
- style="opacity:0.06147539;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M -91.3174,-199.09776 L -91.3174,-201.89247 L -91.3174,-199.09776 z "
- id="path2985" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M -210.8196,-285.72801 L -210.8196,-288.52272 L -210.8196,-285.72801 z "
- id="path3206" />
- <g
- transform="translate(-27.868,-141.1464)"
- style="display:inline"
- id="layer4" />
- <g
- transform="translate(-27.868,-141.1464)"
- style="display:inline"
- id="layer5" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 35.7718,-219.97274 L 35.7718,-222.76745 L 35.7718,-219.97274 z "
- id="path3946" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M -56.852646,-146.07906 L -56.852646,-147.6058 L -56.852646,-146.07906 z "
- id="path1561" />
- <rect
- y="-202.67905"
- x="-114.33738"
- height="0"
- width="1"
- id="rect1327"
- style="opacity:0.57786889;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.63199997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <rect
- y="-230.20667"
- x="-149.4642"
- height="0"
- width="1"
- id="rect2482"
- style="opacity:0.57786889;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.63199997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M -308.40162,-303.42273 L -308.40162,-306.21744 L -308.40162,-303.42273 z "
- id="path2494" />
- <g
- id="g4640"
- transform="matrix(-0.782995,0,0,0.650879,-2631.26,383.0949)"
- style="opacity:0.40163933" />
- <g
- style="opacity:0.40163933"
- transform="matrix(-0.782995,0,0,0.650879,-2631.26,383.0949)"
- id="g4646" />
- <g
- style="opacity:0.40163933"
- transform="matrix(1,0,0,0.650879,569.7028,390.4227)"
- id="g4730" />
- <g
- id="g4748"
- transform="matrix(1,0,0,0.650879,569.7028,390.4227)"
- style="opacity:0.40163933" />
- <g
- transform="matrix(1.829328,0,0,1.829328,-108.7592,-94.62028)"
- id="g2416">
- <path
- id="path3332"
- d="M 95.60444,53.400757 C 93.029991,53.400757 90.991837,55.438908 90.991837,58.013354 L 90.991837,81.583386 L 75.548932,81.583386 C 72.974484,81.583386 70.86537,83.621536 70.86537,86.195981 L 70.86537,111.51942 C 70.86537,114.09387 72.974496,116.13202 75.548932,116.13202 L 116.49461,116.13202 C 119.06904,116.13202 121.10719,114.09387 121.10719,111.51942 L 121.10719,88.2436 L 121.10719,58.013354 C 121.10719,55.438908 119.06904,53.400757 116.49461,53.400757 L 95.60444,53.400757 z "
- style="opacity:0.09426228;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:3.27989292;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="opacity:0.15573772;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:2.1865952;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 95.60444,53.182097 C 93.029991,53.182097 90.991837,55.220248 90.991837,57.794694 L 90.991837,81.364726 L 75.548932,81.364726 C 72.974484,81.364726 70.86537,83.402876 70.86537,85.977321 L 70.86537,111.30078 C 70.86537,113.87523 72.974496,115.91338 75.548932,115.91338 L 116.49461,115.91338 C 119.06904,115.91338 121.10719,113.87523 121.10719,111.30078 L 121.10719,88.02494 L 121.10719,57.794694 C 121.10719,55.220248 119.06904,53.182097 116.49461,53.182097 L 95.60444,53.182097 z "
- id="path3330" />
- <path
- id="path3328"
- d="M 95.60444,53.127432 C 93.029991,53.127432 90.991837,55.165583 90.991837,57.740029 L 90.991837,81.310061 L 75.548932,81.310061 C 72.974484,81.310061 70.86537,83.348211 70.86537,85.922656 L 70.86537,111.24612 C 70.86537,113.82057 72.974496,115.85872 75.548932,115.85872 L 116.49461,115.85872 C 119.06904,115.85872 121.10719,113.82057 121.10719,111.24612 L 121.10719,87.970275 L 121.10719,57.740029 C 121.10719,55.165583 119.06904,53.127432 116.49461,53.127432 L 95.60444,53.127432 z "
- style="opacity:0.20901639;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:1.0932976;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="opacity:0.29098361;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:0.5466488;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 95.60444,53.018102 C 93.029991,53.018102 90.991837,55.056253 90.991837,57.630699 L 90.991837,81.200731 L 75.548932,81.200731 C 72.974484,81.200731 70.86537,83.238881 70.86537,85.813326 L 70.86537,111.1368 C 70.86537,113.71125 72.974496,115.7494 75.548932,115.7494 L 116.49461,115.7494 C 119.06904,115.7494 121.10719,113.71125 121.10719,111.1368 L 121.10719,87.860945 L 121.10719,57.630699 C 121.10719,55.056253 119.06904,53.018102 116.49461,53.018102 L 95.60444,53.018102 z "
- id="path3326" />
- <path
- id="path3525"
- d="M 95.60444,52.908772 C 93.029991,52.908772 90.991837,54.946923 90.991837,57.521369 L 90.991837,81.091401 L 75.548932,81.091401 C 72.974484,81.091401 70.86537,83.129551 70.86537,85.703996 L 70.86537,111.02748 C 70.86537,113.60193 72.974496,115.64008 75.548932,115.64008 L 116.49461,115.64008 C 119.06904,115.64008 121.10719,113.60193 121.10719,111.02748 L 121.10719,87.751615 L 121.10719,57.521369 C 121.10719,54.946923 119.06904,52.908772 116.49461,52.908772 L 95.60444,52.908772 z "
- style="opacity:1;fill:url(#linearGradient2424);fill-opacity:1;fill-rule:nonzero;stroke:#2f2f2f;stroke-width:0.2081726;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="opacity:1;fill:url(#radialGradient2426);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.745;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 120.65928,55.532284 C 103.85922,64.2518 86.297674,73.384954 86.297674,73.384954 L 119.31553,114.65726 C 120.3972,113.81813 121.10719,112.50586 121.10719,111.00993 L 121.10719,87.78227 L 121.10719,57.515915 C 121.10719,56.797214 120.94429,56.134719 120.65928,55.532284 z "
- id="path3529" />
- <path
- id="path3560"
- transform="matrix(0.546649,0,0,0.546649,59.45309,51.72406)"
- d="M 20.875 90.46875 L 20.875 108.5 C 20.874999 113.20951 24.728012 116.9375 29.4375 116.9375 L 41.9375 116.9375 L 41.9375 92.53125 C 41.9375 91.397541 41.03996 90.46875 39.90625 90.46875 L 20.875 90.46875 z "
- style="opacity:1;fill:url(#radialGradient3324);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.20680515;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
- <path
- style="opacity:0.50819672;fill:url(#radialGradient2430);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.145;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 95.60444,52.908772 C 93.029991,52.908772 90.991837,54.946923 90.991837,57.521369 L 90.991837,81.091401 L 75.548932,81.091401 C 72.974484,81.091401 70.86537,83.129551 70.86537,85.703996 C 71.093814,111.23269 104.35932,108.60489 121.10719,109.28671 L 121.10719,57.521369 C 121.10719,54.946923 119.06904,52.908772 116.49461,52.908772 L 95.60444,52.908772 z "
- id="path3586" />
- <path
- style="opacity:1;fill:url(#radialGradient2432);fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:0.50166649;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
- d="M 97.559913,55.482264 C 95.238516,55.482264 93.400696,57.320085 93.400696,59.641487 L 93.400696,83.459018 L 78.200754,83.459018 C 75.87935,83.459018 73.977541,85.296838 73.977541,87.618243 L 73.977541,107.17066 C 73.977541,109.49206 75.87936,111.32989 78.200754,111.32989 L 113.25551,111.32989 C 115.57691,111.32989 117.41471,109.49206 117.41471,107.17066 L 117.41471,59.641487 C 117.41471,57.320085 115.57689,55.482264 113.25551,55.482264 L 97.559913,55.482264 z "
- id="rect2615" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1.59176552px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="M 108.68474,81.504901 L 108.68474,101.7286 L 96.638326,101.7286 L 101.92463,98.336426 L 96.676687,101.7286 L 101.92114,105.06131"
- id="path3521" />
- </g>
- </g>
-</svg>
diff --git a/share/icons/svg/message-close.svg b/share/icons/svg/message-close.svg
deleted file mode 100644
index a36700faf..000000000
--- a/share/icons/svg/message-close.svg
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- id="svg6"
- version="1.1"
- viewBox="0 0 16 16">
- <metadata
- id="metadata10">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs3051">
- <style
- id="current-color-scheme"
- type="text/css">
- .ColorScheme-Text {
- color:#f2f2f2;
- }
- .ColorScheme-NegativeText {
- color:#da4453;
- }
- </style>
- </defs>
- <path
- id="path4"
- d="M 8,2 A 6,6 0 0 0 2,8 6,6 0 0 0 8,14 6,6 0 0 0 14,8 6,6 0 0 0 8,2 Z M 5.70703,5 8,7.29297 10.29297,5 11,5.70703 8.70703,8 11,10.29297 10.29297,11 8,8.70703 5.70703,11 5,10.29297 7.29297,8 5,5.70703 5.70703,5 Z"
- class="ColorScheme-NegativeText"
- style="fill:#ffffff;fill-opacity:1;stroke:none" />
-</svg>
diff --git a/share/icons/svg/paperclip.svg b/share/icons/svg/paperclip.svg
deleted file mode 100644
index ad1b8d616..000000000
--- a/share/icons/svg/paperclip.svg
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="88"
- width="88">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient3291">
- <stop
- id="stop3293"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3295"
- offset="1"
- style="stop-color:#7c7c7c;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3283">
- <stop
- id="stop3285"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3287"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3186">
- <stop
- id="stop3188"
- offset="0"
- style="stop-color:#c8c8c8;stop-opacity:1" />
- <stop
- id="stop3190"
- offset="1"
- style="stop-color:#e4e4e4;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(1.3450524,0,0,1.3258599,-12.632831,-10.71217)"
- spreadMethod="pad"
- gradientUnits="userSpaceOnUse"
- y2="16.733448"
- x2="28"
- y1="66.467087"
- x1="28"
- id="linearGradient3192"
- xlink:href="#linearGradient3186" />
- <radialGradient
- spreadMethod="reflect"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(4.2144523,0,0,1.5150244,-147.16712,-16.340984)"
- r="18"
- fy="26.616402"
- fx="45.310146"
- cy="26.616402"
- cx="45.310146"
- id="radialGradient3289"
- xlink:href="#linearGradient3283" />
- <radialGradient
- spreadMethod="reflect"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.6061249,0,0,1.8181818,-27.881746,-36)"
- r="22"
- fy="44"
- fx="46"
- cy="44"
- cx="46"
- id="radialGradient3297"
- xlink:href="#linearGradient3291" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient3297);stroke-width:12;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.6"
- d="M 62,40 L 62,63 C 62,83 30,83 30,63 L 30,22 C 30,6 54,6 54,22 L 54,49 C 46,61 46,61 38,49 L 38,41.5"
- id="path3279" />
- <path
- id="path2160"
- d="M 62,40 L 62,63 C 62,83 30,83 30,63 L 30,22 C 30,6 54,6 54,22 L 54,49 C 46,61 46,61 38,49 L 38,42"
- style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient3192);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient3289);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 62,40 L 62,63 C 62,83 30,83 30,63 L 30,22 C 30,6 54,6 54,22 L 54,49 C 46,61 46,61 38,49 L 38,42"
- id="path3281" />
- </g>
-</svg>
diff --git a/share/icons/svg/password-copy.svg b/share/icons/svg/password-copy.svg
deleted file mode 100644
index 8d7e33c02..000000000
--- a/share/icons/svg/password-copy.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter id="filter5704"><feGaussianBlur stdDeviation="0.90323211"/></filter><linearGradient id="linearGradient4739" x1="398.4" x2="392.5" y1="-369.5" y2="-363.5" gradientTransform="matrix(1.181 0 0 -1.18 -363.3 -328.6)" gradientUnits="userSpaceOnUse"><stop stop-color="#888A85" offset="0"/><stop stop-color="#8C8E89" offset=".0072"/><stop stop-color="#ABACA9" offset=".0673"/><stop stop-color="#C5C6C4" offset=".1347"/><stop stop-color="#DBDBDA" offset=".2115"/><stop stop-color="#EBEBEB" offset=".3012"/><stop stop-color="#F7F7F6" offset=".4122"/><stop stop-color="#FDFDFD" offset=".5679"/><stop stop-color="#fff" offset="1"/></linearGradient><radialGradient id="radialGradient4743" cx="407.2" cy="-379.5" r="94.66" gradientTransform="matrix(1.341 0 0 -1.34 -433.3 -393.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#535557" offset="0"/><stop stop-color="#898A8C" offset=".07095"/><stop stop-color="#ECECEC" offset=".203"/><stop stop-color="#FAFAFA" offset=".2363"/><stop stop-color="#fff" offset=".2722"/><stop stop-color="#FAFAFA" offset=".5313"/><stop stop-color="#EBECEC" offset=".8449"/><stop stop-color="#E1E2E3" offset="1"/></radialGradient><filter id="filter5749"><feGaussianBlur stdDeviation="1.493351"/></filter><filter id="filter10567" x="-.00997" y="-.1542" width="1.02" height="1.308" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.23336165"/></filter><linearGradient id="linearGradient10547" x1="78.54" x2="120.4" y1="62.58" y2="62.58" gradientTransform="matrix(1.484 0 0 1.484 -175.6 -40.37)" gradientUnits="userSpaceOnUse"><stop stop-color="#ddd" offset=".0059"/><stop stop-color="#bbb" offset=".1065"/><stop stop-color="#B2B2B2" offset=".2799"/><stop stop-color="#9B9B9B" offset=".5571"/><stop stop-color="#888" offset=".7396"/><stop stop-color="#bbb" offset="1"/></linearGradient><linearGradient id="linearGradient10549" x1="78.54" x2="99.47" y1="62.58" y2="62.58" gradientUnits="userSpaceOnUse"><stop stop-color="#888" offset=".0059"/><stop stop-color="#bbb" offset=".1775"/><stop stop-color="#C4C4C4" offset=".4387"/><stop stop-color="#DBDBDB" offset=".8565"/><stop stop-color="#ddd" offset=".8876"/><stop stop-color="#bbb" offset="1"/></linearGradient><linearGradient id="linearGradient10551" x1="99.47" x2="120.4" y1="62.58" y2="62.58" gradientUnits="userSpaceOnUse"><stop stop-color="#888" offset=".0059"/><stop stop-color="#bbb" offset=".1775"/><stop stop-color="#C4C4C4" offset=".4387"/><stop stop-color="#DBDBDB" offset=".8565"/><stop stop-color="#ddd" offset=".8876"/><stop stop-color="#bbb" offset="1"/></linearGradient><linearGradient id="linearGradient10553" x1="117.2" x2="83.03" y1="64.21" y2="64.21" gradientTransform="matrix(1.484 0 0 1.456 -175.6 -38.51)" gradientUnits="userSpaceOnUse"><stop stop-color="#888" offset="0"/><stop stop-color="#868686" offset=".0079"/><stop stop-color="#626262" offset=".1453"/><stop stop-color="#555" offset=".2189"/><stop stop-color="#575757" offset=".2473"/><stop stop-color="#7B7B7B" offset=".7371"/><stop stop-color="#888" offset="1"/></linearGradient><radialGradient id="radialGradient10555" cx="98.67" cy="83.24" r="36.66" gradientTransform="matrix(1.484 0 0 1.456 -175.6 -38.51)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset=".2544"/><stop stop-color="#F2F2F2" offset=".2903"/><stop stop-color="#B9B9B9" offset=".4589"/><stop stop-color="#959595" offset=".584"/><stop stop-color="#888" offset=".6509"/><stop stop-color="#A9A9A9" offset=".8549"/><stop stop-color="#bbb" offset="1"/></radialGradient><filter id="filter20221" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.69774324"/></filter><linearGradient id="linearGradient10557" x1="118.4" x2="80.39" y1="63.51" y2="63.51" gradientTransform="matrix(1.484 0 0 1.484 -175.6 -40.37)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset=".2899"/><stop stop-color="#ECECEC" offset=".459"/><stop stop-color="#C8C8C8" offset=".811"/><stop stop-color="#bbb" offset="1"/></linearGradient><filter id="filter20209" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.53090557"/></filter><filter id="filter10605" x="-.0318" y="-.8407" width="1.064" height="2.681" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.77877842"/></filter><radialGradient id="radialGradient6602" cx="92.18" cy="124.4" r="29.38" gradientTransform="matrix(1 0 0 .03783 -55.17 87.31)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-color="#3b2300" stop-opacity=".8941" offset="1"/></radialGradient><linearGradient id="linearGradient5489" x1="35.5" x2="91.5" y1="-14.46" y2="-14.46" gradientTransform="matrix(1.429 0 0 1.455 -204.7 149.1)" gradientUnits="userSpaceOnUse"><stop stop-color="#826F47" offset="0"/><stop stop-color="#B8A276" offset=".1382"/><stop stop-color="#C1AA7E" offset=".1598"/><stop stop-color="#D4BD91" offset=".2324"/><stop stop-color="#E4CDA1" offset=".3136"/><stop stop-color="#F0DCB6" offset=".3882"/><stop stop-color="#FFEFD1" offset=".4675"/><stop stop-color="#E4CDA1" offset=".6568"/><stop stop-color="#CFB88C" offset=".7664"/><stop stop-color="#C1AA7E" offset=".8284"/><stop stop-color="#826F47" offset=".9527"/><stop stop-color="#65583D" offset="1"/></linearGradient><linearGradient id="linearGradient5491" x1="63.5" x2="63.5" y1="7.5" y2="-.667" gradientTransform="matrix(1.429 0 0 1.455 -204.7 149.1)" gradientUnits="userSpaceOnUse"><stop stop-color="#65583D" offset="0"/><stop stop-color="#65583d" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient5493" x1="35.5" x2="91.5" y1="-33.42" y2="-33.42" gradientTransform="matrix(1.429 0 0 1.455 -204.7 149.1)" gradientUnits="userSpaceOnUse"><stop stop-color="#C1AA7E" offset="0"/><stop stop-color="#D1C09F" offset=".0428"/><stop stop-color="#DFD3BC" offset=".0918"/><stop stop-color="#EBE3D5" offset=".1462"/><stop stop-color="#F4F0E8" offset=".2072"/><stop stop-color="#FAF8F5" offset=".2786"/><stop stop-color="#FEFEFD" offset=".3699"/><stop stop-color="#fff" offset=".5503"/><stop stop-color="#FDFCFB" offset=".6276"/><stop stop-color="#F7F4EE" offset=".7073"/><stop stop-color="#EDE7DA" offset=".7879"/><stop stop-color="#DFD4BD" offset=".8694"/><stop stop-color="#CEBB98" offset=".9506"/><stop stop-color="#C1AA7E" offset="1"/></linearGradient><linearGradient id="linearGradient5495" x1="63.5" x2="63.5" y1="-36.39" y2="-31.16" gradientTransform="matrix(1.429 0 0 1.455 -204.7 149.1)" gradientUnits="userSpaceOnUse"><stop stop-color="#C1AA7E" offset="0"/><stop stop-color="#E4CDA1" offset=".716"/></linearGradient><linearGradient id="linearGradient5497" x1="74" x2="74" y1="38.64" y2="-108.7" gradientTransform="matrix(1.404 0 0 -.09818 -203.2 92.37)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient></defs><path transform="matrix(1.505 0 0 1.505 6.805 -5.109)" d="m8.665 6 1e-5 80 48.65 0.1862c0.3881 0 0.7549-0.1571 1.029-0.4276l19.4-19.88c0.2744-0.2716 0.4316-0.6355 0.4316-1.02l-0.1768-58.86h-69.34z" filter="url(#filter5749)" opacity=".45"/><path d="m23.85 8.284 1.5e-5 111.7h68c0.537 0 1.044-0.2194 1.424-0.5972l25.98-25.1c0.3796-0.3792 0.5972-0.8875 0.5972-1.424l0.2114-84.6-96.21-0.00168z" fill="#fff"/><path d="m28.02 12 1.3e-5 104h62.91c0.4896 0 0.9522-0.2 1.298-0.5444l23.08-22.6c0.346-0.3458 0.5444-0.8091 0.5444-1.298v-79.55h-87.83z" fill="url(#radialGradient4743)"/><path transform="matrix(1.317 0 0 1.326 222.5 14.63)" d="m-99.99 80.6s7.392-6.697 11.18-10.48c3.785-3.782 11.41-12.09 11.41-12.09s-11.14-0.6269-23.14-0.6269c0 12 0.5521 23.2 0.5521 23.2z" filter="url(#filter5704)" opacity=".3"/><path d="m92.54 120s10.33-8.044 14.8-12.51c4.467-4.463 12.29-13.55 12.29-13.55s-10.99 0.8407-25.15 0.8407c0 14.16-1.929 25.22-1.929 25.22z" fill="url(#linearGradient4739)"/><g fill="#fff"><rect x="178.9" y="109.7" width="1.47" height="0" opacity=".5779"/><g fill-opacity=".7569"><path d="m-54.77 2.088v-4.108 4.108z"/><path d="m98.35 0.3839v-3.242 3.242z"/><path d="m-1843-1245v-1.888 1.888z"/></g></g><path transform="matrix(1.184 0 0 1.184 -2.289 -16.3)" d="m9.796 90.91h54.42c1.204 0 2.174 0.4958 2.174 1.112s-0.9695 1.112-2.174 1.112c-23.72 0.9959-39.08 0.4268-54.42 0-1.204 0-2.174-0.4958-2.174-1.112s0.9695-1.112 2.174-1.112z" fill="url(#radialGradient6602)" filter="url(#filter10605)" opacity=".8886"/><g transform="matrix(.7594 0 0 .7775 62.72 -19.07)"><path d="m-28 26.22c-17.15 0-31.06 13.59-31.06 30.36v22.19h11.41v-22.36c0-10.43 8.812-18.91 19.64-18.91 10.83 0 19.64 8.483 19.64 18.91v22.36h11.41v-22.19c0.001477-16.77-13.9-30.36-31.06-30.36z" fill="url(#linearGradient10547)"/><g transform="matrix(1.484 0 0 1.484 -175.6 -40.37)"><path d="m78.54 65.33v14.95h1.195v-14.95c0-11.3 8.834-20.46 19.73-20.46-11.56 0-20.93 9.159-20.93 20.46z" fill="url(#linearGradient10549)"/><path d="m99.47 44.87c10.9 0 19.73 9.159 19.73 20.46v14.95h1.195v-14.95c0-11.3-9.369-20.46-20.93-20.46z" fill="url(#linearGradient10551)"/></g><path d="m-26.4 31.21c-15.69 0-26 9.028-26 24.8v22.76h3.98v-22.93c0-12.09 9.878-21.93 22.02-21.93 12.14 0 22.01 9.838 22.01 21.93v22.93h2.75v-22.76c-0.00149-15.77-9.074-24.8-24.76-24.8z" fill="url(#linearGradient10553)"/><path d="m-28.04 33.28c-14.7 0-24.36 8.637-24.36 23.72v21.77h3.729v-21.94c0-11.57 9.253-20.98 20.63-20.98 11.37 0 20.63 9.412 20.63 20.98v21.94h2.576v-21.77c0.00149-15.09-8.499-23.72-23.2-23.72z" fill="url(#radialGradient10555)" filter="url(#filter20221)"/><path d="m-28 28.1c-15.35 0-27.79 13.05-27.79 28.05v22.62h1.236v-20.15c0-15 11.2-27.16 26.55-27.16 16.65 0 26.55 10.53 26.55 27.16v20.15h1.235v-23.43c0-15.65-11.95-27.24-27.79-27.24z" fill="url(#linearGradient10557)" filter="url(#filter20209)"/></g><g transform="matrix(.8237 0 0 .8175 135.5 -38.58)"><rect x="-154" y="96.12" width="80" height="63.88" fill="url(#linearGradient5489)"/><rect x="-154" y="148.4" width="80" height="11.64" enable-background="new " fill="url(#linearGradient5491)" opacity=".5"/><g fill-rule="evenodd"><path d="m-117.6 131.5h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-76.64 131.5v0.0168l-19.35 0.2185-21.59-0.2353h40.93z" fill="#fff" opacity=".03"/><path d="m-120.5 129.2h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-120.5 129.2h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-93.92 131.2 17.27 0.2488v0.1445h-45.29l28.02-0.3933z" opacity=".03"/><path d="m-76.64 131.7v0.1244l-17.27 0.2151-28.02-0.3395h45.29z" fill="#fff" opacity=".03"/><path d="m-120.5 129.2h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-120.5 129.2h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-93.92 131.2 17.27 0.2488v0.1445h-45.29l28.02-0.3933z" opacity=".03"/><path d="m-76.64 131.7v0.1244l-17.27 0.2151-28.02-0.3395h45.29z" fill="#fff" opacity=".03"/><path d="m-88.6 126.4 11.96 0.1546v0.1176h-33.55l21.59-0.2723z" opacity=".03"/><path d="m-76.64 126.7v0.1008l-11.96 0.1311-21.59-0.232h33.55z" fill="#fff" opacity=".03"/><path d="m-91.52 124.2 14.88 0.1916v0.0774h-36.46l21.59-0.269z" opacity=".03"/><path d="m-76.64 124.5v0.0672l-14.88 0.1681-21.59-0.2353h36.46z" fill="#fff" opacity=".03"/><path d="m-91.52 124.2 14.88 0.1916v0.0774h-36.46l21.59-0.269z" opacity=".03"/><path d="m-76.64 124.5v0.0672l-14.88 0.1681-21.59-0.2353h36.46z" fill="#fff" opacity=".03"/><path d="m-82.18 132.2h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-82.18 132.3h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-81.34 134.7h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".03"/><path d="m-81.34 134.7h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".03"/><path d="m-85.1 130h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-85.1 130h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-120 132 35.78 0.3933h-65.57v-0.0572l29.79-0.3362z" opacity=".03"/><path d="m-84.26 132.4-35.78 0.3429-29.79-0.2925v-0.0504h65.57z" fill="#fff" opacity=".03"/><path d="m-85.1 130h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-85.1 130h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-120 132 35.78 0.3933h-65.57v-0.0572l29.79-0.3362z" opacity=".03"/><path d="m-84.26 132.4-35.78 0.3429-29.79-0.2925v-0.0504h65.57z" fill="#fff" opacity=".03"/><path d="m-74.79 127.5h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-76.64 127.5v0.0168l-25.72 0.2185-26.77-0.2354h52.49z" fill="#fff" opacity=".03"/><path d="m-74 130h-69.48l34.23-0.3934 35.25 0.3934z" opacity=".03"/><path d="m-76.64 130v0.037l-32.09 0.3059-34.74-0.3429h66.83z" fill="#fff" opacity=".03"/><path d="m-77.71 125.2h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-77.71 125.2h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-134.7 126.1 35.78 0.3933h-50.88v-0.2218l15.1-0.1715z" opacity=".03"/><path d="m-98.94 126.5-35.78 0.3429-15.1-0.1479v-0.195h50.88z" fill="#fff" opacity=".03"/><path d="m-75.87 127.7h-70.52l34.74-0.3934 35.78 0.3934z" opacity=".03"/><path d="m-75.87 127.7h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".03"/><path d="m-77.71 125.2h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-77.71 125.2h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-134.7 126.1 35.78 0.3933h-50.88v-0.2218l15.1-0.1715z" opacity=".03"/><path d="m-98.94 126.5-35.78 0.3429-15.1-0.1479v-0.195h50.88z" fill="#fff" opacity=".03"/><path d="m-75.87 127.7h-70.52l34.74-0.3934 35.78 0.3934z" opacity=".03"/><path d="m-76.64 127.7v7e-3l-35.01 0.3362-34.74-0.3429h69.75z" fill="#fff" opacity=".03"/><path d="m-123.3 140.3h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-123.3 140.3h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-96.77 142.4 20.13 0.2925v0.1008h-48.15l28.02-0.3933z" opacity=".03"/><path d="m-76.64 142.8v0.0874l-20.13 0.2521-28.02-0.3395h48.15z" fill="#fff" opacity=".03"/><path d="m-126.3 138h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-126.3 138h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-99.69 140.1 23.04 0.3328v0.0605h-51.06l28.02-0.3933z" opacity=".03"/><path d="m-76.64 140.5v0.0538l-23.04 0.2891-28.02-0.3429h51.06z" fill="#fff" opacity=".03"/><path d="m-126.3 138h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-126.3 138h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-99.69 140.1 23.04 0.3328v0.0605h-51.06l28.02-0.3933z" opacity=".03"/><path d="m-76.64 140.5v0.0538l-23.04 0.2891-28.02-0.3429h51.06z" fill="#fff" opacity=".03"/><path d="m-94.37 135.3 17.73 0.2286v0.0403h-39.32l21.59-0.2689z" opacity=".03"/><path d="m-76.64 135.6v0.037l-17.73 0.1983-21.59-0.2353h39.32z" fill="#fff" opacity=".03"/><path d="m-118.9 133.3h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-118.9 133.3h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-92.3 135.4 15.66 0.2252v0.1681h-43.68l28.02-0.3933z" opacity=".03"/><path d="m-76.64 135.8v0.1445l-15.66 0.1984-28.02-0.3429h43.68z" fill="#fff" opacity=".03"/><path d="m-118.9 133.3h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-118.9 133.3h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-92.3 135.4 15.66 0.2252v0.1681h-43.68l28.02-0.3933z" opacity=".03"/><path d="m-76.64 135.8v0.1445l-15.66 0.1984-28.02-0.3429h43.68z" fill="#fff" opacity=".03"/><path d="m-87.95 141.1h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-87.95 141.1h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-122.9 143.2 35.78 0.3933h-62.71v-0.0874l26.93-0.3059z" opacity=".03"/><path d="m-87.11 143.6-35.78 0.3429-26.93-0.2656v-0.0773h62.71z" fill="#fff" opacity=".02"/><path d="m-90.87 138.8h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-90.87 138.8h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-125.8 140.9 35.78 0.3933h-59.8v-0.121l24.02-0.2723z" opacity=".03"/><path d="m-90.03 141.3-35.78 0.3395-24.02-0.2353v-0.1042h59.8z" fill="#fff" opacity=".03"/><path d="m-90.87 138.8h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-90.87 138.8h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-125.8 140.9 35.78 0.3933h-59.8v-0.121l24.02-0.2723z" opacity=".03"/><path d="m-90.03 141.3-35.78 0.3395-24.02-0.2353v-0.1042h59.8z" fill="#fff" opacity=".03"/><path d="m-80.57 136.4h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-80.57 136.4h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-79.73 138.8h-70.52l34.74-0.3934 35.78 0.3934z" opacity=".03"/><path d="m-79.73 138.8h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".03"/><path d="m-83.48 134.1h-54.34l26.77-0.2702 27.57 0.2702z" opacity=".03"/><path d="m-83.48 134.1h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-118.4 136.1 35.78 0.3933h-67.19v-0.037l31.4-0.3563z" opacity=".03"/><path d="m-82.64 136.5-35.78 0.3429-31.4-0.3092v-0.0336h67.19z" fill="#fff" opacity=".03"/><path d="m-83.48 134.1h-54.34l26.77-0.2702 27.57 0.2702z" opacity=".03"/><path d="m-83.48 134.1h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-82.64 136.5h-66.64l32.83-0.3934 33.81 0.3934z" opacity=".03"/><path d="m-82.64 136.5h-66.64l32.83 0.342 33.81-0.342z" fill="#fff" opacity=".03"/><path d="m-119.5 145.9h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".02"/><path d="m-119.5 145.9h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".02"/><path d="m-92.92 148 16.28 0.2353v0.158h-44.3l28.02-0.3933z" opacity=".02"/><path d="m-76.64 148.4v0.1378l-16.28 0.2051-28.02-0.3429h44.3z" fill="#fff" opacity=".02"/><path d="m-122.4 143.7h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".02"/><path d="m-122.4 143.7h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".02"/><path d="m-95.84 145.7 19.2 0.279v0.1143h-47.21l28.02-0.3933z" opacity=".02"/><path d="m-76.64 146.1v0.1009l-19.2 0.2387-28.02-0.3395h47.21z" fill="#fff" opacity=".02"/><path d="m-122.4 143.7h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".02"/><path d="m-122.4 143.7h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".02"/><path d="m-95.84 145.7 19.2 0.279v0.1143h-47.21l28.02-0.3933z" opacity=".02"/><path d="m-76.64 146.1v0.1009l-19.2 0.2387-28.02-0.3395h47.21z" fill="#fff" opacity=".02"/><path d="m-90.53 140.9 13.88 0.1815v0.0908h-35.47l21.59-0.2723z" opacity=".03"/><path d="m-76.64 141.2v0.0773l-13.88 0.1546-21.59-0.2319h35.47z" fill="#fff" opacity=".03"/><path d="m-93.44 138.7 16.8 0.2151v0.0538h-38.39l21.59-0.2689z" opacity=".03"/><path d="m-76.64 138.9v0.0471l-16.8 0.1882-21.59-0.2353h38.39z" fill="#fff" opacity=".03"/><path d="m-93.44 138.7 16.8 0.2151v0.0538h-38.39l21.59-0.2689z" opacity=".03"/><path d="m-76.64 138.9v0.0471l-16.8 0.1882-21.59-0.2353h38.39z" fill="#fff" opacity=".03"/><path d="m-84.1 146.7h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".02"/><path d="m-84.1 146.7h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".02"/><path d="m-119 148.8 35.78 0.3933h-66.56v-0.0437l30.78-0.3496z" opacity=".02"/><path d="m-83.27 149.2-35.78 0.3429-30.78-0.3026v-0.0404h66.56z" fill="#fff" opacity=".02"/><path d="m-87.02 144.4h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".02"/><path d="m-87.02 144.5h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".02"/><path d="m-122 146.5 35.78 0.3933h-63.64v-0.0773l27.86-0.316z" opacity=".02"/><path d="m-86.18 146.9-35.78 0.3429-27.86-0.2757v-0.0672h63.64z" fill="#fff" opacity=".02"/><path d="m-87.02 144.4h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".02"/><path d="m-87.02 144.5h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".02"/><path d="m-122 146.5 35.78 0.3933h-63.64v-0.0773l27.86-0.316z" opacity=".02"/><path d="m-86.18 146.9-35.78 0.3429-27.86-0.2757v-0.0672h63.64z" fill="#fff" opacity=".02"/><path d="m-76.72 142h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-76.72 142h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-133.7 142.9 35.78 0.3933h-51.88v-0.2118l16.09-0.1815z" opacity=".03"/><path d="m-97.95 143.3-35.78 0.3429-16.09-0.158v-0.1849h51.88z" fill="#fff" opacity=".03"/><path d="m-74.88 144.4h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".02"/><path d="m-74.88 144.4h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".02"/><path d="m-79.63 139.7h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-79.63 139.7h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-78.79 142.2h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".03"/><path d="m-78.79 142.2h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".03"/><path d="m-79.63 139.7h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-79.63 139.7h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-78.79 142.2h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".03"/><path d="m-78.79 142.2h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".03"/><path d="m-125.3 154.8h42.55l-20.96-0.2702-21.59 0.2702z" opacity=".01"/><path d="m-125.3 154.8h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".01"/><path d="m-126.7 157.2h48.14l-20.12-0.3935-28.02 0.3935z" opacity=".01"/><path d="m-126.7 157.2 47.88 0.2197-19.86 0.1223-28.02-0.342z" fill="#fff" opacity=".01"/><path d="m-128.2 152.5h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".01"/><path d="m-128.2 152.5h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".01"/><path d="m-129.6 155h55.22l-27.2-0.3935-28.02 0.3935z" opacity=".01"/><path d="m-129.6 155 52.53 0.0549-27.2 0.342-25.33-0.397z" fill="#fff" opacity=".01"/><path d="m-128.2 152.5h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".01"/><path d="m-128.2 152.5h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".01"/><path d="m-129.6 155 52.5 0.1831-24.48-0.5766-28.02 0.3935z" opacity=".01"/><path d="m-76.64 155v0.0269l-24.97 0.316-28.02-0.3429h52.99z" fill="#fff" opacity=".01"/><path d="m-117.9 150h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".02"/><path d="m-117.9 150h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".02"/><path d="m-120.8 147.8h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".02"/><path d="m-120.8 147.8h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".02"/><path d="m-94.23 149.8 17.58 0.2555v0.1378h-45.6l28.02-0.3933z" opacity=".02"/><path d="m-76.64 150.2v0.121l-17.58 0.2218-28.02-0.3429h45.6z" fill="#fff" opacity=".02"/><path d="m-120.8 147.8h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".02"/><path d="m-120.8 147.8h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".02"/><path d="m-94.23 149.8 17.58 0.2555v0.1378h-45.6l28.02-0.3933z" opacity=".02"/><path d="m-76.64 150.2v0.121l-17.58 0.2218-28.02-0.3429h45.6z" fill="#fff" opacity=".02"/><path d="m-89.88 155.6h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".01"/><path d="m-89.88 155.6h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".01"/><path d="m-92.79 153.3h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".01"/><path d="m-92.79 153.3h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".01"/><path d="m-92.79 153.3h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".01"/><path d="m-92.79 153.3h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".01"/><path d="m-82.49 150.8h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".02"/><path d="m-82.49 150.8h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".02"/><path d="m-81.65 153.3h-70.52l34.74-0.3934 35.78 0.3934z" opacity=".01"/><path d="m-81.65 153.3h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".01"/><path d="m-85.41 148.6h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".02"/><path d="m-85.41 148.6h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".02"/><path d="m-120.3 150.6 35.78 0.3933h-65.26v-0.0605l29.48-0.3328z" opacity=".02"/><path d="m-84.57 151-35.78 0.3429-29.48-0.2925v-0.0505h65.26z" fill="#fff" opacity=".01"/><path d="m-85.41 148.6h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".02"/><path d="m-85.41 148.6h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".02"/><path d="m-84.57 151h-65.22l32.13-0.3934 33.09 0.3934z" opacity=".02"/><path d="m-84.57 151h-65.22l32.13 0.342 33.09-0.342z" fill="#fff" opacity=".01"/><path d="m-79.14 118.9h-70.52l34.74-0.3934 35.78 0.3934z" opacity=".04098"/><path d="m-79.14 118.9h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".04098"/><path d="m-121.1 124.5h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-121.1 124.5h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-94.57 126.6 17.93 0.2588v0.1345h-45.95l28.02-0.3933z" opacity=".03"/><path d="m-76.64 127v0.1177l-17.93 0.2252-28.02-0.3429h45.95z" fill="#fff" opacity=".03"/><path d="m-124.1 122.2h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-124.1 122.2h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-97.49 124.3 20.85 0.3026v0.0941h-48.86l28.02-0.3967z" opacity=".03"/><path d="m-76.64 124.7v0.0807l-20.85 0.2622-28.02-0.3429h48.86z" fill="#fff" opacity=".03"/><path d="m-124.1 122.2h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-124.1 122.2h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-97.49 124.3 20.85 0.3026v0.0941h-48.86l28.02-0.3967z" opacity=".03"/><path d="m-76.64 124.7v0.0807l-20.85 0.2622-28.02-0.3429h48.86z" fill="#fff" opacity=".03"/><path d="m-92.17 119.5 15.53 0.1983v0.0706h-37.12l21.59-0.2689z" opacity=".03"/><path d="m-76.64 119.8v0.0605l-15.53 0.1748-21.59-0.2353h37.12z" fill="#fff" opacity=".03"/><path d="m-90.1 119.5 13.46 0.195v0.1983h-41.48l28.02-0.3933z" opacity=".03"/><path d="m-76.64 119.9v0.1715l-13.46 0.1681-28.02-0.3396h41.48z" fill="#fff" opacity=".03"/><path d="m-90.1 119.5 13.46 0.195v0.1983h-41.48l28.02-0.3933z" opacity=".03"/><path d="m-76.64 119.9v0.1715l-13.46 0.1681-28.02-0.3396h41.48z" fill="#fff" opacity=".03"/><path d="m-85.75 125.3h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-85.75 125.3h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-120.7 127.3 35.78 0.3933h-64.91v-0.0639l29.13-0.3294z" opacity=".03"/><path d="m-84.91 127.7-35.78 0.3429-29.13-0.2891v-0.0538h64.91z" fill="#fff" opacity=".03"/><path d="m-88.67 123h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".04098"/><path d="m-88.67 123h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".04098"/><path d="m-123.6 125.1 35.78 0.3933h-62v-0.0975l26.21-0.2958z" opacity=".03"/><path d="m-87.83 125.5-35.78 0.3429-26.21-0.2588v-0.0841h62z" fill="#fff" opacity=".03"/><path d="m-88.67 123h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".04098"/><path d="m-88.67 123h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".04098"/><path d="m-78.37 120.5h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-78.37 120.5h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-76.53 123h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".04098"/><path d="m-76.53 123h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".04098"/><path d="m-80.44 120.7h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".04098"/><path d="m-80.44 120.7h-70.52l34.74 0.342 35.78-0.342z" fill="#fff" opacity=".04098"/><path d="m-80.44 120.7h-68.4l33.7-0.3935 34.71 0.3935z" opacity=".04098"/><path d="m-80.44 120.7h-68.4l33.7 0.342 34.71-0.342z" fill="#fff" opacity=".04098"/></g><g transform="matrix(-.05296 0 0 .07002 -229.8 107.2)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2802 -1593)" d="m-1018 1265v0.1562l175.4 2.031 195.7-2.188h-371z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -228 104.9)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -258.3 96.11)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-861.9 1263-156.6 2.312v1.344h410.5l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-1018 1267v1.156l156.6 2 253.9-3.156h-410.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -228 104.9)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -258.3 96.11)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-861.9 1263-156.6 2.312v1.344h410.5l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-1018 1267v1.156l156.6 2 253.9-3.156h-410.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -234.3 102.4)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-1.277 0 0 1.536 -2888 -1525)" d="m-910.1 1219-108.4 1.438v1.094h304.1l-195.7-2.531z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2888 -1525)" d="m-1018 1221v0.9374l108.4 1.219 195.7-2.156h-304.1z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -232.6 100.1)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-883.7 1198-134.8 1.781v0.7188h330.5l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-1018 1200v0.625l134.8 1.562 195.7-2.188h-330.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -232.6 100.1)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-883.7 1198-134.8 1.781v0.7188h330.5l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-1018 1200v0.625l134.8 1.562 195.7-2.188h-330.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -12.3 107.9)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 26.37 99.17)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -10.52 105.7)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 28.16 96.9)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-634.2 1271-324.3 3.656h594.3v-0.5313l-270-3.125z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-958.6 1274 324.3 3.188 270-2.719v-0.4687h-594.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -10.52 105.7)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 28.16 96.9)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-634.2 1271-324.3 3.656h594.3v-0.5313l-270-3.125z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-958.6 1274 324.3 3.188 270-2.719v-0.4687h-594.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -17.83 103.2)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(1 0 0 1.536 -939.9 -1536)" d="m-1019 1229v0.1563l233.2 2.031 242.6-2.188h-475.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 20.84 94.44)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1165 -968.6)" d="m-1018 1251v0.3438l290.9 2.844 314.9-3.188h-605.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -16.05 100.9)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 37.16 90.99)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-501.1 1216-324.3 3.656h461.2v-2.062l-136.9-1.594z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-825.4 1219 324.3 3.188 136.9-1.375v-1.813h-461.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 22.63 92.16)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -16.05 100.9)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 37.16 90.99)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-501.1 1216-324.3 3.656h461.2v-2.062l-136.9-1.594z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-825.4 1219 324.3 3.188 136.9-1.375v-1.813h-461.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 22.63 92.16)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1185 -946.3)" d="m-1019 1230v0.062l317.3 3.125 314.9-3.188h-632.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -225.3 116)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -256.6 107.2)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2548 -1094)" d="m-836 1367-182.5 2.719v0.9374h436.4l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2548 -1094)" d="m-1018 1370v0.8125l182.5 2.344 253.9-3.156h-436.4z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -223.5 113.7)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -254.8 105)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-809.6 1345-208.9 3.094v0.5625h462.8l-254-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-1018 1349v0.5l208.9 2.687 254-3.187h-462.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -223.5 113.7)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -254.8 105)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-809.6 1345-208.9 3.094v0.5625h462.8l-254-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-1018 1349v0.5l208.9 2.687 254-3.187h-462.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -230.8 111.3)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-1.277 0 0 1.536 -2821 -1651)" d="m-857.8 1301-160.7 2.125v0.375h356.4l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2821 -1651)" d="m-1018 1303v0.3437l160.7 1.844 195.7-2.188h-356.4z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -229 109)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -259.3 100.2)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-876.6 1301-141.9 2.094v1.563h395.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-1018 1305v1.344l141.9 1.844 253.9-3.188h-395.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -229 109)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -259.3 100.2)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-876.6 1301-141.9 2.094v1.563h395.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-1018 1305v1.344l141.9 1.844 253.9-3.188h-395.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -8.764 116.8)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 29.91 108)" fill-rule="evenodd" opacity=".02"><path transform="matrix(.7705 0 0 1.055 -1257 -1102)" d="m-608.3 1374-324.3 3.656h568.4v-0.8126l-244.1-2.844z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1257 -1102)" d="m-932.7 1378 324.3 3.188 244.1-2.469v-0.7187h-568.4z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -6.976 114.5)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 31.7 105.7)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1277 -1080)" d="m-581.9 1353-324.3 3.656h542v-1.125l-217.7-2.531z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1277 -1080)" d="m-906.2 1357 324.3 3.156 217.7-2.188v-0.9687h-542z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -6.976 114.5)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 31.7 105.7)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1277 -1080)" d="m-581.9 1353-324.3 3.656h542v-1.125l-217.7-2.531z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1277 -1080)" d="m-906.2 1357 324.3 3.156 217.7-2.188v-0.9687h-542z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -13.29 112.1)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 24.38 103.3)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -11.5 109.8)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 27.17 101)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1225 -1033)" d="m-648.8 1309-324.3 3.656h609v-0.3437l-284.6-3.312z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1225 -1033)" d="m-973.2 1312 324.3 3.188 284.6-2.875v-0.3125h-609z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -11.5 109.8)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08295 0 0 .102 17.61 101)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -228.6 121.6)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -258.9 112.9)" fill-rule="evenodd" opacity=".02"><path transform="matrix(-.984 0 0 1.055 -2582 -1149)" d="m-870.9 1419-147.6 2.188v1.469h401.5l-254-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2582 -1149)" d="m-1018 1423v1.281l147.6 1.906 254-3.188h-401.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -226.8 119.4)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -257.1 110.6)" fill-rule="evenodd" opacity=".02"><path transform="matrix(-.984 0 0 1.055 -2556 -1127)" d="m-844.5 1398-174 2.594v1.063h427.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2556 -1127)" d="m-1018 1402v0.9375l174 2.219 253.9-3.156h-427.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -226.8 119.4)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -257.1 110.6)" fill-rule="evenodd" opacity=".02"><path transform="matrix(-.984 0 0 1.055 -2556 -1127)" d="m-844.5 1398-174 2.594v1.063h427.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2556 -1127)" d="m-1018 1402v0.9375l174 2.219 253.9-3.156h-427.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -233.2 116.9)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-1.277 0 0 1.536 -2865 -1732)" d="m-892.7 1353-125.8 1.688v0.8438h321.5l-195.7-2.531z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2865 -1732)" d="m-1018 1356v0.7188l125.8 1.438 195.7-2.156h-321.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -231.4 114.6)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-866.2 1332-152.3 2v0.5h347.9l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-1018 1335v0.4375l152.3 1.75 195.7-2.188h-347.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -231.4 114.6)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-866.2 1332-152.3 2v0.5h347.9l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-1018 1335v0.4375l152.3 1.75 195.7-2.188h-347.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -11.12 122.4)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 27.55 113.7)" fill-rule="evenodd" opacity=".02"><path transform="matrix(.7705 0 0 1.055 -1230 -1157)" d="m-643.2 1426-324.3 3.656h603.3v-0.4063l-279-3.25z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1230 -1157)" d="m-967.5 1430 324.3 3.188 279-2.813v-0.375h-603.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -9.336 120.1)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 29.34 111.4)" fill-rule="evenodd" opacity=".02"><path transform="matrix(.7705 0 0 1.055 -1250 -1135)" d="m-616.8 1405-324.3 3.656h576.9v-0.7187l-252.6-2.938z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1250 -1135)" d="m-941.1 1409 324.3 3.188 252.6-2.562v-0.625h-576.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -9.336 120.1)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 29.34 111.4)" fill-rule="evenodd" opacity=".02"><path transform="matrix(.7705 0 0 1.055 -1250 -1135)" d="m-616.8 1405-324.3 3.656h576.9v-0.7187l-252.6-2.938z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1250 -1135)" d="m-941.1 1409 324.3 3.188 252.6-2.562v-0.625h-576.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -16.65 117.7)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 36.55 107.7)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1332 -1099)" d="m-510.1 1371-324.3 3.656h470.2v-1.969l-145.9-1.688z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1332 -1099)" d="m-834.4 1375 324.3 3.188 145.9-1.469v-1.719h-470.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 22.02 108.9)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -14.87 115.4)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 23.81 106.6)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -14.87 115.4)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 23.81 106.6)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -224.1 130.5)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -255.4 121.7)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h429.4l-179.5-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3 427 2.154-177.1 1.199-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -222.3 128.2)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -253.6 119.4)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3 468.6 0.5386-242.6 3.354-225.9-3.892z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -222.3 128.2)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -253.6 119.4)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2 468.2 1.795-218.3-5.653-249.9 3.858z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2505 -1214)" d="m-1018 1484v0.25l226.3 2.938 253.9-3.188h-480.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -229.6 125.7)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -227.8 123.5)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -258.1 114.7)" fill-rule="evenodd" opacity=".02"><path transform="matrix(-.984 0 0 1.055 -2571 -1167)" d="m-859.1 1436-159.4 2.375v1.281h413.3l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2571 -1167)" d="m-1018 1440v1.125l159.4 2.062 253.9-3.187h-413.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -227.8 123.5)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -258.1 114.7)" fill-rule="evenodd" opacity=".02"><path transform="matrix(-.984 0 0 1.055 -2571 -1167)" d="m-859.1 1436-159.4 2.375v1.281h413.3l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2571 -1167)" d="m-1018 1440v1.125l159.4 2.062 253.9-3.187h-413.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -7.584 131.3)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 31.09 122.5)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -5.796 129)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 32.88 120.2)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -5.796 129)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 32.88 120.2)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -12.11 126.5)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 26.56 117.8)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -10.33 124.3)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 28.35 115.5)" fill-rule="evenodd" opacity=".01"><path transform="matrix(.7705 0 0 1.055 -1239 -1175)" d="m-631.4 1443-324.3 3.656h591.5v-0.5626l-267.2-3.094z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1239 -1175)" d="m-955.8 1447 324.3 3.188 267.2-2.719v-0.4687h-591.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -10.33 124.3)" fill-rule="evenodd" opacity=".02"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08119 0 0 .102 15.32 115.5)" fill-rule="evenodd" opacity=".01"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -261.4 82.57)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2619 -852.3)" d="m-908.3 1137-110.2 1.625v2.031h364.2l-254-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2619 -852.3)" d="m-1018 1141v1.75l110.2 1.406 254-3.156h-364.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 24.02 83.36)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -227.6 100.2)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -257.9 91.42)" fill-rule="evenodd" opacity=".03"><path transform="matrix(-.984 0 0 1.055 -2568 -939)" d="m-856 1220-162.5 2.406v1.25h416.5l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2568 -939)" d="m-1018 1223v1.094l162.5 2.094 253.9-3.187h-416.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -224.8 97.91)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -256.1 89.14)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-829.5 1198-189 2.812v0.875h442.9l-253.9-3.688z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-1018 1202v0.75l189 2.438 253.9-3.188h-442.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -224.8 97.91)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -256.1 89.14)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-829.5 1198-189 2.812v0.875h442.9l-253.9-3.688z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-1018 1202v0.75l189 2.438 253.9-3.188h-442.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -232.2 95.45)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2846 -1425)" d="m-877.7 1154-140.8 1.844v0.6563h336.5l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2846 -1425)" d="m-1018 1156v0.5626l140.8 1.625 195.7-2.188h-336.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -260.6 84.4)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2607 -870.3)" d="m-896.5 1154-122 1.813v1.844h375.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2607 -870.3)" d="m-1018 1158v1.594l122 1.562 253.9-3.156h-375.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -260.6 84.4)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2607 -870.3)" d="m-896.5 1154-122 1.813v1.844h375.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2607 -870.3)" d="m-1018 1158v1.594l122 1.562 253.9-3.156h-375.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -10.11 101)" fill-rule="evenodd" opacity=".03"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 28.56 92.21)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1241 -946.8)" d="m-628.2 1227-324.3 3.656h588.4v-0.5938l-264-3.062z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1241 -946.8)" d="m-952.6 1231 324.3 3.188 264-2.688v-0.5h-588.4z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -8.324 98.7)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 30.35 89.93)" fill-rule="evenodd" opacity=".03"><path transform="matrix(.7705 0 0 1.055 -1262 -924.5)" d="m-601.8 1206-324.3 3.656h561.9v-0.9063l-237.6-2.75z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1262 -924.5)" d="m-926.2 1210 324.3 3.188 237.6-2.406v-0.7813h-561.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -8.324 98.7)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -15.64 96.24)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 23.03 87.47)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -12.85 93.96)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 24.82 85.19)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -12.85 93.96)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08515 0 0 .102 19.61 85.19)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g fill-rule="evenodd"><path d="m-117.6 111.4h42.55l-20.96-0.3372-21.59 0.3372z" opacity=".04098"/><path d="m-76.64 111.4v0.021l-19.35 0.2727-21.59-0.2937h40.93z" fill="#fff" opacity=".04098"/><path d="m-120.5 108.5h42.55l-20.96-0.3371-21.59 0.3371z" opacity=".04098"/><path d="m-120.5 108.5h42.55l-20.96 0.293-21.59-0.293z" fill="#fff" opacity=".04098"/><path d="m-93.92 111.1 17.27 0.3105v0.1804h-45.29l28.02-0.4908z" opacity=".04098"/><path d="m-76.64 111.6v0.1552l-17.27 0.2685-28.02-0.4237h45.29z" fill="#fff" opacity=".04098"/><path d="m-120.5 108.5h42.55l-20.96-0.3371-21.59 0.3371z" opacity=".04098"/><path d="m-120.5 108.5h42.55l-20.96 0.293-21.59-0.293z" fill="#fff" opacity=".04098"/><path d="m-93.92 111.1 17.27 0.3105v0.1804h-45.29l28.02-0.4908z" opacity=".04098"/><path d="m-76.64 111.6v0.1552l-17.27 0.2685-28.02-0.4237h45.29z" fill="#fff" opacity=".04098"/><path d="m-88.6 105.7 11.96 0.1546v0.1177h-33.55l21.59-0.2723z" opacity=".06"/><path d="m-76.64 106v0.1008l-11.96 0.1311-21.59-0.232h33.55z" fill="#fff" opacity=".06"/><path d="m-100.2 103.5 22.34 0.1916v0.0773h-54.74l32.41-0.2689z" opacity=".06"/><path d="m-77.9 103.7v0.0672l-22.34 0.1681-32.41-0.2353h54.74z" fill="#fff" opacity=".06"/><path d="m-100.2 103.5 22.34 0.1916v0.0773h-54.74l32.41-0.2689z" opacity=".06"/><path d="m-77.9 103.7v0.0672l-22.34 0.1681-32.41-0.2353h54.74z" fill="#fff" opacity=".06"/><path d="m-82.18 112.4h-54.34l26.77-0.3371 27.57 0.3371z" opacity=".04098"/><path d="m-82.18 112.4h-54.34l26.77 0.2931 27.57-0.2931z" fill="#fff" opacity=".04098"/><path d="m-81.34 115.4h-70.52l34.74-0.491 35.78 0.491z" opacity=".04098"/><path d="m-81.34 115.4h-70.52l34.74 0.4268 35.78-0.4268z" fill="#fff" opacity=".04098"/><path d="m-85.1 109.5h-54.34l26.77-0.3371 27.57 0.3371z" opacity=".04098"/><path d="m-85.1 109.5h-54.34l26.77 0.293 27.57-0.293z" fill="#fff" opacity=".04098"/><path d="m-120 112.1 35.78 0.4908h-65.57v-0.0713l29.79-0.4196z" opacity=".04098"/><path d="m-84.26 112.6-35.78 0.4279-29.79-0.365v-0.0629h65.57z" fill="#fff" opacity=".04098"/><path d="m-85.1 109.5h-54.34l26.77-0.3371 27.57 0.3371z" opacity=".04098"/><path d="m-85.1 109.5h-54.34l26.77 0.293 27.57-0.293z" fill="#fff" opacity=".04098"/><path d="m-120 112.1 35.78 0.4908h-65.57v-0.0713l29.79-0.4196z" opacity=".04098"/><path d="m-84.26 112.6-35.78 0.4279-29.79-0.365v-0.0629h65.57z" fill="#fff" opacity=".04098"/><path d="m-74.79 106.8h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".06"/><path d="m-76.64 106.8v0.0168l-25.72 0.2185-26.77-0.2353h52.49z" fill="#fff" opacity=".06"/><path d="m-74.58 109.5h-68.9l33.94-0.491 34.96 0.491z" opacity=".04098"/><path d="m-76.64 109.5v0.0462l-32.09 0.3818-34.74-0.428h66.83z" fill="#fff" opacity=".04098"/><path d="m-77.71 104.5h-54.34l26.77-0.2702 27.57 0.2702z" opacity=".06"/><path d="m-77.71 104.5h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".06"/><path d="m-134.7 105.4 35.78 0.3933h-50.88v-0.2219l15.1-0.1714z" opacity=".04098"/><path d="m-98.94 105.8-35.78 0.3429-15.1-0.1479v-0.195h50.88z" fill="#fff" opacity=".04098"/><path d="m-75.87 107h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".06"/><path d="m-75.87 107h-70.52l34.74 0.3421 35.78-0.3421z" fill="#fff" opacity=".04098"/><path d="m-77.71 104.5h-54.34l26.77-0.2702 27.57 0.2702z" opacity=".06"/><path d="m-77.71 104.5h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".06"/><path d="m-134.7 105.4 35.78 0.3933h-50.88v-0.2219l15.1-0.1714z" opacity=".04098"/><path d="m-98.94 105.8-35.78 0.3429-15.1-0.1479v-0.195h50.88z" fill="#fff" opacity=".04098"/><path d="m-75.87 107h-70.52l34.74-0.3935 35.78 0.3935z" opacity=".06"/><path d="m-76.64 107v7e-3l-35.01 0.3362-34.74-0.3429h69.75z" fill="#fff" opacity=".04098"/><path d="m-123.3 119.6h42.55l-20.96-0.2701-21.59 0.2701z" opacity=".03"/><path d="m-123.3 119.6h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".03"/><path d="m-99.69 119.4 23.04 0.3328v0.0605h-51.06l28.02-0.3933z" opacity=".03"/><path d="m-76.64 119.8v0.0538l-23.04 0.2891-28.02-0.3429h51.06z" fill="#fff" opacity=".03"/><path d="m-99.69 119.4 23.04 0.3328v0.0605h-51.06l28.02-0.3933z" opacity=".03"/><path d="m-76.64 119.8v0.0538l-23.04 0.2891-28.02-0.3429h51.06z" fill="#fff" opacity=".03"/><path d="m-94.37 116.2 17.73 0.2853v0.0503h-39.32l21.59-0.3356z" opacity=".03"/><path d="m-76.64 116.5v0.0461l-17.73 0.2475-21.59-0.2937h39.32z" fill="#fff" opacity=".03"/><path d="m-118.9 113.7h42.55l-20.96-0.3371-21.59 0.3371z" opacity=".03"/><path d="m-118.9 113.7h42.55l-20.96 0.293-21.59-0.293z" fill="#fff" opacity=".03"/><path d="m-92.3 116.2 15.66 0.2811v0.2098h-43.68l28.02-0.4909z" opacity=".03"/><path d="m-76.64 116.7v0.1804l-15.66 0.2475-28.02-0.4279h43.68z" fill="#fff" opacity=".03"/><path d="m-118.9 113.7h42.55l-20.96-0.3371-21.59 0.3371z" opacity=".03"/><path d="m-118.9 113.7h42.55l-20.96 0.293-21.59-0.293z" fill="#fff" opacity=".03"/><path d="m-92.3 116.2 15.66 0.2811v0.2098h-43.68l28.02-0.4909z" opacity=".03"/><path d="m-76.64 116.7v0.1804l-15.66 0.2475-28.02-0.4279h43.68z" fill="#fff" opacity=".03"/><path d="m-87.95 120.4h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".04098"/><path d="m-80.57 117.5h-54.34l26.77-0.3371 27.57 0.3371z" opacity=".03"/><path d="m-80.57 117.5h-54.34l26.77 0.293 27.57-0.293z" fill="#fff" opacity=".03"/><path d="m-83.48 114.7h-54.34l26.77-0.3371 27.57 0.3371z" opacity=".04098"/><path d="m-83.48 114.7h-54.34l26.77 0.293 27.57-0.293z" fill="#fff" opacity=".04098"/><path d="m-118.4 117.2 35.78 0.4908h-67.19v-0.0461l31.4-0.4447z" opacity=".04098"/><path d="m-83.48 114.7h-54.34l26.77-0.3371 27.57 0.3371z" opacity=".04098"/><path d="m-83.48 114.7h-54.34l26.77 0.293 27.57-0.293z" fill="#fff" opacity=".04098"/></g><g fill-rule="evenodd"><path d="m-82.64 117.7h-66.64l32.83-0.491 33.81 0.491z" opacity=".04098"/><path d="m-90.53 120.2 13.88 0.1815v0.0908h-35.47l21.59-0.2723z" opacity=".03"/><path d="m-79.63 119h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/></g><g fill-rule="evenodd"><path d="m-79.63 119h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-79.63 119h-54.34l26.77-0.2701 27.57 0.2701z" opacity=".03"/><path d="m-79.63 119h-54.34l26.77 0.2348 27.57-0.2348z" fill="#fff" opacity=".03"/><path d="m-144.7 103.8h63.88l-31.47-0.2701-32.41 0.2701z" opacity=".06"/><path d="m-144.7 103.8h63.88l-31.47 0.2348-32.41-0.2348z" fill="#fff" opacity=".06"/><path d="m-94.57 105.8 17.93 0.2588v0.1344h-45.95l28.02-0.3933z" opacity=".06"/><path d="m-76.64 106.2v0.1176l-17.93 0.2252-28.02-0.3429h45.95z" fill="#fff" opacity=".06"/><path d="m-120.7 106.6 35.78 0.3933h-64.91v-0.0639l29.13-0.3294z" opacity=".04098"/><path d="m-84.91 107-35.78 0.3429-29.13-0.2891v-0.0538h64.91z" fill="#fff" opacity=".04098"/></g><g transform="matrix(-.05296 0 0 .08738 -229.8 81.05)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2802 -1593)" d="m-1018 1265v0.1562l175.4 2.031 195.7-2.188h-371z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .08738 -228 78.22)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .1273 -258.3 67.27)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-861.9 1263-156.6 2.312v1.344h410.5l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-1018 1267v1.156l156.6 2 253.9-3.156h-410.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .08738 -228 78.22)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .1273 -258.3 67.27)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-861.9 1263-156.6 2.312v1.344h410.5l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2573 -985.1)" d="m-1018 1267v1.156l156.6 2 253.9-3.156h-410.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -234.3 81.71)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2888 -1525)" d="m-910.1 1219-108.4 1.438v1.094h304.1l-195.7-2.531z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2888 -1525)" d="m-1018 1221v0.9374l108.4 1.219 195.7-2.156h-304.1z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -232.6 79.44)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-883.7 1198-134.8 1.781v0.7188h330.5l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-1018 1200v0.625l134.8 1.562 195.7-2.188h-330.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -232.6 79.44)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-883.7 1198-134.8 1.781v0.7188h330.5l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2854 -1492)" d="m-1018 1200v0.625l134.8 1.562 195.7-2.188h-330.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .08738 -12.3 82.04)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .1273 26.37 71.09)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .08738 -10.52 79.2)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .1273 28.16 68.25)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-634.2 1271-324.3 3.656h594.3v-0.5313l-270-3.125z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-958.6 1274 324.3 3.188 270-2.719v-0.4687h-594.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .08738 -10.52 79.2)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .1273 28.16 68.25)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-634.2 1271-324.3 3.656h594.3v-0.5313l-270-3.125z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1237 -992.8)" d="m-958.6 1274 324.3 3.188 270-2.719v-0.4687h-594.3z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -17.83 82.5)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(1 0 0 1.536 -939.9 -1536)" d="m-1019 1229v0.1563l233.2 2.031 242.6-2.188h-475.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .1273 20.84 65.18)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1165 -968.6)" d="m-1018 1251v0.3438l290.9 2.844 314.9-3.188h-605.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -16.05 80.22)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 37.16 70.29)" fill-rule="evenodd" opacity=".06"><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-501.1 1216-324.3 3.656h461.2v-2.062l-136.9-1.594z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-825.4 1219 324.3 3.188 136.9-1.375v-1.813h-461.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 22.63 71.45)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -16.05 80.22)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 37.16 70.29)" fill-rule="evenodd" opacity=".06"><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-501.1 1216-324.3 3.656h461.2v-2.062l-136.9-1.594z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1339 -934.9)" d="m-825.4 1219 324.3 3.188 136.9-1.375v-1.813h-461.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 22.63 71.45)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1185 -946.3)" d="m-1019 1230v0.062l317.3 3.125 314.9-3.188h-632.2z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -225.3 95.3)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -254.8 84.25)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-809.6 1345-208.9 3.094v0.5625h462.8l-254-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-1018 1349v0.5l208.9 2.687 254-3.187h-462.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -254.8 84.25)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-809.6 1345-208.9 3.094v0.5625h462.8l-254-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2522 -1072)" d="m-1018 1349v0.5l208.9 2.687 254-3.187h-462.8z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .08738 -230.8 86.18)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2821 -1651)" d="m-857.8 1301-160.7 2.125v0.375h356.4l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2821 -1651)" d="m-1018 1303v0.3437l160.7 1.844 195.7-2.188h-356.4z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .08738 -229 83.34)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .1273 -259.3 72.4)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-876.6 1301-141.9 2.094v1.563h395.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-1018 1305v1.344l141.9 1.844 253.9-3.188h-395.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .08738 -229 83.34)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .1273 -259.3 72.4)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-876.6 1301-141.9 2.094v1.563h395.9l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2588 -1025)" d="m-1018 1305v1.344l141.9 1.844 253.9-3.188h-395.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .08738 -13.29 87.16)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 24.38 82.57)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .08738 -11.5 84.32)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .1273 27.17 73.38)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(.7705 0 0 1.055 -1225 -1033)" d="m-648.8 1309-324.3 3.656h609v-0.3437l-284.6-3.312z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1225 -1033)" d="m-973.2 1312 324.3 3.188 284.6-2.875v-0.3125h-609z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .08738 -11.5 84.32)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08295 0 0 .1273 17.61 73.38)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -231.4 93.91)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-866.2 1332-152.3 2v0.5h347.9l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-1018 1335v0.4375l152.3 1.75 195.7-2.188h-347.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -231.4 93.91)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-866.2 1332-152.3 2v0.5h347.9l-195.7-2.5z" opacity=".377"/><path transform="matrix(-1.277 0 0 1.536 -2832 -1699)" d="m-1018 1335v0.4375l152.3 1.75 195.7-2.188h-347.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -14.87 94.7)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -14.87 94.7)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.05296 0 0 .07002 -227.6 79.48)" fill-rule="evenodd" opacity=".04098"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -257.9 70.71)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2568 -939)" d="m-856 1220-162.5 2.406v1.25h416.5l-253.9-3.656z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2568 -939)" d="m-1018 1223v1.094l162.5 2.094 253.9-3.187h-416.5z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -256.1 68.43)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-829.5 1198-189 2.812v0.875h442.9l-253.9-3.688z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-1018 1202v0.75l189 2.438 253.9-3.188h-442.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(-.06874 0 0 .102 -256.1 68.43)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-829.5 1198-189 2.812v0.875h442.9l-253.9-3.688z" opacity=".377"/><path transform="matrix(-.984 0 0 1.055 -2542 -916.7)" d="m-1018 1202v0.75l189 2.438 253.9-3.188h-442.9z" fill="#fff" opacity=".377"/></g><g transform="matrix(.06764 0 0 .07002 -10.11 80.27)" fill-rule="evenodd" opacity=".06"><path d="m-1975 351.2h492.5l-242.6-3.858-249.9 3.858z" opacity=".377"/><path d="m-1975 351.3h492.5l-242.6 3.354-249.9-3.354z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 28.56 71.5)" fill-rule="evenodd" opacity=".04098"><path transform="matrix(.7705 0 0 1.055 -1241 -946.8)" d="m-628.2 1227-324.3 3.656h588.4v-0.5938l-264-3.062z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1241 -946.8)" d="m-952.6 1231 324.3 3.188 264-2.688v-0.5h-588.4z" fill="#fff" opacity=".377"/></g><g transform="matrix(.08779 0 0 .102 30.35 69.22)" fill-rule="evenodd" opacity=".06"><path transform="matrix(.7705 0 0 1.055 -1262 -924.5)" d="m-601.8 1206-324.3 3.656h561.9v-0.9063l-237.6-2.75z" opacity=".377"/><path transform="matrix(.7705 0 0 1.055 -1262 -924.5)" d="m-926.2 1210 324.3 3.188 237.6-2.406v-0.7813h-561.9z" fill="#fff" opacity=".377"/></g><g fill-rule="evenodd"><path d="m-149.6 153.5h42.55l-20.96-0.2702-21.59 0.2702z" opacity=".01"/><path d="m-149.6 153.5h42.55l-20.96 0.2348-21.59-0.2348z" fill="#fff" opacity=".01"/><path d="m-151.1 156h48.14l-20.12-0.3935-28.02 0.3935z" opacity=".01"/><path d="m-151.1 156 47.88 0.2197-19.86 0.1223-28.02-0.342z" fill="#fff" opacity=".01"/><path d="m-154 153.7h55.22l-27.2-0.3935-28.02 0.3935z" opacity=".01"/><path d="m-154 153.7 52.53 0.055-27.2 0.342-25.33-0.397z" fill="#fff" opacity=".01"/><path d="m-152.3 153.7 50.84 0.1831-23.71-0.5766-27.13 0.3935z" opacity=".01"/><path d="m-101 153.7v0.0269l-24.12 0.316-27.06-0.3429h51.19z" fill="#fff" opacity=".01"/></g><path id="path284_2_" d="m-154 96.12s18.29 8.727 40 8.727c21.7 0 40-8.727 40-8.727h-80z" fill="url(#linearGradient5493)"/><path d="m-154 96.12s18.29 7.273 40 7.273c21.7 0 40-7.273 40-7.273h-80z" fill="url(#linearGradient5495)"/><path id="path137_2_" d="m-114 99.63c-15.51 0-28.09-0.8324-28.09-1.962v-1.669h11.23v1.669c0 0.7022 7.057 1.177 16.85 1.177 9.797 0 16.85-0.4749 16.85-1.177v-1.669h11.23v1.669c0.0014 1.129-12.57 1.962-28.09 1.962z" fill="url(#linearGradient5497)" filter="url(#filter10567)"/></g></svg>
diff --git a/share/icons/svg/password-generator.svg b/share/icons/svg/password-generator.svg
deleted file mode 100644
index 440d690a0..000000000
--- a/share/icons/svg/password-generator.svg
+++ /dev/null
@@ -1,568 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg1307"
- height="128"
- width="128">
- <defs
- id="defs1309">
- <linearGradient
- id="linearGradient3718">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3720" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1"
- id="stop3722" />
- </linearGradient>
- <linearGradient
- id="linearGradient3680">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3682" />
- <stop
- id="stop3684"
- offset="0.22032471"
- style="stop-color:#ffffff;stop-opacity:0.49803922;" />
- <stop
- id="stop3686"
- offset="0.5"
- style="stop-color:#ffffff;stop-opacity:0;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="0.5"
- id="stop3688" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3690" />
- </linearGradient>
- <linearGradient
- id="linearGradient3291">
- <stop
- id="stop3293"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3295"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2381">
- <stop
- id="stop2383"
- offset="0"
- style="stop-color:#393939;stop-opacity:1;" />
- <stop
- id="stop2385"
- offset="1"
- style="stop-color:#393939;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2518">
- <stop
- id="stop2520"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2522"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2496">
- <stop
- id="stop2498"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.49803922;"
- offset="0.04228718"
- id="stop2508" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="0.5"
- id="stop2504" />
- <stop
- id="stop2506"
- offset="0.5"
- style="stop-color:#ffffff;stop-opacity:0;" />
- <stop
- id="stop2500"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2488">
- <stop
- id="stop2490"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2492"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2453">
- <stop
- id="stop2455"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2457"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2419">
- <stop
- id="stop2421"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2423"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3225">
- <stop
- id="stop3227"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- style="stop-color:#e9e9e9;stop-opacity:1;"
- offset="0.5"
- id="stop2347" />
- <stop
- id="stop3229"
- offset="1"
- style="stop-color:#d3d3d3;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.32911414,-0.18426278,0.00344988,0.00676072,59.169639,65.342464)"
- r="59.198612"
- fy="57.087173"
- fx="96.433075"
- cy="57.087173"
- cx="96.433075"
- id="radialGradient2425"
- xlink:href="#linearGradient2419" />
- <radialGradient
- r="59.198612"
- fy="57.087173"
- fx="96.433075"
- cy="57.087173"
- cx="96.433075"
- gradientTransform="matrix(0.31464719,0.16663594,-0.00390006,0.0070264,6.1939502,29.102501)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2429"
- xlink:href="#linearGradient2419" />
- <radialGradient
- r="59.198612"
- fy="57.087173"
- fx="96.433075"
- cy="57.087173"
- cx="96.433075"
- gradientTransform="matrix(-6.5370771e-4,0.36915148,-0.01148035,8.9888928e-4,66.206754,56.948367)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2433"
- xlink:href="#linearGradient2419" />
- <radialGradient
- r="59.198612"
- fy="57.087173"
- fx="96.433075"
- cy="57.087173"
- cx="96.433075"
- gradientTransform="matrix(0.30975608,-0.17225438,0.00324696,0.00631933,7.1075276,35.761713)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2480"
- xlink:href="#linearGradient2419" />
- <radialGradient
- r="59.198612"
- fy="57.087173"
- fx="96.433075"
- cy="57.087173"
- cx="96.433075"
- gradientTransform="matrix(0.30528058,0.15922188,-0.00378396,0.00671573,60.709321,2.5331232)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient2484"
- xlink:href="#linearGradient2419" />
- <linearGradient
- y2="30.208342"
- x2="154.86906"
- y1="186.85913"
- x1="116.81535"
- gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient1432"
- xlink:href="#linearGradient2496" />
- <radialGradient
- r="20.153163"
- fy="63.915367"
- fx="68.964005"
- cy="63.915367"
- cx="68.964005"
- gradientTransform="matrix(0.4096939,-0.05084026,0.0016784,0.495142,37.98752,30.25767)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1435"
- xlink:href="#linearGradient3718" />
- <radialGradient
- r="20.153163"
- fy="63.915367"
- fx="68.964005"
- cy="63.915367"
- cx="68.964005"
- gradientTransform="matrix(0.68188455,-0.10453237,0.03601738,0.43439777,16.732111,38.459404)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1438"
- xlink:href="#linearGradient2518" />
- <linearGradient
- gradientTransform="matrix(0.77496397,-0.47736424,0.41995021,0.75244601,-11.810014,48.172506)"
- y2="6.8190994"
- x2="92.337082"
- y1="3.2521791"
- x1="94.021759"
- gradientUnits="userSpaceOnUse"
- id="linearGradient1441"
- xlink:href="#linearGradient2488" />
- <radialGradient
- r="6.6403217"
- fy="117.94415"
- fx="113.60279"
- cy="117.94415"
- cx="113.60279"
- gradientTransform="matrix(0.80824314,-0.45051001,-0.01677524,0.96571805,-10.092238,38.234456)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1456"
- xlink:href="#linearGradient3225" />
- <radialGradient
- r="6.2969127"
- fy="79.114578"
- fx="148.67097"
- cy="79.114578"
- cx="148.67097"
- gradientTransform="matrix(0.80824314,-0.45051001,-0.01677524,0.96571805,-12.747064,45.293861)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1459"
- xlink:href="#linearGradient3225" />
- <radialGradient
- r="7.4961972"
- fy="5.9431438"
- fx="59.905712"
- cy="5.9431438"
- cx="59.905712"
- gradientTransform="matrix(0.76906443,0.41392843,-0.01330547,0.86085475,-11.512513,48.253962)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1463"
- xlink:href="#linearGradient3225" />
- <radialGradient
- r="6.9240074"
- fy="50.798088"
- fx="84.408051"
- cy="50.798088"
- cx="84.408051"
- gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-16.121677,46.553274)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1467"
- xlink:href="#linearGradient3225" />
- <radialGradient
- r="6.8208823"
- fy="30.446516"
- fx="67.268486"
- cy="30.446516"
- cx="67.268486"
- gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-13.240155,47.67091)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1471"
- xlink:href="#linearGradient3225" />
- <radialGradient
- r="6.9496646"
- fy="9.8521395"
- fx="49.933464"
- cy="9.8521395"
- cx="49.933464"
- gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-11.409803,49.062709)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1474"
- xlink:href="#linearGradient3225" />
- <radialGradient
- r="60.815896"
- fy="60.201225"
- fx="67.876709"
- cy="60.201225"
- cx="67.876709"
- gradientTransform="matrix(0.5645257,-0.34773821,0.28363904,0.50821111,10.679939,54.077116)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient1480"
- xlink:href="#linearGradient2453" />
- <linearGradient
- gradientTransform="matrix(0.75854865,0.40826863,-0.0137637,0.89050228,-5.4092216,29.668461)"
- gradientUnits="userSpaceOnUse"
- y2="12.660598"
- x2="78.643684"
- y1="153.80435"
- x1="-90.709442"
- id="linearGradient2387"
- xlink:href="#linearGradient2381" />
- <linearGradient
- y2="45.567513"
- x2="57.296326"
- y1="-16.490377"
- x1="57.296326"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3301"
- xlink:href="#linearGradient3291" />
- <filter
- height="1.3312082"
- y="-0.16560408"
- width="1.1801384"
- x="-0.090069178"
- id="filter3429">
- <feGaussianBlur
- id="feGaussianBlur3431"
- stdDeviation="0.68605903" />
- </filter>
- <filter
- height="1.3374616"
- y="-0.1687308"
- width="1.1835395"
- x="-0.091769746"
- id="filter3433">
- <feGaussianBlur
- id="feGaussianBlur3435"
- stdDeviation="0.68605903" />
- </filter>
- <filter
- height="1.3324355"
- y="-0.16621775"
- width="1.1808059"
- x="-0.090402938"
- id="filter3437">
- <feGaussianBlur
- id="feGaussianBlur3439"
- stdDeviation="0.68605903" />
- </filter>
- <filter
- height="1.5941641"
- y="-0.29708207"
- width="1.0792235"
- x="-0.039611745"
- id="filter3482">
- <feGaussianBlur
- id="feGaussianBlur3484"
- stdDeviation="1.3721181" />
- </filter>
- <filter
- id="filter3518">
- <feGaussianBlur
- id="feGaussianBlur3520"
- stdDeviation="0.45785798" />
- </filter>
- <filter
- id="filter3574">
- <feGaussianBlur
- id="feGaussianBlur3576"
- stdDeviation="1.0125102" />
- </filter>
- <linearGradient
- y2="13.043629"
- x2="42.380108"
- y1="186.47618"
- x1="274.36163"
- gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3678"
- xlink:href="#linearGradient3680" />
- <filter
- id="filter3714">
- <feGaussianBlur
- id="feGaussianBlur3716"
- stdDeviation="0.42187368" />
- </filter>
- <filter
- id="filter3753">
- <feGaussianBlur
- id="feGaussianBlur3755"
- stdDeviation="0.76746435" />
- </filter>
- </defs>
- <metadata
- id="metadata1312">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
- <dc:contributor>
- <cc:Agent>
- <dc:title>Oxygen team</dc:title>
- </cc:Agent>
- </dc:contributor>
- <dc:title></dc:title>
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/LGPL/2.1/">
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Reproduction" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Distribution" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Notice" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/ShareAlike" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/SourceCode" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- id="path2913"
- d="m 63.6875,11.34375 c -0.307888,0.01157 -0.622049,0.03822 -0.9375,0.0625 -0.124077,0.0093 -0.251114,0.0201 -0.375,0.03125 -0.05233,0.0049 -0.103739,0.02601 -0.15625,0.03125 -0.712,0.06846 -1.428165,0.153454 -2.125,0.28125 -0.155698,0.02997 -0.311968,0.06025 -0.46875,0.09375 -1.997959,0.408268 -3.903345,1.039509 -5.53125,1.9375 -0.566172,0.280908 -1.121148,0.597939 -1.6875,0.9375 l -2.0625,1.125 c -3.384614,1.788314 -7.092461,4.343647 -12.375,7.28125 -3.43228,1.90868 -6.456933,3.625939 -9.1875,5.1875 l -4.96875,2.75 c -0.498481,0.274974 -0.961001,0.544756 -1.375,0.84375 l -0.3125,0.1875 c -0.268281,0.175855 -0.545708,0.372427 -0.8125,0.5625 -0.966273,0.596455 -1.527441,1.009092 -1.5,1.0625 0.0068,0.0132 0.146679,-0.07019 0.21875,-0.09375 -3.962556,3.207756 -7.410412,7.880262 -8,12.96875 L 12.0625,46.75 c -0.07009,0.509421 -0.116296,1.030587 -0.125,1.59375 L 10.34375,83.3125 c -0.105144,6.80274 4.445942,14.767952 10.21875,17.875 L 53.8125,119 c 0.416106,0.22396 0.814802,0.4009 1.21875,0.5625 6.179168,2.49704 14.387189,2.03917 19.03125,-0.53125 0.38938,-0.16551 0.784222,-0.33772 1.1875,-0.5625 l 31.125,-17.75 c 5.44542,-3.035234 9.8947,-10.375507 10,-16.4375 l -0.34375,-35.625 c 0.006,-0.33561 -0.0106,-0.655677 -0.0313,-0.96875 l 0.125,-0.21875 C 115.17195,41.889964 112.94649,34.769399 108.25,32.1875 l -1.375,-0.59375 C 106.25301,31.004608 98.645471,26.824191 89.15625,21.875 85.474411,19.954703 82.224469,18.29233 79.34375,16.84375 l -6.53125,-3.5 c -2.121537,-1.139951 -3.811692,-1.796844 -6.625,-1.96875 -0.253862,-0.01693 -0.519547,-0.02233 -0.78125,-0.03125 -0.147499,-0.0043 -0.289561,0.0017 -0.4375,0 -0.414575,-0.0064 -0.85006,-0.0162 -1.28125,0 z"
- style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3753)" />
- <path
- id="path2415"
- d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 35.366196,27.16282 c 5.06326,2.14656 14.524273,2.44687 19.76131,-0.92915 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z"
- style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- id="path2435"
- d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 37.487054,27.87435 c 4.487477,0.90002 9.451421,1.77535 17.640452,-2.89762 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z"
- style="opacity:0;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- id="rect1412"
- d="m 21.534884,37.678074 33.235279,17.969949 c 5.772809,3.10706 10.335586,11.084985 10.230441,17.887724 l -0.586755,37.784793 c -0.105145,6.80273 -4.837214,9.77795 -10.610022,6.67089 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect1414"
- d="M 22.804196,27.057004 54.101765,9.7925263 C 59.722729,6.6918703 68.514472,6.488197 73.814194,9.3358593 L 108.41349,27.926853 c 5.29972,2.847662 5.0411,7.636379 -0.57986,10.737037 L 76.536061,55.928366 c -5.620963,3.100656 -14.412707,3.304329 -19.712429,0.456667 L 22.224339,37.79404 c -5.299722,-2.847662 -5.041106,-7.636381 0.579857,-10.737036 z"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect1416"
- d="M 76.279616,56.950767 107.40321,39.201951 c 5.44542,-3.03524 9.7445,-0.598541 9.6392,5.463458 l -0.65538,38.618606 c -0.1053,6.061993 -4.57393,13.385785 -10.01935,16.421019 L 75.244086,117.45385 c -5.445414,3.03523 -9.744496,0.59853 -9.639194,-5.46346 l 0.65538,-38.61861 c 0.105301,-6.062 4.57393,-13.385772 10.019344,-16.421013 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect2299"
- d="m 34.579473,71.713674 c 3.193841,1.719 5.720571,5.980985 5.665315,9.556022 -0.05526,3.575036 -2.670955,5.069246 -5.864796,3.350246 -3.19384,-1.719 -5.720571,-5.980986 -5.665314,-9.556022 0.05526,-3.575036 2.670954,-5.069247 5.864795,-3.350246 z"
- style="fill:url(#radialGradient1463);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect2301"
- d="m 106.19386,48.637332 c 2.81955,-1.571604 5.04233,-0.124684 4.98382,3.244214 -0.0585,3.368899 -2.37553,7.346262 -5.19509,8.917866 -2.81954,1.571599 -5.04232,0.124685 -4.9838,-3.244214 0.0585,-3.368897 2.37552,-7.346266 5.19507,-8.917866 z"
- style="fill:url(#radialGradient1459);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect2303"
- d="m 79.85942,94.543208 c 2.973317,-1.657309 5.317323,-0.131486 5.255611,3.421141 -0.06171,3.552621 -2.505079,7.746891 -5.478396,9.404201 -2.973318,1.65731 -5.317324,0.13148 -5.255611,-3.42112 0.06171,-3.55264 2.505079,-7.746904 5.478396,-9.404222 z"
- style="fill:url(#radialGradient1456);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path2417"
- d="m 110.58717,37.051279 c 0.11274,0.220925 -8.5242,5.287057 -19.278872,11.30833 -10.754671,6.021272 -19.574594,10.728803 -19.687327,10.507878 -0.112734,-0.220924 8.5242,-5.287055 19.278871,-11.308329 10.754678,-6.021273 19.574588,-10.728803 19.687328,-10.507879 z"
- style="fill:url(#radialGradient2425);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path2427"
- d="M 54.940385,55.437448 C 54.81294,55.667054 46.364754,51.434053 36.082827,45.988786 25.8009,40.543518 17.559582,35.937824 17.687026,35.708218 c 0.127446,-0.229607 8.575631,4.003395 18.857558,9.448661 10.281927,5.445267 18.523246,10.050963 18.395801,10.280569 z"
- style="fill:url(#radialGradient2429);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path2431"
- d="m 65.449635,114.45135 c -0.375151,0.0294 -0.662284,-9.73704 -0.640922,-21.800043 0.02136,-12.062997 0.343169,-21.877093 0.71832,-21.906467 0.37515,-0.02937 0.662284,9.737046 0.640922,21.800043 -0.02136,12.062997 -0.343169,21.877087 -0.71832,21.906467 z"
- style="opacity:0.352459;fill:url(#radialGradient2433);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path2478"
- d="M 55.500752,9.3142325 C 55.606855,9.5207335 47.477933,14.256682 37.355837,19.885546 27.23374,25.514411 18.932593,29.915169 18.826489,29.708669 18.720387,29.502168 26.849309,24.76622 36.971404,19.137356 47.093501,13.508491 55.394649,9.1077316 55.500752,9.3142325 z"
- style="fill:url(#radialGradient2480);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path2482"
- d="M 108.00464,27.696488 C 107.88099,27.915941 99.6843,23.871327 89.70845,18.668329 79.732601,13.465333 71.736615,9.0645036 71.860266,8.8450494 c 0.123651,-0.2194542 8.320347,3.8251596 18.296196,9.0281566 9.975848,5.202996 17.971838,9.603826 17.848178,9.823282 z"
- style="fill:url(#radialGradient2484);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path2486"
- d="M 52.391314,10.725421 C 60.218637,6.0324839 68.182969,7.1388117 72.02313,8.5821097 66.243539,7.7850786 57.513187,8.4568441 52.391314,10.725421 z"
- style="fill:url(#linearGradient1441);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)"
- id="rect2556"
- d="m 77.08844,56.915281 34.08864,-19.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -34.088639,20.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z"
- style="fill:url(#linearGradient1432);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)" />
- <path
- id="path2514"
- d="m 50.216546,53.06469 7.857374,4.162351 c 3.644704,1.96934 11.80512,2.303829 17.092856,-0.409972 l 14.63311,-8.036739 -14.617571,7.67824 c -6.819372,2.782435 -12.100091,1.948265 -17.117359,0.49485 l -7.84841,-3.88873 z"
- style="fill:url(#radialGradient1438);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)"
- id="path2526"
- d="m 48.539396,51.570209 8.832636,4.748176 c 4.097087,4.930516 13.270379,5.877301 19.214433,-0.31034 l 16.449381,-8.905407 -16.309189,8.078374 c -7.351304,3.398287 -14.788017,2.426427 -19.241976,0.405541 l -8.945285,-4.016344 z"
- style="opacity:0.54455447;fill:url(#radialGradient1435);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3714)" />
- <path
- style="fill:url(#linearGradient2387);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 21.534884,37.678074 34.124863,18.407772 c 5.772809,3.10706 9.004709,10.947536 8.899565,17.750275 l -0.291005,39.175029 c -0.105145,6.80274 -6.773179,6.84305 -12.545987,3.73599 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z"
- id="path1506" />
- <path
- transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)"
- d="M 64.15625,1.4375 C 60.315227,1.4963939 56.411613,2.3997005 53.46875,4 l -35.1875,19.125 c -2.941524,1.599572 -4.254537,3.489516 -4.34375,5.125 -0.08921,1.635484 0.953539,3.384565 3.6875,4.875 l 11.78125,6.4375 c 5.194852,0.80039 10.715154,1.25 16.4375,1.25 14.256241,0 27.253781,-2.694155 37.03125,-7.0625 9.353803,-4.17906 15.530816,-9.912929 17.4375,-16.03125 L 74.5,3.65625 C 71.764111,2.1647623 67.998056,1.3785941 64.15625,1.4375 z"
- id="path3299"
- style="fill:url(#linearGradient3301);fill-opacity:1;stroke:none;filter:url(#filter3518)" />
- <g
- transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)"
- style="filter:url(#filter3482)"
- id="g3441">
- <path
- id="path3327"
- d="m 27.480576,23.293682 c 3.505712,-1.906853 9.264565,-1.844946 12.912228,0.138803 3.647663,1.983749 3.761942,5.115894 0.256231,7.022747 -3.505711,1.906852 -9.264564,1.844946 -12.912227,-0.138803 -3.647663,-1.98375 -3.761943,-5.115894 -0.256232,-7.022747 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3429)" />
- <path
- id="path3329"
- d="m 60.840861,23.804955 c 3.440747,-1.871518 9.092885,-1.810759 12.672954,0.13623 3.580069,1.946988 3.692229,5.021092 0.251482,6.89261 -3.440747,1.871516 -9.092884,1.810758 -12.672954,-0.13623 -3.580068,-1.946989 -3.692229,-5.021094 -0.251482,-6.89261 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3433)" />
- <path
- id="path3331"
- d="m 92.391788,24.467376 c 3.492768,-1.899812 9.230362,-1.838135 12.864552,0.13829 3.6342,1.976426 3.74806,5.097007 0.25529,6.99682 -3.49277,1.899812 -9.230362,1.838135 -12.864558,-0.13829 -3.634195,-1.976426 -3.748052,-5.097006 -0.255284,-6.99682 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3437)" />
- </g>
- <path
- id="rect2291"
- d="m 31.482952,28.057089 c 3.118626,-1.720736 8.241611,-1.705796 11.486514,0.0335 3.244904,1.739293 3.346565,4.524804 0.227939,6.24554 -3.118625,1.720735 -8.24161,1.705796 -11.486513,-0.0335 -3.244904,-1.739293 -3.346565,-4.524802 -0.22794,-6.245539 z"
- style="fill:url(#radialGradient1474);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect2293"
- d="m 61.159735,28.279434 c 3.060835,-1.68885 8.088887,-1.674188 11.27366,0.03288 3.184773,1.707062 3.284549,4.440954 0.223715,6.129804 -3.060834,1.688849 -8.088886,1.674187 -11.27366,-0.03287 -3.184772,-1.707063 -3.284549,-4.440957 -0.223715,-6.129805 z"
- style="fill:url(#radialGradient1471);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="rect2295"
- d="m 89.226942,28.648846 c 3.107112,-1.714382 8.211185,-1.699499 11.444108,0.03337 3.23292,1.732872 3.33421,4.508098 0.2271,6.222482 -3.107116,1.714382 -8.211187,1.699499 -11.444111,-0.03337 -3.232922,-1.732872 -3.334208,-4.508097 -0.227097,-6.222482 z"
- style="fill:url(#radialGradient1467);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- id="path1381"
- d="m 32.745512,27.50858 c -0.444882,0.160874 -0.863106,0.357774 -1.252933,0.572866 -1.973505,1.088903 -2.658724,2.61258 -2.072615,4.019316 -0.110112,-1.174485 0.658612,-2.360809 2.281271,-3.256129 3.118627,-1.720737 8.247246,-1.702176 11.49215,0.03712 1.133181,0.607393 1.886843,1.33499 2.250084,2.107659 -0.152505,-1.039536 -0.963043,-2.069142 -2.45874,-2.870847 -2.83929,-1.521881 -7.125046,-1.736102 -10.239217,-0.609982 z"
- style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 62.328392,27.787252 c -0.444881,0.160873 -0.863105,0.357773 -1.252933,0.572865 -1.973505,1.088904 -2.658724,2.61258 -2.072615,4.019316 -0.110113,-1.174485 0.658612,-2.360808 2.281271,-3.256128 3.118626,-1.720738 8.247247,-1.702177 11.49215,0.03712 1.133182,0.607393 1.886843,1.33499 2.250083,2.107659 -0.152505,-1.039536 -0.963042,-2.069141 -2.458739,-2.870847 -2.839291,-1.52188 -7.125046,-1.736101 -10.239217,-0.609981 z"
- id="path2263" />
- <path
- id="path2265"
- d="m 90.312362,28.060759 c -0.444879,0.160875 -0.863106,0.357775 -1.252933,0.572866 -1.973503,1.088903 -2.658722,2.61258 -2.072613,4.019316 -0.110112,-1.174485 0.658612,-2.360808 2.28127,-3.256128 3.118624,-1.720737 8.247248,-1.702176 11.492144,0.03712 1.13319,0.607392 1.88685,1.33499 2.25009,2.107659 -0.1525,-1.039538 -0.96304,-2.069141 -2.45874,-2.870847 -2.839292,-1.52188 -7.125047,-1.736101 -10.239218,-0.609982 z"
- style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- transform="matrix(-0.88958423,0.00696863,0,0.88958423,123.04786,8.3972843)"
- style="fill:url(#linearGradient3678);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)"
- d="m 77.08844,56.915281 37.08864,-22.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -37.088639,23.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z"
- id="path3674" />
- </g>
-</svg>
diff --git a/share/icons/svg/preferences-desktop-icons.svg b/share/icons/svg/preferences-desktop-icons.svg
deleted file mode 100644
index 3d2fd2006..000000000
--- a/share/icons/svg/preferences-desktop-icons.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" enable-background="new 0 0 138 111" overflow="visible" version="1.0" viewBox="0 0 138 111" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient3992"><stop stop-color="#eefd56" stop-opacity=".6863" offset="0"/><stop stop-color="#fff" stop-opacity=".7091" offset="1"/></linearGradient><linearGradient id="linearGradient3984"><stop stop-color="#fff9c6" offset="0"/><stop stop-color="#f6f66c" offset=".5796"/><stop stop-color="#aac226" offset="1"/></linearGradient><linearGradient id="linearGradient3976"><stop stop-color="#16367a" stop-opacity="0" offset="0"/><stop stop-color="#7a7a16" stop-opacity="0" offset=".795"/><stop stop-color="#43470c" offset="1"/></linearGradient><linearGradient id="linearGradient3844"><stop stop-color="#fd56f7" stop-opacity=".6863" offset="0"/><stop stop-color="#fff" stop-opacity=".7091" offset="1"/></linearGradient><linearGradient id="linearGradient3836"><stop stop-color="#16367a" stop-opacity="0" offset="0"/><stop stop-color="#7a166f" stop-opacity="0" offset=".795"/><stop stop-color="#59104d" offset="1"/></linearGradient><linearGradient id="linearGradient3828"><stop stop-color="#fdc6ff" offset="0"/><stop stop-color="#f16cf6" offset=".5796"/><stop stop-color="#bd26c2" offset="1"/></linearGradient><linearGradient id="linearGradient3750"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3604"><stop stop-color="#56e4fd" stop-opacity=".6873" offset="0"/><stop stop-color="#fff" stop-opacity=".7091" offset="1"/></linearGradient><linearGradient id="linearGradient3524"><stop stop-color="#16367a" stop-opacity="0" offset="0"/><stop stop-color="#16367a" stop-opacity="0" offset=".795"/><stop stop-color="#16367a" offset="1"/></linearGradient><linearGradient id="linearGradient3497"><stop stop-color="#58e8ff" offset="0"/><stop stop-color="#51d2f4" offset=".5796"/><stop stop-color="#2654c2" offset="1"/></linearGradient><linearGradient id="linearGradient3467"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3227"><stop stop-color="#656565" offset="0"/><stop stop-color="#f5f5f5" offset="1"/></linearGradient><filter id="filter3215"><feGaussianBlur stdDeviation="1.2988175"/></filter><filter id="filter3251"><feGaussianBlur stdDeviation="0.57076996"/></filter><clipPath id="clipPath3265"><path d="m377-19.97a56.03 56.03 0 1 1-112.1 0 56.03 56.03 0 1 1 112.1 0z" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/></clipPath><linearGradient id="linearGradient3269" x1="328.4" x2="326.5" y1="33.78" y2="-88.12" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3467"/><filter id="filter3275"><feGaussianBlur stdDeviation="1.7100444"/></filter><filter id="filter3448"><feGaussianBlur stdDeviation="0.29695312"/></filter><filter id="filter3475"><feGaussianBlur stdDeviation="0.31492188"/></filter><filter id="filter3594"><feGaussianBlur stdDeviation="0.66601563"/></filter><clipPath id="clipPath3598"><path d="m549.1-40.48c-19.32 0-35.01 15.69-35.01 35.01s15.69 34.98 35.01 34.98c19.32 0 34.98-15.66 34.98-34.98s-15.66-35.01-34.98-35.01z" fill="#aac0ef"/></clipPath><filter id="filter3740"><feGaussianBlur stdDeviation="0.60528572"/></filter><filter id="filter3746"><feGaussianBlur stdDeviation="0.23930338"/></filter><radialGradient id="XMLID_8_" cx="102" cy="112.3" r="139.6" gradientUnits="userSpaceOnUse"><stop stop-color="#d5d5d5" offset="0"/><stop stop-color="#eee" offset=".1885"/><stop stop-color="#f2f2f2" offset=".2572"/><stop stop-color="#fafafa" offset=".3011"/><stop stop-color="#FAFAFA" offset=".5313"/><stop stop-color="#dadcdc" offset=".8449"/><stop stop-color="#E1E2E3" offset="1"/></radialGradient><filter id="filter4883"><feGaussianBlur stdDeviation="2.8945254"/></filter><radialGradient id="radialGradient5053" cx="-110.1" cy="163.2" r="52.6" gradientTransform="matrix(4.835 -.05822 .04734 3.932 632.5 -516.9)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_8_"/><radialGradient id="radialGradient5058" cx="-117.5" cy="167.5" r="52.6" gradientTransform="matrix(4.899 -.05899 .04797 3.984 677.7 -560.5)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_8_"/><linearGradient id="linearGradient5382" x1="320.9" x2="320.9" y1="30.62" y2="-72.66" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3227"/><radialGradient id="radialGradient5384" cx="462" cy="-50.08" r="21.35" fx="461.5" fy="-62.78" gradientTransform="matrix(1.924 -.02976 .009209 1.25 -426.6 26.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5386" cx="654.5" cy="-20.36" r="38.29" fx="653.8" fy="3.277" gradientTransform="matrix(.6357 0 0 .6357 -315.5 37.17)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3828"/><linearGradient id="linearGradient5390" x1="529.5" x2="529.1" y1="-49.41" y2="-2.032" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3467"/><linearGradient id="linearGradient5394" x1="425.9" x2="426.3" y1="7.406" y2="-21.59" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><linearGradient id="linearGradient5396" x1="425.2" x2="424.9" y1="35.69" y2="12" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><linearGradient id="linearGradient5398" x1="529.5" x2="529.6" y1="-49.41" y2="-22.28" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3467"/><linearGradient id="linearGradient5400" x1="455.3" x2="452.7" y1="-91.46" y2="-34.05" gradientTransform="matrix(.6517 0 0 .6517 -194.4 36.88)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5402" cx="549.1" cy="-5.5" r="34.64" fy="15.37" gradientTransform="matrix(1 0 0 .9995 0 -.002481)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3836"/><radialGradient id="radialGradient5404" cx="455.5" cy="-40.35" r="14.1" fy="-32.88" gradientTransform="matrix(1.486 -8.417e-7 1.041e-6 1.838 -221.6 32.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3844"/><radialGradient id="radialGradient5406" cx="419.7" cy="-36.61" r="27.47" gradientTransform="matrix(.6524 0 0 .5881 -173.3 28.02)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5412" cx="654.5" cy="-20.36" r="38.29" fx="653.8" fy="3.277" gradientTransform="matrix(.6357 0 0 .6357 -298.1 105.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3984"/><linearGradient id="linearGradient5426" x1="455.3" x2="452.7" y1="-91.46" y2="-34.05" gradientTransform="matrix(.6517 0 0 .6517 -177 105.1)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5428" cx="549.1" cy="-5.5" r="34.64" fy="15.37" gradientTransform="matrix(1 0 0 .9995 0 -.002481)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3976"/><radialGradient id="radialGradient5430" cx="455.5" cy="-40.35" r="14.1" fy="-32.88" gradientTransform="matrix(1.486 -8.417e-7 1.041e-6 1.838 -221.6 32.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3992"/><radialGradient id="radialGradient5432" cx="419.7" cy="-36.61" r="27.47" gradientTransform="matrix(.6524 0 0 .5881 -155.9 96.19)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5438" cx="654.5" cy="-20.36" r="38.29" fx="653.8" fy="3.277" gradientTransform="matrix(.6357 0 0 .6357 -387.7 35.51)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3497"/><linearGradient id="linearGradient5452" x1="455.3" x2="452.7" y1="-91.46" y2="-34.05" gradientTransform="matrix(.6517 0 0 .6517 -266.6 35.22)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5454" cx="549.1" cy="-5.5" r="34.64" fy="15.37" gradientTransform="matrix(1 0 0 .9995 0 -.002481)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3524"/><radialGradient id="radialGradient5456" cx="455.5" cy="-40.35" r="14.1" fy="-32.88" gradientTransform="matrix(1.486 -8.417e-7 1.041e-6 1.838 -221.6 32.46)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3604"/><radialGradient id="radialGradient5458" cx="419.7" cy="-36.61" r="27.47" gradientTransform="matrix(.6524 0 0 .5881 -245.5 26.36)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5516" cx="654.5" cy="-20.36" r="38.29" fx="653.8" fy="3.277" gradientTransform="matrix(.6357 0 0 .6357 -384.6 115.2)" gradientUnits="userSpaceOnUse"><stop stop-color="#c6ff92" offset="0"/><stop stop-color="#9ef451" offset=".5796"/><stop stop-color="#6fc226" offset="1"/></radialGradient><linearGradient id="linearGradient5530" x1="455.3" x2="452.7" y1="-91.46" y2="-34.05" gradientTransform="matrix(.6517 0 0 .6517 -263.4 114.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><radialGradient id="radialGradient5532" cx="549.1" cy="-5.5" r="34.64" fy="15.37" gradientTransform="matrix(1 0 0 .9995 0 -.002481)" gradientUnits="userSpaceOnUse"><stop stop-color="#3e6b13" stop-opacity="0" offset="0"/><stop stop-color="#477a16" stop-opacity="0" offset=".795"/><stop stop-color="#426111" offset="1"/></radialGradient><radialGradient id="radialGradient5534" cx="455.5" cy="-40.35" r="14.1" fy="-32.88" gradientTransform="matrix(1.486 -8.417e-7 1.041e-6 1.838 -221.6 32.46)" gradientUnits="userSpaceOnUse"><stop stop-color="#acfd56" stop-opacity=".6863" offset="0"/><stop stop-color="#fff" stop-opacity=".7091" offset="1"/></radialGradient><radialGradient id="radialGradient5536" cx="419.7" cy="-36.61" r="27.47" gradientTransform="matrix(.6524 0 0 .5881 -242.3 106)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3750"/><filter id="filter5580"><feGaussianBlur stdDeviation="3.1546906"/></filter></defs>
-<filter>
- <feGaussianBlur stdDeviation="4"/>
-</filter>
-<filter>
- <feGaussianBlur stdDeviation="3"/>
-</filter>
-<filter>
- <feGaussianBlur stdDeviation="2"/>
-</filter><g>
-
-
-<path transform="matrix(.9475 0 0 .9475 -63.07 29.98)" d="m110.6-40.59 88.19 6.182c4.141 0.2903 7.24 3.857 6.95 7.998l-6.182 88.19c-0.2903 4.141-3.857 7.24-7.998 6.95l-88.19-6.182c-4.141-0.2903-7.24-3.857-6.95-7.998l6.182-88.19c0.2903-4.141 3.857-7.24 7.998-6.95z" filter="url(#filter5580)"/><rect transform="matrix(.9976 .06993 -.06993 .9976 0 0)" x="32.61" y="-14.25" width="99.68" height="99.68" rx="7.223" ry="7.223" fill="#fff"/><rect transform="matrix(.9976 .06993 -.06993 .9976 0 0)" x="33.47" y="-13.39" width="97.96" height="97.96" rx="7.099" ry="7.099" fill="url(#radialGradient5058)"/></g><g transform="matrix(1.082 0 0 1.082 -9.155 -7.851)"><g transform="matrix(.481 0 0 .481 61.25 10.01)" opacity=".332"><g><path transform="matrix(.5702 0 0 .5702 -82.23 36.21)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -321.8 42.38)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m100.6-0.1075c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33 13.44 0 24.33-10.89 24.33-24.33 0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5386)" opacity="1"/></g><path transform="matrix(.5702 0 0 .5702 -82.23 36.06)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -261 28.09)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -82.23 35.84)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -194.4 28.09)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -194.4 28.09)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)" opacity="1"/><path transform="matrix(.7026 0 0 .7026 -261 28.09)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)" opacity="1"/><path d="m100.7-1.864c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94-1.1e-5 -13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 0-13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5400)" opacity="1"/><path transform="matrix(.7026 0 0 .7026 -285.5 28.09)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5402)" filter="url(#filter3594)" opacity="1"/><path transform="matrix(.7373 0 0 .6411 -235.3 35.52)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5404)" filter="url(#filter3740)" opacity=".4062"/><path d="m101.6 2.66 0.1835 3.833c1.52 0.02729 3 0.1701 4.424 0.3949-0.2959-1.247-0.5883-2.494-0.8971-3.74-1.188-0.2693-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6453 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.587-0.6504l0.1835-3.902c-0.08373 0.005413-0.1613-0.006338-0.2447 0zm8.767 1.115c0.3775 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.285-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4097-1.902-0.8399-3.809-1.285-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1768-1.998-0.4893-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.0912 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5406)" opacity=".5898"/></g></g><g transform="matrix(.481 0 0 .481 49.51 28.72)" opacity=".3789"><g><path transform="matrix(.5702 0 0 .5702 -64.84 104.4)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -304.4 110.6)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m118 68.07c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33s24.33-10.89 24.33-24.33c0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5412)" opacity="1"/></g><path transform="matrix(.5702 0 0 .5702 -64.84 104.2)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -243.7 96.26)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -64.84 104)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -177 96.26)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -177 96.26)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)" opacity="1"/><path transform="matrix(.7026 0 0 .7026 -243.7 96.26)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)" opacity="1"/><path d="m118.1 66.31c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94-1.2e-5 -13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 0-13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5426)" opacity="1"/><path transform="matrix(.7026 0 0 .7026 -268.1 96.26)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5428)" filter="url(#filter3594)" opacity="1"/><path transform="matrix(.7373 0 0 .6411 -217.9 103.7)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5430)" filter="url(#filter3740)" opacity=".4062"/><path d="m119 70.84 0.1835 3.833c1.52 0.02728 3 0.1701 4.424 0.3949-0.2959-1.247-0.5883-2.494-0.8971-3.74-1.188-0.2692-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6454 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.587-0.6504l0.1835-3.902c-0.08371 0.005414-0.1613-0.006338-0.2446 0zm8.767 1.115c0.3775 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.284-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4097-1.902-0.84-3.809-1.285-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1769-1.998-0.4894-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.0912 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5432)" opacity=".5898"/></g></g><g transform="matrix(.481 0 0 .481 43.86 6.33)" opacity=".582"><g><path transform="matrix(.5702 0 0 .5702 -154.5 34.54)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -394 40.72)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m28.33-1.769c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33 13.44 0 24.33-10.89 24.33-24.33 0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5438)" opacity="1"/></g><path transform="matrix(.5702 0 0 .5702 -154.5 34.4)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -333.3 26.42)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -154.5 34.18)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -266.6 26.42)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -266.6 26.42)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)" opacity="1"/><path transform="matrix(.7026 0 0 .7026 -333.3 26.42)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)" opacity="1"/><path d="m28.43-3.525c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94 0-13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 1.2e-5 -13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5452)" opacity="1"/><path transform="matrix(.7026 0 0 .7026 -357.8 26.42)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5454)" filter="url(#filter3594)" opacity="1"/><path transform="matrix(.7373 0 0 .6411 -307.6 33.86)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5456)" filter="url(#filter3740)" opacity=".4062"/><path d="m29.41 0.9984 0.1835 3.833c1.52 0.02729 3 0.1701 4.424 0.3949-0.2959-1.247-0.5884-2.494-0.8971-3.74-1.188-0.2693-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6453 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.587-0.6504l0.1835-3.902c-0.08375 0.005413-0.1613-0.006338-0.2447 0zm8.767 1.115c0.3775 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.284-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4097-1.902-0.8399-3.809-1.285-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1769-1.998-0.4893-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.0912 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5458)" opacity=".5898"/></g></g></g><g><path transform="matrix(.9475 0 0 .9475 -52.96 32.72)" d="m64.75-11.05 86.89-23.28c4.08-1.093 8.244 1.311 9.337 5.391l23.28 86.89c1.093 4.079-1.311 8.244-5.391 9.337l-86.89 23.28c-4.08 1.093-8.244-1.311-9.337-5.391l-23.28-86.89c-1.093-4.079 1.311-8.244 5.391-9.337z" fill="#3a3a3a" filter="url(#filter4883)"/><rect transform="matrix(.9659 -.2588 .2588 .9659 0 0)" x="-4.838" y="21.55" width="99.68" height="99.68" rx="7.223" ry="7.223" fill="#fff"/><rect transform="matrix(.9659 -.2588 .2588 .9659 0 0)" x="-3.342" y="23.05" width="96.68" height="96.68" rx="7.006" ry="7.006" fill="url(#radialGradient5053)"/></g><path d="m413.6 50.17v-1.957 1.957z" fill="#fff" fill-opacity=".7569"/><g transform="matrix(1.082 0 0 1.082 .9589 -5.117)"><g transform="matrix(.481 0 0 .481 25.08 15.5)"><g><path transform="matrix(.5702 0 0 .5702 -82.23 36.21)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -321.8 42.38)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m100.6-0.1075c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33 13.44 0 24.33-10.89 24.33-24.33 0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5386)"/></g><path transform="matrix(.5702 0 0 .5702 -82.23 36.06)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -261 28.09)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -82.23 35.84)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -194.4 28.09)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -194.4 28.09)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)"/><path transform="matrix(.7026 0 0 .7026 -261 28.09)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)"/><path d="m100.7-1.864c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94-1.1e-5 -13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 0-13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5400)"/><path transform="matrix(.7026 0 0 .7026 -285.5 28.09)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5402)" filter="url(#filter3594)"/><path transform="matrix(.7373 0 0 .6411 -235.3 35.52)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5404)" filter="url(#filter3740)" opacity=".4062"/><path d="m101.6 2.66 0.1835 3.833c1.52 0.02729 3 0.1701 4.424 0.3949-0.2959-1.247-0.5883-2.494-0.8971-3.74-1.188-0.2693-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6453 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.587-0.6504l0.1835-3.902c-0.08373 0.005413-0.1613-0.006338-0.2447 0zm8.767 1.115c0.3775 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.285-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4097-1.902-0.8399-3.809-1.285-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1768-1.998-0.4893-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.0912 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5406)" opacity=".5898"/></g></g><g transform="matrix(.481 0 0 .481 12.54 29.56)"><g><path transform="matrix(.5702 0 0 .5702 -154.5 34.54)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -394 40.72)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m28.33-1.769c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33 13.44 0 24.33-10.89 24.33-24.33 0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5438)"/></g><path transform="matrix(.5702 0 0 .5702 -154.5 34.4)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -333.3 26.42)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -154.5 34.18)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -266.6 26.42)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -266.6 26.42)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)"/><path transform="matrix(.7026 0 0 .7026 -333.3 26.42)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)"/><path d="m28.43-3.525c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94 0-13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 1.2e-5 -13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5452)"/><path transform="matrix(.7026 0 0 .7026 -357.8 26.42)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5454)" filter="url(#filter3594)"/><path transform="matrix(.7373 0 0 .6411 -307.6 33.86)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5456)" filter="url(#filter3740)" opacity=".4062"/><path d="m29.41 0.9984 0.1835 3.833c1.52 0.02729 3 0.1701 4.424 0.3949-0.2959-1.247-0.5884-2.494-0.8971-3.74-1.188-0.2693-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6453 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.587-0.6504l0.1835-3.902c-0.08375 0.005413-0.1613-0.006338-0.2447 0zm8.767 1.115c0.3775 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.284-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4097-1.902-0.8399-3.809-1.285-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1769-1.998-0.4893-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.0912 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5458)" opacity=".5898"/></g></g><g transform="matrix(.481 0 0 .481 23.55 38.97)"><g><path transform="matrix(.5702 0 0 .5702 -151.3 114.2)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -390.8 120.4)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m31.52 77.91c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33 13.44 0 24.33-10.89 24.33-24.33 0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5516)"/></g><path transform="matrix(.5702 0 0 .5702 -151.3 114.1)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -330.1 106.1)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -151.3 113.9)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -263.4 106.1)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -263.4 106.1)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)"/><path transform="matrix(.7026 0 0 .7026 -330.1 106.1)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)"/><path d="m31.62 76.16c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94 0-13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 1.2e-5 -13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5530)"/><path transform="matrix(.7026 0 0 .7026 -354.6 106.1)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5532)" filter="url(#filter3594)"/><path transform="matrix(.7373 0 0 .6411 -304.4 113.5)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5534)" filter="url(#filter3740)" opacity=".4062"/><path d="m32.6 80.68 0.1835 3.833c1.52 0.02728 3 0.1701 4.424 0.3949-0.2959-1.247-0.5883-2.494-0.8971-3.74-1.188-0.2693-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6454 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.588-0.6504l0.1835-3.902c-0.08371 0.005415-0.1612-0.006338-0.2446 0zm8.767 1.115c0.3776 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.284-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4096-1.902-0.8399-3.809-1.284-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1769-1.998-0.4893-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.09123 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5536)" opacity=".5898"/></g></g><g transform="matrix(.481 0 0 .481 29.57 30.61)"><g><path transform="matrix(.5702 0 0 .5702 -64.84 104.4)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" fill="url(#linearGradient5382)" filter="url(#filter3215)" stroke="#000" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".4988"/><path transform="matrix(.9137 0 0 .6306 -304.4 110.6)" d="m483.3-50.08a21.35 26.68 0 0 1-21.35 26.68 21.35 26.68 0 0 1-21.35-26.68 21.35 26.68 0 0 1 21.35-26.68 21.35 26.68 0 0 1 21.35 26.68z" fill="url(#radialGradient5384)" filter="url(#filter3746)" opacity=".4062"/><path d="m118 68.07c-13.44 0-24.35 10.91-24.35 24.35 0 13.44 10.91 24.33 24.35 24.33s24.33-10.89 24.33-24.33c0-13.44-10.89-24.35-24.33-24.35z" fill="url(#radialGradient5412)"/></g><path transform="matrix(.5702 0 0 .5702 -64.84 104.2)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3251)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width=".9936"/><path transform="matrix(.7026 0 0 .7026 -243.7 96.26)" d="m514.8-41.88c-19.61 0-35.53 15.92-35.53 35.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-35.53-35.5-35.53z" fill="url(#linearGradient5390)" filter="url(#filter3475)" opacity=".3906"/><path transform="matrix(.5702 0 0 .5702 -64.84 104)" d="m377-19.97a56.03 56.03 0 0 1-56.03 56.03 56.03 56.03 0 0 1-56.03-56.03 56.03 56.03 0 0 1 56.03-56.03 56.03 56.03 0 0 1 56.03 56.03z" clip-path="url(#clipPath3265)" fill="none" filter="url(#filter3275)" stroke="url(#linearGradient3269)" stroke-dashoffset="4.15" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.583"/><g><path transform="matrix(.7026 0 0 .7026 -177 96.26)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 35.91 35.91 35.91 19.82 0 35.88-16.09 35.88-35.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5394)" filter="url(#filter3448)" opacity=".5703"/><path transform="matrix(.7026 0 0 .7026 -177 96.26)" d="m385.9-16.09c-1.141 3.502-1.75 7.213-1.75 11.09 0 19.82 16.09 34.91 35.91 34.91 19.82 0 35.88-15.09 35.88-34.91 0-3.881-0.6094-7.592-1.75-11.09 0.8842 3.1 1.375 6.368 1.375 9.75 1e-5 19.61-15.89 35.5-35.5 35.5-19.61-1e-6 -35.53-15.89-35.53-35.5 0-3.382 0.4908-6.65 1.375-9.75z" fill="url(#linearGradient5396)" filter="url(#filter3448)"/><path transform="matrix(.7026 0 0 .7026 -243.7 96.26)" d="m514.8-40.88c-19.61 0-35.53 14.92-35.53 34.53 0 3.403 0.4796 6.697 1.375 9.812-0.6841-2.729-1.062-5.591-1.062-8.531-1e-5 -19.31 15.69-35 35-35 19.31 1e-6 35 15.69 35 35 0 6.639-1.847 12.83-5.062 18.12 3.652-5.58 5.781-12.24 5.781-19.41 0-19.61-15.89-34.53-35.5-34.53z" fill="url(#linearGradient5398)" filter="url(#filter3475)"/><path d="m118.1 66.31c-13.97 0-25.32 11.23-25.32 25.05 0 5.358 1.71 10.31 4.611 14.38-2.693-3.981-4.26-8.777-4.26-13.94-1.2e-5 -13.78 11.19-24.97 24.97-24.97 13.78 0 24.94 11.19 24.94 24.97 0 5.166-1.57 9.962-4.26 13.94 2.897-4.071 4.611-9.024 4.611-14.38 0-13.83-11.32-25.05-25.29-25.05z" fill="url(#linearGradient5426)"/><path transform="matrix(.7026 0 0 .7026 -268.1 96.26)" d="m549.1-40.12c-19.12 1e-6 -34.66 15.53-34.66 34.66-1e-5 17.55 13.1 32.01 30.03 34.28-14.59-2.228-25.78-14.82-25.78-30.03 0-16.78 13.62-30.41 30.41-30.41 16.78 0 30.41 13.62 30.41 30.41 0 15.73-11.96 28.66-27.28 30.22 17.67-1.573 31.5-16.39 31.5-34.47 0-19.12-15.5-34.66-34.62-34.66zm3.125 69.12c-0.5108 0.05186-1.045 0.09875-1.562 0.125 0.5187-0.02306 1.05-0.07936 1.562-0.125zm-7.75-0.1875c0.5116 0.06861 1.013 0.1415 1.531 0.1875-0.5108-0.05186-1.028-0.1107-1.531-0.1875zm1.531 0.1875c0.5101 0.0453 1.015 0.1021 1.531 0.125-0.518-0.02625-1.02-0.07314-1.531-0.125z" clip-path="url(#clipPath3598)" fill="url(#radialGradient5428)" filter="url(#filter3594)"/><path transform="matrix(.7373 0 0 .6411 -217.9 103.7)" d="m469.6-34.83a14.1 17.53 0 0 1-14.1 17.53 14.1 17.53 0 0 1-14.1-17.53 14.1 17.53 0 0 1 14.1-17.53 14.1 17.53 0 0 1 14.1 17.53z" fill="url(#radialGradient5430)" filter="url(#filter3740)" opacity=".4062"/><path d="m119 70.84 0.1835 3.833c1.52 0.02728 3 0.1701 4.424 0.3949-0.2959-1.247-0.5883-2.494-0.8971-3.74-1.188-0.2692-2.428-0.4227-3.711-0.4878zm-2.814 0.02323c-1.232 0.09362-2.431 0.297-3.568 0.5807-0.3279 1.321-0.6454 2.648-0.9583 3.972 1.466-0.3296 2.997-0.5366 4.587-0.6504l0.1835-3.902c-0.08371 0.005414-0.1613-0.006338-0.2446 0zm8.767 1.115c0.3775 1.19 0.7499 2.382 1.121 3.577 2.68 0.6577 5.113 1.642 7.157 2.903-1.588-2.851-4.55-5.169-8.278-6.481zm-14.9 0.2787c-3.992 1.601-7.011 4.394-8.217 7.735 1.867-1.549 4.237-2.821 6.932-3.74 0.4258-1.331 0.8509-2.662 1.284-3.995zm9.195 3.693 0.2854 5.598c1.954 0.05081 3.862 0.2263 5.668 0.5575-0.4097-1.902-0.84-3.809-1.285-5.714-1.501-0.2525-3.06-0.4095-4.669-0.4413zm-3.058 0.06968c-1.689 0.1239-3.306 0.3999-4.853 0.7665-0.4422 1.904-0.8554 3.807-1.264 5.714 1.855-0.4471 3.808-0.7414 5.852-0.8827l0.2651-5.598zm10.32 0.9291c0.6039 1.958 1.208 3.933 1.794 5.9 2.189 0.6209 4.193 1.427 5.974 2.416 0.1484-0.6695 0.2243-1.343 0.2243-2.044 0-1.024-0.1769-1.998-0.4894-2.95-2.095-1.433-4.641-2.573-7.503-3.322zm-18.21 0.7201c-2.706 0.9796-5.068 2.328-6.891 3.949-0.0912 0.5263-0.1427 1.058-0.1427 1.603 0 0.9359 0.1432 1.84 0.4078 2.718 1.425-0.9021 3.025-1.694 4.771-2.346 0.6071-1.971 1.228-3.949 1.855-5.923z" fill="url(#radialGradient5432)" opacity=".5898"/></g></g></g></svg>
diff --git a/share/icons/svg/preferences-other.svg b/share/icons/svg/preferences-other.svg
deleted file mode 100644
index 41b0e6054..000000000
--- a/share/icons/svg/preferences-other.svg
+++ /dev/null
@@ -1,1012 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg5676"
- height="128"
- width="128">
- <defs
- id="defs5678">
- <filter
- id="filter4503">
- <feGaussianBlur
- id="feGaussianBlur4505"
- stdDeviation="0.43775175" />
- </filter>
- <clipPath
- id="clipPath4092"
- clipPathUnits="userSpaceOnUse">
- <path
- id="path4094"
- d="M 59.849,42.398 C 57.593,46.987 10.717,106.259 8.774,111.066 C 4.67,121.218 16.431,133.433 25.989,124.269 C 32.291,118.227 66.959,56.111 72.129,51.415 C 75.623,48.241 95.004,41.083 95.004,41.083 L 80.924,18.23 C 80.924,18.23 62.724,36.552 59.849,42.398 z"
- style="fill:#9c0f56" />
- </clipPath>
- <linearGradient
- y2="44.057598"
- x2="98.418404"
- y1="119.0576"
- x1="11.9185"
- gradientUnits="userSpaceOnUse"
- id="XMLID_3_">
- <stop
- id="stop49"
- style="stop-color:#C9C9C9"
- offset="0" />
- <stop
- id="stop51"
- style="stop-color:#B2B2B2"
- offset="0.0229" />
- <stop
- id="stop53"
- style="stop-color:#9F9F9F"
- offset="0.05" />
- <stop
- id="stop55"
- style="stop-color:#929292"
- offset="0.0819" />
- <stop
- id="stop57"
- style="stop-color:#8A8A8A"
- offset="0.1225" />
- <stop
- id="stop59"
- style="stop-color:#888888"
- offset="0.2012" />
- <stop
- id="stop63"
- style="stop-color:#686868;stop-opacity:1;"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="80.671898"
- x2="32.347698"
- y1="80.0439"
- x1="31.4995"
- gradientUnits="userSpaceOnUse"
- id="XMLID_11_">
- <stop
- id="stop183"
- style="stop-color:#000000"
- offset="0" />
- <stop
- id="stop185"
- style="stop-color:#000000;stop-opacity:0;"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="109.8655"
- x2="12.7283"
- y1="120.7646"
- x1="23.9844"
- gradientUnits="userSpaceOnUse"
- id="XMLID_10_">
- <stop
- id="stop176"
- style="stop-color:#EEEEEE"
- offset="0" />
- <stop
- id="stop178"
- style="stop-color:#535353;stop-opacity:1;"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="114.6055"
- x2="18.776899"
- y1="129.5986"
- x1="18.776899"
- gradientUnits="userSpaceOnUse"
- id="XMLID_9_">
- <stop
- id="stop169"
- style="stop-color:#000000"
- offset="0" />
- <stop
- id="stop171"
- style="stop-color:#000000;stop-opacity:0;"
- offset="1" />
- </linearGradient>
- <radialGradient
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- r="19.6182"
- cy="15.9429"
- cx="64.988297"
- id="XMLID_8_">
- <stop
- id="stop162"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop164"
- style="stop-color:#888A85"
- offset="1" />
- </radialGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="80.899803"
- x2="48.5495"
- y1="75.171898"
- x1="40.711899"
- gradientUnits="userSpaceOnUse"
- id="XMLID_7_">
- <stop
- id="stop155"
- style="stop-color:#555753"
- offset="0.213" />
- <stop
- id="stop157"
- style="stop-color:#000000"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="80.697304"
- x2="67.723602"
- y1="80.697304"
- x1="16.7803"
- gradientUnits="userSpaceOnUse"
- id="path30758_1_">
- <stop
- id="stop149"
- style="stop-color:#888888"
- offset="0" />
- <stop
- id="stop151"
- style="stop-color:#DDDDDD"
- offset="0.8935" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="25.928699"
- x2="93.023399"
- y1="39.3867"
- x1="93.023399"
- gradientUnits="userSpaceOnUse"
- id="path34280_1_">
- <stop
- id="stop141"
- style="stop-color:#555555"
- offset="0" />
- <stop
- id="stop143"
- style="stop-color:#888888"
- offset="0.3965" />
- <stop
- id="stop145"
- style="stop-color:#555555"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(0.9428,-0.2511,-0.2421,-0.9089,6.0921912,215.38258)"
- y2="-288.60791"
- x2="261.97269"
- y1="-288.60791"
- x1="247.60249"
- gradientUnits="userSpaceOnUse"
- id="rect22846_1_">
- <stop
- id="stop135"
- style="stop-color:#888888"
- offset="0" />
- <stop
- id="stop137"
- style="stop-color:#555555"
- offset="1" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.523,-0.2146,-2.627,-7.0521,27.4228,356.0237)"
- r="6.8733001"
- cy="36.065399"
- cx="274.56641"
- id="rect14944_1_">
- <stop
- id="stop127"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop129"
- style="stop-color:#FFFFFF"
- offset="0.6213" />
- <stop
- id="stop131"
- style="stop-color:#555753"
- offset="1" />
- </radialGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4892,-0.2059,-2.5913,-7.0931,29.692,361.6149)"
- r="6.8736"
- cy="36.069801"
- cx="290.8428"
- id="rect14938_1_">
- <stop
- id="stop119"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop121"
- style="stop-color:#FFFFFF"
- offset="0.6213" />
- <stop
- id="stop123"
- style="stop-color:#555753"
- offset="1" />
- </radialGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.498,-0.2212,-2.9368,-8.3284,56.2613,466.2682)"
- r="6.8727999"
- cy="43.388699"
- cx="292.49219"
- id="rect10553_1_">
- <stop
- id="stop111"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop113"
- style="stop-color:#FFFFFF"
- offset="0.6213" />
- <stop
- id="stop115"
- style="stop-color:#555753"
- offset="1" />
- </radialGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6131,-0.2916,-5.2659,-7.9645,125.0096,227.992)"
- r="4.1451998"
- cy="20.4307"
- cx="92.734398"
- id="rect14950_1_">
- <stop
- id="stop103"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop105"
- style="stop-color:#BABDB6"
- offset="0.5266" />
- <stop
- id="stop107"
- style="stop-color:#888A85"
- offset="1" />
- </radialGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- r="14.3205"
- cy="44.608398"
- cx="78.776398"
- id="rect10551_3_">
- <stop
- id="stop95"
- style="stop-color:#2E3436"
- offset="0" />
- <stop
- id="stop97"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0.72189999" />
- <stop
- id="stop99"
- style="stop-color:#2E3436"
- offset="1" />
- </radialGradient>
- <linearGradient
- y2="30.555201"
- x2="73.449203"
- y1="44.765598"
- x1="77.216797"
- gradientUnits="userSpaceOnUse"
- id="rect10551_1_">
- <stop
- id="stop89"
- style="stop-color:#DDDDDD"
- offset="0.7219" />
- <stop
- id="stop91"
- style="stop-color:#EEEEEC"
- offset="1" />
- </linearGradient>
- <radialGradient
- fy="13.140214"
- fx="77.004028"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- r="64.405701"
- cy="13.140214"
- cx="77.004028"
- id="XMLID_6_">
- <stop
- id="stop82"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- offset="0.5"
- style="stop-color:#c3c4c2;stop-opacity:1;"
- id="stop13256" />
- <stop
- id="stop84"
- style="stop-color:#000000;stop-opacity:1;"
- offset="1" />
- </radialGradient>
- <linearGradient
- gradientTransform="translate(-80,0)"
- y2="108.3428"
- x2="24.9356"
- y1="125.7861"
- x1="15.7207"
- gradientUnits="userSpaceOnUse"
- id="XMLID_5_">
- <stop
- id="stop75"
- style="stop-color:#000000"
- offset="0" />
- <stop
- id="stop77"
- style="stop-color:#FFFFFF"
- offset="0.8935" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(-80,0)"
- y2="64.646004"
- x2="52.981899"
- y1="55.75"
- x1="40.527802"
- gradientUnits="userSpaceOnUse"
- id="XMLID_4_">
- <stop
- id="stop68"
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="0" />
- <stop
- id="stop70"
- style="stop-color:#FFFFFF"
- offset="0.8935" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="-17.989599"
- x2="107.7549"
- y1="124.6768"
- x1="14.9214"
- gradientUnits="userSpaceOnUse"
- id="path2388_1_">
- <stop
- id="stop32"
- style="stop-color:#DDDDDD"
- offset="0" />
- <stop
- id="stop34"
- style="stop-color:#888888"
- offset="0.6864" />
- <stop
- id="stop36"
- style="stop-color:#DDDDDD"
- offset="0.8935" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(6.7917,-1.4855,-1.2014,-5.506,-845.12621,725.19548)"
- r="4.6967001"
- cy="4.7476001"
- cx="172.123"
- id="path5936_1_">
- <stop
- id="stop26"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop28"
- style="stop-color:#3E3E3E"
- offset="1" />
- </radialGradient>
- <linearGradient
- gradientTransform="translate(229.83849,405.96228)"
- y2="31.2349"
- x2="104.5325"
- y1="26.589399"
- x1="92.627899"
- gradientUnits="userSpaceOnUse"
- id="XMLID_1_">
- <stop
- id="stop19"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop21"
- style="stop-color:#888888"
- offset="0.6391" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(0.9065,-0.2414,-0.2421,-0.9089,10.723991,214.40698)"
- y2="-287.6532"
- x2="286.16019"
- y1="-326.0903"
- x1="258.88379"
- gradientUnits="userSpaceOnUse"
- id="rect25493_1_">
- <stop
- id="stop5"
- style="stop-color:#555555"
- offset="0" />
- <stop
- id="stop7"
- style="stop-color:#888888"
- offset="0.6864" />
- </linearGradient>
- <linearGradient
- y2="108.3428"
- x2="24.9356"
- y1="125.7861"
- x1="15.7207"
- gradientTransform="translate(-80,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10549"
- xlink:href="#XMLID_5_" />
- <mask
- id="mask10545"
- maskUnits="userSpaceOnUse">
- <path
- d="M -0.051,18.554 L -0.847,9.66 C -0.847,9.66 8.141,4.482 10.38,3.193 C 3.985,-0.79 -3.654,1.07 -3.741,1.093 C -10.903,2.996 -15.908,8.865 -15.908,15.222 C -15.908,15.461 -15.901,15.701 -15.887,15.94 C -15.887,15.941 -15.887,15.941 -15.887,15.942 C -15.887,16.299 -16.25,36.73 -19.253,42.838 C -20.334,45.036 -30.401,58.18 -42.058,73.4 C -54.195,89.247 -69.3,108.968 -70.298,111.44 C -70.839,112.778 -71.079,114.126 -71.079,115.435 C -71.079,119.221 -69.06,122.663 -66.483,124.621 C -66.083,123.92 -65.655,123.178 -65.197,122.392 C -67.02,121.101 -68.463,119.074 -68.895,116.783 C -69.291,114.687 -68.831,112.48 -67.631,110.726 C -66.46,109.013 -64.659,107.855 -62.561,107.463 C -60.935,107.16 -59.182,107.593 -57.621,108.682 C -57.428,108.817 -57.245,108.966 -57.063,109.118 C -46.315,92.233 -27.938,65.35 3.195,23.824 C 1.323,20.784 -0.051,18.554 -0.051,18.554 z"
- id="path10547"
- style="fill:url(#linearGradient10549)" />
- </mask>
- <linearGradient
- y2="-287.6532"
- x2="286.16019"
- y1="-326.0903"
- x1="258.88379"
- gradientTransform="matrix(0.9065,-0.2414,-0.2421,-0.9089,10.723991,214.40698)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11382"
- xlink:href="#rect25493_1_" />
- <linearGradient
- y2="31.2349"
- x2="104.5325"
- y1="26.589399"
- x1="92.627899"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11384"
- xlink:href="#XMLID_1_" />
- <radialGradient
- r="4.6967001"
- cy="4.7476001"
- cx="172.123"
- gradientTransform="matrix(6.7917,-1.4855,-1.2014,-5.506,-845.12621,725.19548)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11386"
- xlink:href="#path5936_1_" />
- <linearGradient
- y2="-17.989599"
- x2="107.7549"
- y1="124.6768"
- x1="14.9214"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11388"
- xlink:href="#path2388_1_" />
- <linearGradient
- y2="4.8821697"
- x2="92.612343"
- y1="14.124305"
- x1="77.040016"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11390"
- xlink:href="#XMLID_4_" />
- <linearGradient
- y2="64.646004"
- x2="52.981899"
- y1="55.75"
- x1="40.527802"
- gradientTransform="translate(-80,0)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11392"
- xlink:href="#XMLID_4_" />
- <radialGradient
- r="64.405701"
- fy="13.140214"
- fx="77.004028"
- cy="13.140214"
- cx="77.004028"
- gradientTransform="matrix(0.4337031,0.4442839,-0.7150071,0.6987259,282.84098,375.70944)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11394"
- xlink:href="#XMLID_6_" />
- <linearGradient
- y2="30.555201"
- x2="73.449203"
- y1="44.765598"
- x1="77.216797"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11396"
- xlink:href="#rect10551_1_" />
- <radialGradient
- r="14.3205"
- cy="44.608398"
- cx="78.776398"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11398"
- xlink:href="#rect10551_3_" />
- <radialGradient
- r="4.1451998"
- cy="20.4307"
- cx="92.734398"
- gradientTransform="matrix(0.6131,-0.2916,-5.2659,-7.9645,125.0096,227.992)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11400"
- xlink:href="#rect14950_1_" />
- <radialGradient
- r="6.8727999"
- cy="43.388699"
- cx="292.49219"
- gradientTransform="matrix(0.498,-0.2212,-2.9368,-8.3284,56.2613,466.2682)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11402"
- xlink:href="#rect10553_1_" />
- <radialGradient
- r="6.8736"
- cy="36.069801"
- cx="290.8428"
- gradientTransform="matrix(0.4892,-0.2059,-2.5913,-7.0931,29.692,361.6149)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11404"
- xlink:href="#rect14938_1_" />
- <radialGradient
- r="6.8733001"
- cy="36.065399"
- cx="274.56641"
- gradientTransform="matrix(0.523,-0.2146,-2.627,-7.0521,27.4228,356.0237)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11406"
- xlink:href="#rect14944_1_" />
- <linearGradient
- y2="-288.60791"
- x2="261.97269"
- y1="-288.60791"
- x1="247.60249"
- gradientTransform="matrix(0.9428,-0.2511,-0.2421,-0.9089,6.0921912,215.38258)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11408"
- xlink:href="#rect22846_1_" />
- <linearGradient
- y2="25.928699"
- x2="93.023399"
- y1="39.3867"
- x1="93.023399"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11410"
- xlink:href="#path34280_1_" />
- <linearGradient
- y2="80.697304"
- x2="67.723602"
- y1="80.697304"
- x1="16.7803"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11412"
- xlink:href="#path30758_1_" />
- <linearGradient
- y2="80.899803"
- x2="48.5495"
- y1="75.171898"
- x1="40.711899"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11414"
- xlink:href="#XMLID_7_" />
- <radialGradient
- r="19.6182"
- cy="15.9429"
- cx="64.988297"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11416"
- xlink:href="#XMLID_8_" />
- <linearGradient
- y2="114.6055"
- x2="18.776899"
- y1="129.5986"
- x1="18.776899"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11418"
- xlink:href="#XMLID_9_" />
- <linearGradient
- y2="107.20945"
- x2="18.875885"
- y1="123.23078"
- x1="17.509325"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11420"
- xlink:href="#XMLID_10_" />
- <linearGradient
- y2="80.671898"
- x2="32.347698"
- y1="80.0439"
- x1="31.4995"
- gradientTransform="translate(229.83849,405.96228)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11422"
- xlink:href="#XMLID_11_" />
- <linearGradient
- y2="44.057598"
- x2="98.418404"
- y1="119.0576"
- x1="11.9185"
- gradientUnits="userSpaceOnUse"
- id="linearGradient11424"
- xlink:href="#XMLID_3_" />
- <filter
- id="filter12490">
- <feGaussianBlur
- id="feGaussianBlur12492"
- stdDeviation="2.3509538" />
- </filter>
- <linearGradient
- xlink:href="#XMLID_27_"
- id="linearGradient2902"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(145.71379,-238.21429)"
- x1="60.0015"
- y1="86"
- x2="60.0015"
- y2="34.0005" />
- <linearGradient
- xlink:href="#XMLID_26_"
- id="linearGradient2900"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(145.71379,-238.21429)"
- x1="60.0015"
- y1="92"
- x2="60.0015"
- y2="28.0005" />
- <linearGradient
- xlink:href="#XMLID_25_"
- id="linearGradient2898"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(145.71379,-238.21429)"
- x1="60.0015"
- y1="94"
- x2="60.0015"
- y2="26.0005" />
- <linearGradient
- xlink:href="#XMLID_24_"
- id="linearGradient2896"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(145.71379,-238.21429)"
- x1="60.0005"
- y1="12.8452"
- x2="60.0005"
- y2="120.2141" />
- <radialGradient
- xlink:href="#XMLID_23_"
- id="radialGradient2894"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(145.71379,-238.21429)"
- cx="59.5107"
- cy="124"
- r="125.1714" />
- <filter
- id="filter2826">
- <feGaussianBlur
- stdDeviation="2.40001"
- id="feGaussianBlur2828" />
- </filter>
- <radialGradient
- id="XMLID_23_"
- cx="59.5107"
- cy="124"
- r="125.1714"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(145.71379,-238.21429)">
- <stop
- offset="0.1775"
- style="stop-color:#F0F0F0"
- id="stop9" />
- <stop
- offset="0.5325"
- style="stop-color:#A5A5BB"
- id="stop11" />
- </radialGradient>
- <linearGradient
- id="XMLID_24_"
- gradientUnits="userSpaceOnUse"
- x1="60.0005"
- y1="12.8452"
- x2="60.0005"
- y2="120.2141"
- gradientTransform="translate(145.71379,-238.21429)">
- <stop
- offset="0"
- style="stop-color:#FFFFFF"
- id="stop16" />
- <stop
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;"
- id="stop18" />
- </linearGradient>
- <linearGradient
- id="XMLID_25_"
- gradientUnits="userSpaceOnUse"
- x1="60.0015"
- y1="94"
- x2="60.0015"
- y2="26.0005"
- gradientTransform="translate(145.71379,-238.21429)">
- <stop
- offset="0.2959"
- style="stop-color:#FFFFFF"
- id="stop23" />
- <stop
- offset="1"
- style="stop-color:#4A4A55"
- id="stop25" />
- </linearGradient>
- <linearGradient
- id="XMLID_26_"
- gradientUnits="userSpaceOnUse"
- x1="60.0015"
- y1="92"
- x2="60.0015"
- y2="28.0005"
- gradientTransform="translate(145.71379,-238.21429)">
- <stop
- offset="0.1953"
- style="stop-color:#E9E9F0"
- id="stop30" />
- <stop
- offset="0.2597"
- style="stop-color:#DADAE2"
- id="stop32-0" />
- <stop
- offset="0.461"
- style="stop-color:#B1B1BB"
- id="stop34-6" />
- <stop
- offset="0.6437"
- style="stop-color:#93939F"
- id="stop36-1" />
- <stop
- offset="0.7999"
- style="stop-color:#81818E"
- id="stop38" />
- <stop
- offset="0.9112"
- style="stop-color:#7A7A88"
- id="stop40" />
- <stop
- offset="1"
- style="stop-color:#696975"
- id="stop42" />
- </linearGradient>
- <linearGradient
- id="XMLID_27_"
- gradientUnits="userSpaceOnUse"
- x1="60.0015"
- y1="86"
- x2="60.0015"
- y2="34.0005"
- gradientTransform="translate(145.71379,-238.21429)">
- <stop
- offset="0"
- style="stop-color:#BBBBBB"
- id="stop47" />
- <stop
- offset="1"
- style="stop-color:#555555"
- id="stop49-2" />
- </linearGradient>
- </defs>
- <metadata
- id="metadata5681">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- id="path11963"
- d="M 97.46875,6 C 97.18152,6.0094408 97.00831,6.0304757 97,6.03125 C 88.50154,6.7547259 81.81102,12.649899 80.96875,19.9375 C 80.96299,19.970198 76.86754,40.857308 72.875,46.3125 C 69.74177,50.594872 11.13376,102.7197 8.28125,107.28125 C 6.43475,110.23375 6.09196,113.64754 6.8125,116.75 C 6.81481,116.75995 6.81016,116.77131 6.8125,116.78125 C 7.27817,118.76618 8.16525,120.60725 9.40625,122.125 C 9.47154,122.20534 9.55786,122.26531 9.625,122.34375 C 9.73846,122.47566 9.85017,122.62373 9.96875,122.75 C 10.13123,122.9234 10.29696,123.08786 10.46875,123.25 C 10.78531,123.54834 11.12253,123.83716 11.46875,124.09375 C 11.51009,124.12442 11.55201,124.15746 11.59375,124.1875 C 11.75577,124.30387 11.92581,124.39345 12.09375,124.5 C 12.34901,124.66192 12.60676,124.83089 12.875,124.96875 C 12.90463,124.98396 12.93897,124.98509 12.96875,125 C 13.16389,125.09785 13.36099,125.19684 13.5625,125.28125 C 13.66656,125.32459 13.76932,125.36661 13.875,125.40625 C 13.96058,125.43847 14.03838,125.47026 14.125,125.5 C 14.26755,125.5489 14.41722,125.58297 14.5625,125.625 C 15.11282,125.78408 15.69527,125.91534 16.28125,125.96875 C 16.62585,125.99943 16.98844,126.00883 17.34375,126 C 17.49276,125.99631 17.6305,125.97967 17.78125,125.96875 C 18.30718,125.93117 18.83023,125.84877 19.375,125.71875 C 19.49773,125.68971 19.62642,125.65895 19.75,125.625 C 19.94658,125.5707 20.14518,125.50448 20.34375,125.4375 C 20.68974,125.32116 21.02361,125.18743 21.375,125.03125 C 21.51637,124.96837 21.67036,124.91327 21.8125,124.84375 C 22.01661,124.74364 22.23195,124.64533 22.4375,124.53125 C 22.50876,124.4917 22.58484,124.44751 22.65625,124.40625 C 22.93651,124.24411 23.21755,124.06393 23.5,123.875 C 23.72992,123.72139 24.01123,123.49888 24.3125,123.25 C 24.51715,123.08053 24.76474,122.86659 25,122.65625 C 25.31217,122.37641 25.73134,121.97195 26.09375,121.625 C 26.40496,121.32709 26.7476,121.00087 27.09375,120.65625 C 27.10095,120.64393 27.11785,120.63734 27.125,120.625 C 40.39609,107.39872 78.3196,61.213642 83.8125,57.75 C 87.95646,55.136652 109.0625,51.3125 109.0625,51.3125 C 113.21925,49.41573 118.90506,43.445638 121.3125,34.4375 C 121.72869,32.077134 121.4811,29.596922 121.375,30.03125 L 108.59375,35.78125 L 100.21875,29.0625 L 98.78125,25.40625 L 99.28125,19.21875 L 113.34375,13.96875 L 113.125,12.15625 C 107.67312,6.0868239 99.47934,5.9339145 97.46875,6 z M 17.8125,106.1875 C 21.2472,106.15572 24.40096,109.89596 24.375,114.15625 C 24.3535,117.67982 20.93573,121.18715 17.5,121.21875 C 14.06408,121.25138 10.73518,117.39784 10.6875,113.53125 C 10.68465,113.29896 10.66822,113.04283 10.6875,112.8125 C 10.70682,112.58223 10.74047,112.35167 10.78125,112.125 C 10.90349,111.44483 11.13404,110.80542 11.4375,110.1875 C 11.53867,109.98155 11.63003,109.78948 11.75,109.59375 C 12.94961,107.63625 15.09816,106.21329 17.8125,106.1875 z"
- style="fill:#000000;fill-opacity:1;filter:url(#filter12490);opacity:0.8" />
- <g
- transform="matrix(1.0223499,0.1802679,-0.1801715,1.0218034,-142.50883,-466.04399)"
- id="g11357">
- <path
- id="rect25493"
- d="M 322.52649,444.25728 C 326.15949,443.01428 332.35849,434.45128 332.98149,424.78428 C 333.00949,424.35428 333.65649,426.67828 333.65649,428.98828 C 332.87949,437.94128 328.47049,444.55028 324.84449,447.04628 L 322.52649,444.25728 z"
- style="fill:url(#linearGradient11382)" />
- <path
- id="path3285"
- d="M 332.98149,424.78428 L 321.82849,432.38828 L 312.74849,427.41628 C 312.08149,428.88428 315.95449,447.98028 320.22749,446.96228 C 328.04849,445.09828 332.16349,435.78528 332.98149,424.78428 z"
- style="fill:#888a85" />
- <path
- enable-background="new "
- d="M 322.07549,432.68428 L 323.06949,441.37828 L 324.97749,444.59028 C 326.91449,443.03428 328.49449,440.87628 329.72849,438.28428 C 331.33649,434.63428 332.30349,430.21428 332.65649,425.47228 L 322.07549,432.68428 z"
- id="path23"
- style="fill:url(#linearGradient11384)" />
- <path
- id="path5936"
- enable-background="new "
- d="M 313.59749,428.19228 C 313.59449,428.19728 313.57749,428.21928 313.57649,428.22628 C 313.57149,428.23928 313.56449,428.27228 313.56049,428.28828 C 313.04649,430.36728 316.00549,448.15728 320.19449,447.15928 C 321.12049,446.93828 322.00949,446.60928 322.83249,446.18928 L 320.58049,431.94628 L 313.59749,428.19228 z"
- style="opacity:0.51380005;fill:url(#radialGradient11386)" />
- <path
- id="path2388"
- d="M 305.84149,406.08928 C 297.90049,408.19828 292.53349,414.90528 292.95349,421.96328 C 292.95349,421.99528 292.56249,442.51428 289.68749,448.36028 C 287.43149,452.94928 240.55549,512.22128 238.61249,517.02828 C 234.50849,527.18028 246.26949,539.39528 255.82749,530.23128 C 262.12949,524.18928 296.79749,462.07328 301.96749,457.37728 C 305.46149,454.20328 324.84249,447.04528 324.84249,447.04528 L 310.76249,424.19228 L 310.04449,416.17028 L 322.15949,409.19128 C 315.08849,403.65028 305.90349,406.07228 305.84149,406.08928 z M 247.46049,514.40928 C 250.71349,513.80428 254.33749,516.82428 255.02549,520.87228 C 255.59449,524.22028 252.93349,528.13028 249.67949,528.73528 C 246.42549,529.34128 242.61749,526.22128 241.92549,522.55928 C 241.26149,519.04028 243.34849,515.17628 247.46049,514.40928 z"
- style="fill:url(#linearGradient11388)" />
- <path
- d="M -0.051,18.554 L -0.847,9.66 C -0.847,9.66 8.141,4.482 10.38,3.193 C 3.985,-0.79 -3.654,1.07 -3.741,1.093 C -10.903,2.996 -15.908,8.865 -15.908,15.222 C -15.908,15.461 -15.901,15.701 -15.887,15.94 C -15.887,15.941 -15.887,15.941 -15.887,15.942 C -15.887,16.299 -16.25,36.73 -19.253,42.838 C -20.334,45.036 -30.401,58.18 -42.058,73.4 C -54.195,89.247 -69.3,108.968 -70.298,111.44 C -70.839,112.778 -71.079,114.126 -71.079,115.435 C -71.079,119.221 -69.06,122.663 -66.483,124.621 C -66.083,123.92 -65.655,123.178 -65.197,122.392 C -67.02,121.101 -68.463,119.074 -68.895,116.783 C -69.291,114.687 -68.831,112.48 -67.631,110.726 C -66.46,109.013 -64.659,107.855 -62.561,107.463 C -60.935,107.16 -59.182,107.593 -57.621,108.682 C -57.428,108.817 -57.245,108.966 -57.063,109.118 C -46.315,92.233 -27.938,65.35 3.195,23.824 C 1.323,20.784 -0.051,18.554 -0.051,18.554 z"
- id="path72"
- style="fill:url(#linearGradient11392)"
- mask="url(#mask10545)"
- transform="translate(309.83849,405.96228)" />
- <path
- d="M 310.76249,424.19228 L 310.04449,416.17028 L 322.15949,409.19128 C 320.21949,407.64028 317.84449,406.51628 315.23549,405.92928 C 312.04649,405.90828 308.79349,406.38428 306.47749,407.16528 C 298.74149,409.77428 294.69849,415.49528 294.85149,422.31128 L 303.63249,437.15128 L 306.31749,435.47228 L 312.56749,446.29728 L 310.37649,447.80128 L 313.73849,451.42828 L 324.84249,447.04628 L 310.76249,424.19228 z"
- id="path86"
- style="fill:url(#radialGradient11394)" />
- <polygon
- id="rect10551_2_"
- points="65.82,36.446 76.487,27.791 85.179,40.128 72.511,46.783 65.82,36.446 "
- style="fill:url(#linearGradient11396)"
- transform="translate(229.83849,405.96228)" />
- <polygon
- id="rect10551"
- points="65.82,36.446 76.487,29.791 83.179,40.128 72.511,46.783 65.82,36.446 "
- style="fill:url(#radialGradient11398)"
- transform="translate(229.83849,405.96228)" />
- <polygon
- id="rect14950"
- points="68.311,35.653 74.616,32.078 80.237,40.809 73.932,44.384 68.311,35.653 "
- style="fill:url(#radialGradient11400)"
- transform="translate(229.83849,405.96228)" />
- <polygon
- id="rect10553"
- points="67.891,36.615 77.497,32.233 77.891,33.323 68.284,37.705 67.891,36.615 "
- style="fill:url(#radialGradient11402)"
- transform="translate(229.83849,405.96228)" />
- <polygon
- id="rect14938"
- points="72.212,42.972 81.653,38.899 82.001,39.827 72.56,43.9 72.212,42.972 "
- style="fill:url(#radialGradient11404)"
- transform="translate(229.83849,405.96228)" />
- <polygon
- id="rect14944"
- points="69.661,39.991 79.757,35.751 80.11,36.673 70.015,40.914 69.661,39.991 "
- style="fill:url(#radialGradient11406)"
- transform="translate(229.83849,405.96228)" />
- <path
- id="path34280"
- d="M 320.80249,431.89128 C 320.76149,432.16128 322.10049,439.91928 322.18149,440.18928 C 322.85449,444.45728 323.83149,444.59528 324.03549,445.34928 C 324.76349,444.93528 324.29249,445.39528 324.92349,444.84628 C 324.80849,444.48028 323.48549,441.99528 322.95849,441.11128 C 322.71249,438.97728 321.93149,433.00328 321.86449,432.43528 C 321.45549,432.21328 321.29849,432.12528 320.80249,431.89128 z"
- style="fill:url(#linearGradient11410)" />
- <path
- id="path30758"
- d="M 246.62049,511.92528 C 251.42949,510.02428 257.88249,515.30428 257.53849,521.11028 C 260.82449,517.31028 296.88449,460.33528 297.44649,457.74428 C 298.30649,453.77728 294.17949,450.82228 290.89849,452.88728 C 288.60949,454.32628 246.30749,512.04828 246.62049,511.92528 z"
- style="fill:url(#linearGradient11412)" />
- <path
- d="M 292.02849,454.56028 C 289.53249,456.91828 266.85449,487.60628 250.66249,509.77928 C 252.02149,510.08228 253.37949,510.67028 254.63749,511.58128 C 256.37949,512.84228 257.66849,514.51428 258.50849,516.33428 C 267.27449,503.42428 294.06749,460.80328 295.50149,457.24628 C 295.53749,457.05828 295.56249,456.87128 295.56249,456.69028 C 295.56249,455.85828 295.18949,455.11828 294.50449,454.63828 C 293.74349,454.10528 292.82549,454.08928 292.02849,454.56028 z"
- id="path159"
- style="fill:url(#linearGradient11414);stroke:#000000" />
- <path
- d="M 294.94349,422.46628 C 294.86849,425.66728 294.31649,443.48028 291.48249,449.24328 C 291.40649,449.39728 291.28449,449.60828 291.13649,449.84928 C 291.56049,449.26728 291.86549,448.81828 292.01449,448.54228 C 294.75749,443.48028 297.55549,430.48328 297.76449,427.23428 L 294.94349,422.46628 z"
- id="path166"
- style="fill:url(#radialGradient11416)" />
- <path
- d="M 258.69149,526.59428 C 259.24949,525.08628 259.45349,523.49328 259.17549,521.97428 C 258.59949,518.81928 256.61749,515.87328 253.87449,514.09028 C 251.69549,512.67428 249.24349,512.11128 246.97049,512.50528 C 244.03849,513.01528 241.52249,514.52228 239.88549,516.74928 C 238.45149,518.70028 237.78049,521.08528 237.96049,523.44028 C 239.33149,531.34628 248.26549,537.48228 255.82849,530.23128 C 256.49049,529.59728 257.46949,528.33628 258.69149,526.59428 z M 249.67949,528.73528 C 246.42549,529.34128 242.61749,526.22128 241.92549,522.55928 C 241.26049,519.03928 243.34749,515.17528 247.46049,514.40928 C 250.71349,513.80428 254.33749,516.82428 255.02549,520.87228 C 255.59449,524.22028 252.93349,528.13028 249.67949,528.73528 z"
- id="path173"
- style="opacity:0.5;fill:url(#linearGradient11418)" />
- <path
- d="M 256.01149,520.70428 C 255.59949,518.27928 254.18149,516.01528 252.21849,514.64428 C 250.65849,513.55528 248.90449,513.12328 247.27849,513.42528 C 245.18049,513.81728 243.38049,514.97528 242.20849,516.68828 C 241.00949,518.44128 240.54849,520.64928 240.94449,522.74528 C 241.75449,527.03328 246.08849,530.42228 249.86349,529.71928 C 253.62049,529.02028 256.66649,524.55528 256.01149,520.70428 z M 249.67949,528.73528 C 246.42549,529.34128 242.61749,526.22128 241.92549,522.55928 C 241.26049,519.03928 243.34749,515.17528 247.46049,514.40928 C 250.71349,513.80428 254.33749,516.82428 255.02549,520.87228 C 255.59449,524.22028 252.93349,528.13028 249.67949,528.73528 z"
- id="path180"
- style="fill:url(#linearGradient11420)" />
- <path
- d="M 285.39049,455.48028 C 285.64549,454.95828 285.88049,454.31028 286.09549,453.56728 C 274.64749,469.16528 240.27149,512.92628 238.61349,517.02828 C 238.29049,517.82728 238.07649,518.63728 237.94149,519.45128 C 242.96749,511.10428 283.36449,459.62828 285.39049,455.48028 z"
- id="path187"
- style="opacity:0.4;fill:url(#linearGradient11422)" />
- <path
- d="M 72.13,49.416 C 66.96,54.112 32.292,116.228 25.99,122.27 C 18.09,129.844 8.695,122.813 7.986,114.414 C 7.207,123.618 17.468,132.44 25.99,124.27 C 32.292,118.228 66.96,56.112 72.13,51.416 C 75.624,48.242 95.005,41.084 95.005,41.084 L 94.004,39.459 C 90.005,40.965 75.147,46.674 72.13,49.416 z"
- id="path65"
- style="fill:url(#linearGradient11424);filter:url(#filter4503)"
- clip-path="url(#clipPath4092)"
- transform="translate(229.83849,405.96228)" />
- <path
- id="rect22846"
- d="M 310.04449,416.17028 L 322.15949,409.19128 L 322.67749,410.88528 L 310.13349,418.26728 L 310.04449,416.17028 z"
- style="fill:url(#linearGradient11408)" />
- <path
- d="M 310.21449,416.07228 L 322.15949,409.19128 C 321.63949,408.78428 321.10749,408.43228 320.56949,408.10728 L 310.04449,414.17028 L 310.21449,416.07228 z"
- id="path46"
- style="fill:url(#linearGradient11390);fill-opacity:1" />
- </g>
- <g
- transform="matrix(0.51338217,0,0,0.51338217,63.14352,62.630159)"
- id="layer1-5">
- <g
- id="g2876"
- transform="matrix(0.9999917,0,0,1,-141.71258,242.21429)">
- <path
- style="filter:url(#filter2826)"
- id="path6"
- d="m 265.71479,-171.21229 0,-12.002 -12.439,-0.415 c -0.552,-4.127 -1.622,-8.089 -3.153,-11.816 l 10.555,-6.572 -6,-10.394 -10.981,5.861 c -2.503,-3.236 -5.408,-6.142 -8.645,-8.645 l 5.861,-10.981 -10.393,-5.999 -6.572,10.555 c -3.728,-1.532 -7.689,-2.603 -11.817,-3.155 l -0.416,-12.439 -12,0 -0.415,12.439 c -4.128,0.552 -8.09,1.623 -11.817,3.154 l -6.572,-10.554 -10.393,6 5.861,10.981 c -3.236,2.503 -6.142,5.409 -8.646,8.646 l -10.981,-5.861 -6,10.392 10.556,6.573 c -1.532,3.727 -2.603,7.689 -3.154,11.817 l -12.439,0.413 -0.001,12 12.44,0.415 c 0.552,4.128 1.623,8.09 3.154,11.817 l -10.555,6.573 5.999,10.393 10.983,-5.862 c 2.503,3.236 5.409,6.143 8.646,8.646 l -5.862,10.982 10.392,6 6.573,-10.557 c 3.727,1.531 7.689,2.603 11.817,3.154 l 0.414,12.439 12,0 0.415,-12.439 c 4.128,-0.552 8.09,-1.622 11.816,-3.154 l 6.572,10.556 10.393,-6 -5.861,-10.983 c 3.235,-2.503 6.142,-5.409 8.645,-8.645 l 10.981,5.861 6.001,-10.393 -10.556,-6.572 c 1.531,-3.727 2.603,-7.688 3.154,-11.816 l 12.44,-0.413 z m -60,23.998 c -16.542,0 -30,-13.458 -30,-30 0,-16.542 13.458,-30 30,-30 16.542,0 30,13.458 30,30 0,16.542 -13.458,30 -30,30 z" />
- <path
- style="fill:url(#radialGradient2894)"
- id="path13"
- d="m 265.71479,-172.21229 0,-12.002 -12.439,-0.415 c -0.552,-4.127 -1.622,-8.089 -3.153,-11.816 l 10.555,-6.572 -6,-10.394 -10.981,5.861 c -2.503,-3.236 -5.408,-6.142 -8.645,-8.645 l 5.861,-10.981 -10.393,-5.999 -6.572,10.555 c -3.728,-1.532 -7.689,-2.603 -11.817,-3.155 l -0.416,-12.439 -12,0 -0.415,12.439 c -4.128,0.552 -8.09,1.623 -11.817,3.154 l -6.572,-10.554 -10.393,6 5.861,10.981 c -3.236,2.503 -6.142,5.409 -8.646,8.646 l -10.981,-5.861 -6,10.392 10.556,6.573 c -1.532,3.727 -2.603,7.689 -3.154,11.817 l -12.439,0.413 -0.001,12 12.44,0.415 c 0.552,4.128 1.623,8.09 3.154,11.817 l -10.555,6.573 5.999,10.393 10.983,-5.862 c 2.503,3.236 5.409,6.143 8.646,8.646 l -5.862,10.982 10.392,6 6.573,-10.557 c 3.727,1.531 7.689,2.603 11.817,3.154 l 0.414,12.439 12,0 0.415,-12.439 c 4.128,-0.552 8.09,-1.622 11.816,-3.154 l 6.572,10.556 10.393,-6 -5.861,-10.983 c 3.235,-2.503 6.142,-5.409 8.645,-8.645 l 10.981,5.861 6.001,-10.393 -10.556,-6.572 c 1.531,-3.727 2.603,-7.688 3.154,-11.816 l 12.44,-0.413 z m -60,23.998 c -16.542,0 -30,-13.458 -30,-30 0,-16.542 13.458,-30 30,-30 16.542,0 30,13.458 30,30 0,16.542 -13.458,30 -30,30 z" />
- <path
- style="fill:url(#linearGradient2896)"
- id="path20"
- d="m 200.68179,-237.21429 c -0.055,1.645 -0.382,11.473 -0.382,11.473 -0.016,0.488 -0.383,0.893 -0.867,0.958 -3.989,0.533 -7.881,1.572 -11.569,3.088 -0.452,0.186 -0.972,0.018 -1.229,-0.396 0,0 -5.191,-8.338 -6.061,-9.734 -1.292,0.746 -7.425,4.287 -8.717,5.033 0.775,1.452 5.406,10.128 5.406,10.128 0.08,0.149 0.118,0.311 0.118,0.47 0,0.301 -0.136,0.597 -0.388,0.792 -3.167,2.45 -6.016,5.299 -8.466,8.466 -0.298,0.386 -0.832,0.5 -1.262,0.271 0,0 -8.677,-4.631 -10.128,-5.406 -0.746,1.292 -4.287,7.425 -5.033,8.717 1.396,0.87 9.734,6.061 9.734,6.061 0.301,0.188 0.472,0.513 0.472,0.85 0,0.127 -0.024,0.256 -0.075,0.38 -1.517,3.689 -2.556,7.582 -3.088,11.569 -0.064,0.484 -0.47,0.851 -0.958,0.867 0,0 -9.828,0.328 -11.473,0.382 0,0.994 0,2.289 0,3.171 8.88,1.789 18.332,3.162 28.128,4.095 -0.06,-1.024 -0.129,-2.235 -0.129,-2.235 0,-17.093 13.907,-31 31,-31 17.094,0 31,13.907 31,31 0,0 -0.07,1.223 -0.129,2.251 9.789,-0.925 19.24,-2.292 28.129,-4.074 0,-0.887 0,-2.208 0,-3.209 -1.645,-0.055 -11.473,-0.382 -11.473,-0.382 -0.488,-0.016 -0.894,-0.383 -0.958,-0.867 -0.533,-3.988 -1.572,-7.88 -3.087,-11.568 -0.051,-0.124 -0.075,-0.252 -0.075,-0.379 0,-0.337 0.171,-0.662 0.472,-0.85 0,0 8.337,-5.191 9.733,-6.061 -0.746,-1.292 -4.287,-7.426 -5.033,-8.718 -1.451,0.774 -10.128,5.406 -10.128,5.406 -0.43,0.229 -0.963,0.115 -1.262,-0.271 -2.45,-3.168 -5.299,-6.017 -8.465,-8.466 -0.253,-0.195 -0.389,-0.49 -0.389,-0.792 0,-0.16 0.038,-0.321 0.118,-0.47 0,0 4.631,-8.676 5.405,-10.128 -1.292,-0.746 -7.425,-4.288 -8.717,-5.034 -0.87,1.396 -6.062,9.734 -6.062,9.734 -0.258,0.414 -0.777,0.582 -1.229,0.396 -3.689,-1.516 -7.582,-2.555 -11.57,-3.088 -0.483,-0.065 -0.851,-0.47 -0.866,-0.958 0,0 -0.328,-9.828 -0.383,-11.473 -1.49,0.001 -8.572,0.001 -10.064,0.001 z" />
- <path
- style="fill:url(#linearGradient2898)"
- id="path27"
- d="m 205.71479,-212.21429 c -18.777,0 -34,15.223 -34,34 0,18.778 15.223,34 34,34 18.778,0 34,-15.222 34,-34 0,-18.777 -15.222,-34 -34,-34 z m 0,59 c -13.785,0 -25,-11.215 -25,-25 0,-13.785 11.215,-25 25,-25 13.785,0 25,11.215 25,25 0,13.785 -11.215,25 -25,25 z" />
- <path
- style="fill:url(#linearGradient2900)"
- id="path44"
- d="m 205.71479,-210.21429 c -17.645,0 -32,14.355 -32,32 0,17.645 14.355,32 32,32 17.645,0 32,-14.355 32,-32 0,-17.645 -14.355,-32 -32,-32 z m 0,57 c -13.785,0 -25,-11.215 -25,-25 0,-13.785 11.215,-25 25,-25 13.785,0 25,11.215 25,25 0,13.785 -11.215,25 -25,25 z" />
- <path
- style="fill:url(#linearGradient2902)"
- id="path51"
- d="m 205.71479,-204.21429 c -14.336,0 -26,11.664 -26,26 0,14.337 11.664,26 26,26 14.337,0 26,-11.663 26,-26 0,-14.336 -11.663,-26 -26,-26 z m 0,50 c -13.233,0 -24,-10.767 -24,-24 0,-13.233 10.767,-24 24,-24 13.233,0 24,10.767 24,24 0,13.233 -10.767,24 -24,24 z" />
- <path
- style="fill:#ffffff"
- id="path53"
- d="m 161.00579,-159.79329 -10.253,6.384 0.425,0.735 10.131,-6.308 c -0.11,-0.266 -0.199,-0.543 -0.303,-0.811 z" />
- <path
- style="fill:#ffffff"
- id="path55"
- d="m 180.91079,-232.17529 6.572,10.555 c 3.727,-1.532 7.689,-2.603 11.817,-3.154 l 0.415,-12.44 12,0 0.415,12.439 c 4.128,0.552 8.09,1.623 11.817,3.155 l 6.572,-10.555 9.984,5.766 0.408,-0.765 -10.391,-6.001 -6.572,10.555 c -3.728,-1.532 -7.689,-2.603 -11.817,-3.155 l -0.416,-12.439 -12,0 -0.415,12.439 c -4.128,0.552 -8.09,1.623 -11.817,3.154 l -6.572,-10.554 -10.393,6 0.408,0.765 9.985,-5.765 z" />
- <path
- style="fill:#ffffff"
- id="path57"
- d="m 235.42079,-215.88729 -0.37,0.694 c 3.236,2.503 6.142,5.409 8.645,8.645 l 10.981,-5.861 5.575,9.658 0.425,-0.265 -6,-10.394 -10.981,5.861 c -2.406,-3.108 -5.19,-5.903 -8.275,-8.338 z" />
- <path
- style="fill:#ffffff"
- id="path59"
- d="m 176.00979,-139.53929 -5.491,10.288 0.408,0.235 5.454,-10.218 c -0.127,-0.097 -0.245,-0.207 -0.371,-0.305 z" />
- <path
- style="opacity:0.5;fill:#ffffff"
- id="path61"
- d="m 249.69579,-176.83029 c -0.394,23.923 -19.966,43.267 -43.981,43.267 -24.016,0 -43.587,-19.344 -43.981,-43.267 -0.004,0.244 -0.019,0.487 -0.019,0.732 0,24.262 19.738,44 44,44 24.262,0 44,-19.738 44,-44 0,-0.245 -0.015,-0.488 -0.019,-0.732 z" />
- <path
- style="fill:#ffffff"
- id="path63"
- d="m 253.27579,-184.62829 c -0.513,-3.833 -1.489,-7.514 -2.85,-11.005 l -0.304,0.189 c 1.531,3.727 2.602,7.688 3.153,11.816 l 12.44,0.414 0,-1 -12.439,-0.414 z" />
- <path
- style="fill:#ffffff"
- id="path65-4"
- d="m 250.12079,-158.98229 10.131,6.308 0.425,-0.735 -10.252,-6.384 c -0.106,0.268 -0.194,0.545 -0.304,0.811 z" />
- <path
- style="fill:#ffffff"
- id="path67"
- d="m 156.75279,-212.41029 10.981,5.861 c 2.503,-3.236 5.409,-6.142 8.646,-8.646 l -0.371,-0.694 c -3.084,2.435 -5.87,5.23 -8.275,8.339 l -10.981,-5.861 -6,10.392 0.425,0.265 5.575,-9.656 z" />
- <path
- style="fill:#ffffff"
- id="path69"
- d="m 235.04979,-139.23429 5.453,10.217 0.408,-0.235 -5.491,-10.287 c -0.125,0.098 -0.243,0.208 -0.37,0.305 z" />
- <path
- style="fill:#ffffff"
- id="path71"
- d="m 145.71479,-183.21429 12.439,-0.415 c 0.551,-4.128 1.623,-8.09 3.154,-11.817 l -0.303,-0.189 c -1.361,3.491 -2.339,7.173 -2.851,11.006 l -12.439,0.415 -0.001,12 0,0 0.001,-11 z" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/share/icons/svg/security-high.svg b/share/icons/svg/security-high.svg
deleted file mode 100644
index d5c23d1e8..000000000
--- a/share/icons/svg/security-high.svg
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2"
- height="128"
- width="128">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient3549">
- <stop
- id="stop3551"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3553"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3425">
- <stop
- id="stop3427"
- offset="0"
- style="stop-color:#004d00;stop-opacity:1;" />
- <stop
- id="stop3429"
- offset="1"
- style="stop-color:#004d00;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3342">
- <stop
- id="stop3344"
- offset="0"
- style="stop-color:#00ff00;stop-opacity:1;" />
- <stop
- id="stop3346"
- offset="1"
- style="stop-color:#00ff00;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3328">
- <stop
- id="stop3330"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3332"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3315">
- <stop
- id="stop3317"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3319"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3298">
- <stop
- id="stop3300"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3302"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3194">
- <stop
- id="stop3196"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3198"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3162">
- <stop
- id="stop3164"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3166"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3149">
- <stop
- id="stop3151"
- offset="0"
- style="stop-color:#00bf00;stop-opacity:1;" />
- <stop
- id="stop3153"
- offset="1"
- style="stop-color:#004d00;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3137">
- <stop
- id="stop3139"
- offset="0"
- style="stop-color:#eeeeee;stop-opacity:1;" />
- <stop
- id="stop3141"
- offset="1"
- style="stop-color:#babdb6;stop-opacity:1" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.852937,0,0,1.8124371,9.412035,-51.995978)"
- r="44"
- fy="64"
- fx="64"
- cy="64"
- cx="64"
- id="radialGradient3143"
- xlink:href="#linearGradient3137" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2978099,0,0,2.5457098,-19.059837,-81.93666)"
- r="36"
- fy="47.808315"
- fx="63.844189"
- cy="52.322273"
- cx="64"
- id="radialGradient3155"
- xlink:href="#linearGradient3149" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="60.543098"
- x2="65.131119"
- y1="9.5732002"
- x1="65.131119"
- id="linearGradient3168"
- xlink:href="#linearGradient3162" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="64.004425"
- x2="59.34045"
- y1="75.121643"
- x1="99.873619"
- id="linearGradient3200"
- xlink:href="#linearGradient3194" />
- <clipPath
- id="clipPath3206"
- clipPathUnits="userSpaceOnUse">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 57.659091,25.932002 C 49.908853,33.678878 33.667605,40.58867 28,42.164006 C 28,66.496955 44.32661,103.27273 64,103.27273 C 83.629515,103.27273 100,66.496955 100,42.164006 C 94.332396,40.58867 78.091147,33.678878 70.340909,25.932002 C 68.14204,24.325219 59.858047,24.326175 57.659091,25.932002 z "
- id="path3208" />
- </clipPath>
- <filter
- id="filter3294"
- height="1.2277228"
- y="-0.11386138"
- width="1.2484248"
- x="-0.12421242">
- <feGaussianBlur
- id="feGaussianBlur3296"
- stdDeviation="3.7263727" />
- </filter>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="85"
- x2="64"
- y1="24.727274"
- x1="64"
- id="linearGradient3304"
- xlink:href="#linearGradient3298" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="35.046722"
- x2="66.21801"
- y1="111.9475"
- x1="66.21801"
- id="linearGradient3321"
- xlink:href="#linearGradient3315" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="34.035549"
- x2="65.497627"
- y1="17.6523"
- x1="65.497627"
- id="linearGradient3334"
- xlink:href="#linearGradient3328" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.0909091,0,-5.8181848)"
- r="24.06951"
- fy="73.4534"
- fx="63.595577"
- cy="64.000002"
- cx="64"
- id="radialGradient3348"
- xlink:href="#linearGradient3342" />
- <filter
- id="filter3378"
- height="1.330198"
- y="-0.16509901"
- width="1.360216"
- x="-0.18010801">
- <feGaussianBlur
- id="feGaussianBlur3380"
- stdDeviation="3.612593" />
- </filter>
- <foreignObject
- id="foreignObject7"
- height="1"
- width="1"
- y="0"
- x="0"
- requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
- <i:pgfRef
- xlink:href="#adobe_illustrator_pgf" />
- </foreignObject>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.538858,0,0,1.1842271,53.885815,-3.8687691)"
- r="25"
- fy="33.064209"
- fx="-100.00002"
- cy="21"
- cx="-100.00002"
- id="radialGradient3431"
- xlink:href="#linearGradient3425" />
- <filter
- id="filter3449">
- <feGaussianBlur
- id="feGaussianBlur3451"
- stdDeviation="0.885" />
- </filter>
- <linearGradient
- y2="60.543098"
- x2="65.131119"
- y1="9.5732002"
- x1="65.131119"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3492"
- xlink:href="#linearGradient3162" />
- <filter
- id="filter3521">
- <feGaussianBlur
- id="feGaussianBlur3523"
- stdDeviation="1.92" />
- </filter>
- <clipPath
- id="clipPath3529"
- clipPathUnits="userSpaceOnUse">
- <path
- id="path3531"
- d="M 56.25,17.472446 C 46.777487,26.94085 26.927072,35.386153 20,37.311562 C 20,67.051834 39.954744,112 64,112 C 87.99163,112 108,67.051834 108,37.311562 C 101.07293,35.386153 81.222513,26.94085 71.75,17.472446 C 69.062493,15.508601 58.937612,15.509769 56.25,17.472446 z "
- style="opacity:0.36138617;fill:url(#linearGradient3533);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </clipPath>
- <linearGradient
- y2="64.004425"
- x2="59.34045"
- y1="75.121643"
- x1="99.873619"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3533"
- xlink:href="#linearGradient3194" />
- <filter
- id="filter3543">
- <feGaussianBlur
- id="feGaussianBlur3545"
- stdDeviation="1.38" />
- </filter>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4806487,0,0,3.4544468,33.238485,-157.08459)"
- r="44"
- fy="50.562386"
- fx="64.000015"
- cy="64"
- cx="64"
- id="radialGradient3555"
- xlink:href="#linearGradient3549" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <path
- transform="matrix(0.7370454,0,0,0.6927083,16.829091,32.53125)"
- id="path3557"
- d="M 56.25,19.472446 C 46.777487,28.94085 26.927072,37.386153 20,39.311562 C 20,69.051834 39.954744,114 64,114 C 87.99163,114 108,69.051834 108,39.311562 C 101.07293,37.386153 81.222513,28.94085 71.75,19.472446 C 69.062493,17.508601 58.937612,17.509769 56.25,19.472446 z "
- style="opacity:0.64356432;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.59806108;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3521)" />
- <path
- style="opacity:0.64356432;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3521)"
- d="M 56.25,18.472446 C 46.777487,27.94085 26.927072,36.386153 20,38.311562 C 20,68.051834 39.954744,113 64,113 C 87.99163,113 108,68.051834 108,38.311562 C 101.07293,36.386153 81.222513,27.94085 71.75,18.472446 C 69.062493,16.508601 58.937612,16.509769 56.25,18.472446 z "
- id="path3170" />
- <path
- id="path2160"
- d="M 56.25,17.472446 C 46.777487,26.94085 26.927072,35.386153 20,37.311562 C 20,67.051834 39.954744,112 64,112 C 87.99163,112 108,67.051834 108,37.311562 C 101.07293,35.386153 81.222513,26.94085 71.75,17.472446 C 69.062493,15.508601 58.937612,15.509769 56.25,17.472446 z "
- style="fill:url(#radialGradient3143);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- clip-path="url(#clipPath3529)"
- id="path3525"
- d="M 56.25,17.472446 C 46.777487,26.94085 26.927072,35.386153 20,37.311562 C 20,67.051834 39.954744,112 64,112 C 87.99163,112 108,67.051834 108,37.311562 C 101.07293,35.386153 81.222513,26.94085 71.75,17.472446 C 69.062493,15.508601 58.937612,15.509769 56.25,17.472446 z "
- style="fill:none;fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.35643564;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3543)" />
- <path
- style="fill:url(#linearGradient3200);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.36138614"
- d="M 56.25,17.472446 C 46.777487,26.94085 26.927072,35.386153 20,37.311562 C 20,67.051834 39.954744,112 64,112 C 87.99163,112 108,67.051834 108,37.311562 C 101.07293,35.386153 81.222513,26.94085 71.75,17.472446 C 69.062493,15.508601 58.937612,15.509769 56.25,17.472446 z "
- id="path3192" />
- <path
- id="path3157"
- d="M 64 16 C 60.79689 16.000146 57.593806 16.487412 56.25 17.46875 C 46.777487 26.937154 26.927072 35.387091 20 37.3125 C 20 37.588342 20.027829 37.877839 20.03125 38.15625 C 30.638901 44.222565 46.403755 48.062499 64 48.0625 C 81.596246 48.0625 97.361099 44.222566 107.96875 38.15625 C 107.97218 37.877839 108 37.588342 108 37.3125 C 101.07293 35.387091 81.222513 26.937154 71.75 17.46875 C 70.406247 16.486827 67.20311 15.999854 64 16 z "
- style="fill:url(#linearGradient3168);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.95544554" />
- <path
- id="path3490"
- d="M 20 37.3125 C 20 37.588342 20.027829 37.877839 20.03125 38.15625 C 30.638901 44.222565 46.403755 48.062499 64 48.0625 C 81.596246 48.0625 97.361099 44.222566 107.96875 38.15625 C 107.97218 37.877839 108 37.588342 108 37.3125 C 107.99139 37.310106 107.9774 37.314914 107.96875 37.3125 C 107.9628 37.427775 107.97015 37.542979 107.96875 37.65625 C 97.361099 43.722566 81.596246 47.5625 64 47.5625 C 46.403755 47.562499 30.638901 43.722565 20.03125 37.65625 C 20.029858 37.542979 20.037204 37.427775 20.03125 37.3125 C 20.022596 37.314914 20.008614 37.310106 20 37.3125 z "
- style="opacity:0.95544553;fill:url(#linearGradient3492);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3547"
- d="M 56.25,17.472446 C 46.777487,26.94085 26.927072,35.386153 20,37.311562 C 20,67.051834 39.954744,112 64,112 C 87.99163,112 108,67.051834 108,37.311562 C 101.07293,35.386153 81.222513,26.94085 71.75,17.472446 C 69.062493,15.508601 58.937612,15.509769 56.25,17.472446 z "
- style="fill:url(#radialGradient3555);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:1" />
- <path
- style="fill:url(#radialGradient3155);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 57.659091,25.932002 C 49.908853,33.678878 33.667605,40.58867 28,42.164006 C 28,66.496955 44.32661,103.27273 64,103.27273 C 83.629515,103.27273 100,66.496955 100,42.164006 C 94.332396,40.58867 78.091147,33.678878 70.340909,25.932002 C 68.14204,24.325219 59.858047,24.326175 57.659091,25.932002 z "
- id="path3145" />
- <path
- clip-path="url(#clipPath3206)"
- id="path3202"
- d="M 57.659091,25.932002 C 49.908853,33.678878 33.667605,40.58867 28,42.164006 C 28,66.496955 44.32661,103.27273 64,103.27273 C 83.629515,103.27273 100,66.496955 100,42.164006 C 94.332396,40.58867 78.091147,33.678878 70.340909,25.932002 C 68.14204,24.325219 59.858047,24.326175 57.659091,25.932002 z "
- style="fill:none;fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient3304);stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3294);opacity:0.51980198" />
- <path
- id="path3306"
- d="M 28,42.15625 C 28,66.4892 44.32661,103.28125 64,103.28125 C 83.629515,103.28125 100,66.489199 100,42.15625 C 99.992227,42.15409 99.976563,42.158431 99.96875,42.15625 C 99.323917,66.470372 83.231686,102.28125 64,102.28125 C 44.725328,102.28125 28.674393,66.470373 28.03125,42.15625 C 28.023437,42.158431 28.007773,42.15409 28,42.15625 z "
- style="fill:url(#linearGradient3321);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3323"
- d="M 64 16 C 60.79689 16.000146 57.593806 16.487412 56.25 17.46875 C 46.777487 26.937154 26.927072 35.387091 20 37.3125 C 20 37.639383 20.02645 37.982023 20.03125 38.3125 C 26.981773 36.373299 46.789266 27.925379 56.25 18.46875 C 58.937612 16.506073 69.062493 16.504905 71.75 18.46875 C 81.210734 27.92538 101.01823 36.373299 107.96875 38.3125 C 107.97356 37.982023 108 37.639383 108 37.3125 C 101.07293 35.387091 81.222513 26.937154 71.75 17.46875 C 70.406247 16.486827 67.20311 15.999854 64 16 z "
- style="fill:url(#linearGradient3334);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.88613861" />
- <path
- id="path3340"
- d="M 59.760484,38.547832 C 54.578694,43.727374 43.719836,48.347244 39.93049,49.400509 C 39.93049,65.669458 50.84642,90.25765 64,90.25765 C 77.124245,90.25765 88.06951,65.669458 88.06951,49.400509 C 84.280164,48.347244 73.421306,43.727374 68.239516,38.547832 C 66.769358,37.473541 61.230701,37.47418 59.760484,38.547832 z "
- style="fill:url(#radialGradient3348);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3378)" />
- <g
- transform="translate(164.00002,43)"
- id="g3418"
- style="overflow:visible">
- <path
- style="fill:none;fill-opacity:1;stroke:url(#radialGradient3431);stroke-opacity:1;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3449)"
- id="path3423"
- d="M -104.6029,25.840268 C -108.50715,21.839089 -116.94774,13.188215 -116.94774,13.188215 L -123.00002,19.392465 L -104.6029,38.25 L -77.00002,9.9538392 L -83.053128,3.75 C -83.053128,3.75 -99.949501,21.070643 -104.6029,25.840268 z " />
- <path
- d="M -104.6029,25.840268 C -108.50715,21.839089 -116.94774,13.188215 -116.94774,13.188215 L -123.00002,19.392465 L -104.6029,38.25 L -77.00002,9.9538392 L -83.053128,3.75 C -83.053128,3.75 -99.949501,21.070643 -104.6029,25.840268 z "
- id="path24"
- style="fill:#ffffff;fill-opacity:1" />
- </g>
- </g>
-</svg>
diff --git a/share/icons/svg/system-search.svg b/share/icons/svg/system-search.svg
deleted file mode 100644
index 7a4bcbb49..000000000
--- a/share/icons/svg/system-search.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" enable-background="new" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient5880"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient5515"><stop stop-color="#fff" stop-opacity="0" offset="0"/><stop stop-color="#fff" offset=".3251"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient5267"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".5036" offset=".5"/><stop stop-color="#fff" offset="1"/></linearGradient><linearGradient id="linearGradient5247"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".7914" offset=".5"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient5131"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3285"><stop stop-color="#474747" offset="0"/><stop stop-color="#474747" stop-opacity="0" offset="1"/></linearGradient><radialGradient id="radialGradient4925" cx="-84" cy="64" r="60" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><mask id="mask4921" maskUnits="userSpaceOnUse"><path d="m-84 4c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7805-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 0.006995-0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.63 4.812-0.6516 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.562-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.562-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.006217-0.04067-0.02426-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9695-0.7881-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625zm0 44c8.832-1e-6 16 7.168 16 16-1e-6 8.832-7.168 16-16 16-8.832 0-16-7.168-16-16 1e-6 -8.832 7.168-16 16-16z" fill="url(#radialGradient4925)"/></mask><filter id="filter5054"><feGaussianBlur stdDeviation="1.2828183"/></filter><clipPath id="clipPath5073"><path d="m76.91-70.06c-2.912 3.972-7.607 6.562-12.91 6.562-4.896 0-9.283-2.189-12.22-5.656-23.14-4.286-26.62 14.04-31.5 30.75 0.4088 0.434 0.8071 0.8646 1.281 1.344 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c1e-6 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.562-5.656 0.4854-0.4906 0.8952-0.9314 1.312-1.375 3.924-7.087-25.61-43.43-30.84-31.62z" fill="url(#radialGradient5077)" opacity=".4312"/></clipPath><radialGradient id="radialGradient5077" cx="94.82" cy="67.9" r="43.73" gradientTransform="matrix(1 0 0 .5781 0 -101.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><filter id="filter5162"><feGaussianBlur stdDeviation="0.60500001"/></filter><filter id="filter5257"><feGaussianBlur stdDeviation="0.022901589"/></filter><filter id="filter5309"><feGaussianBlur stdDeviation="0.093056358"/></filter><filter id="filter5505" x="-.1128" y="-.06669" width="1.226" height="1.133"><feGaussianBlur stdDeviation="0.13268874"/></filter><filter id="filter5581"><feGaussianBlur stdDeviation="0.20386597"/></filter><filter id="filter5718"><feGaussianBlur stdDeviation="0.48701799"/></filter><filter id="filter5836"><feGaussianBlur stdDeviation="0.12356379"/></filter><filter id="filter5876"><feGaussianBlur stdDeviation="0.11909804"/></filter><filter id="filter5960"><feGaussianBlur stdDeviation="0.069666275"/></filter><filter id="filter3310"><feGaussianBlur stdDeviation="0.11377897"/></filter><radialGradient id="radialGradient6335" cx="54.67" cy="6.85" r="1.289" fx="54.05" fy="6.341" gradientTransform="matrix(1 0 0 1.902 0 -6.178)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5247"/><linearGradient id="linearGradient6339" x1="43.71" x2="18.25" y1="11.36" y2="21.73" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5267"/><linearGradient id="linearGradient6343" x1="52.72" x2="38.63" y1="17.8" y2="22.66" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5267"/><radialGradient id="radialGradient6347" cx="54.67" cy="6.85" r="1.289" gradientTransform="matrix(1 0 0 1.902 0 -6.178)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3285"/><linearGradient id="linearGradient6353" x1="114.3" x2="114.3" y1="49.94" y2="61.88" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5515"/><linearGradient id="linearGradient6359" x1="310.8" x2="310.8" y1="-27.66" y2="270.2" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-color="#fff" offset=".5"/><stop stop-color="#fff" offset="1"/></linearGradient><linearGradient id="linearGradient6386" x1="63.99" x2="63.99" y1="80.37" y2="66.13" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient6408" x1="62.94" x2="63.02" y1="3.85" y2="9.852" gradientTransform="translate(-.02961 -.4586)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient6412" x1="283.5" x2="282.5" y1="-52.5" y2="128.5" gradientTransform="translate(-230 39.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><radialGradient id="radialGradient6415" cx="-84" cy="64" r="60" gradientTransform="translate(148)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient6421" x1="64" x2="64" y1="81.5" y2="12.68" gradientTransform="translate(1.5e-6)" gradientUnits="userSpaceOnUse" spreadMethod="reflect"><stop stop-color="#b4b4b4" offset="0"/><stop stop-color="#d1d1d1" offset=".5"/><stop stop-color="#fafafa" offset="1"/></linearGradient><linearGradient id="linearGradient6430" x1="320" x2="310" y1="88.53" y2="-16.47" gradientTransform="translate(-230 40.27)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><filter id="filter6444"><feGaussianBlur stdDeviation="0.84700004"/></filter><filter id="filter3606"><feGaussianBlur stdDeviation="0.50964986"/></filter><linearGradient id="linearGradient2852" x1="1303" x2="1308" y1="-275.4" y2="-280.1" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient2850" x1="1308" x2="1316" y1="-275" y2="-297.2" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient2846" x1="1075" x2="1079" y1="-311.7" y2="-302.5" gradientTransform="matrix(.7847 0 0 .7828 -780.3 287.8)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient2844" x1="1308" x2="1312" y1="-275" y2="-291.9" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient2842" x1="1587" x2="1603" y1="-287.6" y2="-287.6" gradientTransform="matrix(.7847 0 0 .7828 -1195 282.3)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient9182"/><linearGradient id="linearGradient2840" x1="1070" x2="1075" y1="-301.6" y2="-301.6" gradientTransform="matrix(.7847 0 -.00864 .5282 -782.6 211.8)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient9182"/><linearGradient id="linearGradient2838" x1="1304" x2="1317" y1="-279.2" y2="-290.2" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient2836" x1="871.2" x2="922.9" y1="-296.4" y2="-253.7" gradientTransform="matrix(-.6284 -.03801 -.0381 .627 671.4 277.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><radialGradient id="radialGradient2834" cx="1029" cy="-242.7" r="4.972" fy="-244.9" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient7964"/><linearGradient id="linearGradient2832" x1="1191" x2="1218" y1="-239.7" y2="-239.7" gradientTransform="translate(-184.7 -8.594)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient7866"/><radialGradient id="radialGradient2828" cx="1005" cy="-232" r="19.92" fx="1004" fy="-217.4" gradientTransform="matrix(1 0 0 .5441 0 -105.7)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient7974"/><linearGradient id="linearGradient2826" x1="1532" x2="1517" y1="-294.2" y2="-258.6" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><radialGradient id="radialGradient2824" cx="1524" cy="-260.5" r="24.75" fx="1522" fy="-250.7" gradientTransform="matrix(1.311 .1241 -.0541 1.689 -487 -8.419)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient7488"/><linearGradient id="linearGradient2822" x1="1007" x2="1022" y1="-277.2" y2="-277.3" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880" spreadMethod="reflect"/><radialGradient id="radialGradient2820" cx="1514" cy="-242" r="25.38" fx="1511" fy="-244.9" gradientTransform="matrix(1.577 -.3469 .2373 1.184 -822.1 572.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><radialGradient id="radialGradient2818" cx="1524" cy="-239.1" r="25.38" fx="1518" fy="-243.7" gradientTransform="matrix(1.577 -.3469 .2373 1.184 -822.1 572.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient2816" x1="758.9" x2="765.2" y1="-688.4" y2="-688.5" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5991"/><linearGradient id="linearGradient2814" x1="1342" x2="1379" y1="-272" y2="-258.9" gradientTransform="matrix(-.6284 -.03801 -.0381 .627 952.1 294.4)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient2812" x1="941.5" x2="905.3" y1="-297.2" y2="-261" gradientTransform="translate(90.23)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><radialGradient id="radialGradient2804" cx="1005" cy="-232" r="19.92" fx="1004" fy="-217.4" gradientTransform="matrix(.9983 .0576 -.02941 .5098 -5.154 -171.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient7974"/><linearGradient id="linearGradient2802" x1="1514" x2="1527" y1="-288.7" y2="-257.3" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><radialGradient id="radialGradient2796" cx="1524" cy="-239.1" r="25.38" fx="1521" fy="-241.9" gradientTransform="matrix(1.577 -.3469 .2373 1.184 -822.1 572.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><radialGradient id="radialGradient2794" cx="1524" cy="-239.1" r="25.38" fx="1531" fy="-239.9" gradientTransform="matrix(1.577 -.3469 .2373 1.184 -822.1 572.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient2790" x1="1342" x2="1379" y1="-272" y2="-258.9" gradientTransform="translate(-356.4)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient2788" x1="1587" x2="1626" y1="-287.6" y2="-275.5" gradientTransform="matrix(.6333 0 0 .6319 -951.9 230.2)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient9182"/><radialGradient id="radialGradient2786" cx="1042" cy="-326" r="5.626" gradientTransform="matrix(1.344 0 0 .4007 -359.1 -194.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient2784" x1="1041" x2="1051" y1="-346.5" y2="-306.5" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><radialGradient id="radialGradient2782" cx="1058" cy="-345.9" r="11.96" gradientTransform="matrix(1 0 0 .4656 .2803 -180.9)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient2780" x1="1044" x2="1029" y1="-328.6" y2="-323.6" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><linearGradient id="linearGradient2774" x1="1143" x2="1150" y1="-320.3" y2="-265.9" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><linearGradient id="linearGradient2768" x1="1050" x2="1054" y1="-359.1" y2="-304.6" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient2766" x1="924.3" x2="940.1" y1="-593.1" y2="-593.1" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5991"/><linearGradient id="linearGradient2764" x1="1321" x2="1396" y1="-304.5" y2="-307.3" gradientTransform="matrix(-1 0 0 1 2302 36.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient2762" x1="990.3" x2="1001" y1="-289.3" y2="-310" gradientTransform="translate(.25 .25)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><radialGradient id="radialGradient2760" cx="1042" cy="-326" r="5.626" gradientTransform="matrix(1.278 .02222 -.006966 .4006 -291.9 -217.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/><linearGradient id="linearGradient2754" x1="1043" x2="1024" y1="-326.6" y2="-321.8" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5131"/><radialGradient id="radialGradient2746" cx="1040" cy="-288.6" r="43.1" fx="1058" fy="-298" gradientTransform="matrix(.4067 .3407 -.2269 .2696 -458.1 -206.6)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></radialGradient><linearGradient id="linearGradient2736" x1="1321" x2="1396" y1="-304.5" y2="-307.3" gradientTransform="matrix(.6286 -.03478 .03487 .6271 -812.7 299.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient2730" x1="1342" x2="1379" y1="-272" y2="-258.9" gradientTransform="matrix(-.2494 -.01537 -.01512 .2535 421.2 124.5)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient5595"/><linearGradient id="linearGradient10263" x1="1587" x2="1626" y1="-287.6" y2="-275.5" gradientTransform="matrix(.8534 .05023 -.0477 .9127 -73.97 -100.1)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient9182"/><clipPath id="clipPath10259"><path d="m1295-283.3s6.98-5.026 13.96-4.616c7.781 0.458 13.26 6.47 13.26 6.47l-8.207 7.736s-2.37-2.163-5.31-2.462c-2.94-0.2995-6.45 1.264-6.45 1.264l-7.246-8.392z" fill="url(#linearGradient10263)" fill-rule="evenodd"/></clipPath><filter id="filter10253" x="-.1613" y="-.1612" width="1.323" height="1.322"><feGaussianBlur stdDeviation="0.98542663"/></filter><clipPath id="clipPath8998"><path transform="matrix(1.105 0 .03541 .9594 -810.1 3.539)" d="m1550-264.5a24.75 24.75 0 1 1-49.5 0 24.75 24.75 0 1 1 49.5 0z" fill="url(#radialGradient2824)"/></clipPath><filter id="filter8002" x="-.04108" y="-.1022" width="1.082" height="1.204"><feGaussianBlur stdDeviation="0.81845238"/></filter><filter id="filter7958"><feGaussianBlur stdDeviation="0.37171029"/></filter><filter id="filter7845"><feGaussianBlur stdDeviation="0.26782521"/></filter><filter id="filter7328"><feGaussianBlur stdDeviation="0.37286051"/></filter><linearGradient id="linearGradient7266" x1="1321" x2="1396" y1="-304.5" y2="-307.3" gradientTransform="matrix(.9907 0 0 .9891 -304.4 -2.797)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><clipPath id="clipPath7262"><path d="m1055-342.3c-2.66-0.04004-5.336 0.6576-7.647 1.978-3.297 1.885-5.102 5.521-6.408 9.242-8.571 0.4199-19.49 2.672-26.97 15.55l-9.597 20.71h0.0928c-0.062 0.1049-0.1241 0.2029-0.1857 0.3091l57.96 28.75h13.99c7.691 1e-5 12.35-8.05 13.25-15.7h0.031v-0.1855c0.0331-0.3018 0.0406-0.5966 0.0619-0.8964l0.031-0.2473c0.023-0.382 0.0583-0.7673 0.0618-1.144l1.331-19.6c0.542-4.303-0.2184-8.499-2.477-10.76l-24.18-24.14c-2.56-2.556-5.93-3.812-9.35-3.864z" fill="url(#linearGradient7266)" fill-rule="evenodd"/></clipPath><filter id="filter7256" x="-.1955" y="-.09138" width="1.391" height="1.183"><feGaussianBlur stdDeviation="0.90989293"/></filter><filter id="filter7023"><feGaussianBlur stdDeviation="0.60163542"/></filter><linearGradient id="linearGradient7005" x1="1342" x2="1379" y1="-272" y2="-258.9" gradientTransform="matrix(.8971 -.4419 .4419 .8971 -319.7 157.5)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient5595"/><clipPath id="clipPath7001"><path d="m774.8-708.8c-11.3 5.569-17.89 16.14-17.71 26.56l-0.0121 16.17 0.1818 4.683c0.3917 3.171 1.355 6.284 2.95 9.241 7.964 14.77 28.5 19.82 45.83 11.28 16.5-8.129 24.17-25.67 17.99-40.07l-0.331-0.7427-8.382-17.02c-0.01486-0.02791-0.02637-0.05626-0.04143-0.0841-7.045-13.07-25.18-17.55-40.47-10.02z" fill="url(#linearGradient7005)"/></clipPath><linearGradient id="linearGradient6969" x1="1342" x2="1379" y1="-272" y2="-258.9" gradientTransform="translate(-445.1)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#linearGradient5595"/><clipPath id="clipPath6965"><path d="m919.5-293.5c-12.6 0-23.18 6.573-27.63 16l-7.156 14.5-1.906 4.281c-1.05 3.018-1.561 6.236-1.438 9.594 0.6188 16.77 16.81 30.38 36.13 30.38 18.39 0 33.02-12.35 33.84-28l0.0312-0.8125v-18.97c-1e-3 -0.03161 0.0012-0.06212 0-0.09375-0.5459-14.84-14.83-26.88-31.88-26.88z" fill="url(#linearGradient6969)"/></clipPath><filter id="filter6959" x="-.1059" y="-.1407" width="1.212" height="1.281"><feGaussianBlur stdDeviation="3.802569"/></filter><clipPath id="clipPath6641"><path transform="matrix(1.073 0 -2.062e-5 1.074 -111.4 18.59)" d="m1550-264.5a24.75 24.75 0 1 1-49.5 0 24.75 24.75 0 1 1 49.5 0z" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.54"/></clipPath><filter id="filter6637"><feGaussianBlur stdDeviation="0.77462889"/></filter><filter id="filter6198" x="-.1123" y="-.2265" width="1.225" height="1.453"><feGaussianBlur stdDeviation="0.4135875"/></filter><filter id="filter6072"><feGaussianBlur stdDeviation="0.083138439"/></filter><linearGradient id="linearGradient6054" x1="1321" x2="1381" y1="-304.5" y2="-304.5" gradientTransform="matrix(.94 -.3413 .3413 .94 -245.9 186.6)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><clipPath id="clipPath6050"><path d="m926.5-604.2c-2.538 0.8782-4.836 2.463-6.573 4.514-2.478 2.927-2.936 7.004-2.892 10.99-7.987 3.351-17.57 9.254-20.22 24.06l-1.961 22.99 0.08808-0.03196c-0.02265 0.121-0.04777 0.2356-0.06951 0.3577l64.91 7.354 13.28-4.82c7.298-2.649 8.94-11.9 7.155-19.49l0.02933-0.01065-0.06399-0.1762c-0.07261-0.2982-0.1673-0.5809-0.2505-0.8732l-0.05589-0.2457c-0.11-0.3709-0.2094-0.7492-0.3359-1.108l-5.498-19.08c-0.9704-4.276-3.139-8.001-6.061-9.369l-31.27-14.61c-3.31-1.547-6.941-1.58-10.2-0.451z" fill="url(#linearGradient6054)" fill-rule="evenodd"/></clipPath><filter id="filter6035"><feGaussianBlur stdDeviation="1.0516022"/></filter><linearGradient id="linearGradient5987" x1="1321" x2="1381" y1="-304.5" y2="-304.5" gradientTransform="translate(-317.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5595"/><clipPath id="clipPath5983"><path d="m1054-343.2c-2.685-0.04048-5.386 0.6648-7.719 2-3.328 1.905-5.15 5.581-6.469 9.344-8.652 0.4245-19.67 2.702-27.22 15.72l-9.688 20.94h0.0937c-0.0626 0.106-0.1253 0.2051-0.1874 0.3125l58.5 29.06h14.12c7.764 1e-5 12.47-8.138 13.38-15.88h0.0312v-0.1875c0.0335-0.3051 0.041-0.6031 0.0625-0.9062l0.0313-0.25c0.0232-0.3862 0.0589-0.7757 0.0624-1.156l1.344-19.81c0.5471-4.351-0.2204-8.592-2.5-10.88l-24.41-24.41c-2.584-2.584-5.985-3.854-9.438-3.906z" fill="url(#linearGradient5987)" fill-rule="evenodd"/></clipPath><filter id="filter5977"><feGaussianBlur stdDeviation="0.27275091"/></filter><clipPath id="clipPath5917"><path d="m1054-343.2c-2.685-0.04048-5.386 0.6648-7.719 2-3.328 1.905-5.15 5.581-6.469 9.344-8.652 0.4245-19.67 2.702-27.22 15.72l-9.688 20.94h0.0937c-0.0626 0.106-0.1253 0.2051-0.1874 0.3125l58.5 29.06h14.12c7.764 1e-5 12.47-8.138 13.38-15.88h0.0312v-0.1875c0.0335-0.3051 0.041-0.6031 0.0625-0.9062l0.0313-0.25c0.0232-0.3862 0.0589-0.7757 0.0624-1.156l1.344-19.81c0.5471-4.351-0.2204-8.592-2.5-10.88l-24.41-24.41c-2.584-2.584-5.985-3.854-9.438-3.906z" fill="url(#linearGradient5987)" fill-rule="evenodd"/></clipPath><filter id="filter5911" x="-.1148" y="-.08689" width="1.23" height="1.174"><feGaussianBlur stdDeviation="0.87156593"/></filter><clipPath id="clipPath5757"><path d="m1166-265.9h14.14c12.52 0 17.13-21.13 10.6-27.67l-26.99-26.99c-5.081-5.081-13.11-5.483-19-2.107-3.681 2.107-5.679 6.188-7.138 10.35-9.57 0.4695-21.76 2.981-30.1 17.38l58.5 29.05z" fill="#3d3b3c" fill-rule="evenodd"/></clipPath><filter id="filter5753"><feGaussianBlur stdDeviation="1.4374244"/></filter><filter id="filter5698"><feGaussianBlur stdDeviation="0.26202037"/></filter><filter id="filter5622"><feGaussianBlur stdDeviation="0.3713333"/></filter><linearGradient id="linearGradient5595"><stop stop-color="#dddbdc" offset="0"/><stop stop-color="#878485" offset=".7432"/><stop stop-color="#4e4c4d" offset=".8092"/><stop stop-color="#2e2c2d" offset="1"/></linearGradient><linearGradient id="linearGradient5991"><stop stop-opacity="0" offset="0"/><stop stop-opacity=".6833" offset=".25"/><stop offset=".5"/><stop stop-opacity=".7295" offset=".75"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient7488"><stop stop-color="#eb7331" offset="0"/><stop stop-color="#eb7331" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient7866"><stop stop-color="#f4bea0" offset="0"/><stop stop-color="#e5702f" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient7964"><stop stop-color="#fff0c3" offset="0"/><stop stop-color="#c13d00" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient7974"><stop stop-color="#a04e21" offset="0"/><stop stop-color="#a04e21" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient9182"><stop stop-color="#3a3a3c" offset="0"/><stop stop-color="#5d5d60" offset=".5"/><stop stop-color="#97989b" offset="1"/></linearGradient><radialGradient id="radialGradient3462" cx="-1.249" cy="23.73" r="60" fy="61.4" gradientTransform="matrix(1.358 1.503 -1.633 1.476 -61.05 -44.65)" gradientUnits="userSpaceOnUse"><stop stop-opacity="0" offset="0"/><stop stop-opacity="0" offset=".6105"/><stop stop-opacity=".3777" offset=".6847"/><stop stop-opacity="0" offset=".75"/><stop stop-opacity="0" offset="1"/></radialGradient><radialGradient id="radialGradient3466" cx="89.56" cy="80.49" r="43.73" gradientTransform="matrix(1 0 0 .5781 0 -101.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5880"/></defs><g transform="matrix(.75 0 0 .75 16 2.75)"><path d="m64 4c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7806-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 7e-3 -0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.62 4.812-0.6516 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.962 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.962-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.563-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.788 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.563-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.00622-0.04067-0.02425-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9694-0.788-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625zm0 44c8.832 0 16 7.168 16 16s-7.168 16-16 16-16-7.168-16-16 7.168-16 16-16z" fill="#363636" stroke="#767676" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m63.97 4.767c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7806-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 7e-3 -0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.62 4.812-0.6516 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.962-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.563-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.563-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.00622-0.04067-0.02425-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9694-0.788-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625z" fill="none" filter="url(#filter6444)" stroke="url(#linearGradient6430)" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round"/><g><path d="m64 4c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7806-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 7e-3 -0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.62 4.812-0.6515 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8673 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.563-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.563-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.00622-0.04067-0.02425-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9694-0.7881-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625zm0 44c8.832-1e-6 16 7.168 16 16-1e-6 8.832-7.168 16-16 16-8.832 0-16-7.168-16-16 1e-6 -8.832 7.168-16 16-16z" fill="url(#linearGradient6421)"/><path transform="translate(148)" d="m-84 4c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7805-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 0.006995-0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.63 4.812-0.6516 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.562-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.562-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.006217-0.04067-0.02426-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9695-0.7881-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625zm0 44c8.832-1e-6 16 7.168 16 16-1e-6 8.832-7.168 16-16 16-8.832 0-16-7.168-16-16 1e-6 -8.832 7.168-16 16-16z" fill="url(#radialGradient3462)" mask="url(#mask4921)"/><path transform="translate(1.5e-6,143.5)" d="m76.91-70.06c-2.912 3.972-7.607 6.562-12.91 6.562-4.896 0-9.283-2.189-12.22-5.656l-31.5 30.75c0.4088 0.434 0.8071 0.8646 1.281 1.344 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c1e-6 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.562-5.656 0.4854-0.4906 0.8952-0.9314 1.312-1.375l-30.84-31.62z" clip-path="url(#clipPath5073)" fill="url(#radialGradient5077)" filter="url(#filter5054)" opacity=".9592"/><path transform="matrix(-1 0 0 -1 128 -15.49)" d="m76.91-70.06c-2.912 3.972-7.607 6.562-12.91 6.562-4.896 0-9.283-2.189-12.22-5.656l-31.5 30.75c0.4088 0.434 0.8071 0.8646 1.281 1.344 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c1e-6 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.562-5.656 0.4854-0.4906 0.8952-0.9314 1.312-1.375l-30.84-31.62z" clip-path="url(#clipPath5073)" fill="url(#radialGradient3466)" filter="url(#filter5054)" opacity=".9918"/><path d="m64 4c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7806-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 7e-3 -0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.62 4.812-0.6516 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.962-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.563-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.563-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.00622-0.04067-0.02425-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9694-0.788-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625zm0 44c8.832-1e-6 16 7.168 16 16s-7.168 16-16 16-16-7.168-16-16c0-8.832 7.168-16 16-16z" fill="url(#radialGradient6415)" opacity=".7323"/></g><path d="m63.97 3.967c-3.274 0.01728-5.376 0.1739-8.625 0.625-0.962 0.1532-1.75 0.7806-1.75 1.75l-0.5938 9.438c-0.08851 0.9552-0.7566 1.584-1.469 1.812-0.02183 7e-3 -0.0406 0.02503-0.0625 0.03125-4.117 1.105-8.023 2.722-11.62 4.812-0.6516 0.2819-1.492 0.2649-2.188-0.3125l-7.094-6.25c-0.6855-0.6855-1.68-0.5719-2.469 0-2.617 1.979-4.235 3.354-6.562 5.656-2.303 2.327-3.678 3.946-5.656 6.562-0.5719 0.7885-0.6855 1.783 0 2.469l6.25 7.094c0.4737 0.5705 0.7362 1.309 0.4688 1.844l-0.0625 0.125c-2.246 3.8-3.995 7.936-5.125 12.31-0.01184 0.02064-0.01867 0.04216-0.03125 0.0625-0.3172 0.5128-0.8554 0.9316-1.594 1l-9.438 0.5938c-0.9694 0-1.597 0.788-1.75 1.75-0.4511 3.249-0.6077 5.351-0.625 8.625 0.01728 3.274 0.1739 5.376 0.625 8.625 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.438 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.3729 0.6685 0.3816 1.614-0.25 2.375l-6.25 7.094c-0.6855 0.6855-0.5719 1.68 0 2.469 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c0 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.962-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.563-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.5719-0.7885 0.6855-1.783 0-2.469l-6.25-7.094c-0.6316-0.7606-0.6229-1.706-0.25-2.375 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-0.01728-3.274-0.1739-5.376-0.625-8.625-0.1532-0.962-0.7806-1.75-1.75-1.75l-9.438-0.5938c-0.7384-0.06842-1.277-0.4872-1.594-1-0.00563-0.02192-0.02559-0.04059-0.03125-0.0625-1.13-4.376-3.151-8.365-5.125-12.31l-0.0625-0.125c-0.2674-0.5349-0.00497-1.273 0.4688-1.844l6.25-7.094c0.6855-0.6855 0.5719-1.68 0-2.469-1.979-2.617-3.354-4.235-5.656-6.562-2.327-2.303-3.946-3.678-6.563-5.656-0.7885-0.5719-1.783-0.6855-2.469 0l-7.094 6.25c-0.6954 0.5774-1.536 0.5944-2.188 0.3125-3.602-2.09-7.508-3.707-11.62-4.812-0.0219-0.00622-0.04067-0.02425-0.0625-0.03125-0.7121-0.2282-1.38-0.8573-1.469-1.812l-0.5938-9.438c0-0.9694-0.788-1.597-1.75-1.75-3.249-0.4511-5.351-0.6077-8.625-0.625zm0 44c8.832 0 16 7.168 16 16s-7.168 16-16 16-16-7.168-16-16c0-8.832 7.168-16 16-16z" fill="none" filter="url(#filter5162)" stroke="url(#linearGradient6412)" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round"/><g><path d="m15.49 28.94c-0.16 0.5854-0.05599 1.194 0.4062 1.656l6.25 7.094c0.2137 0.2574 0.3703 0.5521 0.4688 0.8438 0.2674-0.5349 0.00497-1.273-0.4688-1.844l-6.25-7.094c-0.1973-0.1973-0.3332-0.42-0.4062-0.6562zm96.97 0c-0.07302 0.2363-0.1777 0.4589-0.375 0.6562l-6.25 7.094c-0.4659 0.5611-0.7147 1.28-0.4688 1.812 0.1001-0.2795 0.2639-0.5658 0.4688-0.8125l6.25-7.094c0.4622-0.4622 0.535-1.071 0.375-1.656zm-48.47 18.06c-8.832 0-16 7.168-16 16 0 0.17 0.02598 0.3313 0.03125 0.5 0.2686-8.597 7.307-15.5 15.97-15.5 8.662-1e-6 15.7 6.903 15.97 15.5 0.005266-0.1686 0.03125-0.3301 0.03125-0.5 0-8.832-7.168-16-16-16zm60 16.5c-0.0312 2.98-0.1986 5.054-0.625 8.125-0.1532 0.9619-0.7806 1.75-1.75 1.75l-9.438 0.5938c-0.8674 0.08037-1.443 0.6466-1.719 1.281-1.103 4.143-2.766 8.064-4.875 11.69-0.2374 0.4255-0.3477 0.9691-0.2188 1.5 0.04379-0.1838 0.1302-0.3413 0.2188-0.5 2.109-3.623 3.772-7.544 4.875-11.69 0.2753-0.6347 0.8514-1.201 1.719-1.281l9.438-0.5938c0.9694 0 1.597-0.7881 1.75-1.75 0.4511-3.249 0.6077-5.351 0.625-8.625-9.4e-4 -0.1793 0.00181-0.3274 0-0.5zm-120 1.781c0.05113 2.57 0.206 4.551 0.5938 7.344 0.1532 0.9619 0.7806 1.75 1.75 1.75l9.437 0.5938c0.8674 0.08037 1.443 0.6466 1.719 1.281 1.103 4.143 2.766 8.064 4.875 11.69 0.08835 0.1584 0.1437 0.3166 0.1875 0.5 0.1289-0.5309 0.04985-1.075-0.1875-1.5-2.109-3.623-3.772-7.544-4.875-11.69-0.2753-0.6347-0.8514-1.201-1.719-1.281l-9.437-0.5938c-0.9694 0-1.597-0.7881-1.75-1.75-0.3383-2.437-0.5213-4.219-0.5938-6.344zm11.47 32.78c-0.1807 0.5845-0.00102 1.251 0.4062 1.812 1.979 2.617 3.354 4.235 5.656 6.562 2.327 2.303 3.946 3.678 6.562 5.656 0.7885 0.5719 1.783 0.6855 2.469 0l7.094-6.25c0.7606-0.6316 1.706-0.6229 2.375-0.25l0.09375-0.09375c3.528 2.017 7.328 3.61 11.34 4.688v0.1562c0.7364 0.209 1.44 0.8593 1.531 1.844l0.5938 9.438c-2e-6 0.9694 0.788 1.597 1.75 1.75 3.249 0.4511 5.351 0.6077 8.625 0.625 3.274-0.01728 5.376-0.1739 8.625-0.625 0.9619-0.1532 1.75-0.7806 1.75-1.75l0.5938-9.438c0.09122-0.9845 0.7948-1.635 1.531-1.844v-0.1562c4.016-1.078 7.816-2.67 11.34-4.688l0.09375 0.09375c0.6685-0.3729 1.614-0.3816 2.375 0.25l7.094 6.25c0.6855 0.6855 1.68 0.5719 2.469 0 2.617-1.979 4.235-3.354 6.562-5.656 2.303-2.327 3.678-3.946 5.656-6.562 0.4073-0.5615 0.5557-1.228 0.375-1.812-0.07726 0.2828-0.1887 0.5557-0.375 0.8125-1.979 2.617-3.354 4.235-5.656 6.562-2.327 2.303-3.946 3.678-6.562 5.656-0.7885 0.5719-1.783 0.6855-2.469 0l-7.094-6.25c-0.7606-0.6316-1.706-0.6229-2.375-0.25l-0.09375-0.09375c-3.528 2.017-7.328 3.61-11.34 4.688v0.1562c-0.7364 0.209-1.44 0.8593-1.531 1.844l-0.5938 9.438c0 0.9694-0.7881 1.597-1.75 1.75-3.249 0.4511-5.351 0.6077-8.625 0.625-3.274-0.01728-5.376-0.1739-8.625-0.625-0.962-0.1532-1.75-0.7806-1.75-1.75l-0.5938-9.438c-0.09122-0.9845-0.7949-1.635-1.531-1.844v-0.1562c-4.016-1.078-7.816-2.67-11.34-4.688l-0.09375 0.09375c-0.6685-0.3729-1.614-0.3816-2.375 0.25l-7.094 6.25c-0.6855 0.6855-1.68 0.5719-2.469 0-2.617-1.979-4.235-3.354-6.562-5.656-2.303-2.327-3.678-3.946-5.656-6.562-0.1862-0.2568-0.329-0.5297-0.4062-0.8125z" fill="#fff" opacity=".7323"/><path d="m55.23 4.109c4.559-0.4362 12.19-0.6029 16.94-0.03575 1.906 0.2275 2.538 2.878 2.145 7.364-0.02725 0.3109-0.5719-5.961-2.502-6.041-4.671-0.1946-11.68-0.4665-16.23 0-1.046 0.1072-1.962 2.193-1.966 1.859-0.01787-1.394-0.2462-2.968 1.609-3.146z" fill="url(#linearGradient6408)" fill-rule="evenodd" filter="url(#filter5257)"/><path transform="matrix(.9 .436 -.436 .9 8.657 -23.81)" d="m55.96 6.85a1.289 2.452 0 0 1-1.289 2.452 1.289 2.452 0 0 1-1.289-2.452 1.289 2.452 0 0 1 1.289-2.452 1.289 2.452 0 0 1 1.289 2.452z" fill="url(#radialGradient6335)"/><path transform="matrix(-.9 .436 .436 .9 119.1 -23.81)" d="m55.96 6.85a1.289 2.452 0 0 1-1.289 2.452 1.289 2.452 0 0 1-1.289-2.452 1.289 2.452 0 0 1 1.289-2.452 1.289 2.452 0 0 1 1.289 2.452z" fill="url(#radialGradient6335)"/></g><g><path d="m51.36 18.3c-4.048 1.238-7.859 2.71-11.53 4.9-0.997 0.3636-1.596 0.003434-2.427-0.5055l-6.875-6.113c-0.4333-0.3582-1.502-0.9246-2.325-0.2022-4.572 3.96-8.216 8.205-12.23 12.33l1.49-0.7889c3.572-3.458 7.012-6.961 10.85-10.33 0.5699-0.4721 1.423-0.2909 1.921 0.2022l6.584 5.804c1.006 0.9837 2.29 1.379 3.628 0.9161 3.645-2.35 7.471-3.979 11.5-5.567 0.8454-0.3486 1.516-1.7 1.403-2.807-0.1174 0.7144-0.9994 1.847-1.981 2.16z" fill="url(#linearGradient6339)" fill-rule="evenodd" filter="url(#filter5309)"/><path transform="matrix(.2034 1.237 -.9791 .257 24.51 -52.47)" d="m55.96 6.85a1.289 2.452 0 0 1-1.289 2.452 1.289 2.452 0 0 1-1.289-2.452 1.289 2.452 0 0 1 1.289-2.452 1.289 2.452 0 0 1 1.289 2.452z" fill="url(#radialGradient6335)"/></g><g transform="matrix(-1 0 0 1 128.4 0)"><path d="m51.36 18.3c-4.048 1.238-7.859 2.71-11.53 4.9-0.997 0.3636-1.167-0.497-1.998-1.006l-6.875-6.113c-0.4333-0.3582-1.93-0.4242-2.754 0.2982-5.214 3.318-8.714 7.707-12.23 12.33l1.49-0.7889c2.484-2.865 6.004-6.412 10.85-10.33 0.5699-0.4721 1.852-0.7913 2.35-0.2982l6.584 5.804c1.006 0.9837 1.861 1.88 3.199 1.417 3.645-2.35 7.471-3.979 11.5-5.567 0.8454-0.3486 1.516-1.7 1.403-2.807-0.1174 0.7144-0.9994 1.847-1.981 2.16z" fill="url(#linearGradient6343)" fill-rule="evenodd" filter="url(#filter5309)"/><path transform="matrix(.2034 1.237 -.9791 .257 24.51 -52.47)" d="m55.96 6.85a1.289 2.452 0 0 1-1.289 2.452 1.289 2.452 0 0 1-1.289-2.452 1.289 2.452 0 0 1 1.289-2.452 1.289 2.452 0 0 1 1.289 2.452z" fill="url(#radialGradient6335)"/></g><g><path transform="matrix(-.9947 -.4812 -.3575 .9613 168.3 49.78)" d="m55.96 6.85a1.289 2.452 0 0 1-1.289 2.452 1.289 2.452 0 0 1-1.289-2.452 1.289 2.452 0 0 1 1.289-2.452 1.289 2.452 0 0 1 1.289 2.452z" fill="url(#radialGradient6347)" filter="url(#filter5505)" opacity=".3197"/><path transform="matrix(.9947 -.4812 .3575 .9613 -39.94 50.08)" d="m55.96 6.85a1.289 2.452 0 0 1-1.289 2.452 1.289 2.452 0 0 1-1.289-2.452 1.289 2.452 0 0 1 1.289-2.452 1.289 2.452 0 0 1 1.289 2.452z" fill="url(#radialGradient6347)" filter="url(#filter5505)" opacity=".3197"/><path d="m109.7 50.2c0.1883 0.7366-0.02503 2.115 0.4715 3.245 0.2905 0.661 0.6951 1.085 1.226 1.105 4.787 0.1783 6.947 0.1345 10.11 0.3539 0.4714 0.03268 1.058 0.3259 1.289 1.241 0.4149 1.648 0.3506 4.988 0.784 6.57 0.7407 2.835 0.2963-4.805-0.05055-7.103-0.2823-1.586-0.9702-2.281-1.82-2.325-3.371-0.1779-6.747-0.06461-10.41-0.2022-0.254 0.03372-0.529-0.2638-0.7814-0.694-0.4501-0.7671-0.4172-1.849-0.8153-2.19z" fill="url(#linearGradient6353)" fill-rule="evenodd" filter="url(#filter5581)"/><path transform="matrix(-1 0 0 1 128.3 .7)" d="m109.7 49.7c0.1883 0.7366-0.02503 2.115 0.4715 3.245 0.2905 0.661 0.6951 1.085 1.226 1.105 4.787 0.1783 6.947 0.6345 10.11 0.8539 0.4714 0.03268 1.058 0.3259 1.289 1.241 0.4149 1.648 0.3506 4.988 0.784 6.57 0.7407 2.835 0.2963-4.805-0.05055-7.103-0.2823-1.586-0.9702-2.281-1.82-2.325-3.371-0.1779-6.747-0.5646-10.41-0.7022-0.254 0.03372-0.529-0.2638-0.7814-0.694-0.4501-0.7671-0.4172-1.849-0.8153-2.19z" fill="url(#linearGradient6353)" fill-rule="evenodd" filter="url(#filter5581)"/><path d="m48.31 64.19c-0.004749 0.1587-0.04717 0.3118-0.04717 0.4717 0 8.677 7.077 15.71 15.75 15.71s15.71-7.03 15.71-15.71c0-0.1599-0.04242-0.3129-0.04717-0.4717-0.2284 8.478-7.127 15.28-15.66 15.28-8.533 0-15.48-6.805-15.71-15.28z" fill="url(#linearGradient6386)" filter="url(#filter5876)" opacity=".8736"/><path d="m79.68 63.99c0.004749-0.1587 0.04717-0.3118 0.04717-0.4717 0-8.677-7.077-15.71-15.75-15.71s-15.71 7.03-15.71 15.71c0 0.1599 0.04242 0.3129 0.04717 0.4717 0.2284-8.478 7.127-15.28 15.66-15.28 8.533 0 15.48 6.805 15.71 15.28z" fill="#565656" filter="url(#filter5718)" opacity=".8736"/><path d="m80.26 64.3c0.004927-0.1647 0.04894-0.3235 0.04894-0.4894 0-9.002-7.343-16.3-16.34-16.3s-16.3 7.294-16.3 16.3c0 0.1659 0.04401 0.3247 0.04894 0.4894 0.2369-8.796 7.394-16.27 16.25-16.27 8.852 0 16.06 7.475 16.3 16.27z" fill="#fff" filter="url(#filter5836)" opacity=".8736"/><path d="m48.31 64.19c-0.004749 0.1587-0.04717 0.3118-0.04717 0.4717 0 8.677 7.077 16.71 15.75 16.71s15.71-8.03 15.71-16.71c0-0.1599-0.04242-0.3129-0.04717-0.4717-0.2284 8.478-7.127 15.28-15.66 15.28-8.533 0-15.48-6.805-15.71-15.28z" fill="url(#linearGradient6386)" filter="url(#filter5876)" opacity=".3457"/><path d="m112.3 97.9c0.05231 0.5576-0.1265 1.038-0.3575 1.501l-3.36 4.361 3.074-4.361c-0.135-0.5164-0.1901-1.073-0.5004-1.501-1.786-2.201-4.06-4.32-5.076-6.649l6.22 6.649z" fill="#fff" fill-rule="evenodd" filter="url(#filter5960)"/><path transform="matrix(-1 0 0 1 128.4 0)" d="m112.3 97.9c0.05231 0.5576-0.1265 1.038-0.3575 1.501l-3.36 4.361 3.074-4.361c-0.135-0.5164-0.1901-1.073-0.5004-1.501-1.786-2.201-4.06-4.32-5.076-6.649l6.22 6.649z" fill="#fff" fill-rule="evenodd" filter="url(#filter5960)"/></g><path transform="matrix(.5892 0 0 .5892 -119.2 -.13)" d="m366 108.8a55.19 55.19 0 0 1-55.19 55.19 55.19 55.19 0 0 1-55.19-55.19 55.19 55.19 0 0 1 55.19-55.19 55.19 55.19 0 0 1 55.19 55.19z" fill="none" filter="url(#filter3310)" stroke="url(#linearGradient6359)" stroke-dashoffset="1.088" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.697"/><path d="m64 31.47c-17.95 0-32.53 14.58-32.53 32.53 0 17.95 14.58 32.53 32.53 32.53 17.95 0 32.53-14.58 32.53-32.53 0-17.95-14.58-32.53-32.53-32.53zm0 17.94c8.051 0 14.59 6.543 14.59 14.59s-6.543 14.59-14.59 14.59-14.59-6.543-14.59-14.59 6.543-14.59 14.59-14.59z" fill="#343434" fill-opacity=".07755" filter="url(#filter3310)"/></g><g transform="translate(.8525 -11.57)"><path d="m-106.4 44.12v-2.795 2.795z" fill="#fff" fill-opacity=".7569"/><g transform="matrix(.999 0 0 .965 -.7992 32.8)"><g transform="matrix(-1.002 0 0 1 125.8 1.975)"><g><path d="m85.21 29.17c3.143 0.1936 5.683 2.022 6.649 4.48l1.566 3.785 0.4108 1.114c0.2162 0.781 0.2952 1.605 0.2135 2.454-0.4079 4.24-4.651 7.44-9.47 7.144-4.588-0.2826-8.05-3.636-8.018-7.617l0.00451-0.2064 0.2868-4.808c7.3e-4 -0.007997 6.4e-4 -0.01576 0.00142-0.02376 0.3605-3.752 4.106-6.584 8.357-6.322z" fill="url(#linearGradient2730)"/><rect transform="matrix(-.2304 .09822 .09666 .2342 332.3 119)" x="758.1" y="-703.2" width="7.926" height="28.85" ry="0" clip-path="url(#clipPath7001)" fill="url(#linearGradient2816)" filter="url(#filter7023)" opacity=".5678"/><path transform="matrix(-.3527 -.02173 -.02986 .3104 615.2 155.7)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="#312f30"/><path transform="matrix(-.3282 -.02022 -.02777 .2886 578.4 147.8)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" clip-path="url(#clipPath6641)" filter="url(#filter6637)" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.101"/></g><path transform="matrix(-.2513 -.01379 -.01611 .2786 333.8 124.5)" d="m1021-275.2c-5.975-4.137-21.07-5.423-28.75-2.5" fill="none" filter="url(#filter7845)" stroke="url(#linearGradient2822)" stroke-width="1.331"/></g><g transform="matrix(1.002 0 0 1 1.762 2.148)"><g><path d="m85.21 29.17c3.143 0.1936 5.683 2.022 6.649 4.48l1.566 3.785 0.4108 1.114c0.2162 0.781 0.2952 1.605 0.2135 2.454-0.4079 4.24-4.651 7.44-9.47 7.144-4.588-0.2826-8.05-3.636-8.018-7.617l0.00451-0.2064 0.2868-4.808c7.3e-4 -0.007997 6.4e-4 -0.01576 0.00142-0.02376 0.3605-3.752 4.106-6.584 8.357-6.322z" fill="url(#linearGradient2730)"/><rect transform="matrix(-.2304 .09822 .09666 .2342 332.3 119)" x="758.1" y="-703.2" width="7.926" height="28.85" ry="0" clip-path="url(#clipPath7001)" fill="url(#linearGradient2816)" filter="url(#filter7023)" opacity=".5678"/><path transform="matrix(-.3527 -.02173 -.02986 .3104 615.2 155.7)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="#312f30"/><path transform="matrix(-.3282 -.02022 -.02777 .2886 578.4 147.8)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" clip-path="url(#clipPath6641)" filter="url(#filter6637)" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.101"/></g><path transform="matrix(-.2513 -.01379 -.01611 .2786 333.8 124.5)" d="m1021-275.2c-5.975-4.137-21.07-5.423-28.75-2.5" fill="none" filter="url(#filter7845)" stroke="url(#linearGradient2822)" stroke-width="1.331"/></g><g><path d="m37.71 36.35c-1.689 0.06801-3.363 0.6043-4.782 1.523-2.026 1.311-3.043 3.679-3.741 6.085-5.424 0.5671-12.27 2.379-16.56 10.8l-5.36 13.47 0.0589-0.00326c-0.03565 0.06868-0.07161 0.133-0.1069 0.2025l37.79 16.19 8.879-0.4913c4.88-0.2701 7.552-5.537 7.854-10.42l0.01958-0.001087-0.006548-0.1176c0.01045-0.1925 0.004785-0.3797 0.00768-0.5705l0.01096-0.1579c0.001134-0.243 0.01001-0.4885-0.001071-0.7273l0.154-12.47c0.1922-2.747-0.4381-5.381-1.951-6.733l-16.19-14.46c-1.714-1.53-3.897-2.209-6.069-2.122z" fill="url(#linearGradient2736)" fill-rule="evenodd"/><rect transform="matrix(.6028 .1813 -.1818 .6014 -630.6 231.7)" x="924.4" y="-612.9" width="15.56" height="39.6" clip-path="url(#clipPath6050)" fill="url(#linearGradient2766)" filter="url(#filter6035)" opacity=".7326"/><path d="m44.95 84.62 8.89-0.4919c7.871-0.4355 10.03-13.85 5.697-17.72l-17.91-15.99c-3.371-3.01-8.43-2.983-12.02-0.6605-2.241 1.45-3.354 4.078-4.126 6.739-5.999 0.6273-13.57 2.627-18.32 11.95l37.78 16.18z" fill="#3d3b3c" fill-rule="evenodd"/><path transform="matrix(.6286 -.03478 .03487 .6271 -613.1 288.3)" d="m1049-326.3c-3.121-0.04706-6.258 0.7292-8.969 2.281-3.868 2.215-6.217 6.002-7.75 10.38-7.594 0.3726-17 3.725-24.81 11l-4.469 7.438c8.339-14.12 20.44-16.6 29.94-17.06 1.459-4.162 3.444-8.236 7.125-10.34 5.897-3.376 13.92-2.987 19 2.094l27 27c2.659 2.663 3.498 7.731 2.688 12.81 0.0577-0.3333 0.1171-0.6671 0.1563-1h0.0312v-0.1875c0.0335-0.3051 0.041-0.6031 0.0625-0.9062l0.0313-0.25c0.0232-0.3862 0.0591-0.7757 0.0624-1.156l0.5626-7.793c-0.4313-0.8414-0.9435-1.599-1.563-2.219l-28.09-27.58c-3.003-3.003-6.987-4.44-11-4.5zm35.09 56.25c-0.3665 0.424-0.7492 0.8167-1.156 1.188 0.4071-0.3704 0.7899-0.7628 1.156-1.188zm-5.406 3.719c-0.293 0.09401-0.6019 0.1505-0.9062 0.2188 0.3045-0.06641 0.6131-0.1265 0.9062-0.2188zm-1.062 0.2812c-0.2978 0.06173-0.5977 0.08907-0.9063 0.125 0.3035-0.0341 0.6133-0.0659 0.9063-0.125z" fill="url(#linearGradient2768)" fill-rule="evenodd" filter="url(#filter5622)"/></g><g transform="matrix(.6286 -.03478 .03487 .6271 -641.4 292.5)"><path transform="matrix(1.408 0 0 1.327 -724.5 90.28)" d="m1314-281.5a6.234 6.234 0 0 1-6.234 6.234 6.234 6.234 0 0 1-6.234-6.234 6.234 6.234 0 0 1 6.234-6.234 6.234 6.234 0 0 1 6.234 6.234z" fill="#1f1f1f" filter="url(#filter5698)"/><path transform="matrix(1.265 0 0 1.192 -537.2 53.17)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/></g><g><path transform="matrix(.7569 -.04188 .03956 .7116 -927.8 331.9)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" fill="#3b3b3b" filter="url(#filter5698)"/><path transform="matrix(.6799 -.03762 .03554 .6392 -828.2 306.4)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><path d="m44.95 84.62 8.89-0.4919c7.871-0.4355 10.03-13.85 5.697-17.72l-17.91-15.99c-3.371-3.01-8.43-2.983-12.02-0.6605-2.241 1.45-3.354 4.078-4.126 6.739-5.999 0.6273-13.57 2.627-18.32 11.95l37.78 16.18z" fill="url(#radialGradient2746)" fill-rule="evenodd"/><path transform="matrix(.6286 -.03478 .03487 .6271 -678.5 291.9)" d="m1153-323.8c-2.92-0.04402-5.87 0.7044-8.406 2.156-3.619 2.072-5.566 6.065-7 10.16-9.407 0.4616-21.39 2.94-29.59 17.09l0.8973 0.3447c7.881-13.41 20.03-16.1 29.02-16.54 1.379-3.932 3.448-7.79 6.927-9.781 5.572-3.19 13.14-2.447 17.94 2.354l25.5 26.03c1.58 1.943 1.831 26.16-10 26.16h1.125c12.31 1e-5 16.83-20.78 10.41-27.22l-26.53-26.53c-2.809-2.809-6.528-4.162-10.28-4.219z" clip-path="url(#clipPath5757)" fill="url(#linearGradient2774)" fill-rule="evenodd" filter="url(#filter5753)" opacity=".8242"/><rect transform="matrix(.774 .6331 -.8117 .5841 0 0)" x="95.24" y="25.32" width="1.301" height="6.291"/></g><g transform="matrix(.6286 -.03478 .03487 .6271 -609.1 272.5)"><path transform="matrix(.2349 0 0 .2214 740.8 -231.7)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" filter="url(#filter5698)"/><path transform="matrix(.211 0 0 .1989 772 -237.9)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="328.4" y="-957.9" width=".4037" height="1.951"/></g><g transform="matrix(.6286 -.03478 .03487 .6271 -620 276.4)"><path transform="matrix(.2349 0 0 .2214 740.8 -231.7)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" filter="url(#filter5698)"/><path transform="matrix(.211 0 0 .1989 772 -237.9)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="328.4" y="-957.9" width=".4037" height="1.951"/></g><path transform="matrix(.6286 -.03478 .03487 .6271 -613.1 288.3)" d="m1040-331.9c-4.484 0.2264-16.6 1.472-19.78 7.188l3.844 10.78 8.906 2.094 7.031-20.06z" clip-path="url(#clipPath5917)" fill="url(#linearGradient2754)" fill-rule="evenodd" filter="url(#filter5911)"/><g fill="none"><path transform="matrix(.6286 -.03478 .03487 .6271 -613.1 288.3)" d="m1047-340.8c5.347-3.087 12.65-1.989 16.28 1.636l6.616 6.52" clip-path="url(#clipPath5983)" filter="url(#filter5977)" opacity=".7326" stroke="url(#radialGradient2782)" stroke-width="1px"/><path transform="matrix(.6345 -.03511 .03525 .634 -619.5 290.4)" d="m1088-312.4-24.41-24.41c-2.584-2.584-5.985-3.854-9.438-3.906-2.685-0.04048-5.386 0.6648-7.719 2-3.328 1.905-5.15 5.581-6.469 9.344-8.652 0.4245-20.11 2.789-27.66 15.81" clip-path="url(#clipPath7262)" filter="url(#filter6072)" opacity=".5824" stroke="url(#linearGradient2784)" stroke-width=".594"/><path transform="matrix(.6286 -.03478 .03487 .6271 -613.1 288.3)" d="m1038-321.5c2.997-3.037 7.111-4.602 10.88-4.429" filter="url(#filter6198)" stroke="url(#radialGradient2760)" stroke-width="1px"/><path transform="matrix(.6286 -.03478 .03487 .6271 -601.1 277.6)" d="m999.9-306.6-10.61 19.8" filter="url(#filter7256)" stroke="url(#linearGradient2762)" stroke-width="1px"/></g><g transform="matrix(.6284 .03801 -.0381 .627 -506.3 193.2)"><g><path d="m930.5-306.7c2.685-0.04048 5.386 0.6648 7.719 2 3.328 1.905 5.15 5.581 6.469 9.344 8.652 0.4245 19.67 2.702 27.22 15.72l9.688 20.94h-0.0937c0.0626 0.106 0.1253 0.2051 0.1874 0.3125l-58.5 29.06h-14.12c-7.764 1e-5 -12.47-8.138-13.38-15.88h-0.0312v-0.1875c-0.0335-0.3051-0.041-0.6031-0.0625-0.9062l-0.0313-0.25c-0.0232-0.3862-0.0589-0.7757-0.0624-1.156l-1.344-19.81c-0.5471-4.351 0.2204-8.592 2.5-10.88l24.41-24.41c2.584-2.584 5.985-3.854 9.438-3.906z" fill="url(#linearGradient2764)" fill-rule="evenodd"/><rect transform="matrix(-.94 .3413 .3413 .94 2008 -55)" x="924.4" y="-612.9" width="15.56" height="39.6" clip-path="url(#clipPath6050)" fill="url(#linearGradient2766)" filter="url(#filter6035)" opacity=".7326"/><path d="m923.2-229.4h-14.14c-12.52 0-17.13-21.13-10.6-27.67l26.99-26.99c5.081-5.081 13.11-5.483 19-2.107 3.681 2.107 5.679 6.188 7.138 10.35 9.57 0.4695 21.76 2.981 30.1 17.38l-58.5 29.05z" fill="#3d3b3c" fill-rule="evenodd"/><path transform="matrix(-1 0 0 1 1985 36.5)" d="m1049-326.3c-3.121-0.04706-6.258 0.7292-8.969 2.281-3.868 2.215-6.217 6.002-7.75 10.38-7.594 0.3726-17 3.725-24.81 11l-4.469 7.438c8.339-14.12 20.44-16.6 29.94-17.06 1.459-4.162 3.444-8.236 7.125-10.34 5.897-3.376 13.92-2.987 19 2.094l27 27c2.659 2.663 3.498 7.731 2.688 12.81 0.0577-0.3333 0.1171-0.6671 0.1563-1h0.0312v-0.1875c0.0335-0.3051 0.041-0.6031 0.0625-0.9062l0.0313-0.25c0.0232-0.3862 0.0591-0.7757 0.0624-1.156l0.5626-7.793c-0.4313-0.8414-0.9435-1.599-1.563-2.219l-28.09-27.58c-3.003-3.003-6.987-4.44-11-4.5zm35.09 56.25c-0.3665 0.424-0.7492 0.8167-1.156 1.188 0.4071-0.3704 0.7899-0.7628 1.156-1.188zm-5.406 3.719c-0.293 0.09401-0.6019 0.1505-0.9062 0.2188 0.3045-0.06641 0.6131-0.1265 0.9062-0.2188zm-1.062 0.2812c-0.2978 0.06173-0.5977 0.08907-0.9063 0.125 0.3035-0.0341 0.6133-0.0659 0.9063-0.125z" fill="url(#linearGradient2768)" fill-rule="evenodd" filter="url(#filter5622)"/></g><g transform="translate(-204.6 40.74)"><path transform="matrix(1.408 0 0 1.327 -724.5 90.28)" d="m1314-281.5a6.234 6.234 0 0 1-6.234 6.234 6.234 6.234 0 0 1-6.234-6.234 6.234 6.234 0 0 1 6.234-6.234 6.234 6.234 0 0 1 6.234 6.234z" fill="#1f1f1f" filter="url(#filter5698)"/><path transform="matrix(1.265 0 0 1.192 -537.2 53.17)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/></g><g><path transform="matrix(1.204 0 0 1.135 -662.2 78.14)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" fill="#3b3b3b" filter="url(#filter5698)"/><path transform="matrix(1.082 0 0 1.019 -502 46.41)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><path transform="matrix(-1 0 0 1 2089 36.5)" d="m1153-323.8c-2.92-0.04402-5.87 0.7044-8.406 2.156-3.619 2.072-5.566 6.065-7 10.16-9.407 0.4616-21.39 2.94-29.59 17.09l0.8973 0.3447c7.881-13.41 20.03-16.1 29.02-16.54 1.379-3.932 3.448-7.79 6.927-9.781 5.572-3.19 13.14-2.447 17.94 2.354l25.5 26.03c1.58 1.943 1.831 26.16-10 26.16h1.125c12.31 1e-5 16.83-20.78 10.41-27.22l-26.53-26.53c-2.809-2.809-6.528-4.162-10.28-4.219z" clip-path="url(#clipPath5757)" fill="url(#linearGradient2774)" fill-rule="evenodd" filter="url(#filter5753)" opacity=".8242"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="298.6" y="-826.5" width="2.069" height="10"/></g><g transform="matrix(-1 0 0 1 1977 11.75)"><path transform="matrix(.2349 0 0 .2214 740.8 -231.7)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" filter="url(#filter5698)"/><path transform="matrix(.211 0 0 .1989 772 -237.9)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="328.4" y="-957.9" width=".4037" height="1.951"/></g><g transform="matrix(-1 0 0 1 1995 17.05)"><path transform="matrix(.2349 0 0 .2214 740.8 -231.7)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" filter="url(#filter5698)"/><path transform="matrix(.211 0 0 .1989 772 -237.9)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="328.4" y="-957.9" width=".4037" height="1.951"/></g><path transform="matrix(-1 0 0 1 1985 36.5)" d="m1040-331.9c-4.484 0.2264-9.599 0.9724-14.53 3.438l-0.6563 1.781 8.156 14.84 7.031-20.06z" clip-path="url(#clipPath5917)" fill="url(#linearGradient2780)" fill-rule="evenodd" filter="url(#filter5911)"/><g fill="none"><path transform="matrix(-1 0 0 1 1985 36.5)" d="m1047-340.8c5.347-3.087 12.65-1.989 16.28 1.636l6.616 6.52" clip-path="url(#clipPath5983)" filter="url(#filter5977)" opacity=".7326" stroke="url(#radialGradient2782)" stroke-width="1px"/><path transform="matrix(-1.009 0 0 1.011 1995 39.33)" d="m1088-312.4-24.41-24.41c-2.584-2.584-5.985-3.854-9.438-3.906-2.685-0.04048-5.386 0.6648-7.719 2-3.328 1.905-5.15 5.581-6.469 9.344-8.652 0.4245-19.67 2.702-27.22 15.72" filter="url(#filter6072)" opacity=".5824" stroke="url(#linearGradient2784)" stroke-width=".594"/><path transform="matrix(-1 0 0 1 1985 36.5)" d="m1038-321.5c2.997-3.037 7.111-4.602 10.88-4.429" filter="url(#filter6198)" stroke="url(#radialGradient2786)" stroke-width="1px"/></g></g><path d="m53.57 48.15s4.97-3.752 10.15-3.752c5.774 0 10.06 3.927 10.06 3.927l-5.773 5.672s-1.837-1.396-4.024-1.484c-2.187-0.08726-4.723 1.134-4.723 1.134l-5.686-5.498z" fill="url(#linearGradient2788)" fill-rule="evenodd"/><g transform="matrix(.6286 -.03478 .03487 .6271 -601.1 277.6)"><g><path d="m1008-293.5c-12.6 0-23.18 6.573-27.63 16l-7.156 14.5-1.906 4.281c-1.05 3.018-1.561 6.236-1.438 9.594 0.6188 16.77 16.81 30.38 36.13 30.38 18.39 0 33.02-12.35 33.84-28l0.0312-0.8125v-18.97c-1e-3 -0.03161 0.0012-0.06212 0-0.09375-0.5459-14.84-14.83-26.88-31.88-26.88z" fill="url(#linearGradient2790)"/><rect transform="matrix(.8971 .4419 -.4419 .8971 0 0)" x="758.1" y="-703.2" width="7.926" height="28.85" ry="0" clip-path="url(#clipPath7001)" fill="url(#linearGradient2816)" filter="url(#filter7023)" opacity=".5678"/><path transform="matrix(1.414 0 .04529 1.227 -1139 75.49)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="#312f30"/></g><path transform="matrix(1.316 0 .04215 1.141 -990.2 53.4)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" clip-path="url(#clipPath6641)" fill="none" filter="url(#filter6637)" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.101"/><g><path transform="translate(88.9 -.1)" d="m913.2-314.2c-6.344 0-21.67 13.42-10.47 25.28 19.69-4.202 40.21 18.33 49.22 33.72l11.12-5.531c15 3.968 2.751-14.06 2.75-14.09-0.5459-14.84-35.58-39.38-52.62-39.38z" clip-path="url(#clipPath6965)" filter="url(#filter6959)" opacity=".7106"/><path transform="matrix(1.205 0 .03858 1.045 -821.3 29.9)" d="m1525-289.9c-14 0-25.38 11.37-25.38 25.38s11.37 25.38 25.38 25.38 25.38-11.37 25.38-25.38-11.37-25.38-25.38-25.38zm0 1.25c13.32 0 24.12 10.8 24.12 24.12s-10.91 22.77-24.23 22.77-24.02-9.45-24.02-22.77 10.8-24.12 24.12-24.12z" fill="url(#radialGradient2794)" filter="url(#filter7328)"/><path transform="matrix(1.164 0 .0373 1.011 -760.5 19.8)" d="m1525-289.9c-14 0-25.38 11.37-25.38 25.38s11.37 25.38 25.38 25.38 25.38-11.37 25.38-25.38-11.37-25.38-25.38-25.38zm0 1.25c13.32 0 24.12 10.8 24.12 24.12s-11.14 18.14-24.46 18.14-23.79-4.815-23.79-18.14 10.8-24.12 24.12-24.12z" fill="url(#radialGradient2796)"/></g><path transform="matrix(1.007 .006665 -.002069 1.099 -7.473 20.97)" d="m1021-275.2c-5.975-4.137-21.07-5.423-28.75-2.5" fill="none" filter="url(#filter7845)" stroke="url(#linearGradient2822)" stroke-width="1.331"/><path transform="matrix(1.105 0 .03541 .9594 -671 3.539)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z"/><path transform="matrix(1.105 0 .03541 .9594 -671 3.539)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="url(#radialGradient2824)"/><path transform="matrix(1.144 0 .03664 .9929 -729.4 12.67)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="none" stroke="url(#linearGradient2802)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.003"/><path d="m1025-232a19.92 8.008 0 0 1-19.92 8.008 19.92 8.008 0 0 1-19.92-8.008 19.92 8.008 0 0 1 19.92-8.008 19.92 8.008 0 0 1 19.92 8.008z" fill="url(#radialGradient2804)" filter="url(#filter8002)"/><g transform="translate(139)" clip-path="url(#clipPath8998)"><path transform="matrix(.9557 0 0 .9557 -96.02 -10.42)" d="m979-261.5c-0.0814 0.8794-0.1271 1.782-0.0937 2.688 0.4838 13.11 13.15 23.75 28.25 23.75 15.1 0 26.95-10.64 26.47-23.75-0.0151-0.4096-0.0239-0.8142-0.0624-1.219-1.114 11.83-11.97 22.23-26.02 22.23-14.63-1e-5 -27.35-11.16-28.55-23.7z" fill="url(#linearGradient2832)" filter="url(#filter7958)" opacity=".8571"/><path transform="matrix(.9557 0 0 .9557 -93.29 -23.31)" d="m979-261.5c-0.0814 0.8794-0.1271 1.782-0.0937 2.688 0.4838 13.11 13.15 23.75 28.25 23.75 15.1 0 26.95-10.64 26.47-23.75-0.0151-0.4096-0.0239-0.8142-0.0624-1.219-1.114 11.83-14.01 23.05-28.06 23.05-14.63-1e-5 -25.31-11.98-26.5-24.52z" fill="url(#linearGradient2832)" filter="url(#filter7958)"/><path transform="matrix(1.025 0 0 1.043 -162.6 -.3998)" d="m979-261.5c-0.0814 0.8794-0.1271 1.782-0.0937 2.688 0.4838 13.11 12.2 23.35 27.31 23.35 15.1 1e-5 27.9-10.25 27.41-23.35-0.0151-0.4096-0.0239-0.8142-0.0624-1.219-1.114 11.83-10.01 23.05-28.06 23.05-14.63 0-25.31-11.98-26.5-24.52z" opacity=".3736"/></g><path transform="translate(-5.8 -7.182)" d="m1034-242.7a4.972 4.972 0 0 1-4.972 4.972 4.972 4.972 0 0 1-4.972-4.972 4.972 4.972 0 0 1 4.972-4.972 4.972 4.972 0 0 1 4.972 4.972z" fill="url(#radialGradient2834)"/><path d="m1004-274c-8.985 0-16.85 3.752-21.63 9.562 2.972 6.218 12.28 10.75 23.25 10.75 9.89 0 18.4-3.657 22.16-8.938-5.06-6.824-13.9-11.38-23.78-11.38z" fill="url(#linearGradient2812)"/></g><g><path transform="matrix(-.6284 -.03801 -.0381 .627 672.3 277.4)" d="m913.2-314.2c-6.344 0-21.67 13.42-10.47 25.28 19.69-4.202 40.21 18.33 49.22 33.72l11.12-5.531c15 3.968 2.751-14.06 2.75-14.09-0.5459-14.84-35.58-39.38-52.62-39.38z" clip-path="url(#clipPath6965)" filter="url(#filter6959)" opacity=".7106"/><path d="m105.7 58.47c7.919 0.479 14.32 5.002 16.75 11.08l3.945 9.363 1.035 2.757c0.5448 1.932 0.7436 3.969 0.5379 6.07-1.028 10.49-11.72 18.41-23.86 17.67-11.56-0.6992-20.28-8.995-20.2-18.84l0.01135-0.5106 0.7227-11.89c0.001832-0.01978 0.001612-0.03899 0.003571-0.05878 0.9082-9.28 10.34-16.29 21.05-15.64z" fill="url(#linearGradient2814)"/><rect transform="matrix(-.5806 .243 .2435 .5792 728.2 280.8)" x="758.1" y="-703.2" width="7.926" height="28.85" ry="0" clip-path="url(#clipPath7001)" fill="url(#linearGradient2816)" filter="url(#filter7023)" opacity=".5678"/><path transform="matrix(-.8886 -.05375 -.07522 .7677 1441 371.4)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="#312f30"/></g><path transform="matrix(-.8269 -.05002 -.06997 .714 1348 351.9)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" clip-path="url(#clipPath6641)" fill="none" filter="url(#filter6637)" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.101"/><path transform="matrix(-.757 -.04578 -.06408 .654 1243 330.8)" d="m1525-289.9c-14 0-25.38 11.37-25.38 25.38s11.37 25.38 25.38 25.38 25.38-11.37 25.38-25.38-11.37-25.38-25.38-25.38zm0 1.25c13.32 0 24.12 10.8 24.12 24.12s-10.91 22.77-24.23 22.77-24.02-9.45-24.02-22.77 10.8-24.12 24.12-24.12z" fill="url(#radialGradient2818)" filter="url(#filter3606)"/><path transform="matrix(-.7318 -.04426 -.06194 .6322 1205 322.1)" d="m1525-289.9c-14 0-25.38 11.37-25.38 25.38s11.37 25.38 25.38 25.38 25.38-11.37 25.38-25.38-11.37-25.38-25.38-25.38zm0 1.25c13.32 0 24.12 10.8 24.12 24.12s-11.14 18.14-24.46 18.14-23.79-4.815-23.79-18.14 10.8-24.12 24.12-24.12z" fill="url(#radialGradient2820)"/><path transform="matrix(-.6332 -.0341 -.04058 .6893 732.1 294.2)" d="m1021-275.2c-5.975-4.137-21.07-5.423-28.75-2.5" fill="none" filter="url(#filter7845)" stroke="url(#linearGradient2822)" stroke-width="1.331"/><path transform="matrix(-.6947 -.04202 -.0588 .6002 1150 308.5)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z"/><path transform="matrix(-.6947 -.04202 -.0588 .6002 1150 308.5)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="url(#radialGradient2824)"/><path transform="matrix(-.7189 -.04348 -.06085 .6211 1186 316.5)" d="m1550-264.5a24.75 24.75 0 0 1-24.75 24.75 24.75 24.75 0 0 1-24.75-24.75 24.75 24.75 0 0 1 24.75-24.75 24.75 24.75 0 0 1 24.75 24.75z" fill="none" stroke="url(#linearGradient2826)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.003"/><path transform="matrix(-.6284 -.03801 -.0381 .627 728.2 280.8)" d="m1025-232a19.92 8.008 0 0 1-19.92 8.008 19.92 8.008 0 0 1-19.92-8.008 19.92 8.008 0 0 1 19.92-8.008 19.92 8.008 0 0 1 19.92 8.008z" fill="url(#radialGradient2828)" filter="url(#filter8002)"/><g transform="matrix(-.6284 -.03801 -.0381 .627 640.8 275.5)" clip-path="url(#clipPath8998)"><path transform="matrix(.9557 0 0 .9557 -96.02 -10.42)" d="m979-261.5c-0.0814 0.8794-0.1271 1.782-0.0937 2.688 0.4838 13.11 13.15 23.75 28.25 23.75 15.1 0 26.95-10.64 26.47-23.75-0.0151-0.4096-0.0239-0.8142-0.0624-1.219-1.114 11.83-11.97 22.23-26.02 22.23-14.63-1e-5 -27.35-11.16-28.55-23.7z" fill="url(#linearGradient2832)" filter="url(#filter7958)" opacity=".8571"/><path transform="matrix(.9557 0 0 .9557 -93.29 -23.31)" d="m979-261.5c-0.0814 0.8794-0.1271 1.782-0.0937 2.688 0.4838 13.11 13.15 23.75 28.25 23.75 15.1 0 26.95-10.64 26.47-23.75-0.0151-0.4096-0.0239-0.8142-0.0624-1.219-1.114 11.83-14.01 23.05-28.06 23.05-14.63-1e-5 -25.31-11.98-26.5-24.52z" fill="url(#linearGradient2832)" filter="url(#filter7958)"/><path transform="matrix(1.025 0 0 1.043 -162.6 -.3998)" d="m979-261.5c-0.0814 0.8794-0.1271 1.782-0.0937 2.688 0.4838 13.11 12.2 23.35 27.31 23.35 15.1 1e-5 27.9-10.25 27.41-23.35-0.0151-0.4096-0.0239-0.8142-0.0624-1.219-1.114 11.83-10.01 23.05-28.06 23.05-14.63 0-25.31-11.98-26.5-24.52z" opacity=".3736"/></g><g><path transform="matrix(-.6284 -.03801 -.0381 .627 754.7 277.9)" d="m1034-242.7a4.972 4.972 0 0 1-4.972 4.972 4.972 4.972 0 0 1-4.972-4.972 4.972 4.972 0 0 1 4.972-4.972 4.972 4.972 0 0 1 4.972 4.972z" fill="url(#radialGradient2834)" opacity=".6484"/><path d="m107.7 70.88c5.646 0.3415 10.45 2.993 13.23 6.817-2.104 3.785-8.124 6.273-15.02 5.856-6.215-0.3759-11.42-2.992-13.58-6.446 3.44-4.086 9.166-6.603 15.38-6.228z" fill="url(#linearGradient2836)"/><path transform="matrix(.7399 -.04062 .03867 .6902 -893.3 296.3)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" clip-path="url(#clipPath10259)" fill="url(#linearGradient2838)" filter="url(#filter10253)"/><path d="m60.35 47.3c0.1109-0.7201 1.078-1.694 3.378-1.694 2.303 0 3.333 0.9554 3.321 1.694l0.8946 7.675h-8.582l0.9887-7.675z" fill="url(#linearGradient2840)"/><path d="m51 56.71s6.157-4.649 12.57-4.649c7.154 0 12.46 4.865 12.46 4.865l-7.152 7.028s-2.276-1.73-4.985-1.838c-2.709-0.1081-5.852 1.406-5.852 1.406l-7.044-6.811z" fill="url(#linearGradient2842)" fill-rule="evenodd"/><path transform="matrix(.9434 -.0522 .0493 .8869 -1156 375.2)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" fill="#3b3b3b" filter="url(#filter5698)"/><path transform="matrix(.8474 -.04689 .04429 .7967 -1032 343.4)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2844)"/><path d="m60.35 47.3c0.1109-0.7201 1.078-1.694 3.378-1.694 2.303 0 3.333 0.9554 3.321 1.694l0.8946 7.675h-8.582l0.9887-7.675z" fill="url(#linearGradient2846)"/></g><g transform="matrix(.6286 -.03478 .03487 .6271 -602.5 302.3)"><path transform="matrix(.2349 0 0 .2214 740.8 -231.7)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" filter="url(#filter5698)"/><path transform="matrix(.211 0 0 .1989 772 -237.9)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="328.4" y="-957.9" width=".4037" height="1.951"/></g><g transform="matrix(.6286 -.03478 .03487 .6271 -566.2 302.5)"><path transform="matrix(.2349 0 0 .2214 740.8 -231.7)" d="m1314-281.5a6.11 6.11 0 0 1-6.11 6.11 6.11 6.11 0 0 1-6.11-6.11 6.11 6.11 0 0 1 6.11-6.11 6.11 6.11 0 0 1 6.11 6.11z" filter="url(#filter5698)"/><path transform="matrix(.211 0 0 .1989 772 -237.9)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2850)"/><rect transform="matrix(.737 .6759 -.8422 .5392 0 0)" x="328.4" y="-957.9" width=".4037" height="1.951"/></g><path transform="matrix(.8474 -.04689 .04429 .7967 -1032 343.4)" d="m1314-281.5a6.5 6.5 0 0 1-6.5 6.5 6.5 6.5 0 0 1-6.5-6.5 6.5 6.5 0 0 1 6.5-6.5 6.5 6.5 0 0 1 6.5 6.5z" fill="url(#linearGradient2852)" opacity=".3553"/></g></g></svg>
diff --git a/share/icons/svg/url-copy.svg b/share/icons/svg/url-copy.svg
deleted file mode 100644
index 1d104240f..000000000
--- a/share/icons/svg/url-copy.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter id="filter5704"><feGaussianBlur stdDeviation="0.90323211"/></filter><linearGradient id="linearGradient4739" x1="398.4" x2="392.5" y1="-369.5" y2="-363.5" gradientTransform="matrix(1.181 0 0 -1.18 -363.3 -328.6)" gradientUnits="userSpaceOnUse"><stop stop-color="#888A85" offset="0"/><stop stop-color="#8C8E89" offset=".0072"/><stop stop-color="#ABACA9" offset=".0673"/><stop stop-color="#C5C6C4" offset=".1347"/><stop stop-color="#DBDBDA" offset=".2115"/><stop stop-color="#EBEBEB" offset=".3012"/><stop stop-color="#F7F7F6" offset=".4122"/><stop stop-color="#FDFDFD" offset=".5679"/><stop stop-color="#fff" offset="1"/></linearGradient><radialGradient id="radialGradient4743" cx="407.2" cy="-379.5" r="94.66" gradientTransform="matrix(1.341 0 0 -1.34 -433.3 -393.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#535557" offset="0"/><stop stop-color="#898A8C" offset=".07095"/><stop stop-color="#ECECEC" offset=".203"/><stop stop-color="#FAFAFA" offset=".2363"/><stop stop-color="#fff" offset=".2722"/><stop stop-color="#FAFAFA" offset=".5313"/><stop stop-color="#EBECEC" offset=".8449"/><stop stop-color="#E1E2E3" offset="1"/></radialGradient><filter id="filter5749"><feGaussianBlur stdDeviation="1.493351"/></filter><filter id="filter3748" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.73328974"/></filter><radialGradient id="radialGradient5865" cx="138.8" cy="147.8" r="92.35" fx="135.3" fy="217.5" gradientUnits="userSpaceOnUse"><stop stop-color="#3cc1ee" offset="0"/><stop stop-color="#141b7c" offset="1"/></radialGradient><filter id="filter6610" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.82949054"/></filter><radialGradient id="radialGradient6555" cx="62.21" cy="59.04" r="36" gradientTransform="matrix(1.073 0 0 1.055 -4.572 -3.271)" gradientUnits="userSpaceOnUse"><stop stop-color="#152281" stop-opacity="0" offset="0"/><stop stop-color="#152281" stop-opacity="0" offset=".8201"/><stop stop-color="#152281" offset="1"/></radialGradient><radialGradient id="radialGradient5504" cx="59.79" cy="63.02" r="36" fx="52.53" fy="39.78" gradientTransform="matrix(1.452 -.008063 .007262 1.307 -28.52 -17.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5490"/><linearGradient id="linearGradient5490"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".1336" offset="1"/></linearGradient><linearGradient id="linearGradient5859" x1="-1101" x2="-1101" y1="458" y2="379.9" gradientUnits="userSpaceOnUse"><stop stop-color="#4fd6ff" offset="0"/><stop stop-color="#4fd6ff" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3793" x="-.0435" y="-.1137" width="1.087" height="1.227" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="2.881027"/></filter><linearGradient id="linearGradient6096" x1="2.286" x2="556.7" y1="278.9" y2="278.9" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6614"/><linearGradient id="linearGradient6614"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6731" x1="61.24" x2="78.93" y1="973.3" y2="973.3" gradientTransform="scale(3.547 .2819)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6733" x1="955.7" x2="972.7" y1="84.82" y2="84.82" gradientTransform="scale(.5335 1.874)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6735" x1="88.94" x2="115" y1="283.2" y2="283.2" gradientTransform="scale(1.586 .6303)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6737" x1="115.2" x2="133.9" y1="189.6" y2="189.6" gradientTransform="scale(1.576 .6347)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6739" x1="257.9" x2="268.2" y1="29.37" y2="29.37" gradientTransform="scale(.5471 1.828)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6741" x1="435.5" x2="451.5" y1="81.81" y2="81.81" gradientTransform="scale(.9151 1.093)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6743" x1="228.5" x2="237.3" y1="52.32" y2="52.32" gradientTransform="scale(.9193 1.088)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient6745" x1="370.8" x2="379.6" y1="27.41" y2="27.41" gradientTransform="scale(.9192 1.088)" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity=".498" offset=".5"/><stop stop-opacity=".657" offset="1"/></linearGradient><linearGradient id="linearGradient7043" x1="22.2" x2="51.63" y1="-3.091" y2="35.57" gradientTransform="matrix(.6956 0 0 .6929 16.26 21.96)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5490"/></defs><path transform="matrix(1.505 0 0 1.505 6.805 -5.109)" d="m8.665 6 1e-5 80 48.65 0.1862c0.3881 0 0.7549-0.1571 1.029-0.4276l19.4-19.88c0.2744-0.2716 0.4316-0.6355 0.4316-1.02l-0.1768-58.86h-69.34z" filter="url(#filter5749)" opacity=".45"/><path d="m23.85 8.284 1.5e-5 111.7h68c0.537 0 1.044-0.2194 1.424-0.5972l25.98-25.1c0.3796-0.3792 0.5972-0.8875 0.5972-1.424l0.2114-84.6-96.21-0.00168z" fill="#fff"/><path d="m28.02 12 1.3e-5 104h62.91c0.4896 0 0.9522-0.2 1.298-0.5444l23.08-22.6c0.346-0.3458 0.5444-0.8091 0.5444-1.298v-79.55h-87.83z" fill="url(#radialGradient4743)"/><path transform="matrix(1.317 0 0 1.326 222.5 14.63)" d="m-99.99 80.6s7.392-6.697 11.18-10.48c3.785-3.782 11.41-12.09 11.41-12.09s-11.14-0.6269-23.14-0.6269c0 12 0.5521 23.2 0.5521 23.2z" filter="url(#filter5704)" opacity=".3"/><path d="m92.54 120s10.33-8.044 14.8-12.51c4.467-4.463 12.29-13.55 12.29-13.55s-10.99 0.8407-25.15 0.8407c0 14.16-1.929 25.22-1.929 25.22z" fill="url(#linearGradient4739)"/><g fill="#fff"><rect x="178.9" y="109.7" width="1.47" height="0" opacity=".5779"/><g fill-opacity=".7569"><path d="m-54.77 2.088v-4.108 4.108z"/><path d="m98.35 0.3839v-3.242 3.242z"/><path d="m-1843-1245v-1.888 1.888z"/></g></g><g transform="matrix(1.094 0 0 1.094 -19.85 -14.42)"><circle transform="matrix(.7819 0 0 .7819 13.9 15.23)" cx="61.18" cy="58.71" r="48.95" fill="#11196b" filter="url(#filter3748)"/><circle transform="matrix(.4122 0 0 .4122 4.564 -.02984)" cx="138.8" cy="147.8" r="92.35" fill="url(#radialGradient5865)"/><g id="Background_Grid" transform="matrix(.1366 0 0 .1366 23.41 22.73)" filter="url(#filter6610)" opacity=".1273" stroke="#fff" stroke-opacity=".5185" stroke-width=".9733"><g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".5185"><g stroke-width=".6552"><polyline points="22.07 306.3 22.64 308.2 23.24 310.2 23.84 312.2 24.47 314.1 25.11 316.1 25.77 318 26.44 320 27.13 321.9 27.84 323.9 28.57 325.8 29.31 327.7 30.07 329.7 30.85 331.6 31.64 333.5 32.45 335.5 33.28 337.4 34.12 339.3 34.98 341.2 35.86 343.1 36.75 345 37.66 346.9 38.58 348.8 39.52 350.7 40.48 352.6 41.45 354.5 42.44 356.3 43.44 358.2 44.46 360.1 45.5 361.9 46.55 363.8 47.62 365.6 48.7 367.5"/><polyline points="146.3 468 148.1 469.2 150 470.4 152 471.6 153.9 472.8 155.8 474 157.7 475.1 159.7 476.3 161.6 477.4 163.6 478.5 165.6 479.6 167.5 480.7 169.5 481.8 171.5 482.9 173.5 483.9 175.5 485 177.5 486 179.5 487 181.6 488 183.6 489 185.6 490 187.7 490.9 189.7 491.9 191.8 492.8 193.8 493.7 195.9 494.6 198 495.5 200.1 496.3 202.1 497.2 204.2 498 206.3 498.9 208.4 499.7 210.5 500.5"/><polyline points="91.05 422.6 92.6 424.2 94.16 425.8 95.73 427.4 97.32 428.9 98.92 430.4 100.5 432 102.1 433.5 103.8 435 105.4 436.5 107.1 438 108.8 439.5 110.4 441 112.1 442.4 113.8 443.9 115.5 445.3 117.3 446.7 119 448.2 120.7 449.6 122.5 451 124.3 452.3 126 453.7 127.8 455.1 129.6 456.4 131.4 457.7 133.3 459.1 135.1 460.4 136.9 461.7 138.8 463 140.6 464.2 142.5 465.5 144.4 466.8 146.3 468"/><polyline points="12.99 243.2 13 245.2 13.03 247.1 13.07 249.1 13.13 251.1 13.21 253 13.31 255 13.43 257 13.56 258.9 13.71 260.9 13.88 262.9 14.07 264.9 14.27 266.8 14.5 268.8 14.74 270.8 15 272.7 15.27 274.7 15.56 276.7 15.88 278.7 16.2 280.6 16.55 282.6 16.92 284.6 17.3 286.6 17.7 288.6 18.11 290.5 18.55 292.5 19 294.5 19.47 296.4 19.95 298.4 20.46 300.4 20.98 302.4 21.52 304.3 22.07 306.3"/><polyline points="35.86 149.5 34.98 151.2 34.12 152.8 33.28 154.5 32.45 156.2 31.64 157.9 30.85 159.6 30.07 161.4 29.31 163.1 28.57 164.8 27.84 166.6 27.13 168.3 26.44 170.1 25.77 171.9 25.11 173.6 24.47 175.4 23.84 177.2 23.23 179 22.64 180.8 22.07 182.6"/><polyline points="22.07 182.6 21.52 184.4 20.98 186.3 20.46 188.1 19.95 189.9 19.47 191.8 19 193.6 18.55 195.5 18.11 197.3 17.7 199.2 17.3 201 16.92 202.9 16.55 204.8 16.2 206.7 15.88 208.6 15.56 210.5 15.27 212.4 15 214.3 14.74 216.2 14.5 218.1 14.27 220 14.07 221.9 13.88 223.8 13.71 225.8 13.56 227.7 13.43 229.6 13.31 231.6 13.21 233.5 13.13 235.4 13.07 237.4 13.03 239.3 13 241.3 12.99 243.2"/><polyline points="48.7 367.5 49.8 369.3 50.91 371.1 52.04 373 53.18 374.8 54.34 376.6 55.52 378.4 56.7 380.2 57.91 382 59.13 383.8 60.36 385.5 61.61 387.3 62.87 389.1 64.15 390.8 65.44 392.6 66.75 394.3 68.07 396.1 69.4 397.8 70.75 399.5 72.11 401.2 73.49 402.9 74.88 404.6 76.28 406.3 77.7 408 79.13 409.6 80.58 411.3 82.03 412.9 83.5 414.6 84.99 416.2 86.48 417.8 87.99 419.4 89.52 421 91.05 422.6"/><polyline points="277.3 517.5 275.1 517.2 273 516.9 270.8 516.6 268.6 516.2 266.4 515.8 264.3 515.4 262.1 515 259.9 514.6 257.7 514.1 255.6 513.7 253.4 513.2 251.2 512.7 249 512.2 246.9 511.7 244.7 511.1 242.6 510.6 240.4 510 238.2 509.4 236.1 508.8 233.9 508.2 231.8 507.6 229.7 507 227.5 506.3 225.4 505.6 223.2 504.9 221.1 504.2 219 503.5 216.9 502.8 214.8 502 212.6 501.2 210.5 500.5"/><polyline points="208.1 509.7 205.9 509.2 203.7 508.7 201.6 508.1 199.4 507.6 197.3 507 195.1 506.4 193 505.8 190.8 505.2 188.7 504.5 186.6 503.9 184.4 503.2 182.3 502.5 180.2 501.8 178.1 501.1 176 500.4 173.9 499.7 171.8 498.9 169.8 498.1 167.7 497.4 165.6 496.6 163.6 495.7 161.5 494.9 159.5 494.1 157.5 493.2 155.5 492.3 153.4 491.5 151.4 490.6 149.4 489.6 147.5 488.7 145.5 487.8 143.5 486.8 141.6 485.8"/><polyline points="84.4 447.9 86.01 449.2 87.62 450.6 89.25 452 90.89 453.3 92.55 454.6 94.21 456 95.89 457.3 97.58 458.6 99.29 459.8 101 461.1 102.7 462.4 104.5 463.6 106.2 464.9 108 466.1 109.8 467.3 111.5 468.5 113.3 469.7 115.1 470.8 117 472 118.8 473.1 120.6 474.3 122.5 475.4 124.3 476.5 126.2 477.6 128.1 478.7 130 479.7 131.9 480.8 133.8 481.8 135.7 482.8 137.7 483.9 139.6 484.9 141.6 485.8"/><polyline points="40.56 398.4 41.69 400.1 42.84 401.8 44.02 403.4 45.2 405.1 46.4 406.8 47.61 408.4 48.84 410 50.09 411.7 51.35 413.3 52.63 414.9 53.92 416.5 55.23 418.1 56.55 419.7 57.89 421.3 59.24 422.8 60.61 424.4 61.99 425.9 63.38 427.5 64.8 429 66.22 430.5 67.66 432 69.11 433.5 70.58 435 72.06 436.5 73.56 437.9 75.06 439.4 76.59 440.8 78.12 442.3 79.68 443.7 81.24 445.1 82.82 446.5 84.4 447.9"/><polyline points="3.598 280.9 3.625 282.8 3.672 284.8 3.737 286.8 3.82 288.7 3.922 290.7 4.042 292.6 4.18 294.6 4.337 296.5 4.512 298.5 4.707 300.4 4.917 302.4 5.148 304.3 5.397 306.2 5.665 308.2 5.95 310.1 6.253 312.1 6.576 314 6.916 315.9 7.274 317.9 7.651 319.8 8.046 321.7 8.459 323.6 8.89 325.5 9.341 327.5 9.807 329.4 10.29 331.3 10.8 333.2 11.32 335.1 11.86 337 12.42 338.9 12.99 340.8"/><polyline points="12.99 340.8 13.58 342.7 14.2 344.5 14.82 346.4 15.47 348.3 16.14 350.2 16.82 352 17.52 353.9 18.23 355.7 18.97 357.6 19.72 359.4 20.49 361.3 21.27 363.1 22.08 364.9 22.9 366.7 23.74 368.6 24.59 370.4 25.47 372.2 26.35 374 27.26 375.8 28.18 377.5 29.12 379.3 30.08 381.1 31.06 382.9 32.04 384.6 33.05 386.4 34.07 388.1 35.11 389.8 36.17 391.6 37.24 393.3 38.33 395 39.44 396.7 40.56 398.4"/><polyline points="277.3 517.8 275 517.8 272.7 517.8 270.5 517.7 268.2 517.6 266 517.6 263.7 517.5 261.5 517.3 259.2 517.2 257 517 254.7 516.9 252.5 516.7 250.2 516.5 248 516.3 245.7 516.1 243.5 515.8 241.3 515.5 239 515.3 236.8 515 234.6 514.7 232.3 514.3 230.1 514 227.9 513.6 225.7 513.3 223.5 512.9 221.3 512.5 219.1 512 216.9 511.6 214.7 511.2 212.5 510.7 210.3 510.2 208.1 509.7"/><polyline points="48.7 429.3 49.8 430.9 50.91 432.4 52.04 433.9 53.18 435.4 54.34 436.9 55.52 438.4 56.71 439.9 57.91 441.4 59.13 442.8 60.36 444.3 61.61 445.7 62.88 447.1 64.15 448.5 65.44 449.9 66.75 451.3 68.07 452.7 69.4 454.1 70.75 455.4 72.11 456.8 73.49 458.1 74.88 459.4 76.28 460.7 77.7 462 79.13 463.3 80.58 464.6 82.03 465.8 83.5 467.1 84.99 468.3 86.49 469.5 88 470.7 89.52 471.9 91.05 473.1"/><polyline points="146.3 503.7 144.4 503 142.5 502.2 140.6 501.5 138.8 500.7 136.9 499.9 135.1 499.1 133.3 498.3 131.4 497.4 129.6 496.6 127.8 495.7 126 494.8 124.3 493.9 122.5 493 120.7 492.1 119 491.2 117.3 490.2 115.5 489.2 113.8 488.3 112.1 487.3 110.4 486.3 108.8 485.2 107.1 484.2 105.4 483.2 103.8 482.1 102.2 481 100.5 479.9 98.92 478.8 97.32 477.7 95.74 476.6 94.16 475.4 92.6 474.3 91.05 473.1"/><polyline points="210.5 518.9 208.4 518.7 206.3 518.5 204.2 518.2 202.1 517.9 200.1 517.6 198 517.3 195.9 517 193.8 516.6 191.8 516.3 189.7 515.9 187.7 515.5 185.6 515.1 183.6 514.7 181.6 514.2 179.5 513.8 177.5 513.3 175.5 512.8 173.5 512.3 171.5 511.8 169.5 511.3 167.5 510.7 165.6 510.2 163.6 509.6 161.6 509 159.7 508.4 157.7 507.8 155.8 507.1 153.9 506.5 152 505.8 150 505.1 148.1 504.4 146.3 503.7"/><polyline points="36.75 410.1 37.66 411.7 38.58 413.4 39.52 415 40.48 416.6 41.45 418.2 42.44 419.9 43.44 421.5 44.46 423 45.5 424.6 46.55 426.2 47.62 427.8 48.7 429.3"/><polyline points="277.3 518.1 275.1 518.4 273 518.7 270.8 518.9 268.6 519.1 266.4 519.3 264.3 519.5 262.1 519.7 259.9 519.8 257.7 520 255.6 520.1 253.4 520.2 251.2 520.3 249 520.4 246.9 520.4 244.7 520.5 242.6 520.5 240.4 520.5 238.2 520.5 236.1 520.5 233.9 520.4 231.8 520.4 229.7 520.3 227.5 520.2 225.4 520.1 223.2 520 221.1 519.9 219 519.7 216.9 519.5 214.8 519.4 212.6 519.2 210.5 518.9"/><polyline points="217.7 527.6 215.8 527.6 213.9 527.6 212 527.6 210.1 527.6 208.3 527.5 206.4 527.5 204.6 527.4 202.7 527.3 200.9 527.2 199 527.1 197.2 527 195.3 526.8 193.5 526.7 191.7 526.5 189.9 526.3 188.1 526.1 186.3 525.8 184.5 525.6 182.7 525.3 180.9 525 179.1 524.7 177.3 524.4 175.6 524.1 173.8 523.7 172.1 523.3 170.3 523 168.6 522.6 166.9 522.2 165.1 521.7 163.4 521.3 161.7 520.8 160 520.3"/><polyline points="110.5 496.6 109.2 495.7 107.8 494.6 106.5 493.6 105.1 492.6 103.8 491.5 102.5 490.5 101.2 489.4 99.86 488.3"/><polyline points="160 520.3 158.3 519.8 156.7 519.3 155 518.8 153.3 518.2 151.7 517.7 150 517.1 148.4 516.5 146.8 515.9 145.1 515.3 143.5 514.6 141.9 514 140.3 513.3 138.7 512.6 137.2 511.9 135.6 511.2 134 510.5 132.5 509.7 131 508.9 129.4 508.2 127.9 507.4 126.4 506.6 124.9 505.7 123.4 504.9 122 504 120.5 503.2 119 502.3 117.6 501.4 116.2 500.5 114.7 499.5 113.3 498.6 111.9 497.6 110.5 496.6"/><polyline points="277.6 518.4 275.6 518.9 273.6 519.5 271.7 520 269.7 520.5 267.8 520.9 265.8 521.4 263.9 521.8 261.9 522.3 260 522.7 258 523.1 256.1 523.5 254.1 523.8 252.2 524.2 250.3 524.5 248.3 524.8 246.4 525.1 244.4 525.4 242.5 525.6 240.6 525.9 238.7 526.1 236.7 526.3 234.8 526.5 232.9 526.7 231 526.9 229.1 527 227.2 527.2 225.2 527.3 223.3 527.4 221.4 527.4 219.6 527.5 217.7 527.6"/><polyline points="277.9 518.6 276.3 519.4 274.7 520.2 273.1 520.9 271.5 521.6 269.9 522.3 268.3 523 266.7 523.7 265.2 524.4 263.6 525 262 525.6 260.4 526.3 258.8 526.9 257.2 527.4 255.6 528 254 528.5 252.5 529.1 250.9 529.6 249.3 530.1 247.7 530.5 246.2 531 244.6 531.4 243 531.9 241.4 532.3 239.9 532.7 238.3 533.1 236.8 533.4 235.2 533.8 233.7 534.1 232.1 534.4 230.6 534.7 229 535"/><polyline points="229 535 227.5 535.2 225.9 535.4 224.4 535.7 222.9 535.9 221.3 536.1 219.8 536.2 218.3 536.4 216.8 536.5 215.3 536.6 213.8 536.7 212.3 536.8 210.8 536.9 209.3 536.9 207.8 537 206.3 537 204.8 537 203.4 537 201.9 536.9 200.4 536.9 199 536.8 197.5 536.7 196.1 536.6 194.7 536.5 193.2 536.4 191.8 536.2 190.4 536 189 535.8 187.5 535.6 186.1 535.4 184.7 535.1 183.3 534.9 182 534.6"/><polyline points="182 534.6 180.6 534.3 179.2 534 177.8 533.7 176.5 533.3 175.1 533 173.8 532.6 172.4 532.2 171.1 531.8 169.8 531.3 168.5 530.9 167.2 530.4 165.9 529.9 164.6 529.4 163.3 528.9 162 528.4 160.7 527.9 159.5 527.3 158.2 526.7 157 526.1"/><polyline points="278.4 518.8 277.2 519.8 276.1 520.7 275 521.6 273.9 522.5 272.7 523.4 271.6 524.3 270.5 525.1 269.4 526 268.2 526.8 267.1 527.6 266 528.4 264.9 529.2 263.7 529.9 262.6 530.7 261.5 531.4 260.4 532.1 259.3 532.8 258.2 533.5 257 534.1 255.9 534.8 254.8 535.4 253.7 536 252.6 536.6 251.5 537.1 250.4 537.7 249.3 538.2 248.2 538.7 247.1 539.2 246 539.7 244.9 540.2 243.8 540.6"/><polyline points="243.8 540.6 242.7 541.1 241.6 541.5 240.5 541.9 239.5 542.2 238.4 542.6 237.3 542.9 236.2 543.3 235.2 543.6 234.1 543.9 233 544.1 232 544.4 230.9 544.6 229.9 544.8 228.8 545 227.8 545.2 226.7 545.4 225.7 545.5 224.6 545.6 223.6 545.8 222.6 545.9 221.5 545.9 220.5 546 219.5 546 218.5 546 217.5 546 216.5 546 215.5 546 214.5 545.9 213.5 545.9 212.5 545.8 211.5 545.7 210.5 545.6"/><polyline points="210.5 545.6 209.6 545.4 208.6 545.3 207.6 545.1 206.7 544.9 205.7 544.7 204.8 544.5 203.8 544.2"/><polyline points="278.9 518.9 278.3 520 277.8 521 277.2 522.1 276.6 523.1 276 524.1 275.4 525.1 274.8 526 274.3 527 273.7 527.9 273.1 528.9 272.5 529.8 271.9 530.6 271.3 531.5 270.8 532.4 270.2 533.2 269.6 534 269 534.8 268.5 535.6 267.9 536.4 267.3 537.1 266.7 537.8 266.2 538.6 265.6 539.2 265 539.9 264.4 540.6 263.9 541.2 263.3 541.9 262.7 542.5 262.2 543.1 261.6 543.6 261 544.2"/><polyline points="261 544.2 260.5 544.7 259.9 545.2 259.3 545.8 258.8 546.2 258.2 546.7 257.7 547.2 257.1 547.6 256.6 548 256 548.4 255.5 548.8 254.9 549.1 254.4 549.5 253.8 549.8 253.3 550.1 252.7 550.4 252.2 550.6 251.6 550.9 251.1 551.1 250.6 551.3 250 551.5 249.5 551.7 249 551.9 248.4 552 247.9 552.1 247.4 552.2 246.9 552.3 246.4 552.4 245.8 552.4 245.3 552.5 244.8 552.5 244.3 552.5 243.8 552.5"/><line x1="243.8" x2="243.3" y1="552.5" y2="552.4"/><polyline points="279.5 545.4 279.5 546 279.5 546.5 279.5 547.1 279.5 547.6 279.5 548.1 279.5 548.6 279.5 549.1 279.5 549.5 279.5 549.9 279.5 550.4 279.5 550.7 279.5 551.1 279.5 551.5 279.5 551.8 279.5 552.1 279.5 552.4 279.5 552.7 279.5 553 279.5 553.2 279.5 553.5 279.5 553.7 279.5 553.9 279.5 554.1 279.5 554.2 279.5 554.4 279.5 554.5 279.5 554.6 279.5 554.7 279.5 554.7 279.5 554.8 279.5 554.8 279.5 554.8"/><polyline points="279.5 519 279.5 520.1 279.5 521.2 279.5 522.2 279.5 523.3 279.5 524.3 279.5 525.4 279.5 526.4 279.5 527.3 279.5 528.3 279.5 529.3 279.5 530.2 279.5 531.1 279.5 532 279.5 532.9 279.5 533.8 279.5 534.7 279.5 535.5 279.5 536.3 279.5 537.1 279.5 537.9 279.5 538.7 279.5 539.4 279.5 540.2 279.5 540.9 279.5 541.6 279.5 542.3 279.5 542.9 279.5 543.6 279.5 544.2 279.5 544.8 279.5 545.4"/><polyline points="298 544.2 298.6 544.7 299.1 545.2 299.7 545.8 300.2 546.2 300.8 546.7 301.4 547.2 301.9 547.6 302.5 548 303 548.4 303.6 548.8 304.1 549.1 304.7 549.5 305.2 549.8 305.8 550.1 306.3 550.4 306.8 550.6 307.4 550.9 307.9 551.1 308.4 551.3 309 551.5 309.5 551.7 310 551.9 310.6 552 311.1 552.1 311.6 552.2 312.1 552.3 312.7 552.4 313.2 552.4 313.7 552.5 314.2 552.5 314.7 552.5 315.2 552.5"/><polyline points="280.1 518.9 280.7 520 281.3 521 281.8 522.1 282.4 523.1 283 524.1 283.6 525.1 284.2 526 284.8 527 285.3 527.9 285.9 528.9 286.5 529.8 287.1 530.6 287.7 531.5 288.2 532.4 288.8 533.2 289.4 534 290 534.8 290.6 535.6 291.1 536.4 291.7 537.1 292.3 537.8 292.9 538.6 293.4 539.2 294 539.9 294.6 540.6 295.2 541.2 295.7 541.9 296.3 542.5 296.9 543.1 297.4 543.6 298 544.2"/><line x1="315.2" x2="315.7" y1="552.5" y2="552.4"/><polyline points="315.2 540.6 316.3 541.1 317.4 541.5 318.5 541.9 319.6 542.2 320.6 542.6 321.7 542.9 322.8 543.3 323.9 543.6 324.9 543.9 326 544.1 327 544.4 328.1 544.6 329.2 544.8 330.2 545 331.3 545.2 332.3 545.4 333.3 545.5 334.4 545.6 335.4 545.8 336.4 545.9 337.5 545.9 338.5 546 339.5 546 340.5 546 341.5 546 342.5 546 343.5 546 344.5 545.9 345.5 545.9 346.5 545.8 347.5 545.7 348.5 545.6"/><polyline points="280.6 518.8 281.8 519.8 282.9 520.7 284 521.6 285.1 522.5 286.3 523.4 287.4 524.3 288.5 525.1 289.7 526 290.8 526.8 291.9 527.6 293 528.4 294.2 529.2 295.3 529.9 296.4 530.7 297.5 531.4 298.6 532.1 299.8 532.8 300.9 533.5 302 534.1 303.1 534.8 304.2 535.4 305.3 536 306.4 536.6 307.5 537.1 308.6 537.7 309.7 538.2 310.8 538.7 311.9 539.2 313 539.7 314.1 540.2 315.2 540.6"/><polyline points="348.5 545.6 349.5 545.4 350.4 545.3 351.4 545.1 352.4 544.9 353.3 544.7 354.3 544.5 355.2 544.2"/><polyline points="281.1 518.6 282.7 519.4 284.3 520.2 285.9 520.9 287.5 521.6 289.1 522.3 290.7 523 292.3 523.7 293.9 524.4 295.4 525 297 525.6 298.6 526.3 300.2 526.9 301.8 527.4 303.4 528 305 528.5 306.6 529.1 308.1 529.6 309.7 530.1 311.3 530.5 312.9 531 314.4 531.4 316 531.9 317.6 532.3 319.1 532.7 320.7 533.1 322.3 533.4 323.8 533.8 325.4 534.1 326.9 534.4 328.5 534.7 330 535"/><polyline points="330 535 331.5 535.2 333.1 535.4 334.6 535.7 336.1 535.9 337.7 536.1 339.2 536.2 340.7 536.4 342.2 536.5 343.7 536.6 345.2 536.7 346.7 536.8 348.2 536.9 349.7 536.9 351.2 537 352.7 537 354.2 537 355.6 537 357.1 536.9 358.6 536.9 360 536.8 361.5 536.7 362.9 536.6 364.4 536.5 365.8 536.3 367.2 536.2 368.6 536 370.1 535.8 371.5 535.6 372.9 535.4 374.3 535.1 375.7 534.9 377.1 534.6"/><polyline points="377.1 534.6 378.4 534.3 379.8 534 381.2 533.7 382.5 533.3 383.9 533 385.2 532.6 386.6 532.2 387.9 531.8 389.2 531.3 390.5 530.9 391.8 530.4 393.1 529.9 394.4 529.4 395.7 528.9 397 528.4 398.3 527.9 399.5 527.3 400.8 526.7 402 526.1"/><polyline points="448.5 496.6 449.8 495.6 451.2 494.6 452.6 493.6 453.9 492.6 455.2 491.5 456.6 490.5 457.9 489.4 459.2 488.3"/><polyline points="399 520.3 400.7 519.8 402.4 519.3 404 518.8 405.7 518.2 407.3 517.7 409 517.1 410.6 516.5 412.3 515.9 413.9 515.3 415.5 514.6 417.1 514 418.7 513.3 420.3 512.6 421.8 511.9 423.4 511.2 425 510.5 426.5 509.7 428.1 508.9 429.6 508.2 431.1 507.4 432.6 506.6 434.1 505.7 435.6 504.9 437.1 504 438.5 503.2 440 502.3 441.4 501.4 442.9 500.5 444.3 499.5 445.7 498.6 447.1 497.6 448.5 496.6"/><polyline points="341.4 527.6 343.2 527.6 345.1 527.6 347 527.6 348.9 527.6 350.7 527.5 352.6 527.5 354.5 527.4 356.3 527.3 358.2 527.2 360 527.1 361.8 527 363.7 526.8 365.5 526.7 367.3 526.5 369.1 526.3 370.9 526.1 372.8 525.8 374.5 525.6 376.3 525.3 378.1 525 379.9 524.7 381.7 524.4 383.4 524.1 385.2 523.7 386.9 523.3 388.7 523 390.4 522.6 392.1 522.1 393.9 521.7 395.6 521.3 397.3 520.8 399 520.3"/><polyline points="281.5 518.4 283.4 518.9 285.4 519.5 287.3 520 289.3 520.5 291.2 520.9 293.2 521.4 295.1 521.8 297.1 522.3 299 522.7 301 523.1 302.9 523.5 304.9 523.8 306.8 524.2 308.8 524.5 310.7 524.8 312.6 525.1 314.6 525.4 316.5 525.6 318.4 525.9 320.4 526.1 322.3 526.3 324.2 526.5 326.1 526.7 328 526.9 330 527 331.9 527.2 333.8 527.3 335.7 527.4 337.6 527.4 339.5 527.5 341.4 527.6"/><polyline points="412.8 503.7 414.6 503 416.5 502.2 418.4 501.4 420.2 500.7 422.1 499.9 423.9 499.1 425.8 498.3 427.6 497.4 429.4 496.6 431.2 495.7 433 494.8 434.7 493.9 436.5 493 438.3 492.1 440 491.2 441.7 490.2 443.5 489.2 445.2 488.3 446.9 487.3 448.6 486.3 450.3 485.2 451.9 484.2 453.6 483.2 455.2 482.1 456.9 481 458.5 479.9 460.1 478.8 461.7 477.7 463.3 476.6 464.9 475.4 466.4 474.3 468 473.1"/><polyline points="281.7 518.1 283.9 518.4 286 518.7 288.2 518.9 290.4 519.1 292.6 519.3 294.8 519.5 296.9 519.7 299.1 519.8 301.3 520 303.5 520.1 305.6 520.2 307.8 520.3 310 520.4 312.1 520.4 314.3 520.5 316.5 520.5 318.6 520.5 320.8 520.5 322.9 520.5 325.1 520.4 327.2 520.4 329.4 520.3 331.5 520.2 333.6 520.1 335.8 520 337.9 519.9 340 519.7 342.1 519.5 344.3 519.4 346.4 519.2 348.5 518.9"/><polyline points="510.3 429.3 511.4 427.8 512.5 426.2 513.5 424.6 514.6 423 515.6 421.5 516.6 419.9 517.6 418.2 518.5 416.6 519.5 415 520.4 413.4 521.4 411.7 522.3 410.1"/><polyline points="468 473.1 469.5 471.9 471 470.7 472.5 469.5 474 468.3 475.5 467.1 477 465.8 478.4 464.6 479.9 463.3 481.3 462 482.7 460.7 484.1 459.4 485.5 458.1 486.9 456.8 488.3 455.4 489.6 454.1 490.9 452.7 492.3 451.3 493.6 449.9 494.9 448.5 496.1 447.1 497.4 445.7 498.7 444.3 499.9 442.8 501.1 441.4 502.3 439.9 503.5 438.4 504.7 436.9 505.8 435.4 507 433.9 508.1 432.4 509.2 430.9 510.3 429.3"/><polyline points="348.5 518.9 350.6 518.7 352.7 518.5 354.8 518.2 356.9 517.9 359 517.6 361 517.3 363.1 517 365.2 516.6 367.2 516.3 369.3 515.9 371.3 515.5 373.4 515.1 375.4 514.7 377.5 514.2 379.5 513.8 381.5 513.3 383.5 512.8 385.5 512.3 387.5 511.8 389.5 511.3 391.5 510.7 393.5 510.2 395.4 509.6 397.4 509 399.3 508.4 401.3 507.8 403.2 507.1 405.1 506.5 407.1 505.8 409 505.1 410.9 504.4 412.8 503.7"/><polyline points="474.6 447.9 476.2 446.5 477.8 445.1 479.3 443.7 480.9 442.3 482.4 440.8 483.9 439.4 485.5 437.9 487 436.5 488.4 435 489.9 433.5 491.4 432 492.8 430.5 494.2 429 495.6 427.5 497 425.9 498.4 424.4 499.8 422.8 501.1 421.3 502.5 419.7 503.8 418.1 505.1 416.5 506.4 414.9 507.7 413.3 508.9 411.7 510.2 410 511.4 408.4 512.6 406.8 513.8 405.1 515 403.4 516.2 401.8 517.3 400.1 518.5 398.4"/><polyline points="417.5 485.8 419.4 484.9 421.4 483.9 423.3 482.8 425.2 481.8 427.1 480.8 429 479.7 430.9 478.7 432.8 477.6 434.7 476.5 436.5 475.4 438.4 474.3 440.2 473.1 442 472 443.9 470.8 445.7 469.7 447.5 468.5 449.3 467.3 451 466.1 452.8 464.9 454.5 463.6 456.3 462.4 458 461.1 459.7 459.8 461.4 458.6 463.1 457.3 464.8 456 466.5 454.6 468.1 453.3 469.8 452 471.4 450.6 473 449.2 474.6 447.9"/><polyline points="350.9 509.7 353.1 509.2 355.3 508.7 357.4 508.1 359.6 507.6 361.8 507 363.9 506.4 366.1 505.8 368.2 505.2 370.3 504.5 372.5 503.9 374.6 503.2 376.7 502.5 378.8 501.8 380.9 501.1 383 500.4 385.1 499.7 387.2 498.9 389.3 498.1 391.3 497.4 393.4 496.6 395.4 495.7 397.5 494.9 399.5 494.1 401.5 493.2 403.6 492.3 405.6 491.5 407.6 490.6 409.6 489.6 411.6 488.7 413.5 487.8 415.5 486.8 417.5 485.8"/><polyline points="281.8 517.8 284 517.8 286.3 517.8 288.5 517.7 290.8 517.6 293 517.6 295.3 517.5 297.6 517.3 299.8 517.2 302.1 517 304.3 516.9 306.6 516.7 308.8 516.5 311 516.3 313.3 516.1 315.5 515.8 317.8 515.5 320 515.3 322.2 515 324.4 514.7 326.7 514.3 328.9 514 331.1 513.6 333.3 513.3 335.5 512.9 337.8 512.5 340 512 342.2 511.6 344.4 511.2 346.5 510.7 348.7 510.2 350.9 509.7"/><polyline points="518.5 398.4 519.6 396.7 520.7 395 521.8 393.3 522.8 391.6 523.9 389.8 524.9 388.1 526 386.4 527 384.6 528 382.8 528.9 381.1 529.9 379.3 530.8 377.5 531.8 375.8 532.7 374 533.5 372.2 534.4 370.4 535.3 368.6 536.1 366.7 536.9 364.9 537.7 363.1 538.5 361.3 539.3 359.4 540 357.6 540.8 355.7 541.5 353.9 542.2 352 542.9 350.2 543.5 348.3 544.2 346.4 544.8 344.5 545.4 342.7 546 340.8"/><polyline points="546 340.8 546.6 338.9 547.2 337 547.7 335.1 548.2 333.2 548.7 331.3 549.2 329.4 549.7 327.5 550.1 325.5 550.6 323.6 551 321.7 551.4 319.8 551.7 317.9 552.1 315.9 552.4 314 552.8 312.1 553.1 310.1 553.4 308.2 553.6 306.2 553.9 304.3 554.1 302.4 554.3 300.4 554.5 298.5 554.7 296.5 554.8 294.6 555 292.6 555.1 290.7 555.2 288.7 555.3 286.8 555.3 284.8 555.4 282.8 555.4 280.9"/><polyline points="510.3 367.5 511.4 365.6 512.5 363.8 513.5 361.9 514.6 360.1 515.6 358.2 516.6 356.3 517.6 354.5 518.5 352.6 519.5 350.7 520.4 348.8 521.4 346.9 522.3 345 523.2 343.1 524 341.2 524.9 339.3 525.7 337.4 526.6 335.5 527.4 333.5 528.2 331.6 528.9 329.7 529.7 327.7 530.4 325.8 531.2 323.9 531.9 321.9 532.6 320 533.2 318 533.9 316.1 534.5 314.1 535.2 312.2 535.8 310.2 536.4 308.2 536.9 306.3"/><polyline points="536.9 182.6 537.5 184.4 538 186.3 538.6 188.1 539.1 189.9 539.5 191.8 540 193.6 540.5 195.5 540.9 197.3 541.3 199.2 541.7 201 542.1 202.9 542.5 204.8 542.8 206.7 543.1 208.6 543.4 210.5 543.7 212.4 544 214.3 544.3 216.2 544.5 218.1 544.7 220 544.9 221.9 545.1 223.8 545.3 225.8 545.5 227.7 545.6 229.6 545.7 231.6 545.8 233.5 545.9 235.4 545.9 237.4 546 239.3 546 241.3 546 243.2"/><polyline points="536.9 306.3 537.5 304.3 538 302.4 538.6 300.4 539.1 298.4 539.5 296.4 540 294.5 540.5 292.5 540.9 290.5 541.3 288.6 541.7 286.6 542.1 284.6 542.5 282.6 542.8 280.7 543.1 278.7 543.4 276.7 543.7 274.7 544 272.7 544.3 270.8 544.5 268.8 544.7 266.8 544.9 264.9 545.1 262.9 545.3 260.9 545.5 258.9 545.6 257 545.7 255 545.8 253 545.9 251.1 545.9 249.1 546 247.1 546 245.2 546 243.2"/><polyline points="412.8 468 414.6 466.8 416.5 465.5 418.4 464.2 420.2 463 422.1 461.7 423.9 460.4 425.8 459.1 427.6 457.8 429.4 456.4 431.2 455.1 433 453.7 434.7 452.3 436.5 451 438.3 449.6 440 448.2 441.8 446.7 443.5 445.3 445.2 443.9 446.9 442.4 448.6 441 450.3 439.5 451.9 438 453.6 436.5 455.2 435 456.9 433.5 458.5 432 460.1 430.4 461.7 428.9 463.3 427.4 464.9 425.8 466.4 424.2 468 422.6"/><polyline points="281.7 517.5 283.9 517.2 286 516.9 288.2 516.6 290.4 516.2 292.6 515.8 294.8 515.4 296.9 515 299.1 514.6 301.3 514.1 303.5 513.7 305.6 513.2 307.8 512.7 310 512.2 312.1 511.7 314.3 511.1 316.5 510.6 318.6 510 320.8 509.4 322.9 508.8 325.1 508.2 327.2 507.6 329.4 507 331.5 506.3 333.6 505.6 335.8 504.9 337.9 504.2 340 503.5 342.1 502.8 344.3 502 346.4 501.2 348.5 500.5"/><polyline points="468 422.6 469.5 421 471 419.4 472.5 417.8 474 416.2 475.5 414.6 477 412.9 478.4 411.3 479.9 409.6 481.3 408 482.7 406.3 484.1 404.6 485.5 402.9 486.9 401.2 488.3 399.5 489.6 397.8 490.9 396.1 492.3 394.3 493.6 392.6 494.9 390.8 496.1 389.1 497.4 387.3 498.7 385.5 499.9 383.8 501.1 382 502.3 380.2 503.5 378.4 504.7 376.6 505.8 374.8 507 373 508.1 371.1 509.2 369.3 510.3 367.5"/><polyline points="348.5 500.5 350.6 499.7 352.7 498.9 354.8 498 356.9 497.2 359 496.3 361 495.5 363.1 494.6 365.2 493.7 367.2 492.8 369.3 491.9 371.3 490.9 373.4 490 375.4 489 377.5 488 379.5 487 381.5 486 383.5 485 385.5 483.9 387.5 482.9 389.5 481.8 391.5 480.7 393.5 479.6 395.4 478.5 397.4 477.4 399.3 476.3 401.3 475.1 403.2 474 405.1 472.8 407.1 471.6 409 470.4 410.9 469.2 412.8 468"/><polyline points="523.2 149.5 524 151.2 524.9 152.8 525.7 154.5 526.6 156.2 527.4 157.9 528.2 159.6 528.9 161.4 529.7 163.1 530.4 164.8 531.2 166.6 531.9 168.3 532.6 170.1 533.2 171.9 533.9 173.6 534.5 175.4 535.2 177.2 535.8 179 536.4 180.8 536.9 182.6"/><polyline points="341.4 491.9 343.2 490.8 345.1 489.7 347 488.6 348.9 487.5 350.7 486.4 352.6 485.3 354.5 484.2 356.3 483 358.2 481.8 360 480.6 361.8 479.5 363.7 478.2 365.5 477 367.3 475.8 369.1 474.5 370.9 473.3 372.8 472 374.6 470.7 376.3 469.4 378.1 468.1 379.9 466.8 381.7 465.4 383.4 464.1 385.2 462.7 386.9 461.3 388.7 459.9 390.4 458.5 392.2 457.1 393.9 455.7 395.6 454.3 397.3 452.8 399 451.4"/><polyline points="510.3 274.2 510.8 272.1 511.3 270.1 511.8 268.1 512.2 266 512.7 264 513.1 262 513.5 259.9 513.9 257.9 514.2 255.9 514.6 253.8 514.9 251.8 515.3 249.8 515.6 247.8 515.9 245.8 516.2 243.8 516.4 241.7 516.7 239.7 516.9 237.7 517.1 235.7 517.3 233.7 517.5 231.7 517.7 229.7 517.8 227.7 518 225.7 518.1 223.8 518.2 221.8 518.3 219.8 518.3 217.8 518.4 215.9 518.4 213.9 518.5 211.9 518.5 210"/><polyline points="460.4 70.66 461.7 71.78 463 72.91 464.2 74.06 465.5 75.22 466.7 76.39 467.9 77.58 469.1 78.78 470.3 79.99 471.4 81.22 472.6 82.46 473.7 83.71 474.9 84.98 476 86.26 477.1 87.55 478.2 88.86 479.3 90.18 480.3 91.51 481.4 92.85 482.4 94.2 483.5 95.57 484.5 96.95 485.5 98.35 486.4 99.75"/><polyline points="448.5 399.1 449.8 397.3 451.2 395.5 452.6 393.7 453.9 391.9 455.2 390.1 456.6 388.3 457.9 386.4 459.2 384.6 460.4 382.8 461.7 380.9 463 379.1 464.2 377.2 465.5 375.3 466.7 373.4 467.9 371.6 469.1 369.7 470.3 367.8 471.4 365.9 472.6 364 473.7 362 474.9 360.1 476 358.2 477.1 356.3 478.2 354.3 479.3 352.4 480.3 350.4 481.4 348.5 482.4 346.5 483.5 344.6 484.5 342.6 485.5 340.6 486.4 338.7"/><polyline points="510.3 150.5 510.8 152.2 511.3 154 511.8 155.7 512.2 157.5 512.7 159.3 513.1 161.1 513.5 162.9 513.9 164.7 514.2 166.5 514.6 168.3 514.9 170.1 515.3 172 515.6 173.8 515.9 175.7 516.2 177.5 516.4 179.4 516.7 181.2 516.9 183.1 517.1 185 517.3 186.9 517.5 188.8 517.7 190.7 517.8 192.6 518 194.5 518.1 196.4 518.2 198.3 518.3 200.3 518.3 202.2 518.4 204.1 518.4 206.1 518.5 208 518.5 210"/><polyline points="399 451.4 400.7 449.9 402.4 448.4 404 446.9 405.7 445.4 407.3 443.9 409 442.4 410.6 440.8 412.3 439.3 413.9 437.7 415.5 436.1 417.1 434.6 418.7 433 420.3 431.4 421.9 429.7 423.4 428.1 425 426.5 426.5 424.9 428.1 423.2 429.6 421.5 431.1 419.9 432.6 418.2 434.1 416.5 435.6 414.8 437.1 413.1 438.5 411.4 440 409.6 441.4 407.9 442.9 406.2 444.3 404.4 445.7 402.7 447.1 400.9 448.5 399.1"/><polyline points="281.5 517.3 283.4 516.7 285.4 516.1 287.3 515.5 289.3 514.8 291.2 514.2 293.2 513.5 295.1 512.8 297.1 512.1 299 511.4 301 510.7 302.9 509.9 304.9 509.2 306.8 508.4 308.8 507.6 310.7 506.8 312.6 506 314.6 505.1 316.5 504.3 318.4 503.4 320.4 502.5 322.3 501.6 324.2 500.7 326.1 499.8 328 498.9 330 497.9 331.9 496.9 333.8 495.9 335.7 494.9 337.6 493.9 339.5 492.9 341.4 491.9"/><polyline points="486.4 338.7 487.4 336.7 488.4 334.7 489.3 332.7 490.2 330.7 491.2 328.7 492.1 326.7 492.9 324.8 493.8 322.7 494.7 320.7 495.5 318.7 496.3 316.7 497.2 314.7 498 312.7 498.7 310.7 499.5 308.7 500.3 306.6 501 304.6 501.7 302.6 502.4 300.6 503.1 298.5 503.8 296.5 504.5 294.5 505.1 292.5 505.8 290.4 506.4 288.4 507 286.4 507.6 284.3 508.2 282.3 508.7 280.3 509.3 278.2 509.8 276.2 510.3 274.2"/><polyline points="486.4 99.75 487.4 101.2 488.4 102.6 489.3 104 490.2 105.5 491.2 107 492.1 108.4 492.9 109.9 493.8 111.4 494.7 112.9 495.5 114.4 496.3 116 497.2 117.5 498 119.1 498.7 120.6 499.5 122.2 500.3 123.8 501 125.4 501.7 127 502.4 128.6 503.1 130.2 503.8 131.9 504.5 133.5 505.1 135.2 505.8 136.8 506.4 138.5 507 140.2 507.6 141.9 508.2 143.6 508.7 145.3 509.3 147 509.8 148.7 510.3 150.5"/><polyline points="417.5 378.9 418.6 377 419.7 375 420.8 373 421.9 371.1 423 369.1 424.1 367.1 425.1 365.1 426.2 363.1 427.2 361.1 428.3 359.1 429.3 357.1 430.3 355.1 431.3 353.1 432.3 351.1 433.3 349 434.3 347 435.3 345 436.2 342.9 437.2 340.9 438.1 338.8 439 336.8 439.9 334.7 440.8 332.6 441.7 330.6 442.6 328.5 443.5 326.4 444.3 324.4 445.2 322.3 446 320.2 446.9 318.1 447.7 316 448.5 313.9"/><polyline points="448.5 75.01 449.3 76.31 450 77.62 450.8 78.95 451.6 80.29 452.3 81.65 453.1 83.01 453.8 84.4 454.5 85.79 455.2 87.2 455.9 88.62 456.6 90.05 457.2 91.49 457.9 92.95 458.5 94.42 459.1 95.9 459.8 97.4 460.4 98.9 461 100.4 461.5 102 462.1 103.5 462.7 105 463.2 106.6 463.7 108.2 464.3 109.8 464.8 111.4 465.3 113 465.7 114.6 466.2 116.2 466.7 117.9 467.1 119.5 467.5 121.2 468 122.9"/><polyline points="468 122.9 468.4 124.6 468.8 126.3 469.2 128 469.5 129.7 469.9 131.4 470.2 133.2 470.5 134.9 470.9 136.7 471.2 138.4 471.5 140.2 471.7 142 472 143.8 472.3 145.6 472.5 147.4 472.7 149.2 472.9 151 473.1 152.9 473.3 154.7 473.5 156.6 473.7 158.5 473.8 160.3 474 162.2 474.1 164.1 474.2 166 474.3 167.9 474.4 169.8 474.5 171.7 474.5 173.6 474.6 175.6 474.6 177.5 474.6 179.4 474.6 181.4"/><polyline points="403.3 32.38 404.5 33.01 405.7 33.65 406.9 34.32 408.2 35 409.3 35.7 410.5 36.41 411.7 37.14 412.9 37.88 414 38.65 415.2 39.42 416.3 40.22 417.5 41.03"/><polyline points="377.1 437.1 378.4 435.4 379.8 433.7 381.2 432 382.5 430.3 383.9 428.6 385.2 426.9 386.6 425.1 387.9 423.4 389.2 421.6 390.5 419.9 391.8 418.1 393.2 416.3 394.4 414.5 395.7 412.7 397 410.9 398.3 409.1 399.5 407.3 400.8 405.4 402 403.6 403.3 401.7 404.5 399.9 405.7 398 406.9 396.1 408.2 394.2 409.3 392.4 410.5 390.5 411.7 388.6 412.9 386.6 414 384.7 415.2 382.8 416.3 380.8 417.5 378.9"/><polyline points="417.5 41.03 418.6 41.85 419.7 42.7 420.8 43.55 421.9 44.43 423 45.32 424.1 46.22 425.1 47.14 426.2 48.08 427.2 49.03 428.3 49.99 429.3 50.98 430.3 51.97 431.3 52.98 432.3 54.01 433.3 55.06 434.3 56.11 435.3 57.18 436.2 58.27 437.2 59.38 438.1 60.49 439 61.62 439.9 62.77 440.8 63.93 441.7 65.1 442.6 66.29 443.5 67.5 444.3 68.71 445.2 69.94 446 71.19 446.9 72.45 447.7 73.72 448.5 75.01"/><polyline points="448.5 313.9 449.3 311.8 450 309.7 450.8 307.6 451.6 305.5 452.3 303.4 453.1 301.3 453.8 299.2 454.5 297.1 455.2 295 455.9 292.9 456.6 290.8 457.2 288.7 457.9 286.6 458.5 284.5 459.1 282.4 459.8 280.3 460.4 278.1 461 276 461.5 273.9 462.1 271.8 462.7 269.7 463.2 267.6 463.7 265.5 464.3 263.4 464.8 261.3 465.3 259.2 465.7 257.1 466.2 255 466.7 252.9 467.1 250.8 467.5 248.7 468 246.6"/><polyline points="330 484.5 331.5 483.2 333.1 481.9 334.6 480.6 336.1 479.2 337.7 477.9 339.2 476.6 340.7 475.2 342.2 473.8 343.7 472.4 345.2 471 346.7 469.6 348.2 468.2 349.7 466.7 351.2 465.3 352.7 463.8 354.2 462.3 355.6 460.8 357.1 459.3 358.6 457.8 360 456.3 361.5 454.8 362.9 453.2 364.4 451.6 365.8 450.1 367.2 448.5 368.7 446.9 370.1 445.3 371.5 443.7 372.9 442 374.3 440.4 375.7 438.7 377.1 437.1"/><polyline points="468 246.6 468.4 244.5 468.8 242.4 469.2 240.3 469.5 238.2 469.9 236.1 470.2 234 470.5 232 470.9 229.9 471.2 227.8 471.5 225.7 471.7 223.7 472 221.6 472.3 219.6 472.5 217.5 472.7 215.5 472.9 213.4 473.1 211.4 473.3 209.3 473.5 207.3 473.7 205.3 473.8 203.3 474 201.2 474.1 199.2 474.2 197.2 474.3 195.2 474.4 193.2 474.5 191.3 474.5 189.3 474.6 187.3 474.6 185.3 474.6 183.4 474.6 181.4"/><polyline points="281.1 517 282.7 516.2 284.3 515.4 285.9 514.5 287.5 513.7 289.1 512.8 290.7 511.9 292.3 511 293.9 510 295.5 509.1 297 508.1 298.6 507.1 300.2 506.1 301.8 505.1 303.4 504.1 305 503.1 306.6 502 308.1 501 309.7 499.9 311.3 498.8 312.9 497.7 314.4 496.5 316 495.4 317.6 494.2 319.1 493.1 320.7 491.9 322.3 490.7 323.8 489.5 325.4 488.2 326.9 487 328.5 485.7 330 484.5"/><polyline points="377.1 25.53 377.9 26.23 378.6 26.94 379.4 27.68 380.2 28.43 381 29.19 381.7 29.98 382.5 30.78 383.2 31.6 384 32.43 384.7 33.28 385.4 34.14 386.2 35.03 386.9 35.93 387.6 36.84 388.3 37.77 389 38.72 389.6 39.69 390.3 40.66 391 41.66 391.7 42.67 392.3 43.7 393 44.74 393.6 45.8 394.2 46.88 394.8 47.97 395.5 49.07 396.1 50.19 396.7 51.33 397.3 52.48 397.8 53.65 398.4 54.83 399 56.02"/><polyline points="348.5 426.1 349.5 424.3 350.4 422.4 351.4 420.6 352.4 418.7 353.3 416.9 354.3 415 355.2 413.1 356.2 411.2 357.1 409.3 358 407.4 358.9 405.5 359.9 403.6 360.8 401.6 361.7 399.7 362.6 397.7 363.5 395.8 364.4 393.8 365.3 391.8 366.2 389.8 367 387.8 367.9 385.8 368.8 383.8 369.6 381.8 370.5 379.8 371.3 377.8 372.2 375.7 373 373.7 373.8 371.7 374.6 369.6 375.5 367.5 376.3 365.5 377.1 363.4"/><polyline points="315.2 478.8 316.3 477.3 317.4 475.9 318.5 474.4 319.6 472.9 320.6 471.4 321.7 469.9 322.8 468.3 323.9 466.8 324.9 465.2 326 463.6 327 462.1 328.1 460.5 329.2 458.8 330.2 457.2 331.3 455.6 332.3 453.9 333.3 452.3 334.4 450.6 335.4 448.9 336.4 447.3 337.5 445.5 338.5 443.8 339.5 442.1 340.5 440.4 341.5 438.6 342.5 436.9 343.5 435.1 344.5 433.3 345.5 431.5 346.5 429.7 347.5 427.9 348.5 426.1"/><polyline points="399 294.9 399.5 292.8 400.1 290.6 400.6 288.4 401.2 286.2 401.7 284 402.2 281.8 402.7 279.7 403.2 277.5 403.7 275.3 404.2 273.1 404.7 270.9 405.2 268.7 405.6 266.5 406.1 264.4 406.5 262.2 407 260 407.4 257.8 407.8 255.6 408.2 253.5 408.6 251.3 409 249.1 409.4 246.9 409.8 244.8 410.2 242.6 410.5 240.5 410.9 238.3 411.2 236.1 411.5 234 411.9 231.8 412.2 229.7 412.5 227.5 412.8 225.4"/><polyline points="280.6 516.9 281.8 515.9 282.9 514.8 284 513.8 285.1 512.8 286.3 511.7 287.4 510.6 288.5 509.5 289.7 508.4 290.8 507.3 291.9 506.1 293 505 294.2 503.8 295.3 502.6 296.4 501.4 297.5 500.2 298.6 499 299.8 497.7 300.9 496.5 302 495.2 303.1 493.9 304.2 492.6 305.3 491.3 306.4 490 307.5 488.6 308.6 487.2 309.7 485.9 310.8 484.5 311.9 483.1 313 481.7 314.1 480.2 315.2 478.8"/><polyline points="377.1 363.4 377.9 361.3 378.6 359.2 379.4 357.2 380.2 355.1 381 353 381.7 350.9 382.5 348.8 383.2 346.6 384 344.5 384.7 342.4 385.4 340.3 386.2 338.2 386.9 336 387.6 333.9 388.3 331.8 389 329.6 389.6 327.5 390.3 325.3 391 323.2 391.6 321 392.3 318.8 393 316.7 393.6 314.5 394.2 312.3 394.8 310.2 395.5 308 396.1 305.8 396.7 303.7 397.3 301.5 397.8 299.3 398.4 297.1 399 294.9"/><polyline points="412.8 101.7 413.1 103.4 413.3 105 413.6 106.7 413.9 108.3 414.1 110 414.4 111.7 414.6 113.4 414.8 115.2 415 116.9 415.2 118.6 415.4 120.4 415.6 122.2 415.8 123.9 416 125.7 416.1 127.5 416.3 129.3 416.4 131.1 416.6 133 416.7 134.8 416.8 136.6 416.9 138.5 417 140.4 417.1 142.2 417.2 144.1 417.2 146 417.3 147.9 417.4 149.8 417.4 151.7 417.4 153.7 417.5 155.6 417.5 157.5 417.5 159.5"/><polyline points="412.8 225.4 413.1 223.2 413.3 221.1 413.6 219 413.9 216.8 414.1 214.7 414.4 212.6 414.6 210.5 414.8 208.4 415 206.3 415.2 204.2 415.4 202.1 415.6 200 415.8 197.9 416 195.8 416.1 193.8 416.3 191.7 416.4 189.6 416.6 187.6 416.7 185.5 416.8 183.5 416.9 181.4 417 179.4 417.1 177.4 417.2 175.4 417.2 173.4 417.3 171.3 417.4 169.4 417.4 167.4 417.4 165.4 417.5 163.4 417.5 161.4 417.5 159.5"/><polyline points="399 56.02 399.5 57.24 400.1 58.46 400.6 59.7 401.2 60.96 401.7 62.23 402.2 63.52 402.7 64.81 403.2 66.13 403.7 67.46 404.2 68.8 404.7 70.15 405.2 71.52 405.6 72.91 406.1 74.31 406.5 75.72 407 77.14 407.4 78.58 407.8 80.03 408.2 81.5 408.6 82.98 409 84.47 409.4 85.97 409.8 87.49 410.2 89.02 410.5 90.56 410.9 92.12 411.2 93.69 411.5 95.27 411.9 96.86 412.2 98.47 412.5 100.1 412.8 101.7"/><polyline points="356.2 13.92 357.1 14.2 358 14.5 358.9 14.82 359.9 15.15 360.8 15.51 361.7 15.88 362.6 16.26 363.5 16.67 364.4 17.09 365.3 17.53 366.2 17.99 367 18.47 367.9 18.96 368.8 19.47 369.6 20 370.5 20.55 371.3 21.11 372.2 21.69 373 22.29 373.8 22.9 374.6 23.53 375.5 24.18 376.3 24.85 377.1 25.53"/><polyline points="330 353.7 330.4 351.5 330.8 349.3 331.2 347.2 331.6 345 332 342.8 332.4 340.7 332.8 338.5 333.2 336.3 333.6 334.1 334 331.9 334.3 329.7 334.7 327.5 335.1 325.3 335.5 323.1 335.8 320.9 336.2 318.7 336.5 316.5 336.9 314.2 337.2 312 337.6 309.8 337.9 307.6 338.2 305.3 338.6 303.1 338.9 300.9 339.2 298.7 339.5 296.4 339.8 294.2 340.2 292 340.5 289.7 340.8 287.5 341.1 285.2 341.4 283"/><polyline points="280.1 516.8 280.7 515.6 281.3 514.5 281.8 513.4 282.4 512.2 283 511 283.6 509.8 284.2 508.6 284.8 507.4 285.3 506.2 285.9 504.9 286.5 503.6 287.1 502.4 287.7 501.1 288.2 499.7 288.8 498.4 289.4 497.1 290 495.7 290.6 494.3 291.1 493 291.7 491.6 292.3 490.1 292.9 488.7 293.4 487.3 294 485.8 294.6 484.3 295.2 482.9 295.7 481.4 296.3 479.8 296.9 478.3 297.4 476.8 298 475.2"/><polyline points="348.5 212.1 348.6 209.9 348.8 207.7 348.9 205.6 349.1 203.4 349.2 201.3 349.3 199.1 349.4 197 349.6 194.9 349.7 192.7 349.8 190.6 349.9 188.5 350 186.4 350.1 184.3 350.2 182.2 350.2 180.1 350.3 178 350.4 175.9 350.5 173.9 350.5 171.8 350.6 169.8 350.6 167.7 350.7 165.7 350.7 163.6 350.8 161.6 350.8 159.6 350.8 157.6 350.9 155.6 350.9 153.6 350.9 151.6 350.9 149.6 350.9 147.7 350.9 145.7"/><polyline points="341.4 283 341.6 280.8 341.9 278.5 342.2 276.3 342.5 274.1 342.8 271.8 343 269.6 343.3 267.3 343.6 265.1 343.8 262.9 344.1 260.6 344.3 258.4 344.6 256.2 344.8 253.9 345 251.7 345.3 249.5 345.5 247.3 345.7 245 345.9 242.8 346.1 240.6 346.4 238.4 346.6 236.2 346.8 234 346.9 231.8 347.1 229.6 347.3 227.4 347.5 225.2 347.7 223 347.9 220.8 348 218.6 348.2 216.4 348.3 214.2 348.5 212.1"/><polyline points="341.4 44.09 341.6 45.25 341.9 46.42 342.2 47.6 342.5 48.81 342.8 50.02 343 51.26 343.3 52.5 343.6 53.77 343.8 55.05 344.1 56.34 344.3 57.65 344.6 58.97 344.8 60.31 345 61.66 345.3 63.03 345.5 64.41 345.7 65.81 345.9 67.22 346.1 68.64 346.4 70.08 346.6 71.53 346.8 73 346.9 74.48 347.1 75.97 347.3 77.48 347.5 79 347.7 80.54 347.9 82.08 348 83.64 348.2 85.22 348.3 86.8 348.5 88.4"/><polyline points="350.9 145.7 350.9 143.7 350.9 141.8 350.9 139.9 350.9 138 350.9 136 350.8 134.1 350.8 132.2 350.8 130.4 350.7 128.5 350.7 126.6 350.6 124.8 350.6 122.9 350.5 121.1 350.5 119.3 350.4 117.5 350.3 115.7 350.2 113.9 350.2 112.1 350.1 110.3 350 108.6 349.9 106.8 349.8 105.1 349.7 103.4 349.6 101.6 349.4 99.95 349.3 98.26 349.2 96.59 349.1 94.93 348.9 93.28 348.8 91.64 348.6 90.01 348.5 88.4"/><polyline points="315.2 419.2 315.7 417.3 316.2 415.4 316.7 413.4 317.2 411.5 317.7 409.5 318.2 407.5 318.7 405.6 319.2 403.6 319.7 401.6 320.2 399.6 320.6 397.6 321.1 395.5 321.6 393.5 322.1 391.5 322.5 389.4 323 387.4 323.4 385.3 323.9 383.2 324.4 381.2 324.8 379.1 325.3 377 325.7 374.9 326.2 372.8 326.6 370.7 327 368.6 327.5 366.5 327.9 364.4 328.3 362.2 328.8 360.1 329.2 358 329.6 355.8 330 353.7"/><polyline points="298 475.2 298.6 473.7 299.1 472.1 299.7 470.5 300.2 468.9 300.8 467.3 301.4 465.6 301.9 464 302.5 462.3 303 460.7 303.6 459 304.1 457.3 304.7 455.6 305.2 453.9 305.8 452.2 306.3 450.4 306.8 448.7 307.4 446.9 307.9 445.1 308.5 443.4 309 441.6 309.5 439.8 310 437.9 310.6 436.1 311.1 434.3 311.6 432.4 312.1 430.6 312.7 428.7 313.2 426.8 313.7 424.9 314.2 423 314.7 421.1 315.2 419.2"/><polyline points="330 15.78 330.4 16.4 330.8 17.04 331.2 17.7 331.6 18.37 332 19.06 332.4 19.77 332.8 20.49 333.2 21.23 333.6 21.99 334 22.77 334.3 23.56 334.7 24.38 335.1 25.2 335.5 26.05 335.8 26.91 336.2 27.79 336.5 28.68 336.9 29.6 337.2 30.52 337.6 31.47 337.9 32.43 338.2 33.41 338.6 34.41 338.9 35.42 339.2 36.45 339.5 37.49 339.8 38.55 340.2 39.63 340.5 40.72 340.8 41.83 341.1 42.95 341.4 44.09"/><polyline points="316.2 5.513 316.7 5.592 317.2 5.689 317.7 5.805 318.2 5.939 318.7 6.091 319.2 6.262 319.7 6.451 320.2 6.657 320.6 6.882 321.1 7.126 321.6 7.388 322.1 7.667 322.5 7.965 323 8.281 323.4 8.615 323.9 8.967 324.4 9.338 324.8 9.726 325.3 10.13 325.7 10.56 326.2 11 326.6 11.46 327 11.94 327.5 12.43 327.9 12.95 328.3 13.48 328.8 14.03 329.2 14.6 329.6 15.18 330 15.78"/><polyline points="279.5 12.46 279.5 13.05 279.5 13.66 279.5 14.29 279.5 14.94 279.5 15.6 279.5 16.28 279.5 16.98 279.5 17.7 279.5 18.43 279.5 19.19 279.5 19.96 279.5 20.74 279.5 21.54 279.5 22.36 279.5 23.2 279.5 24.06 279.5 24.93 279.5 25.82 279.5 26.73 279.5 27.65 279.5 28.59 279.5 29.55 279.5 30.52 279.5 31.51 279.5 32.52 279.5 33.54 279.5 34.58 279.5 35.64 279.5 36.71 279.5 37.79 279.5 38.9 279.5 40.02"/><polyline points="279.5 278.9 279.5 276.7 279.5 274.4 279.5 272.2 279.5 269.9 279.5 267.7 279.5 265.4 279.5 263.1 279.5 260.9 279.5 258.6 279.5 256.4 279.5 254.1 279.5 251.9 279.5 249.6 279.5 247.4 279.5 245.2 279.5 242.9 279.5 240.7 279.5 238.5 279.5 236.2 279.5 234 279.5 231.8 279.5 229.5 279.5 227.3 279.5 225.1 279.5 222.9 279.5 220.7 279.5 218.5 279.5 216.3 279.5 214.1 279.5 211.9 279.5 209.7 279.5 207.5"/><polyline points="279.5 83.86 279.5 82.27 279.5 80.7 279.5 79.13 279.5 77.58 279.5 76.05 279.5 74.52 279.5 73.02 279.5 71.52 279.5 70.04 279.5 68.57 279.5 67.12 279.5 65.68 279.5 64.26 279.5 62.85 279.5 61.45 279.5 60.07 279.5 58.7 279.5 57.35 279.5 56.01 279.5 54.69 279.5 53.38 279.5 52.09 279.5 50.81 279.5 49.55 279.5 48.31 279.5 47.08 279.5 45.86 279.5 44.66 279.5 43.48 279.5 42.31 279.5 41.16 279.5 40.02"/><polyline points="279.5 207.5 279.5 205.4 279.5 203.2 279.5 201 279.5 198.9 279.5 196.7 279.5 194.5 279.5 192.4 279.5 190.3 279.5 188.1 279.5 186 279.5 183.9 279.5 181.8 279.5 179.6 279.5 177.5 279.5 175.4 279.5 173.4 279.5 171.3 279.5 169.2 279.5 167.1 279.5 165.1 279.5 163 279.5 161 279.5 158.9 279.5 156.9 279.5 154.9 279.5 152.9 279.5 150.9 279.5 148.9 279.5 146.9 279.5 144.9 279.5 143 279.5 141"/><polyline points="279.5 141 279.5 139 279.5 137.1 279.5 135.2 279.5 133.3 279.5 131.3 279.5 129.4 279.5 127.5 279.5 125.7 279.5 123.8 279.5 121.9 279.5 120.1 279.5 118.2 279.5 116.4 279.5 114.6 279.5 112.8 279.5 111 279.5 109.2 279.5 107.4 279.5 105.7 279.5 103.9 279.5 102.2 279.5 100.5 279.5 98.74 279.5 97.04 279.5 95.35 279.5 93.67 279.5 92 279.5 90.35 279.5 88.71 279.5 87.08 279.5 85.46 279.5 83.86"/><polyline points="279.5 416.9 279.5 414.9 279.5 412.9 279.5 411 279.5 409 279.5 407 279.5 405 279.5 403 279.5 401 279.5 398.9 279.5 396.9 279.5 394.8 279.5 392.8 279.5 390.7 279.5 388.7 279.5 386.6 279.5 384.5 279.5 382.4 279.5 380.3 279.5 378.2 279.5 376.1 279.5 374 279.5 371.9 279.5 369.7 279.5 367.6 279.5 365.5 279.5 363.3 279.5 361.2 279.5 359 279.5 356.9 279.5 354.7 279.5 352.5 279.5 350.3"/><polyline points="279.5 474 279.5 472.4 279.5 470.8 279.5 469.2 279.5 467.5 279.5 465.9 279.5 464.2 279.5 462.5 279.5 460.8 279.5 459.1 279.5 457.4 279.5 455.7 279.5 453.9 279.5 452.2 279.5 450.4 279.5 448.7 279.5 446.9 279.5 445.1 279.5 443.3 279.5 441.5 279.5 439.6 279.5 437.8 279.5 435.9 279.5 434.1 279.5 432.2 279.5 430.3 279.5 428.4 279.5 426.5 279.5 424.6 279.5 422.7 279.5 420.8 279.5 418.8 279.5 416.9"/><polyline points="279.5 350.3 279.5 348.2 279.5 346 279.5 343.8 279.5 341.6 279.5 339.4 279.5 337.2 279.5 335 279.5 332.8 279.5 330.5 279.5 328.3 279.5 326.1 279.5 323.9 279.5 321.6 279.5 319.4 279.5 317.2 279.5 314.9 279.5 312.7 279.5 310.5 279.5 308.2 279.5 306 279.5 303.7 279.5 301.5 279.5 299.2 279.5 297 279.5 294.7 279.5 292.5 279.5 290.2 279.5 288 279.5 285.7 279.5 283.4 279.5 281.2 279.5 278.9"/><polyline points="279.5 516.7 279.5 515.6 279.5 514.4 279.5 513.2 279.5 512 279.5 510.8 279.5 509.6 279.5 508.3 279.5 507.1 279.5 505.8 279.5 504.5 279.5 503.2 279.5 501.9 279.5 500.5 279.5 499.2 279.5 497.8 279.5 496.4 279.5 495 279.5 493.6 279.5 492.2 279.5 490.8 279.5 489.3 279.5 487.8 279.5 486.3 279.5 484.9 279.5 483.3 279.5 481.8 279.5 480.3 279.5 478.7 279.5 477.2 279.5 475.6 279.5 474"/><polyline points="279.5 3.059 279.5 3.068 279.5 3.096 279.5 3.142 279.5 3.207 279.5 3.29 279.5 3.392 279.5 3.511 279.5 3.65 279.5 3.806 279.5 3.982 279.5 4.175 279.5 4.388 279.5 4.618 279.5 4.866 279.5 5.134 279.5 5.419 279.5 5.723 279.5 6.045 279.5 6.385 279.5 6.744 279.5 7.121 279.5 7.515 279.5 7.929 279.5 8.36 279.5 8.81 279.5 9.276 279.5 9.762 279.5 10.26 279.5 10.79 279.5 11.33 279.5 11.88 279.5 12.46"/><polyline points="229 353.7 228.6 351.5 228.2 349.3 227.8 347.2 227.4 345 227 342.8 226.6 340.7 226.2 338.5 225.8 336.3 225.4 334.1 225.1 331.9 224.7 329.7 224.3 327.5 223.9 325.3 223.6 323.1 223.2 320.9 222.9 318.7 222.5 316.5 222.2 314.2 221.8 312 221.5 309.8 221.1 307.6 220.8 305.3 220.5 303.1 220.1 300.9 219.8 298.7 219.5 296.4 219.2 294.2 218.9 292 218.6 289.7 218.3 287.5 218 285.2 217.7 283"/><polyline points="242.8 5.512 242.3 5.59 241.8 5.688 241.3 5.804 240.8 5.938 240.3 6.09 239.8 6.26 239.4 6.449 238.9 6.656 238.4 6.881 237.9 7.125 237.4 7.386 237 7.666 236.5 7.963 236 8.279 235.6 8.613 235.1 8.965 234.7 9.336 234.2 9.725 233.8 10.13 233.3 10.56 232.9 11 232.4 11.46 232 11.94 231.6 12.43 231.1 12.95 230.7 13.48 230.3 14.03 229.9 14.59 229.4 15.18 229 15.78"/><polyline points="243.8 419.2 243.3 417.3 242.8 415.4 242.3 413.4 241.8 411.5 241.3 409.5 240.8 407.5 240.3 405.6 239.8 403.6 239.4 401.6 238.9 399.6 238.4 397.5 237.9 395.5 237.4 393.5 237 391.5 236.5 389.4 236 387.4 235.6 385.3 235.1 383.2 234.7 381.2 234.2 379.1 233.8 377 233.3 374.9 232.9 372.8 232.4 370.7 232 368.6 231.6 366.5 231.1 364.4 230.7 362.2 230.3 360.1 229.9 358 229.4 355.8 229 353.7"/><polyline points="217.7 283 217.4 280.8 217.1 278.5 216.8 276.3 216.5 274.1 216.3 271.8 216 269.6 215.7 267.3 215.5 265.1 215.2 262.9 215 260.6 214.7 258.4 214.5 256.2 214.2 253.9 214 251.7 213.8 249.5 213.5 247.3 213.3 245 213.1 242.8 212.9 240.6 212.7 238.4 212.5 236.2 212.3 234 212.1 231.8 211.9 229.6 211.7 227.4 211.5 225.2 211.4 223 211.2 220.8 211 218.6 210.8 216.4 210.7 214.2 210.5 212.1"/><polyline points="261 475.2 260.5 473.7 259.9 472.1 259.3 470.5 258.8 468.9 258.2 467.3 257.7 465.6 257.1 464 256.6 462.3 256 460.7 255.5 459 254.9 457.3 254.4 455.6 253.8 453.9 253.3 452.2 252.7 450.4 252.2 448.7 251.6 446.9 251.1 445.1 250.6 443.4 250 441.6 249.5 439.8 249 437.9 248.5 436.1 247.9 434.3 247.4 432.4 246.9 430.6 246.4 428.7 245.8 426.8 245.3 424.9 244.8 423 244.3 421.1 243.8 419.2"/><polyline points="278.9 516.8 278.3 515.6 277.8 514.5 277.2 513.4 276.6 512.2 276 511 275.4 509.8 274.8 508.6 274.3 507.4 273.7 506.2 273.1 504.9 272.5 503.6 271.9 502.4 271.3 501.1 270.8 499.7 270.2 498.4 269.6 497.1 269 495.7 268.5 494.3 267.9 493 267.3 491.6 266.7 490.1 266.2 488.7 265.6 487.3 265 485.8 264.4 484.3 263.9 482.9 263.3 481.4 262.7 479.8 262.2 478.3 261.6 476.8 261 475.2"/><polyline points="217.7 44.09 218 42.95 218.3 41.82 218.6 40.72 218.9 39.62 219.2 38.55 219.5 37.49 219.8 36.44 220.1 35.42 220.5 34.4 220.8 33.41 221.1 32.43 221.5 31.47 221.8 30.52 222.2 29.59 222.5 28.68 222.9 27.79 223.2 26.91 223.6 26.05 223.9 25.2 224.3 24.37 224.7 23.56 225.1 22.77 225.4 21.99 225.8 21.23 226.2 20.49 226.6 19.77 227 19.06 227.4 18.37 227.8 17.7 228.2 17.04 228.6 16.4 229 15.78"/><polyline points="208.1 145.7 208.1 143.7 208.1 141.8 208.1 139.9 208.1 137.9 208.2 136 208.2 134.1 208.2 132.2 208.3 130.4 208.3 128.5 208.3 126.6 208.4 124.8 208.4 122.9 208.5 121.1 208.6 119.3 208.6 117.5 208.7 115.7 208.8 113.9 208.9 112.1 209 110.3 209.1 108.6 209.2 106.8 209.3 105.1 209.4 103.4 209.5 101.6 209.6 99.95 209.7 98.26 209.8 96.59 210 94.92 210.1 93.27 210.2 91.64 210.4 90.01 210.5 88.4"/><polyline points="210.5 88.4 210.7 86.8 210.8 85.21 211 83.64 211.2 82.08 211.4 80.53 211.5 79 211.7 77.48 211.9 75.97 212.1 74.48 212.3 73 212.5 71.53 212.7 70.08 212.9 68.64 213.1 67.22 213.3 65.8 213.5 64.41 213.8 63.03 214 61.66 214.2 60.31 214.5 58.97 214.7 57.65 215 56.34 215.2 55.04 215.5 53.77 215.7 52.5 216 51.25 216.3 50.02 216.5 48.8 216.8 47.6 217.1 46.42 217.4 45.24 217.7 44.09"/><polyline points="210.5 212.1 210.4 209.9 210.2 207.7 210.1 205.6 210 203.4 209.8 201.3 209.7 199.1 209.6 197 209.5 194.9 209.4 192.7 209.3 190.6 209.2 188.5 209.1 186.4 209 184.3 208.9 182.2 208.8 180.1 208.7 178 208.6 175.9 208.6 173.9 208.5 171.8 208.4 169.8 208.4 167.7 208.3 165.7 208.3 163.6 208.3 161.6 208.2 159.6 208.2 157.6 208.2 155.6 208.1 153.6 208.1 151.6 208.1 149.6 208.1 147.7 208.1 145.7"/><polyline points="210.5 426.1 209.6 424.3 208.6 422.4 207.6 420.6 206.7 418.7 205.7 416.9 204.7 415 203.8 413.1 202.9 411.2 201.9 409.3 201 407.4 200.1 405.5 199.2 403.6 198.2 401.6 197.3 399.7 196.4 397.7 195.5 395.8 194.6 393.8 193.7 391.8 192.9 389.8 192 387.8 191.1 385.8 190.3 383.8 189.4 381.8 188.5 379.8 187.7 377.8 186.9 375.7 186 373.7 185.2 371.6 184.4 369.6 183.6 367.5 182.8 365.5 182 363.4"/><polyline points="146.3 101.7 146.6 100.1 146.9 98.46 147.2 96.86 147.5 95.27 147.8 93.69 148.2 92.12 148.5 90.56 148.9 89.02 149.2 87.49 149.6 85.97 150 84.47 150.4 82.98 150.8 81.5 151.2 80.03 151.6 78.58 152.1 77.14 152.5 75.72 152.9 74.3 153.4 72.9 153.8 71.52 154.3 70.15 154.8 68.8 155.3 67.45 155.8 66.12 156.3 64.81 156.8 63.51 157.3 62.23 157.8 60.96 158.4 59.7 158.9 58.46 159.5 57.23 160 56.02"/><polyline points="243.8 478.8 242.7 477.3 241.6 475.9 240.5 474.4 239.5 472.9 238.4 471.4 237.3 469.9 236.2 468.3 235.2 466.8 234.1 465.2 233 463.6 232 462.1 230.9 460.5 229.9 458.8 228.8 457.2 227.8 455.6 226.7 453.9 225.7 452.3 224.6 450.6 223.6 448.9 222.6 447.3 221.5 445.5 220.5 443.8 219.5 442.1 218.5 440.4 217.5 438.6 216.5 436.9 215.5 435.1 214.5 433.3 213.5 431.5 212.5 429.7 211.5 427.9 210.5 426.1"/><polyline points="278.4 516.9 277.2 515.9 276.1 514.8 275 513.8 273.9 512.8 272.7 511.7 271.6 510.6 270.5 509.5 269.4 508.4 268.2 507.3 267.1 506.1 266 505 264.9 503.8 263.7 502.6 262.6 501.4 261.5 500.2 260.4 499 259.3 497.7 258.2 496.5 257 495.2 255.9 493.9 254.8 492.6 253.7 491.3 252.6 490 251.5 488.6 250.4 487.2 249.3 485.9 248.2 484.5 247.1 483.1 246 481.7 244.9 480.2 243.8 478.8"/><polyline points="182 363.4 181.2 361.3 180.4 359.2 179.6 357.2 178.8 355.1 178 353 177.3 350.9 176.5 348.8 175.8 346.6 175 344.5 174.3 342.4 173.6 340.3 172.9 338.2 172.2 336 171.4 333.9 170.7 331.7 170.1 329.6 169.4 327.5 168.7 325.3 168 323.2 167.4 321 166.7 318.8 166.1 316.7 165.4 314.5 164.8 312.3 164.2 310.2 163.6 308 163 305.8 162.4 303.7 161.8 301.5 161.2 299.3 160.6 297.1 160 294.9"/><polyline points="160 56.02 160.6 54.83 161.2 53.64 161.8 52.48 162.4 51.33 163 50.19 163.6 49.07 164.2 47.96 164.8 46.87 165.4 45.8 166.1 44.74 166.7 43.7 167.4 42.67 168 41.66 168.7 40.66 169.4 39.68 170.1 38.72 170.8 37.77 171.5 36.84 172.2 35.92 172.9 35.02 173.6 34.14 174.3 33.28 175 32.43 175.8 31.59 176.5 30.78 177.3 29.98 178.1 29.19 178.8 28.42 179.6 27.68 180.4 26.94 181.2 26.22 182 25.52"/><polyline points="141.6 159.5 141.6 157.5 141.6 155.6 141.6 153.6 141.6 151.7 141.7 149.8 141.7 147.9 141.8 146 141.8 144.1 141.9 142.2 142 140.4 142.1 138.5 142.2 136.6 142.3 134.8 142.5 133 142.6 131.1 142.7 129.3 142.9 127.5 143 125.7 143.2 123.9 143.4 122.2 143.6 120.4 143.8 118.6 144 116.9 144.2 115.2 144.4 113.4 144.7 111.7 144.9 110 145.2 108.3 145.4 106.7 145.7 105 146 103.4 146.3 101.7"/><polyline points="160 294.9 159.5 292.8 158.9 290.6 158.4 288.4 157.8 286.2 157.3 284 156.8 281.8 156.3 279.6 155.8 277.5 155.3 275.3 154.8 273.1 154.3 270.9 153.8 268.7 153.4 266.5 152.9 264.4 152.5 262.2 152.1 260 151.6 257.8 151.2 255.6 150.8 253.5 150.4 251.3 150 249.1 149.6 246.9 149.2 244.8 148.9 242.6 148.5 240.4 148.2 238.3 147.8 236.1 147.5 234 147.2 231.8 146.9 229.7 146.5 227.5 146.2 225.4"/><polyline points="182 25.52 182.8 24.84 183.6 24.18 184.4 23.53 185.2 22.9 186 22.28 186.9 21.69 187.7 21.11 188.5 20.54 189.4 20 190.3 19.47 191.1 18.96 192 18.47 192.9 17.99 193.7 17.53 194.6 17.09 195.5 16.67 196.4 16.26 197.3 15.87 198.2 15.5 199.2 15.15 200.1 14.82 201 14.5 201.9 14.2 202.9 13.92"/><polyline points="146.2 225.4 146 223.2 145.7 221.1 145.4 219 145.2 216.8 144.9 214.7 144.7 212.6 144.4 210.5 144.2 208.4 144 206.3 143.8 204.2 143.6 202.1 143.4 200 143.2 197.9 143 195.8 142.9 193.8 142.7 191.7 142.6 189.6 142.5 187.6 142.3 185.5 142.2 183.5 142.1 181.4 142 179.4 141.9 177.4 141.8 175.4 141.8 173.3 141.7 171.3 141.7 169.3 141.6 167.4 141.6 165.4 141.6 163.4 141.6 161.4 141.6 159.5"/><polyline points="110.5 313.9 109.8 311.8 109 309.7 108.2 307.6 107.4 305.5 106.7 303.4 106 301.3 105.2 299.2 104.5 297.1 103.8 295 103.1 292.9 102.5 290.8 101.8 288.7 101.1 286.6 100.5 284.5 99.87 282.4 99.25 280.3 98.65 278.1 98.06 276 97.48 273.9 96.91 271.8 96.35 269.7 95.81 267.6 95.28 265.5 94.76 263.4 94.25 261.3 93.75 259.2 93.27 257.1 92.8 254.9 92.35 252.8 91.9 250.8 91.47 248.7 91.05 246.6"/><polyline points="141.5 378.9 140.4 377 139.3 375 138.2 373 137.1 371.1 136 369.1 134.9 367.1 133.9 365.1 132.8 363.1 131.8 361.1 130.7 359.1 129.7 357.1 128.7 355.1 127.7 353.1 126.7 351.1 125.7 349 124.7 347 123.8 345 122.8 342.9 121.9 340.9 120.9 338.8 120 336.8 119.1 334.7 118.2 332.6 117.3 330.6 116.4 328.5 115.5 326.4 114.7 324.4 113.8 322.3 113 320.2 112.2 318.1 111.3 316 110.5 313.9"/><polyline points="182 437.1 180.6 435.4 179.2 433.7 177.8 432 176.5 430.3 175.1 428.6 173.8 426.9 172.4 425.1 171.1 423.4 169.8 421.6 168.5 419.9 167.2 418.1 165.9 416.3 164.6 414.5 163.3 412.7 162 410.9 160.7 409.1 159.5 407.3 158.2 405.4 157 403.6 155.7 401.7 154.5 399.9 153.3 398 152.1 396.1 150.9 394.2 149.7 392.4 148.5 390.5 147.3 388.5 146.1 386.6 145 384.7 143.8 382.8 142.7 380.8 141.5 378.9"/><polyline points="277.9 517 276.3 516.2 274.7 515.4 273.1 514.5 271.5 513.7 269.9 512.8 268.3 511.9 266.7 511 265.2 510 263.6 509.1 262 508.1 260.4 507.1 258.8 506.1 257.2 505.1 255.6 504.1 254 503.1 252.5 502 250.9 501 249.3 499.9 247.7 498.8 246.2 497.7 244.6 496.5 243 495.4 241.4 494.2 239.9 493.1 238.3 491.9 236.8 490.7 235.2 489.5 233.7 488.2 232.1 487 230.6 485.7 229 484.5"/><polyline points="229 484.5 227.5 483.2 225.9 481.9 224.4 480.6 222.9 479.2 221.3 477.9 219.8 476.6 218.3 475.2 216.8 473.8 215.3 472.4 213.8 471 212.3 469.6 210.8 468.2 209.3 466.7 207.8 465.3 206.3 463.8 204.8 462.3 203.4 460.8 201.9 459.3 200.4 457.8 199 456.3 197.5 454.8 196.1 453.2 194.6 451.6 193.2 450.1 191.8 448.5 190.4 446.9 188.9 445.3 187.5 443.7 186.1 442 184.7 440.4 183.3 438.7 182 437.1"/><polyline points="91.05 246.6 90.64 244.5 90.25 242.4 89.87 240.3 89.5 238.2 89.14 236.1 88.8 234 88.47 232 88.15 229.9 87.85 227.8 87.55 225.7 87.27 223.7 87.01 221.6 86.75 219.6 86.51 217.5 86.29 215.5 86.07 213.4 85.87 211.4 85.68 209.3 85.5 207.3 85.34 205.3 85.19 203.3 85.05 201.2 84.93 199.2 84.82 197.2 84.72 195.2 84.64 193.2 84.56 191.3 84.51 189.3 84.46 187.3 84.43 185.3 84.41 183.4 84.4 181.4"/><polyline points="110.5 75.01 111.3 73.72 112.2 72.45 113 71.19 113.8 69.94 114.7 68.71 115.5 67.5 116.4 66.29 117.3 65.1 118.2 63.93 119.1 62.77 120 61.62 120.9 60.49 121.9 59.37 122.8 58.27 123.8 57.18 124.7 56.11 125.7 55.05 126.7 54.01 127.7 52.98 128.7 51.97 129.7 50.98 130.7 49.99 131.8 49.03 132.8 48.08 133.9 47.14 134.9 46.22 136 45.32 137.1 44.43 138.2 43.55 139.3 42.7 140.4 41.85 141.5 41.03"/><polyline points="84.4 181.4 84.41 179.4 84.43 177.5 84.46 175.6 84.51 173.6 84.56 171.7 84.64 169.8 84.72 167.9 84.82 166 84.93 164.1 85.05 162.2 85.19 160.3 85.34 158.5 85.5 156.6 85.68 154.7 85.87 152.9 86.07 151 86.29 149.2 86.51 147.4 86.75 145.6 87.01 143.8 87.27 142 87.55 140.2 87.85 138.4 88.15 136.7 88.47 134.9 88.8 133.2 89.14 131.4 89.5 129.7 89.87 128 90.25 126.3 90.64 124.6 91.05 122.9"/><polyline points="141.5 41.03 142.7 40.22 143.8 39.42 145 38.65 146.1 37.88 147.3 37.14 148.5 36.41 149.7 35.7 150.9 35 152.1 34.32 153.3 33.65 154.5 33 155.7 32.37"/><polyline points="91.05 122.9 91.47 121.2 91.9 119.5 92.35 117.9 92.8 116.2 93.27 114.6 93.75 113 94.25 111.4 94.76 109.8 95.28 108.2 95.81 106.6 96.35 105 96.91 103.5 97.48 102 98.06 100.4 98.65 98.9 99.25 97.4 99.87 95.9 100.5 94.42 101.1 92.95 101.8 91.49 102.5 90.04 103.1 88.61 103.8 87.19 104.5 85.79 105.2 84.39 106 83.01 106.7 81.65 107.4 80.29 108.2 78.95 109 77.62 109.7 76.31 110.5 75.01"/><polyline points="261 544.2 261.6 544.3 262.2 544.3 262.7 544.4 263.3 544.5 263.9 544.5 264.4 544.6 265 544.7 265.6 544.7 266.2 544.8 266.7 544.8 267.3 544.9 267.9 544.9 268.5 545 269 545 269.6 545.1 270.2 545.1 270.8 545.1 271.3 545.2 271.9 545.2 272.5 545.2 273.1 545.3 273.7 545.3 274.3 545.3 274.8 545.3 275.4 545.3 276 545.4 276.6 545.4 277.2 545.4 277.8 545.4 278.3 545.4 278.9 545.4 279.5 545.4"/><polyline points="243.8 540.6 244.3 540.8 244.8 540.9 245.3 541.1 245.8 541.2 246.4 541.3 246.9 541.5 247.4 541.6 247.9 541.7 248.4 541.9 249 542 249.5 542.1 250 542.2 250.6 542.3 251.1 542.5 251.6 542.6 252.2 542.7 252.7 542.8 253.3 542.9 253.8 543 254.4 543.1 254.9 543.2 255.5 543.3 256 543.4 256.6 543.5 257.1 543.6 257.7 543.7 258.2 543.8 258.8 543.9 259.3 544 259.9 544 260.5 544.1 261 544.2"/><polyline points="348.5 500.5 348.3 500.2 348.2 499.9 348 499.6 347.8 499.3 347.7 499.1 347.5 498.8 347.3 498.5 347.1 498.2 346.9 498 346.7 497.7 346.5 497.4 346.3 497.1 346.1 496.9 345.9 496.6 345.7 496.3 345.5 496 345.3 495.8 345 495.5 344.8 495.2 344.6 495 344.3 494.7 344.1 494.4 343.8 494.2 343.6 493.9 343.3 493.7 343 493.4 342.8 493.1 342.5 492.9 342.2 492.6 341.9 492.4 341.6 492.1 341.4 491.9"/><polyline points="229 535 229.4 535.2 229.8 535.4 230.3 535.6 230.7 535.8 231.1 536 231.6 536.2 232 536.4 232.4 536.5 232.9 536.7 233.3 536.9 233.8 537.1 234.2 537.3 234.7 537.5 235.1 537.7 235.6 537.9 236 538 236.5 538.2 237 538.4 237.4 538.6 237.9 538.7 238.4 538.9 238.9 539.1 239.4 539.2 239.8 539.4 240.3 539.6 240.8 539.7 241.3 539.9 241.8 540 242.3 540.2 242.8 540.3 243.3 540.5 243.8 540.6"/><polyline points="217.7 527.6 218 527.8 218.3 528.1 218.6 528.3 218.9 528.6 219.2 528.8 219.5 529.1 219.8 529.3 220.1 529.5 220.5 529.8 220.8 530 221.1 530.3 221.5 530.5 221.8 530.7 222.1 531 222.5 531.2 222.9 531.4 223.2 531.7 223.6 531.9 223.9 532.1 224.3 532.4 224.7 532.6 225.1 532.8 225.4 533 225.8 533.2 226.2 533.5 226.6 533.7 227 533.9 227.4 534.1 227.8 534.3 228.2 534.5 228.6 534.7 229 535"/><polyline points="350.9 509.7 350.9 509.4 350.9 509.1 350.9 508.8 350.9 508.5 350.9 508.2 350.8 508 350.8 507.7 350.8 507.4 350.7 507.1 350.7 506.8 350.6 506.5 350.6 506.2 350.5 505.9 350.5 505.6 350.4 505.3 350.3 505 350.2 504.8 350.1 504.5 350.1 504.2 350 503.9 349.9 503.6 349.8 503.3 349.7 503 349.5 502.7 349.4 502.5 349.3 502.2 349.2 501.9 349.1 501.6 348.9 501.3 348.8 501 348.6 500.7 348.5 500.5"/><polyline points="315.2 540.6 315.7 540.5 316.2 540.3 316.7 540.2 317.2 540 317.7 539.9 318.2 539.7 318.7 539.6 319.2 539.4 319.7 539.2 320.1 539.1 320.6 538.9 321.1 538.7 321.6 538.6 322 538.4 322.5 538.2 323 538 323.4 537.9 323.9 537.7 324.4 537.5 324.8 537.3 325.3 537.1 325.7 536.9 326.2 536.7 326.6 536.5 327 536.4 327.5 536.2 327.9 536 328.3 535.8 328.7 535.6 329.2 535.4 329.6 535.2 330 535"/><polyline points="279.5 545.4 280.1 545.4 280.7 545.4 281.3 545.4 281.8 545.4 282.4 545.4 283 545.4 283.6 545.3 284.2 545.3 284.8 545.3 285.3 545.3 285.9 545.3 286.5 545.2 287.1 545.2 287.7 545.2 288.2 545.1 288.8 545.1 289.4 545.1 290 545 290.6 545 291.1 544.9 291.7 544.9 292.3 544.8 292.9 544.8 293.4 544.7 294 544.7 294.6 544.6 295.2 544.5 295.7 544.5 296.3 544.4 296.9 544.3 297.4 544.3 298 544.2"/><polyline points="341.4 491.9 341.1 491.6 340.8 491.4 340.5 491.1 340.2 490.9 339.8 490.6 339.5 490.4 339.2 490.1 338.9 489.9 338.6 489.6 338.2 489.4 337.9 489.2 337.6 488.9 337.2 488.7 336.9 488.4 336.5 488.2 336.2 488 335.8 487.7 335.4 487.5 335.1 487.3 334.7 487.1 334.3 486.8 334 486.6 333.6 486.4 333.2 486.2 332.8 485.9 332.4 485.7 332 485.5 331.6 485.3 331.2 485.1 330.8 484.9 330.4 484.7 330 484.5"/><polyline points="341.4 527.6 341.6 527.3 341.9 527 342.2 526.8 342.5 526.5 342.8 526.3 343 526 343.3 525.8 343.6 525.5 343.8 525.2 344.1 525 344.3 524.7 344.6 524.4 344.8 524.2 345 523.9 345.3 523.6 345.5 523.4 345.7 523.1 345.9 522.8 346.1 522.6 346.3 522.3 346.5 522 346.7 521.7 346.9 521.5 347.1 521.2 347.3 520.9 347.5 520.6 347.7 520.4 347.8 520.1 348 519.8 348.2 519.5 348.3 519.2 348.5 518.9"/><polyline points="348.5 518.9 348.6 518.7 348.8 518.4 348.9 518.1 349.1 517.8 349.2 517.5 349.3 517.2 349.4 517 349.5 516.7 349.7 516.4 349.8 516.1 349.9 515.8 350 515.5 350.1 515.2 350.1 514.9 350.2 514.7 350.3 514.4 350.4 514.1 350.5 513.8 350.5 513.5 350.6 513.2 350.6 512.9 350.7 512.6 350.7 512.3 350.8 512 350.8 511.8 350.8 511.5 350.9 511.2 350.9 510.9 350.9 510.6 350.9 510.3 350.9 510 350.9 509.7"/><polyline points="298 544.2 298.6 544.1 299.1 544 299.7 544 300.2 543.9 300.8 543.8 301.4 543.7 301.9 543.6 302.5 543.5 303 543.4 303.6 543.3 304.1 543.2 304.7 543.1 305.2 543 305.8 542.9 306.3 542.8 306.8 542.7 307.4 542.6 307.9 542.5 308.4 542.3 309 542.2 309.5 542.1 310 542 310.6 541.9 311.1 541.7 311.6 541.6 312.1 541.5 312.7 541.3 313.2 541.2 313.7 541.1 314.2 540.9 314.7 540.8 315.2 540.6"/><polyline points="243.8 478.8 243.3 478.9 242.8 479.1 242.3 479.2 241.8 479.4 241.3 479.5 240.8 479.7 240.3 479.9 239.8 480 239.3 480.2 238.9 480.4 238.4 480.5 237.9 480.7 237.4 480.9 237 481 236.5 481.2 236 481.4 235.6 481.6 235.1 481.7 234.7 481.9 234.2 482.1 233.8 482.3 233.3 482.5 232.9 482.7 232.4 482.9 232 483.1 231.5 483.3 231.1 483.5 230.7 483.6 230.3 483.9 229.8 484.1 229.4 484.3 229 484.5"/><polyline points="279.5 474 278.9 474 278.3 474 277.8 474 277.2 474 276.6 474 276 474 275.4 474.1 274.8 474.1 274.3 474.1 273.7 474.1 273.1 474.1 272.5 474.2 271.9 474.2 271.3 474.2 270.8 474.3 270.2 474.3 269.6 474.4 269 474.4 268.5 474.4 267.9 474.5 267.3 474.5 266.7 474.6 266.2 474.6 265.6 474.7 265 474.8 264.4 474.8 263.9 474.9 263.3 474.9 262.7 475 262.2 475.1 261.6 475.1 261 475.2"/><polyline points="298 475.2 297.4 475.1 296.9 475.1 296.3 475 295.7 474.9 295.2 474.9 294.6 474.8 294 474.8 293.4 474.7 292.9 474.6 292.3 474.6 291.7 474.5 291.1 474.5 290.6 474.4 290 474.4 289.4 474.4 288.8 474.3 288.3 474.3 287.7 474.2 287.1 474.2 286.5 474.2 285.9 474.1 285.3 474.1 284.8 474.1 284.2 474.1 283.6 474.1 283 474 282.4 474 281.8 474 281.3 474 280.7 474 280.1 474 279.5 474"/><polyline points="217.7 491.9 218 491.6 218.3 491.4 218.6 491.1 218.9 490.9 219.2 490.6 219.5 490.4 219.8 490.1 220.1 489.9 220.5 489.6 220.8 489.4 221.1 489.2 221.5 488.9 221.8 488.7 222.1 488.4 222.5 488.2 222.9 488 223.2 487.7 223.6 487.5 223.9 487.3 224.3 487.1 224.7 486.8 225.1 486.6 225.4 486.4 225.8 486.2 226.2 485.9 226.6 485.7 227 485.5 227.4 485.3 227.8 485.1 228.2 484.9 228.6 484.7 229 484.5"/><polyline points="210.5 518.9 210.7 519.2 210.8 519.5 211 519.8 211.2 520.1 211.3 520.4 211.5 520.6 211.7 520.9 211.9 521.2 212.1 521.5 212.3 521.7 212.5 522 212.7 522.3 212.9 522.6 213.1 522.8 213.3 523.1 213.5 523.4 213.8 523.6 214 523.9 214.2 524.2 214.5 524.4 214.7 524.7 215 525 215.2 525.2 215.5 525.5 215.7 525.8 216 526 216.3 526.3 216.5 526.5 216.8 526.8 217.1 527.1 217.4 527.3 217.7 527.6"/><polyline points="261 475.2 260.5 475.3 259.9 475.4 259.3 475.5 258.8 475.5 258.2 475.6 257.7 475.7 257.1 475.8 256.6 475.9 256 476 255.5 476.1 254.9 476.2 254.4 476.3 253.8 476.4 253.3 476.5 252.7 476.6 252.2 476.7 251.6 476.8 251.1 477 250.6 477.1 250 477.2 249.5 477.3 249 477.4 248.4 477.6 247.9 477.7 247.4 477.8 246.9 477.9 246.4 478.1 245.8 478.2 245.3 478.4 244.8 478.5 244.3 478.6 243.8 478.8"/><polyline points="315.2 478.8 314.7 478.6 314.2 478.5 313.7 478.4 313.2 478.2 312.7 478.1 312.1 477.9 311.6 477.8 311.1 477.7 310.6 477.6 310 477.4 309.5 477.3 309 477.2 308.4 477.1 307.9 477 307.4 476.8 306.8 476.7 306.3 476.6 305.8 476.5 305.2 476.4 304.7 476.3 304.1 476.2 303.6 476.1 303 476 302.5 475.9 301.9 475.8 301.4 475.7 300.8 475.6 300.2 475.5 299.7 475.5 299.1 475.4 298.6 475.3 298 475.2"/><polyline points="217.7 491.9 217.4 492.1 217.1 492.4 216.8 492.6 216.5 492.9 216.3 493.1 216 493.4 215.7 493.7 215.5 493.9 215.2 494.2 215 494.4 214.7 494.7 214.5 495 214.2 495.2 214 495.5 213.8 495.8 213.5 496 213.3 496.3 213.1 496.6 212.9 496.9 212.7 497.1 212.5 497.4 212.3 497.7 212.1 498 211.9 498.2 211.7 498.5 211.5 498.8 211.3 499.1 211.2 499.3 211 499.6 210.8 499.9 210.7 500.2 210.5 500.5"/><polyline points="330 484.5 329.6 484.3 329.2 484.1 328.8 483.9 328.3 483.6 327.9 483.5 327.5 483.3 327 483.1 326.6 482.9 326.2 482.7 325.7 482.5 325.3 482.3 324.8 482.1 324.4 481.9 323.9 481.7 323.4 481.6 323 481.4 322.5 481.2 322 481 321.6 480.9 321.1 480.7 320.6 480.5 320.1 480.4 319.7 480.2 319.2 480 318.7 479.9 318.2 479.7 317.7 479.5 317.2 479.4 316.7 479.2 316.2 479.1 315.7 478.9 315.2 478.8"/><polyline points="208.1 509.7 208.1 510 208.1 510.3 208.1 510.6 208.1 510.9 208.2 511.2 208.2 511.5 208.2 511.7 208.2 512 208.3 512.3 208.3 512.6 208.4 512.9 208.4 513.2 208.5 513.5 208.6 513.8 208.6 514.1 208.7 514.4 208.8 514.7 208.9 514.9 209 515.2 209 515.5 209.1 515.8 209.2 516.1 209.4 516.4 209.5 516.7 209.6 517 209.7 517.2 209.8 517.5 210 517.8 210.1 518.1 210.2 518.4 210.4 518.7 210.5 518.9"/><polyline points="210.5 500.5 210.4 500.7 210.2 501 210.1 501.3 210 501.6 209.8 501.9 209.7 502.2 209.6 502.5 209.5 502.7 209.4 503 209.2 503.3 209.1 503.6 209 503.9 209 504.2 208.9 504.5 208.8 504.8 208.7 505 208.6 505.3 208.6 505.6 208.5 505.9 208.4 506.2 208.4 506.5 208.3 506.8 208.3 507.1 208.2 507.4 208.2 507.7 208.2 508 208.2 508.2 208.1 508.5 208.1 508.8 208.1 509.1 208.1 509.4 208.1 509.7"/><polyline points="330 535 330.4 534.7 330.8 534.5 331.2 534.3 331.6 534.1 332 533.9 332.4 533.7 332.8 533.5 333.2 533.2 333.6 533 334 532.8 334.3 532.6 334.7 532.4 335.1 532.1 335.4 531.9 335.8 531.7 336.2 531.4 336.5 531.2 336.9 531 337.2 530.7 337.6 530.5 337.9 530.3 338.2 530 338.6 529.8 338.9 529.5 339.2 529.3 339.5 529.1 339.8 528.8 340.1 528.6 340.5 528.3 340.8 528.1 341.1 527.8 341.4 527.6"/><polyline points="141.6 485.8 141.6 486.4 141.6 487 141.6 487.5 141.6 488.1 141.7 488.7 141.7 489.2 141.8 489.8 141.8 490.4 141.9 490.9 142 491.5 142.1 492 142.2 492.6 142.3 493.2 142.5 493.7 142.6 494.3 142.7 494.8 142.9 495.4 143 496 143.2 496.5 143.4 497.1 143.6 497.6 143.8 498.2 144 498.7 144.2 499.3 144.4 499.9 144.7 500.4 144.9 501 145.2 501.5 145.4 502.1 145.7 502.6 146 503.1 146.3 503.7"/><polyline points="146.3 468 146 468.5 145.7 469.1 145.4 469.6 145.2 470.2 144.9 470.7 144.7 471.3 144.4 471.8 144.2 472.4 144 472.9 143.8 473.5 143.6 474 143.4 474.6 143.2 475.2 143 475.7 142.9 476.3 142.7 476.8 142.6 477.4 142.5 478 142.3 478.5 142.2 479.1 142.1 479.6 142 480.2 141.9 480.8 141.8 481.3 141.8 481.9 141.7 482.5 141.7 483 141.6 483.6 141.6 484.1 141.6 484.7 141.6 485.3 141.6 485.8"/><polyline points="377.1 534.6 377.9 534.2 378.6 533.8 379.4 533.4 380.2 533 381 532.6 381.7 532.2 382.5 531.7 383.2 531.3 384 530.9 384.7 530.5 385.4 530 386.1 529.6 386.9 529.2 387.6 528.7 388.3 528.3 389 527.8 389.6 527.4 390.3 526.9 391 526.5 391.6 526 392.3 525.6 392.9 525.1 393.6 524.6 394.2 524.2 394.8 523.7 395.5 523.2 396.1 522.7 396.7 522.3 397.3 521.8 397.8 521.3 398.4 520.8 399 520.3"/><polyline points="243.8 419.2 242.7 419.4 241.6 419.5 240.5 419.7 239.5 419.8 238.4 420 237.3 420.2 236.2 420.4 235.2 420.5 234.1 420.7 233 420.9 232 421.1 230.9 421.3 229.9 421.5 228.8 421.7 227.8 421.9 226.7 422.1 225.7 422.3 224.6 422.6 223.6 422.8 222.6 423 221.5 423.3 220.5 423.5 219.5 423.7 218.5 424 217.5 424.2 216.5 424.5 215.5 424.8 214.5 425 213.5 425.3 212.5 425.6 211.5 425.8 210.5 426.1"/><polyline points="348.5 545.6 349.5 545.3 350.4 545 351.4 544.7 352.4 544.4 353.3 544.1 354.3 543.8 355.2 543.5 356.2 543.2 357.1 542.9 358 542.5 358.9 542.2 359.9 541.9 360.8 541.6 361.7 541.2 362.6 540.9 363.5 540.6 364.4 540.2 365.3 539.9 366.2 539.5 367 539.2 367.9 538.8 368.8 538.4 369.6 538.1 370.5 537.7 371.3 537.3 372.2 536.9 373 536.6 373.8 536.2 374.6 535.8 375.4 535.4 376.3 535 377.1 534.6"/><polyline points="279.5 416.9 278.4 416.9 277.3 416.9 276.1 416.9 275 416.9 273.9 416.9 272.7 417 271.6 417 270.5 417 269.4 417.1 268.2 417.1 267.1 417.2 266 417.2 264.9 417.3 263.7 417.3 262.6 417.4 261.5 417.5 260.4 417.5 259.3 417.6 258.2 417.7 257 417.8 255.9 417.9 254.8 418 253.7 418.1 252.6 418.2 251.5 418.3 250.4 418.4 249.3 418.5 248.2 418.7 247.1 418.8 246 418.9 244.9 419.1 243.8 419.2"/><polyline points="412.8 503.7 413 503.1 413.3 502.6 413.6 502.1 413.9 501.5 414.1 501 414.4 500.4 414.6 499.8 414.8 499.3 415 498.7 415.2 498.2 415.4 497.6 415.6 497.1 415.8 496.5 416 496 416.1 495.4 416.3 494.8 416.4 494.3 416.6 493.7 416.7 493.2 416.8 492.6 416.9 492 417 491.5 417.1 490.9 417.2 490.4 417.2 489.8 417.3 489.2 417.3 488.7 417.4 488.1 417.4 487.5 417.4 487 417.5 486.4 417.5 485.8"/><polyline points="279.5 554.8 280.6 554.8 281.8 554.8 282.9 554.8 284 554.8 285.2 554.8 286.3 554.7 287.4 554.7 288.5 554.7 289.7 554.6 290.8 554.6 291.9 554.5 293 554.5 294.2 554.4 295.3 554.4 296.4 554.3 297.5 554.2 298.6 554.1 299.8 554.1 300.9 554 302 553.9 303.1 553.8 304.2 553.7 305.3 553.6 306.4 553.5 307.5 553.4 308.6 553.3 309.7 553.1 310.8 553 311.9 552.9 313 552.7 314.1 552.6 315.2 552.5"/><polyline points="315.2 419.2 314.1 419.1 313 418.9 311.9 418.8 310.8 418.7 309.7 418.6 308.6 418.4 307.5 418.3 306.4 418.2 305.3 418.1 304.2 418 303.1 417.9 302 417.8 300.9 417.7 299.8 417.6 298.6 417.5 297.5 417.5 296.4 417.4 295.3 417.3 294.2 417.3 293 417.2 291.9 417.2 290.8 417.1 289.7 417.1 288.5 417 287.4 417 286.3 417 285.2 416.9 284 416.9 282.9 416.9 281.8 416.9 280.6 416.9 279.5 416.9"/><polyline points="182 437.1 182.8 436.7 183.6 436.3 184.4 435.9 185.2 435.5 186 435.1 186.9 434.7 187.7 434.4 188.5 434 189.4 433.6 190.3 433.2 191.1 432.9 192 432.5 192.9 432.2 193.7 431.8 194.6 431.5 195.5 431.1 196.4 430.8 197.3 430.4 198.2 430.1 199.2 429.8 200.1 429.5 201 429.1 201.9 428.8 202.9 428.5 203.8 428.2 204.7 427.9 205.7 427.6 206.7 427.3 207.6 427 208.6 426.7 209.6 426.4 210.5 426.1"/><polyline points="399 520.3 399.5 519.8 400.1 519.3 400.6 518.8 401.2 518.4 401.7 517.9 402.2 517.4 402.7 516.8 403.2 516.3 403.7 515.8 404.2 515.3 404.7 514.8 405.2 514.3 405.6 513.8 406.1 513.3 406.5 512.8 407 512.2 407.4 511.7 407.8 511.2 408.2 510.7 408.6 510.1 409 509.6 409.4 509.1 409.8 508.5 410.1 508 410.5 507.5 410.8 506.9 411.2 506.4 411.5 505.9 411.8 505.3 412.2 504.8 412.5 504.2 412.8 503.7"/><polyline points="348.5 426.1 347.5 425.8 346.5 425.6 345.5 425.3 344.5 425 343.5 424.8 342.5 424.5 341.5 424.2 340.5 424 339.5 423.7 338.5 423.5 337.5 423.3 336.4 423 335.4 422.8 334.4 422.6 333.3 422.3 332.3 422.1 331.3 421.9 330.2 421.7 329.2 421.5 328.1 421.3 327 421.1 326 420.9 324.9 420.7 323.9 420.5 322.8 420.4 321.7 420.2 320.6 420 319.6 419.8 318.5 419.7 317.4 419.5 316.3 419.4 315.2 419.2"/><polyline points="412.8 468 412.5 467.4 412.2 466.9 411.8 466.4 411.5 465.8 411.2 465.3 410.8 464.7 410.5 464.2 410.1 463.7 409.8 463.1 409.4 462.6 409 462.1 408.6 461.5 408.2 461 407.8 460.5 407.4 460 407 459.4 406.5 458.9 406.1 458.4 405.6 457.9 405.2 457.4 404.7 456.9 404.2 456.4 403.7 455.8 403.2 455.3 402.7 454.8 402.2 454.3 401.7 453.8 401.2 453.3 400.6 452.8 400.1 452.3 399.5 451.8 399 451.4"/><polyline points="417.5 485.8 417.5 485.3 417.4 484.7 417.4 484.1 417.4 483.6 417.3 483 417.3 482.5 417.2 481.9 417.2 481.3 417.1 480.8 417 480.2 416.9 479.6 416.8 479.1 416.7 478.5 416.6 478 416.4 477.4 416.3 476.8 416.1 476.3 416 475.7 415.8 475.2 415.6 474.6 415.4 474.1 415.2 473.5 415 472.9 414.8 472.4 414.6 471.8 414.4 471.3 414.1 470.7 413.9 470.2 413.6 469.6 413.3 469.1 413.1 468.5 412.8 468"/><polyline points="399 451.4 398.4 450.9 397.8 450.4 397.3 449.9 396.7 449.4 396.1 448.9 395.5 448.5 394.8 448 394.2 447.5 393.6 447.1 392.9 446.6 392.3 446.1 391.6 445.7 391 445.2 390.3 444.8 389.6 444.3 389 443.9 388.3 443.4 387.6 443 386.9 442.5 386.1 442.1 385.4 441.7 384.7 441.2 384 440.8 383.2 440.4 382.5 439.9 381.7 439.5 381 439.1 380.2 438.7 379.4 438.3 378.6 437.9 377.9 437.5 377.1 437.1"/><polyline points="377.1 437.1 376.3 436.7 375.4 436.3 374.6 435.9 373.8 435.5 373 435.1 372.2 434.7 371.3 434.4 370.5 434 369.6 433.6 368.8 433.3 367.9 432.9 367 432.5 366.2 432.2 365.3 431.8 364.4 431.5 363.5 431.1 362.6 430.8 361.7 430.4 360.8 430.1 359.9 429.8 358.9 429.5 358 429.1 357.1 428.8 356.2 428.5 355.2 428.2 354.3 427.9 353.3 427.6 352.4 427.3 351.4 427 350.4 426.7 349.5 426.4 348.5 426.1"/><polyline points="243.8 552.5 244.9 552.6 246 552.7 247.1 552.9 248.2 553 249.3 553.1 250.4 553.3 251.5 553.4 252.6 553.5 253.7 553.6 254.8 553.7 255.9 553.8 257 553.9 258.2 554 259.3 554.1 260.4 554.1 261.5 554.2 262.6 554.3 263.7 554.4 264.9 554.4 266 554.5 267.1 554.5 268.2 554.6 269.4 554.6 270.5 554.7 271.6 554.7 272.7 554.7 273.9 554.8 275 554.8 276.1 554.8 277.3 554.8 278.4 554.8 279.5 554.8"/><polyline points="315.2 552.5 316.3 552.3 317.4 552.2 318.5 552 319.6 551.8 320.6 551.7 321.7 551.5 322.8 551.3 323.9 551.1 324.9 551 326 550.8 327 550.6 328.1 550.4 329.2 550.2 330.2 550 331.3 549.8 332.3 549.6 333.3 549.3 334.4 549.1 335.4 548.9 336.4 548.7 337.5 548.4 338.5 548.2 339.5 547.9 340.5 547.7 341.5 547.4 342.5 547.2 343.5 546.9 344.5 546.7 345.5 546.4 346.5 546.1 347.5 545.8 348.5 545.6"/><polyline points="160 451.4 159.5 451.8 158.9 452.3 158.4 452.8 157.8 453.3 157.3 453.8 156.8 454.3 156.3 454.8 155.8 455.3 155.3 455.8 154.8 456.4 154.3 456.9 153.8 457.4 153.4 457.9 152.9 458.4 152.5 458.9 152.1 459.4 151.6 460 151.2 460.5 150.8 461 150.4 461.5 150 462.1 149.6 462.6 149.2 463.1 148.9 463.7 148.5 464.2 148.2 464.7 147.8 465.3 147.5 465.8 147.2 466.4 146.9 466.9 146.5 467.4 146.3 468"/><polyline points="160 451.4 160.6 450.9 161.2 450.4 161.8 449.9 162.4 449.4 163 448.9 163.6 448.5 164.2 448 164.8 447.5 165.4 447.1 166.1 446.6 166.7 446.1 167.4 445.7 168 445.2 168.7 444.8 169.4 444.3 170.1 443.9 170.8 443.4 171.4 443 172.2 442.5 172.9 442.1 173.6 441.7 174.3 441.2 175 440.8 175.8 440.4 176.5 439.9 177.3 439.5 178 439.1 178.8 438.7 179.6 438.3 180.4 437.9 181.2 437.5 182 437.1"/><polyline points="210.5 545.6 211.5 545.8 212.5 546.1 213.5 546.4 214.5 546.7 215.5 546.9 216.5 547.2 217.5 547.4 218.5 547.7 219.5 547.9 220.5 548.2 221.5 548.4 222.6 548.7 223.6 548.9 224.6 549.1 225.7 549.3 226.7 549.6 227.8 549.8 228.8 550 229.9 550.2 230.9 550.4 232 550.6 233 550.8 234.1 551 235.2 551.1 236.2 551.3 237.3 551.5 238.4 551.7 239.5 551.8 240.5 552 241.6 552.2 242.7 552.3 243.8 552.5"/><polyline points="182 534.6 182.8 535 183.6 535.4 184.4 535.8 185.2 536.2 186 536.6 186.9 536.9 187.7 537.3 188.6 537.7 189.4 538.1 190.3 538.4 191.1 538.8 192 539.2 192.9 539.5 193.7 539.9 194.6 540.2 195.5 540.6 196.4 540.9 197.3 541.2 198.2 541.6 199.2 541.9 200.1 542.2 201 542.6 201.9 542.9 202.9 543.2 203.8 543.5 204.8 543.8 205.7 544.1 206.7 544.4 207.6 544.7 208.6 545 209.6 545.3 210.5 545.6"/><polyline points="146.3 503.7 146.6 504.2 146.9 504.8 147.2 505.3 147.5 505.9 147.8 506.4 148.2 506.9 148.5 507.5 148.9 508 149.2 508.5 149.6 509.1 150 509.6 150.4 510.1 150.8 510.7 151.2 511.2 151.6 511.7 152.1 512.2 152.5 512.8 152.9 513.3 153.4 513.8 153.8 514.3 154.3 514.8 154.8 515.3 155.3 515.8 155.8 516.3 156.3 516.8 156.8 517.4 157.3 517.9 157.8 518.4 158.4 518.9 158.9 519.3 159.5 519.8 160 520.3"/><polyline points="160 520.3 160.6 520.8 161.2 521.3 161.8 521.8 162.4 522.3 163 522.7 163.6 523.2 164.2 523.7 164.8 524.2 165.4 524.6 166.1 525.1 166.7 525.6 167.4 526 168 526.5 168.7 526.9 169.4 527.4 170.1 527.8 170.8 528.3 171.4 528.7 172.2 529.2 172.9 529.6 173.6 530 174.3 530.5 175 530.9 175.8 531.3 176.5 531.7 177.3 532.2 178.1 532.6 178.8 533 179.6 533.4 180.4 533.8 181.2 534.2 182 534.6"/><polyline points="110.5 496.6 111.4 497.3 112.2 498 113 498.7 113.8 499.4 114.7 500.1 115.5 500.7 116.4 501.4 117.3 502.1 118.2 502.7 119.1 503.4 120 504"/><polyline points="182 363.4 183.3 363 184.7 362.6 186.1 362.2 187.5 361.9 188.9 361.5 190.4 361.1 191.8 360.7 193.2 360.4 194.7 360 196.1 359.7 197.5 359.4 199 359 200.4 358.7 201.9 358.4 203.4 358.1 204.8 357.8 206.3 357.5 207.8 357.2 209.3 356.9 210.8 356.6 212.3 356.3 213.8 356 215.3 355.8 216.8 355.5 218.3 355.3 219.8 355 221.4 354.8 222.9 354.5 224.4 354.3 225.9 354.1 227.5 353.9 229 353.7"/><polyline points="91.05 473.1 91.47 473.9 91.9 474.7 92.35 475.4 92.81 476.2 93.28 477 93.76 477.7 94.25 478.5 94.76 479.2 95.28 480 95.81 480.7 96.35 481.5 96.91 482.2 97.48 483 98.06 483.7 98.65 484.5 99.26 485.2 99.88 485.9 100.5 486.7 101.1 487.4 101.8 488.1 102.5 488.9 103.1 489.6 103.8 490.3 104.5 491 105.2 491.7 106 492.4 106.7 493.1 107.4 493.9 108.2 494.6 109 495.3 109.8 495.9 110.5 496.6"/><polyline points="84.4 447.9 84.41 448.7 84.43 449.5 84.46 450.3 84.51 451.1 84.57 451.9 84.64 452.7 84.72 453.5 84.82 454.3 84.93 455 85.06 455.8 85.19 456.6 85.34 457.4 85.51 458.2 85.68 459 85.87 459.8 86.07 460.6 86.29 461.4 86.52 462.2 86.76 463 87.01 463.8 87.28 464.5 87.56 465.3 87.85 466.1 88.15 466.9 88.47 467.7 88.8 468.5 89.15 469.2 89.5 470 89.87 470.8 90.25 471.6 90.65 472.3 91.05 473.1"/><polyline points="110.5 399.1 109.8 399.8 109 400.5 108.2 401.2 107.4 401.9 106.7 402.6 106 403.3 105.2 404 104.5 404.7 103.8 405.4 103.1 406.2 102.5 406.9 101.8 407.6 101.1 408.3 100.5 409.1 99.87 409.8 99.26 410.5 98.65 411.3 98.06 412 97.48 412.8 96.91 413.5 96.35 414.3 95.81 415 95.28 415.8 94.76 416.5 94.25 417.3 93.76 418 93.27 418.8 92.8 419.6 92.35 420.3 91.9 421.1 91.47 421.9 91.05 422.6"/><polyline points="110.5 399.1 111.3 398.4 112.2 397.7 113 397 113.8 396.4 114.7 395.7 115.5 395 116.4 394.3 117.3 393.7 118.2 393 119.1 392.4 120 391.7 120.9 391.1 121.9 390.4 122.8 389.8 123.8 389.1 124.7 388.5 125.7 387.9 126.7 387.2 127.7 386.6 128.7 386 129.7 385.4 130.7 384.8 131.8 384.2 132.8 383.6 133.9 383 134.9 382.4 136 381.8 137.1 381.2 138.2 380.6 139.3 380 140.4 379.5 141.5 378.9"/><polyline points="279.5 350.3 277.9 350.3 276.3 350.3 274.7 350.4 273.1 350.4 271.5 350.4 269.9 350.5 268.3 350.5 266.8 350.5 265.2 350.6 263.6 350.7 262 350.7 260.4 350.8 258.8 350.9 257.2 351 255.6 351.1 254 351.2 252.5 351.3 250.9 351.4 249.3 351.5 247.7 351.6 246.2 351.8 244.6 351.9 243 352.1 241.5 352.2 239.9 352.4 238.3 352.5 236.8 352.7 235.2 352.9 233.7 353.1 232.1 353.3 230.6 353.5 229 353.7"/><polyline points="330 353.7 328.5 353.5 326.9 353.3 325.4 353.1 323.8 352.9 322.3 352.7 320.7 352.5 319.1 352.4 317.6 352.2 316 352.1 314.4 351.9 312.9 351.8 311.3 351.6 309.7 351.5 308.1 351.4 306.6 351.3 305 351.2 303.4 351.1 301.8 351 300.2 350.9 298.6 350.8 297 350.7 295.5 350.7 293.9 350.6 292.3 350.5 290.7 350.5 289.1 350.5 287.5 350.4 285.9 350.4 284.3 350.4 282.7 350.3 281.1 350.3 279.5 350.3"/><polyline points="468 473.1 468.4 472.3 468.8 471.6 469.1 470.8 469.5 470 469.9 469.2 470.2 468.5 470.5 467.7 470.9 466.9 471.2 466.1 471.5 465.3 471.7 464.5 472 463.8 472.3 463 472.5 462.2 472.7 461.4 472.9 460.6 473.1 459.8 473.3 459 473.5 458.2 473.7 457.4 473.8 456.6 474 455.8 474.1 455 474.2 454.3 474.3 453.5 474.4 452.7 474.4 451.9 474.5 451.1 474.6 450.3 474.6 449.5 474.6 448.7 474.6 447.9"/><polyline points="439 504 439.9 503.4 440.8 502.7 441.7 502.1 442.6 501.4 443.5 500.7 444.3 500.1 445.2 499.4 446 498.7 446.9 498 447.7 497.3 448.5 496.6"/><polyline points="448.5 496.6 449.3 495.9 450 495.2 450.8 494.6 451.6 493.8 452.3 493.1 453.1 492.4 453.8 491.7 454.5 491 455.2 490.3 455.9 489.6 456.6 488.9 457.2 488.1 457.9 487.4 458.5 486.7 459.1 485.9 459.8 485.2 460.4 484.5 461 483.7 461.5 483 462.1 482.2 462.7 481.5 463.2 480.7 463.7 480 464.3 479.2 464.8 478.5 465.3 477.7 465.7 476.9 466.2 476.2 466.7 475.4 467.1 474.7 467.5 473.9 468 473.1"/><polyline points="417.5 378.9 416.3 378.3 415.2 377.8 414 377.2 412.9 376.7 411.7 376.1 410.5 375.6 409.3 375.1 408.2 374.5 406.9 374 405.7 373.5 404.5 373 403.3 372.5 402 372 400.8 371.5 399.5 371 398.3 370.5 397 370 395.7 369.5 394.4 369.1 393.2 368.6 391.9 368.1 390.5 367.7 389.2 367.2 387.9 366.8 386.6 366.3 385.2 365.9 383.9 365.5 382.5 365 381.2 364.6 379.8 364.2 378.4 363.8 377.1 363.4"/><polyline points="377.1 363.4 375.7 363 374.3 362.6 372.9 362.2 371.5 361.9 370.1 361.5 368.7 361.1 367.2 360.8 365.8 360.4 364.4 360 362.9 359.7 361.5 359.4 360 359 358.6 358.7 357.1 358.4 355.6 358.1 354.2 357.8 352.7 357.5 351.2 357.2 349.7 356.9 348.2 356.6 346.7 356.3 345.2 356 343.7 355.8 342.2 355.5 340.7 355.3 339.2 355 337.7 354.8 336.1 354.5 334.6 354.3 333.1 354.1 331.5 353.9 330 353.7"/><polyline points="474.6 447.9 474.6 447.1 474.6 446.3 474.6 445.5 474.5 444.7 474.4 443.9 474.4 443.1 474.3 442.3 474.2 441.5 474.1 440.7 474 439.9 473.8 439.1 473.7 438.3 473.5 437.5 473.3 436.7 473.1 435.9 472.9 435.1 472.7 434.4 472.5 433.6 472.3 432.8 472 432 471.7 431.2 471.5 430.4 471.2 429.6 470.9 428.8 470.5 428.1 470.2 427.3 469.9 426.5 469.5 425.7 469.1 424.9 468.8 424.2 468.4 423.4 468 422.6"/><polyline points="448.5 399.1 447.7 398.4 446.9 397.7 446 397 445.2 396.4 444.3 395.7 443.5 395 442.6 394.4 441.7 393.7 440.8 393 439.9 392.4 439 391.7 438.1 391.1 437.2 390.4 436.2 389.8 435.3 389.1 434.3 388.5 433.3 387.9 432.3 387.2 431.3 386.6 430.3 386 429.3 385.4 428.3 384.8 427.2 384.2 426.2 383.6 425.1 383 424.1 382.4 423 381.8 421.9 381.2 420.8 380.6 419.7 380 418.6 379.5 417.5 378.9"/><polyline points="468 422.6 467.5 421.9 467.1 421.1 466.7 420.3 466.2 419.6 465.7 418.8 465.3 418 464.8 417.3 464.3 416.5 463.7 415.8 463.2 415 462.7 414.3 462.1 413.5 461.5 412.8 461 412 460.4 411.3 459.8 410.5 459.1 409.8 458.5 409.1 457.9 408.3 457.2 407.6 456.6 406.9 455.9 406.2 455.2 405.5 454.5 404.7 453.8 404 453.1 403.3 452.3 402.6 451.6 401.9 450.8 401.2 450 400.5 449.3 399.8 448.5 399.1"/><polyline points="141.5 378.9 142.7 378.3 143.8 377.8 145 377.2 146.1 376.7 147.3 376.1 148.5 375.6 149.7 375.1 150.9 374.5 152.1 374 153.3 373.5 154.5 373 155.7 372.5 157 372 158.2 371.5 159.5 371 160.7 370.5 162 370 163.3 369.5 164.6 369.1 165.9 368.6 167.2 368.1 168.5 367.7 169.8 367.2 171.1 366.8 172.4 366.3 173.8 365.9 175.1 365.5 176.5 365 177.8 364.6 179.2 364.2 180.6 363.8 182 363.4"/><polyline points="91.05 422.6 90.65 423.4 90.25 424.2 89.87 424.9 89.5 425.7 89.14 426.5 88.8 427.3 88.47 428.1 88.15 428.8 87.85 429.6 87.56 430.4 87.28 431.2 87.01 432 86.76 432.8 86.52 433.6 86.29 434.4 86.07 435.1 85.87 435.9 85.68 436.7 85.51 437.5 85.34 438.3 85.19 439.1 85.06 439.9 84.93 440.7 84.82 441.5 84.72 442.3 84.64 443.1 84.57 443.9 84.51 444.7 84.46 445.5 84.43 446.3 84.41 447.1 84.4 447.9"/><polyline points="486.4 338.7 485.5 337.8 484.5 337 483.5 336.1 482.4 335.3 481.4 334.5 480.3 333.7 479.3 332.8 478.2 332 477.1 331.2 476 330.4 474.9 329.6 473.7 328.8 472.6 328 471.4 327.2 470.3 326.4 469.1 325.7 467.9 324.9 466.7 324.1 465.5 323.4 464.2 322.6 463 321.9 461.7 321.1 460.4 320.4 459.2 319.6 457.9 318.9 456.6 318.2 455.2 317.4 453.9 316.7 452.6 316 451.2 315.3 449.9 314.6 448.5 313.9"/><polyline points="110.5 313.9 111.9 313.2 113.3 312.6 114.7 311.9 116.2 311.2 117.6 310.5 119 309.9 120.5 309.2 122 308.6 123.4 307.9 124.9 307.3 126.4 306.7 127.9 306 129.4 305.4 131 304.8 132.5 304.2 134 303.6 135.6 303 137.2 302.4 138.7 301.9 140.3 301.3 141.9 300.7 143.5 300.2 145.1 299.6 146.8 299.1 148.4 298.5 150 298 151.7 297.5 153.3 296.9 155 296.4 156.7 295.9 158.3 295.4 160 294.9"/><polyline points="448.5 313.9 447.1 313.2 445.7 312.6 444.3 311.9 442.9 311.2 441.4 310.5 440 309.9 438.5 309.2 437.1 308.6 435.6 307.9 434.1 307.3 432.6 306.7 431.1 306 429.6 305.4 428.1 304.8 426.5 304.2 425 303.6 423.4 303 421.9 302.4 420.3 301.9 418.7 301.3 417.1 300.7 415.5 300.2 413.9 299.6 412.3 299.1 410.6 298.5 409 298 407.4 297.5 405.7 296.9 404 296.4 402.4 295.9 400.7 295.4 399 294.9"/><polyline points="510.3 367.5 509.8 366.5 509.3 365.6 508.7 364.7 508.2 363.7 507.6 362.8 507 361.8 506.4 360.9 505.8 360 505.1 359.1 504.5 358.1 503.8 357.2 503.1 356.3 502.4 355.4 501.7 354.5 501 353.6 500.3 352.7 499.5 351.8 498.7 350.9 498 350 497.2 349.1 496.3 348.2 495.5 347.3 494.7 346.4 493.8 345.6 492.9 344.7 492.1 343.8 491.2 342.9 490.2 342.1 489.3 341.2 488.4 340.4 487.4 339.5 486.4 338.7"/><polyline points="510.3 429.3 510.8 428.4 511.3 427.4 511.8 426.5 512.2 425.5 512.7 424.6 513.1 423.6 513.5 422.7 513.9 421.7 514.2 420.7 514.6 419.8 514.9 418.8 515.3 417.8 515.6 416.9 515.9 415.9 516.2 415 516.4 414 516.7 413 516.9 412 517.1 411.1 517.3 410.1 517.5 409.1 517.7 408.2 517.8 407.2 517.9 406.2 518.1 405.2 518.2 404.3 518.3 403.3 518.3 402.3 518.4 401.3 518.4 400.3 518.5 399.4 518.5 398.4"/><polyline points="48.7 367.5 48.2 368.4 47.72 369.4 47.25 370.3 46.8 371.3 46.36 372.2 45.94 373.2 45.54 374.1 45.15 375.1 44.77 376 44.42 377 44.07 378 43.75 378.9 43.44 379.9 43.14 380.9 42.86 381.8 42.6 382.8 42.35 383.8 42.12 384.7 41.91 385.7 41.71 386.7 41.52 387.7 41.35 388.6 41.2 389.6 41.07 390.6 40.95 391.6 40.84 392.5 40.76 393.5 40.68 394.5 40.63 395.5 40.59 396.4 40.56 397.4 40.56 398.4"/><polyline points="518.5 398.4 518.5 397.4 518.4 396.4 518.4 395.5 518.3 394.5 518.3 393.5 518.2 392.5 518.1 391.6 517.9 390.6 517.8 389.6 517.7 388.6 517.5 387.7 517.3 386.7 517.1 385.7 516.9 384.7 516.7 383.8 516.4 382.8 516.2 381.8 515.9 380.9 515.6 379.9 515.3 378.9 514.9 378 514.6 377 514.2 376 513.9 375.1 513.5 374.1 513.1 373.2 512.7 372.2 512.2 371.3 511.8 370.3 511.3 369.4 510.8 368.4 510.3 367.5"/><polyline points="399 294.9 397.3 294.5 395.6 294 393.9 293.5 392.2 293 390.4 292.6 388.7 292.1 386.9 291.7 385.2 291.3 383.4 290.8 381.7 290.4 379.9 290 378.1 289.6 376.3 289.2 374.6 288.8 372.8 288.4 371 288 369.1 287.7 367.3 287.3 365.5 286.9 363.7 286.6 361.9 286.2 360 285.9 358.2 285.6 356.3 285.3 354.5 285 352.6 284.7 350.7 284.4 348.9 284.1 347 283.8 345.1 283.5 343.2 283.3 341.4 283"/><polyline points="48.7 429.3 49.21 430.3 49.74 431.2 50.29 432.1 50.85 433.1 51.42 434 52.01 434.9 52.62 435.9 53.24 436.8 53.88 437.7"/><polyline points="217.7 283 219.6 282.8 221.5 282.5 223.4 282.3 225.3 282.1 227.2 281.8 229.1 281.6 231 281.4 232.9 281.2 234.8 281 236.7 280.9 238.7 280.7 240.6 280.5 242.5 280.4 244.5 280.2 246.4 280.1 248.3 280 250.3 279.8 252.2 279.7 254.1 279.6 256.1 279.5 258 279.4 260 279.3 261.9 279.3 263.9 279.2 265.8 279.1 267.8 279.1 269.7 279 271.7 279 273.7 279 275.6 278.9 277.6 278.9 279.5 278.9"/><polyline points="40.56 398.4 40.56 399.4 40.59 400.3 40.63 401.3 40.68 402.3 40.76 403.3 40.84 404.3 40.95 405.2 41.07 406.2 41.2 407.2 41.36 408.2 41.52 409.1 41.71 410.1 41.91 411.1 42.12 412 42.35 413 42.6 414 42.86 415 43.14 415.9 43.44 416.9 43.75 417.9 44.07 418.8 44.42 419.8 44.78 420.7 45.15 421.7 45.54 422.7 45.94 423.6 46.36 424.6 46.8 425.5 47.25 426.5 47.72 427.4 48.2 428.4 48.7 429.3"/><polyline points="341.4 283 339.5 282.8 337.6 282.5 335.7 282.3 333.8 282.1 331.9 281.8 330 281.6 328 281.4 326.1 281.2 324.2 281 322.3 280.9 320.4 280.7 318.4 280.5 316.5 280.4 314.6 280.2 312.6 280.1 310.7 280 308.8 279.8 306.8 279.7 304.9 279.6 302.9 279.5 301 279.4 299 279.3 297.1 279.3 295.1 279.2 293.2 279.1 291.2 279.1 289.3 279 287.3 279 285.4 279 283.4 278.9 281.5 278.9 279.5 278.9"/><polyline points="72.57 338.7 73.55 337.8 74.55 337 75.56 336.1 76.59 335.3 77.63 334.5 78.68 333.7 79.75 332.8 80.82 332 81.92 331.2 83.02 330.4 84.14 329.6 85.28 328.8 86.42 328 87.58 327.2 88.75 326.4 89.93 325.7 91.13 324.9 92.34 324.1 93.56 323.4 94.79 322.6 96.04 321.9 97.3 321.1 98.57 320.4 99.85 319.6 101.1 318.9 102.5 318.2 103.8 317.4 105.1 316.7 106.4 316 107.8 315.3 109.2 314.6 110.5 313.9"/><polyline points="160 294.9 161.7 294.5 163.4 294 165.1 293.5 166.9 293 168.6 292.6 170.3 292.1 172.1 291.7 173.8 291.3 175.6 290.8 177.3 290.4 179.1 290 180.9 289.6 182.7 289.2 184.5 288.8 186.3 288.4 188.1 288 189.9 287.7 191.7 287.3 193.5 286.9 195.3 286.6 197.2 286.2 199 285.9 200.9 285.6 202.7 285.3 204.6 285 206.4 284.7 208.3 284.4 210.2 284.1 212 283.8 213.9 283.5 215.8 283.3 217.7 283"/><polyline points="72.57 338.7 71.6 339.5 70.64 340.4 69.7 341.2 68.77 342.1 67.86 342.9 66.96 343.8 66.07 344.7 65.2 345.6 64.34 346.4 63.5 347.3 62.67 348.2 61.85 349.1 61.06 350 60.27 350.9 59.5 351.8 58.74 352.7 58 353.6 57.28 354.5 56.57 355.4 55.87 356.3 55.19 357.2 54.52 358.1 53.87 359.1 53.24 360 52.62 360.9 52.01 361.8 51.42 362.8 50.84 363.7 50.28 364.6 49.74 365.6 49.21 366.5 48.7 367.5"/><polyline points="505.1 437.7 505.8 436.8 506.4 435.9 507 434.9 507.6 434 508.2 433.1 508.7 432.1 509.3 431.2 509.8 430.3 510.3 429.3"/><polyline points="543.1 360.3 543.4 359.2 543.7 358.2 544 357.1 544.3 356 544.5 354.9 544.7 353.8 544.9 352.7 545.1 351.7 545.3 350.6 545.5 349.5 545.6 348.4 545.7 347.3 545.8 346.2 545.9 345.1 545.9 344 546 342.9 546 341.9 546 340.8"/><polyline points="546 340.8 546 339.7 546 338.6 545.9 337.5 545.9 336.4 545.8 335.3 545.7 334.2 545.6 333.1 545.5 332.1 545.3 331 545.1 329.9 544.9 328.8 544.7 327.7 544.5 326.6 544.3 325.5 544 324.5 543.7 323.4 543.4 322.3 543.1 321.2 542.8 320.1 542.5 319.1 542.1 318 541.7 316.9 541.3 315.8 540.9 314.8 540.5 313.7 540 312.6 539.5 311.6 539.1 310.5 538.6 309.5 538 308.4 537.5 307.3 536.9 306.3"/><polyline points="510.3 274.2 509.2 273.2 508.1 272.3 507 271.3 505.8 270.4 504.7 269.5 503.5 268.6 502.3 267.7 501.1 266.7 499.9 265.8 498.7 264.9 497.4 264.1 496.1 263.2 494.9 262.3 493.6 261.4 492.3 260.5 491 259.7 489.6 258.8 488.3 257.9 486.9 257.1 485.5 256.2 484.1 255.4 482.7 254.6 481.3 253.7 479.9 252.9 478.4 252.1 477 251.3 475.5 250.5 474 249.7 472.5 248.9 471 248.1 469.5 247.3 468 246.6"/><polyline points="48.7 274.2 47.62 275.1 46.55 276 45.5 277 44.46 278 43.44 278.9 42.44 279.9 41.45 280.9 40.48 281.8 39.52 282.8 38.58 283.8 37.66 284.8 36.75 285.8 35.86 286.8 34.98 287.8 34.12 288.8 33.28 289.8 32.45 290.8 31.64 291.8 30.85 292.8 30.07 293.8 29.31 294.9 28.57 295.9 27.84 296.9 27.14 297.9 26.44 299 25.77 300 25.11 301.1 24.47 302.1 23.84 303.1 23.24 304.2 22.64 305.2 22.07 306.3"/><polyline points="412.8 225.4 410.9 224.8 409 224.3 407.1 223.8 405.1 223.3 403.2 222.8 401.3 222.3 399.3 221.8 397.4 221.3 395.4 220.8 393.5 220.3 391.5 219.9 389.5 219.4 387.5 219 385.5 218.5 383.5 218.1 381.5 217.7 379.5 217.3 377.5 216.9 375.4 216.5 373.4 216.1 371.4 215.7 369.3 215.3 367.2 215 365.2 214.6 363.1 214.3 361 213.9 359 213.6 356.9 213.3 354.8 213 352.7 212.7 350.6 212.4 348.5 212.1"/><polyline points="12.99 340.8 13 341.9 13.03 342.9 13.07 344 13.13 345.1 13.21 346.2 13.31 347.3 13.43 348.4 13.56 349.5 13.71 350.6 13.88 351.7 14.07 352.7 14.27 353.8 14.5 354.9 14.74 356 15 357.1 15.27 358.2 15.56 359.2 15.88 360.3"/><polyline points="22.07 306.3 21.52 307.3 20.98 308.4 20.46 309.5 19.95 310.5 19.47 311.6 19 312.6 18.55 313.7 18.11 314.8 17.7 315.8 17.3 316.9 16.91 318 16.55 319.1 16.2 320.1 15.88 321.2 15.56 322.3 15.27 323.4 15 324.5 14.74 325.5 14.5 326.6 14.27 327.7 14.07 328.8 13.88 329.9 13.71 331 13.56 332.1 13.43 333.1 13.31 334.2 13.21 335.3 13.13 336.4 13.07 337.5 13.03 338.6 13 339.7 12.99 340.8"/><polyline points="536.9 306.3 536.4 305.2 535.8 304.2 535.2 303.1 534.5 302.1 533.9 301.1 533.2 300 532.6 299 531.9 297.9 531.2 296.9 530.4 295.9 529.7 294.9 528.9 293.8 528.2 292.8 527.4 291.8 526.6 290.8 525.7 289.8 524.9 288.8 524 287.8 523.2 286.8 522.3 285.8 521.4 284.8 520.4 283.8 519.5 282.8 518.5 281.8 517.6 280.9 516.6 279.9 515.6 278.9 514.6 278 513.5 277 512.5 276 511.4 275.1 510.3 274.2"/><polyline points="91.05 246.6 92.6 245.8 94.16 245 95.73 244.3 97.32 243.5 98.92 242.8 100.5 242 102.1 241.3 103.8 240.6 105.4 239.9 107.1 239.2 108.8 238.5 110.4 237.8 112.1 237.1 113.8 236.4 115.5 235.7 117.3 235.1 119 234.4 120.7 233.8 122.5 233.1 124.3 232.5 126 231.8 127.8 231.2 129.6 230.6 131.4 230 133.3 229.4 135.1 228.8 136.9 228.2 138.8 227.6 140.6 227.1 142.5 226.5 144.4 225.9 146.2 225.4"/><polyline points="279.5 207.5 281.7 207.5 283.9 207.5 286.1 207.6 288.2 207.6 290.4 207.6 292.6 207.7 294.8 207.8 296.9 207.8 299.1 207.9 301.3 208 303.5 208.1 305.6 208.2 307.8 208.3 310 208.4 312.1 208.5 314.3 208.7 316.5 208.8 318.6 209 320.8 209.1 322.9 209.3 325.1 209.5 327.2 209.7 329.4 209.9 331.5 210.1 333.6 210.3 335.8 210.5 337.9 210.8 340 211 342.2 211.3 344.3 211.5 346.4 211.8 348.5 212.1"/><polyline points="48.7 274.1 49.8 273.2 50.91 272.3 52.04 271.3 53.18 270.4 54.34 269.5 55.51 268.6 56.7 267.7 57.91 266.7 59.12 265.8 60.36 264.9 61.61 264 62.87 263.2 64.15 262.3 65.44 261.4 66.74 260.5 68.06 259.7 69.4 258.8 70.75 257.9 72.11 257.1 73.49 256.2 74.88 255.4 76.28 254.6 77.7 253.7 79.13 252.9 80.57 252.1 82.03 251.3 83.5 250.5 84.98 249.7 86.48 248.9 87.99 248.1 89.52 247.3 91.05 246.6"/><polyline points="146.2 225.4 148.1 224.8 150 224.3 152 223.8 153.9 223.3 155.8 222.8 157.7 222.3 159.7 221.8 161.6 221.3 163.6 220.8 165.6 220.3 167.5 219.9 169.5 219.4 171.5 219 173.5 218.5 175.5 218.1 177.5 217.7 179.5 217.3 181.6 216.9 183.6 216.5 185.6 216.1 187.7 215.7 189.7 215.3 191.8 215 193.8 214.6 195.9 214.3 198 213.9 200.1 213.6 202.2 213.3 204.2 213 206.3 212.7 208.4 212.4 210.5 212.1"/><polyline points="210.5 212.1 212.6 211.8 214.8 211.5 216.9 211.3 219 211 221.1 210.8 223.3 210.5 225.4 210.3 227.5 210.1 229.7 209.9 231.8 209.7 234 209.5 236.1 209.3 238.3 209.1 240.4 209 242.6 208.8 244.7 208.7 246.9 208.5 249.1 208.4 251.2 208.3 253.4 208.2 255.6 208.1 257.7 208 259.9 207.9 262.1 207.8 264.3 207.8 266.4 207.7 268.6 207.6 270.8 207.6 273 207.6 275.2 207.5 277.3 207.5 279.5 207.5"/><polyline points="468 246.6 466.4 245.8 464.9 245 463.3 244.3 461.7 243.5 460.1 242.8 458.5 242 456.9 241.3 455.2 240.6 453.6 239.9 451.9 239.2 450.3 238.5 448.6 237.8 446.9 237.1 445.2 236.4 443.5 235.7 441.8 235.1 440 234.4 438.3 233.8 436.5 233.1 434.8 232.5 433 231.8 431.2 231.2 429.4 230.6 427.6 230 425.8 229.4 423.9 228.8 422.1 228.2 420.3 227.6 418.4 227.1 416.5 226.5 414.7 225.9 412.8 225.4"/></g><g stroke-width="1.703"><polyline points="417.5 159.5 419.4 160 421.4 160.6 423.3 161.2 425.2 161.8 427.1 162.4 429 163 430.9 163.6 432.8 164.2 434.7 164.9 436.5 165.5 438.4 166.2 440.2 166.8 442.1 167.5 443.9 168.1 445.7 168.8 447.5 169.5 449.3 170.2 451 170.9 452.8 171.6 454.6 172.3 456.3 173 458 173.8 459.7 174.5 461.4 175.2 463.1 176 464.8 176.7 466.5 177.5 468.1 178.3 469.8 179 471.4 179.8 473 180.6 474.6 181.4"/><polyline points="40.56 210 39.43 210.9 38.33 211.9 37.24 212.9 36.17 213.9 35.11 214.9 34.07 215.9 33.05 216.9 32.04 217.9 31.05 218.9 30.08 220 29.12 221 28.18 222 27.26 223 26.35 224.1 25.46 225.1 24.59 226.1 23.74 227.2 22.9 228.2 22.08 229.3 21.27 230.3 20.49 231.4 19.72 232.5 18.97 233.5 18.23 234.6 17.52 235.7 16.82 236.7 16.14 237.8 15.47 238.9 14.82 240 14.2 241.1 13.58 242.1 12.99 243.2"/><polyline points="350.9 145.7 353.1 146 355.3 146.3 357.4 146.6 359.6 146.9 361.8 147.3 363.9 147.6 366.1 148 368.2 148.3 370.3 148.7 372.5 149.1 374.6 149.4 376.7 149.8 378.8 150.2 380.9 150.7 383 151.1 385.1 151.5 387.2 151.9 389.3 152.4 391.3 152.8 393.4 153.3 395.4 153.8 397.5 154.2 399.5 154.7 401.5 155.2 403.6 155.7 405.6 156.2 407.6 156.8 409.6 157.3 411.6 157.8 413.5 158.4 415.5 158.9 417.5 159.5"/><polyline points="474.6 181.4 476.2 182.2 477.8 183 479.3 183.8 480.9 184.6 482.4 185.5 484 186.3 485.5 187.1 487 188 488.4 188.8 489.9 189.7 491.4 190.6 492.8 191.4 494.2 192.3 495.6 193.2 497 194.1 498.4 195 499.8 195.9 501.1 196.8 502.5 197.7 503.8 198.6 505.1 199.5 506.4 200.4 507.7 201.4 508.9 202.3 510.2 203.2 511.4 204.2 512.6 205.1 513.8 206.1 515 207.1 516.2 208 517.3 209 518.5 210"/><polyline points="208.1 145.7 210.3 145.4 212.5 145.1 214.7 144.9 216.9 144.6 219.1 144.3 221.3 144.1 223.5 143.9 225.7 143.6 227.9 143.4 230.1 143.2 232.3 143 234.6 142.8 236.8 142.7 239 142.5 241.3 142.3 243.5 142.2 245.7 142 248 141.9 250.2 141.8 252.5 141.7 254.7 141.6 257 141.5 259.2 141.4 261.5 141.3 263.7 141.2 266 141.2 268.2 141.1 270.5 141.1 272.7 141 275 141 277.3 141 279.5 141"/><polyline points="518.5 210 519.6 210.9 520.7 211.9 521.8 212.9 522.8 213.9 523.9 214.9 524.9 215.9 526 216.9 527 217.9 528 218.9 528.9 220 529.9 221 530.8 222 531.8 223 532.7 224.1 533.6 225.1 534.4 226.1 535.3 227.2 536.1 228.2 536.9 229.3 537.7 230.3 538.5 231.4 539.3 232.5 540 233.5 540.8 234.6 541.5 235.7 542.2 236.7 542.9 237.8 543.5 238.9 544.2 240 544.8 241.1 545.4 242.1 546 243.2"/><polyline points="546 243.2 546.6 244.3 547.2 245.4 547.7 246.5 548.2 247.6 548.7 248.7 549.2 249.8 549.7 250.9 550.1 252 550.6 253.1 551 254.2 551.4 255.4 551.7 256.5 552.1 257.6 552.4 258.7 552.8 259.8 553.1 260.9 553.4 262 553.6 263.2 553.9 264.3 554.1 265.4 554.3 266.5 554.5 267.7 554.7 268.8 554.8 269.9 555 271 555.1 272.2 555.2 273.3 555.3 274.4 555.3 275.6 555.4 276.7 555.4 277.8"/><polyline points="40.56 210 41.69 209 42.84 208 44.01 207.1 45.2 206.1 46.4 205.1 47.61 204.2 48.84 203.2 50.09 202.3 51.35 201.4 52.63 200.4 53.92 199.5 55.23 198.6 56.55 197.7 57.89 196.8 59.24 195.9 60.6 195 61.99 194.1 63.38 193.2 64.8 192.3 66.22 191.4 67.66 190.6 69.11 189.7 70.58 188.8 72.06 188 73.56 187.1 75.06 186.3 76.59 185.5 78.12 184.6 79.67 183.8 81.24 183 82.81 182.2 84.4 181.4"/><polyline points="279.5 141 281.8 141 284 141 286.3 141 288.5 141.1 290.8 141.1 293.1 141.2 295.3 141.2 297.6 141.3 299.8 141.4 302.1 141.5 304.3 141.6 306.6 141.7 308.8 141.8 311.1 141.9 313.3 142 315.5 142.2 317.8 142.3 320 142.5 322.2 142.7 324.5 142.8 326.7 143 328.9 143.2 331.1 143.4 333.3 143.6 335.6 143.9 337.8 144.1 340 144.4 342.2 144.6 344.4 144.9 346.6 145.1 348.7 145.4 350.9 145.7"/><polyline points="12.99 243.2 12.42 244.3 11.86 245.4 11.32 246.5 10.8 247.6 10.29 248.7 9.807 249.8 9.34 250.9 8.89 252 8.459 253.1 8.046 254.2 7.651 255.4 7.274 256.5 6.916 257.6 6.575 258.7 6.253 259.8 5.95 260.9 5.665 262 5.396 263.2 5.147 264.3 4.917 265.4 4.706 266.5 4.512 267.7 4.336 268.8 4.179 269.9 4.041 271 3.921 272.2 3.819 273.3 3.736 274.4 3.672 275.6 3.625 276.7 3.598 277.8"/><polyline points="84.4 181.4 86.01 180.6 87.62 179.8 89.25 179 90.89 178.3 92.55 177.5 94.21 176.7 95.89 176 97.58 175.2 99.29 174.5 101 173.8 102.7 173 104.5 172.3 106.2 171.6 108 170.9 109.8 170.2 111.5 169.5 113.3 168.8 115.1 168.1 117 167.5 118.8 166.8 120.6 166.2 122.5 165.5 124.3 164.9 126.2 164.2 128.1 163.6 130 163 131.9 162.4 133.8 161.8 135.7 161.2 137.7 160.6 139.6 160 141.6 159.5"/><polyline points="141.6 159.5 143.5 158.9 145.5 158.4 147.5 157.8 149.4 157.3 151.4 156.8 153.4 156.2 155.5 155.7 157.5 155.2 159.5 154.7 161.5 154.2 163.6 153.8 165.6 153.3 167.7 152.8 169.8 152.4 171.8 151.9 173.9 151.5 176 151.1 178.1 150.6 180.2 150.2 182.3 149.8 184.4 149.4 186.6 149.1 188.7 148.7 190.8 148.3 193 148 195.1 147.6 197.3 147.3 199.4 146.9 201.6 146.6 203.8 146.3 205.9 146 208.1 145.7"/></g><g stroke-width=".6552"><polyline points="210.5 88.4 212.6 88.12 214.8 87.85 216.9 87.59 219 87.34 221.1 87.1 223.3 86.86 225.4 86.64 227.5 86.42 229.7 86.21 231.8 86.01 234 85.82 236.1 85.64 238.3 85.47 240.4 85.3 242.6 85.15 244.7 85 246.9 84.86 249.1 84.73 251.2 84.61 253.4 84.5 255.6 84.4 257.7 84.31 259.9 84.22 262.1 84.15 264.3 84.08 266.4 84.02 268.6 83.97 270.8 83.93 273 83.9 275.2 83.88 277.3 83.87 279.5 83.86"/><polyline points="412.8 101.7 414.7 102.3 416.5 102.8 418.4 103.4 420.3 104 422.1 104.5 423.9 105.1 425.8 105.7 427.6 106.3 429.4 106.9 431.2 107.5 433 108.2 434.8 108.8 436.5 109.4 438.3 110.1 440 110.7 441.8 111.4 443.5 112.1 445.2 112.7 446.9 113.4 448.6 114.1 450.3 114.8 451.9 115.5 453.6 116.2 455.2 116.9 456.9 117.6 458.5 118.4 460.1 119.1 461.7 119.9 463.3 120.6 464.9 121.4 466.4 122.1 468 122.9"/><polyline points="48.7 150.5 49.79 149.5 50.91 148.6 52.04 147.7 53.18 146.7 54.34 145.8 55.51 144.9 56.7 144 57.9 143.1 59.12 142.2 60.36 141.3 61.61 140.4 62.87 139.5 64.15 138.6 65.44 137.7 66.74 136.9 68.06 136 69.4 135.1 70.75 134.3 72.11 133.4 73.49 132.6 74.88 131.7 76.28 130.9 77.7 130.1 79.13 129.2 80.57 128.4 82.03 127.6 83.5 126.8 84.98 126 86.48 125.2 87.99 124.4 89.52 123.7 91.05 122.9"/><polyline points="510.3 150.5 511.4 151.4 512.5 152.4 513.5 153.3 514.6 154.3 515.6 155.3 516.6 156.2 517.6 157.2 518.5 158.2 519.5 159.2 520.4 160.1 521.4 161.1 522.3 162.1 523.2 163.1 524 164.1 524.9 165.1 525.7 166.1 526.6 167.1 527.4 168.1 528.2 169.2 528.9 170.2 529.7 171.2 530.4 172.2 531.2 173.2 531.9 174.3 532.6 175.3 533.2 176.3 533.9 177.4 534.5 178.4 535.2 179.5 535.8 180.5 536.4 181.6 536.9 182.6"/><polyline points="146.3 101.7 148.1 101.2 150 100.6 152 100.1 153.9 99.59 155.8 99.08 157.7 98.58 159.7 98.09 161.6 97.6 163.6 97.12 165.6 96.65 167.5 96.19 169.5 95.74 171.5 95.29 173.5 94.85 175.5 94.42 177.5 94 179.5 93.59 181.6 93.18 183.6 92.79 185.6 92.4 187.7 92.02 189.7 91.65 191.8 91.29 193.8 90.93 195.9 90.58 198 90.25 200.1 89.92 202.2 89.6 204.2 89.28 206.3 88.98 208.4 88.69 210.5 88.4"/><polyline points="91.05 122.9 92.6 122.1 94.16 121.4 95.73 120.6 97.32 119.9 98.92 119.1 100.5 118.4 102.1 117.6 103.8 116.9 105.4 116.2 107.1 115.5 108.8 114.8 110.4 114.1 112.1 113.4 113.8 112.7 115.5 112.1 117.3 111.4 119 110.7 120.7 110.1 122.5 109.4 124.3 108.8 126 108.2 127.8 107.5 129.6 106.9 131.4 106.3 133.3 105.7 135.1 105.1 136.9 104.5 138.8 104 140.6 103.4 142.5 102.8 144.4 102.3 146.3 101.7"/><polyline points="48.7 150.5 47.61 151.4 46.55 152.4 45.5 153.3 44.46 154.3 43.44 155.3 42.44 156.2 41.45 157.2 40.48 158.2 39.52 159.1 38.58 160.1 37.66 161.1 36.75 162.1 35.86 163.1 34.98 164.1 34.12 165.1 33.28 166.1 32.45 167.1 31.64 168.1 30.85 169.1 30.07 170.2 29.31 171.2 28.57 172.2 27.84 173.2 27.14 174.3 26.44 175.3 25.77 176.3 25.11 177.4 24.47 178.4 23.84 179.5 23.24 180.5 22.64 181.6 22.07 182.6"/><polyline points="468 122.9 469.5 123.7 471 124.4 472.5 125.2 474 126 475.5 126.8 477 127.6 478.4 128.4 479.9 129.3 481.3 130.1 482.7 130.9 484.1 131.7 485.5 132.6 486.9 133.4 488.3 134.3 489.6 135.1 491 136 492.3 136.9 493.6 137.7 494.9 138.6 496.1 139.5 497.4 140.4 498.7 141.3 499.9 142.2 501.1 143.1 502.3 144 503.5 144.9 504.7 145.8 505.8 146.7 507 147.7 508.1 148.6 509.2 149.5 510.3 150.5"/><polyline points="22.07 182.6 21.52 183.7 20.98 184.7 20.46 185.8 19.95 186.8 19.47 187.9 19 189 18.54 190 18.11 191.1 17.7 192.2 17.3 193.2 16.91 194.3 16.55 195.4 16.2 196.5"/><polyline points="348.5 88.4 350.6 88.69 352.7 88.98 354.8 89.29 356.9 89.6 359 89.92 361 90.25 363.1 90.59 365.2 90.93 367.2 91.29 369.3 91.65 371.4 92.02 373.4 92.4 375.4 92.79 377.5 93.19 379.5 93.59 381.5 94 383.5 94.43 385.5 94.86 387.5 95.29 389.5 95.74 391.5 96.19 393.5 96.66 395.4 97.13 397.4 97.6 399.3 98.09 401.3 98.58 403.2 99.09 405.1 99.6 407.1 100.1 409 100.6 410.9 101.2 412.8 101.7"/><polyline points="536.9 182.6 537.5 183.7 538 184.7 538.6 185.8 539.1 186.8 539.5 187.9 540 189 540.5 190 540.9 191.1 541.3 192.2 541.7 193.2 542.1 194.3 542.5 195.4 542.8 196.5"/><polyline points="279.5 83.86 281.7 83.87 283.9 83.88 286.1 83.9 288.2 83.93 290.4 83.97 292.6 84.02 294.8 84.08 296.9 84.15 299.1 84.22 301.3 84.31 303.5 84.4 305.6 84.5 307.8 84.62 310 84.74 312.1 84.86 314.3 85 316.5 85.15 318.6 85.3 320.8 85.47 322.9 85.64 325.1 85.82 327.2 86.02 329.4 86.21 331.5 86.42 333.6 86.64 335.8 86.87 337.9 87.1 340 87.34 342.2 87.6 344.3 87.86 346.4 88.12 348.5 88.4"/><polyline points="110.5 75.01 111.9 74.32 113.3 73.64 114.7 72.96 116.2 72.29 117.6 71.62 119 70.96 120.5 70.31 122 69.66 123.4 69.02 124.9 68.39 126.4 67.76 127.9 67.14 129.4 66.52 131 65.91 132.5 65.3 134 64.7 135.6 64.11 137.2 63.53 138.7 62.95 140.3 62.38 141.9 61.81 143.5 61.25 145.1 60.7 146.8 60.15 148.4 59.61 150 59.08 151.7 58.55 153.3 58.03 155 57.52 156.7 57.01 158.3 56.51 160 56.02"/><polyline points="72.57 99.75 71.6 100.6 70.64 101.4 69.7 102.3 68.77 103.2 67.86 104 66.96 104.9 66.07 105.8 65.2 106.6 64.34 107.5 63.5 108.4 62.67 109.3 61.85 110.2 61.06 111.1 60.27 112 59.5 112.9 58.74 113.8 58 114.7 57.28 115.6 56.57 116.5 55.87 117.4 55.19 118.3 54.52 119.2"/><polyline points="160 56.02 161.7 55.54 163.4 55.06 165.2 54.59 166.9 54.12 168.6 53.67 170.3 53.22 172.1 52.77 173.8 52.34 175.6 51.91 177.3 51.49 179.1 51.07 180.9 50.67 182.7 50.27 184.5 49.87 186.3 49.49 188.1 49.11 189.9 48.74 191.7 48.38 193.5 48.02 195.3 47.68 197.2 47.33 199 47 200.9 46.68 202.7 46.36 204.6 46.05 206.4 45.74 208.3 45.45 210.2 45.16 212 44.88 213.9 44.61 215.8 44.34 217.7 44.09"/><polyline points="341.4 44.09 343.2 44.35 345.1 44.61 347 44.88 348.9 45.16 350.7 45.45 352.6 45.75 354.5 46.05 356.3 46.36 358.2 46.68 360 47 361.9 47.34 363.7 47.68 365.5 48.02 367.3 48.38 369.1 48.74 371 49.11 372.8 49.49 374.6 49.88 376.3 50.27 378.1 50.67 379.9 51.08 381.7 51.49 383.4 51.91 385.2 52.34 386.9 52.78 388.7 53.22 390.4 53.67 392.2 54.13 393.9 54.59 395.6 55.06 397.3 55.54 399 56.02"/><polyline points="448.5 75.01 449.9 75.7 451.2 76.4 452.6 77.11 453.9 77.82 455.2 78.54 456.6 79.26 457.9 79.98 459.2 80.71 460.4 81.45 461.7 82.2 463 82.94 464.2 83.7 465.5 84.45 466.7 85.22 467.9 85.98 469.1 86.76 470.3 87.54 471.4 88.32 472.6 89.1 473.7 89.9 474.9 90.7 476 91.5 477.1 92.3 478.2 93.11 479.3 93.93 480.3 94.75 481.4 95.57 482.4 96.4 483.5 97.23 484.5 98.06 485.5 98.9 486.4 99.75"/><polyline points="217.7 44.09 219.6 43.84 221.5 43.6 223.4 43.36 225.3 43.14 227.2 42.92 229.1 42.71 231 42.51 232.9 42.31 234.8 42.13 236.7 41.95 238.7 41.78 240.6 41.61 242.5 41.46 244.5 41.31 246.4 41.17 248.3 41.04 250.3 40.92 252.2 40.8 254.1 40.69 256.1 40.59 258 40.5 260 40.42 261.9 40.34 263.9 40.28 265.8 40.22 267.8 40.16 269.7 40.12 271.7 40.08 273.7 40.06 275.6 40.04 277.6 40.02 279.5 40.02"/><polyline points="399 56.02 400.7 56.52 402.4 57.02 404 57.52 405.7 58.04 407.4 58.56 409 59.08 410.6 59.61 412.3 60.15 413.9 60.7 415.5 61.25 417.1 61.81 418.7 62.38 420.3 62.95 421.9 63.53 423.4 64.12 425 64.71 426.5 65.3 428.1 65.91 429.6 66.52 431.1 67.14 432.6 67.76 434.1 68.39 435.6 69.02 437.1 69.67 438.5 70.31 440 70.97 441.4 71.63 442.9 72.29 444.3 72.96 445.7 73.64 447.1 74.32 448.5 75.01"/><polyline points="72.57 99.75 73.55 98.9 74.55 98.06 75.56 97.23 76.59 96.4 77.63 95.57 78.68 94.74 79.75 93.92 80.82 93.11 81.92 92.3 83.02 91.49 84.14 90.69 85.28 89.9 86.42 89.1 87.58 88.32 88.75 87.53 89.93 86.76 91.13 85.98 92.34 85.22 93.56 84.45 94.79 83.69 96.04 82.94 97.3 82.19 98.57 81.45 99.85 80.71 101.1 79.98 102.5 79.26 103.8 78.53 105.1 77.82 106.4 77.11 107.8 76.4 109.2 75.7 110.5 75.01"/><polyline points="279.5 40.02 281.5 40.02 283.4 40.04 285.4 40.06 287.3 40.08 289.3 40.12 291.2 40.16 293.2 40.22 295.1 40.28 297.1 40.34 299 40.42 301 40.5 302.9 40.6 304.9 40.7 306.8 40.8 308.8 40.92 310.7 41.04 312.6 41.17 314.6 41.31 316.5 41.46 318.4 41.62 320.4 41.78 322.3 41.95 324.2 42.13 326.1 42.32 328 42.51 330 42.71 331.9 42.92 333.8 43.14 335.7 43.37 337.6 43.6 339.5 43.84 341.4 44.09"/><polyline points="486.4 99.75 487.4 100.6 488.4 101.4 489.3 102.3 490.2 103.2 491.2 104 492.1 104.9 492.9 105.8 493.8 106.6 494.7 107.5 495.5 108.4 496.3 109.3 497.2 110.2 498 111.1 498.7 112 499.5 112.9 500.3 113.8 501 114.7 501.7 115.6 502.4 116.5 503.1 117.4 503.8 118.3 504.5 119.2"/><polyline points="229 15.78 230.6 15.58 232.1 15.38 233.7 15.19 235.2 15.01 236.8 14.83 238.3 14.66 239.9 14.49 241.5 14.33 243 14.18 244.6 14.03 246.2 13.9 247.7 13.76 249.3 13.64 250.9 13.51 252.5 13.4 254 13.29 255.6 13.19 257.2 13.1 258.8 13.01 260.4 12.93 262 12.85 263.6 12.78 265.2 12.72 266.8 12.67 268.3 12.62 269.9 12.58 271.5 12.54 273.1 12.51 274.7 12.49 276.3 12.47 277.9 12.46 279.5 12.46"/><polyline points="377.1 25.53 378.4 25.93 379.8 26.34 381.2 26.75 382.5 27.17 383.9 27.59 385.2 28.02 386.6 28.46 387.9 28.9 389.2 29.34 390.5 29.8 391.9 30.25 393.2 30.72 394.4 31.18 395.7 31.66 397 32.13 398.3 32.62 399.5 33.1 400.8 33.6 402 34.1 403.3 34.6 404.5 35.11 405.7 35.62 406.9 36.14 408.2 36.66 409.3 37.19 410.5 37.73 411.7 38.27 412.9 38.81 414 39.36 415.2 39.91 416.3 40.47 417.5 41.03"/><polyline points="417.5 41.03 418.6 41.6 419.7 42.17 420.8 42.74 421.9 43.32 423 43.91 424.1 44.5 425.1 45.09 426.2 45.69 427.2 46.29 428.3 46.9 429.3 47.51 430.3 48.12 431.3 48.74 432.3 49.36 433.3 49.99 434.3 50.62 435.3 51.26 436.2 51.9 437.2 52.54 438.1 53.18"/><polyline points="330 15.78 331.6 15.99 333.1 16.21 334.6 16.43 336.1 16.66 337.7 16.9 339.2 17.14 340.7 17.38 342.2 17.64 343.7 17.9 345.2 18.16 346.7 18.43 348.2 18.71 349.7 19 351.2 19.29 352.7 19.58 354.2 19.88 355.6 20.19 357.1 20.51 358.6 20.83 360 21.15 361.5 21.49 362.9 21.82 364.4 22.17 365.8 22.52 367.2 22.88 368.7 23.24 370.1 23.6 371.5 23.98 372.9 24.36 374.3 24.74 375.7 25.13 377.1 25.53"/><polyline points="182 25.52 183.3 25.13 184.7 24.74 186.1 24.35 187.5 23.98 189 23.6 190.4 23.23 191.8 22.87 193.2 22.52 194.7 22.17 196.1 21.82 197.5 21.48 199 21.15 200.4 20.82 201.9 20.5 203.4 20.19 204.9 19.88 206.3 19.58 207.8 19.28 209.3 18.99 210.8 18.71 212.3 18.43 213.8 18.16 215.3 17.89 216.8 17.63 218.3 17.38 219.8 17.13 221.4 16.89 222.9 16.66 224.4 16.43 225.9 16.21 227.5 15.99 229 15.78"/><polyline points="279.5 12.46 281.1 12.46 282.7 12.47 284.3 12.49 285.9 12.51 287.5 12.54 289.1 12.58 290.7 12.62 292.3 12.67 293.9 12.72 295.5 12.79 297 12.85 298.6 12.93 300.2 13.01 301.8 13.1 303.4 13.19 305 13.29 306.6 13.4 308.1 13.52 309.7 13.64 311.3 13.76 312.9 13.9 314.4 14.04 316 14.18 317.6 14.33 319.1 14.49 320.7 14.66 322.3 14.83 323.8 15.01 325.4 15.19 326.9 15.38 328.5 15.58 330 15.78"/><polyline points="120.9 53.18 121.9 52.54 122.8 51.89 123.8 51.25 124.7 50.62 125.7 49.99 126.7 49.36 127.7 48.74 128.7 48.12 129.7 47.5 130.7 46.9 131.8 46.29 132.8 45.69 133.9 45.09 134.9 44.5 136 43.9 137.1 43.32 138.2 42.74 139.3 42.16 140.4 41.59 141.5 41.03"/><polyline points="141.5 41.03 142.7 40.46 143.8 39.91 145 39.36 146.1 38.81 147.3 38.26 148.5 37.73 149.7 37.19 150.9 36.66 152.1 36.14 153.3 35.62 154.5 35.11 155.7 34.6 157 34.1 158.2 33.6 159.5 33.1 160.7 32.61 162 32.13 163.3 31.65 164.6 31.18 165.9 30.71 167.2 30.25 168.5 29.79 169.8 29.34 171.1 28.9 172.4 28.46 173.8 28.02 175.1 27.59 176.5 27.17 177.8 26.75 179.2 26.33 180.6 25.93 182 25.52"/><polyline points="72.57 338.7 72.05 337.6 71.54 336.6 71.02 335.5 70.52 334.4 70.01 333.4 69.52 332.3 69.02 331.3 68.53 330.2 68.04 329.1 67.56 328.1 67.08 327 66.6 325.9 66.13 324.9 65.66 323.8 65.2 322.7 64.74 321.7 64.28 320.6 63.83 319.5 63.39 318.5 62.94 317.4 62.51 316.3 62.07 315.3 61.64 314.2 61.22 313.1 60.79 312 60.38 311 59.96 309.9 59.55 308.8 59.14 307.7 58.74 306.6 58.35 305.6 57.95 304.5 57.56 303.4 57.18 302.3 56.8 301.2 56.42 300.2 56.05 299.1 55.69 298 55.32 296.9 54.97 295.8 54.61 294.8 54.26 293.7 53.92 292.6 53.58 291.5 53.24 290.4 52.9 289.3 52.58 288.3 52.25 287.2 51.93 286.1 51.62 285 51.3 283.9 51 282.8 50.69 281.7 50.4 280.7 50.1 279.6 49.81 278.5 49.67 277.9 49.53 277.4 49.39 276.9 49.24 276.3 49.11 275.8 48.97 275.2 48.83 274.7 48.7 274.1"/><polyline points="110.5 399.1 110.2 398.6 109.8 398.2 109.4 397.7 109.1 397.2 108.7 396.7 108.3 396.2 108 395.8 107.6 395.3 106.9 394.3 106.2 393.4 105.5 392.4 104.8 391.4 104 390.5 103.3 389.5 102.6 388.5 101.9 387.6 101.2 386.6 100.5 385.6 99.86 384.6 99.17 383.6 98.49 382.6 97.81 381.7 97.13 380.7 96.46 379.7 95.79 378.7 95.13 377.7 94.46 376.7 93.81 375.7 93.16 374.7 92.5 373.7 91.86 372.7 91.21 371.7 90.57 370.7 89.94 369.7 89.3 368.6 88.67 367.6 88.05 366.6 87.42 365.6 86.81 364.6 86.19 363.6 85.58 362.5 84.97 361.5 84.37 360.5 83.77 359.5 83.18 358.4 82.58 357.4 81.99 356.4 81.41 355.4 80.83 354.3 80.25 353.3 79.68 352.3 79.11 351.2 78.54 350.2 77.98 349.1 77.42 348.1 76.87 347.1 76.32 346 75.77 345 75.23 343.9 74.69 342.9 74.15 341.8 73.62 340.8 73.09 339.7 72.57 338.7"/><polyline points="160 451.4 159.1 450.6 158.2 449.8 157.3 449 156.4 448.2 155.5 447.4 154.7 446.6 153.8 445.8 152.9 445 152 444.2 151.1 443.4 150.2 442.6 149.4 441.7 148.5 440.9 147.6 440.1 146.8 439.3 145.9 438.4 145 437.6 144.2 436.8 143.3 435.9 142.4 435.1 141.6 434.2 140.7 433.4 139.9 432.5 139.1 431.7 138.2 430.8 137.4 430 136.5 429.1 135.7 428.2 134.9 427.4 134 426.5 133.2 425.6 132.4 424.7 131.6 423.9 130.8 423 129.9 422.1 129.1 421.2 128.3 420.3 127.5 419.4 126.7 418.5 125.9 417.6 125.1 416.7 124.3 415.8 123.5 414.9 122.7 414 122 413.1 121.2 412.2 120.4 411.3 119.6 410.3 118.8 409.4 118.1 408.5 117.3 407.6 116.5 406.6 115.8 405.7 115 404.8 114.3 403.8 113.5 402.9 113.1 402.4 112.8 401.9 112.4 401.5 112 401 111.7 400.5 111.3 400.1 110.9 399.6 110.5 399.1"/><polyline points="40.56 210 40.56 208.9 40.56 207.9 40.58 206.8 40.59 205.8 40.61 204.8 40.64 203.7 40.67 202.7 40.7 201.7 40.74 200.6 40.78 199.6 40.83 198.6 40.88 197.6 40.94 196.5 41 195.5 41.07 194.5 41.14 193.5 41.21 192.4 41.29 191.4 41.38 190.4 41.46 189.4 41.56 188.4 41.66 187.4 41.76 186.4 41.86 185.4 41.98 184.4 42.09 183.4 42.21 182.4 42.34 181.4 42.47 180.4 42.6 179.4 42.74 178.4 42.88 177.4 43.03 176.4 43.18 175.4 43.34 174.4 43.5 173.4 43.66 172.5 43.83 171.5 44.01 170.5 44.19 169.5 44.37 168.6 44.56 167.6 44.75 166.6 44.94 165.6 45.15 164.7 45.35 163.7 45.56 162.8 45.78 161.8 46 160.8 46.22 159.9 46.45 158.9 46.68 158 46.92 157 47.16 156.1 47.4 155.2 47.65 154.2 47.78 153.7 47.91 153.3 48.04 152.8 48.17 152.3 48.3 151.9 48.43 151.4 48.56 150.9 48.7 150.5"/><polyline points="48.7 274.1 48.56 273.6 48.43 273.1 48.3 272.5 48.17 272 48.04 271.4 47.91 270.9 47.78 270.4 47.65 269.8 47.4 268.7 47.16 267.6 46.92 266.6 46.68 265.5 46.45 264.4 46.22 263.3 46 262.2 45.78 261.1 45.56 260.1 45.35 259 45.15 257.9 44.94 256.8 44.75 255.7 44.56 254.7 44.37 253.6 44.19 252.5 44.01 251.4 43.83 250.3 43.66 249.3 43.5 248.2 43.34 247.1 43.18 246 43.03 245 42.88 243.9 42.74 242.8 42.6 241.7 42.47 240.7 42.34 239.6 42.21 238.5 42.09 237.5 41.98 236.4 41.86 235.3 41.76 234.2 41.66 233.2 41.56 232.1 41.46 231 41.38 230 41.29 228.9 41.21 227.9 41.14 226.8 41.07 225.7 41 224.7 40.94 223.6 40.88 222.6 40.83 221.5 40.78 220.4 40.74 219.4 40.7 218.3 40.67 217.3 40.64 216.2 40.61 215.2 40.59 214.1 40.58 213.1 40.56 212.1 40.56 211 40.56 210"/><polyline points="277.4 517.2 276.4 516.9 275.3 516.6 274.3 516.3 273.3 516 272.2 515.6 271.2 515.3 270.1 515 269.1 514.6 268 514.3 267 513.9 266 513.6 264.9 513.2 263.9 512.8 262.8 512.5 261.8 512.1 260.8 511.7 259.7 511.3 258.7 510.9 257.6 510.5 256.6 510.1 255.6 509.7 254.5 509.3 253.5 508.9 252.5 508.5 251.4 508.1 250.4 507.7 249.4 507.2 248.3 506.8 247.3 506.4 246.3 505.9 245.2 505.5 244.2 505 243.2 504.6 242.1 504.1 241.1 503.7 240.1 503.2 239 502.7 238 502.2 237 501.8 236 501.3 234.9 500.8 233.9 500.3 232.9 499.8 231.9 499.3 230.8 498.8 229.8 498.3 228.8 497.8 227.8 497.3 226.8 496.7 225.8 496.2 224.7 495.7 223.7 495.1 222.7 494.6 221.7 494.1 221.2 493.8 220.7 493.5 220.2 493.2 219.7 493 219.2 492.7 218.7 492.4 218.2 492.1 217.7 491.9"/><polyline points="48.7 150.5 48.83 150 48.97 149.6 49.11 149.1 49.24 148.6 49.39 148.2 49.53 147.7 49.67 147.2 49.81 146.8 50.1 145.9 50.4 145 50.69 144 51 143.1 51.3 142.2 51.62 141.3 51.93 140.4 52.25 139.5 52.58 138.6 52.9 137.7 53.24 136.8 53.58 135.9 53.92 135.1 54.26 134.2 54.61 133.3 54.97 132.4 55.32 131.5 55.69 130.7 56.05 129.8 56.43 128.9 56.8 128.1 57.18 127.2 57.56 126.3 57.95 125.5 58.35 124.6 58.74 123.8 59.14 122.9 59.55 122.1 59.96 121.3 60.38 120.4 60.79 119.6 61.22 118.8 61.64 117.9 62.07 117.1 62.5 116.3 62.94 115.5 63.38 114.6 63.83 113.8 64.28 113 64.74 112.2 65.2 111.4 65.66 110.6 66.13 109.8 66.6 109 67.08 108.2 67.56 107.4 68.04 106.7 68.53 105.9 69.02 105.1 69.51 104.3 70.01 103.5 70.52 102.8 71.02 102 71.54 101.3 72.05 100.5 72.57 99.75"/><polyline points="72.57 99.75 73.09 99 73.62 98.25 74.15 97.5 74.69 96.76 75.23 96.02 75.77 95.29 76.32 94.56 76.87 93.83 77.42 93.11 77.98 92.39 78.54 91.68 79.11 90.97 79.68 90.26 80.25 89.55 80.83 88.85 81.41 88.16 81.99 87.46 82.58 86.77 83.17 86.08 83.77 85.4 84.37 84.72 84.97 84.05 85.58 83.38 86.19 82.71 86.8 82.04 87.42 81.38 88.05 80.72 88.67 80.07 89.3 79.42 89.94 78.77 90.57 78.13 91.21 77.49 91.86 76.86 92.5 76.23 93.15 75.6 93.81 74.98 94.46 74.36 95.13 73.75 95.79 73.14 96.46 72.53 97.13 71.92 97.81 71.33 98.49 70.73"/><polyline points="217.7 491.9 217.2 491.6 216.7 491.3 216.2 491 215.7 490.7 215.2 490.4 214.6 490.2 214.1 489.9 213.6 489.6 212.6 489 211.6 488.4 210.6 487.8 209.6 487.2 208.7 486.7 207.7 486.1 206.7 485.5 205.7 484.8 204.7 484.2 203.7 483.6 202.7 483 201.7 482.4 200.7 481.8 199.7 481.1 198.8 480.5 197.8 479.8 196.8 479.2 195.8 478.6 194.8 477.9 193.9 477.3 192.9 476.6 191.9 475.9 191 475.3 190 474.6 189 473.9 188.1 473.3 187.1 472.6 186.1 471.9 185.2 471.2 184.2 470.5 183.3 469.8 182.3 469.1 181.4 468.4 180.4 467.7 179.5 467 178.5 466.3 177.6 465.6 176.6 464.9 175.7 464.2 174.8 463.4 173.8 462.7 172.9 462 172 461.2 171 460.5 170.1 459.8 169.2 459 168.3 458.3 167.3 457.5 166.4 456.8 165.5 456 164.6 455.2 163.7 454.5 162.8 453.7 161.8 452.9 160.9 452.1 160 451.4"/></g></g></g><g><path d="m51.32 25.33c-12.67 3.675-22.43 13.75-25.11 26.26l1.048 3.132 0.4608-1.575 0.8584-1.514h0.7319l0.1988-0.5077 0.1988-0.697 0.07228-2.272s0.3943-0.8832 0.6596-1.136c0.0021-2e-3 7e-3 -0.0066 9e-3 -0.0086s0.0071-0.0065 9e-3 -0.0086c0.2455-0.2704 0.3162-0.9293 0.3162-0.9293l0.3976-1.325 1.12-1.015 0.6686 0.1291 0.9306-0.3184 1.319-0.4388 0.8041 0.8863 0.3975 0.06023 0.3976-0.5679 0.8584 0.5679 0.5963 0.6282 0.1988-0.6282 0.5331-0.5679 0.262-0.8261 0.1988-0.5679 0.7319 0.1291 0.4608 1.385-0.5963 1.394-0.4608 1.196 1.129 1.644 0.5963-1.953-0.2711-1.205 2.123-1.325-0.3252-0.8175s0.9876-0.195 1.319-0.2581c0.0097-0.0018 0.02467-0.0062 0.03614-0.0086 8.07e-4 2.2e-5 0.0081-5.8e-5 9e-3 0 0.0127-0.0045 0.03269-0.01111 0.04518-0.01721 0.01244-0.0064 0.03296-0.01788 0.04518-0.02581 0.2678-0.1809 0.4823-0.7162 0.5963-1.205 0.1326-0.5684-0.3976-1.265-0.3976-1.265 0 0 1.054-1.963 0.9397-2.487 8.9e-5 -3e-3 -4.5e-5 -0.01426 0-0.01721-0.0016-3e-3 -0.0074-0.01425-9e-3 -0.01721 2.3e-5 -7.58e-4 -9.4e-5 -0.0078 0-0.0086-0.01865-0.04145-0.04226-0.07737-0.06325-0.1033-0.0032-3e-3 -0.0149-0.01428-0.01807-0.01721-0.0018-0.0018-0.0072-0.0069-9e-3 -0.0086-0.01212-0.01035-0.0318-0.02702-0.04518-0.03442-9.44e-4 5.4e-5 -0.0082-2e-5 -9e-3 0-0.0031-0.0015-0.01486-7e-3 -0.01806-0.0086-8.27e-4 3e-6 -8e-3 -4.1e-5 -9e-3 0-9.22e-4 4.4e-5 -0.0082-3e-6 -9e-3 0-0.0064-2e-3 -0.02064-7e-3 -0.02711-0.0086-9.05e-4 -8.2e-5 -0.0072-2e-5 -9e-3 0-9.87e-4 -4.1e-5 -0.0082 0-9e-3 0-0.0033 0.0016-0.01499 0.0071-0.01807 0.0086-1e-3 3.3e-5 -0.0079 3.5e-5 -9e-3 0-0.0013-8.2e-5 -0.0078 5.8e-5 -9e-3 0-0.0012-3e-6 -8e-3 -8.2e-5 -9e-3 0-0.1875 0.04734-0.429 0.2815-0.7228 0.3614-0.4642 0.1263-1.659 0.6941-1.925 0.7572-0.2653 0.06316-1.726 0.2581-1.726 0.2581 0 0 0.2618-0.5734 0.4608-0.8261 0.199-0.2526 0.6654-0.3784 0.9306-0.5679 0.2653-0.1895 0.7319-0.7572 0.7319-0.7572l0.8584-1.644s1.198-0.886 1.662-1.265c0.4642-0.379 1.391 0.2581 1.391 0.2581l0.8583 0.5679s-0.05861 1.168-0.2711 1.463c-0.01082 0.0141-0.03097 0.03134-0.04518 0.04302-0.0023 0.0017-7e-3 0.0072-9e-3 0.0086-0.0031 0.0015-0.01335 0.0063-0.01807 0.0086-8.57e-4 8.78e-4 -0.0083 0.0078-9e-3 0.0086-0.0017 0.0017-0.0079 0.0077-9e-3 0.0086-0.0022 2e-3 -0.0068 0.0065-9e-3 0.0086-0.2863 0.2828-0.8222 1.609-0.8222 1.609 0 0 1.527-0.6966 1.726-1.076 0.199-0.379 1.527-1.076 1.527-1.076l1.193-0.1893 0.6596 0.4475s0.6021 0.05748 0.8674-0.06884c0.2653-0.1263 1.725-0.5679 2.123-0.5679 0.07648 0 0.1763 0.02013 0.2982 0.05163l1.681-0.3786-0.05421-1.058-1.328 0.1893-0.6686 0.06023s-1.391 0.1293-1.789-0.06023-0.5927-0.2581-1.256-0.2581c-0.4974 0-0.664 0.07634-0.7138 0.1119-0.0019 0.0018-0.0081 0.0077-9e-3 0.0086-0.0011 1e-3 -0.0072 0.0069-9e-3 0.0086l-1.59-0.1893 0.4608-0.697s1.46-0.05731 1.726-0.1205c0.2653-0.06316 1.858-0.1261 2.123-0.1893 0.2487-0.05921 0.6149-0.4589 0.6596-0.5077l-1.193-0.1291-0.7319-0.3098 0.4698-0.9551 1.852-0.9465 1.129-0.5679s1.59-0.4416 1.988-0.5679c0.3979-0.1263 1.527 0.06884 1.527 0.06884s2.725 0.3127 3.388 0.2495c0.6632-0.06316 0.9939-1.265 0.9939-1.265l-0.5336-1.076-1.391-0.7572s-1.331-0.2468-1.861-0.1205c-0.5306 0.1263-2.584 0.4991-2.584 0.4991l-2.385 0.5077-1.988-0.06023-1.003 0.06023-0.4608-1.101c-7.97e-4 -9.3e-5 -0.0083 2.2e-5 -9e-3 0zm17.72 1.291-1.662 0.06023-0.524 0.4475-0.3343 0.1205 0.7319 1.076 1.12-0.06024 1.129 0.3786 0.7319 0.7572 0.5963 0.5679 0.3976 0.6282 0.262 0.8863 0.6054 0.06883 0.7228 0.06024 0.4698 0.697c-0.0059 0.0037-0.01998 0.01274-0.0271 0.01721-0.02402 0.01562-0.06283 0.04226-0.09939 0.07744-0.09351 0.09243-0.2078 0.2542-0.2078 0.4733 0 0.379 0.262 0.9465 0.262 0.9465l-0.5963 0.6282 0.2711 0.7572 0.262 0.3184-0.5963 0.1291c-0.04358 0.03615-0.3986 0.3438-0.4608 0.8175-0.05803 0.4421-0.07023 0.5003-0.07228 0.5077l0.3343 0.6282 0.5331 0.3786 0.1988 0.1893 0.5963 0.1893 0.524 0.3184c0-6e-6 -0.7286 0.3757-0.9939 0.4388-0.2653 0.06316-1.193 0.06884-1.193 0.06884l0.9939 1.196 1.193 0.5679v0.6368l-1.256-0.3786-0.8584 0.4389-0.2078 0.3786s-0.0016 0.8218-0.1626 1.11c-0.0015 3e-3 -0.0075 0.01429-9e-3 0.01721-0.0048 7e-3 -0.01305 0.01976-0.01807 0.02582-0.0047 0.0046-0.01543 0.01466-0.01807 0.01721-0.0018 0.0016-0.0072 0.0071-9e-3 0.0086-0.0031 0.0015-0.0149 0.0072-0.01807 0.0086-0.0029 0.0015-0.01333 0.0064-0.01807 0.0086-8.72e-4 -7.1e-5 -0.0083 2.4e-5 -9e-3 0-4.34e-4 5.05e-4 -7e-3 0.0067-9e-3 0.0086-0.2751 0.07937-0.9848 0.6884-0.9848 0.6884l-0.5331 1.325-0.3253 0.1893-0.1988 0.697-0.2711 0.4389-0.4608 0.1893-0.3976-0.6884-0.3976-0.3786s-0.0053-0.0094-9e-3 -0.01721c-0.01246-0.02435-0.04451-0.07381-0.09939-0.1119-0.0063-0.0042-0.02012-0.01329-0.02711-0.01721-0.04808-0.02544-0.1159-0.04302-0.1988-0.04302-0.2653 0-0.9306-0.1291-0.9306-0.1291l-0.3253-0.3786 0.1988-1.265s-0.3872-0.4121-0.7048-0.4475c-0.0032-1.26e-4 -0.01441-9e-5 -0.01807 0-0.0023 5.2e-5 -0.0071 6.8e-5 -9e-3 0-0.01892-1.96e-4 -0.045 0.0056-0.06325 0.0086-0.3316 0.06316-1.662 0.6282-1.662 0.6282l-1.455 1.325c-0.02264 0.03038-0.21 0.2932-0.3343 0.8261-0.1326 0.5684-0.9306 1.325-0.9306 1.325l-1.129 0.6282-0.3976 0.8863v1.325l0.1355 0.5077 0.7951 0.3184 0.6596-0.8863 0.3343 0.1893v0.8175l0.3976 0.6368 0.3343 0.4991 0.8584-0.1893 0.6686-0.3786-0.5331-0.8175 0.1355-1.454 0.06325-1.007 0.7951-0.8261 0.262-0.9465 0.4698-0.3786 0.3343 0.5077-0.3343 0.4389-0.5331 0.9465-0.1355 0.5077 0.1355 0.2495 0.3343 0.5679 0.7319 0.1893v0.3184l0.524 0.1291-0.1988 0.5679-0.1988 0.4388-0.6596-0.1205-0.4698 0.6282 0.07228 0.8175 0.06325 0.5077-0.6596 0.06024-0.9939-0.06024-0.9306 0.06024-0.7319-0.6282-0.3976-0.6282-0.3343-0.5077-0.262 0.697 0.1355 0.6884v0.5077l-0.8674 0.2582h-0.524l-0.5331 1.007-0.5963 0.1893-0.7951 0.9465-0.7319 0.3184-0.7319 0.06023-1.129-0.3184-0.262 0.5077 1.328 0.4475-0.1988 0.8175v0.8175l-0.06325 0.7572-0.1355 0.5077-0.9306-0.7572-1.057-0.3786-0.9939-0.1893-0.1355 0.2495-0.2711 1.144-0.1265 0.4388-0.5331 0.4389v0.3786l0.3343 0.4475-0.1988 0.3786v0.2495l0.8584 0.1893 0.3343 0.4389 1.256 0.3184h0.3976l0.5963-0.4389 0.4698-0.3184 0.3343-0.4389v-0.4475l0.3976-0.5679 0.6596-0.2495 0.6596-0.1291 0.07228-0.9465 0.524-0.1291 0.6686 0.3872 0.7951-0.2581 0.7951-0.1893 0.3976 0.6368 0.6596 0.6884 0.9306 0.5679c0.04245 0.0015 0.3938 0.02009 0.6325 0.2237 0.01 0.0088 0.02657 0.02494 0.03614 0.03441 0.04967 0.05069 0.09385 0.1168 0.1265 0.1893 0.1865 0.4145 0.1981 0.721 0.1988 0.7572l-0.1265 0.697h-1.599l0.7319 0.5679 0.2711 0.3786 0.06325 0.5679 0.3343-0.697 0.1265-0.5679 0.5963-0.2495 0.1988-0.5765 0.07228-0.4991 0.524 0.06024-0.1988-0.5679-0.9939-0.6282-0.8584-0.9465-0.9306-0.9552 0.5331-0.3786 0.5963 0.1893s0.2678 0.5103 0.5331 0.8261c0.2653 0.3158 1.057 0.8175 1.057 0.8175l0.5963 0.2582 0.06325 0.6884 0.4066 0.3786 0.5963 0.4475v0.7572c0 0.2526 0.06614 0.4444 0.1988 0.697 0.1243 0.2368 0.4806 0.3639 0.524 0.3786 0 0 0.3692 0.1129 0.5602 0.04302 0.0048-0.0022 0.01537-0.0074 0.01807-0.0086 4e-3 -0.0019 0.01353-0.0064 0.01807-0.0086 0.0016-0.0015 0.0074-7e-3 9e-3 -0.0086 0.0016-0.0015 0.0074-0.0071 9e-3 -0.0086 0.0045-0.0041 0.01366-0.01295 0.01807-0.01721 5.44e-4 -5.7e-4 7e-3 -0.0067 9e-3 -0.0086 0.0016-0.0015 0.0074-0.0071 9e-3 -0.0086 0.0016-0.0028 0.0074-0.01406 9e-3 -0.01721-1.5e-5 -7.82e-4 8.6e-5 -0.0078 0-0.0086 0.0017-3e-3 0.0074-0.0142 9e-3 -0.01721 0.06632-0.2526 0.1959-0.5044 0.06325-0.9465-0.1326-0.4421-0.1355-1.454-0.1355-1.454l0.5963-0.3786 0.8674 0.06884 0.5331-1.015-0.2711-0.6282 0.1988-1.205 0.2711-0.6282 0.8584-0.7572 1.057 0.1893 0.8674-0.3786s0.5908-0.04397 0.8403 0.1033c0.01105 0.0069 0.0266 0.01813 0.03614 0.02582 0.0085 0.0072 0.02662 0.02449 0.03614 0.03442 0.0016 3e-3 0.0075 0.0142 9e-3 0.01721 0.0016 0.0015 0.0074 0.0071 9e-3 0.0086 0.1326 0.2526 0.3253 0.6282 0.3253 0.6282s0.4033 0.1318 0.6686 0.2581c0.2653 0.1263 0.7228 0.4388 0.7228 0.4388l0.1355 0.9465-0.8584 0.3184-1.391 0.1893c0-6e-6 -0.599-0.06023-0.9306-0.06023-0.3316 0-1.066 0.3098-1.066 0.3098l-0.262 0.4475-0.5331 0.4389-0.6596 0.1893-0.5331 0.1893-0.1988 0.6282 0.5331 0.9551 0.3976 0.5679 0.7319 0.3098 1.391-0.1205 0.4608-0.2581 0.6686-0.1205 0.1988-0.06884 0.3976 0.4475v0.9465l-0.3976 0.5679-0.1988 0.7572-1.003 0.1893h-0.7951l-1.193 0.2495-1.391-0.06024-1.527-0.1893s-0.5819-0.1545-0.8584-0.03442c-0.0097 0.0045-0.02641 0.01192-0.03614 0.01721-0.0016 0.0015-0.0075 0.0071-9e-3 0.0086-0.01192 0.01006-0.02621 0.02306-0.03614 0.03442-0.0016 0.0015-0.0074 0.0071-9e-3 0.0086-0.0053 0.0072-0.01349 0.01805-0.01807 0.02582-0.0018 0.0033-0.0074 0.01378-9e-3 0.01721-0.0017 0.0015-0.0074 0.0071-9e-3 0.0086 5.5e-5 3e-3 -1.08e-4 0.0142 0 0.01721-0.0017 3e-3 -0.0074 0.01421-9e-3 0.01721 4.4e-5 8.32e-4 -1.5e-5 0.0079 0 0.0086-0.06632 0.379-0.262 0.9465-0.262 0.9465l-1.129 0.1205-1.789-0.7572-1.464-0.6282-0.524-0.2582 0.06325-1.256-0.1988-0.8863h-1.653l-1.861-0.1893-1.527 0.06023-0.7951 0.3184-1.527-0.2495-0.6596-0.3786-0.3343 0.7572s-0.7255 0.05713-1.057 0.3098c-0.3316 0.2526-1.789 1.265-1.789 1.265l0.06325 0.8261-1.925 0.06023-0.4608 1.076-1.925 1.136 0.3253 1.076-0.262 1.385-0.4608 0.7572-0.3343 1.454v0.9465l1.129 1.325 0.5331 1.015 0.1265 0.3098 2.322 2.211 0.9306 0.2581 0.9306 0.06023 1.193 0.1291 0.9306 0.4389h1.518l2.322-0.06024 0.9939 1.196 1.193 0.06024 1.003 0.3184-0.07228 1.325-0.4608 0.9465 0.7951 0.5679 0.9306 0.9551 0.5963 0.7572 0.524 0.8777 0.3343 0.697-0.8583 0.7572-0.3343 1.076 0.262 0.3786 0.7319 0.4389 0.7319 0.3786 0.1988 0.8261 0.4608 0.5679 0.7951 0.1291 0.6686 0.4389 0.4608 0.3786 1.066-0.06023 1.653-0.5077h1.129l0.5963 0.1893 0.8584-0.7572 1.328-0.1893 0.9939-1.015 1.265-0.5679 0.3976-1.007 0.7951-0.4388 0.7319-0.9551 1.789-0.4388 0.1265-1.136 0.07228-1.265-0.1988-1.644 1.527-2.461 1.256-1.007 0.5963-1.265 1.59-1.205 0.9306-1.136 0.1988-1.704-0.262-1.076c0-3e-6 -1.538 0.9977-1.834 1.299-0.0036 0.0034-0.01441 0.01399-0.01807 0.01721-0.0011 1e-3 -0.0081 0.0076-9e-3 0.0086-4e-3 0.0057-0.01346 0.01986-0.01807 0.02582-0.2509 0.2704-1.373 0.9293-1.373 0.9293l-1.129-0.6368-2.322-1.764-1.319-1.583-0.9306-1.265s-0.2678-0.126-0.5331-0.3786c-2e-3 -0.0019-7e-3 -0.0066-9e-3 -0.0086-8.94e-4 -8.18e-4 -0.0082-0.0079-9e-3 -0.0086-0.2376-0.2805-0.4854-1.378-0.7228-1.644-0.0047-0.0046-0.01508-0.0144-0.01807-0.01721-9.93e-4 -8.76e-4 -0.0073-0.0069-9e-3 -0.0086-8.7e-4 -8.97e-4 -0.0082-0.0078-9e-3 -0.0086-0.0032-0.0016-0.01509-0.0073-0.01807-0.0086-0.2653-0.1263-1.057-0.8175-1.057-0.8175l0.524-0.6368 0.7951 0.2582 0.7319 1.067 0.7319 0.8261 0.262 0.697 1.129 0.06024 0.262 0.8863 0.7319 0.4991 0.4608 0.5679c0-5e-6 0.505 0.2457 0.5963 0.4905-1.5e-5 7.44e-4 8.2e-5 0.0078 0 0.0086 0.0017 0.0015 0.0074 0.0071 9e-3 0.0086 0.06632 0.2526 0.524 0.9465 0.524 0.9465l0.1355 1.136 1.653-0.1205 0.6686-1.015 1.328-1.007 1.391-1.454 1.129-1.644 0.4608-1.265 0.5331-1.635-0.5331-0.6368-0.9939 0.06023-0.5963-0.4388-0.5963 0.8175-0.4698 0.7658-1.193-0.06884-1.193-1.076-0.3343-0.7572-0.06325-0.8175 1.789 0.2495 0.1988 0.4475 1.464 0.1205 0.524-0.6884 1.527-0.06884c0-3e-6 1.082-0.3013 1.256-0.5507 0.0024-0.0045 0.0075-0.01425 9e-3 -0.01721 0.1326-0.2526 0.7951-1.196 0.7951-1.196l0.8583-0.1893 0.8674 0.6282 0.6596-0.2495-0.06325 0.7572 0.6596-0.2495 0.1355-1.076 0.6596 1.454 0.7951 1.136 0.7951 1.007s0.06578 0.7571 0.5963 0.9465c0.4974 0.1776 0.764 0.4104 0.7951 0.4389l0.2711-1.136c0.01778-0.03677 0.1178-0.2293 0.2168-0.3098 0.0057-0.0038 0.02024-0.01268 0.0271-0.01721 8.13e-4 -7.94e-4 0.0081-0.0076 9e-3 -0.0086 8.05e-4 1.9e-5 0.0081-7.1e-5 9e-3 0 8.05e-4 -7.93e-4 0.0081-0.0076 9e-3 -0.0086 8.08e-4 6e-6 0.0081-3.8e-5 9e-3 0 8.08e-4 0 0.0081-2.4e-5 9e-3 0 0.0013-8.2e-5 0.0077 1.1e-5 9e-3 0 6.67e-4 2.7e-5 0.0071 2.4e-5 9e-3 0 8.04e-4 -1.4e-5 0.0081 3.5e-5 9e-3 0 0.0016 0.0016 0.0074 7e-3 9e-3 0.0086 8.12e-4 -2.5e-5 0.0081 7.9e-5 9e-3 0 0.0015 0.0015 0.0075 0.0071 9e-3 0.0086 0.0012 1e-3 0.0078 0.0075 9e-3 0.0086 0.0012 0.0013 0.0078 0.0072 9e-3 0.0086 0.0016 0.0015 0.0074 0.0071 9e-3 0.0086 0.0016 3e-3 0.0075 0.01415 9e-3 0.01721 0.0022 0.0039 0.0069 0.01291 9e-3 0.01721 0.0016 0.0029 0.0075 0.01423 9e-3 0.01721 0.1161 0.2763 0.08316 0.7955 0.07228 0.9207l0.3253-0.6023 0.262-0.8863-0.6596-0.1893-0.3976-0.5679-0.2711-1.136-0.06325-1.454 0.3343-1.833 0.1988-2.143 0.262-1.454 0.5963 1.136 0.7951 1.076 0.07229 0.1205 0.1265-1.067 0.2711-0.8261 0.06324-0.8175 0.3976-0.3184 0.253-0.413c-0.7691-6.831-3.616-13.08-7.933-18.14l-0.4066 0.5507-0.6686-1.196-0.9939-0.6368-0.7319-0.06024-0.1265-1.015-0.9306-0.8175-1.256-0.5077-0.3343-0.2495-1.066-0.3184-1.12-0.3098-1.066-0.3184-1.129-0.8261-2.521-0.6282-0.4608-0.5077-0.9306-0.7572-0.9939-0.3786-0.8583-0.697-1.391-0.6884-1.328-0.2581-1.464-0.3098-1.455-0.1291zm-12.27 10.27-2.178 0.06024c-0.01666 7e-3 -0.08132 0.03442-0.08132 0.03442s-1.785 1.262-2.449 1.514c-0.6632 0.2526-1.328 1.196-1.328 1.196 0 0-1.325 0.06592-1.59 0.1291-0.0031 0.0014-0.01493 7e-3 -0.01807 0.0086-0.0023 0.0011-0.01325 0.0063-0.01807 0.0086-9.22e-4 9.49e-4 -0.0082 0.0078-9e-3 0.0086-0.01273 0.0087-0.03146 0.0227-0.04518 0.03442-0.0022 2e-3 -0.0069 0.0065-9e-3 0.0086-0.2761 0.2751-0.7462 1.254-1.093 1.48-0.0232 0.01432-0.05027 0.02743-0.07228 0.03442-8.05e-4 -1.3e-5 -0.0081 7.4e-5 -9e-3 0-0.0047 2e-3 -0.01216 0.0054-0.01807 0.0086-8e-3 0.0046-0.02035 0.01232-0.02711 0.01721-7.93e-4 7.58e-4 -0.0082 0.0077-9e-3 0.0086-0.3352 0.2914-0.3976 1.79-0.3976 1.79l0.6596 1.076 0.1988-0.8175 1.464-0.7572 1.59-0.4475s2.319-0.1205 2.584-0.1205c0.0021 0 0.0068-5.5e-5 9e-3 0 0.2912 0.01329 1.518 0.4388 1.518 0.4388l1.988-1.644s-0.6628-0.5676-0.3976-0.9465c0.2653-0.379 1.328-1.136 1.328-1.136l0.3343-0.06884 0.06325-0.1893-1.988-1.73zm-0.06325 12.79-0.8674 0.06023-0.3253 1.205 0.1265 0.697-0.9939-0.06884-1.057 0.5679v0.8261l0.3976 0.5679 0.9216 0.06023s0.1323-0.5046 0.3976-0.7572c0.2653-0.2526 0.8674-0.3786 0.8674-0.3786l0.3343 0.3184-0.4698 0.2495-0.6596 0.5679-0.1355 0.8261-0.06325 0.2495 0.7319 0.06023 0.4608-0.06023 1.193 0.1291v-0.7572l0.4608-0.1893-0.3253-0.5679v-1.076l-0.5963-0.3786 0.1265-0.8863 0.3343-0.4388-0.8584-0.8261zm-12.74 7.581-0.6596 0.06023 0.5963 0.6368 0.06325-0.697zm16.52 2.461-0.8584 1.136 0.06325 1.205 0.3976 0.4389 0.4608-0.3184-0.06325-1.136v-1.325zm22.42 24.13-0.9306 0.6282-1.328 0.5077-0.524 0.3786-0.6686 1.265-0.524 0.7572 0.7951 0.7572 1.319-0.4991 0.9306-1.773 0.7951-1.394z" fill="url(#radialGradient6555)" fill-rule="evenodd" opacity=".1536"/><path d="m51.32 25.33c-12.67 3.675-22.43 13.75-25.11 26.26l1.048 3.132 0.4608-1.575 0.8584-1.514h0.7319l0.1988-0.5077 0.1988-0.697 0.07228-2.272s0.3943-0.8832 0.6596-1.136c0.0021-2e-3 7e-3 -0.0066 9e-3 -0.0086s0.0071-0.0065 9e-3 -0.0086c0.2455-0.2704 0.3162-0.9293 0.3162-0.9293l0.3976-1.325 1.12-1.015 0.6686 0.1291 0.9306-0.3184 1.319-0.4388 0.8041 0.8863 0.3975 0.06023 0.3976-0.5679 0.8584 0.5679 0.5963 0.6282 0.1988-0.6282 0.5331-0.5679 0.262-0.8261 0.1988-0.5679 0.7319 0.1291 0.4608 1.385-0.5963 1.394-0.4608 1.196 1.129 1.644 0.5963-1.953-0.2711-1.205 2.123-1.325-0.3252-0.8175s0.9876-0.195 1.319-0.2581c0.0097-0.0018 0.02467-0.0062 0.03614-0.0086 8.07e-4 2.2e-5 0.0081-5.8e-5 9e-3 0 0.0127-0.0045 0.03269-0.01111 0.04518-0.01721 0.01244-0.0064 0.03296-0.01788 0.04518-0.02581 0.2678-0.1809 0.4823-0.7162 0.5963-1.205 0.1326-0.5684-0.3976-1.265-0.3976-1.265 0 0 1.054-1.963 0.9397-2.487 8.9e-5 -3e-3 -4.5e-5 -0.01426 0-0.01721-0.0016-3e-3 -0.0074-0.01425-9e-3 -0.01721 2.3e-5 -7.58e-4 -9.4e-5 -0.0078 0-0.0086-0.01865-0.04145-0.04226-0.07737-0.06325-0.1033-0.0032-3e-3 -0.0149-0.01428-0.01807-0.01721-0.0018-0.0018-0.0072-0.0069-9e-3 -0.0086-0.01212-0.01035-0.0318-0.02702-0.04518-0.03442-9.44e-4 5.4e-5 -0.0082-2e-5 -9e-3 0-0.0031-0.0015-0.01486-7e-3 -0.01806-0.0086-8.27e-4 3e-6 -8e-3 -4.1e-5 -9e-3 0-9.22e-4 4.4e-5 -0.0082-3e-6 -9e-3 0-0.0064-2e-3 -0.02064-7e-3 -0.02711-0.0086-9.05e-4 -8.2e-5 -0.0072-2e-5 -9e-3 0-9.87e-4 -4.1e-5 -0.0082 0-9e-3 0-0.0033 0.0016-0.01499 0.0071-0.01807 0.0086-1e-3 3.3e-5 -0.0079 3.5e-5 -9e-3 0-0.0013-8.2e-5 -0.0078 5.8e-5 -9e-3 0-0.0012-3e-6 -8e-3 -8.2e-5 -9e-3 0-0.1875 0.04734-0.429 0.2815-0.7228 0.3614-0.4642 0.1263-1.659 0.6941-1.925 0.7572-0.2653 0.06316-1.726 0.2581-1.726 0.2581 0 0 0.2618-0.5734 0.4608-0.8261 0.199-0.2526 0.6654-0.3784 0.9306-0.5679 0.2653-0.1895 0.7319-0.7572 0.7319-0.7572l0.8584-1.644s1.198-0.886 1.662-1.265c0.4642-0.379 1.391 0.2581 1.391 0.2581l0.8583 0.5679s-0.05861 1.168-0.2711 1.463c-0.01082 0.0141-0.03097 0.03134-0.04518 0.04302-0.0023 0.0017-7e-3 0.0072-9e-3 0.0086-0.0031 0.0015-0.01335 0.0063-0.01807 0.0086-8.57e-4 8.78e-4 -0.0083 0.0078-9e-3 0.0086-0.0017 0.0017-0.0079 0.0077-9e-3 0.0086-0.0022 2e-3 -0.0068 0.0065-9e-3 0.0086-0.2863 0.2828-0.8222 1.609-0.8222 1.609 0 0 1.527-0.6966 1.726-1.076 0.199-0.379 1.527-1.076 1.527-1.076l1.193-0.1893 0.6596 0.4475s0.6021 0.05748 0.8674-0.06884c0.2653-0.1263 1.725-0.5679 2.123-0.5679 0.07648 0 0.1763 0.02013 0.2982 0.05163l1.681-0.3786-0.05421-1.058-1.328 0.1893-0.6686 0.06023s-1.391 0.1293-1.789-0.06023-0.5927-0.2581-1.256-0.2581c-0.4974 0-0.664 0.07634-0.7138 0.1119-0.0019 0.0018-0.0081 0.0077-9e-3 0.0086-0.0011 1e-3 -0.0072 0.0069-9e-3 0.0086l-1.59-0.1893 0.4608-0.697s1.46-0.05731 1.726-0.1205c0.2653-0.06316 1.858-0.1261 2.123-0.1893 0.2487-0.05921 0.6149-0.4589 0.6596-0.5077l-1.193-0.1291-0.7319-0.3098 0.4698-0.9551 1.852-0.9465 1.129-0.5679s1.59-0.4416 1.988-0.5679c0.3979-0.1263 1.527 0.06884 1.527 0.06884s2.725 0.3127 3.388 0.2495c0.6632-0.06316 0.9939-1.265 0.9939-1.265l-0.5336-1.076-1.391-0.7572s-1.331-0.2468-1.861-0.1205c-0.5306 0.1263-2.584 0.4991-2.584 0.4991l-2.385 0.5077-1.988-0.06023-1.003 0.06023-0.4608-1.101c-7.97e-4 -9.3e-5 -0.0083 2.2e-5 -9e-3 0zm17.72 1.291-1.662 0.06023-0.524 0.4475-0.3343 0.1205 0.7319 1.076 1.12-0.06024 1.129 0.3786 0.7319 0.7572 0.5963 0.5679 0.3976 0.6282 0.262 0.8863 0.6054 0.06883 0.7228 0.06024 0.4698 0.697c-0.0059 0.0037-0.01998 0.01274-0.0271 0.01721-0.02402 0.01562-0.06283 0.04226-0.09939 0.07744-0.09351 0.09243-0.2078 0.2542-0.2078 0.4733 0 0.379 0.262 0.9465 0.262 0.9465l-0.5963 0.6282 0.2711 0.7572 0.262 0.3184-0.5963 0.1291c-0.04358 0.03615-0.3986 0.3438-0.4608 0.8175-0.05803 0.4421-0.07023 0.5003-0.07228 0.5077l0.3343 0.6282 0.5331 0.3786 0.1988 0.1893 0.5963 0.1893 0.524 0.3184c0-6e-6 -0.7286 0.3757-0.9939 0.4388-0.2653 0.06316-1.193 0.06884-1.193 0.06884l0.9939 1.196 1.193 0.5679v0.6368l-1.256-0.3786-0.8584 0.4389-0.2078 0.3786s-0.0016 0.8218-0.1626 1.11c-0.0015 3e-3 -0.0075 0.01429-9e-3 0.01721-0.0048 7e-3 -0.01305 0.01976-0.01807 0.02582-0.0047 0.0046-0.01543 0.01466-0.01807 0.01721-0.0018 0.0016-0.0072 0.0071-9e-3 0.0086-0.0031 0.0015-0.0149 0.0072-0.01807 0.0086-0.0029 0.0015-0.01333 0.0064-0.01807 0.0086-8.72e-4 -7.1e-5 -0.0083 2.4e-5 -9e-3 0-4.34e-4 5.05e-4 -7e-3 0.0067-9e-3 0.0086-0.2751 0.07937-0.9848 0.6884-0.9848 0.6884l-0.5331 1.325-0.3253 0.1893-0.1988 0.697-0.2711 0.4389-0.4608 0.1893-0.3976-0.6884-0.3976-0.3786s-0.0053-0.0094-9e-3 -0.01721c-0.01246-0.02435-0.04451-0.07381-0.09939-0.1119-0.0063-0.0042-0.02012-0.01329-0.02711-0.01721-0.04808-0.02544-0.1159-0.04302-0.1988-0.04302-0.2653 0-0.9306-0.1291-0.9306-0.1291l-0.3253-0.3786 0.1988-1.265s-0.3872-0.4121-0.7048-0.4475c-0.0032-1.26e-4 -0.01441-9e-5 -0.01807 0-0.0023 5.2e-5 -0.0071 6.8e-5 -9e-3 0-0.01892-1.96e-4 -0.045 0.0056-0.06325 0.0086-0.3316 0.06316-1.662 0.6282-1.662 0.6282l-1.455 1.325c-0.02264 0.03038-0.21 0.2932-0.3343 0.8261-0.1326 0.5684-0.9306 1.325-0.9306 1.325l-1.129 0.6282-0.3976 0.8863v1.325l0.1355 0.5077 0.7951 0.3184 0.6596-0.8863 0.3343 0.1893v0.8175l0.3976 0.6368 0.3343 0.4991 0.8584-0.1893 0.6686-0.3786-0.5331-0.8175 0.1355-1.454 0.06325-1.007 0.7951-0.8261 0.262-0.9465 0.4698-0.3786 0.3343 0.5077-0.3343 0.4389-0.5331 0.9465-0.1355 0.5077 0.1355 0.2495 0.3343 0.5679 0.7319 0.1893v0.3184l0.524 0.1291-0.1988 0.5679-0.1988 0.4388-0.6596-0.1205-0.4698 0.6282 0.07228 0.8175 0.06325 0.5077-0.6596 0.06024-0.9939-0.06024-0.9306 0.06024-0.7319-0.6282-0.3976-0.6282-0.3343-0.5077-0.262 0.697 0.1355 0.6884v0.5077l-0.8674 0.2582h-0.524l-0.5331 1.007-0.5963 0.1893-0.7951 0.9465-0.7319 0.3184-0.7319 0.06023-1.129-0.3184-0.262 0.5077 1.328 0.4475-0.1988 0.8175v0.8175l-0.06325 0.7572-0.1355 0.5077-0.9306-0.7572-1.057-0.3786-0.9939-0.1893-0.1355 0.2495-0.2711 1.144-0.1265 0.4388-0.5331 0.4389v0.3786l0.3343 0.4475-0.1988 0.3786v0.2495l0.8584 0.1893 0.3343 0.4389 1.256 0.3184h0.3976l0.5963-0.4389 0.4698-0.3184 0.3343-0.4389v-0.4475l0.3976-0.5679 0.6596-0.2495 0.6596-0.1291 0.07228-0.9465 0.524-0.1291 0.6686 0.3872 0.7951-0.2581 0.7951-0.1893 0.3976 0.6368 0.6596 0.6884 0.9306 0.5679c0.04245 0.0015 0.3938 0.02009 0.6325 0.2237 0.01 0.0088 0.02657 0.02494 0.03614 0.03441 0.04967 0.05069 0.09385 0.1168 0.1265 0.1893 0.1865 0.4145 0.1981 0.721 0.1988 0.7572l-0.1265 0.697h-1.599l0.7319 0.5679 0.2711 0.3786 0.06325 0.5679 0.3343-0.697 0.1265-0.5679 0.5963-0.2495 0.1988-0.5765 0.07228-0.4991 0.524 0.06024-0.1988-0.5679-0.9939-0.6282-0.8584-0.9465-0.9306-0.9552 0.5331-0.3786 0.5963 0.1893s0.2678 0.5103 0.5331 0.8261c0.2653 0.3158 1.057 0.8175 1.057 0.8175l0.5963 0.2582 0.06325 0.6884 0.4066 0.3786 0.5963 0.4475v0.7572c0 0.2526 0.06614 0.4444 0.1988 0.697 0.1243 0.2368 0.4806 0.3639 0.524 0.3786 0 0 0.3692 0.1129 0.5602 0.04302 0.0048-0.0022 0.01537-0.0074 0.01807-0.0086 4e-3 -0.0019 0.01353-0.0064 0.01807-0.0086 0.0016-0.0015 0.0074-7e-3 9e-3 -0.0086 0.0016-0.0015 0.0074-0.0071 9e-3 -0.0086 0.0045-0.0041 0.01366-0.01295 0.01807-0.01721 5.44e-4 -5.7e-4 7e-3 -0.0067 9e-3 -0.0086 0.0016-0.0015 0.0074-0.0071 9e-3 -0.0086 0.0016-0.0028 0.0074-0.01406 9e-3 -0.01721-1.5e-5 -7.82e-4 8.6e-5 -0.0078 0-0.0086 0.0017-3e-3 0.0074-0.0142 9e-3 -0.01721 0.06632-0.2526 0.1959-0.5044 0.06325-0.9465-0.1326-0.4421-0.1355-1.454-0.1355-1.454l0.5963-0.3786 0.8674 0.06884 0.5331-1.015-0.2711-0.6282 0.1988-1.205 0.2711-0.6282 0.8584-0.7572 1.057 0.1893 0.8674-0.3786s0.5908-0.04397 0.8403 0.1033c0.01105 0.0069 0.0266 0.01813 0.03614 0.02582 0.0085 0.0072 0.02662 0.02449 0.03614 0.03442 0.0016 3e-3 0.0075 0.0142 9e-3 0.01721 0.0016 0.0015 0.0074 0.0071 9e-3 0.0086 0.1326 0.2526 0.3253 0.6282 0.3253 0.6282s0.4033 0.1318 0.6686 0.2581c0.2653 0.1263 0.7228 0.4388 0.7228 0.4388l0.1355 0.9465-0.8584 0.3184-1.391 0.1893c0-6e-6 -0.599-0.06023-0.9306-0.06023-0.3316 0-1.066 0.3098-1.066 0.3098l-0.262 0.4475-0.5331 0.4389-0.6596 0.1893-0.5331 0.1893-0.1988 0.6282 0.5331 0.9551 0.3976 0.5679 0.7319 0.3098 1.391-0.1205 0.4608-0.2581 0.6686-0.1205 0.1988-0.06884 0.3976 0.4475v0.9465l-0.3976 0.5679-0.1988 0.7572-1.003 0.1893h-0.7951l-1.193 0.2495-1.391-0.06024-1.527-0.1893s-0.5819-0.1545-0.8584-0.03442c-0.0097 0.0045-0.02641 0.01192-0.03614 0.01721-0.0016 0.0015-0.0075 0.0071-9e-3 0.0086-0.01192 0.01006-0.02621 0.02306-0.03614 0.03442-0.0016 0.0015-0.0074 0.0071-9e-3 0.0086-0.0053 0.0072-0.01349 0.01805-0.01807 0.02582-0.0018 0.0033-0.0074 0.01378-9e-3 0.01721-0.0017 0.0015-0.0074 0.0071-9e-3 0.0086 5.5e-5 3e-3 -1.08e-4 0.0142 0 0.01721-0.0017 3e-3 -0.0074 0.01421-9e-3 0.01721 4.4e-5 8.32e-4 -1.5e-5 0.0079 0 0.0086-0.06632 0.379-0.262 0.9465-0.262 0.9465l-1.129 0.1205-1.789-0.7572-1.464-0.6282-0.524-0.2582 0.06325-1.256-0.1988-0.8863h-1.653l-1.861-0.1893-1.527 0.06023-0.7951 0.3184-1.527-0.2495-0.6596-0.3786-0.3343 0.7572s-0.7255 0.05713-1.057 0.3098c-0.3316 0.2526-1.789 1.265-1.789 1.265l0.06325 0.8261-1.925 0.06023-0.4608 1.076-1.925 1.136 0.3253 1.076-0.262 1.385-0.4608 0.7572-0.3343 1.454v0.9465l1.129 1.325 0.5331 1.015 0.1265 0.3098 2.322 2.211 0.9306 0.2581 0.9306 0.06023 1.193 0.1291 0.9306 0.4389h1.518l2.322-0.06024 0.9939 1.196 1.193 0.06024 1.003 0.3184-0.07228 1.325-0.4608 0.9465 0.7951 0.5679 0.9306 0.9551 0.5963 0.7572 0.524 0.8777 0.3343 0.697-0.8583 0.7572-0.3343 1.076 0.262 0.3786 0.7319 0.4389 0.7319 0.3786 0.1988 0.8261 0.4608 0.5679 0.7951 0.1291 0.6686 0.4389 0.4608 0.3786 1.066-0.06023 1.653-0.5077h1.129l0.5963 0.1893 0.8584-0.7572 1.328-0.1893 0.9939-1.015 1.265-0.5679 0.3976-1.007 0.7951-0.4388 0.7319-0.9551 1.789-0.4388 0.1265-1.136 0.07228-1.265-0.1988-1.644 1.527-2.461 1.256-1.007 0.5963-1.265 1.59-1.205 0.9306-1.136 0.1988-1.704-0.262-1.076c0-3e-6 -1.538 0.9977-1.834 1.299-0.0036 0.0034-0.01441 0.01399-0.01807 0.01721-0.0011 1e-3 -0.0081 0.0076-9e-3 0.0086-4e-3 0.0057-0.01346 0.01986-0.01807 0.02582-0.2509 0.2704-1.373 0.9293-1.373 0.9293l-1.129-0.6368-2.322-1.764-1.319-1.583-0.9306-1.265s-0.2678-0.126-0.5331-0.3786c-2e-3 -0.0019-7e-3 -0.0066-9e-3 -0.0086-8.94e-4 -8.18e-4 -0.0082-0.0079-9e-3 -0.0086-0.2376-0.2805-0.4854-1.378-0.7228-1.644-0.0047-0.0046-0.01508-0.0144-0.01807-0.01721-9.93e-4 -8.76e-4 -0.0073-0.0069-9e-3 -0.0086-8.7e-4 -8.97e-4 -0.0082-0.0078-9e-3 -0.0086-0.0032-0.0016-0.01509-0.0073-0.01807-0.0086-0.2653-0.1263-1.057-0.8175-1.057-0.8175l0.524-0.6368 0.7951 0.2582 0.7319 1.067 0.7319 0.8261 0.262 0.697 1.129 0.06024 0.262 0.8863 0.7319 0.4991 0.4608 0.5679c0-5e-6 0.505 0.2457 0.5963 0.4905-1.5e-5 7.44e-4 8.2e-5 0.0078 0 0.0086 0.0017 0.0015 0.0074 0.0071 9e-3 0.0086 0.06632 0.2526 0.524 0.9465 0.524 0.9465l0.1355 1.136 1.653-0.1205 0.6686-1.015 1.328-1.007 1.391-1.454 1.129-1.644 0.4608-1.265 0.5331-1.635-0.5331-0.6368-0.9939 0.06023-0.5963-0.4388-0.5963 0.8175-0.4698 0.7658-1.193-0.06884-1.193-1.076-0.3343-0.7572-0.06325-0.8175 1.789 0.2495 0.1988 0.4475 1.464 0.1205 0.524-0.6884 1.527-0.06884c0-3e-6 1.082-0.3013 1.256-0.5507 0.0024-0.0045 0.0075-0.01425 9e-3 -0.01721 0.1326-0.2526 0.7951-1.196 0.7951-1.196l0.8583-0.1893 0.8674 0.6282 0.6596-0.2495-0.06325 0.7572 0.6596-0.2495 0.1355-1.076 0.6596 1.454 0.7951 1.136 0.7951 1.007s0.06578 0.7571 0.5963 0.9465c0.4974 0.1776 0.764 0.4104 0.7951 0.4389l0.2711-1.136c0.01778-0.03677 0.1178-0.2293 0.2168-0.3098 0.0057-0.0038 0.02024-0.01268 0.0271-0.01721 8.13e-4 -7.94e-4 0.0081-0.0076 9e-3 -0.0086 8.05e-4 1.9e-5 0.0081-7.1e-5 9e-3 0 8.05e-4 -7.93e-4 0.0081-0.0076 9e-3 -0.0086 8.08e-4 6e-6 0.0081-3.8e-5 9e-3 0 8.08e-4 0 0.0081-2.4e-5 9e-3 0 0.0013-8.2e-5 0.0077 1.1e-5 9e-3 0 6.67e-4 2.7e-5 0.0071 2.4e-5 9e-3 0 8.04e-4 -1.4e-5 0.0081 3.5e-5 9e-3 0 0.0016 0.0016 0.0074 7e-3 9e-3 0.0086 8.12e-4 -2.5e-5 0.0081 7.9e-5 9e-3 0 0.0015 0.0015 0.0075 0.0071 9e-3 0.0086 0.0012 1e-3 0.0078 0.0075 9e-3 0.0086 0.0012 0.0013 0.0078 0.0072 9e-3 0.0086 0.0016 0.0015 0.0074 0.0071 9e-3 0.0086 0.0016 3e-3 0.0075 0.01415 9e-3 0.01721 0.0022 0.0039 0.0069 0.01291 9e-3 0.01721 0.0016 0.0029 0.0075 0.01423 9e-3 0.01721 0.1161 0.2763 0.08316 0.7955 0.07228 0.9207l0.3253-0.6023 0.262-0.8863-0.6596-0.1893-0.3976-0.5679-0.2711-1.136-0.06325-1.454 0.3343-1.833 0.1988-2.143 0.262-1.454 0.5963 1.136 0.7951 1.076 0.07229 0.1205 0.1265-1.067 0.2711-0.8261 0.06324-0.8175 0.3976-0.3184 0.253-0.413c-0.7691-6.831-3.616-13.08-7.933-18.14l-0.4066 0.5507-0.6686-1.196-0.9939-0.6368-0.7319-0.06024-0.1265-1.015-0.9306-0.8175-1.256-0.5077-0.3343-0.2495-1.066-0.3184-1.12-0.3098-1.066-0.3184-1.129-0.8261-2.521-0.6282-0.4608-0.5077-0.9306-0.7572-0.9939-0.3786-0.8583-0.697-1.391-0.6884-1.328-0.2581-1.464-0.3098-1.455-0.1291zm-12.27 10.27-2.178 0.06024c-0.01666 7e-3 -0.08132 0.03442-0.08132 0.03442s-1.785 1.262-2.449 1.514c-0.6632 0.2526-1.328 1.196-1.328 1.196 0 0-1.325 0.06592-1.59 0.1291-0.0031 0.0014-0.01493 7e-3 -0.01807 0.0086-0.0023 0.0011-0.01325 0.0063-0.01807 0.0086-9.22e-4 9.49e-4 -0.0082 0.0078-9e-3 0.0086-0.01273 0.0087-0.03146 0.0227-0.04518 0.03442-0.0022 2e-3 -0.0069 0.0065-9e-3 0.0086-0.2761 0.2751-0.7462 1.254-1.093 1.48-0.0232 0.01432-0.05027 0.02743-0.07228 0.03442-8.05e-4 -1.3e-5 -0.0081 7.4e-5 -9e-3 0-0.0047 2e-3 -0.01216 0.0054-0.01807 0.0086-8e-3 0.0046-0.02035 0.01232-0.02711 0.01721-7.93e-4 7.58e-4 -0.0082 0.0077-9e-3 0.0086-0.3352 0.2914-0.3976 1.79-0.3976 1.79l0.6596 1.076 0.1988-0.8175 1.464-0.7572 1.59-0.4475s2.319-0.1205 2.584-0.1205c0.0021 0 0.0068-5.5e-5 9e-3 0 0.2912 0.01329 1.518 0.4388 1.518 0.4388l1.988-1.644s-0.6628-0.5676-0.3976-0.9465c0.2653-0.379 1.328-1.136 1.328-1.136l0.3343-0.06884 0.06325-0.1893-1.988-1.73zm-0.06325 12.79-0.8674 0.06023-0.3253 1.205 0.1265 0.697-0.9939-0.06884-1.057 0.5679v0.8261l0.3976 0.5679 0.9216 0.06023s0.1323-0.5046 0.3976-0.7572c0.2653-0.2526 0.8674-0.3786 0.8674-0.3786l0.3343 0.3184-0.4698 0.2495-0.6596 0.5679-0.1355 0.8261-0.06325 0.2495 0.7319 0.06023 0.4608-0.06023 1.193 0.1291v-0.7572l0.4608-0.1893-0.3253-0.5679v-1.076l-0.5963-0.3786 0.1265-0.8863 0.3343-0.4388-0.8584-0.8261zm-12.74 7.581-0.6596 0.06023 0.5963 0.6368 0.06325-0.697zm16.52 2.461-0.8584 1.136 0.06325 1.205 0.3976 0.4389 0.4608-0.3184-0.06325-1.136v-1.325zm22.42 24.13-0.9306 0.6282-1.328 0.5077-0.524 0.3786-0.6686 1.265-0.524 0.7572 0.7951 0.7572 1.319-0.4991 0.9306-1.773 0.7951-1.394z" fill="url(#radialGradient5504)" fill-rule="evenodd"/><path transform="matrix(.4259 0 0 .4259 530.1 -90.19)" d="m-1178 380.5c9.474 35.02 41.47 60.81 79.47 60.81 38 0 70.03-25.8 79.5-60.81-13.48 30.5-44.03 44.13-79.5 44.13-35.47-1e-5 -65.99-13.63-79.47-44.13z" fill="url(#linearGradient5859)" filter="url(#filter3793)" opacity=".5206"/></g><g transform="matrix(.1364 0 0 .1364 23.09 22.81)" fill="none" opacity=".4007" stroke-linecap="round" stroke-linejoin="round"><g stroke="url(#linearGradient6096)"><g stroke-width=".9188"><polyline points="146.3 54.15 144.4 54.88 142.5 55.63 140.6 56.39 138.8 57.16 136.9 57.96 135.1 58.76 133.3 59.58 131.4 60.42 129.6 61.27 127.8 62.14 126.1 63.02 124.3 63.91 122.5 64.82 120.8 65.74 119 66.68 117.3 67.63 115.5 68.59 113.8 69.57 112.1 70.57 110.4 71.57 108.8 72.6 107.1 73.63 105.4 74.68 103.8 75.74 102.2 76.82 100.5 77.91 98.92 79.01 97.33 80.13 95.74 81.26 94.17 82.4 92.61 83.56 91.06 84.73"/><polyline points="91.06 84.73 89.52 85.91 88 87.1 86.49 88.31 85 89.53 83.51 90.76 82.04 92.01 80.58 93.27 79.14 94.54 77.71 95.82 76.29 97.12 74.89 98.43 73.5 99.75 72.12 101.1 70.76 102.4 69.41 103.8 68.07 105.1 66.75 106.5 65.45 107.9 64.16 109.3 62.88 110.7 61.62 112.2 60.37 113.6 59.13 115 57.92 116.5 56.71 118 55.52 119.4 54.35 120.9 53.19 122.4 52.05 123.9 50.92 125.5 49.8 127 48.71 128.5"/><polyline points="48.71 128.5 47.62 130.1 46.56 131.7 45.51 133.2 44.47 134.8 43.45 136.4 42.45 138 41.46 139.6 40.48 141.2 39.53 142.9 38.59 144.5 37.66 146.1 36.76 147.8"/><polyline points="210.5 38.89 208.4 39.12 206.3 39.37 204.2 39.63 202.1 39.91 200.1 40.21 198 40.52 195.9 40.85 193.8 41.19 191.8 41.55 189.7 41.93 187.7 42.32 185.6 42.72 183.6 43.15 181.6 43.59 179.5 44.04 177.5 44.51 175.5 45 173.5 45.5 171.5 46.02 169.5 46.55 167.5 47.1 165.6 47.66 163.6 48.24 161.6 48.84 159.7 49.45 157.7 50.07 155.8 50.71 153.9 51.37 152 52.04 150 52.73 148.1 53.43 146.3 54.15"/><polyline points="208.1 48.13 205.9 48.64 203.7 49.17 201.6 49.72 199.4 50.28 197.3 50.85 195.1 51.44 193 52.05 190.8 52.67 188.7 53.31 186.6 53.96 184.4 54.62 182.3 55.3 180.2 56 178.1 56.71 176 57.44 173.9 58.18 171.8 58.93 169.8 59.7 167.7 60.49 165.6 61.29 163.6 62.1 161.5 62.93 159.5 63.77 157.5 64.63 155.5 65.5 153.4 66.39 151.4 67.29 149.4 68.2 147.5 69.13 145.5 70.08 143.5 71.03 141.6 72"/><polyline points="141.6 72 139.6 72.99 137.7 73.98 135.7 75 133.8 76.02 131.9 77.06 130 78.11 128.1 79.18 126.2 80.26 124.4 81.35 122.5 82.46 120.6 83.58 118.8 84.71 117 85.86 115.2 87.01 113.3 88.18 111.5 89.37 109.8 90.56 108 91.77 106.2 93 104.5 94.23 102.7 95.48 101 96.73 99.29 98 97.59 99.29 95.9 100.6 94.22 101.9 92.55 103.2 90.9 104.5 89.26 105.9 87.63 107.2 86.01 108.6 84.41 110"/><polyline points="84.41 110 82.82 111.4 81.25 112.8 79.68 114.2 78.13 115.6 76.6 117 75.07 118.5 73.56 119.9 72.07 121.4 70.59 122.9 69.12 124.3 67.67 125.8 66.23 127.4 64.8 128.9 63.39 130.4 62 131.9 60.62 133.5 59.25 135 57.9 136.6 56.56 138.2 55.24 139.8 53.93 141.4 52.64 143 51.36 144.6 50.1 146.2 48.85 147.8 47.62 149.5 46.41 151.1 45.21 152.8 44.02 154.4 42.85 156.1 41.7 157.8 40.56 159.5"/><polyline points="40.56 159.5 39.44 161.2 38.34 162.9 37.25 164.6 36.18 166.3 35.12 168 34.08 169.8 33.06 171.5 32.05 173.3 31.06 175 30.09 176.8 29.13 178.5 28.19 180.3 27.27 182.1 26.36 183.9 25.47 185.7 24.6 187.5 23.75 189.3 22.91 191.1 22.09 192.9 21.28 194.8 20.5 196.6 19.73 198.4 18.98 200.3 18.24 202.1 17.52 204 16.83 205.8 16.14 207.7 15.48 209.6 14.83 211.4 14.2 213.3 13.59 215.2 13 217.1"/><polyline points="13 217.1 12.43 219 11.87 220.9 11.33 222.8 10.81 224.7 10.3 226.6 9.818 228.5 9.351 230.4 8.901 232.3 8.469 234.2 8.056 236.2 7.662 238.1 7.285 240 6.926 241.9 6.586 243.9 6.264 245.8 5.959 247.7 5.674 249.7 5.407 251.6 5.159 253.6 4.928 255.5 4.716 257.5 4.522 259.4 4.347 261.4 4.19 263.3 4.052 265.3 3.932 267.2 3.831 269.2 3.748 271.1 3.683 273.1 3.636 275 3.608 277 3.599 278.9"/><polyline points="13 314.6 13.01 316.6 13.04 318.6 13.08 320.5 13.15 322.4 13.23 324.4 13.32 326.3 13.44 328.3 13.58 330.2 13.73 332.1 13.9 334.1 14.08 336 14.29 337.9 14.51 339.8 14.75 341.7 15.01 343.6 15.28 345.5 15.58 347.4 15.89 349.3 16.22 351.2 16.56 353.1 16.93 355 17.31 356.8 17.71 358.7 18.12 360.6 18.56 362.4 19.01 364.3 19.48 366.1 19.97 368 20.47 369.8 20.99 371.6 21.53 373.5 22.08 375.3"/><polyline points="48.71 190.4 47.63 192.2 46.56 194.1 45.51 195.9 44.47 197.8 43.45 199.7 42.45 201.5 41.46 203.4 40.49 205.3 39.53 207.2 38.59 209.1 37.67 210.9 36.76 212.8 35.87 214.8 34.99 216.7 34.13 218.6 33.29 220.5 32.46 222.4 31.65 224.3 30.86 226.3 30.08 228.2 29.32 230.1 28.58 232.1 27.86 234 27.15 235.9 26.46 237.9 25.78 239.8 25.12 241.8 24.48 243.7 23.86 245.7 23.25 247.7 22.66 249.6 22.08 251.6"/><polyline points="22.08 251.6 21.53 253.5 20.99 255.5 20.47 257.5 19.97 259.5 19.48 261.4 19.01 263.4 18.56 265.4 18.12 267.3 17.71 269.3 17.31 271.3 16.93 273.3 16.56 275.2 16.22 277.2 15.89 279.2 15.58 281.2 15.28 283.2 15.01 285.1 14.75 287.1 14.51 289.1 14.29 291.1 14.08 293 13.9 295 13.73 297 13.58 298.9 13.44 300.9 13.32 302.9 13.23 304.8 13.15 306.8 13.08 308.8 13.04 310.7 13.01 312.7 13 314.6"/><polyline points="91.06 135.2 89.53 136.8 88 138.4 86.49 140 85 141.7 83.51 143.3 82.04 144.9 80.58 146.6 79.14 148.2 77.71 149.9 76.29 151.6 74.89 153.3 73.5 155 72.12 156.7 70.76 158.4 69.41 160.1 68.08 161.8 66.76 163.5 65.45 165.3 64.16 167 62.88 168.8 61.62 170.5 60.37 172.3 59.14 174.1 57.92 175.9 56.71 177.7 55.52 179.5 54.35 181.3 53.19 183.1 52.05 184.9 50.92 186.7 49.81 188.6 48.71 190.4"/><polyline points="146.3 89.86 144.4 91.09 142.5 92.34 140.6 93.6 138.8 94.88 136.9 96.16 135.1 97.46 133.3 98.78 131.4 100.1 129.6 101.4 127.8 102.8 126.1 104.1 124.3 105.5 122.5 106.9 120.8 108.3 119 109.7 117.3 111.1 115.5 112.5 113.8 114 112.1 115.4 110.4 116.9 108.8 118.4 107.1 119.8 105.4 121.3 103.8 122.8 102.2 124.3 100.5 125.9 98.93 127.4 97.33 128.9 95.74 130.5 94.17 132.1 92.61 133.6 91.06 135.2"/><polyline points="22.08 375.3 22.66 377.1 23.25 378.9 23.86 380.7 24.48 382.5 25.12 384.3 25.78 386 26.46 387.8 27.15 389.6 27.86 391.3 28.58 393.1 29.33 394.8 30.08 396.5 30.86 398.2 31.66 400 32.46 401.7 33.29 403.4 34.13 405.1 34.99 406.7 35.87 408.4"/><polyline points="210.5 57.37 208.4 58.17 206.3 58.98 204.2 59.8 202.1 60.64 200.1 61.5 198 62.37 195.9 63.25 193.8 64.15 191.8 65.06 189.7 65.99 187.7 66.93 185.6 67.88 183.6 68.85 181.6 69.83 179.5 70.83 177.5 71.84 175.5 72.87 173.5 73.91 171.5 74.96 169.5 76.02 167.5 77.1 165.6 78.2 163.6 79.3 161.6 80.42 159.7 81.56 157.7 82.7 155.8 83.86 153.9 85.04 152 86.22 150.1 87.42 148.2 88.63 146.3 89.86"/><polyline points="217.7 65.98 215.8 67.04 213.9 68.11 212 69.2 210.2 70.3 208.3 71.42 206.4 72.54 204.6 73.69 202.7 74.84 200.9 76.01 199 77.19 197.2 78.39 195.3 79.6 193.5 80.82 191.7 82.06 189.9 83.31 188.1 84.58 186.3 85.85 184.5 87.14 182.7 88.44 180.9 89.76 179.1 91.08 177.4 92.42 175.6 93.78 173.8 95.14 172.1 96.52 170.3 97.9 168.6 99.31 166.9 100.7 165.2 102.1 163.4 103.6 161.7 105 160 106.5"/><polyline points="98.58 487.2 97.31 486.1 96.05 485 94.81 483.8 93.57 482.7 92.35 481.5 91.14 480.3 89.95 479.1 88.76 477.9 87.59 476.7 86.44 475.4 85.29 474.2 84.16 472.9 83.04 471.6 81.93 470.3 80.84 469 79.76 467.7 78.69 466.4 77.64 465.1 76.6 463.7 75.58 462.3 74.56 460.9 73.57 459.6 72.58 458.1"/><polyline points="48.71 407.4 49.22 409.1 49.75 410.9 50.3 412.6 50.86 414.3 51.43 416 52.02 417.7 52.63 419.4 53.25 421.1 53.89 422.7 54.54 424.4 55.2 426 55.88 427.7 56.58 429.3 57.29 430.9 58.02 432.5 58.76 434.1 59.51 435.7 60.28 437.3 61.07 438.8 61.87 440.4 62.68 441.9 63.51 443.5 64.36 445 65.21 446.5 66.08 448 66.97 449.5 67.87 450.9 68.78 452.4 69.71 453.9 70.66 455.3 71.61 456.7 72.58 458.1"/><polyline points="160 106.5 158.4 108 156.7 109.4 155 110.9 153.3 112.4 151.7 114 150 115.5 148.4 117 146.8 118.6 145.1 120.1 143.5 121.7 141.9 123.3 140.3 124.9 138.7 126.5 137.2 128.1 135.6 129.7 134.1 131.4 132.5 133 131 134.7 129.4 136.3 127.9 138 126.4 139.7 124.9 141.4 123.4 143.1 122 144.8 120.5 146.5 119 148.2 117.6 149.9 116.2 151.7 114.8 153.4 113.3 155.2 111.9 157 110.6 158.8"/><polyline points="110.6 158.8 109.2 160.5 107.8 162.3 106.5 164.1 105.1 165.9 103.8 167.8 102.5 169.6 101.2 171.4 99.86 173.2 98.58 175.1 97.31 176.9 96.05 178.8 94.81 180.7 93.57 182.5 92.35 184.4 91.14 186.3 89.95 188.2 88.76 190.1 87.59 192 86.43 193.9 85.29 195.8 84.16 197.7 83.04 199.7 81.93 201.6 80.84 203.5 79.76 205.5 78.69 207.4 77.64 209.4 76.6 211.3 75.58 213.3 74.56 215.3 73.57 217.2 72.58 219.2"/><polyline points="40.57 347.9 40.58 349.9 40.6 351.8 40.64 353.8 40.7 355.7 40.77 357.6 40.86 359.6 40.96 361.5 41.08 363.4 41.22 365.3 41.37 367.2 41.54 369.1 41.72 371 41.92 372.9 42.14 374.8 42.37 376.6 42.61 378.5 42.88 380.4 43.16 382.2 43.45 384.1 43.76 385.9 44.09 387.8 44.43 389.6 44.79 391.4 45.16 393.2 45.55 395 45.96 396.8 46.38 398.6 46.81 400.4 47.26 402.1 47.73 403.9 48.21 405.7 48.71 407.4"/><polyline points="48.71 283.7 48.21 285.8 47.73 287.8 47.26 289.8 46.81 291.9 46.38 293.9 45.96 295.9 45.55 297.9 45.16 300 44.79 302 44.43 304 44.09 306 43.76 308.1 43.45 310.1 43.16 312.1 42.88 314.1 42.61 316.1 42.37 318.1 42.14 320.2 41.92 322.2 41.72 324.2 41.54 326.2 41.37 328.2 41.22 330.2 41.08 332.1 40.96 334.1 40.86 336.1 40.77 338.1 40.7 340.1 40.64 342 40.6 344 40.58 346 40.57 347.9"/><polyline points="72.58 219.2 71.61 221.2 70.66 223.2 69.71 225.1 68.78 227.1 67.87 229.1 66.97 231.1 66.08 233.1 65.21 235.1 64.35 237.1 63.51 239.1 62.68 241.1 61.87 243.2 61.07 245.2 60.28 247.2 59.51 249.2 58.76 251.2 58.02 253.2 57.29 255.3 56.58 257.3 55.88 259.3 55.2 261.4 54.54 263.4 53.89 265.4 53.25 267.4 52.63 269.5 52.02 271.5 51.43 273.6 50.86 275.6 50.3 277.6 49.75 279.7 49.22 281.7 48.71 283.7"/><polyline points="91.07 311.3 90.66 313.4 90.26 315.5 89.88 317.6 89.52 319.7 89.16 321.8 88.82 323.8 88.48 325.9 88.17 328 87.86 330.1 87.57 332.1 87.29 334.2 87.02 336.3 86.77 338.3 86.53 340.4 86.3 342.4 86.09 344.5 85.89 346.5 85.7 348.5 85.52 350.6 85.36 352.6 85.21 354.6 85.07 356.6 84.95 358.6 84.84 360.6 84.74 362.6 84.65 364.6 84.58 366.6 84.52 368.6 84.48 370.6 84.44 372.6 84.42 374.5 84.42 376.5"/><polyline points="141.6 179 140.4 180.9 139.3 182.9 138.2 184.8 137.1 186.8 136 188.8 135 190.7 133.9 192.7 132.8 194.7 131.8 196.7 130.7 198.7 129.7 200.7 128.7 202.8 127.7 204.8 126.7 206.8 125.7 208.8 124.7 210.9 123.8 212.9 122.8 214.9 121.9 217 120.9 219 120 221.1 119.1 223.2 118.2 225.2 117.3 227.3 116.4 229.4 115.5 231.4 114.7 233.5 113.8 235.6 113 237.7 112.2 239.8 111.4 241.9 110.6 243.9"/><polyline points="229 73.38 227.5 74.66 225.9 75.96 224.4 77.27 222.9 78.59 221.4 79.93 219.8 81.28 218.3 82.65 216.8 84.03 215.3 85.42 213.8 86.82 212.3 88.24 210.8 89.67 209.3 91.11 207.8 92.56 206.3 94.03 204.9 95.51 203.4 97 201.9 98.5 200.5 100 199 101.5 197.5 103.1 196.1 104.6 194.7 106.2 193.2 107.8 191.8 109.4 190.4 111 189 112.6 187.5 114.2 186.1 115.8 184.7 117.5 183.4 119.1 182 120.8"/><polyline points="110.6 243.9 109.8 246 109 248.1 108.2 250.2 107.5 252.3 106.7 254.4 106 256.5 105.2 258.6 104.5 260.7 103.8 262.8 103.1 265 102.5 267.1 101.8 269.2 101.2 271.3 100.5 273.4 99.89 275.5 99.27 277.6 98.66 279.7 98.07 281.8 97.49 284 96.92 286.1 96.37 288.2 95.82 290.3 95.29 292.4 94.77 294.5 94.26 296.6 93.77 298.7 93.29 300.8 92.82 302.9 92.36 305 91.92 307.1 91.48 309.2 91.07 311.3"/><polyline points="182 120.8 180.6 122.4 179.2 124.1 177.8 125.8 176.5 127.5 175.1 129.2 173.8 131 172.5 132.7 171.1 134.5 169.8 136.2 168.5 138 167.2 139.7 165.9 141.5 164.6 143.3 163.3 145.1 162 146.9 160.7 148.8 159.5 150.6 158.2 152.4 157 154.3 155.7 156.1 154.5 158 153.3 159.8 152.1 161.7 150.9 163.6 149.7 165.5 148.5 167.4 147.3 169.3 146.1 171.2 145 173.1 143.8 175.1 142.7 177 141.6 179"/><polyline points="141.6 516.9 140.4 516 139.3 515.2 138.2 514.4 137.1 513.5 136 512.6 135 511.7 133.9 510.8 132.8 509.8 131.8 508.9 130.7 507.9 129.7 506.9 128.7 505.9 127.7 504.9 126.7 503.9 125.7 502.8 124.7 501.8 123.8 500.7 122.8 499.6 121.9 498.5 120.9 497.4 120 496.3 119.1 495.1 118.2 494 117.3 492.8 116.4 491.6 115.5 490.4 114.7 489.2 113.8 488 113 486.7 112.2 485.4 111.4 484.2 110.6 482.9"/><polyline points="155.7 525.5 154.5 524.9 153.3 524.2 152.1 523.6 150.9 522.9 149.7 522.2 148.5 521.5 147.3 520.8 146.1 520 145 519.3 143.8 518.5 142.7 517.7 141.6 516.9"/><polyline points="84.42 376.5 84.42 378.4 84.44 380.4 84.48 382.3 84.52 384.3 84.58 386.2 84.65 388.1 84.74 390 84.84 391.9 84.95 393.8 85.07 395.7 85.21 397.6 85.36 399.4 85.52 401.3 85.7 403.2 85.89 405 86.09 406.8 86.3 408.7 86.53 410.5 86.77 412.3 87.02 414.1 87.29 415.9 87.57 417.7 87.86 419.5 88.17 421.2 88.48 423 88.82 424.7 89.16 426.5 89.52 428.2 89.88 429.9 90.26 431.6 90.66 433.3 91.07 435"/><polyline points="110.6 482.9 109.8 481.6 109 480.3 108.2 478.9 107.5 477.6 106.7 476.3 106 474.9 105.2 473.5 104.5 472.1 103.8 470.7 103.1 469.3 102.5 467.9 101.8 466.4 101.2 464.9 100.5 463.5 99.89 462 99.27 460.5 98.66 459 98.07 457.5 97.49 455.9 96.92 454.4 96.37 452.8 95.82 451.3 95.29 449.7 94.77 448.1 94.27 446.5 93.77 444.9 93.29 443.3 92.82 441.6 92.36 440 91.92 438.4 91.48 436.7 91.07 435"/><polyline points="160 501.9 159.5 500.7 158.9 499.4 158.4 498.2 157.9 496.9 157.3 495.7 156.8 494.4 156.3 493.1 155.8 491.8 155.3 490.4 154.8 489.1 154.3 487.7 153.9 486.4 153.4 485 152.9 483.6 152.5 482.2 152.1 480.8 151.6 479.3 151.2 477.9 150.8 476.4 150.4 474.9 150 473.4 149.6 471.9 149.2 470.4 148.9 468.9 148.5 467.3 148.2 465.8 147.8 464.2 147.5 462.6 147.2 461 146.9 459.4 146.6 457.8 146.3 456.2"/><polyline points="160 262.9 159.5 265.1 158.9 267.3 158.4 269.5 157.9 271.7 157.3 273.8 156.8 276 156.3 278.2 155.8 280.4 155.3 282.6 154.8 284.8 154.3 287 153.9 289.1 153.4 291.3 152.9 293.5 152.5 295.7 152.1 297.9 151.6 300.1 151.2 302.2 150.8 304.4 150.4 306.6 150 308.8 149.6 310.9 149.2 313.1 148.9 315.3 148.5 317.4 148.2 319.6 147.8 321.7 147.5 323.9 147.2 326.1 146.9 328.2 146.6 330.4 146.3 332.5"/><polyline points="243.8 79.05 242.7 80.51 241.6 81.98 240.5 83.46 239.5 84.96 238.4 86.47 237.3 87.99 236.2 89.52 235.2 91.07 234.1 92.63 233 94.2 232 95.79 230.9 97.39 229.9 99 228.8 100.6 227.8 102.3 226.7 103.9 225.7 105.6 224.6 107.2 223.6 108.9 222.6 110.6 221.6 112.3 220.5 114 219.5 115.7 218.5 117.5 217.5 119.2 216.5 121 215.5 122.7 214.5 124.5 213.5 126.3 212.5 128.1 211.5 129.9 210.5 131.7"/><polyline points="146.3 456.2 146 454.5 145.7 452.9 145.4 451.2 145.2 449.5 144.9 447.9 144.7 446.2 144.4 444.5 144.2 442.7 144 441 143.8 439.3 143.6 437.5 143.4 435.7 143.2 434 143.1 432.2 142.9 430.4 142.7 428.6 142.6 426.8 142.5 424.9 142.3 423.1 142.2 421.3 142.1 419.4 142 417.5 141.9 415.7 141.9 413.8 141.8 411.9 141.7 410 141.7 408.1 141.6 406.2 141.6 404.2 141.6 402.3 141.6 400.4 141.6 398.4"/><polyline points="182 194.5 181.2 196.5 180.4 198.6 179.6 200.7 178.8 202.8 178.1 204.9 177.3 207 176.5 209.1 175.8 211.2 175.1 213.3 174.3 215.4 173.6 217.6 172.9 219.7 172.2 221.8 171.5 224 170.8 226.1 170.1 228.3 169.4 230.4 168.7 232.6 168 234.7 167.4 236.9 166.7 239 166.1 241.2 165.4 243.4 164.8 245.5 164.2 247.7 163.6 249.9 163 252 162.4 254.2 161.8 256.4 161.2 258.6 160.6 260.7 160 262.9"/><polyline points="146.3 332.5 146 334.6 145.7 336.8 145.4 338.9 145.2 341 144.9 343.2 144.7 345.3 144.4 347.4 144.2 349.5 144 351.6 143.8 353.7 143.6 355.8 143.4 357.9 143.2 360 143.1 362.1 142.9 364.1 142.7 366.2 142.6 368.3 142.5 370.3 142.3 372.4 142.2 374.4 142.1 376.5 142 378.5 141.9 380.5 141.9 382.5 141.8 384.5 141.7 386.5 141.7 388.5 141.6 390.5 141.6 392.5 141.6 394.5 141.6 396.5 141.6 398.4"/><polyline points="202.9 544 201.9 543.7 201 543.4 200.1 543.1 199.2 542.8 198.2 542.4 197.3 542 196.4 541.6 195.5 541.2 194.6 540.8 193.8 540.4 192.9 539.9 192 539.4 191.1 538.9 190.3 538.4 189.4 537.9 188.6 537.4 187.7 536.8 186.9 536.2 186 535.6 185.2 535 184.4 534.4 183.6 533.7 182.8 533.1 182 532.4"/><polyline points="182 532.4 181.2 531.7 180.4 531 179.6 530.2 178.8 529.5 178.1 528.7 177.3 527.9 176.5 527.1 175.8 526.3 175.1 525.5 174.3 524.6 173.6 523.8 172.9 522.9 172.2 522 171.5 521.1 170.8 520.1 170.1 519.2 169.4 518.2 168.7 517.2 168 516.2 167.4 515.2 166.7 514.2 166.1 513.2 165.4 512.1 164.8 511 164.2 509.9 163.6 508.8 163 507.7 162.4 506.6 161.8 505.4 161.2 504.3 160.6 503.1 160 501.9"/><polyline points="210.5 131.7 209.6 133.6 208.6 135.4 207.6 137.3 206.7 139.1 205.7 141 204.8 142.9 203.8 144.7 202.9 146.6 201.9 148.5 201 150.4 200.1 152.4 199.2 154.3 198.2 156.2 197.3 158.2 196.4 160.1 195.5 162.1 194.6 164.1 193.8 166 192.9 168 192 170 191.1 172 190.3 174 189.4 176 188.6 178.1 187.7 180.1 186.9 182.1 186 184.2 185.2 186.2 184.4 188.3 183.6 190.3 182.8 192.4 182 194.5"/><polyline points="261 82.62 260.5 84.18 259.9 85.76 259.3 87.35 258.8 88.96 258.2 90.58 257.7 92.2 257.1 93.85 256.6 95.5 256 97.17 255.5 98.85 254.9 100.5 254.4 102.2 253.8 104 253.3 105.7 252.7 107.4 252.2 109.2 251.6 110.9 251.1 112.7 250.6 114.5 250 116.3 249.5 118.1 249 119.9 248.5 121.7 247.9 123.6 247.4 125.4 246.9 127.3 246.4 129.1 245.9 131 245.3 132.9 244.8 134.8 244.3 136.7 243.8 138.6"/><polyline points="217.7 274.9 217.4 277.1 217.1 279.3 216.8 281.6 216.5 283.8 216.3 286.1 216 288.3 215.7 290.5 215.5 292.8 215.2 295 215 297.2 214.7 299.5 214.5 301.7 214.2 303.9 214 306.2 213.8 308.4 213.5 310.6 213.3 312.8 213.1 315 212.9 317.3 212.7 319.5 212.5 321.7 212.3 323.9 212.1 326.1 211.9 328.3 211.7 330.5 211.5 332.7 211.4 334.9 211.2 337.1 211 339.3 210.8 341.5 210.7 343.6 210.5 345.8"/><polyline points="217.7 513.8 217.4 512.7 217.1 511.5 216.8 510.3 216.5 509.1 216.3 507.9 216 506.6 215.7 505.4 215.5 504.1 215.2 502.9 215 501.6 214.7 500.3 214.5 498.9 214.2 497.6 214 496.2 213.8 494.9 213.5 493.5 213.3 492.1 213.1 490.7 212.9 489.3 212.7 487.8 212.5 486.4 212.3 484.9 212.1 483.4 211.9 481.9 211.7 480.4 211.5 478.9 211.4 477.4 211.2 475.8 211 474.3 210.9 472.7 210.7 471.1 210.5 469.5"/><polyline points="243.8 138.6 243.3 140.6 242.8 142.5 242.3 144.4 241.8 146.4 241.3 148.4 240.8 150.3 240.3 152.3 239.8 154.3 239.4 156.3 238.9 158.3 238.4 160.3 237.9 162.3 237.4 164.4 237 166.4 236.5 168.4 236 170.5 235.6 172.5 235.1 174.6 234.7 176.7 234.2 178.8 233.8 180.8 233.3 182.9 232.9 185 232.4 187.1 232 189.3 231.6 191.4 231.1 193.5 230.7 195.6 230.3 197.8 229.9 199.9 229.4 202 229 204.2"/><polyline points="210.5 345.8 210.4 348 210.2 350.1 210.1 352.3 210 354.4 209.8 356.6 209.7 358.7 209.6 360.9 209.5 363 209.4 365.1 209.3 367.3 209.2 369.4 209.1 371.5 209 373.6 208.9 375.7 208.8 377.8 208.7 379.9 208.6 381.9 208.6 384 208.5 386.1 208.4 388.1 208.4 390.2 208.3 392.2 208.3 394.3 208.3 396.3 208.2 398.3 208.2 400.3 208.2 402.3 208.1 404.3 208.1 406.3 208.1 408.3 208.1 410.2 208.1 412.2"/><polyline points="210.5 469.5 210.4 467.9 210.2 466.3 210.1 464.6 210 463 209.8 461.3 209.7 459.6 209.6 457.9 209.5 456.2 209.4 454.5 209.3 452.8 209.2 451.1 209.1 449.3 209 447.6 208.9 445.8 208.8 444 208.7 442.2 208.6 440.4 208.6 438.6 208.5 436.8 208.4 435 208.4 433.1 208.3 431.3 208.3 429.4 208.3 427.5 208.2 425.6 208.2 423.8 208.2 421.9 208.1 419.9 208.1 418 208.1 416.1 208.1 414.1 208.1 412.2"/><polyline points="242.8 552.4 242.3 552.3 241.8 552.2 241.3 552.1 240.8 552 240.3 551.8 239.8 551.6 239.4 551.5 238.9 551.2 238.4 551 237.9 550.8 237.4 550.5 237 550.2 236.5 549.9 236 549.6 235.6 549.3 235.1 548.9 234.7 548.6 234.2 548.2 233.8 547.8 233.3 547.3 232.9 546.9 232.4 546.4 232 546 231.6 545.5 231.1 545 230.7 544.4 230.3 543.9 229.9 543.3 229.4 542.7 229 542.1"/><polyline points="229 542.1 228.6 541.5 228.2 540.9 227.8 540.2 227.4 539.5 227 538.8 226.6 538.1 226.2 537.4 225.8 536.7 225.4 535.9 225.1 535.1 224.7 534.3 224.3 533.5 223.9 532.7 223.6 531.9 223.2 531 222.9 530.1 222.5 529.2 222.2 528.3 221.8 527.4 221.5 526.4 221.1 525.5 220.8 524.5 220.5 523.5 220.1 522.5 219.8 521.5 219.5 520.4 219.2 519.4 218.9 518.3 218.6 517.2 218.3 516.1 218 515 217.7 513.8"/><polyline points="229 204.2 228.6 206.4 228.2 208.5 227.8 210.7 227.4 212.9 227 215 226.6 217.2 226.2 219.4 225.8 221.6 225.4 223.8 225.1 226 224.7 228.2 224.3 230.4 223.9 232.6 223.6 234.8 223.2 237 222.9 239.2 222.5 241.4 222.2 243.6 221.8 245.8 221.5 248.1 221.1 250.3 220.8 252.5 220.5 254.8 220.1 257 219.8 259.2 219.5 261.4 219.2 263.7 218.9 265.9 218.6 268.2 218.3 270.4 218 272.6 217.7 274.9"/><polyline points="279.5 554.8 279.5 554.8 279.5 554.8 279.5 554.7 279.5 554.6 279.5 554.5 279.5 554.4 279.5 554.3 279.5 554.1 279.5 553.9 279.5 553.7 279.5 553.5 279.5 553.3 279.5 553 279.5 552.8 279.5 552.5 279.5 552.2 279.5 551.9 279.5 551.5 279.5 551.2 279.5 550.8 279.5 550.4 279.5 550 279.5 549.5 279.5 549.1 279.5 548.6 279.5 548.1 279.5 547.6 279.5 547.1 279.5 546.6 279.5 546 279.5 545.4"/><polyline points="279.5 350.3 279.5 352.5 279.5 354.7 279.5 356.9 279.5 359 279.5 361.2 279.5 363.3 279.5 365.5 279.5 367.6 279.5 369.8 279.5 371.9 279.5 374 279.5 376.1 279.5 378.2 279.5 380.3 279.5 382.4 279.5 384.5 279.5 386.6 279.5 388.7 279.5 390.7 279.5 392.8 279.5 394.9 279.5 396.9 279.5 398.9 279.5 401 279.5 403 279.5 405 279.5 407 279.5 409 279.5 411 279.5 413 279.5 414.9 279.5 416.9"/><polyline points="279.5 207.5 279.5 209.7 279.5 211.9 279.5 214.1 279.5 216.3 279.5 218.5 279.5 220.7 279.5 222.9 279.5 225.1 279.5 227.3 279.5 229.5 279.5 231.8 279.5 234 279.5 236.2 279.5 238.4 279.5 240.7 279.5 242.9 279.5 245.2 279.5 247.4 279.5 249.6 279.5 251.9 279.5 254.1 279.5 256.4 279.5 258.6 279.5 260.9 279.5 263.1 279.5 265.4 279.5 267.6 279.5 269.9 279.5 272.2 279.5 274.4 279.5 276.7 279.5 278.9"/><polyline points="279.5 83.84 279.5 85.44 279.5 87.05 279.5 88.68 279.5 90.32 279.5 91.98 279.5 93.64 279.5 95.32 279.5 97.01 279.5 98.72 279.5 100.4 279.5 102.2 279.5 103.9 279.5 105.6 279.5 107.4 279.5 109.2 279.5 111 279.5 112.8 279.5 114.6 279.5 116.4 279.5 118.2 279.5 120.1 279.5 121.9 279.5 123.8 279.5 125.6 279.5 127.5 279.5 129.4 279.5 131.3 279.5 133.2 279.5 135.2 279.5 137.1 279.5 139 279.5 141"/><polyline points="279.5 545.4 279.5 544.9 279.5 544.2 279.5 543.6 279.5 543 279.5 542.3 279.5 541.6 279.5 540.9 279.5 540.2 279.5 539.5 279.5 538.7 279.5 537.9 279.5 537.2 279.5 536.4 279.5 535.5 279.5 534.7 279.5 533.8 279.5 533 279.5 532.1 279.5 531.2 279.5 530.3 279.5 529.3 279.5 528.4 279.5 527.4 279.5 526.4 279.5 525.4 279.5 524.4 279.5 523.3 279.5 522.3 279.5 521.2 279.5 520.1 279.5 519 279.5 517.9"/><polyline points="279.5 278.9 279.5 281.2 279.5 283.4 279.5 285.7 279.5 288 279.5 290.2 279.5 292.5 279.5 294.7 279.5 297 279.5 299.2 279.5 301.5 279.5 303.7 279.5 306 279.5 308.2 279.5 310.5 279.5 312.7 279.5 314.9 279.5 317.2 279.5 319.4 279.5 321.6 279.5 323.9 279.5 326.1 279.5 328.3 279.5 330.5 279.5 332.8 279.5 335 279.5 337.2 279.5 339.4 279.5 341.6 279.5 343.8 279.5 346 279.5 348.2 279.5 350.3"/><polyline points="279.5 141 279.5 142.9 279.5 144.9 279.5 146.9 279.5 148.9 279.5 150.9 279.5 152.9 279.5 154.9 279.5 156.9 279.5 158.9 279.5 161 279.5 163 279.5 165.1 279.5 167.1 279.5 169.2 279.5 171.3 279.5 173.3 279.5 175.4 279.5 177.5 279.5 179.6 279.5 181.7 279.5 183.9 279.5 186 279.5 188.1 279.5 190.2 279.5 192.4 279.5 194.5 279.5 196.7 279.5 198.8 279.5 201 279.5 203.2 279.5 205.3 279.5 207.5"/><polyline points="279.5 517.9 279.5 516.7 279.5 515.6 279.5 514.4 279.5 513.2 279.5 512 279.5 510.8 279.5 509.6 279.5 508.3 279.5 507.1 279.5 505.8 279.5 504.5 279.5 503.2 279.5 501.9 279.5 500.5 279.5 499.2 279.5 497.8 279.5 496.4 279.5 495.1 279.5 493.6 279.5 492.2 279.5 490.8 279.5 489.3 279.5 487.9 279.5 486.4 279.5 484.9 279.5 483.4 279.5 481.8 279.5 480.3 279.5 478.8 279.5 477.2 279.5 475.6 279.5 474"/><polyline points="279.5 474 279.5 472.4 279.5 470.8 279.5 469.2 279.5 467.5 279.5 465.9 279.5 464.2 279.5 462.5 279.5 460.9 279.5 459.2 279.5 457.4 279.5 455.7 279.5 454 279.5 452.2 279.5 450.5 279.5 448.7 279.5 446.9 279.5 445.1 279.5 443.3 279.5 441.5 279.5 439.6 279.5 437.8 279.5 436 279.5 434.1 279.5 432.2 279.5 430.3 279.5 428.4 279.5 426.5 279.5 424.6 279.5 422.7 279.5 420.8 279.5 418.8 279.5 416.9"/><polyline points="341.4 274.9 341.6 277.1 341.9 279.3 342.2 281.6 342.5 283.8 342.8 286.1 343 288.3 343.3 290.5 343.6 292.8 343.8 295 344.1 297.2 344.3 299.5 344.6 301.7 344.8 303.9 345 306.2 345.3 308.4 345.5 310.6 345.7 312.8 345.9 315 346.1 317.3 346.4 319.5 346.6 321.7 346.8 323.9 346.9 326.1 347.1 328.3 347.3 330.5 347.5 332.7 347.7 334.9 347.9 337.1 348 339.3 348.2 341.5 348.3 343.6 348.5 345.8"/><polyline points="341.4 513.8 341.6 512.7 341.9 511.5 342.2 510.3 342.5 509.1 342.8 507.9 343 506.6 343.3 505.4 343.6 504.1 343.8 502.9 344.1 501.6 344.3 500.2 344.6 498.9 344.8 497.6 345 496.2 345.3 494.9 345.5 493.5 345.7 492.1 345.9 490.7 346.1 489.3 346.4 487.8 346.6 486.4 346.8 484.9 346.9 483.4 347.1 481.9 347.3 480.4 347.5 478.9 347.7 477.4 347.9 475.8 348 474.3 348.2 472.7 348.3 471.1 348.5 469.5"/><polyline points="298 82.62 298.6 84.18 299.1 85.76 299.7 87.35 300.2 88.96 300.8 90.58 301.4 92.2 301.9 93.85 302.5 95.5 303 97.17 303.6 98.85 304.1 100.5 304.7 102.2 305.2 104 305.8 105.7 306.3 107.4 306.8 109.2 307.4 110.9 307.9 112.7 308.5 114.5 309 116.3 309.5 118.1 310 119.9 310.6 121.7 311.1 123.6 311.6 125.4 312.1 127.3 312.7 129.1 313.2 131 313.7 132.9 314.2 134.8 314.7 136.7 315.2 138.6"/><polyline points="330 204.2 330.4 206.4 330.8 208.5 331.2 210.7 331.6 212.8 332 215 332.4 217.2 332.8 219.4 333.2 221.6 333.6 223.8 334 226 334.3 228.2 334.7 230.4 335.1 232.6 335.4 234.8 335.8 237 336.2 239.2 336.5 241.4 336.9 243.6 337.2 245.8 337.6 248.1 337.9 250.3 338.2 252.5 338.6 254.8 338.9 257 339.2 259.2 339.5 261.4 339.8 263.7 340.2 265.9 340.5 268.2 340.8 270.4 341.1 272.6 341.4 274.9"/><polyline points="316.2 552.4 316.7 552.3 317.2 552.2 317.7 552.1 318.2 552 318.7 551.8 319.2 551.6 319.7 551.5 320.2 551.2 320.6 551 321.1 550.8 321.6 550.5 322.1 550.2 322.5 549.9 323 549.6 323.4 549.3 323.9 548.9 324.4 548.6 324.8 548.2 325.3 547.8 325.7 547.3 326.2 546.9 326.6 546.4 327 546 327.5 545.5 327.9 545 328.3 544.4 328.8 543.9 329.2 543.3 329.6 542.7 330 542.1"/><polyline points="315.2 138.6 315.7 140.6 316.2 142.5 316.7 144.4 317.2 146.4 317.7 148.4 318.2 150.3 318.7 152.3 319.2 154.3 319.7 156.3 320.2 158.3 320.6 160.3 321.1 162.3 321.6 164.4 322.1 166.4 322.5 168.4 323 170.5 323.4 172.5 323.9 174.6 324.4 176.7 324.8 178.8 325.3 180.8 325.7 182.9 326.2 185 326.6 187.1 327 189.3 327.5 191.4 327.9 193.5 328.3 195.6 328.8 197.8 329.2 199.9 329.6 202 330 204.2"/><polyline points="330 542.1 330.4 541.5 330.8 540.9 331.2 540.2 331.6 539.5 332 538.8 332.4 538.1 332.8 537.4 333.2 536.7 333.6 535.9 334 535.1 334.3 534.3 334.7 533.5 335.1 532.7 335.4 531.9 335.8 531 336.2 530.1 336.5 529.2 336.9 528.3 337.2 527.4 337.6 526.4 337.9 525.5 338.2 524.5 338.6 523.5 338.9 522.5 339.2 521.5 339.5 520.4 339.8 519.4 340.2 518.3 340.5 517.2 340.8 516.1 341.1 515 341.4 513.8"/><polyline points="348.5 345.8 348.6 348 348.8 350.1 348.9 352.3 349.1 354.4 349.2 356.6 349.3 358.7 349.4 360.9 349.6 363 349.7 365.1 349.8 367.3 349.9 369.4 350 371.5 350.1 373.6 350.2 375.7 350.2 377.8 350.3 379.9 350.4 381.9 350.5 384 350.5 386.1 350.6 388.1 350.6 390.2 350.7 392.2 350.7 394.2 350.8 396.3 350.8 398.3 350.8 400.3 350.9 402.3 350.9 404.3 350.9 406.3 350.9 408.3 350.9 410.2 350.9 412.2"/><polyline points="348.5 469.5 348.6 467.9 348.8 466.3 348.9 464.6 349.1 463 349.2 461.3 349.3 459.6 349.4 457.9 349.6 456.2 349.7 454.5 349.8 452.8 349.9 451.1 350 449.3 350.1 447.6 350.2 445.8 350.2 444 350.3 442.2 350.4 440.4 350.5 438.6 350.5 436.8 350.6 435 350.6 433.1 350.7 431.3 350.7 429.4 350.8 427.5 350.8 425.6 350.8 423.8 350.9 421.8 350.9 419.9 350.9 418 350.9 416.1 350.9 414.1 350.9 412.2"/><polyline points="399 262.9 399.5 265.1 400.1 267.3 400.6 269.5 401.2 271.7 401.7 273.8 402.2 276 402.7 278.2 403.2 280.4 403.7 282.6 404.2 284.8 404.7 287 405.2 289.1 405.6 291.3 406.1 293.5 406.5 295.7 407 297.9 407.4 300.1 407.8 302.2 408.2 304.4 408.6 306.6 409 308.8 409.4 310.9 409.8 313.1 410.1 315.3 410.5 317.4 410.9 319.6 411.2 321.7 411.5 323.9 411.9 326.1 412.2 328.2 412.5 330.4 412.8 332.5"/><polyline points="315.2 79.05 316.3 80.51 317.4 81.98 318.5 83.46 319.6 84.96 320.6 86.47 321.7 87.99 322.8 89.52 323.9 91.07 324.9 92.63 326 94.2 327 95.79 328.1 97.39 329.2 99 330.2 100.6 331.3 102.3 332.3 103.9 333.3 105.6 334.4 107.2 335.4 108.9 336.4 110.6 337.5 112.3 338.5 114 339.5 115.7 340.5 117.5 341.5 119.2 342.5 121 343.5 122.7 344.5 124.5 345.5 126.3 346.5 128.1 347.5 129.9 348.5 131.7"/><polyline points="412.8 456.2 413.1 454.5 413.3 452.9 413.6 451.2 413.9 449.5 414.1 447.9 414.4 446.2 414.6 444.4 414.8 442.7 415 441 415.2 439.2 415.4 437.5 415.6 435.7 415.8 434 416 432.2 416.1 430.4 416.3 428.6 416.4 426.8 416.6 424.9 416.7 423.1 416.8 421.3 416.9 419.4 417 417.5 417.1 415.7 417.2 413.8 417.2 411.9 417.3 410 417.4 408.1 417.4 406.2 417.4 404.2 417.5 402.3 417.5 400.4 417.5 398.4"/><polyline points="348.5 131.7 349.5 133.6 350.4 135.4 351.4 137.3 352.4 139.1 353.3 141 354.3 142.9 355.2 144.7 356.2 146.6 357.1 148.5 358 150.4 358.9 152.4 359.9 154.3 360.8 156.2 361.7 158.2 362.6 160.1 363.5 162.1 364.4 164.1 365.3 166 366.2 168 367 170 367.9 172 368.8 174 369.6 176 370.5 178.1 371.3 180.1 372.2 182.1 373 184.2 373.8 186.2 374.6 188.3 375.5 190.3 376.3 192.4 377.1 194.5"/><polyline points="356.2 544 357.1 543.7 358 543.4 358.9 543.1 359.9 542.8 360.8 542.4 361.7 542 362.6 541.6 363.5 541.2 364.4 540.8 365.3 540.4 366.2 539.9 367 539.4 367.9 538.9 368.8 538.4 369.6 537.9 370.5 537.4 371.3 536.8 372.2 536.2 373 535.6 373.8 535 374.6 534.4 375.5 533.7 376.3 533.1 377.1 532.4"/><polyline points="399 501.9 399.5 500.7 400.1 499.4 400.6 498.2 401.2 496.9 401.7 495.7 402.2 494.4 402.7 493.1 403.2 491.8 403.7 490.4 404.2 489.1 404.7 487.7 405.2 486.4 405.6 485 406.1 483.6 406.5 482.2 407 480.8 407.4 479.3 407.8 477.9 408.2 476.4 408.6 474.9 409 473.4 409.4 471.9 409.8 470.4 410.1 468.9 410.5 467.3 410.9 465.8 411.2 464.2 411.5 462.6 411.9 461 412.2 459.4 412.5 457.8 412.8 456.2"/><polyline points="377.1 194.5 377.9 196.5 378.6 198.6 379.4 200.7 380.2 202.8 381 204.9 381.7 207 382.5 209.1 383.2 211.2 384 213.3 384.7 215.4 385.4 217.6 386.2 219.7 386.9 221.8 387.6 224 388.3 226.1 389 228.3 389.6 230.4 390.3 232.6 391 234.7 391.6 236.9 392.3 239 392.9 241.2 393.6 243.4 394.2 245.5 394.8 247.7 395.5 249.9 396.1 252 396.7 254.2 397.3 256.4 397.8 258.6 398.4 260.7 399 262.9"/><polyline points="412.8 332.5 413.1 334.6 413.3 336.8 413.6 338.9 413.9 341 414.1 343.2 414.4 345.3 414.6 347.4 414.8 349.5 415 351.6 415.2 353.7 415.4 355.8 415.6 357.9 415.8 360 416 362.1 416.1 364.1 416.3 366.2 416.4 368.3 416.6 370.3 416.7 372.4 416.8 374.4 416.9 376.4 417 378.5 417.1 380.5 417.2 382.5 417.2 384.5 417.3 386.5 417.4 388.5 417.4 390.5 417.4 392.5 417.5 394.5 417.5 396.4 417.5 398.4"/><polyline points="377.1 532.4 377.9 531.7 378.6 531 379.4 530.2 380.2 529.5 381 528.7 381.7 527.9 382.5 527.1 383.2 526.3 384 525.5 384.7 524.6 385.4 523.8 386.2 522.9 386.9 522 387.6 521.1 388.3 520.1 389 519.2 389.6 518.2 390.3 517.2 391 516.2 391.6 515.2 392.3 514.2 392.9 513.2 393.6 512.1 394.2 511 394.8 509.9 395.5 508.8 396.1 507.7 396.7 506.6 397.3 505.4 397.8 504.3 398.4 503.1 399 501.9"/><polyline points="468 435 468.4 433.3 468.8 431.6 469.1 429.9 469.5 428.2 469.9 426.5 470.2 424.7 470.5 423 470.9 421.2 471.2 419.5 471.5 417.7 471.7 415.9 472 414.1 472.3 412.3 472.5 410.5 472.7 408.7 472.9 406.8 473.1 405 473.3 403.2 473.5 401.3 473.7 399.4 473.8 397.6 474 395.7 474.1 393.8 474.2 391.9 474.3 390 474.4 388.1 474.4 386.2 474.5 384.2 474.6 382.3 474.6 380.4 474.6 378.4 474.6 376.5"/><polyline points="417.5 179 418.6 180.9 419.7 182.9 420.8 184.8 421.9 186.8 423 188.8 424.1 190.7 425.1 192.7 426.2 194.7 427.2 196.7 428.3 198.7 429.3 200.7 430.3 202.8 431.3 204.8 432.3 206.8 433.3 208.8 434.3 210.9 435.3 212.9 436.2 214.9 437.2 217 438.1 219 439 221.1 439.9 223.2 440.8 225.2 441.7 227.3 442.6 229.4 443.5 231.4 444.3 233.5 445.2 235.6 446 237.7 446.9 239.8 447.7 241.8 448.5 243.9"/><polyline points="417.5 516.9 418.6 516 419.7 515.2 420.8 514.3 421.9 513.5 423 512.6 424.1 511.7 425.1 510.8 426.2 509.8 427.2 508.9 428.3 507.9 429.3 506.9 430.3 505.9 431.3 504.9 432.3 503.9 433.3 502.8 434.3 501.8 435.3 500.7 436.2 499.6 437.2 498.5 438.1 497.4 439 496.3 439.9 495.1 440.8 494 441.7 492.8 442.6 491.6 443.5 490.4 444.3 489.2 445.2 488 446 486.7 446.9 485.4 447.7 484.2 448.5 482.9"/><polyline points="468 311.3 468.4 313.4 468.8 315.5 469.1 317.6 469.5 319.7 469.9 321.8 470.2 323.8 470.5 325.9 470.9 328 471.2 330.1 471.5 332.1 471.7 334.2 472 336.3 472.3 338.3 472.5 340.4 472.7 342.4 472.9 344.5 473.1 346.5 473.3 348.5 473.5 350.6 473.7 352.6 473.8 354.6 474 356.6 474.1 358.6 474.2 360.6 474.3 362.6 474.4 364.6 474.4 366.6 474.5 368.6 474.6 370.6 474.6 372.6 474.6 374.5 474.6 376.5"/><polyline points="330 73.38 331.5 74.66 333.1 75.96 334.6 77.27 336.1 78.59 337.7 79.93 339.2 81.28 340.7 82.65 342.2 84.02 343.7 85.42 345.2 86.82 346.7 88.24 348.2 89.66 349.7 91.11 351.2 92.56 352.7 94.03 354.2 95.51 355.6 97 357.1 98.5 358.6 100 360 101.5 361.5 103.1 362.9 104.6 364.4 106.2 365.8 107.8 367.2 109.4 368.7 111 370.1 112.6 371.5 114.2 372.9 115.8 374.3 117.5 375.7 119.1 377.1 120.8"/><polyline points="448.5 482.9 449.3 481.6 450 480.3 450.8 478.9 451.6 477.6 452.3 476.2 453.1 474.9 453.8 473.5 454.5 472.1 455.2 470.7 455.9 469.3 456.6 467.8 457.2 466.4 457.9 464.9 458.5 463.5 459.1 462 459.8 460.5 460.4 459 461 457.5 461.5 455.9 462.1 454.4 462.7 452.8 463.2 451.3 463.7 449.7 464.3 448.1 464.8 446.5 465.3 444.9 465.7 443.3 466.2 441.6 466.7 440 467.1 438.3 467.5 436.7 468 435"/><polyline points="448.5 243.9 449.3 246 450 248.1 450.8 250.2 451.6 252.3 452.3 254.4 453.1 256.5 453.8 258.6 454.5 260.7 455.2 262.8 455.9 265 456.6 267.1 457.2 269.2 457.9 271.3 458.5 273.4 459.1 275.5 459.8 277.6 460.4 279.7 461 281.8 461.5 284 462.1 286.1 462.7 288.2 463.2 290.3 463.7 292.4 464.3 294.5 464.8 296.6 465.3 298.7 465.7 300.8 466.2 302.9 466.7 305 467.1 307.1 467.5 309.2 468 311.3"/><polyline points="377.1 120.8 378.4 122.4 379.8 124.1 381.2 125.8 382.5 127.5 383.9 129.2 385.2 131 386.6 132.7 387.9 134.5 389.2 136.2 390.5 138 391.9 139.7 393.2 141.5 394.4 143.3 395.7 145.1 397 146.9 398.3 148.7 399.5 150.6 400.8 152.4 402 154.3 403.3 156.1 404.5 158 405.7 159.8 406.9 161.7 408.1 163.6 409.3 165.5 410.5 167.4 411.7 169.3 412.9 171.2 414 173.1 415.2 175.1 416.3 177 417.5 179"/><polyline points="403.3 525.5 404.5 524.9 405.7 524.2 406.9 523.6 408.1 522.9 409.3 522.2 410.5 521.5 411.7 520.8 412.9 520 414 519.3 415.2 518.5 416.3 517.7 417.5 516.9"/><polyline points="486.4 458.1 487.4 456.7 488.4 455.3 489.3 453.9 490.2 452.4 491.2 450.9 492.1 449.5 492.9 448 493.8 446.5 494.7 445 495.5 443.5 496.3 441.9 497.2 440.4 498 438.8 498.7 437.3 499.5 435.7 500.3 434.1 501 432.5 501.7 430.9 502.4 429.3 503.1 427.7 503.8 426 504.5 424.4 505.1 422.7 505.8 421.1 506.4 419.4 507 417.7 507.6 416 508.2 414.3 508.7 412.6 509.3 410.9 509.8 409.1 510.3 407.4"/><polyline points="460.4 487.2 461.7 486.1 463 485 464.2 483.8 465.5 482.7 466.7 481.5 467.9 480.3 469.1 479.1 470.3 477.9 471.4 476.7 472.6 475.4 473.7 474.2 474.9 472.9 476 471.6 477.1 470.3 478.2 469 479.3 467.7 480.3 466.4 481.4 465 482.4 463.7 483.4 462.3 484.5 460.9 485.5 459.6 486.4 458.1"/><polyline points="510.3 407.4 510.8 405.7 511.3 403.9 511.8 402.1 512.2 400.4 512.7 398.6 513.1 396.8 513.5 395 513.9 393.2 514.2 391.4 514.6 389.6 514.9 387.7 515.3 385.9 515.6 384.1 515.9 382.2 516.2 380.4 516.4 378.5 516.7 376.6 516.9 374.8 517.1 372.9 517.3 371 517.5 369.1 517.7 367.2 517.8 365.3 517.9 363.4 518.1 361.5 518.2 359.6 518.3 357.6 518.3 355.7 518.4 353.8 518.4 351.8 518.4 349.9 518.5 347.9"/><polyline points="399 106.5 400.7 108 402.4 109.4 404 110.9 405.7 112.4 407.3 114 409 115.5 410.6 117 412.3 118.6 413.9 120.1 415.5 121.7 417.1 123.3 418.7 124.9 420.3 126.5 421.9 128.1 423.4 129.7 425 131.4 426.5 133 428.1 134.6 429.6 136.3 431.1 138 432.6 139.7 434.1 141.4 435.6 143.1 437.1 144.8 438.5 146.5 440 148.2 441.4 149.9 442.9 151.7 444.3 153.4 445.7 155.2 447.1 157 448.5 158.7"/><polyline points="486.4 219.2 487.4 221.2 488.4 223.2 489.3 225.1 490.2 227.1 491.2 229.1 492.1 231.1 492.9 233.1 493.8 235.1 494.7 237.1 495.5 239.1 496.3 241.1 497.2 243.1 498 245.2 498.7 247.2 499.5 249.2 500.3 251.2 501 253.2 501.7 255.3 502.4 257.3 503.1 259.3 503.8 261.4 504.5 263.4 505.1 265.4 505.8 267.4 506.4 269.5 507 271.5 507.6 273.5 508.2 275.6 508.7 277.6 509.3 279.6 509.8 281.7 510.3 283.7"/><polyline points="510.3 283.7 510.8 285.8 511.3 287.8 511.8 289.8 512.2 291.8 512.7 293.9 513.1 295.9 513.5 297.9 513.9 300 514.2 302 514.6 304 514.9 306 515.3 308.1 515.6 310.1 515.9 312.1 516.2 314.1 516.4 316.1 516.7 318.1 516.9 320.2 517.1 322.2 517.3 324.2 517.5 326.2 517.7 328.2 517.8 330.1 517.9 332.1 518.1 334.1 518.2 336.1 518.3 338.1 518.3 340.1 518.4 342 518.4 344 518.4 346 518.5 347.9"/><polyline points="448.5 158.7 449.8 160.5 451.2 162.3 452.6 164.1 453.9 165.9 455.2 167.8 456.6 169.6 457.9 171.4 459.2 173.2 460.4 175.1 461.7 176.9 463 178.8 464.2 180.7 465.5 182.5 466.7 184.4 467.9 186.3 469.1 188.2 470.3 190.1 471.4 192 472.6 193.9 473.7 195.8 474.9 197.7 476 199.7 477.1 201.6 478.2 203.5 479.3 205.5 480.3 207.4 481.4 209.4 482.4 211.3 483.5 213.3 484.5 215.3 485.5 217.2 486.4 219.2"/><polyline points="341.4 65.98 343.2 67.04 345.1 68.11 347 69.2 348.9 70.3 350.7 71.41 352.6 72.54 354.5 73.68 356.3 74.84 358.2 76.01 360 77.19 361.8 78.39 363.7 79.6 365.5 80.82 367.3 82.06 369.1 83.31 371 84.57 372.8 85.85 374.6 87.14 376.3 88.44 378.1 89.75 379.9 91.08 381.7 92.42 383.4 93.77 385.2 95.14 386.9 96.51 388.7 97.9 390.4 99.3 392.2 100.7 393.9 102.1 395.6 103.6 397.3 105 399 106.5"/><polyline points="536.9 375.3 537.5 373.5 538 371.6 538.6 369.8 539.1 368 539.5 366.1 540 364.3 540.5 362.4 540.9 360.6 541.3 358.7 541.7 356.8 542.1 355 542.5 353.1 542.8 351.2 543.1 349.3 543.4 347.4 543.7 345.5 544 343.6 544.3 341.7 544.5 339.8 544.7 337.9 544.9 336 545.1 334 545.3 332.1 545.4 330.2 545.6 328.3 545.7 326.3 545.8 324.4 545.9 322.4 545.9 320.5 546 318.5 546 316.6 546 314.6"/><polyline points="536.9 251.6 537.5 253.5 538 255.5 538.6 257.5 539.1 259.4 539.5 261.4 540 263.4 540.5 265.4 540.9 267.3 541.3 269.3 541.7 271.3 542.1 273.3 542.5 275.2 542.8 277.2 543.1 279.2 543.4 281.2 543.7 283.1 544 285.1 544.3 287.1 544.5 289.1 544.7 291 544.9 293 545.1 295 545.3 297 545.4 298.9 545.6 300.9 545.7 302.9 545.8 304.8 545.9 306.8 545.9 308.8 546 310.7 546 312.7 546 314.6"/><polyline points="348.5 57.37 350.6 58.17 352.7 58.98 354.8 59.8 356.9 60.64 359 61.5 361 62.36 363.1 63.25 365.2 64.15 367.2 65.06 369.3 65.98 371.3 66.92 373.4 67.88 375.4 68.85 377.5 69.83 379.5 70.83 381.5 71.84 383.5 72.86 385.5 73.9 387.5 74.96 389.5 76.02 391.5 77.1 393.5 78.2 395.4 79.3 397.4 80.42 399.3 81.56 401.3 82.7 403.2 83.86 405.1 85.03 407.1 86.22 409 87.42 410.9 88.63 412.8 89.85"/><polyline points="523.2 408.4 524 406.7 524.9 405.1 525.7 403.4 526.6 401.7 527.4 400 528.2 398.2 528.9 396.5 529.7 394.8 530.4 393.1 531.2 391.3 531.9 389.6 532.6 387.8 533.2 386 533.9 384.2 534.5 382.5 535.2 380.7 535.8 378.9 536.4 377.1 536.9 375.3"/><polyline points="468 135.2 469.5 136.8 471 138.4 472.5 140 474 141.7 475.5 143.3 477 144.9 478.4 146.6 479.9 148.2 481.3 149.9 482.7 151.6 484.1 153.3 485.5 154.9 486.9 156.6 488.3 158.4 489.6 160.1 490.9 161.8 492.3 163.5 493.6 165.3 494.9 167 496.1 168.8 497.4 170.5 498.7 172.3 499.9 174.1 501.1 175.9 502.3 177.7 503.5 179.5 504.7 181.3 505.8 183.1 507 184.9 508.1 186.7 509.2 188.5 510.3 190.4"/><polyline points="412.8 89.85 414.6 91.09 416.5 92.34 418.4 93.6 420.2 94.88 422.1 96.16 423.9 97.46 425.8 98.77 427.6 100.1 429.4 101.4 431.2 102.8 433 104.1 434.7 105.5 436.5 106.9 438.3 108.3 440 109.7 441.8 111.1 443.5 112.5 445.2 114 446.9 115.4 448.6 116.9 450.3 118.3 451.9 119.8 453.6 121.3 455.2 122.8 456.9 124.3 458.5 125.9 460.1 127.4 461.7 128.9 463.3 130.5 464.9 132.1 466.4 133.6 468 135.2"/><polyline points="510.3 190.4 511.4 192.2 512.5 194.1 513.5 195.9 514.6 197.8 515.6 199.6 516.6 201.5 517.6 203.4 518.5 205.3 519.5 207.2 520.4 209 521.4 210.9 522.3 212.8 523.2 214.7 524 216.7 524.9 218.6 525.7 220.5 526.6 222.4 527.4 224.3 528.2 226.3 528.9 228.2 529.7 230.1 530.4 232.1 531.2 234 531.9 235.9 532.6 237.9 533.2 239.8 533.9 241.8 534.5 243.7 535.2 245.7 535.8 247.7 536.4 249.6 536.9 251.6"/><polyline points="474.6 110 476.2 111.4 477.8 112.8 479.3 114.2 480.9 115.6 482.4 117 483.9 118.5 485.5 119.9 487 121.4 488.4 122.9 489.9 124.3 491.4 125.8 492.8 127.3 494.2 128.9 495.6 130.4 497 131.9 498.4 133.5 499.8 135 501.1 136.6 502.5 138.2 503.8 139.8 505.1 141.3 506.4 143 507.7 144.6 508.9 146.2 510.2 147.8 511.4 149.5 512.6 151.1 513.8 152.8 515 154.4 516.2 156.1 517.3 157.8 518.5 159.5"/><polyline points="350.9 48.13 353.1 48.64 355.3 49.17 357.4 49.72 359.6 50.28 361.8 50.85 363.9 51.44 366.1 52.05 368.2 52.67 370.3 53.3 372.5 53.96 374.6 54.62 376.7 55.3 378.8 56 380.9 56.71 383 57.44 385.1 58.18 387.2 58.93 389.3 59.7 391.3 60.49 393.4 61.29 395.4 62.1 397.5 62.93 399.5 63.77 401.5 64.63 403.6 65.5 405.6 66.39 407.6 67.29 409.6 68.2 411.6 69.13 413.5 70.07 415.5 71.03 417.5 72"/><polyline points="417.5 72 419.4 72.98 421.4 73.98 423.3 75 425.2 76.02 427.1 77.06 429 78.11 430.9 79.18 432.8 80.26 434.7 81.35 436.5 82.46 438.4 83.58 440.2 84.71 442.1 85.85 443.9 87.01 445.7 88.18 447.5 89.36 449.3 90.56 451 91.77 452.8 92.99 454.5 94.23 456.3 95.47 458 96.73 459.7 98 461.4 99.28 463.1 100.6 464.8 101.9 466.5 103.2 468.1 104.5 469.8 105.9 471.4 107.2 473 108.6 474.6 110"/><polyline points="546 217.1 546.6 219 547.2 220.9 547.7 222.8 548.2 224.7 548.7 226.6 549.2 228.5 549.7 230.4 550.1 232.3 550.6 234.2 551 236.2 551.4 238.1 551.7 240 552.1 241.9 552.4 243.9 552.8 245.8 553.1 247.7 553.3 249.7 553.6 251.6 553.9 253.6 554.1 255.5 554.3 257.5 554.5 259.4 554.7 261.4 554.8 263.3 555 265.3 555.1 267.2 555.2 269.2 555.3 271.1 555.3 273.1 555.4 275 555.4 277 555.4 278.9"/><polyline points="518.5 159.5 519.6 161.2 520.7 162.9 521.8 164.6 522.8 166.3 523.9 168 524.9 169.8 526 171.5 527 173.3 528 175 528.9 176.8 529.9 178.5 530.8 180.3 531.8 182.1 532.7 183.9 533.5 185.7 534.4 187.5 535.3 189.3 536.1 191.1 536.9 192.9 537.7 194.8 538.5 196.6 539.3 198.4 540 200.3 540.8 202.1 541.5 204 542.2 205.8 542.9 207.7 543.5 209.6 544.2 211.4 544.8 213.3 545.4 215.2 546 217.1"/><polyline points="412.8 54.15 414.6 54.88 416.5 55.63 418.4 56.39 420.2 57.17 422.1 57.96 423.9 58.76 425.8 59.58 427.6 60.42 429.4 61.27 431.2 62.14 433 63.02 434.7 63.91 436.5 64.82 438.3 65.74 440 66.68 441.8 67.63 443.5 68.6 445.2 69.57 446.9 70.57 448.6 71.58 450.3 72.6 451.9 73.63 453.6 74.68 455.2 75.74 456.9 76.82 458.5 77.91 460.1 79.01 461.7 80.13 463.3 81.26 464.9 82.4 466.4 83.56 468 84.73"/><polyline points="348.5 38.89 350.6 39.12 352.7 39.37 354.8 39.63 356.9 39.91 359 40.21 361 40.52 363.1 40.85 365.2 41.19 367.2 41.55 369.3 41.93 371.3 42.32 373.4 42.73 375.4 43.15 377.5 43.59 379.5 44.04 381.5 44.51 383.5 45 385.5 45.5 387.5 46.02 389.5 46.55 391.5 47.1 393.5 47.66 395.4 48.24 397.4 48.84 399.3 49.45 401.3 50.07 403.2 50.71 405.1 51.37 407.1 52.04 409 52.73 410.9 53.43 412.8 54.15"/><polyline points="468 84.73 469.5 85.91 471 87.1 472.5 88.31 474 89.53 475.5 90.77 477 92.01 478.4 93.27 479.9 94.54 481.3 95.82 482.7 97.12 484.1 98.43 485.5 99.75 486.9 101.1 488.3 102.4 489.6 103.8 490.9 105.1 492.3 106.5 493.6 107.9 494.9 109.3 496.1 110.7 497.4 112.2 498.7 113.6 499.9 115 501.1 116.5 502.3 118 503.5 119.4 504.7 120.9 505.8 122.4 507 123.9 508.1 125.5 509.2 127 510.3 128.5"/><polyline points="510.3 128.5 511.4 130.1 512.5 131.7 513.5 133.2 514.6 134.8 515.6 136.4 516.6 138 517.6 139.6 518.5 141.2 519.5 142.9 520.4 144.5 521.4 146.1 522.3 147.8"/><polyline points="448.5 61.2 449.9 62.19 451.2 63.2 452.6 64.22 453.9 65.25 455.2 66.3 456.6 67.36 457.9 68.44 459.2 69.53"/><polyline points="341.4 30.28 343.2 30.25 345.1 30.23 347 30.23 348.9 30.25 350.7 30.29 352.6 30.34 354.5 30.41 356.3 30.5 358.2 30.6 360 30.72 361.8 30.85 363.7 31.01 365.5 31.17 367.3 31.36 369.1 31.56 371 31.78 372.8 32.02 374.6 32.27 376.3 32.54 378.1 32.82 379.9 33.12 381.7 33.44 383.4 33.77 385.2 34.12 386.9 34.49 388.7 34.87 390.4 35.27 392.2 35.69 393.9 36.12 395.6 36.57 397.3 37.03 399 37.51"/><polyline points="399 37.51 400.7 38.01 402.4 38.52 404 39.05 405.7 39.6 407.3 40.16 409 40.73 410.6 41.33 412.3 41.94 413.9 42.56 415.5 43.2 417.1 43.86 418.7 44.53 420.3 45.22 421.9 45.92 423.4 46.64 425 47.38 426.5 48.12 428.1 48.89 429.6 49.67 431.1 50.47 432.6 51.28 434.1 52.11 435.6 52.95 437.1 53.81 438.5 54.68 440 55.56 441.4 56.47 442.9 57.38 444.3 58.32 445.7 59.26 447.1 60.22 448.5 61.2"/><polyline points="377.1 23.23 378.4 23.52 379.8 23.83 381.2 24.16 382.5 24.51 383.9 24.87 385.2 25.25 386.6 25.65 387.9 26.06 389.2 26.49 390.5 26.94 391.9 27.41 393.2 27.89 394.4 28.39 395.7 28.9 397 29.43 398.3 29.98 399.5 30.55 400.8 31.13 402 31.73"/><polyline points="330 22.88 331.5 22.63 333.1 22.39 334.6 22.16 336.1 21.96 337.7 21.77 339.2 21.6 340.7 21.45 342.2 21.31 343.7 21.19 345.2 21.09 346.7 21.01 348.2 20.94 349.7 20.89 351.2 20.86 352.7 20.84 354.2 20.85 355.6 20.87 357.1 20.9 358.6 20.96 360 21.03 361.5 21.12 362.9 21.22 364.4 21.34 365.8 21.48 367.2 21.64 368.7 21.82 370.1 22.01 371.5 22.22 372.9 22.44 374.3 22.69 375.7 22.95 377.1 23.23"/><polyline points="315.2 17.21 316.3 16.78 317.4 16.37 318.5 15.97 319.6 15.6 320.6 15.24 321.7 14.9 322.8 14.57 323.9 14.26 324.9 13.98 326 13.71 327 13.45 328.1 13.22 329.2 13 330.2 12.8 331.3 12.62 332.3 12.46 333.3 12.31 334.4 12.18 335.4 12.07 336.4 11.98 337.5 11.9 338.5 11.85 339.5 11.81 340.5 11.79 341.5 11.78 342.5 11.8 343.5 11.83 344.5 11.88 345.5 11.95 346.5 12.04 347.5 12.14 348.5 12.26"/><polyline points="348.5 12.26 349.5 12.4 350.4 12.56 351.4 12.74 352.4 12.93 353.3 13.14 354.3 13.37 355.2 13.62"/><polyline points="298 13.64 298.6 13.1 299.1 12.58 299.7 12.08 300.2 11.6 300.8 11.13 301.4 10.68 301.9 10.25 302.5 9.835 303 9.44 303.6 9.063 304.1 8.705 304.7 8.364 305.2 8.041 305.8 7.736 306.3 7.45 306.8 7.182 307.4 6.932 307.9 6.7 308.5 6.486 309 6.292 309.5 6.114 310 5.955 310.6 5.814 311.1 5.692 311.6 5.589 312.1 5.503 312.7 5.436 313.2 5.387 313.7 5.356 314.2 5.343 314.7 5.349 315.2 5.374"/><line x1="315.2" x2="315.7" y1="5.374" y2="5.416"/><polyline points="279.5 12.42 279.5 11.85 279.5 11.29 279.5 10.75 279.5 10.23 279.5 9.726 279.5 9.241 279.5 8.773 279.5 8.324 279.5 7.892 279.5 7.479 279.5 7.084 279.5 6.708 279.5 6.349 279.5 6.008 279.5 5.686 279.5 5.383 279.5 5.097 279.5 4.83 279.5 4.581 279.5 4.351 279.5 4.139 279.5 3.945 279.5 3.77 279.5 3.613 279.5 3.475 279.5 3.354 279.5 3.253 279.5 3.17 279.5 3.105 279.5 3.059 279.5 3.032"/><line x1="243.8" x2="243.3" y1="5.372" y2="5.414"/><polyline points="261 13.64 260.5 13.1 259.9 12.58 259.3 12.08 258.8 11.59 258.2 11.13 257.7 10.68 257.1 10.25 256.6 9.834 256 9.439 255.5 9.062 254.9 8.704 254.4 8.362 253.8 8.04 253.3 7.735 252.7 7.449 252.2 7.181 251.6 6.931 251.1 6.699 250.6 6.486 250 6.29 249.5 6.113 249 5.954 248.5 5.813 247.9 5.691 247.4 5.587 246.9 5.501 246.4 5.434 245.9 5.385 245.3 5.354 244.8 5.342 244.3 5.348 243.8 5.372"/><polyline points="243.8 17.21 242.7 16.78 241.6 16.36 240.5 15.97 239.5 15.59 238.4 15.24 237.3 14.89 236.2 14.57 235.2 14.26 234.1 13.98 233 13.7 232 13.45 230.9 13.22 229.9 13 228.8 12.8 227.8 12.62 226.7 12.46 225.7 12.31 224.6 12.18 223.6 12.07 222.6 11.98 221.6 11.9 220.5 11.85 219.5 11.81 218.5 11.79 217.5 11.78 216.5 11.8 215.5 11.83 214.5 11.88 213.5 11.95 212.5 12.04 211.5 12.14 210.5 12.26"/><polyline points="203.8 13.62 204.8 13.37 205.7 13.14 206.7 12.93 207.6 12.74 208.6 12.56 209.6 12.4 210.5 12.26"/><polyline points="182 23.23 183.3 22.95 184.7 22.69 186.1 22.44 187.5 22.22 189 22.01 190.4 21.82 191.8 21.64 193.2 21.48 194.7 21.34 196.1 21.22 197.5 21.12 199 21.03 200.4 20.96 201.9 20.9 203.4 20.86 204.8 20.85 206.3 20.84 207.8 20.86 209.3 20.89 210.8 20.94 212.3 21.01 213.8 21.09 215.3 21.19 216.8 21.31 218.3 21.45 219.8 21.6 221.4 21.77 222.9 21.96 224.4 22.16 225.9 22.39 227.5 22.62 229 22.88"/><polyline points="157 31.73 158.2 31.13 159.5 30.55 160.7 29.98 162 29.43 163.3 28.9 164.6 28.39 165.9 27.89 167.2 27.4 168.5 26.94 169.8 26.49 171.1 26.06 172.4 25.65 173.8 25.25 175.1 24.87 176.5 24.51 177.8 24.16 179.2 23.83 180.6 23.52 182 23.23"/><polyline points="120.9 504.7 121.9 505.4 122.8 506 123.8 506.6 124.7 507.3 125.7 507.9 126.7 508.5 127.7 509.2 128.7 509.8 129.7 510.4 130.7 511 131.8 511.6 132.8 512.2 133.9 512.8 135 513.4 136 514 137.1 514.6 138.2 515.2 139.3 515.7 140.4 516.3 141.6 516.9"/><polyline points="141.6 516.9 142.7 517.4 143.8 518 145 518.5 146.1 519.1 147.3 519.6 148.5 520.2 149.7 520.7 150.9 521.2 152.1 521.8 153.3 522.3 154.5 522.8 155.7 523.3 157 523.8 158.2 524.3 159.5 524.8 160.7 525.3 162 525.8 163.3 526.2 164.6 526.7 165.9 527.2 167.2 527.6 168.5 528.1 169.8 528.6 171.1 529 172.5 529.4 173.8 529.9 175.1 530.3 176.5 530.7 177.8 531.2 179.2 531.6 180.6 532 182 532.4"/><polyline points="229 542.1 230.6 542.3 232.1 542.5 233.7 542.7 235.2 542.9 236.8 543.1 238.3 543.2 239.9 543.4 241.5 543.6 243 543.7 244.6 543.9 246.2 544 247.7 544.1 249.3 544.3 250.9 544.4 252.5 544.5 254 544.6 255.6 544.7 257.2 544.8 258.8 544.9 260.4 545 262 545 263.6 545.1 265.2 545.2 266.8 545.2 268.3 545.3 269.9 545.3 271.5 545.4 273.1 545.4 274.7 545.4 276.3 545.4 277.9 545.4 279.5 545.4"/><polyline points="417.5 516.9 418.6 516.3 419.7 515.7 420.8 515.2 421.9 514.6 423 514 424.1 513.4 425.1 512.8 426.2 512.2 427.2 511.6 428.3 511 429.3 510.4 430.3 509.8 431.3 509.2 432.3 508.5 433.3 507.9 434.3 507.3 435.3 506.6 436.2 506 437.2 505.4 438.1 504.7"/><polyline points="377.1 532.4 378.4 532 379.8 531.6 381.2 531.2 382.5 530.7 383.9 530.3 385.2 529.9 386.6 529.4 387.9 529 389.2 528.6 390.5 528.1 391.9 527.6 393.2 527.2 394.4 526.7 395.7 526.2 397 525.8 398.3 525.3 399.5 524.8 400.8 524.3 402 523.8 403.3 523.3 404.5 522.8 405.7 522.3 406.9 521.8 408.1 521.2 409.3 520.7 410.5 520.2 411.7 519.6 412.9 519.1 414 518.5 415.2 518 416.3 517.4 417.5 516.9"/><polyline points="279.5 545.4 281.1 545.4 282.7 545.4 284.3 545.4 285.9 545.4 287.5 545.4 289.1 545.3 290.7 545.3 292.3 545.2 293.9 545.2 295.5 545.1 297 545 298.6 545 300.2 544.9 301.8 544.8 303.4 544.7 305 544.6 306.6 544.5 308.1 544.4 309.7 544.3 311.3 544.1 312.9 544 314.4 543.9 316 543.7 317.6 543.6 319.1 543.4 320.7 543.2 322.3 543.1 323.8 542.9 325.4 542.7 326.9 542.5 328.5 542.3 330 542.1"/><polyline points="330 542.1 331.5 541.9 333.1 541.7 334.6 541.5 336.1 541.2 337.7 541 339.2 540.8 340.7 540.5 342.2 540.3 343.7 540 345.2 539.7 346.7 539.5 348.2 539.2 349.7 538.9 351.2 538.6 352.7 538.3 354.2 538 355.6 537.7 357.1 537.4 358.6 537.1 360 536.7 361.5 536.4 362.9 536.1 364.4 535.7 365.8 535.4 367.2 535 368.7 534.7 370.1 534.3 371.5 533.9 372.9 533.5 374.3 533.2 375.7 532.8 377.1 532.4"/><polyline points="182 532.4 183.4 532.8 184.7 533.2 186.1 533.5 187.5 533.9 189 534.3 190.4 534.7 191.8 535 193.2 535.4 194.7 535.7 196.1 536.1 197.5 536.4 199 536.8 200.5 537.1 201.9 537.4 203.4 537.7 204.9 538 206.3 538.3 207.8 538.6 209.3 538.9 210.8 539.2 212.3 539.5 213.8 539.7 215.3 540 216.8 540.3 218.3 540.5 219.8 540.8 221.4 541 222.9 541.2 224.4 541.5 225.9 541.7 227.5 541.9 229 542.1"/><polyline points="72.58 458.1 73.57 459 74.56 459.8 75.58 460.7 76.6 461.5 77.64 462.3 78.69 463.2 79.76 464 80.84 464.8 81.93 465.6 83.04 466.4 84.16 467.2 85.29 468 86.44 468.8 87.59 469.6 88.76 470.4 89.95 471.1 91.14 471.9 92.35 472.7 93.57 473.4 94.81 474.2 96.05 475 97.31 475.7 98.58 476.4 99.87 477.2 101.2 477.9 102.5 478.6 103.8 479.4 105.1 480.1 106.5 480.8 107.8 481.5 109.2 482.2 110.6 482.9"/><polyline points="54.54 438.7 55.2 439.6 55.88 440.5 56.58 441.4 57.29 442.3 58.02 443.2 58.76 444.1 59.51 445 60.28 445.9 61.07 446.8 61.87 447.7 62.68 448.6 63.51 449.5 64.35 450.4 65.21 451.3 66.08 452.1 66.97 453 67.87 453.9 68.78 454.7 69.71 455.6 70.66 456.4 71.61 457.3 72.58 458.1"/><polyline points="399 501.9 400.7 501.4 402.4 500.9 404 500.4 405.7 499.9 407.3 499.3 409 498.8 410.6 498.3 412.3 497.7 413.9 497.2 415.5 496.6 417.1 496.1 418.7 495.5 420.3 494.9 421.9 494.4 423.4 493.8 425 493.2 426.5 492.6 428.1 492 429.6 491.4 431.1 490.8 432.6 490.1 434.1 489.5 435.6 488.9 437.1 488.2 438.5 487.6 440 486.9 441.4 486.3 442.9 485.6 444.3 484.9 445.7 484.3 447.1 483.6 448.5 482.9"/><polyline points="341.4 513.8 343.2 513.6 345.1 513.3 347 513 348.9 512.7 350.7 512.4 352.6 512.2 354.5 511.8 356.3 511.5 358.2 511.2 360 510.9 361.8 510.6 363.7 510.2 365.5 509.9 367.3 509.5 369.1 509.2 371 508.8 372.8 508.4 374.6 508 376.3 507.6 378.1 507.2 379.9 506.8 381.7 506.4 383.4 506 385.2 505.6 386.9 505.1 388.7 504.7 390.4 504.2 392.2 503.8 393.9 503.3 395.6 502.8 397.3 502.4 399 501.9"/><polyline points="279.5 517.9 281.5 517.9 283.4 517.9 285.4 517.8 287.3 517.8 289.3 517.8 291.2 517.7 293.2 517.7 295.1 517.6 297.1 517.6 299 517.5 301 517.4 302.9 517.3 304.9 517.2 306.8 517.1 308.8 517 310.7 516.9 312.6 516.7 314.6 516.6 316.5 516.4 318.4 516.3 320.4 516.1 322.3 515.9 324.2 515.8 326.1 515.6 328 515.4 330 515.2 331.9 515 333.8 514.8 335.7 514.5 337.6 514.3 339.5 514.1 341.4 513.8"/><polyline points="217.7 513.8 219.6 514.1 221.5 514.3 223.4 514.5 225.3 514.8 227.2 515 229.1 515.2 231 515.4 232.9 515.6 234.8 515.8 236.7 516 238.7 516.1 240.6 516.3 242.5 516.4 244.5 516.6 246.4 516.7 248.3 516.9 250.3 517 252.2 517.1 254.2 517.2 256.1 517.3 258 517.4 260 517.5 261.9 517.6 263.9 517.6 265.8 517.7 267.8 517.7 269.7 517.8 271.7 517.8 273.7 517.8 275.6 517.9 277.6 517.9 279.5 517.9"/><polyline points="110.6 482.9 111.9 483.6 113.3 484.3 114.8 484.9 116.2 485.6 117.6 486.3 119 486.9 120.5 487.6 122 488.2 123.4 488.9 124.9 489.5 126.4 490.1 127.9 490.8 129.4 491.4 131 492 132.5 492.6 134.1 493.2 135.6 493.8 137.2 494.4 138.8 494.9 140.3 495.5 141.9 496.1 143.5 496.6 145.1 497.2 146.8 497.7 148.4 498.3 150 498.8 151.7 499.3 153.3 499.9 155 500.4 156.7 500.9 158.4 501.4 160 501.9"/><polyline points="160 501.9 161.7 502.4 163.4 502.8 165.2 503.3 166.9 503.8 168.6 504.2 170.3 504.7 172.1 505.1 173.8 505.6 175.6 506 177.4 506.4 179.1 506.8 180.9 507.2 182.7 507.6 184.5 508 186.3 508.4 188.1 508.8 189.9 509.2 191.7 509.5 193.5 509.9 195.3 510.2 197.2 510.6 199 510.9 200.9 511.2 202.7 511.5 204.6 511.9 206.4 512.2 208.3 512.4 210.2 512.7 212 513 213.9 513.3 215.8 513.6 217.7 513.8"/><polyline points="486.4 458.1 487.4 457.3 488.4 456.4 489.3 455.6 490.2 454.7 491.2 453.9 492.1 453 492.9 452.1 493.8 451.2 494.7 450.4 495.5 449.5 496.3 448.6 497.2 447.7 498 446.8 498.7 445.9 499.5 445 500.3 444.1 501 443.2 501.7 442.3 502.4 441.4 503.1 440.5 503.8 439.6 504.5 438.7"/><polyline points="448.5 482.9 449.8 482.2 451.2 481.5 452.6 480.8 453.9 480.1 455.2 479.4 456.6 478.6 457.9 477.9 459.2 477.2 460.4 476.4 461.7 475.7 463 475 464.2 474.2 465.5 473.4 466.7 472.7 467.9 471.9 469.1 471.1 470.3 470.4 471.4 469.6 472.6 468.8 473.7 468 474.9 467.2 476 466.4 477.1 465.6 478.2 464.8 479.3 464 480.3 463.1 481.4 462.3 482.4 461.5 483.4 460.7 484.5 459.8 485.5 459 486.4 458.1"/><polyline points="91.07 435 92.61 435.8 94.18 436.5 95.75 437.3 97.33 438 98.93 438.8 100.5 439.5 102.2 440.2 103.8 441 105.4 441.7 107.1 442.4 108.8 443.1 110.4 443.8 112.1 444.5 113.8 445.2 115.6 445.8 117.3 446.5 119 447.2 120.8 447.8 122.5 448.5 124.3 449.1 126.1 449.7 127.8 450.4 129.6 451 131.5 451.6 133.3 452.2 135.1 452.8 136.9 453.4 138.8 453.9 140.6 454.5 142.5 455.1 144.4 455.6 146.3 456.2"/><polyline points="146.3 456.2 148.2 456.7 150.1 457.3 152 457.8 153.9 458.3 155.8 458.8 157.7 459.3 159.7 459.8 161.6 460.3 163.6 460.8 165.6 461.2 167.5 461.7 169.5 462.2 171.5 462.6 173.5 463 175.5 463.5 177.5 463.9 179.5 464.3 181.6 464.7 183.6 465.1 185.6 465.5 187.7 465.9 189.7 466.2 191.8 466.6 193.9 467 195.9 467.3 198 467.6 200.1 468 202.2 468.3 204.2 468.6 206.3 468.9 208.4 469.2 210.5 469.5"/><polyline points="536.9 375.3 537.5 374.2 538 373.2 538.6 372.1 539.1 371 539.5 370 540 368.9 540.5 367.8 540.9 366.8 541.3 365.7 541.7 364.6 542.1 363.6 542.5 362.5 542.8 361.4"/><polyline points="48.71 407.4 49.81 408.4 50.92 409.3 52.05 410.2 53.2 411.1 54.35 412.1 55.53 413 56.72 413.9 57.92 414.8 59.14 415.7 60.37 416.6 61.62 417.5 62.88 418.4 64.16 419.3 65.45 420.2 66.76 421 68.08 421.9 69.41 422.8 70.76 423.6 72.12 424.5 73.5 425.3 74.89 426.2 76.3 427 77.71 427.8 79.14 428.6 80.59 429.5 82.05 430.3 83.52 431.1 85 431.9 86.5 432.7 88.01 433.5 89.53 434.2 91.07 435"/><polyline points="468 435 469.5 434.2 471 433.4 472.5 432.7 474 431.9 475.5 431.1 477 430.3 478.4 429.5 479.9 428.6 481.3 427.8 482.7 427 484.1 426.2 485.5 425.3 486.9 424.5 488.3 423.6 489.6 422.8 490.9 421.9 492.3 421 493.6 420.2 494.9 419.3 496.1 418.4 497.4 417.5 498.7 416.6 499.9 415.7 501.1 414.8 502.3 413.9 503.5 413 504.7 412.1 505.8 411.1 507 410.2 508.1 409.3 509.2 408.3 510.3 407.4"/><polyline points="210.5 469.5 212.6 469.8 214.8 470 216.9 470.3 219 470.6 221.1 470.8 223.3 471 225.4 471.3 227.5 471.5 229.7 471.7 231.8 471.9 234 472.1 236.1 472.3 238.3 472.4 240.4 472.6 242.6 472.7 244.7 472.9 246.9 473 249.1 473.2 251.2 473.3 253.4 473.4 255.6 473.5 257.7 473.6 259.9 473.7 262.1 473.7 264.3 473.8 266.4 473.9 268.6 473.9 270.8 474 273 474 275.2 474 277.3 474 279.5 474"/><polyline points="510.3 407.4 511.4 406.5 512.5 405.5 513.5 404.6 514.6 403.6 515.6 402.6 516.6 401.7 517.6 400.7 518.5 399.7 519.5 398.7 520.4 397.8 521.4 396.8 522.3 395.8 523.2 394.8 524 393.8 524.9 392.8 525.7 391.8 526.6 390.8 527.4 389.8 528.2 388.7 528.9 387.7 529.7 386.7 530.4 385.7 531.2 384.6 531.9 383.6 532.6 382.6 533.2 381.5 533.9 380.5 534.5 379.5 535.2 378.4 535.8 377.4 536.4 376.3 536.9 375.3"/><polyline points="412.8 456.2 414.6 455.6 416.5 455.1 418.4 454.5 420.2 453.9 422.1 453.4 423.9 452.8 425.8 452.2 427.6 451.6 429.4 451 431.2 450.3 433 449.7 434.7 449.1 436.5 448.5 438.3 447.8 440 447.2 441.8 446.5 443.5 445.8 445.2 445.2 446.9 444.5 448.6 443.8 450.3 443.1 451.9 442.4 453.6 441.7 455.2 441 456.9 440.2 458.5 439.5 460.1 438.8 461.7 438 463.3 437.3 464.9 436.5 466.4 435.8 468 435"/><polyline points="348.5 469.5 350.6 469.2 352.7 468.9 354.8 468.6 356.9 468.3 359 468 361 467.6 363.1 467.3 365.2 467 367.2 466.6 369.3 466.2 371.3 465.9 373.4 465.5 375.4 465.1 377.5 464.7 379.5 464.3 381.5 463.9 383.5 463.5 385.5 463 387.5 462.6 389.5 462.2 391.5 461.7 393.5 461.2 395.4 460.8 397.4 460.3 399.3 459.8 401.3 459.3 403.2 458.8 405.1 458.3 407.1 457.8 409 457.3 410.9 456.7 412.8 456.2"/><polyline points="22.08 375.3 22.66 376.3 23.25 377.4 23.86 378.4 24.48 379.5 25.12 380.5 25.78 381.5 26.46 382.6 27.15 383.6 27.86 384.6 28.58 385.7 29.33 386.7 30.09 387.7 30.86 388.7 31.66 389.8 32.47 390.8 33.29 391.8 34.14 392.8 34.99 393.8 35.87 394.8 36.76 395.8 37.67 396.8 38.59 397.8 39.53 398.7 40.49 399.7 41.46 400.7 42.45 401.7 43.46 402.6 44.48 403.6 45.51 404.6 46.56 405.5 47.63 406.5 48.71 407.4"/><polyline points="279.5 474 281.7 474 283.9 474 286.1 474 288.2 474 290.4 473.9 292.6 473.9 294.8 473.8 296.9 473.7 299.1 473.7 301.3 473.6 303.5 473.5 305.6 473.4 307.8 473.3 310 473.2 312.1 473 314.3 472.9 316.5 472.7 318.6 472.6 320.8 472.4 322.9 472.3 325.1 472.1 327.2 471.9 329.4 471.7 331.5 471.5 333.6 471.3 335.8 471 337.9 470.8 340 470.6 342.2 470.3 344.3 470 346.4 469.8 348.5 469.5"/><polyline points="16.22 361.4 16.56 362.5 16.93 363.6 17.31 364.6 17.71 365.7 18.12 366.8 18.56 367.8 19.01 368.9 19.48 370 19.96 371 20.47 372.1 20.99 373.2 21.53 374.2 22.08 375.3"/></g><g stroke-width="2.625"><polyline points="208.1 412.2 205.9 411.9 203.8 411.6 201.6 411.3 199.4 411 197.3 410.6 195.1 410.3 193 409.9 190.8 409.6 188.7 409.2 186.6 408.8 184.4 408.4 182.3 408 180.2 407.6 178.1 407.2 176 406.8 173.9 406.4 171.8 406 169.8 405.5 167.7 405.1 165.6 404.6 163.6 404.1 161.6 403.6 159.5 403.2 157.5 402.7 155.5 402.2 153.5 401.6 151.4 401.1 149.5 400.6 147.5 400.1 145.5 399.5 143.5 399 141.6 398.4"/><polyline points="474.6 376.5 473 377.3 471.4 378.1 469.8 378.8 468.1 379.6 466.5 380.4 464.8 381.2 463.1 381.9 461.4 382.7 459.7 383.4 458 384.1 456.3 384.9 454.5 385.6 452.8 386.3 451 387 449.3 387.7 447.5 388.4 445.7 389.1 443.9 389.7 442.1 390.4 440.2 391.1 438.4 391.7 436.5 392.4 434.7 393 432.8 393.6 430.9 394.3 429 394.9 427.1 395.5 425.2 396.1 423.3 396.7 421.4 397.3 419.4 397.8 417.5 398.4"/><polyline points="350.9 412.2 348.7 412.5 346.6 412.8 344.4 413 342.2 413.3 340 413.5 337.8 413.8 335.6 414 333.3 414.2 331.1 414.5 328.9 414.7 326.7 414.9 324.5 415 322.2 415.2 320 415.4 317.8 415.6 315.5 415.7 313.3 415.9 311 416 308.8 416.1 306.6 416.2 304.3 416.3 302.1 416.4 299.8 416.5 297.6 416.6 295.3 416.7 293.1 416.7 290.8 416.8 288.5 416.8 286.3 416.8 284 416.9 281.8 416.9 279.5 416.9"/><polyline points="417.5 398.4 415.5 399 413.5 399.5 411.6 400.1 409.6 400.6 407.6 401.1 405.6 401.6 403.6 402.2 401.5 402.7 399.5 403.2 397.5 403.6 395.4 404.1 393.4 404.6 391.3 405.1 389.3 405.5 387.2 406 385.1 406.4 383 406.8 380.9 407.2 378.8 407.6 376.7 408 374.6 408.4 372.5 408.8 370.3 409.2 368.2 409.6 366.1 409.9 363.9 410.3 361.8 410.6 359.6 410.9 357.4 411.3 355.3 411.6 353.1 411.9 350.9 412.2"/><polyline points="279.5 416.9 277.3 416.9 275 416.9 272.7 416.8 270.5 416.8 268.2 416.8 266 416.7 263.7 416.7 261.5 416.6 259.2 416.5 257 416.4 254.7 416.3 252.5 416.2 250.2 416.1 248 416 245.7 415.9 243.5 415.7 241.3 415.6 239 415.4 236.8 415.2 234.6 415 232.3 414.9 230.1 414.7 227.9 414.5 225.7 414.2 223.5 414 221.3 413.8 219.1 413.5 216.9 413.3 214.7 413 212.5 412.8 210.3 412.5 208.1 412.2"/><polyline points="555.4 278.9 555.4 280.1 555.4 281.2 555.3 282.3 555.3 283.4 555.2 284.6 555.1 285.7 555 286.8 554.8 288 554.7 289.1 554.5 290.2 554.3 291.3 554.1 292.5 553.9 293.6 553.6 294.7 553.3 295.8 553.1 296.9 552.8 298.1 552.4 299.2 552.1 300.3 551.7 301.4 551.4 302.5 551 303.6 550.6 304.7 550.1 305.8 549.7 307 549.2 308.1 548.7 309.2 548.2 310.3 547.7 311.4 547.2 312.5 546.6 313.5 546 314.6"/><polyline points="518.5 347.9 517.3 348.9 516.2 349.9 515 350.8 513.8 351.8 512.6 352.7 511.4 353.7 510.2 354.6 508.9 355.6 507.7 356.5 506.4 357.4 505.1 358.4 503.8 359.3 502.5 360.2 501.1 361.1 499.8 362 498.4 362.9 497 363.8 495.6 364.7 494.2 365.6 492.8 366.5 491.4 367.3 489.9 368.2 488.4 369 487 369.9 485.5 370.7 483.9 371.6 482.4 372.4 480.9 373.2 479.3 374.1 477.8 374.9 476.2 375.7 474.6 376.5"/><polyline points="546 314.6 545.4 315.7 544.8 316.8 544.2 317.9 543.5 319 542.9 320.1 542.2 321.1 541.5 322.2 540.8 323.3 540 324.3 539.3 325.4 538.5 326.5 537.7 327.5 536.9 328.6 536.1 329.6 535.3 330.7 534.4 331.7 533.5 332.8 532.7 333.8 531.8 334.8 530.8 335.9 529.9 336.9 528.9 337.9 528 338.9 527 340 526 341 524.9 342 523.9 343 522.8 344 521.8 345 520.7 345.9 519.6 346.9 518.5 347.9"/><polyline points="3.599 278.9 3.609 280.1 3.637 281.2 3.683 282.3 3.748 283.5 3.831 284.6 3.933 285.7 4.052 286.8 4.191 288 4.348 289.1 4.523 290.2 4.717 291.3 4.929 292.5 5.159 293.6 5.408 294.7 5.676 295.8 5.961 296.9 6.265 298.1 6.587 299.2 6.928 300.3 7.286 301.4 7.664 302.5 8.059 303.6 8.472 304.7 8.903 305.9 9.353 307 9.82 308.1 10.31 309.2 10.81 310.3 11.33 311.4 11.87 312.5 12.43 313.6 13 314.6"/><polyline points="13 314.6 13.6 315.7 14.21 316.8 14.84 317.9 15.48 319 16.15 320.1 16.83 321.1 17.53 322.2 18.25 323.3 18.98 324.4 19.73 325.4 20.5 326.5 21.29 327.5 22.09 328.6 22.91 329.6 23.75 330.7 24.61 331.7 25.48 332.8 26.37 333.8 27.27 334.8 28.2 335.9 29.14 336.9 30.09 337.9 31.07 338.9 32.06 340 33.06 341 34.09 342 35.13 343 36.18 344 37.26 345 38.34 346 39.45 346.9 40.57 347.9"/><polyline points="141.6 398.4 139.6 397.8 137.7 397.3 135.7 396.7 133.8 396.1 131.9 395.5 130 394.9 128.1 394.3 126.2 393.6 124.4 393 122.5 392.4 120.6 391.7 118.8 391.1 117 390.4 115.2 389.7 113.4 389.1 111.6 388.4 109.8 387.7 108 387 106.2 386.3 104.5 385.6 102.7 384.9 101 384.1 99.3 383.4 97.6 382.7 95.91 381.9 94.23 381.2 92.56 380.4 90.91 379.6 89.27 378.9 87.64 378.1 86.02 377.3 84.42 376.5"/><polyline points="40.57 347.9 41.71 348.9 42.86 349.9 44.03 350.8 45.21 351.8 46.41 352.7 47.63 353.7 48.86 354.6 50.1 355.6 51.37 356.5 52.64 357.4 53.94 358.4 55.24 359.3 56.56 360.2 57.9 361.1 59.26 362 60.62 362.9 62 363.8 63.4 364.7 64.81 365.6 66.23 366.5 67.67 367.3 69.13 368.2 70.59 369 72.08 369.9 73.57 370.7 75.08 371.6 76.6 372.4 78.14 373.2 79.69 374.1 81.25 374.9 82.83 375.7 84.42 376.5"/></g><g stroke-width=".9188"><polyline points="468 311.3 466.4 312.1 464.9 312.8 463.3 313.6 461.7 314.3 460.1 315.1 458.5 315.8 456.9 316.6 455.2 317.3 453.6 318 451.9 318.7 450.3 319.4 448.6 320.1 446.9 320.8 445.2 321.5 443.5 322.1 441.8 322.8 440 323.5 438.3 324.1 436.5 324.8 434.7 325.4 433 326 431.2 326.7 429.4 327.3 427.6 327.9 425.8 328.5 423.9 329.1 422.1 329.7 420.2 330.2 418.4 330.8 416.5 331.4 414.7 331.9 412.8 332.5"/><polyline points="146.3 332.5 144.4 331.9 142.5 331.4 140.6 330.8 138.8 330.3 136.9 329.7 135.1 329.1 133.3 328.5 131.5 327.9 129.6 327.3 127.8 326.7 126.1 326 124.3 325.4 122.5 324.8 120.8 324.1 119 323.5 117.3 322.8 115.6 322.1 113.8 321.5 112.1 320.8 110.4 320.1 108.8 319.4 107.1 318.7 105.4 318 103.8 317.3 102.2 316.6 100.5 315.8 98.93 315.1 97.33 314.4 95.75 313.6 94.18 312.8 92.61 312.1 91.07 311.3"/><polyline points="91.07 311.3 89.53 310.5 88.01 309.8 86.5 309 85 308.2 83.52 307.4 82.05 306.6 80.59 305.8 79.14 305 77.71 304.1 76.3 303.3 74.89 302.5 73.5 301.6 72.12 300.8 70.76 299.9 69.42 299.1 68.08 298.2 66.76 297.3 65.45 296.5 64.16 295.6 62.88 294.7 61.62 293.8 60.37 292.9 59.14 292 57.92 291.1 56.72 290.2 55.53 289.3 54.35 288.4 53.2 287.5 52.05 286.5 50.92 285.6 49.81 284.7 48.71 283.7"/><polyline points="210.5 345.8 208.4 345.5 206.3 345.2 204.2 344.9 202.2 344.6 200.1 344.3 198 344 195.9 343.6 193.9 343.3 191.8 342.9 189.7 342.6 187.7 342.2 185.6 341.8 183.6 341.4 181.6 341 179.5 340.6 177.5 340.2 175.5 339.8 173.5 339.4 171.5 338.9 169.5 338.5 167.5 338 165.6 337.6 163.6 337.1 161.6 336.6 159.7 336.1 157.7 335.6 155.8 335.1 153.9 334.6 152 334.1 150.1 333.6 148.2 333 146.3 332.5"/><polyline points="536.9 251.6 536.4 252.6 535.8 253.7 535.2 254.7 534.5 255.8 533.9 256.8 533.2 257.9 532.6 258.9 531.9 259.9 531.2 261 530.4 262 529.7 263 528.9 264 528.2 265 527.4 266.1 526.6 267.1 525.7 268.1 524.9 269.1 524 270.1 523.2 271.1 522.3 272.1 521.4 273.1 520.4 274.1 519.5 275 518.5 276 517.6 277 516.6 278 515.6 278.9 514.6 279.9 513.5 280.9 512.5 281.8 511.4 282.8 510.3 283.7"/><polyline points="22.08 251.6 22.66 252.6 23.25 253.7 23.86 254.7 24.48 255.8 25.12 256.8 25.78 257.9 26.46 258.9 27.15 259.9 27.86 261 28.58 262 29.33 263 30.09 264 30.86 265.1 31.66 266.1 32.46 267.1 33.29 268.1 34.13 269.1 34.99 270.1 35.87 271.1 36.76 272.1 37.67 273.1 38.59 274.1 39.53 275.1 40.49 276 41.46 277 42.45 278 43.46 278.9 44.48 279.9 45.51 280.9 46.56 281.8 47.63 282.8 48.71 283.7"/><polyline points="412.8 332.5 410.9 333 409 333.6 407.1 334.1 405.1 334.6 403.2 335.1 401.3 335.6 399.3 336.1 397.4 336.6 395.4 337.1 393.5 337.6 391.5 338 389.5 338.5 387.5 338.9 385.5 339.4 383.5 339.8 381.5 340.2 379.5 340.6 377.5 341 375.4 341.4 373.4 341.8 371.4 342.2 369.3 342.6 367.2 342.9 365.2 343.3 363.1 343.6 361 344 359 344.3 356.9 344.6 354.8 344.9 352.7 345.2 350.6 345.5 348.5 345.8"/><polyline points="279.5 350.3 277.3 350.3 275.2 350.3 273 350.3 270.8 350.3 268.6 350.2 266.4 350.2 264.3 350.1 262.1 350.1 259.9 350 257.7 349.9 255.6 349.8 253.4 349.7 251.2 349.6 249.1 349.5 246.9 349.3 244.7 349.2 242.6 349.1 240.4 348.9 238.3 348.7 236.1 348.6 234 348.4 231.8 348.2 229.7 348 227.5 347.8 225.4 347.6 223.3 347.3 221.1 347.1 219 346.9 216.9 346.6 214.8 346.4 212.6 346.1 210.5 345.8"/><polyline points="348.5 345.8 346.4 346.1 344.3 346.4 342.2 346.6 340 346.9 337.9 347.1 335.8 347.3 333.6 347.6 331.5 347.8 329.4 348 327.2 348.2 325.1 348.4 322.9 348.6 320.8 348.7 318.6 348.9 316.5 349.1 314.3 349.2 312.1 349.3 310 349.5 307.8 349.6 305.6 349.7 303.5 349.8 301.3 349.9 299.1 350 296.9 350.1 294.8 350.1 292.6 350.2 290.4 350.2 288.2 350.3 286.1 350.3 283.9 350.3 281.7 350.3 279.5 350.3"/><polyline points="546 217.1 546 218.2 546 219.3 545.9 220.4 545.9 221.5 545.8 222.5 545.7 223.6 545.6 224.7 545.4 225.8 545.3 226.9 545.1 228 544.9 229.1 544.7 230.2 544.5 231.2 544.3 232.3 544 233.4 543.7 234.5 543.4 235.6 543.1 236.6 542.8 237.7 542.5 238.8 542.1 239.9 541.7 240.9 541.3 242 540.9 243.1 540.5 244.2 540 245.2 539.5 246.3 539.1 247.4 538.6 248.4 538 249.5 537.5 250.5 536.9 251.6"/><polyline points="13 217.1 13.01 218.2 13.04 219.3 13.08 220.4 13.14 221.5 13.22 222.5 13.32 223.6 13.44 224.7 13.57 225.8 13.72 226.9 13.89 228 14.08 229.1 14.28 230.2 14.51 231.2 14.75 232.3 15.01 233.4 15.28 234.5 15.58 235.6 15.89 236.6 16.22 237.7 16.56 238.8 16.93 239.9 17.31 241 17.71 242 18.12 243.1 18.56 244.2 19.01 245.2 19.48 246.3 19.96 247.4 20.47 248.4 20.99 249.5 21.53 250.5 22.08 251.6"/><polyline points="15.88 197.5 15.57 198.6 15.28 199.7 15 200.8 14.75 201.9 14.51 202.9 14.28 204 14.08 205.1 13.89 206.2 13.72 207.3 13.57 208.4 13.44 209.5 13.32 210.6 13.22 211.6 13.14 212.7 13.08 213.8 13.04 214.9 13.01 216 13 217.1"/><polyline points="543.1 197.5 543.4 198.6 543.7 199.7 544 200.8 544.3 201.9 544.5 202.9 544.7 204 544.9 205.1 545.1 206.2 545.3 207.3 545.4 208.4 545.6 209.5 545.7 210.6 545.8 211.6 545.9 212.7 545.9 213.8 546 214.9 546 216 546 217.1"/><polyline points="510.3 283.7 509.2 284.7 508.1 285.6 507 286.5 505.8 287.5 504.7 288.4 503.5 289.3 502.3 290.2 501.1 291.1 499.9 292 498.7 292.9 497.4 293.8 496.1 294.7 494.9 295.6 493.6 296.5 492.3 297.3 490.9 298.2 489.6 299.1 488.3 299.9 486.9 300.8 485.5 301.6 484.1 302.5 482.7 303.3 481.3 304.1 479.9 305 478.4 305.8 477 306.6 475.5 307.4 474 308.2 472.5 309 471 309.8 469.5 310.5 468 311.3"/><polyline points="217.7 274.9 215.8 274.6 213.9 274.3 212 274.1 210.2 273.8 208.3 273.5 206.4 273.2 204.6 272.9 202.7 272.6 200.9 272.3 199 272 197.2 271.6 195.3 271.3 193.5 270.9 191.7 270.6 189.9 270.2 188.1 269.8 186.3 269.5 184.5 269.1 182.7 268.7 180.9 268.3 179.1 267.9 177.4 267.5 175.6 267 173.8 266.6 172.1 266.2 170.3 265.7 168.6 265.3 166.9 264.8 165.2 264.4 163.4 263.9 161.7 263.4 160 262.9"/><polyline points="48.71 128.5 48.21 129.5 47.72 130.4 47.26 131.4 46.81 132.3 46.37 133.3 45.95 134.2 45.54 135.2 45.16 136.2 44.78 137.1 44.42 138.1 44.08 139 43.76 140 43.44 141 43.15 141.9 42.87 142.9 42.61 143.9 42.36 144.8 42.13 145.8 41.91 146.8 41.71 147.8 41.53 148.7 41.36 149.7 41.21 150.7 41.08 151.6 40.96 152.6 40.85 153.6 40.76 154.6 40.69 155.6 40.64 156.5 40.6 157.5 40.57 158.5 40.56 159.5"/><polyline points="40.56 159.5 40.57 160.4 40.6 161.4 40.64 162.4 40.69 163.4 40.76 164.4 40.85 165.3 40.96 166.3 41.08 167.3 41.21 168.3 41.36 169.2 41.53 170.2 41.72 171.2 41.92 172.1 42.13 173.1 42.36 174.1 42.61 175.1 42.87 176 43.15 177 43.45 178 43.76 178.9 44.08 179.9 44.43 180.9 44.78 181.8 45.16 182.8 45.55 183.7 45.95 184.7 46.37 185.6 46.81 186.6 47.26 187.5 47.73 188.5 48.21 189.4 48.71 190.4"/><polyline points="341.4 274.9 339.5 275.1 337.6 275.4 335.7 275.6 333.8 275.8 331.9 276 330 276.2 328 276.4 326.1 276.6 324.2 276.8 322.3 277 320.4 277.2 318.4 277.3 316.5 277.5 314.6 277.6 312.6 277.8 310.7 277.9 308.8 278 306.8 278.2 304.9 278.3 302.9 278.4 301 278.4 299 278.5 297.1 278.6 295.1 278.7 293.2 278.7 291.2 278.8 289.3 278.8 287.3 278.9 285.4 278.9 283.4 278.9 281.5 278.9 279.5 278.9"/></g></g><polyline points="279.5 278.9 277.6 278.9 275.6 278.9 273.7 278.9 271.7 278.9 269.7 278.8 267.8 278.8 265.8 278.7 263.9 278.7 261.9 278.6 260 278.5 258 278.4 256.1 278.4 254.2 278.3 252.2 278.2 250.3 278 248.3 277.9 246.4 277.8 244.5 277.6 242.5 277.5 240.6 277.3 238.7 277.2 236.7 277 234.8 276.8 232.9 276.6 231 276.4 229.1 276.2 227.2 276 225.3 275.8 223.4 275.6 221.5 275.4 219.6 275.1 217.7 274.9" stroke="url(#linearGradient6731)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="160 262.9 158.4 262.4 156.7 261.9 155 261.4 153.3 260.9 151.7 260.4 150 259.9 148.4 259.3 146.8 258.8 145.1 258.3 143.5 257.7 141.9 257.1 140.3 256.6 138.8 256 137.2 255.4 135.6 254.8 134.1 254.2 132.5 253.6 131 253 129.4 252.4 127.9 251.8 126.4 251.2 124.9 250.6 123.4 249.9 122 249.3 120.5 248.6 119 248 117.6 247.3 116.2 246.7 114.8 246 113.3 245.3 111.9 244.6 110.6 243.9"/><polyline points="72.58 219.2 71.61 218.4 70.66 217.5 69.71 216.6 68.78 215.8 67.87 214.9 66.97 214.1 66.08 213.2 65.21 212.3 64.35 211.4 63.51 210.5 62.68 209.7 61.87 208.8 61.07 207.9 60.28 207 59.51 206.1 58.76 205.2 58.02 204.3 57.29 203.4 56.58 202.5 55.88 201.6 55.2 200.6 54.54 199.7 53.88 198.8 53.25 197.9 52.63 196.9 52.02 196 51.43 195.1 50.86 194.1 50.3 193.2 49.75 192.3 49.22 191.3 48.71 190.4"/><polyline points="53.88 120.1 53.25 121.1 52.62 122 52.02 122.9 51.43 123.8 50.85 124.8 50.29 125.7 49.75 126.7 49.22 127.6 48.71 128.5"/><polyline points="110.6 243.9 109.2 243.2 107.8 242.6 106.5 241.8 105.1 241.1 103.8 240.4 102.5 239.7 101.2 239 99.87 238.2 98.58 237.5 97.31 236.8 96.06 236 94.81 235.3 93.57 234.5 92.35 233.7 91.14 233 89.95 232.2 88.76 231.4 87.59 230.6 86.43 229.8 85.29 229.1 84.16 228.3 83.04 227.5 81.93 226.6 80.84 225.8 79.76 225 78.69 224.2 77.64 223.4 76.6 222.6 75.58 221.7 74.56 220.9 73.57 220 72.58 219.2"/><polyline points="399 262.9 397.3 263.4 395.6 263.9 393.9 264.4 392.2 264.8 390.4 265.3 388.7 265.7 386.9 266.2 385.2 266.6 383.4 267 381.7 267.5 379.9 267.9 378.1 268.3 376.3 268.7 374.6 269.1 372.8 269.5 371 269.8 369.1 270.2 367.3 270.6 365.5 270.9 363.7 271.3 361.9 271.6 360 271.9 358.2 272.3 356.3 272.6 354.5 272.9 352.6 273.2 350.7 273.5 348.9 273.8 347 274.1 345.1 274.3 343.2 274.6 341.4 274.9"/><polyline points="448.5 243.9 447.1 244.6 445.7 245.3 444.3 246 442.9 246.7 441.4 247.3 440 248 438.5 248.6 437.1 249.3 435.6 249.9 434.1 250.6 432.6 251.2 431.1 251.8 429.6 252.4 428.1 253 426.5 253.6 425 254.2 423.4 254.8 421.9 255.4 420.3 256 418.7 256.6 417.1 257.1 415.5 257.7 413.9 258.3 412.3 258.8 410.6 259.3 409 259.9 407.4 260.4 405.7 260.9 404 261.4 402.4 261.9 400.7 262.4 399 262.9"/><polyline points="510.3 190.4 509.8 191.3 509.3 192.3 508.7 193.2 508.2 194.1 507.6 195.1 507 196 506.4 196.9 505.8 197.9 505.1 198.8 504.5 199.7 503.8 200.6 503.1 201.5 502.4 202.5 501.7 203.4 501 204.3 500.3 205.2 499.5 206.1 498.7 207 498 207.9 497.2 208.8 496.3 209.7 495.5 210.5 494.7 211.4 493.8 212.3 492.9 213.2 492.1 214 491.2 214.9 490.2 215.8 489.3 216.6 488.4 217.5 487.4 218.3 486.4 219.2"/><polyline points="486.4 219.2 485.5 220 484.5 220.9 483.5 221.7 482.4 222.6 481.4 223.4 480.3 224.2 479.3 225 478.2 225.8 477.1 226.6 476 227.5 474.9 228.3 473.7 229.1 472.6 229.8 471.4 230.6 470.3 231.4 469.1 232.2 467.9 233 466.7 233.7 465.5 234.5 464.2 235.3 463 236 461.7 236.8 460.4 237.5 459.2 238.2 457.9 239 456.6 239.7 455.2 240.4 453.9 241.1 452.6 241.8 451.2 242.5 449.8 243.2 448.5 243.9"/></g><polyline points="518.5 159.5 518.4 160.4 518.4 161.4 518.4 162.4 518.3 163.4 518.3 164.3 518.2 165.3 518.1 166.3 517.9 167.3 517.8 168.3 517.7 169.2 517.5 170.2 517.3 171.2 517.1 172.1 516.9 173.1 516.7 174.1 516.4 175.1 516.1 176 515.9 177 515.6 178 515.3 178.9 514.9 179.9 514.6 180.8 514.2 181.8 513.9 182.8 513.5 183.7 513.1 184.7 512.7 185.6 512.2 186.6 511.8 187.5 511.3 188.5 510.8 189.4 510.3 190.4" stroke="url(#linearGradient6733)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="505.1 120.1 505.8 121.1 506.4 122 507 122.9 507.6 123.8 508.2 124.8 508.7 125.7 509.3 126.7 509.8 127.6 510.3 128.5"/><polyline points="510.3 128.5 510.8 129.5 511.3 130.4 511.8 131.4 512.2 132.3 512.7 133.3 513.1 134.2 513.5 135.2 513.9 136.2 514.2 137.1 514.6 138.1 514.9 139 515.3 140 515.6 141 515.9 141.9 516.2 142.9 516.4 143.9 516.7 144.8 516.9 145.8 517.1 146.8 517.3 147.8 517.5 148.7 517.7 149.7 517.8 150.7 517.9 151.6 518.1 152.6 518.2 153.6 518.3 154.6 518.3 155.6 518.4 156.5 518.4 157.5 518.4 158.5 518.5 159.5"/><polyline points="468 135.2 467.5 136 467.1 136.8 466.7 137.5 466.2 138.3 465.7 139.1 465.3 139.8 464.8 140.6 464.3 141.3 463.7 142.1 463.2 142.8 462.7 143.6 462.1 144.3 461.5 145.1 461 145.8 460.4 146.6 459.8 147.3 459.1 148 458.5 148.8 457.9 149.5 457.2 150.2 456.6 151 455.9 151.7 455.2 152.4 454.5 153.1 453.8 153.8 453.1 154.5 452.3 155.3 451.6 156 450.8 156.7 450 157.4 449.3 158.1 448.5 158.7"/><polyline points="468 84.73 468.4 85.5 468.8 86.27 469.1 87.05 469.5 87.82 469.9 88.6 470.2 89.38 470.5 90.16 470.9 90.94 471.2 91.73 471.5 92.51 471.7 93.3 472 94.08 472.3 94.87 472.5 95.66 472.7 96.45 472.9 97.24 473.1 98.03 473.3 98.82 473.5 99.62 473.7 100.4 473.8 101.2 474 102 474.1 102.8 474.2 103.6 474.3 104.4 474.4 105.2 474.4 106 474.5 106.8 474.6 107.6 474.6 108.4 474.6 109.2 474.6 110"/><polyline points="439 53.81 439.9 54.46 440.8 55.12 441.7 55.78 442.6 56.44 443.5 57.11 444.3 57.79 445.2 58.46 446 59.14 446.9 59.82 447.7 60.51 448.5 61.2"/><polyline points="474.6 110 474.6 110.8 474.6 111.6 474.6 112.4 474.5 113.2 474.4 114 474.4 114.8 474.3 115.6 474.2 116.4 474.1 117.2 474 117.9 473.8 118.7 473.7 119.5 473.5 120.3 473.3 121.1 473.1 121.9 472.9 122.7 472.7 123.5 472.5 124.3 472.3 125.1 472 125.9 471.7 126.7 471.5 127.4 471.2 128.2 470.9 129 470.5 129.8 470.2 130.6 469.9 131.3 469.5 132.1 469.1 132.9 468.8 133.7 468.4 134.4 468 135.2"/><polyline points="448.5 61.2 449.3 61.89 450 62.59 450.8 63.29 451.6 63.99 452.3 64.7 453.1 65.4 453.8 66.12 454.5 66.83 455.2 67.55 455.9 68.27 456.6 68.99 457.2 69.72 457.9 70.44 458.5 71.17 459.1 71.91 459.8 72.64 460.4 73.38 461 74.12 461.5 74.87 462.1 75.61 462.7 76.36 463.2 77.11 463.7 77.86 464.3 78.62 464.8 79.38 465.3 80.13 465.7 80.9 466.2 81.66 466.7 82.42 467.1 83.19 467.5 83.96 468 84.73"/><polyline points="141.6 179 140.4 178.4 139.3 177.8 138.2 177.2 137.1 176.7 136 176.1 135 175.5 133.9 174.9 132.8 174.3 131.8 173.7 130.7 173.1 129.7 172.5 128.7 171.9 127.7 171.2 126.7 170.6 125.7 170 124.7 169.4 123.8 168.7 122.8 168.1 121.9 167.4 120.9 166.8 120 166.1 119.1 165.5 118.2 164.8 117.3 164.2 116.4 163.5 115.5 162.8 114.7 162.2 113.8 161.5 113 160.8 112.2 160.1 111.4 159.4 110.6 158.8"/><polyline points="110.6 61.2 111.4 60.51 112.2 59.82 113 59.14 113.8 58.46 114.7 57.78 115.5 57.11 116.4 56.44 117.3 55.78 118.2 55.12 119.1 54.46 120 53.8"/><polyline points="448.5 158.7 447.7 159.4 446.9 160.1 446 160.8 445.2 161.5 444.3 162.2 443.5 162.8 442.6 163.5 441.7 164.2 440.8 164.8 439.9 165.5 439 166.1 438.1 166.8 437.2 167.4 436.2 168.1 435.3 168.7 434.3 169.4 433.3 170 432.3 170.6 431.3 171.2 430.3 171.9 429.3 172.5 428.3 173.1 427.2 173.7 426.2 174.3 425.1 174.9 424.1 175.5 423 176.1 421.9 176.7 420.8 177.2 419.7 177.8 418.6 178.4 417.5 179"/><polyline points="110.6 158.8 109.8 158.1 109 157.4 108.2 156.7 107.5 156 106.7 155.3 106 154.5 105.2 153.8 104.5 153.1 103.8 152.4 103.1 151.7 102.5 151 101.8 150.2 101.2 149.5 100.5 148.8 99.88 148 99.27 147.3 98.66 146.6 98.07 145.8 97.49 145.1 96.92 144.3 96.36 143.6 95.82 142.8 95.29 142.1 94.77 141.3 94.26 140.6 93.77 139.8 93.28 139.1 92.82 138.3 92.36 137.5 91.91 136.8 91.48 136 91.06 135.2"/><polyline points="91.06 84.73 90.65 85.5 90.26 86.27 89.88 87.05 89.51 87.82 89.15 88.6 88.81 89.38 88.48 90.16 88.16 90.94 87.86 91.73 87.56 92.51 87.28 93.3 87.02 94.08 86.76 94.87 86.52 95.66 86.3 96.45 86.08 97.24 85.88 98.03 85.69 98.83 85.51 99.62 85.35 100.4 85.2 101.2 85.06 102 84.94 102.8 84.83 103.6 84.73 104.4 84.65 105.2 84.58 106 84.52 106.8 84.47 107.6 84.44 108.4 84.42 109.2 84.41 110"/><polyline points="91.06 135.2 90.66 134.5 90.26 133.7 89.88 132.9 89.51 132.1 89.15 131.4 88.81 130.6 88.48 129.8 88.16 129 87.86 128.2 87.56 127.4 87.28 126.7 87.02 125.9 86.76 125.1 86.52 124.3 86.3 123.5 86.08 122.7 85.88 121.9 85.69 121.1 85.52 120.3 85.35 119.5 85.2 118.7 85.06 117.9 84.94 117.2 84.83 116.4 84.73 115.6 84.65 114.8 84.58 114 84.52 113.2 84.47 112.4 84.44 111.6 84.42 110.8 84.41 110"/></g><polyline points="182 194.5 180.6 194.1 179.2 193.6 177.8 193.2 176.5 192.8 175.1 192.4 173.8 192 172.5 191.5 171.1 191.1 169.8 190.6 168.5 190.2 167.2 189.7 165.9 189.3 164.6 188.8 163.3 188.3 162 187.8 160.7 187.4 159.5 186.9 158.2 186.4 157 185.9 155.7 185.4 154.5 184.9 153.3 184.4 152.1 183.8 150.9 183.3 149.7 182.8 148.5 182.3 147.3 181.7 146.1 181.2 145 180.6 143.8 180.1 142.7 179.5 141.6 179" stroke="url(#linearGradient6735)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="110.6 61.2 109.8 61.89 109 62.59 108.2 63.29 107.4 63.99 106.7 64.69 106 65.4 105.2 66.11 104.5 66.83 103.8 67.54 103.1 68.26 102.5 68.99 101.8 69.71 101.1 70.44 100.5 71.17 99.88 71.91 99.26 72.64 98.66 73.38 98.06 74.12 97.48 74.86 96.92 75.61 96.36 76.36 95.82 77.11 95.28 77.86 94.77 78.62 94.26 79.37 93.76 80.13 93.28 80.89 92.81 81.66 92.36 82.42 91.91 83.19 91.48 83.96 91.06 84.73"/><polyline points="229 204.2 227.5 204 225.9 203.8 224.4 203.6 222.9 203.3 221.4 203.1 219.8 202.8 218.3 202.6 216.8 202.3 215.3 202.1 213.8 201.8 212.3 201.6 210.8 201.3 209.3 201 207.8 200.7 206.3 200.4 204.9 200.1 203.4 199.8 201.9 199.5 200.5 199.2 199 198.8 197.5 198.5 196.1 198.2 194.7 197.8 193.2 197.5 191.8 197.1 190.4 196.7 189 196.4 187.5 196 186.1 195.6 184.7 195.2 183.4 194.9 182 194.5"/><polyline points="377.1 194.5 375.7 194.8 374.3 195.2 372.9 195.6 371.5 196 370.1 196.4 368.7 196.7 367.2 197.1 365.8 197.5 364.4 197.8 362.9 198.2 361.5 198.5 360 198.8 358.6 199.2 357.1 199.5 355.6 199.8 354.2 200.1 352.7 200.4 351.2 200.7 349.7 201 348.2 201.3 346.7 201.5 345.2 201.8 343.7 202.1 342.2 202.3 340.7 202.6 339.2 202.8 337.7 203.1 336.1 203.3 334.6 203.6 333.1 203.8 331.5 204 330 204.2"/><polyline points="417.5 179 416.3 179.5 415.2 180.1 414 180.6 412.9 181.2 411.7 181.7 410.5 182.3 409.3 182.8 408.2 183.3 406.9 183.8 405.7 184.4 404.5 184.9 403.3 185.4 402 185.9 400.8 186.4 399.5 186.9 398.3 187.4 397 187.8 395.7 188.3 394.4 188.8 393.2 189.3 391.9 189.7 390.5 190.2 389.2 190.6 387.9 191.1 386.6 191.5 385.2 192 383.9 192.4 382.5 192.8 381.2 193.2 379.8 193.6 378.4 194.1 377.1 194.5"/><polyline points="330 204.2 328.5 204.4 326.9 204.6 325.4 204.8 323.8 205 322.3 205.2 320.7 205.3 319.1 205.5 317.6 205.6 316 205.8 314.4 205.9 312.9 206.1 311.3 206.2 309.7 206.3 308.1 206.5 306.6 206.6 305 206.7 303.4 206.8 301.8 206.9 300.2 207 298.6 207.1 297 207.1 295.5 207.2 293.9 207.3 292.3 207.3 290.7 207.4 289.1 207.4 287.5 207.4 285.9 207.5 284.3 207.5 282.7 207.5 281.1 207.5 279.5 207.5"/><polyline points="279.5 207.5 277.9 207.5 276.3 207.5 274.7 207.5 273.1 207.5 271.5 207.4 269.9 207.4 268.3 207.4 266.8 207.3 265.2 207.3 263.6 207.2 262 207.1 260.4 207.1 258.8 207 257.2 206.9 255.6 206.8 254 206.7 252.5 206.6 250.9 206.5 249.3 206.3 247.7 206.2 246.2 206.1 244.6 205.9 243 205.8 241.5 205.6 239.9 205.5 238.3 205.3 236.8 205.2 235.2 205 233.7 204.8 232.1 204.6 230.6 204.4 229 204.2"/><polyline points="160 106.5 159.5 106 158.9 105.5 158.4 105 157.8 104.5 157.3 104 156.8 103.5 156.3 103 155.8 102.5 155.3 102 154.8 101.5 154.3 101 153.9 100.5 153.4 99.96 152.9 99.44 152.5 98.92 152.1 98.4 151.6 97.88 151.2 97.35 150.8 96.83 150.4 96.3 150 95.77 149.6 95.24 149.2 94.71 148.9 94.18 148.5 93.64 148.2 93.1 147.8 92.57 147.5 92.03 147.2 91.48 146.9 90.94 146.6 90.4 146.3 89.86"/><polyline points="182 120.8 181.2 120.4 180.4 120 179.6 119.6 178.8 119.2 178.1 118.7 177.3 118.3 176.5 117.9 175.8 117.5 175.1 117.1 174.3 116.6 173.6 116.2 172.9 115.8 172.2 115.3 171.5 114.9 170.8 114.4 170.1 114 169.4 113.5 168.7 113.1 168 112.6 167.4 112.2 166.7 111.7 166.1 111.3 165.4 110.8 164.8 110.3 164.2 109.9 163.6 109.4 163 108.9 162.4 108.4 161.8 107.9 161.2 107.5 160.6 107 160 106.5"/></g><polyline points="210.5 131.7 209.6 131.5 208.6 131.2 207.6 130.9 206.7 130.6 205.7 130.3 204.8 130 203.8 129.7 202.9 129.4 201.9 129 201 128.7 200.1 128.4 199.2 128.1 198.2 127.7 197.3 127.4 196.4 127.1 195.5 126.7 194.6 126.4 193.8 126 192.9 125.7 192 125.3 191.1 125 190.3 124.6 189.4 124.2 188.6 123.9 187.7 123.5 186.9 123.1 186 122.7 185.2 122.3 184.4 122 183.6 121.6 182.8 121.2 182 120.8" stroke="url(#linearGradient6737)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="279.5 141 278.4 141 277.3 141 276.1 141 275 140.9 273.9 140.9 272.7 140.9 271.6 140.9 270.5 140.8 269.4 140.8 268.2 140.7 267.1 140.7 266 140.6 264.9 140.6 263.7 140.5 262.6 140.5 261.5 140.4 260.4 140.3 259.3 140.2 258.2 140.1 257 140.1 255.9 140 254.8 139.9 253.7 139.8 252.6 139.7 251.5 139.5 250.4 139.4 249.3 139.3 248.2 139.2 247.1 139 246 138.9 244.9 138.8 243.8 138.6"/><polyline points="243.8 138.6 242.7 138.5 241.6 138.3 240.5 138.2 239.5 138 238.4 137.8 237.3 137.7 236.2 137.5 235.2 137.3 234.1 137.1 233 136.9 232 136.8 230.9 136.6 229.9 136.4 228.8 136.2 227.8 135.9 226.7 135.7 225.7 135.5 224.6 135.3 223.6 135.1 222.6 134.8 221.6 134.6 220.5 134.4 219.5 134.1 218.5 133.9 217.5 133.6 216.5 133.4 215.5 133.1 214.5 132.8 213.5 132.6 212.5 132.3 211.5 132 210.5 131.7"/><polyline points="348.5 131.7 347.5 132 346.5 132.3 345.5 132.6 344.5 132.8 343.5 133.1 342.5 133.4 341.5 133.6 340.5 133.9 339.5 134.1 338.5 134.4 337.5 134.6 336.4 134.8 335.4 135.1 334.4 135.3 333.3 135.5 332.3 135.7 331.3 135.9 330.2 136.2 329.2 136.4 328.1 136.6 327 136.8 326 136.9 324.9 137.1 323.9 137.3 322.8 137.5 321.7 137.7 320.6 137.8 319.6 138 318.5 138.2 317.4 138.3 316.3 138.5 315.2 138.6"/><polyline points="315.2 138.6 314.1 138.8 313 138.9 311.9 139 310.8 139.2 309.7 139.3 308.6 139.4 307.5 139.5 306.4 139.7 305.3 139.8 304.2 139.9 303.1 140 302 140.1 300.9 140.1 299.8 140.2 298.6 140.3 297.5 140.4 296.4 140.5 295.3 140.5 294.2 140.6 293 140.6 291.9 140.7 290.8 140.7 289.7 140.8 288.5 140.8 287.4 140.9 286.3 140.9 285.2 140.9 284 140.9 282.9 141 281.8 141 280.6 141 279.5 141"/><polyline points="377.1 120.8 376.3 121.2 375.5 121.6 374.6 122 373.8 122.3 373 122.7 372.2 123.1 371.3 123.5 370.5 123.9 369.6 124.2 368.8 124.6 367.9 125 367 125.3 366.2 125.7 365.3 126 364.4 126.4 363.5 126.7 362.6 127.1 361.7 127.4 360.8 127.7 359.9 128.1 358.9 128.4 358 128.7 357.1 129 356.2 129.4 355.2 129.7 354.3 130 353.3 130.3 352.4 130.6 351.4 130.9 350.4 131.2 349.5 131.5 348.5 131.7"/><polyline points="182 23.23 182.8 22.83 183.6 22.43 184.4 22.04 185.2 21.66 186 21.27 186.9 20.89 187.7 20.51 188.6 20.14 189.4 19.77 190.3 19.4 191.1 19.04 192 18.68 192.9 18.32 193.8 17.97 194.6 17.62 195.5 17.28 196.4 16.93 197.3 16.6 198.2 16.26 199.2 15.93 200.1 15.6 201 15.28 201.9 14.96 202.9 14.65 203.8 14.33 204.8 14.03 205.7 13.72 206.7 13.42 207.6 13.13 208.6 12.84 209.6 12.55 210.5 12.26"/><polyline points="160 37.51 160.6 37.02 161.2 36.54 161.8 36.06 162.4 35.58 163 35.1 163.6 34.62 164.2 34.15 164.8 33.68 165.4 33.21 166.1 32.74 166.7 32.28 167.4 31.82 168 31.36 168.7 30.91 169.4 30.46 170.1 30.01 170.8 29.56 171.5 29.12 172.2 28.68 172.9 28.24 173.6 27.81 174.3 27.38 175 26.95 175.8 26.52 176.5 26.1 177.3 25.68 178.1 25.26 178.8 24.85 179.6 24.44 180.4 24.03 181.2 23.63 182 23.23"/><polyline points="160 37.51 159.5 38 158.9 38.49 158.4 38.99 157.8 39.48 157.3 39.98 156.8 40.48 156.3 40.99 155.8 41.49 155.3 42 154.8 42.51 154.3 43.02 153.9 43.53 153.4 44.05 152.9 44.56 152.5 45.08 152.1 45.6 151.6 46.12 151.2 46.65 150.8 47.18 150.4 47.7 150 48.23 149.6 48.76 149.2 49.29 148.9 49.83 148.5 50.36 148.2 50.9 147.8 51.44 147.5 51.98 147.2 52.52 146.9 53.06 146.6 53.6 146.3 54.15"/></g><polyline points="141.6 72 141.6 71.44 141.6 70.87 141.6 70.31 141.6 69.74 141.7 69.18 141.7 68.62 141.8 68.05 141.8 67.49 141.9 66.93 142 66.36 142.1 65.8 142.2 65.24 142.3 64.68 142.5 64.12 142.6 63.56 142.7 63 142.9 62.44 143 61.88 143.2 61.32 143.4 60.76 143.6 60.21 143.8 59.65 144 59.1 144.2 58.54 144.4 57.99 144.7 57.44 144.9 56.89 145.2 56.34 145.4 55.79 145.7 55.24 146 54.69 146.3 54.15" stroke="url(#linearGradient6739)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="146.3 89.86 146 89.31 145.7 88.76 145.4 88.22 145.2 87.67 144.9 87.12 144.7 86.56 144.4 86.01 144.2 85.46 144 84.91 143.8 84.35 143.6 83.8 143.4 83.24 143.2 82.68 143 82.12 142.9 81.57 142.7 81.01 142.6 80.45 142.5 79.89 142.3 79.32 142.2 78.76 142.1 78.2 142 77.64 141.9 77.08 141.9 76.51 141.8 75.95 141.7 75.39 141.7 74.82 141.6 74.26 141.6 73.7 141.6 73.13 141.6 72.57 141.6 72"/><polyline points="348.5 12.26 349.5 12.55 350.4 12.84 351.4 13.13 352.4 13.42 353.3 13.72 354.3 14.03 355.2 14.34 356.2 14.65 357.1 14.96 358 15.28 359 15.61 359.9 15.93 360.8 16.26 361.7 16.6 362.6 16.94 363.5 17.28 364.4 17.62 365.3 17.97 366.2 18.32 367 18.68 367.9 19.04 368.8 19.4 369.6 19.77 370.5 20.14 371.3 20.52 372.2 20.89 373 21.27 373.8 21.66 374.6 22.04 375.5 22.44 376.3 22.83 377.1 23.23"/><polyline points="210.5 12.26 211.5 11.98 212.5 11.71 213.5 11.43 214.5 11.17 215.5 10.9 216.5 10.64 217.5 10.39 218.5 10.14 219.5 9.887 220.5 9.644 221.6 9.404 222.6 9.17 223.6 8.938 224.6 8.712 225.7 8.49 226.7 8.271 227.8 8.058 228.8 7.848 229.9 7.643 230.9 7.442 232 7.246 233 7.053 234.1 6.865 235.2 6.682 236.2 6.503 237.3 6.328 238.4 6.157 239.5 5.991 240.6 5.83 241.6 5.673 242.7 5.52 243.8 5.372"/><polyline points="315.2 5.374 316.3 5.521 317.4 5.674 318.5 5.831 319.6 5.993 320.6 6.159 321.7 6.329 322.8 6.504 323.9 6.684 324.9 6.867 326 7.055 327.1 7.247 328.1 7.444 329.2 7.645 330.2 7.85 331.3 8.06 332.3 8.273 333.4 8.492 334.4 8.714 335.4 8.941 336.4 9.171 337.5 9.407 338.5 9.646 339.5 9.889 340.5 10.14 341.5 10.39 342.5 10.64 343.5 10.9 344.5 11.17 345.5 11.44 346.5 11.71 347.5 11.98 348.5 12.26"/><polyline points="243.8 5.372 244.9 5.228 246 5.088 247.1 4.954 248.2 4.824 249.3 4.697 250.4 4.576 251.5 4.459 252.6 4.347 253.7 4.239 254.8 4.136 255.9 4.037 257 3.943 258.2 3.854 259.3 3.769 260.4 3.688 261.5 3.612 262.6 3.541 263.7 3.474 264.9 3.412 266 3.354 267.1 3.301 268.2 3.252 269.4 3.208 270.5 3.169 271.6 3.135 272.7 3.105 273.9 3.08 275 3.059 276.1 3.043 277.3 3.032 278.4 3.024"/><polyline points="377.1 23.23 377.9 23.63 378.6 24.03 379.4 24.44 380.2 24.85 381 25.26 381.7 25.68 382.5 26.1 383.2 26.52 384 26.95 384.7 27.38 385.4 27.81 386.2 28.24 386.9 28.68 387.6 29.12 388.3 29.56 389 30.01 389.6 30.46 390.3 30.91 391 31.37 391.6 31.82 392.3 32.28 392.9 32.75 393.6 33.21 394.2 33.68 394.8 34.15 395.5 34.62 396.1 35.1 396.7 35.58 397.3 36.06 397.8 36.54 398.4 37.02 399 37.51"/><polyline points="399 106.5 398.4 107 397.8 107.5 397.3 107.9 396.7 108.4 396.1 108.9 395.5 109.4 394.8 109.9 394.2 110.3 393.6 110.8 392.9 111.3 392.3 111.7 391.6 112.2 391 112.6 390.3 113.1 389.6 113.5 389 114 388.3 114.4 387.6 114.9 386.9 115.3 386.2 115.8 385.4 116.2 384.7 116.6 384 117.1 383.2 117.5 382.5 117.9 381.7 118.3 381 118.7 380.2 119.2 379.4 119.6 378.6 120 377.9 120.4 377.1 120.8"/><polyline points="280.6 3.024 281.8 3.032 282.9 3.043 284 3.059 285.2 3.08 286.3 3.105 287.4 3.135 288.5 3.17 289.7 3.209 290.8 3.253 291.9 3.301 293 3.354 294.2 3.412 295.3 3.475 296.4 3.542 297.5 3.612 298.6 3.688 299.8 3.769 300.9 3.854 302 3.944 303.1 4.038 304.2 4.137 305.3 4.24 306.4 4.348 307.5 4.46 308.6 4.577 309.7 4.699 310.8 4.825 311.9 4.955 313 5.09 314.1 5.229 315.2 5.374"/></g><polyline points="412.8 89.85 412.5 90.4 412.2 90.94 411.8 91.48 411.5 92.02 411.2 92.56 410.9 93.1 410.5 93.64 410.1 94.17 409.8 94.71 409.4 95.24 409 95.77 408.6 96.3 408.2 96.82 407.8 97.35 407.4 97.88 407 98.4 406.5 98.92 406.1 99.44 405.6 99.95 405.2 100.5 404.7 101 404.2 101.5 403.7 102 403.2 102.5 402.7 103 402.2 103.5 401.7 104 401.2 104.5 400.6 105 400.1 105.5 399.5 106 399 106.5" stroke="url(#linearGradient6741)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="417.5 72 417.5 72.56 417.4 73.13 417.4 73.69 417.4 74.26 417.4 74.82 417.3 75.38 417.2 75.95 417.2 76.51 417.1 77.08 417 77.64 416.9 78.2 416.8 78.76 416.7 79.32 416.6 79.88 416.4 80.44 416.3 81 416.1 81.56 416 82.12 415.8 82.68 415.6 83.24 415.4 83.79 415.2 84.35 415 84.9 414.8 85.46 414.6 86.01 414.4 86.56 414.1 87.11 413.9 87.66 413.6 88.21 413.3 88.76 413.1 89.31 412.8 89.85"/><polyline points="412.8 54.15 413.1 54.69 413.3 55.24 413.6 55.79 413.9 56.34 414.1 56.89 414.4 57.44 414.6 57.99 414.8 58.54 415 59.1 415.2 59.65 415.4 60.21 415.6 60.76 415.8 61.32 416 61.88 416.1 62.44 416.3 63 416.4 63.56 416.6 64.12 416.7 64.68 416.8 65.24 416.9 65.8 417 66.36 417.1 66.93 417.2 67.49 417.2 68.05 417.3 68.62 417.4 69.18 417.4 69.74 417.4 70.31 417.4 70.87 417.5 71.44 417.5 72"/><polyline points="399 37.51 399.5 38 400.1 38.49 400.6 38.99 401.2 39.48 401.7 39.98 402.2 40.48 402.7 40.99 403.2 41.49 403.7 42 404.2 42.51 404.7 43.02 405.2 43.53 405.6 44.05 406.1 44.56 406.5 45.08 407 45.6 407.4 46.13 407.8 46.65 408.2 47.18 408.6 47.7 409 48.23 409.4 48.76 409.8 49.3 410.1 49.83 410.5 50.36 410.9 50.9 411.2 51.44 411.5 51.98 411.9 52.52 412.2 53.06 412.5 53.6 412.8 54.15"/><polyline points="243.8 79.05 243.3 78.9 242.8 78.76 242.3 78.6 241.8 78.45 241.3 78.3 240.8 78.14 240.3 77.98 239.8 77.82 239.4 77.66 238.9 77.49 238.4 77.32 237.9 77.15 237.4 76.98 237 76.81 236.5 76.63 236 76.46 235.6 76.28 235.1 76.1 234.7 75.92 234.2 75.73 233.8 75.54 233.3 75.36 232.9 75.17 232.4 74.98 232 74.78 231.6 74.59 231.1 74.39 230.7 74.19 230.3 73.99 229.8 73.79 229.4 73.58 229 73.38"/><polyline points="261 82.62 260.5 82.54 259.9 82.46 259.3 82.38 258.8 82.3 258.2 82.21 257.7 82.12 257.1 82.03 256.6 81.94 256 81.84 255.5 81.75 254.9 81.65 254.4 81.55 253.8 81.44 253.3 81.34 252.7 81.23 252.2 81.12 251.6 81 251.1 80.89 250.6 80.77 250 80.65 249.5 80.53 249 80.41 248.5 80.28 247.9 80.15 247.4 80.02 246.9 79.89 246.4 79.76 245.8 79.62 245.3 79.48 244.8 79.34 244.3 79.2 243.8 79.05"/><polyline points="315.2 79.05 314.7 79.2 314.2 79.34 313.7 79.48 313.2 79.62 312.7 79.76 312.1 79.89 311.6 80.02 311.1 80.15 310.6 80.28 310 80.41 309.5 80.53 309 80.65 308.5 80.77 307.9 80.89 307.4 81 306.8 81.12 306.3 81.23 305.8 81.34 305.2 81.44 304.7 81.55 304.1 81.65 303.6 81.75 303 81.84 302.5 81.94 301.9 82.03 301.4 82.12 300.8 82.21 300.2 82.3 299.7 82.38 299.1 82.46 298.6 82.54 298 82.62"/><polyline points="229 73.38 228.6 73.17 228.2 72.96 227.8 72.75 227.4 72.54 227 72.32 226.6 72.11 226.2 71.89 225.8 71.67 225.4 71.45 225.1 71.23 224.7 71.01 224.3 70.78 223.9 70.56 223.6 70.33 223.2 70.1 222.9 69.87 222.5 69.63 222.2 69.4 221.8 69.16 221.5 68.93 221.1 68.69 220.8 68.45 220.5 68.21 220.1 67.97 219.8 67.72 219.5 67.48 219.2 67.23 218.9 66.98 218.6 66.74 218.3 66.49 218 66.24 217.7 65.98"/><polyline points="298 82.62 297.4 82.69 296.9 82.76 296.3 82.83 295.7 82.9 295.2 82.97 294.6 83.03 294 83.09 293.4 83.15 292.9 83.2 292.3 83.26 291.7 83.31 291.1 83.36 290.6 83.4 290 83.45 289.4 83.49 288.8 83.53 288.3 83.57 287.7 83.6 287.1 83.63 286.5 83.66 285.9 83.69 285.3 83.72 284.8 83.74 284.2 83.76 283.6 83.78 283 83.79 282.4 83.8 281.8 83.82 281.3 83.82 280.7 83.83 280.1 83.83 279.5 83.84"/><polyline points="330 73.38 329.6 73.58 329.2 73.79 328.8 73.99 328.3 74.19 327.9 74.39 327.5 74.58 327 74.78 326.6 74.97 326.2 75.17 325.7 75.36 325.3 75.54 324.8 75.73 324.4 75.92 323.9 76.1 323.4 76.28 323 76.46 322.5 76.63 322.1 76.81 321.6 76.98 321.1 77.15 320.6 77.32 320.2 77.49 319.7 77.65 319.2 77.82 318.7 77.98 318.2 78.14 317.7 78.3 317.2 78.45 316.7 78.6 316.2 78.76 315.7 78.9 315.2 79.05"/><polyline points="341.4 65.98 341.1 66.23 340.8 66.48 340.5 66.74 340.2 66.98 339.8 67.23 339.5 67.48 339.2 67.72 338.9 67.97 338.6 68.21 338.2 68.45 337.9 68.69 337.6 68.93 337.2 69.16 336.9 69.4 336.5 69.63 336.2 69.86 335.8 70.1 335.4 70.33 335.1 70.55 334.7 70.78 334.3 71.01 334 71.23 333.6 71.45 333.2 71.67 332.8 71.89 332.4 72.11 332 72.32 331.6 72.54 331.2 72.75 330.8 72.96 330.4 73.17 330 73.38"/><polyline points="210.5 38.89 210.7 38.6 210.8 38.32 211 38.04 211.2 37.76 211.3 37.48 211.5 37.21 211.7 36.93 211.9 36.65 212.1 36.38 212.3 36.1 212.5 35.83 212.7 35.55 212.9 35.28 213.1 35.01 213.3 34.74 213.5 34.46 213.8 34.2 214 33.93 214.2 33.66 214.5 33.39 214.7 33.13 215 32.86 215.2 32.6 215.5 32.34 215.7 32.08 216 31.82 216.3 31.56 216.5 31.3 216.8 31.04 217.1 30.78 217.4 30.53 217.7 30.28"/><polyline points="208.1 48.13 208.1 47.84 208.1 47.55 208.1 47.25 208.1 46.96 208.2 46.67 208.2 46.38 208.2 46.09 208.3 45.8 208.3 45.5 208.3 45.21 208.4 44.92 208.4 44.63 208.5 44.34 208.6 44.05 208.6 43.76 208.7 43.47 208.8 43.18 208.9 42.89 209 42.6 209.1 42.31 209.2 42.02 209.3 41.74 209.4 41.45 209.5 41.16 209.6 40.88 209.7 40.59 209.8 40.31 210 40.02 210.1 39.74 210.2 39.45 210.4 39.17 210.5 38.89"/><polyline points="210.5 57.37 210.4 57.09 210.2 56.81 210.1 56.52 210 56.24 209.8 55.95 209.7 55.67 209.6 55.38 209.5 55.1 209.4 54.81 209.3 54.52 209.2 54.24 209.1 53.95 209 53.66 208.9 53.37 208.8 53.08 208.7 52.79 208.6 52.5 208.6 52.21 208.5 51.92 208.4 51.63 208.4 51.34 208.3 51.05 208.3 50.76 208.3 50.47 208.2 50.17 208.2 49.88 208.2 49.59 208.1 49.3 208.1 49.01 208.1 48.72 208.1 48.42 208.1 48.13"/></g><polyline points="217.7 65.98 217.4 65.73 217.1 65.48 216.8 65.22 216.5 64.96 216.3 64.7 216 64.44 215.7 64.18 215.5 63.92 215.2 63.66 215 63.4 214.7 63.13 214.5 62.87 214.2 62.6 214 62.33 213.8 62.06 213.5 61.8 213.3 61.52 213.1 61.25 212.9 60.98 212.7 60.71 212.5 60.43 212.3 60.16 212.1 59.88 211.9 59.61 211.7 59.33 211.5 59.05 211.3 58.78 211.2 58.5 211 58.22 210.8 57.94 210.7 57.65 210.5 57.37" stroke="url(#linearGradient6743)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="279.5 83.84 278.9 83.83 278.3 83.83 277.8 83.82 277.2 83.82 276.6 83.8 276 83.79 275.4 83.78 274.8 83.76 274.3 83.74 273.7 83.72 273.1 83.69 272.5 83.66 271.9 83.63 271.4 83.6 270.8 83.57 270.2 83.53 269.6 83.49 269 83.45 268.5 83.4 267.9 83.36 267.3 83.31 266.7 83.26 266.2 83.2 265.6 83.15 265 83.09 264.4 83.03 263.9 82.97 263.3 82.9 262.7 82.84 262.2 82.76 261.6 82.69 261 82.62"/><polyline points="298 13.64 298.6 13.72 299.1 13.8 299.7 13.88 300.2 13.96 300.8 14.05 301.4 14.14 301.9 14.23 302.5 14.32 303 14.41 303.6 14.51 304.1 14.61 304.7 14.71 305.2 14.82 305.8 14.92 306.3 15.03 306.8 15.14 307.4 15.26 307.9 15.37 308.5 15.49 309 15.61 309.5 15.73 310 15.85 310.6 15.98 311.1 16.11 311.6 16.24 312.1 16.37 312.7 16.5 313.2 16.64 313.7 16.78 314.2 16.92 314.7 17.06 315.2 17.21"/><polyline points="261 13.64 261.6 13.56 262.2 13.49 262.7 13.42 263.3 13.36 263.9 13.29 264.4 13.23 265 13.17 265.6 13.11 266.2 13.05 266.7 13 267.3 12.95 267.9 12.9 268.5 12.85 269 12.81 269.6 12.77 270.2 12.73 270.8 12.69 271.4 12.66 271.9 12.62 272.5 12.6 273.1 12.57 273.7 12.54 274.3 12.52 274.8 12.5 275.4 12.48 276 12.47 276.6 12.45 277.2 12.44 277.8 12.43 278.3 12.43 278.9 12.42 279.5 12.42"/><polyline points="279.5 12.42 280.1 12.42 280.7 12.43 281.3 12.44 281.8 12.44 282.4 12.45 283 12.47 283.6 12.48 284.2 12.5 284.8 12.52 285.4 12.54 285.9 12.57 286.5 12.6 287.1 12.62 287.7 12.66 288.3 12.69 288.8 12.73 289.4 12.77 290 12.81 290.6 12.85 291.1 12.9 291.7 12.95 292.3 13 292.9 13.05 293.4 13.11 294 13.17 294.6 13.23 295.2 13.29 295.7 13.36 296.3 13.42 296.9 13.49 297.4 13.57 298 13.64"/><polyline points="243.8 17.21 244.3 17.06 244.8 16.92 245.3 16.78 245.8 16.64 246.4 16.5 246.9 16.37 247.4 16.24 247.9 16.1 248.5 15.98 249 15.85 249.5 15.73 250 15.6 250.6 15.49 251.1 15.37 251.6 15.25 252.2 15.14 252.7 15.03 253.3 14.92 253.8 14.82 254.4 14.71 254.9 14.61 255.5 14.51 256 14.41 256.6 14.32 257.1 14.22 257.7 14.14 258.2 14.05 258.8 13.96 259.3 13.88 259.9 13.8 260.5 13.72 261 13.64"/><polyline points="229 22.88 229.4 22.68 229.8 22.47 230.3 22.27 230.7 22.07 231.1 21.87 231.6 21.67 232 21.48 232.4 21.28 232.9 21.09 233.3 20.9 233.8 20.71 234.2 20.53 234.7 20.34 235.1 20.16 235.6 19.98 236 19.8 236.5 19.62 237 19.45 237.4 19.28 237.9 19.1 238.4 18.94 238.9 18.77 239.4 18.6 239.8 18.44 240.3 18.28 240.8 18.12 241.3 17.96 241.8 17.81 242.3 17.65 242.8 17.5 243.3 17.35 243.8 17.21"/><polyline points="217.7 30.28 218 30.02 218.3 29.77 218.6 29.52 218.9 29.27 219.2 29.03 219.5 28.78 219.8 28.54 220.1 28.29 220.5 28.05 220.8 27.81 221.1 27.57 221.5 27.33 221.8 27.1 222.2 26.86 222.5 26.62 222.9 26.39 223.2 26.16 223.6 25.93 223.9 25.7 224.3 25.48 224.7 25.25 225.1 25.03 225.4 24.81 225.8 24.59 226.2 24.37 226.6 24.15 227 23.94 227.4 23.72 227.8 23.51 228.2 23.3 228.6 23.09 229 22.88"/><polyline points="348.5 38.89 348.6 39.17 348.8 39.45 348.9 39.74 349.1 40.02 349.2 40.31 349.3 40.59 349.4 40.88 349.6 41.16 349.7 41.45 349.8 41.74 349.9 42.02 350 42.31 350.1 42.6 350.1 42.89 350.2 43.18 350.3 43.47 350.4 43.76 350.5 44.05 350.5 44.34 350.6 44.63 350.6 44.92 350.7 45.21 350.7 45.5 350.8 45.79 350.8 46.09 350.8 46.38 350.9 46.67 350.9 46.96 350.9 47.25 350.9 47.54 350.9 47.84 350.9 48.13"/></g><polyline points="341.4 30.28 341.6 30.53 341.9 30.78 342.2 31.04 342.5 31.3 342.8 31.56 343 31.82 343.3 32.08 343.6 32.34 343.8 32.6 344.1 32.86 344.3 33.13 344.6 33.39 344.8 33.66 345 33.93 345.3 34.2 345.5 34.47 345.7 34.74 345.9 35.01 346.1 35.28 346.3 35.55 346.5 35.83 346.7 36.1 346.9 36.38 347.1 36.65 347.3 36.93 347.5 37.21 347.7 37.49 347.8 37.76 348 38.04 348.2 38.32 348.3 38.61 348.5 38.89" stroke="url(#linearGradient6745)" stroke-width=".9188"/><g stroke="url(#linearGradient6096)" stroke-width=".9188"><polyline points="348.5 57.37 348.3 57.65 348.2 57.93 348 58.21 347.8 58.49 347.7 58.77 347.5 59.05 347.3 59.33 347.1 59.61 346.9 59.88 346.7 60.16 346.5 60.43 346.3 60.71 346.1 60.98 345.9 61.25 345.7 61.52 345.5 61.79 345.3 62.06 345 62.33 344.8 62.6 344.6 62.86 344.3 63.13 344.1 63.4 343.8 63.66 343.6 63.92 343.3 64.18 343 64.44 342.8 64.7 342.5 64.96 342.2 65.22 341.9 65.47 341.6 65.73 341.4 65.98"/><polyline points="315.2 17.21 315.7 17.35 316.2 17.5 316.7 17.66 317.2 17.81 317.7 17.96 318.2 18.12 318.7 18.28 319.2 18.44 319.7 18.6 320.2 18.77 320.6 18.94 321.1 19.11 321.6 19.28 322.1 19.45 322.5 19.62 323 19.8 323.4 19.98 323.9 20.16 324.4 20.34 324.8 20.53 325.3 20.72 325.7 20.9 326.2 21.09 326.6 21.28 327 21.48 327.5 21.67 327.9 21.87 328.3 22.07 328.8 22.27 329.2 22.47 329.6 22.68 330 22.88"/><polyline points="350.9 48.13 350.9 48.42 350.9 48.71 350.9 49.01 350.9 49.3 350.9 49.59 350.8 49.88 350.8 50.17 350.8 50.46 350.7 50.76 350.7 51.05 350.6 51.34 350.6 51.63 350.5 51.92 350.5 52.21 350.4 52.5 350.3 52.79 350.2 53.08 350.1 53.37 350.1 53.66 350 53.95 349.9 54.23 349.8 54.52 349.7 54.81 349.6 55.1 349.4 55.38 349.3 55.67 349.2 55.95 349.1 56.24 348.9 56.52 348.8 56.8 348.6 57.09 348.5 57.37"/><polyline points="330 22.88 330.4 23.09 330.8 23.3 331.2 23.51 331.6 23.72 332 23.94 332.4 24.15 332.8 24.37 333.2 24.59 333.6 24.81 334 25.03 334.3 25.25 334.7 25.48 335.1 25.7 335.4 25.93 335.8 26.16 336.2 26.39 336.5 26.63 336.9 26.86 337.2 27.1 337.6 27.33 337.9 27.57 338.2 27.81 338.6 28.05 338.9 28.29 339.2 28.54 339.5 28.78 339.8 29.03 340.2 29.28 340.5 29.52 340.8 29.77 341.1 30.02 341.4 30.28"/><polyline points="160 37.51 160.9 37.25 161.8 37 162.8 36.75 163.7 36.5 164.6 36.26 165.5 36.03 166.4 35.8 167.3 35.57 168.3 35.35 169.2 35.13 170.1 34.92 171 34.71 172 34.51 172.9 34.31 173.8 34.12 174.8 33.93 175.7 33.75 176.6 33.57 177.6 33.39 178.5 33.22 179.5 33.06 180.4 32.9 181.4 32.74 182.3 32.59 183.3 32.44 184.2 32.3 185.2 32.16 186.1 32.03 187.1 31.9 188.1 31.78 189 31.66 190 31.55 191 31.44 191.9 31.33 192.9 31.23 193.9 31.14 194.9 31.05 195.8 30.96 196.8 30.88 197.8 30.8 198.8 30.73 199.8 30.67 200.7 30.6 201.7 30.55 202.7 30.5 203.7 30.45 204.7 30.4 205.7 30.37 206.7 30.33 207.7 30.3 208.7 30.28 209.7 30.26 210.7 30.25 211.6 30.24 212.6 30.23 213.7 30.23 214.2 30.23 214.7 30.24 215.2 30.24 215.7 30.24 216.2 30.25 216.7 30.26 217.2 30.27 217.7 30.28"/><polyline points="110.6 61.2 110.9 60.94 111.3 60.68 111.7 60.42 112 60.16 112.4 59.9 112.8 59.64 113.1 59.39 113.5 59.14 114.3 58.63 115 58.13 115.8 57.63 116.6 57.14 117.3 56.65 118.1 56.16 118.9 55.68 119.6 55.2 120.4 54.73 121.2 54.26 122 53.8 122.8 53.34 123.5 52.89 124.3 52.44 125.1 51.99 125.9 51.55 126.7 51.11 127.5 50.68 128.3 50.25 129.1 49.83 130 49.41 130.8 48.99 131.6 48.58 132.4 48.17 133.2 47.77 134.1 47.37 134.9 46.98 135.7 46.59 136.5 46.2 137.4 45.82 138.2 45.45 139.1 45.08 139.9 44.71 140.8 44.35 141.6 43.99 142.5 43.64 143.3 43.29 144.2 42.94 145 42.6 145.9 42.27 146.8 41.94 147.6 41.61 148.5 41.29 149.4 40.97 150.2 40.65 151.1 40.35 152 40.04 152.9 39.74 153.8 39.45 154.7 39.16 155.6 38.87 156.4 38.59 157.3 38.31 158.2 38.04 159.1 37.77 160 37.51"/><polyline points="99.18 70.11 99.86 69.52 100.6 68.94 101.2 68.36 101.9 67.78 102.6 67.21 103.3 66.64 104.1 66.08 104.8 65.52 105.5 64.97 106.2 64.42 106.9 63.87 107.6 63.33 108 63.06 108.4 62.79 108.7 62.52 109.1 62.26 109.4 61.99 109.8 61.72 110.2 61.46 110.6 61.2"/></g></g><path d="m61.59 23.84c-16.29 0-30.09 10.66-34.76 25.35 3.531 5.073 9.992 9.207 18.08 11.61 0.2236-0.999 0.4517-2 0.7141-3.01 4.836-18.61 14.68-32.45 23.06-33.26-2.297-0.4522-4.67-0.6929-7.099-0.6929z" fill="url(#linearGradient7043)"/></g></svg>
diff --git a/share/icons/svg/username-copy.svg b/share/icons/svg/username-copy.svg
deleted file mode 100644
index 3a6f056f2..000000000
--- a/share/icons/svg/username-copy.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter id="filter5704"><feGaussianBlur stdDeviation="0.90323211"/></filter><linearGradient id="linearGradient4739" x1="398.4" x2="392.5" y1="-369.5" y2="-363.5" gradientTransform="matrix(1.181 0 0 -1.18 -363.3 -328.6)" gradientUnits="userSpaceOnUse"><stop stop-color="#888A85" offset="0"/><stop stop-color="#8C8E89" offset=".0072"/><stop stop-color="#ABACA9" offset=".0673"/><stop stop-color="#C5C6C4" offset=".1347"/><stop stop-color="#DBDBDA" offset=".2115"/><stop stop-color="#EBEBEB" offset=".3012"/><stop stop-color="#F7F7F6" offset=".4122"/><stop stop-color="#FDFDFD" offset=".5679"/><stop stop-color="#fff" offset="1"/></linearGradient><radialGradient id="radialGradient4743" cx="407.2" cy="-379.5" r="94.66" gradientTransform="matrix(1.341 0 0 -1.34 -433.3 -393.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#535557" offset="0"/><stop stop-color="#898A8C" offset=".07095"/><stop stop-color="#ECECEC" offset=".203"/><stop stop-color="#FAFAFA" offset=".2363"/><stop stop-color="#fff" offset=".2722"/><stop stop-color="#FAFAFA" offset=".5313"/><stop stop-color="#EBECEC" offset=".8449"/><stop stop-color="#E1E2E3" offset="1"/></radialGradient><filter id="filter5749"><feGaussianBlur stdDeviation="1.493351"/></filter><filter id="filter10509" x="-.03181" y="-.2679" width="1.064" height="1.536" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="1.3951513"/></filter><linearGradient id="linearGradient3774" x1="73.08" x2="63.82" y1="74.84" y2="72.04" gradientTransform="matrix(.6773 0 0 .5993 29.45 47.4)" gradientUnits="userSpaceOnUse"><stop stop-color="#fcd9bc" offset="0"/><stop stop-color="#fcd9bc" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient3776" x1="53.36" x2="68.14" y1="70.57" y2="76.93" gradientTransform="matrix(.6755 0 0 .5976 29.57 47.55)" gradientUnits="userSpaceOnUse"><stop stop-color="#c39577" offset="0"/><stop stop-color="#fcd9bc" stop-opacity="0" offset="1"/></linearGradient><clipPath id="clipPath3705-5"><path d="m341.2 409.6c-1.513 7.202-5.741 23.4-0.5 27.25-0.6465 7-7.079 9.644-15 11.19h-1.5c-7.921-1.544-14.35-4.188-15-11.19 5.241-3.854 1.013-20.05-0.5-27.25l16.25 7.406 16.25-7.406z" fill="url(#radialGradient3709)" fill-rule="evenodd" opacity=".7491"/></clipPath><filter id="filter3694-7" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="1.640636"/></filter><radialGradient id="radialGradient3778" cx="324.4" cy="396.1" r="22.44" fx="330.7" fy="384.5" gradientTransform="matrix(.5299 -.00148 .001724 .6172 -100.3 -173.7)" gradientUnits="userSpaceOnUse"><stop stop-color="#faf0e5" offset="0"/><stop stop-color="#f7e7d6" offset=".3801"/><stop stop-color="#ffd9b9" offset="1"/></radialGradient><radialGradient id="radialGradient3780" cx="303.7" cy="397.2" r=".7962" gradientTransform="matrix(1 0 0 2.577 43.13 -626.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3837-4"/><linearGradient id="linearGradient3837-4"><stop stop-color="#f1e4d4" offset="0"/><stop stop-color="#f1e4d4" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3833-7" x="-.1593" y="-.07169" width="1.319" height="1.143" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.10560268"/></filter><clipPath id="clipPath3572"><path d="m63.01 7.399c-7.823 0.2061-16.88 3.892-20.02 10.88-3.206 7.119-2.739 15.62-0.8173 25.45 1.922 9.828 9.237 20.05 12.44 23.75 3.038 3.505 5.93 2.871 8.399 2.796 0.1265 0 0.3041-0.0041 0.4401 0 2.469 0.07548 5.361 0.7089 8.399-2.796 3.206-3.698 10.52-13.92 12.44-23.75 1.922-9.828 2.388-18.33-0.8173-25.45-3.147-6.989-12.2-10.67-20.02-10.88h-0.4401z" fill="url(#radialGradient3576)" fill-rule="evenodd"/></clipPath><filter id="filter3568" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="1.7299525"/></filter><radialGradient id="radialGradient3782" cx="303.7" cy="397.2" r=".7962" gradientTransform="matrix(1 0 0 2.577 -372.5 -950.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3837-4"/><linearGradient id="linearGradient3784" x1="76.53" x2="147.6" y1="64.51" y2="13.94" gradientTransform="translate(.3)" gradientUnits="userSpaceOnUse"><stop stop-color="#844d30" offset="0"/><stop stop-color="#844d30" stop-opacity="0" offset="1"/></linearGradient><clipPath id="clipPath4030"><path d="m116.9 7.399c-7.823 0.2061-16.88 3.892-20.02 10.88-3.206 7.119-1.731 15.47-0.8173 25.45 1.352 14.76 9.237 20.05 12.44 23.75 3.038 3.505 5.93 2.871 8.399 2.796 0.1266 0 0.3041-0.0041 0.4401 0 2.469 0.07548 5.361 0.7089 8.399-2.796 3.206-3.698 11.66-9.558 12.44-23.75 0.5518-9.999 2.388-18.33-0.8173-25.45-3.147-6.989-12.2-10.67-20.02-10.88h-0.4401z" fill="url(#radialGradient4034)" fill-rule="evenodd"/></clipPath><filter id="filter3741" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="1.8223876"/></filter><linearGradient id="linearGradient3786" x1="66.72" x2="66.72" y1="29.97" y2="2.324" gradientTransform="matrix(.6311 0 0 .6386 32.2 46.11)" gradientUnits="userSpaceOnUse"><stop stop-color="#0d0602" offset="0"/><stop stop-color="#28180e" offset=".5"/><stop stop-color="#79523a" offset="1"/></linearGradient><linearGradient id="linearGradient3788" x1="353.4" x2="339.8" y1="390.9" y2="373.6" gradientTransform="translate(-372.5,-324.5)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3581-2"/><linearGradient id="linearGradient3581-2"><stop stop-color="#dfcbba" offset="0"/><stop stop-color="#dfcbba" stop-opacity="0" offset="1"/></linearGradient><filter id="filter3569-8" x="-.1149" y="-.0868" width="1.23" height="1.174" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.6238629"/></filter><linearGradient id="linearGradient3792" x1="66.72" x2="66.72" y1="22.19" y2="2.324" gradientTransform="translate(-.1897)" gradientUnits="userSpaceOnUse"><stop stop-color="#4d2710" stop-opacity=".9608" offset="0"/><stop stop-color="#79523a" offset="1"/></linearGradient><filter id="filter4064" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.4247976"/></filter><filter id="filter4219" x="-.04" y="-.1071" width="1.08" height="1.214" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.71204002"/></filter><filter id="filter4485" x="-.2702" y="-.1229" width="1.54" height="1.246" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.33028573"/></filter><linearGradient id="linearGradient3794" x1="-99.53" x2="-99.53" y1="101.5" y2="153.3" gradientTransform="matrix(.7193 0 0 .7193 145.2 37.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3225-3"/><linearGradient id="linearGradient3225-3"><stop stop-color="#fff" offset="0"/><stop stop-color="#aeaeae" offset="1"/></linearGradient><filter id="filter5331" x="-.1468" y="-.07471" width="1.294" height="1.149" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.93729515"/></filter><filter id="filter5171" x="-.1985" y="-.2222" width="1.397" height="1.444" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.78085914"/></filter><radialGradient id="radialGradient3796" cx="64.16" cy="88.89" r="4.696" gradientTransform="matrix(.6773 0 0 .5939 29.38 50.8)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5025"/><linearGradient id="linearGradient5025"><stop stop-color="#c92424" offset="0"/><stop stop-color="#9d1e1e" stop-opacity=".9804" offset=".601"/><stop stop-color="#711919" stop-opacity=".9608" offset="1"/></linearGradient><clipPath id="clipPath4734"><path d="m-114.1 75.97-2 3.375c-8.209 15.65-3.267 30.8 4.344 44.72 3.222 0.0667 6.31 0.0969 9.062 0.0937 0.4879-5.5e-4 1.031 0 1.5 0 0.3359 1.1e-4 0.6872 0 1 0 0.5038-1.7e-4 1-5.3e-4 1.5 0 2.698 3e-3 5.724 6e-5 8.875-0.0625 5.587-13.37 14.31-27.24 4.375-45.06l-1.844-3.062c-2.571 4.488-7.164 9.436-13.41 12.03-5.3-2.351-11.59-8.492-13.41-12.03z" fill="url(#linearGradient4738)" fill-rule="evenodd"/></clipPath><filter id="filter5019" x="-.06047" y="-.1013" width="1.121" height="1.203" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.91517985"/></filter><clipPath id="clipPath3538"><path d="m46.95 51.15c1.57 6.607 5.957 21.46 0.5188 25 0.6707 6.421 7.344 8.847 15.56 10.26h1.556c8.218-1.416 14.89-3.842 15.56-10.26-5.438-3.535-1.051-18.39 0.5187-25l-16.86 6.794-16.86-6.794z" fill="url(#linearGradient3542)" fill-rule="evenodd"/></clipPath><filter id="filter3531" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.84705419"/></filter><linearGradient id="linearGradient3798" x1="-100.6" x2="-100.6" y1="61.74" y2="100.2" gradientTransform="matrix(.7193 0 0 .7193 145.2 37.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3733-7"/><linearGradient id="linearGradient3733-7"><stop stop-color="#e2e2e2" offset="0"/><stop stop-color="#fff" offset="1"/></linearGradient><linearGradient id="linearGradient3800" x1="-100.6" x2="-100.6" y1="68.72" y2="95.66" gradientTransform="matrix(.7193 0 0 .7193 145.2 37.61)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3733-7"/><linearGradient id="linearGradient3802" x1="-88.89" x2="-88.89" y1="122.5" y2="84.12" gradientTransform="matrix(.7193 0 0 .7193 145.2 37.63)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4784"/><linearGradient id="linearGradient4784"><stop stop-color="#2e2f34" offset="0"/><stop stop-color="#3b3944" offset="1"/></linearGradient><pattern id="sand_bitmap" width="256" height="256" patternTransform="scale(.07603)" patternUnits="userSpaceOnUse"><image width="260" height="260" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyEAIjEjMkEUQlFh M0MFJFJicYE0U5GhsRVjcnOCwtHh8P/aAAwDAQACEQMRAD8Ar2yC6nrRLre36+zv8FjfJLYn0bZB gQtC2h3u4oHp+yKrW0NbD2BMsbb3w64E0YW+XkMeAhurjgABgAqKg8D+wPiSrpH8dDjAu7T5aNj0 2SsC7aXa4dIVPT9c2MJPRa3wZBEy1IVJQAyq2sEECns9ls+KN9Jdqv2Bgfl9gAfowVFHg6/gWo1U jP03kqf4TW7CYVbOcPmuSxLKK/H62+HW6fLHh1RDH74h2Z3kF+7xvlXI/aIAA58f8+Hwrcp9cviv e5eVVtJu6SSiMCS7I9esn8L6QUKGGD7gnsj5+OD2n9tOLdQE1dXZqzOOwSrjlugD5/nwDz4yRyYT GWZ2dIzIkkfpSNAtbIViXwu3s0w8cfmRLG7wPGmCPNGS2WW45He/gY320LNfnp5J490gZeTm1LDC UPYKGky9N92WQY4HbTQ721qgMOC1zCGnuBCZ8Cj9Q/A+CoaHtn4u4OAPeAAMG/4vi7NM9H5VoJ+o e30rsPlWo2sJAxhIiB2hN55FMEIb5ChrYcc4QVKwIFqJ7N4sZwfm1oo/gPAY8B6WNT2YDr65DJmv baJZzkHq7s+BsIephyh/s3aHdBwcEOGHtRgmHOHwJ3BidNtAwYj9rkkF5/3+/dSNZ0W0XJID1LX1 V0m+SnugYkgAh1OwmHIUXlRf5wzqEtSyEMehqtD3BWjwyLPZtXZhjw7BLR/6H+fnj/UncR4zxzOr yo6ahDD2LAcNwpIztHNXGQfTnHtqsj1IizrLpp4FKRPC8WdHHh8wCoSVMqUkxyJddwahSUjq9fz6 fmD7frGNTK27RrNkaM7lresnxyQ7BfAMMgYmCE9kUB2+VKPfIKejPKur8m4T+/7+A+g4b/2HEdwz bMvJzxuC/kOlgNXJA8lWVftn8NJRhsaKYH2TW91mA8xh/kB6lY0zc1doJowM1VxsHx8Agn+A8B6Y T44ajHyv63zWjPsh8UgLIJTlUbIrKbV1XsLSBQx0NDW4b5Mr9wg8/nnENmRigp5RvzYk7B+Xd/8A Pr/ZUczLV6farQgVLV3zzD/YVHuAH5aeBKCYoFwXjN8J/wAOtyDh7kFKCtoyNyizBm9hQlqVDbqC ffj+D9ifYRKqxsxf1JFTCNMkjv70yYyLIPtaSSWucQOco6wH04Ux2kdmkZspJKwAV8QkQx5oxxJd nLLiuOp7QU3dXsIC2vhK7LGsI3dzxppPWwwh7uKUNbUWYQXLIZHD8f8AB21fbVXjTM0CxiMDdnc0 DAP1B1FwHYH7AqrM5qFTazG2Dm1utmFxxN3dHtS2k/uR257N1KH+GHrdDwQ+SHK07lnLgwWSlNsw xHpMI7bAA5/ivnz6Cgit4PBCwcwzb4HFbs5oW5K9dDsBaFOq3yLXtc02yVet1Wt2oH4+Ham1gAg3 BZrN83TY7RduDoPPsP3/AKgbwHslg2o1WqGuZAW4tqNpap2qZHbA+nOVLVzwevw7IH1IB6THGEdD r89Bhi3loFE2b97w597f54ABkkZpSxZ33akJL5xo7UHijehnhxk2KXa0oHUiXEMmSJg5S0jrOseS MzVX4s0CeeoEdl1PKrMwBynBtGq5KNp7IDcn4nxQPfgWyEE+G+La2tkDBzkEBHrf2ab4Gk0c27c4 2B+QQHn0HrdYGXDq+4JkCxk82H7wVLYKuSiODuYV1evHxoodgZEMPzx9HmAf7HtgxDFszNwnm14f rv8AwFBwAdiu6B3wxUsAo1v82xnxkd2gOnj69Q1eLLPSltgrdP8Ah2oyD2SuQJHvgYWVkXxnfAjt SZz9/wD7BhPtge6FwpdibVWcNVQyS2ryPDcVdshlJbDXJ5bsCtzEwNMD1/g842fbUEwzoyu0LNQH OEuxzgOwAP39gaiuVRvObqlVhqIroX92GX45yI8iupuJK0jOMcc6F3e2I7+B7sgP145vhg0vV9d2 WLtoW0WTGVK5yadbHCt3YwvMmnypbC7Sp6/al2p4dDtSv1uCeYENGuAn7/ZvdISQZ/8Ar4+AAPy/ WlPeE/tWktr5Dwo1Xs5tlh0myLYqdkKUjYe1w18OyPlDhw49bnNqfPgzMVkoLZif9bdogB/wGL97 2ET2tkr6liWUGuAlErSwgktgtSq3BeMNCuvFLkW8A8yGyQ1tPZEcC49udsRilojNjCJO+cBQff36 XinDqsWYcE0XqEbZlXje08hquaSWMNErTgh1fMIQ/eYt/wA4jtrABBzNsw4KT9tkeMGA+A+/e3Sr fZlWR8N2Z2QKM5HjGGLxpa5XZyGQxAXk3wJKrTRrde4k4ovtrN6OF0a7TZDfjqxcN0cBeY4bNVZJ PMmG22VdPyR9hTAKawlbGhjzCG4B/r7JBn19WjUYt+31dX7QdkzZvYN/4DboDgICqINstBI07V7R YauCcO6Upttgw1NTxZr5LQ0jfoZCG+TIemPh8PssngZ3BsWho5zvfCd/2Df9/PoPR5UavX4GPk2X aF5OyHdwdlE1+yDWBecKv5YeoeGwGFswYmMmzg59X74H4wLaBjNvdXeA2AAf8Bh1DvkiWkPhJNgV KbsKkYcnlFe2E4cbq8WWF/DYFtwfFuGtjzEFtsDEGyowx8fBhPukE2NB/fwADwBQiNZsCHldKdlR L2a8TGmOWFmk4ys9w4JGTcC9vYknGfnNODImPGN2vNn/AEPQ2tslfxYeynrU7M1yHpynHiHnV+Jm AXxIcnKq0+h32Yth2S0DDUer/UPVbJ9oVyZM4k1cEOIP0FB6YTQv2AMtQbWmqB2W3y7qZGlmB2hj 9XbKAV2FolIfez5kNwTx4Z4Pd6fhjHmr/wBN8Cef7RH9/AbAAG6PpNDqWHXzGr2Rv2lWpZLZHhu1 gpNb20m0NY1jJ5Awth3DkifDOHSLbO2ysyqv2ztRJSTZzE/v+H0E+AUuWhpaQhmEdoT7kJKSQt6h cENPYJaHYybXt2lDCeYQw9Vw09gW2rtf9wxJvnGWZ4CBDZz8Rffl9+9xZZvQGSN6KRbkMe3/ADVw kubZxjD1YsFzJQZKOiiZMpW2nGb508255+B6aVVcnnK/iuQO/JmXXLBMqWK1O0ym3xtr1f43J+GL tpI37j7JiyGOz5AxOn8ReDAwntiy8nMceD8AP7/+/gPWLUhYF6Wqhn59yEhum+6XwIWRzFhVRU8P a7DpF8qusA9bvkO+GRg3zj7Y1J9G4WgLrMm8GwiSbt0BsHXnvlo4sWLGvltKpJPSGRkYa335IU0/ dKyFvhjjbhM09hzKcHBnmACD3Pa3wmso/m3jf+AoJ/gL8feUxHvTTwLuyVPh/MrkapS7A+GwMK2B 0+yxbQH5gZW5gfvAHrqfZ75R4cmzfrWe9u3B+AgH7+wdNYRNOuWazKiOGKemmdCo3y9S8O44pjxw cuGCN49MxkCHTtMquQ9yK+nrNWjx9GRTKu1Jk9W3b0jUNluNIq8bX2oIlaIEytqVhI9e2pR9mmKv PKcpo4/MMB5kOaQmc834J+vA/BpN2BHgAffQB9+QOp4oUj0YMsg9TZi4zGahu9hMCHnGOz55o2H5 jBMMGXxDmYMiq+bBOT3ni7R+KrR2Q6APoP8ApFsB88F6mL007tFJ2rX1nUBarbZC2kMHCCC8HsZX lyhcNwqtDhvictr6fOQ7QAo75xlpQ6z/AN7Y7/sB/wDz60ttmB3JH1gdy9MbYq3S7JK9H0+NSfw8 XKpGUh2QwTHx8oeq09ghzuH8H/GaHaKMMOOxsJsIDYAFRPp/pChhcLwu2mkqZpz/AHlGMldsZqL2 VbHnIMOFx5Esx3HSVI3VyilPRAxxs1353YIHGNfdn2myX3MsuYBtqwdS1tZKk4VdWUdkGuESq5V8 WEeiGNQOzmEOqzFfrYLVLcAF5sgmTfFcY9PARJpN43+3fP8AAUEAEx3BPA2w4ZtjGKUtUMt+Yzv4 d7N4ueiK8rbw74HreyE/S+HVW2r1Kuds4GLrMmDq7TxSfPwL9h7c+2CHTx5SkZie25q2pMunit5K 6QW3ZgiLcUDwMpW7A4B63T3xDYJqqPcLLo9bWRnKNs3s39+7ur9uH6i6gSC3Nrlwya0qAPvAFlUb CHt5KSkTItjCRcWyOYLbI4Vut2An8Dx5wYRka0GgmMtTtd/UAD8uoIDpjIsb4Rj21hH+bCk936of B8/A6EllfdkXEGtxiadaxxzjo4/IXuN0R5HMjiVoeVUbqrW0cOAldEsji1TE15TY2ipbtsa2rHAO L4iRLg4enU9t9aHTAu3iiH6VgJi7JWL93e386voTBh9rOswi5mKulB8ZCQF3yalsJHJXXcDuhyUM tbabzBbrdbW7HDp5gGpJ9DQbIRlm0Gjc3h25vh+In4AA5AwPx2n12LMolzGD2oNSZM2JFr2oD+l5 fYb4PXGw2PEQ0/jWpun6TxtHlaliQgw1pnFlBeB3wYK3vdCfULYAAA31UTNN9l13Q4YVTJvSvArF JXmhqZLAsyIrnrY1BRa3p8PD+uQ8bI8edBQyaxuhPfDlouxz9UH9T58+vezkQEOoe2jCLubchx3X Pct7tpwcccPLX014dtCytSTHT1A4IvTvnsbsd+FqTDuN5MOCOUpRZ05WlgWQ7VeyaqtOua1Dl+Oy LbgVDi3N4PU5MToQeZauKGPZJ+kxw9sCXeQmj4PBo2EeGAAfww5Bj05cut67FWhkmRbI2u0+4alb JF2Oy/FhvltMJ60Fuv5l8GHCbD+YqvloqTUyDdQotWqAYj2ibCHOAoL9sC/z6oq6uCOU4utlHNqU oeUkxi25GK/ELdjJtgi1eH7vn5UDj1uCeHwDnaB57oDBmLtSYT9/P7Bx8/04Ed0IVBDMLcXFJsIp T5PvQNr3UAWfGgX8qKYT9ntStoagw+/IENV2ys3wqzDHje0r8RYH/wDPfykTBvqIoc3aERuzSxK7 SJjsyu8rx54ZSYoq8ZG2Fi1xFmRFdqTTupWT/lxsfVjq+d7FO+xjt+1i3QfeFgR7Lp92cldJpOsW hVUkghXqewLy3UqGkWNXKHaD7MhuFwPjBvkBvtqufvKvpfZyYPuib7uvz99+Ae2EbHq900tOFb02 m2ENfNZFesvdAC+acGxbu2kXer7Qocjg3iE9bmVhyqfYCmcMExhRDZkY4lG9O5xg8+AxAb+vs5sH j6zMMsqoLCNpGbDGlk+zlWQpvkWXE5QtuCe4Mi2yWoP7cttfvuzsxMWhjN8wxCHACDz5A9z/AEEr dLlKWsTm9VLdAh81bpxIR7OQ1eWYixWza2Rfh42mHZa2HrgJtHwHhkWUYoLRmZ4NpOx8+38+AQd/ 6IPI6RkN2cYs49c5SwRneW+Mdy055AYcXYopGSpZbmW9wg5RtYXHF6GVU2XaKNddjhMT8qQ7QMrO jW07PjJ/D81YUOwuEoW2AXxbr9cMUPD2ZwZAc9QPPBgmMaGju+j/AIu2AB9/P/5klgLY8pHpOxtO VzWRdkUxUrYv8kYK9cO16QU+YRw7Vw0O4GBkBgbgrSBtgzjHnEn/AH8fQfP+fFcyyHQoCW3fNGjY dLB6KU0d2Q4zEtgUNhPckT09kDmGSYQhwUOBdNOrayMF+TBmzfBz78/7AggH7qNtyGKDVgHbRfCZ koxJ2/t68WE4Jp6srGFbfMDLdwODJxvgbA+KvBhlXlHjg/NgiOg/2AAg4dCgYbOYxdclwuwkYMZj S6F491mhd+BXRllZJokjedJMDnGZQ7Sc5usMcseWfbwznDEAGyemdWdgXZfqFZyYLJEgKaZNqa/a j5S9I92k1dqXT6h7Ot6kDD4nv6HO7Pnwd2M3dCh0ZZB2jVxtH2DgP+rwDpbslgQ01Hh90M6SNQw5 uXGJO1f2a4yrG1Hi651UJ9kTLIMUPw+yUdD5aDW1lmKU2zM29hODn18Bbp9+Xz9RdM7vAUsGo74d wN8EtJZQ9TjCwWcyVf5Qo7vlXw19bMUPMT0PkgNDYLaCGOTq6vWfhDfB7dPn9/8APH+g/T22QndH zmPKrHTwNimI13UuTDv68yASl86c7k7X2Qh3wnvhghMgwLAnI4e8llXtAnb7xaPNnjYOP+3uA6WF iYxSO2yiTRh4YJbj08nOSBcVv454LUTXVqrs0q3DJhC/v5L5BP8Ahx/Vw/kn5XbiV5e7HA2201aH KP1B13i9hEVusAPukfIHOXob9LdT8gjm1haevVOyAls+h3tA2Fxz3DOyk9pdTeTLJo+Wsxl5fVEg erLAnOvJ6yb0qfS+2zquZNEesPH0D8mJkhCFK3RJTUctAWI/orkrLjLPrppuhBJcRxR2kL6xIkt8 MRDFQREjJxMQCkqVnTcP7Zv0dUTFfpnb8paYn+T5FH//AHCB/wCntTNpA7MAzPvAZE0S1bTVZ5qz XH46v/IOXJY2n/Jsu7uNzJdkJLvAJB2C2DFS6lsbGPLY8PMD7w4ckrn+QnLZO8vxmM+7O6Mfxt3D wAAAfh08XXenO42pDMp5KHV7GMuORtshTmCxaQrvie4B+YXYHW17lVSEKleHCoFl8VyaMd4T7oP3 5B+/AOgnTm65+pDBlGQaNCF7fagktHSaxq+vocpWuJyil7AMfqtslgf0+pVXxn33NmvBJ2TgNu4v 2GCDwEAzrMX1tjOElJu063Gt5qqbYav1FTLAXocopyiua343DMPt2ByF2I8C0La3gZxfbCXhEmqz 58BbvALdQUEBUcuw2AbJBStJ7dtFI20xtsqt+7JQfxfPTZAsrZOUzPuZzFHlyoFCKFLrm8i1XQqz 0pQ7RmTx5KyzNYxhtq5CS77xnSKnmOUVhq8qhjoaHMhp/MFqch3BWn+r7RyYnwnHEHsAA+wYn/AB NgENVGkGxDFQJrhUqemklKwqvaj2n8sngebq9y4L4e1HAPZEPEPg2/AanzxYt5Wfwm7gwH34B+p7 p2VnD0xuSmSsbW5cBvODV7Vzu0Lcyhy3PHKwjtSp4+kmRDfHzAgycD+f2rWSenOryfBki0cTn0F+ 8+fAdLF4qcO5UuhhothMjVFmG4iQHQ1+pw1IgZaHY1PVfDcDOm8xuC21gSAGx2QZWZRXJ/hM27Az /gMPbDf4TFqJHV88FxbF0ygeQcRuDb6bUbVPa1JgH8rl3LIljQIpT1EQuA9yKjcNHImIwy4IbJrx bjt6cwcWjz8tb0yMeopSZDJIap59zXK47xF0+1kBQ6rX63qtat8xZDBMOcwUoKG8jNrRmZHCbJ5/ H3Pn18/0bKcNkXKztruNnMlDq+TGs14GgKfiBz0V3lFHDmFV0myzK3X/AOQX6WnMhNGFFLfZnh2N 8H8BwE+hYoOKTrdoFmcvSjXJqhwlnZVb3HbKdDqZf+GBlXyLtB8ILb5ySaHXw+/OEA4h8ZuRXZsT nhAQDgGP/tAkCHKGRWq8oSQLgPXBJs1HMKyOXuADKpwor8gmLYeZVfMA9V2XaCiq7YzK4vcznCP7 /wDQfsHUKyoxkUueWLq8eAZxLJE7juf3bSnGuzgW3npjd4RWZGdaBdGytGigkjQrQrb3WUNkc/NL 46MI/r02LhSYGaKxtG7AS0g2EjkgKfDmoloMVilFt/2gPM/o6dArCfgyIwspj9485jv/AB/2PIOw LEfMrhIvtVi6lWWKA0tO0WLX11uOm+Hv8qIB4GPMJzInoUvFjtTGrp8JPw3R8eRrwb3s5z73wfvZ BQGcjnHhjRwLu+DY1zJqGSLcwAsEQOmxZe/B0CWYcDDg4OAb8gHoEMYsq6HUDMbdqudvv4DYAKCf 3+SX8ul4tNnlxDrFkfLWMakIjQYabf8AmW0BU0NDMMENwreYYT+HNW3zwkPbOLvIwG7Wib3/AH8+ AqLYNgZIGyXMYuXRGS7MM4oA5UMtuyapcshytcrWO40IMKotyq1bW5tYErVt/iHcCasGjYpA6dw8 NNtTO08VUk6S7CynYavK4G4Lw2c9pzXmj5hAO4WRMD2RX8ycpOCGD7ZvO1rLz92NgwP7/v8AiA67 I4exCinXwHNrfHOnzLRthH/iQ5EYrm5buuQCyL62HDmJgcehtXD/AJyGsvNXtAsYDCJJsGA38/yD f+iSyEev6rR85jF8bVQIEYWIHocdehNB4SB2cgY5JDZP9hsGMGYsjFcoTJ7IEdgePgNg+g9btRGY lUEYfGiy7ySUnvkbEmM49V7CyPlSlsPh08tuC2hmFtPwR+4Flg2TFmKFGZGBhEk3+rB/QP36CWJg KCNjUsSxLUk20FyVYlLyN7l5RXwsWORZRoVjAt2co6Or7T4Z4UQZYn80bAC2ByTQpnMjwr1e2Zyl cjh2lrSt+3oewnCt9PcOVbS9XMWt+BsheZNh7xBn2gBeIaysvgsmNeDZsI8c+fgHH6i+/Nogl1/l Ph5XSLsJVlWo0aw2hYTJZ9OWm4i9PbRFZON1At2oYhj1tV7wXS7w1nlO2M6OkpJvf+PnvvwDB+Rl 6ahUOeQSQxrJbXxSybRikFXOMKYZ8sa4wJ64CFjrZgxxBP2NuvA9XMxGWVf6Mc4TV3d0AAP7+eAd RxBsR858uCvmi5kCyKMmDYkfOtSp6cMVKeYXIAtuLJ2HhmE/h7U2p7bs/JnxXsz97uyj9/fwHsAw Pvyw8jGKaUppnLrJsyGKWOSMUELbkLZZc0AFx8HPIYtYxI0mJ3Yo8VacDbkSQ3kiG3xAsWec+3ha 5D1Or19ysysoCkhxrzsF2By2B8oHUBYU0XKrIAmrZ8PcFbuDInjw6PuGxoYx55Rxg4bCef8AAAN/ 2DpnVm8r6bl2ohnmq2nZoGxrCHB2m6F6YLFrwGJ/qQth6T+yAwNwfT+M2gU4Nwm0fff8F8ByA/j0 BtCG+Ntf39muSqNrEeq21YY8ZMES1ooeLXKLDj63MGE98W09k/iHT60tSHwZDwGLPNvZ44D/ANNg 6YVTvmYhsA5IV7ISSVl6b1thYK9pNfEoYsp/FA5cfpMOyMoeyKfT1V8r9Sag7NzxXGW/+E9PDxyB Aft/oTrKyTSNMhl3UEixyfUNFBq0khmhkZS0EKRp7QtiIWWuu0Dq4pY0k0yg7GoO40eQyj2zhTvJ xhn8DBvBs8X1Xts4X8gwuHsmyE9ymRZa/wDkCIyxVdhioYf8VOHzC7hDBvn9SkyfFyfOHbzj+AAA AB/FBP4RpgHYgZTD1ouX8bPZR64xP4YD16txT6RaBSGv44uCfDmEFu1FK8PnBxgxDwWd8STZs4AA fofft/xajAnuGUtsosDMk1jmgSVZODhalkO8zGm6nPRQ6+yU/DuDZ8Pg1L5x8J1nTbQU2PZTZx+Q f9v7/wBYvmKvcmDOgT6TNh9hCe1YnzDDMsY8WAlA/A29Dh6kIY+Z8/YYVb/tYyoObf2DYMcP3/oA MInJd3vCszeNEeP9b5/0H46zgBJQYEeTxhmu1uUVuuXqqF+eW6W6uDsjNKJ567r+si1BlnfET3wC rsM1XfBIt8ML8xbmODIYHzIMDfmoPwa5GjnJw2Edjn7Bz4Av9G18DylQZk2udSVSv1Y6h1UJbFoM mTqQdw7ketgC5QuHrnau4FtfMI54gBOe35QRkY47OwR44CfAfQefdJ9beFe6Y/xbBtR2uCLW62JX jK3W9OODRUrYrtDJX+K3T9cMifTzhcVD4tqPhudotCMz72b4OfQWA/4BBP8AVtK/W83WRYiSuWrD k2dzBkr1w7Vp9sPpRoE1fEMsG8LbJaj5YMz8gNqP7LOkt8eiYPezewoPIEF+PgH4/nlbZ1MItI6h T3viIOfApTuZ/rbxKA2xYU+NdzTBkkzmkl7gq5benNf8Qchs7XO3794M9bW3TqRDtHMDK6fxKwhp iVMk0jHMODhWXxXzT0UlmE9kMfRFtgtQ4Ar/AAOLaz/QxM5aJz/rwHfz/RWPsRLgC0OekGFLN+GS Ex0nJX1SZKV+ecksBbMGJnJB8ztKQxnY/wBL4+wRJCc+X9//AH8/i2tRFTzIpRPuQMkyQKbqQQLY tCjT1oO6HKi6j6vVw/MA5hbMJ7AhtSHcE+j5iMM9mZmBm/B7+ggH4Bz7gNS8swwWMyh9hDxmqA4E hK+tskgsYltFTi32HX4cwHcNnX2Q5ZY9S7kYVA0WgMWcPOHAGwcBPgOfH9ajCIXKjIeWdztlMaoV 3ZlrPytUPNmkMuUh7Nu3jTzleZIy8L4rx8/kddhiRlhqPmFA1kBEl3p/VFp7q8PeVgr0O+IqnQ5T cHBDZFvSXNT2TYWAC87YivlojBmx9kzgGogHd1Bfv1uAvj5ikh3NaCuh0mngdaS3E0j39WNr/MlR S13K7gwWRDZNGaeh/MVe0ClBsgmTV0OzMEc3slHnwFu7A/AMMX6tLYplHx0W7MfUNSas6n5Kmrw1 tHpxDq+xnem4u4WQH5gtwqv2OBV4EHgMWSj4zLPNv38/sAA+Aw388rPLmGWDOMgpkkxZeTGsK2AO lZGYWSxtQS9UrkHsBwMJ+oS1Fth7qT3Ch1X/AFkKLX5swdjiCAP0G/Px4+f6zPzgU8QsuEX/ALik GWPP/L2U2POQ7QfLAhXtzzfhiuOOMbUI3Js3uU5K0McCbOVCuk0owafj9M2/VTI2nnEmbiSKOfGC WHqYo27FMYPmU8n2pjX4exq0wUmpbJ4XIrswwHVxvfD4B/fgADYOnmlnA554t88BZKufLLslliL9 kV6Q+YKcpcWVZFH8DMGFtbT2SnSDABeO7+6Pmnonwn7wAPnz6CggPY+kzjYltrINAudejbgxcJLu 8WpW7REcHyLLaKvDsBiYYhsjJiyPF8WBdMFkp/gdoVnZjxvf9ffQaiAcBAM6HHdbW1GUnedyO1kW RKmVukB2TJr9hre0NX1ZSqvQ2APMcLgquYApPYWDfFsmUQnxm/e6ueP07unkAAfwkm4rZsqSIIcc 5FDSbkZBjRmsZbtvRoFMDw+XbI/bgO50mDrGvMksE9XKi/O3tcpfOY7l+W1Dpc4Gp+YBgQ1Jb2F/ YTBh2V+SASks8VDj5jJMp+GHIBziH8DttZizfDQTszCrrROe3u/VEfPgN/WItfMNpXBcigXZ8uQC ciMFbpIfH+IJpLIcXTen3BQ62HT3xfhnJ/LUfc9raLMeXhJ2MHUXd3nx/YAPXyY8UfZZBJFrmmNs yW1krdgre4KH0360bIlXJqEKWMn19D2iZMshPToL5YPzpjMs2gh0b7nAdXeAfj/aLgL91vAMmZPY KrPFOfrcC8m3Z4fH2yHV9jcxfHxxMcwmXCHIIc5CsCBzDbCgu31mq0jfAZ9+Pvz8A2BB6FJu0sXT BnZ2Ltt4WFYgDFsqjWR77eIwtd1ibH7c/wDwjyq+1b7xWUjRxj/5k/bRgcy8HxcsTOzc1PWwMBDr d3jw74H8wfPiWhq04fcNV88fA6+yI8Bwn1y4MyMr/jP6TaP4i9sH73t3o8ISFNSsCt56kyVvZzQe CWFp/WzFoUjcEUp2bctwp/TGYQ5neCHA4f8AAcFmzOL8mR0lJCfr9+v1BQQCCsct0eK+pbBcDXYb p9Iyaud6/cM7hEIoBxixbUwmXByTZx5hqUbgtq1Q9QLLQ+LPOEkI7+fP/QeA9WPR63bavT2WUiZN jy1aGgiKP/4ldZF20QnOdfRIreOT5tViLsfcLTVbKQHxrMWcLVxVZowV22MFgBfqj5+/88wYAItx o9mNpZolCVtCfGKOPeVu65Jtu0grjuXdPBIrLuPp0xmn242jUk54RiVpUUih43WW7NlboeAiLdfM ypMt8aD2SNMTw6TyglW8gTMFuVhHvh4GIeoRkcIdXhwc+j324tr7yK6NZhzmzs8bAeP1G/ddlN5g +wafs5ozXy0SSiB7IsFkIdficClS6cK5aZvzKfDzE9kx4O+N55HhLJPniy8vGyJIPfz/APYAHRVe C/DMvlAy8rOqUO0IY0TR8MPbEu7GhDsIWBZHAPdkOGtsi/DtTS0PgTkOzLfvhD2zZKu4OfAPz8fP /QcVuLS7QVzDsrq+ck5NI2EaLI8wbHs1DKIbFFrkyv8AbdDZEIPYAejzw89Orfa6HF4fSgmLyfwQ d/3/AOglIQVXEZPG6bgaffkiJ9s7yYJlt0cUwXMvea49xRbaSVMHEMiNjmuP1GJW4PJwzyW37wtD ta7E8YyEuvnyvA6Qt6b7PqAbSaQYr0bYBbgYFsKWzg48wmB3Cn0+ZBgD1JHmLIx8F2YzbIE4PsB/ wHQdcOoSr1ep85yMtVtGMnJUl6tyWm9opzdBbZFKsg/Z09kTw6/24ocgpKq2TswW0VmsnEg2E58A Qfvx9+6NylmSOcLZnngQO714S4/TLUvxPigV9XFh0+Y+Qw8wPPMQVJwQzkNG4GLGI2CTaJs6AX35 BP7Bz7qXswWr/SWNcT1KG5Z1S1kj2cq4RKrTalYXKL3QmB/hp/zw4OfR74DT1nDdHkYDwdt8/VCP PwHwAxKzmKOplaSyBDzlJce47DjHLtoc/PP4Sz9uatCESs2mF1kQVxH+xy58gf6G4tCHdVtlVmBs Y/N0y4MjvlZZtngapbR1yoNrC2TLiRBB2PPF6eSUqsyWROJC5B2eegerKKEWkuy4GcjKnR/X6es6 8kJ1rNtuRxjOM08R84lFyCgVlm1HDBq6lPJw2Y/JDZ+QGbnHNn5WGSjzlGAJlwXu2hBRWhLxSBYP qwmZqanZ0mpU7Y9WFRTSrtA4qCtC93mgKv55NeAdZmY8kgk+SYtLyfz/AMN1ZMeLW4FBuE9DcIyS GfLIEtGdpXpewnxypGIBpIxaCe4TLVfA48PqaQ6/rQHZFZExf5MBhHak3hBfkDfwPgEHI9b3QUS2 qK7mLAWyieRR3gbW6fbBjs3ccqUtkA8xktStw9oTAdZuEGCHRkWrydGswP8AfQHnwHAQHRfMy0My vuB6Lk3Yk5W9ltPFnTB8uHFsZIlKz4whw6fcENkcK3VZ4+BBMDGb+HNmZgenjZEffz+PID/sfiO7 FsK6OSeLBmX9qEY+f2F9qTxKEBA6mrGlGOYzKrsiGYT4femv9PEHAnb/ALVn/mk/iI/QaCAQe7vR XE2ZGBeEqZXd8M447vSgYsO2/wCWz5Hp9AQyBTltI3cErL1O3ccmx7+ztrgA8m+km4Q63bY5i2q+ zjdqSiSkJz7ITh7DMFvlZOQF8XzDIIZJgerw6rZa/Pp1xWRhRoJ7FzZ23/YOfH9/AdWVzGB8yWCk zS5Sem8lXzsk2wYo3RzV+zi6vbCib+NodkakJgdewggbAun5gxmQxfJgfhP3/FfP7AA6X2ZT7o5O hK2haeEmUjkkohgC1VvEMFJTDXJ4wQZYeNkQ4ZDZAKepI6eTrPTm+DEZHScUk4AxPvx8/iAx6Go6 XADD69Pcqf63zUKyCo9qzk9TmFLaSGiUn/MMcbQ0PeIPb898ys/obMTB4fR2D/Lz+waGETqVY3dc 3KtDi/4pY7ux7rqjVc2tJHVg2LivhWi5uvO7BL4vigPDXfFFYeGD3BPQ8pqvVJrR2shhDmLDDr0M qB7ccbcIdwuC3qEZGAOqwLQUp3BnkorrOHCfNn9/58/H+rUOgekzLrf0Btu1bs4KyDayX6ruCwVO H8oTLV63+yWQyXWn8wONq/AajCNUCsLWVl41D+cqLz/aIB4CompRsuwyDoehymctgU3TG7fIr3Tq oJAerxbZXMqGPiTHAxMcCE14xX7MVZjNWYsWzb4E5th9+xwx2Drkr9gq8DX9evgsbW9wW0HNtkdJ GOFezGimxMUX3QMMlD3AhsjhVbU+484MVmjd0OcvATGk+AoP9gAAD65A9xymTCZ3RIVxyPEsMjEm x8RqpFeGv7aJQLbyghMI0zZ3kwqqIAXFrysgmxQHg5cHYc4pq/8AguVhIbIHu7OQKyDwya+77DfC 9qClOC+Hp+ZMhmCK21QLQQzhhGJvmLzwZ19rUftgP9osMD7882B0fTzRXuXQUyNpjbUmtxK/QIGj 6yhORR3vipcPhWo+PkNDIfA3CpUdbZqgFq7MtPBu7KuOPwB/YP8Av1J5hxbMx1VSrkC716m2QybO YqtXXocqxncC5B2CyLIhh6rDpyHVdl0fypPrPa6v8G7BEkGe8+fQd/w6sIDqqt74wmVzpVv52Q7Q JRlOOnrlsVOyIQCXUotk5JM1OVvM3DtyhsCjcRgmjK5RZZvxc71XjsAA+/c+6GMCaRjJgIQh3Fke kMC0BCUrv8mnyXEn2NlQFnaM4A+2rP54U+PjxXn56rSPrMxdOZWNLAWrTNVYA+EYXjOv8gkPiaKs JDtpwX3yHDW7gZCHFXxfUp1Vk1lnaLMGA+EhLU4CfAL5/wABgVUeDH1UwZNQVfbS3bcpD08VlbF5 TE+nE+ULXgLTMHsifMxDshEOcPD1L6y8vgtZJ2p4XHE+ggD6CAxXwHG2ENSeWGzldIyX9kVxvcFw Y7rH6hK3fE3lG8WDDDuC2hw19PBttYPm8bZcm2Eke7DfOcfAANgAAMTBQfLRznt1MxdNVA2CBs6P 9qM57uhLDQpysFBfqxPtOyMETARg21fp5eGN5eMVcWsoxx2NY4nzzBgwH8McGTLKquHhfBaydGiO NmxaySRXdEDEnwbri63Mp8QwdzQVfb8i+SW45HNc31G3LTXarR+t5rS1LdnSj2oi4yA3OpdsT2gW WRBhgeY4et1XMYIc6tCNaWqyPPF0NZxqurvypv4Dz5/Hf5GlHiPbWWn1+90yNs7SNRtx05bB5IR6 9MagdT6Rp9TU+wOBob5MD/EeJ+n+lnjDg3vUBLEIDw90G+z4DkDBg/jauyWIpTD1fKSeyWQBMXqp p9S0baDY+K6bqaKNFqL6G4GdPb4hL6ej1oQn3guWYTtB8erMRwnnO0WwYANg2C0WoN4R7Ut2dFqv R2zaWFdcHRA9hBli429yiei2auLjpczC0k+nU3Cepv6krYPK20i0h6OnLsCnkL2xPr3/AC+k9HTP GGY7bruvp2hGzYIn0yTGYFilUXEUiSwyWVlRyqMKSUxK7QNjcKwSivfH5A/y+oI3+f48fnIUosgW rgVO4ANGVvJ0u1ySbVOwDFSp5aZYtXqZ60Jae+LcwOZ28xOodwgVwt/aOTc42R2R8D6CAA8B2BBd kx0sQWDG3dlWok5WoyjRtI1fUunUxDQwNnlhdoMtfp63MW5ignzEd8IWXTrIMZmi+CYyq0kJaPgP P9ot/wCmO2PkB80eDavfKfUqNt52NRLQybUX2xvlK1xi4vsn0ljMMWTaAYHQ9ovbwns4tWpp5x3t J2QCv4nkHH9T8aT0AW5pCiKzjbKSyuCxZdccnpqyKga1xntqI01g9DrtW5jHcM2e4bgfAwJpNlZx rusvNI2ilAscAGKDYHp9R48lY8lWMh49SCJZpHERzK1ubaxzSXHPa4uzLW2QEa2x0K38oZEmSRAj Ksn8U6AAEnA3tZGuBlbe3HlQENTE9crxvq/Nrak4QGY7cvSbCjl4h4ovW1Q4deZGTtY30mvslxcP 1D8b3MoUJjARsJqHtTYPPgOQbDO1ePIE7HSRgejQudPve7FPGztMbRcbihppbfjA+ZwMOYDD4gSt SBCCY+hlMBZw2E4O/AD4ABwHnwBt/wAvPOJ+VqWarspN3DrYmwE+ZU+0Ve5aj6HKPo8xMhwoafzz YSCic5yTV2jjPCTbt4AAfAHz/sAD1s+75zmZcarW1GJZ9NGlPBEMAGCZYzjYbPST4Qw41ZMIzX6e qIdn1qjGGYW03ItDDmFpG0c+/YoJ8+wc+6pNE0cWpbTqg1Ev1Goik1M0siQTvtZSlpXfZgWl9OPC GP7I1yNqXVkarSjVTTbUTxxvtLQOlA7laj9tqAeSQTwK67HCHqEUqTvJ7UodJ1LWjs22FondtOod gQz0S2MBbh3gmWphZMwgHeMWECDh4oz4TrPEGFdjX5eqMAA5BhiAraEufVHTFf2/jU1MqSHF1Aqb agNxIcqRE1yhxhb0St4xMqwPMYFtqguFaNAhn3S0Mec4cJOIOIDDkCAgYn7bOCep2W+GMLLo1SL6 lodo3JIs5bj6cA9S2Mwpr7M7wOC3ZEOZ/qWPgQXwozK/GRlV6h+yZxBfvAn8d/6SdT6sMzKvit0N SQ7ImVfahGJGyarV2FwV7lbAIGGPD2QtsiEtp5jtLaAH/a7RUBPhLsk+A9z/AD4+fxasEj6aWPWF NZLLM8gjSM6fCNscYSwebIrzTkLd8qPmF4vqc9I4iT6ZIFYyfUgyKe+asYsMu2k7uReXXHX1V0nZ dVp9NvmnuSki4d6iXCwtVA9s7xtFTq4tPcHCZvFJp6+YeDw+eccBnKOTb4EpL2P7+fAcB3/okODz IZLW5TvWMka5NSAkV/UrsrsKELq/fkN8IVBdmFkIfH2TlvwGpPWeLPgwZiku3n8f+wYdWEMNF8tG WeumuUMJScCq7jqdomB5FDbWBsLVABML+EQxDT2T+RfHC2gfBhgtXRlne/8AfwAAgr+GB/GqNsPk htOMjRYMw2eu4PJd7YuDOYFMxsJZxV7UITHCZZC24D5jxWlP7GycG7N7mj8IN4/X/wCvz770VNIC UzTT8Nw+EiyNWbyR4mtwBcRkaxayfijIB6mffJiCcfCRRwxxoRZ9uLG75DEV22ZjuAPzQ55SSK9q UPmp5KvSFbrZmWYaHK44oGGQDsj5vCGPT0fVLYCHOmclFtJTY3Z2SQgBBwQd/wDPgONYsBsgWwhn kOwthUgMmpzLtnBmDsjKpx8aMSCfDRLguyZw9WA474yM3eQVwXhKSk2p2i594DYEEwZDhyxl8+7q 4EIhvhhtiWQ4DZDEHigflFGRfT3CZMod8YN8bavgQa3GDOL9zAZtJdjqDgfP7B4DpbuDAr5MwPaE rO7MLjIyO4dPMVfLDvivQ2oupXz5gdb+Fe9oPnuQfDieM/oZGqt2djeL8B/Xn2wPyWCvE0YN5oUQ 1yJ2w2SBf6f5HPF9MUSBkmkgfA6lY3KHOkUUytQXiW1IP24eG6mEchT6SYW6WMqq3nRckbcYeHYS +7p4uVMlcDYIa2GlzGRgZK5Uk9DtTAYMKFKzqAH+LjgDHfvAAF/okruQ+IcxqbaMSSVBZo1tYaXy FuOkJ4torI9XLJ98/h7ZDC+n3EetFDeGSzKzabk4ycq4IEOHwFugcai7Q1F0VZY/UQZxdgO5VKqt Fbu/cGZnr6R8W0WwCLMMC3ZC3ZEO4CEzftH9SzjFmE1fTm8oyObSTfAe7tRffgHPljvi2BVxuVAZ LIsKxqrCL2ke1EOv0lwKFNQm1h2C4NPeoSk64W3BkOHq/padW6z344NZnNjYPz/AUHwHP42ZVkaP ccuyILA5TGzeLechxX7s3wsLHGwl9loj9vEgLqe1JL7K+Tg2XHiuTCpDlXhnACm5tP3ZDulJ5DcA eGwLy2etF3rkWyL8Ot6gpO1E+wYcG27QbVV8ZifPFmoAfNucH8EEBbp+okJC6FbsyuzZCZ/inpIE Dakn5DXTPHlsC+MLQr9r0OGh1u+ByFko8/VhUv1m3xZSs3kGESecW7/v5B2E+n6/sTaqyT5TvuTs BmJBZfqxbkWwyC5S+5Sgw/Cn3x8DGCExVtohQ9jbn71fuaPVwT9/QbdAH/AH56oiiGFHsh6pa3QL aq9VkxHBPDsFm88fIb4UWx8yyIa2yUO4c4AuDbO3N5q/nTz3Rq5IR9gfgHvi/dOj3GKs39RESQjv il2iQoik7fTTNqTE4Z+5suB7EpYyipxjHI2Eie0dy4nzf/Y9dlmNGoAWn21eaRhW4DTSS08WEHdq lsl3ZGgC2K75ajAycDW3x8p+YcfLB+DT6MzcCJkgbsk8HYD9RH/Pv+wGtzrdXn3DOxAy6C1Q6brU JMQ7crAmMjTbSnFPIagYMGbUuFOr8RqZA4KbUYWXpn5ytdr/AGxP8CPYP6Diefp87l1vnXIBW4sO yFWtLCSXfnkwh8NotosBFzF9DZJlJmHBfWwe4AWpk7v1f3fRkc3aKSb+/IPPt/3+tNk6jK7zaTMV y+VXerJqHdm2JIdr+X3fdE1soeUtuFpp4dbxmV+H+eQQ3f6N/oactGrqu7uoIA/sCD58pAjyKCHw T3CNN1JMsKXctMXjo5pi1F1N89RJHUOM0FyYYTNh7MeZYaayc7UZ9pDGzlxZCEntp60aHr4XU1bx J9cSogesaxslhtQmr6g+eYdtkMuxw8GBbBgT55rmDGd8KVCjYpWofFIAvz9i/YAD2B7jmD0dXfGo XPJVKHbUKrpY+sLIjiXBNQ2FX4ewJ5ih4fD/ALz3Q2Nkt8YUK2ZsZs3sbBz4+fP7/wBbbGSG3Toc yhlBtFKak60PVMAfwIxBU7HlJ0y97s0+4yqGvvCrIJL1YT7eh1UtYeumSnuC9VWmfU+nwXp9Hr5B 6cO0rIsjKiW1LoK1Alkab3a9V5gqTOeBVEezDbQuk2CkmSyNmmJ/wIBGAqwnmzMH3FYBhLs4Piff kHf8T78fSS8DYRpJnMiBBJIFgXS6e8GRVQRxSNvHCNI13aNuojA6mCTK5mDnacljLFEkgknxMcbP EibpfaemZRhXC956NsyHMd9N54A2wq3pnUOq2TLXyVkEEeZYxSJKctvDhzBiWY2dHPV/Ze8syzTY v23sIEOcf2E/z5BP9VvsSu5HNFWeGrFkhq54bEvAC7D6cvloTF4DpzmVeYcLhuxPQyAcHuHwZnbN ouTznCauOVEfAL6Dv5/oqSxaW+D3XiWqhtrEoHQLZV6f4+kJ5+0LNin63T4b5SZiqw9gOCruD5Vb ITxF2g8s2yAzewfqA8BsEw2ZlfrlsKtcrg0lWFqw6TLJ9boWndefIrRqEVzyGw4ofeCZajB85D4l amGKzte5g+bG0dB2AAf2BB2AkVoGfCXJFfUuqbm5j624RdLV7wANH2XXNA5G+odpZIkjdtuxH2xn CKKMYpzj/HZ7j7iPiz0pGlQ5cYDB5pVlg1WqzDTQMmVjQ13UwwJ6CWBM5cRkLubn6mZ4m04/oy1u Iuz0r1yZBpaPVJPrdwUiMQAyQl0FnRPn0XTeoLOmn5o7ZziIcbKmYV+1adWbYsZbKIjefiZIBt9T mEmZdeERgaUJyMit1D0QlAQN+AchRfWWZDU6ZnSzqkQlDrtsqcTHshsKxGOW4thaq6Fi+BZoxp4G pm0hZjRY7nk8Wa2zV0TVmrIvmxMWSn2g7uBJDr7UUEs9kAqSQPshJX6yD1zXOsVnqVPIQ9QtwWoy OFgGLGA3A24bYstBSs8dk1e9qwGO/wCJ8AAf+kktrdmNAvOsqoHZbD1fwBhtiYeHXHZCuriRauhk ENkmYsiG4MntqAbaPcOMixaMjd0fvB9BP+3PT/VzZhA5d3YcfXJgktns52rEOxkniwTAtoLRHKGv w6HfFtwqpwQzlSkLawTybzV/JnnhKSbB/X8bdx+g1FSdkrcmBeHYDV5IlkwKfW3dPmaaZC8HtByi NAuY4GNQhit2RkX3wG2j+VJ+57WLKA3bwb8g/qA+/H7j5VlSJFhheJoi43MrsMU9m3ItDGTvqz2n oZEaAsJN4TOjpIcZYPIXE+rGM8eeF8XRI4HT4o6o1M8l17clN2QtrcpVshTq+wjFbid+tCmyltQ6 /MTHvjb4Ph3FgPQ3j3rPa/ypsmJy3eQAOA+3UCt0HZFg1fbWVAhjc5Sm/L1UW1WxBhDq8lerlXcL AW4e8WRuAdHtshS0GY8kxdy7n+oRHAAD4D9/YAClfFup814DudS2RW+oSwc4avMMyk6nsJlFykdD PUN8xPviny7gnofzyCG8YlBloVejPNqfdng/4AAf5912Ols35UFgOGUUyXZq0qnjbZU7VpqyLYfJ UVeV2lkT3AP8xkwq6H8BP74Q+75QoT93Z3q54AVEf2Dnz91ZSfHH09ReqR6kTsjgBPYEyO66fYuU ednlceVs8LMql5Yc4WiDiXKR52ruR8VEe5XctN7R3Guu2r4epSoLEh6jLL43qu08LcZTj2ENsCwl spFthDcqfHuEMxDEbhvkBg+DtjMLaCazikm+DgPPn9/2AAUg0pgXE/OtVMMVck79H7Xnlsewhygt sKWMnjzFqB1vjZAxO4fiq7mTq8oTRjmO9nAFQnwH0H9exPZMtDr8PlyYdbtSbT6kJYJhJfsKt5Vj 05cnJGCHMD2rDW18Pv4A/O4ys2gLRvN1cb98OA+f8/A0mPpOxh/yqvarafJ55Sd3AwnI7Y4VzK4u LtQ+h/khkhp8OC+ETyr72Z+TKg3pJ7qIOwAD58+wYH2FVaOQCPaQPg0atcbYlcSi0NusiSLa7BsV 1cbZOrNI8rp/Gzn+Oypah85UAeRWNc9cZxXTxZStspNmcDfM5Sd18C4fL+LEiAD62wQ7IW4c0xhz mAnocExybtezYnHdJSf6BQX7wADqefEcgLIElyfYKTYVg1XUtex6TOh4j4eV9QiuL5A497E9PZCD hOUrAPPFkEyRQoss1V7IbeAAAAfAAPAHyQOQy7GH16kJodbuCfqQJO7BUpi0Het65lbomshBjW6r MXxMX2RIPD59coawTxaPaq7R72PH7BsB/YOg/MU2QCyWdlKRiStqTUgLyvMJc3T0xyLSgMwetrcO yQ/eBw5a4PiPMWeUC0UpwnwYAAAP7+A6EsZFVEdHcWyB2MecbVi4OLeaNiu2hzz0cYVKxzFPGXwf H1Iwc4z2m8cgQ3HuJx56ZC/gDaOePm8BE8XW9FLt8O28O6GeiyyjmYHwzFkQzEP4c7j9l1yt8Z2v jO9hPPoO/nwD9j0Hg7cKdr69i20NSbCF0yEYh+SHIL1wVy0MIGMHxMVv3U5i4B/xeB5IMZygvjLw bx2NBAef6G7Yr9LgKhJt00sjIyHgKSkK7I1WAJW3w9WRSVZDAHrcOYDvlgWoqnx88GnvItXKDOcb JsZ/2P8An9g6tEQtys7VUyUBoT7srHWlMf5ceHfzBcYe0N2q+UYIJ8NDhvjgPMVy+e6rD2z7NWYJ KSTfPn5Bfv7B1meOI7U0t6nZmjQSQ930t6U6YpIPmNMQ7TWPOOA93Wjc1MMewgjiWf10h1EUS7iP WLLKkaSGgDlutLWS4YgtkjVdHzWOn4aGmgWTVFqDD2jE4rYV4WFiKoiJQ8WYPZJtJmK3fPh0eBHt 1VoaMzFKvZhndEJaOH34+/eAAdQ9ZnF9jeHxotDloF3wrYs4ab7CT14OLx7oK8NfDobhs8zZ58D4 ECH9DF1mzG+1wRH4/wABfT/n+gOv7cvyvnDUVm18qVc+VfZyTET7Oqzt6YaIpauSkxfrfklV/DcG Sd3hrTZxnA0NZJvAQIkPGP1/wCDsEwpMDopZmTLtAkEdq5qtkXh9P3YwNlkK8pIFoa38Oq6fcDEx fmQTy+PVfd5QxfGTpu0TfgPoPWponD6hZVCsXSMSXebmKKWONVoCOMbpVFybCibOVDLv20LYwtso E/ion2mycjXiq5qj1x3BQdm2NX92GagTwjIBG1uJ75WFIE1u0JrZV55Q5JEsiZvC/wBxgNoTzu5L NoXJUCz4QIc37fz/APl0pVPi+VZBJjSEM5DnocYTHSSQ93cHKVWSuUiWAYDrfciyF8ucsun1LZ8R lNFCfBzZtJB7B5/f/AXLqOzB7kvh81jhjUOvs6yBNfn3Ae2d+ANmuUXkDgYmbOyDw7VP+ecD7Zug x57XHHZ4599fPn8OhC9KyfIoOvZ+aHjKtjHiUr/Gdh8MPKKMP08hDZPmGPrcFtHz1VwGborrDMcC JP7Av/2Df7kjZiEbtw8HzlkB8cVWP5PnpQkRVDZXl8Hiqr/W7v8AXQHV7Jbjvkfjl2JZN3aVhtsG KxmWxLhtFtfFTeH9yKTquEYcDOw87gsjM8k6v2w5wlJB4PyDv5/pkMFwWYkA8m0KqcIw1jLoCQPf IcesrIsZX3W2k8gn/DcGOYwTJwFwA2NyYZ9G8J+v7/wI+/cBFQ6mj5S/kwMmseSXdDW3cPn5xCwo blXNgq7SyD4YeyOH7h3U5hsbgT4uLWSeyec/397n9gjay095ltWxnVJKJSVUqhbsHdltXiTFYWW4 uyXByQxhvFgGAbawVKqh9saVdGJ/SQgPfwGG/wD64TBRRd8UHbnV4RihGlWLxtubFjiuOScXkGCS PJRVWS7k43HBy7c+zijWI5+RDjtUCvKzMkXm1Wk5OaYCV7YKq1R5cwCULlHLh4eZzEw4J0P6eBa1 sZuvOeD/AEkHi/fv+wP3Ta1cI98C3CmVdodqupm2q9q4sHfBtHrzIeKJEXkneAO+GIcP4c5SYAIM OMehTQMeXg2b8/4FB2AAA6CDhDMqVPmBU341hRbCIiqHaklHpGGUA2FXMVPcLIZJmD5ZHzYKHX6k cMI6y+U3UAyqwuybBv4A/wDof6nVZSpVSQFGWp1AxLhPPS4dgN1tWe1ONn42DZwsLPMVWx1bjjBi 2KDUVIKHHWc0DSWAB2ws/H0+kB6fev8AFh9a4pFCK7b2zxR05xlfhbxk52qsfa+V/bjyz6fueA+i 5cmQS9uEnaWjUWc8KFt2+4dv5F6v9fKENPMu7tgN22TsAG1B8twfFd3V94X1u4Jhit3DkgKh2CpV VD3N8tBZRng2bCHH4AA2DYACD04Msu4ARd2ccmJMyvhrsp0O7/jIPKixCibDYFsut1u4B+YNR5fb VX7MLtBGGHAnvsB9+9/7BAuDorqVwQ5VfGEqyEgPJ4uhuG09r5USxxdbj+Nvi2YhuEPcP0ZCayUt DHfPu1q/l48fQcd/6O2BHrdXrsOZFvkavb9fFtSthVWzEMO0AV5Nrn6finocxk+Z8+wJ7wuEyZQX cDyjVckhAb8A/oE/gf6ilZIoRHmfqEWSEumGaWtMBkx5/Hxx+R0bLiShaMvFUTKjZ1tgAMTQrOzQ o1R5PSImCx8CHTLHXy0tzJWdGluDINYK9ZHyS2IYFPIIeoSbDm2piyA/0OBybyrtHJvxdwj6Cgnw G/4dOD15YddD3Mhi69qW7JWoRS0tPDJMI3HW8WxomBQwwMkyYthw6+4NUBwbUcOMrNpKMyy8G6u2 NBfrdAPwA+A39G8sKZshqTrHzpNYqRiLLHmLCeFMw0Pi8U4e4mMP5yGQZJwFwPX8HJo3KCbNsmyP ADfz/tv/AB9wPCvszZW9jK7sk/4pJSSLYaphiWyIcUTdzRD/AKbcK3W8XCubMYAOLITrNofGZZOO wTwCCfP7Af38BH9Mr83fcvbItV7H5xv57TdD8dLdY3LSe+8UwAuR86Gyi/O5j3NfZh7WvhVpdbr8 Uw7FKlarRZLBvL8H5o2PYVbtEqwhfJKvvi7EO1A4f3gzyGINwRmfErUCyj7JiDAIPn2DfwB9zWBc BGn6rVYEqwnasUjOCfxAVu+B2ExFTeL3ItkGRP1IGDFb/DtTuA2/DWVndBgw54Q5wHwD8fPoHSBI L74kA/gHlBbMQFuMkbmSV7YhyoglyPWoQXEOHdlkWQnh52mnfpzIT8p5wIESePgN/wDbz/Q2jslF wJFhCzMwIRyoY1eDh2qrizJcoGJFF2RX63ageh+YD2Sq3xfwOMnOWj7NsnCfPnz/ACA+APgCmVnk LqrncreVFyzxIwvlQuNvXBu/iui7QgVnQ7SJHp4nbbG2p9okb0xjxZdksNwDzTmsyYvq4eyLBM1K khwNnJNZEFUDSAiYLqUS+REMiycwDzFtgD2MBo+y4P5fFq5P8o4Wjz7f/wB/4D0ziOY6KVkWdaGV xuYBZPlmA9StFOLavUooXbS38NPQ4dbhmDuMBT3xHQ+M/WWc4ECJINgPnwG/H2BB6p+DuwOeqfEN zxJmOS3V0St8mwiBdbQ1d3li4bgHmMhia+EMIM+ruKraNwMoz7GkhP6AAH0HpkVIj5QYWelJqTUt hVBp2QZfcGx63LOFItAnG2g7jNQ8LH7qDobV2/PPDgso1X7ZsZvhCMAPoOwPx/8AQZEcbcRO642o tQkg3ZHv+No0taAp8hZsFORXUjki5eNnSq+lnDYJFdbm4QG93ZjyKxJ89G1fpbplZS2pJqq7Ox75 NZV+YMSCwdoq+JXNNw+YTYdwTLIITQbangQVqE0ZDQ2ZGBuxvfNgAb+ffwABBZCun6f5+og8BtWp K3mV81MkvsOnp4mGe7e3JaKeQreHW5jgdgTIM/BuNsiy8tHk9lCHDnaLfwACotgP0zT19sY6Dzmg DZq3VeqUPqrXkeznD4jIm207pqunr7hW7ItskNwW/wD0vtkANub4r9sweITUPwF/38AAQfAOaOno W10nOd2qSHbdRRJhIHpiu2VWLaCyaBfCAdbsit5k1wQ2qAQbQbIzDPy//qibB/8Afz+GwTcncyHd 2x6mmEjGWCSXUdgxaKWBajHmORXfMF7VMRkQgUxEtA8tpp5md4fQh0+r2F0rmbM+pNJOUkiwAj21 OchcBUmQsjMpFwmLk8CSW3eEyWFW8P5C8tgSiRaOMNfW5i38yGQhgyDBWnw9sV3x5WXgJVzsc3/H f9/AdO1pZF93F1i7vgEJMP16kxKPzoa+kbpKtiUhmHAwHsd8T9wD1z575aMs+TJ/1t58AAftgAAO hpgmCyj4n/AmIMxda0mXZCqkXQvQ90sIWm8g2e4PmXxvCq2sFtHHBmKe+nomcCG3YHjwH37B9NoO +WpUupwPfpmnwZmuYepB3kOAEe2fF0+rwGuqrX+ecwmcgtRqtpfUgb5WfF1f+tu6NV8/QQHgD6EA jKjKHkV3dUeN2WaWHcjl2wynaZa9gosXrkCubEPHGkcUZSBC6sgcxNUcVFYxuwyXjmbZcD4BU8UN lCD4LtBp7P4O9Mu9e05wca4UvTr5Up53pwotEHxPT7Uh1u4PkECQfAe2W++Xw8//AAADYPoPQHXb RZGqWo0M7Aajbsx5NkLy/D1RMFhMgGxtPYqLM+YGrfvYyV+4Th9fz/mW+zCyqMzI5zvZv/5dP0Hv +wceXXdqWhQ5e6VeG7aV6DHNrDTAC68bCWotENsUooYJ7itskPb5mo1Dr881dy1hoKds/wBkxww3 /wAAfAdMhzrBHC3IyOQugWSvavW42mUPkVLaG8ABVZHsEMcYDzIcyYPm4qTAenOJP8Dk8UerUl2O P2wPx8A/Yvx+KNK3pNKh1JzUS6afcrCbTxz6addt9SuoX6iNpEy1G1QF+pfUb6kCSVVcRLjMA4CG OSXmNkA9N4xi2LxxQ7nNrajqPvkJdM96yINb/wDEKdqyz1VST0uzHCgWj1adReou31MBDC2BqBsd RcbNlS2u3GQpF9CU4WmJzc4FY0evwzFCnm8+RLYC2dXlUNTGmMctg/VbdnxK3ZiANenQItpMVGG2 ByVMF4VBVrNH5LhqCpkitrthB4UdlDqkKC7hQWXNzYwl49UXH0pqbnSPRXhILUUFO4BYFfGP6P8A 1/XTfo9TfeJy33f3bVeeP/a/fj/QfPHlYPR78V0OwpQvKJHs0wElPB6gUd3mAVesilIGCBgPDmGP viOBH1pajh+LiiOM5v8A2AAfAYbA/ALpLavcmbWbgVM1jGG2DSajU7wBsin6ctSVpfU5SH2/mLRi +Fu1POQOW6c+MvNyFVl6/T9/9jwA/v8A0sVsfMsGYhxQ1GoFzGe27DT9YochhcXPhCarsfbdbW4c xDH1Wj2WwKQP/S9DZqzRzZsIct3wB8+/AH5+h6rX6zXLQMMaQ4RqH7MElPlTSHd4fZHa+Sdk3x8s it2Oeh9y05D4eTGdr9sOJPCTnAbdPgACCfP9NlEbpJt4GsF1LLFKkcyNdRTPEk+Eb0bDA5kGiMT0 pJpEkhLSyO7ZYEvCXXERlsI5ZIty+C2LDEhb8i8sfRuCuDVpn2/Kdqv0i2CdsiXZGpuyKfsJP2Fe qa46g7jzNQlbp5kdMggcIBvk4zDHBmxdko3vx88f8CfxPqu1WDVgZQyVabwpHqvmVtTrAn5zBL4a +CbQrlw/1UmOAdf4rPIbGyM2BRXJsyObwSdg58A/YD/ViqD1AQ1JHretK0slbrdy0ureoSQBJI9s LYErfNX3LZCe+Q6rD1uHr8PAbSHwTFmE+LjFnmxv+vkH9D/2B2VcnuCblnQ1jGJOTmUPGr0gYr22 L55kLrJXKN94J/G3BD29bav4gJ9cwyYyryjw890QnOT4DgL8AAIPVaM6uRQmo0yRalHmggjieJtW I9PvkTrg80g+pjjikKSyPs5iPMyxzRrcwh08jSaZpn0+ALTBJWgjk1ccMMke7LHFYgkndclU7uzZ WLIVWORfliQCFeuTaNpPOr62hthGGNPXyyHFKO9oVJDHp63D2ett4Vjw/Txu6MsK4t5WQaS7JNVo O/n9/wCfHz/wYSTtP7+7WBpMtTTOYOutcHwIFbCmF29ilOOci4l0TabfcMRiAF6ebj5+upZMnWLN iUO2f67POAV6wV/1V8CYTuMdmQw9jVfbYsoBG50pwW4i+n5LjEmAcVO5DxhgDmK2+Yt1fNeMWCeD ZGfdBfJkdJSdPDwffvd+P1FwHrcyCqrykejdPHZ/sypKqkw3xqovhPs1btDadhh2hp7odPZK3ZHC GjwGBt40TRrk5xWfm3bCoj5/wHVTORJp9OrOfqv7rqEQRHYjSF5RqHVp45JI1wIYRxPjlbsvaHuM 4wSSGJPSjOphkUY57pGaFe6scFprN2TiOhWyGio59kO1jTxtJw65tSLZtHmXCp15DTUNhA2ghsG8 PlJzGQeYnNvA94JsyG9swzmwM2EAIO/gOP7BhaFToxPtq6GOoV3gNv2hW9xtchbGIBZOQ5d2ptTV WnTMLrqx8W4GIJtrCfiHZsHwXgN2NKu1HqJBwAAP0P4VkFuj4GDh0hShympXMJNOOGoTT28JC2Kq /nh6k2BkT7TD2mh0/DeKlHz7U3N5q/c98q60QhwBz7HtD7H+hsG8A6zr+7GOs6ltGHPshJl9nzyu Jh4lKnFxdwhmJiFZG4LfBLQ4OGWKzV2jjKP+tVW7boBf2B+fkDDQY3ZlcnN22omaqusgGqz+Txfn 556ESoFXcO4jchCMcZFxwcnuvHImq5smx1a50T7NFo9nVCGzpNpriHqZrJorCyGCWnuTkkfLrdfx shPDuAf4bx2PfK5ME8VfEZ5tJSdgAAD6CwIJ8AATK2rmMogqmbuW7aPC842WkNQ0hEMWNu1cyjA9 DDsiHZDIvmPn798PFn54sjN7Bm9/5Af/ALB1DrYuRAV2Q8BatSAem8pSpFpcDw8tDq8Wj2NK/G9q XwnmE8g4I/b/ALjS7yWeTrOxhDeCO/efPoOHv05Q5BYvi1dQemDTlpwtB8a0mpF9P0sMfe0OBqav WACn+myGMRCRJjC+I10U9bLSGW7eGVc8kcUnEKcfcV/1L5/0gT3qXClKkc+buMfURLyzlhj5XIY1 uA+45Uw489LbE5Osm154mkyBxikk7TitfxYtwbzB+KMQpthQCp8c5UNcJR4IJIUmHIJCerlLClAU 4fDmMifagef25bWCA8OCKsi2lm2PYwmwc+/z/UPjXBV4am08NfGTJDzyQ2IPalUwJhpp5tsYC4EI kNb4e4L6eq9r60+YMqDiyM8nLRCez8fQT4A+A98Fut0+8XwDJPgunxsOBZFkL0gPpvT2GY+WhEPN FVL/AMyYhzA4/FqxH8HW3lm2tZ/ZDZzf35+fgCC/Hz9q9OWnm8tTzfW2n4VYszT+MrfJOhQNmHUg JXFOMERFUjza+5mKe5qMloszVc0+m4sX61CaxZqOHx9HoYn43X4PMYPSbBP1YV8WaeTR/TOKng9N EK16Epsk7fG3J92T2grmQCYMF2YJtxI5FMqy8RsTjJHtSx5RyU2LNeWBoAA5CUNksTT6Y7qWWNdy TG1JMTECBcGEOeAu4u0IY6HQ61jMZF/8lVeeVVsYsobQMJ4YBDYRB/7Af6YVscsgCw7bVTKN7Snn aWnkUkhLMIjlTh6VDT4bIt1XT1qOEMGe4G1Vu81A+DOMo4Q2knKiP4c+P9I2ZVbw5J+/AZiBfwut wlTfDySFx4XcVbKbfTFgLdbmOHl6/mVz2vPdnxjyr1ezE0c4k7Gg7Af2DwAAw0/5cOe4bwrraS+W Eef2zh74PrKYLlRLGck8eGMMhjkhAM1PjABasSfFxaMjYu3NufIOGL8AfkE/1HdFK90ImjveiMt7 eWGDK+A7+GwfHtonE5cCyO1yNG7JK7OhddsclMgBbXXbZscE8dKsPzD/ABMmByqTDAnm1sYPhuCQ YaAKnzLj+C38xPZHCZ8Ageaw6ys7WtbGE5v7+Afv0PgE/qkkNkCjg5loZJIE8khVNXr5wV9PaeLr lsaCm30/Mp+bahj4ZwDeHavnFvlGi3vNm+Dn7dqLz/6L9xgBxTnpYHlucpQ7GDu0Roag+0zLurC2 BcqY4J9qGENbh/DsaeQn2Mt/lDc2be6uwOb/ALAA9mDDFSsliNClpjMaZIFepJivhwNTITANgCTF jOTC5RS9fwuBzDExgDtQBffHhjJ/fFlG+km/2AB0rHF12/U2pzE/GNR9haX7rxodnzl7hXJJ/G+4 yRZoSmbVk6FcYxQ+/I93214JNDRlkLIgNDIBgblqDPQ9SDYwXNZ1P/DaIolX+Z2TmMiHDW+B78Pb UeYTGFBYxZBhKu/ER/YAH0E+AmZgN0IMh7NTTqS1WNVaSp2gq92Wx8PAYlXoYZgZLUDshiHYDJie q7FquBm2vxhzzZw+Aw590jaTeF9jsAZX0AwyO1g5xJdjh8B/DxZQsU2dfriW4Q+N/wD4ftyqHWfq 4ys+bbJjsH37z/TyZB180i0HhcU87Pk9DjVlHVT+0w7k4Qe05si/2TMVWtw2Dip7tLBh7ntYwZsj sc/7Bv8AiBAFuq0rKGQTSaYyDTO+M+DYFGCUbyxaxfbQ5N9QBjGsjDFI7WQ3ljJahk+Lxod3zl4F ckg8gr2+PVa5stkjDagPMjvYGdgjqYdocrCPC4Y9bqtwWw7gPZAe3z2pwt8YL4yMBm/yp9+QfP47 BpbGFDiqdYgaHwk52cNrd37qLceW4NAGJdwtQ2e1A62HsneDnD7axmMyyL/Y9kN/5f8AYOmohtBQ yL1ONtlrY2zqqVUnuhfBIg2GEMpYRQpiwvi2YrcOnkIXbRgQzkx5t/gePuEdggM/77A/Hz/SMvvI h0w7zVdicNODU2gVykn/ALeLF2zbiq+18ZLkAWjMxDseLPDHQNvqU8MUenusUXAG6pWHswr5+3q/ YMGCo2JQmQh0GLyBNM7XvSVGZZAlDcsYWtrt/wCJs+2SghY5FGULbfqeK3cvt5sDH8i7+K5+vAdH Y0uGLrrJbVVXr2pUjlTUPLB+LqbRKcCBgwyOEwxwM2Bq7574jI3kxm9nKu/ER/8AYAHswrQmOEDM SWjKTglnZttMjCOfElo/mijDKTWXeLIhoeLjYEyDAq/ir4jIz4rjGY5dgQ2DQT6D9Bw38+h6/bP8 J0AlLGMsjKuJ8ZskAbIHiGQXqCLfEDWBMQ9PbhMT2CHAQ+7U5bWWflDN9JSXZH2B+4Cffn/qYBsE lDJ3M0WDW7a7BXwHbNT51hXQ8VWLAiXIXt8NPfKruCkiEyDdVwKQMO9LPF1l5Oc2CHf7/iAwAH1y QOBnu71O71uynHcCcXHJFR4FFg2VGgvNirxikcvFk6MC6VlgLKEZd8ZzG4tiwBz0S2K2Mkrm0oMS Nh6bauPNGTVYds+U5SxYtbH2OHrdkquYQcad1Sp89HZFkZzy3/OGzgM+g4oPd0Bv58vRyLQUhzba ih1vOdzxJhPsj5U7Yn1fFl1ye5AYuwxfFWLY9bVdPC8h/MrPHngwZ9JCVW/vz8fQX4/v/S3pq6JC 46ZM/FJW7PDOFkfHJcGEwpVXywNczF4OyTA8z+lUOwLa+s7XaBMYj2jV3n/3/C3cepceUIWr3ClJ tGhCTRnG2FPrGvXhTZPr1o3Jdi/dgdDDwqrIh1XUsPgAzHaApzlmRncIkvJ/6CggAB/kCJ58MtKk br2RuZiOx88iBGfuxxOR49w46csGZMryI+JmpUN1tbV2eOGzBArjE+b47ZDRWc9srwNbXG2rKrdt Xw4F2kUNDKdvnLUYtsHzHC1A9Jjw9jXz/Iw1lGKcGWeEm7RePoJ/YEHzwFIVMttsCn7Gyhq2HTZj tL0zpNzNGppPTTok9LQyNqLaH8QP8zCfR6lVcMYsoe2DOEm/Ae+/v2OHTskWRQ+U8qgFsydR9Atq 5UzuYZQ94zIeFSldSot7ATLIpMutVuuzMNPOmBSCTGV4Fk9tRgfCMQIHYfoHH/UCWDSdXxbAZBd0 38pJ9jKtbie5HB15baLar0DpfcB9kMq2+GHBf2NSr+BXIfk1X9oGY4buxJOAEF+3/E+APn7DxlXV BtPgZJVl08xO4MbZXcRxtndMInkwxUMRkpJGJlkErD6oN/FJFqIo8cMVTIRnUkhI5ZkGRTLdYj2F TpmU+l2WYzmjT4+c2tWwm0TX+cyWREmi2helC8SENOfIa2n+DnWhAVWQm8vgsZ4T+gQG/wDnwAA+ NociYhtm12hMk1K23NUpZfQpg/Z5X2i2n20GTExcD5W/D2pSQG1VMcG7yrJN4SdPH7/wDYD/AFdn Uoj6G8ripnT6SoExmkpQkeYT0eWt8DU0NyqtgmB3Bw5IPZJyGQPYQ0bEWieyO7Wj78+Pr4A/7nuk jYleSIGXDaCafY9Vq5inKceKZT7f+Gfu6zU0VXC/WxlvTzLIwGNhXx6rzrDEWzPJz6S8AV8CAQT6 CAP4MaSOSobdNz7nSgKrwMu73c8ihR5vhWLQsWEeeFcSnOwaFqcVw8c+6+3xVmiFqBobk+Ozkev6 SthnxJxDmKruCwthiqZ5DcB4ZDpNPZDFgWo8T0/YwwwnTdoLPBwgTg4AB/v7f+raEK3h0OpodaT1 tuA5qeS4O32RH40Bitkp8hkJhiYYZJhBksYDqQ4P/VCuzI1Vm97qt+4Cf39BQT3U9W6mYsBsJLia Nrc9dLjGl1+hw7AXpkXFePORi4A75Scy1PZkxQyHbkPWe1lCYvmxtJ1GIIDnwDgIBB6ajxvDHcj5 bUDJ2G1TEa2JCTDsBscHNNXotczWAPyWtrgfMU85AXx5wP2z7ydzEcJsiPUXgD6Cfw6YdRlMkAXF IxkzAQrIZCU2nR4oY8Nu3yVlkzyFFKOVGGREaZmDvLMrLAV7HeT+R3GRJ8JQrzfPPSxyylmXJpva dNx4bGzqNVH+YHQ7gTy3ZtNd3xoMWhdlqLfwzNwcHbXDY7IF2YrvhNGBu3uc4ChIIDz+/hLK8V/o oQqgnzs6xzNTZNBXxX+TcxmnQ4qVqaOoaIQW2Wh9SFJy39l2D4FpreKOhXuTeTgQ5iDfj1RMGHAT 7Af05+n+p7HdKxbYlkKRKA4EuUAT1blmSMhpJ5NwcIcOyLI3hPY1UCwAK5W9zvgWs75dgQJsHviA AIOADrsIK6XLIEjMXOCckQ0lsV69+OWh2hTbZ3GcB6HDZKHcE6v6rncPfON+wt8swm8WjsgPtF// AH5IgiIZcNMULiQIunwxkaWCWRidw5Z7KKBQwonnx0Y1U8U8Uunk1IdYzEWfUZ4OIpIZQPSH9Od1 u/uB+Oq5ZOj9/sXI9DAwWeiVxP8ATmzh+ZWvqebuFwq5kxiU3MMo4TJqFyzU7MXV1ikGYID1x8zN z8gV6IsDLz5Q2GOl5+dWS9QQZYQBMIFEjTGeHLSz6a9ThlmqT1dphGRa+OHFJURRDlWKmiAcFwGL FZeaOgz61rs/nyJ04+TCsGByPYbtnR5ae+54Sb5OwBZtbNZn9/J+f31YecgH6mfwD7/9P1+j/wBT 1BWJmA+BzFd8GpOc2krIEkYbIjy3AUmqUWUyd4Lgh1uthl/4L4PA1zNZnkp7jEe7AgRHPgAGKDhf uwoOiz0DLPlC9LB0l+1CJJ8GwEIlqZ9Z4jCbXXRRwXzFKPgYQZHQrigv90I4fH2fcXfDFJq44fxx wPAWDj/TPT8xHzbgJJq5kkk+mxtkO7hwOyF4xV6YJrmxg7DakKq0O1YbBZBz8lnDBPgYtZWTlo7I jgeAgD/7AA419LLtFwEsp8yW3ULYIckp6ZpgGv2xwV4tsJsvh8OyE9PhJ7BT7wh2hPp1OrPT0UKL Kzwm0aTBW6f7RIO/8/fiVlSKVgsJchQ7TH3+axFcVzfJux+OgDNIyxNuND/y0XKvHlsl81xx+a8D rS6Q1splpK472otnly1H+stP/wAOnxKfcloO74+cfhh4adqDcNnR6WuD4C3WYxoF6hRm+YJIN+t2 oj9ur4DYD6rvBH1UUjD4u+JJsDYw2Swjr41FWBE5lFtjV+eT/mLdVzHAOQmVzAntvMCaMTaBlmA3 Z2Cfl3gID8RIKCVOmmCaj0nkqT4hyXykWokvWvQKGQs2GermvbFAmCEyHw8PuC3BfGCpUcz2ztBo ediNhN8AID8f4CAAdWWkEKzzUsDUDRQ+ocDAW71U2BP1IK7D8VydiguH8O7HDUJT8ywJirBvA9QO JNZKfo8b2EOVF+iCA/TpBkMVSsn1KJNtyCBs5IY+A0rpQ5jobyZDbLL3NlwcabtxB00ztCHUyt2S Tir0ufFPyMDidy2OK40a9mB1TtrRamUuc/W20OpU2Yz7UsiJMlPlZXdKZK/T9SEwwtmGFbsa2h4+ d4xXQybN7drgb8fAH/AY7/O2JSdiHrVre5K006sky6Rsa2dOx+jcivTH8PuAtXDr9Ph0OqzGKeyP F0j+D8mRnwpZiyEdgl2doj79/QO/n6+zHyZlWXNrpcre25soCEU2i6yRCIYxaCwr4ZCGhmFvga+4 NQ+v59VmHlmZ0J4ZkcIlGwmOwb97bAfszVDVfVMH6MJoFmXXUNXVugyTSekGcA8spTjBqUEkDZZ+ qpDmp/21Asn1rTx6hPqF75j6Ut3wYF/FAYMD2/mA2nUFS8+PzIYlcix7njhTLweWU18VZtlrJ6RE cbvWAQSnKioa9yaSsRVY15N3xW8hWCnwin3t4I07SdGYNleaL3adX9hBWi2dOMZ9DwG/Fve1sxAh 0ieAVkbLkuetBT0+l1SUlJfee4sIA/6l9eTOotgvDT7qLfK6u5vCFymnV2rHT/WWQkMMsXGEJpWq yCG4WmZh4APUb97LBsncvFoZSnt3SeDyCffsevsgevhkOsZS5yTlBIGw1fqjSbA/HKavOXG+eVuy GIb5YEydZdoWYjrYy38FcYsnMQl2HPAH9+P1FUXUkHU67KZucLstktGt80dJthfTyVsJMyKhpFI1 zSZAxDQ1vjQ8xPQ2DnK2zFOB4rOARJ4OfPv39fb/ANGNyU8+xHZGf/DQjo185WeLFUTZvjOEx9mA /Oce54qqthXg35sn9UW/qstDMinJmU75xtV5Ut1lHT8hPSE/YZabFMOENDmVXDW2Bb+evz/hjCdo adEZZ7XO1o7+AP8AgMfsCCW6LTxbQSn5VhSSWnhkZBMfJtSOWvipWheA20nj5i3DT0Iw4LbUQT58 4Nj4rjJw4ExBfr+IvAYuYXZCmazFXKA1iyab2glJiDzxgPLmPqbXqa5OLhMT+IMjgQhtSGv91Iaz teAwmcCb28AD6DsG/wCwdbUoxMAuBgoUyUmyBdm1KkV/qip9PsJbq9DdyiG4EJhiq2SHMXzHZWwF JqDsyzjijI29G3bz6DsD8/c+6HTyuIZVCPGkcm2qMLd68vCooSIeMXGPHx0UkcUrxK8kbPNt7Yg9 KOPMdyzyDMJIuKdmJok8/ietRDYANHtVvgST/MM6exumVfpO1PiQ9OZWIh10uEJtb3A+B09gD2NW n/pYicZq8nWaz7WgE/r4Afw3/f6OI9BqaRYFWT221DZ/TmebZbfkqtTNi20SndDlIZAOyfMh2QQD 1zA1ATzn9UNCNsbt2uBv2DB2i2DYOnxl3rCV47UGPIdb0yx167Ni/UkMgWW7HFqcopaloWohTDEw yvp9xdjz3w2ZGfFdmJ2pza66rQd/AAKiP7B1PGEyGertPilKrq6yExjCS6nqWYnlpiueuM9KMcws hkDh0/6PAcOVOCystGIxG3v9UHwD9wHA+AkxDKIw7wzPzAzrEtOoU5gSzxZYZiwD8gkjiyQKkhnX CesQ8auTG0bAZpIMTedAqftomjfG4WDR65p9kU0hqU2TKAv7EwUaBIezk0S65V8CKG+B2QzMHhoM 9Pno1PkybQr1msvHsE8/v/AT6+fP7ygd8KJYZtCvhK1FdPf17Gwg5D5hQ8pvltwx7K+WQY+vsldH iB6xoaN7PdZs3CbsN7+/cBAAAB/3FGQhYDRhnMaQeCKmahsksfNfE/uR8VIfP2eFZG8TCD5sI+ej uDyzC1cYTObJseL9+/gAGwMFPKFE2GBXCgdTD1pYTapL8xwX2xbTabd/ih+YUnjMhwyC3VZ4hAtR k3PBoeWY5gk72f8AoJ/f9gACUdGEjm8nRAKqsvJuz4rxQ+eeOg+oR+xGeLLyyP5qqvtH7r/U/nqN mAktIoPvdLuAk7uVYsi8QloavzCU+Vkrq6fxtDxfIfIOKz3CyzhhZGfWVh4OBN8AAO7p8B7HsRZs HlLGy08AemNoEWYNqhBww4kHAnkho42QmOFJ4p62R4qpL57EwTZmgoM3w3+wMCCf38BsHUOUQjHa M8BM16ScJUxSiGPhh5YeLFlnq5XPh2oHZHBwHuFjYsD4dp8YTFtG5o/5RBn0HgPn34AAnleQttEN PFi5jb3VD8eMVu4XRzw9hLjSpg8xitzFtbX+1d8WBPBuHGSm5vKOEN+2P37fz+HTSzRvbO6vG7LP JE1I9Y4FWq3+8UQMb+bAAnuw07IA7IjxozZSDI8iSWhuAUtemlGzXdwBTKyW56/k2rAWxoeVMtGv dO8NqIsLILtBesauU8e4Miehh0MfDg4p7bXLgjk1coM2O0f+qBiv/wBgYRTMquUYyaHsYYt1vdzU NYZBgkn8wQ00Tw1PIMlbmIcLmBhVgWi2g2QYzFBZNG3urrsBnkE+AAfv3Um6ZmYLsB8Q3evUmt3K Z4eYSDr1VuQHfgLIPhhmSn94X8a5nsKGj2QjDGj/AFxd7R9wB9+fkLnwAB05rYr/AGaqrU2Gt1K7 Kf20TQ6rMsiWnoZ4SBlGF9DDmJhiGvmK5odwrQ4HWbxF1cMZgbs7JOwH9/8AP7B0BkzpN3z3K7Ll IJFxwd3JGeFtS0oskX0alYAXC3VWLq+QPNH/AF8eSeqc6qA7hYwxxlD0NlJVe1Rqcjuw2PXrIh4b +BMD0/ups5hPcDmni0PD/aKHKMxwHik/fsd/PYbAfc1Xg49lq9Mrgagaul5STTl3D9NNkaf1Nkcn JstCUXr7gYeyFtkTw9qdj4EGt2YZ+M0Z4NJJt4Ac+4+A5+f6WItXj1yDs6AGZLkGvjIgO8fJDuBb htSu7RXMMeyTFtwW0PjYMDwNqhjHpX5ysvAQ2beMAHgN/wCfY3GtSYYA1XTN+03qWJUnqMcObj3C sq3xQxfExdjLbAhuHG4dkMAcGpMH84zcXxebM+7Xac+g+fxwPgHyahVVVEZSWZJEi1Bekb+PMv2+ njkuIybLJuVK8rGnzP1AkRnR45G0ynKeN0BEbFLF3bgDj5/V1X1GWIyc0zlyfQ9bvb41O3ehwzh1 hXALcrCq9pW6/tRP0xuFV1WQD9tLQ+CYJorOUWd8N4c4AH/bu5gA388rPWJrN1hp9J6cwNeqVP1B UqlfE/Jr0x2fQ+PJtjchW09kW7ItRgmQXxwodH5ysob5wYI7G3bfz78APn/P9KRQXrnDuatqG0rV iSrFn0pP1ULwFjIL34bSGix4bAHmocOt7I+FBxHvjUYGPO6f7J/r4/5/790txEgPGtcRaF51XKTq gZDeMiwtNQZ3fERXtcDFcOebyHhiG9lgHoFl2MHs1ZaODrB3A2lb/iB9/Pn+q2kZgAs5dEjdX/l2 Z2NEUcbMVfkB7HC482jTGQRgRhJXeSymykqNhg0b2+5VNlwoQkcnKhcdxZFe7mSzrVsYlbVzVfcz svV8huGmeWybpYVyVft8wOHmrcNwmvGJADVYcmzK5QYz/wBbA/3/ANz4DquzReGqTJmJK4m2cEaq +mamu+DTs4lPFvlOXIhmF8P8P8kMCfv1wQDk0Y8i8Bgw5shs5+h/+wdMFbXqv3DJsYynuz4uB7+l /wCDDV2GZXNOCdNB6b3UWw9buAfeOWjkNVh1n2v+zb2E9+0X+Z/rjESQaRfDVaukHUhhkz+W3Ivh z1fqaeCsaJXKaHX5i3MuAQHT1o4pL56uXAmMF2hii7I7cH+wAN/Ac+6SI5os/T+o2BHNpoZmx08O xFHGiq1Ns+CzHF87ApcLY3f+JxMYtyFo9RPHJuySSdnqynFLsklU+3u7jfWA1dfFnGrUFfBipba7 Ym7CH2PRuoC7nBD7sJr5ZA58MfMmMpB7gz2ADY1wMzyUKo3B/wAXI58AfQWA/wCfQYGwEPLSNPdP wJdkEg4FkJWE0JLIHX1q5Pviu4EPwmYZDDAYtTs9Wk6Y8o1oWgT9gmKSdQfvx8B0eUXV96Ma3DSa 0oF/ZGNJN07HrHOkWFMVzynv0xxT5geGYY7RDg9uAz3AYzU20cmB727HOA7+APn+QPyfqtDKVVH1 OJrdk21WCQqv8tX1IJ8d3h8NLW0r2QwLYdwe4cxxZLGA1/sZhnZSgtaKHHYJzh/fvP7AAP8ARGF3 ErI9YzTWK87kLRjnIcjcJHBuq4uxQmjVRGylkkhWKOZhFGg2pYZWZzFEuN4KoBz8khhiVL+78Ibv YFkapU3THV1kJE0ZdxBVVpF3TFdXh4HnBgtSt4a2ycfw4k37GhkyaGhsxP8AZDj8/AAHAV8AggBW n7QuS1cxVzbVs5tcANbjXdPqtkYG1bigdhira+4VXMT7UZLBfOedpTm2PLQhjFk46pKScAH/AGAb Afx63Mg9PqCl7OMu9hSaf5UpQ63rE9IXlsWmlvih6fmB4Yean/Dg0s4AQd8DWb+KBmWXkJdiS8b+ vv3/AE62xmySLr8Or3Sn3HW7QAuSsgwG/iC9sKGkcyqtgmQ3CyA+I9beP2MPzkXaH0c27VccPnwA Dfz/AJ+2eLFmUJLg5QhlHFFOQbNZWbFfA5vwMZlVXiCw6YjG5GNSTAkdpahuSA3tpxeTix1JVAKj 6lqQPJEW5tJh6BDf6dpCHWLgkrcrU+7IlyXAPuBkL1xT5iAhKoK8QTxiz4oVoE8AnpdqTA+7AAQM V/A/isswPQdy0nkwEivbIG0/C1aJDxnDR8sOhymx8Q0/h8yG4MnHjJwCwXxXJjgqHpyWdQuyBHaq 34/v4BAPoOwM2TmK+LAH+eh6eLaQ0M5bA+t5lbyrsTbQs09KD2AYp+1FuGH/AJ5t+eCcBiNV9NrL N924OAP7+g/fwHX0xV9brF4AYqRkqUPNJDUiwCUNplmJQFhlC7s5gt8kidn3CnYFwT/mExhRX8Gb 8H9BPnz/ALoOORg8cpZDNDjMJoyoxj5rJUf+r4AY4qEscHLjSJKAOWOUO17Ih4x7riiiur8Nl4sE c2jbchWzPZ7mA1UnoDJpufLaU+B1LaNZMiETLC9PtqfD3gwGDfMOIZDfU8ms3ILGIyOECdq9gfsO fAEHqy0e+flXBYUqwKxGodX2QyS3DJ09o9sGK5F1khy1tgDmKrW3yHV62cfKvPWNW6M8+ywio5vm 3PtgAP5/36ZDZX+ZYy3fGuvKz2RcXA7Ip1/c1/cemRbGrKxmgxyRkuCt63Q2BwOT1/BHuCoBnF3p ZOG/B4P+HPj+/gAClCMiG0WJMgFGp/vJSrF/dyHAzAlDld7qbAoe8YGIcwOPMToC++HGQZ7oe2f1 sE4CffsQD9v/AFdBjKsLbTumASMbTm/mVLaqrt5N23IA6GPdj+nzXcSGaMtNKdyBcv8ADMw3DeJy zaQ2Bjjze5f5JkZBKFOhhSBOOcMTi2FZURZdjV+PKNU3Md5oxSMIxlOyIQiJnM/qw9A1kBDWvOke uQdKBVKObgJKznQIQtGsq7aHtXXrGvWlErF5ZWpDrkFptJN4MCq2LOxsaPkATXpvsTIzFz0k2wpl K+RN9EvPyFnJEYZWfGg+qGJG502lPkWfk8cn8+Ok7jDgcAcAWTQ/1sf+Oq0HHyZfD6ku6GtxaTQ+ 6IlfJXlyFwpGpd0iTCAeq63hh1uwO4wFfpZqcFkYrtAyzDiTzYGg/wBAoOwdW09fdRXMQ2iKY0uP ltaY41ZV+Ntqv2GGmlGFyira+yIa2GDp9gTAfnsK3ZllpfKg/vgI+BfvPgD5/oPh5jhaCGSDNuTU teoY1bE1uhzF+snByq8TEF4kFrAxDD2RvCqeHeYWCau0IyMDCJPOPP7AAAdcZhOeBbQn5rkq1vai 4NUl6n+1afEcEOK7s74t9k3AOHZOPhzk8g+TeM9+FcZsdXOrtv8AwHwHTJysm4ZAkvoy7kB3dx4J MMdvamisylDnkDhgtXkaKKQwXw66hJpJBIg0zQLIBqdNIDpdTpNT/eF7JBqUmjuyrRGlZVvHj5Vg 5i3pplV4/h59zLdsXRW7s72En02UYbulTB9b6kNPYcOGq/2UrAbdnrMYUFsxPwloo+//AOT8f6PJ 9qL+TImNFtDbRZLfyZPyOYPBaYKTUh8AzHBDQ63vgPMxDwVJggI8Pym2Mxw3ibR0HsGAQUEAePn3 xYGZS93Xo60hmuNS1u7zNTNmo9e1vX66HfLa09nq5mJ/JA/w4ZCZ34cLa+YzUarlBhNH+78BPgD5 8+AQQADjkWQ6QKzuAe+VjaNhSiSTYRiZW4/gZQWWfFfh6GyIThjZBAw1VLjWnG9r7NrJN4N1cbCW 6Aw2B+Pn37pYCtGoCPvZqlsuG1nQqrbdR8e9PTsqvd0To2RLOiIyM7RRvNLH2YUY1llbYkGfa65e eVPFG6PWeoC1XhJUharGW+3oN4q+vXxos2Grvks9Kqv5jgyIb5W7B7gbQREen3mzKbq95GVW7BAm /oL9v/sffuqrUWnyEggGXLaW+6laGJLZtwcfLcCl3CU18h1eHMLftDHp87kCHanBkYWUJvPCTbv9 BfgB8/8AriyFOh67Pj2+K0Hqchob4tlmDTq1EKcMHgIlyAhx5iZT8MPMT1uxlKrm2q4ZPug0PPOE mrsAYB+PnwGCDsHUOLZLwQ2TOn6aQ5LJY6rf94h20ru8Kxk1TilJi/MW4eAdbtBbB4r885Mo0W0V fZm+BAex8/AAH7YT4Dq0XPcEOy+4U22haUOcbunklnwFMvgc85eBVPatG2Miwx5KyyNFJEjnDNWW KCDPGhRYi77QCTYrIaAeU0ZMqyw9tWdb+SN28lvDu4yosuLKp8hai2yMjJw+ZB++Kq3cCN2bZiYN 3NpJzHgB/wDEfnzZbH5dfB09klVjGAhskaXDGLCYBLIeQ6yPRQ+8cwhzMGBwgz0/BVmjbMxfBjN5 tJB/19/t8+H6n19fukO7O7Gqya9PEtpcEO5pCOYPW0vOTRDYeSJ8xkQx8wH9tamQmzFENlrMGku1 XcBPgNgPn2DYDVGhWfKcKlPAXx2L2DlG1QAHyZ/AicphjaX09wxrirFu1GRgMfAYIOIcoUrBXt8m DNu2OLBUW/sABgAbAaurQxiCN48ssBKMHhrC805vO7HcKxvm+AK4yM7ncwxrGDdQ5VeD7i+Pnt/H XJaDQUFujhRkqq2S1E2vUCnLYT2qMJW3LUYkbpuD58wwyQ18wjntN56Djtiuh4kzn0nABi/AOfeA QtNd4L6kyVi5W0kySUUxJiVe7Eg9hQ0I9wOLMvD6eyOAev2ScBIYA1sZumFmDAn+lZ/gP7/ieAFT WvtGbDPVUkOrvnDyRJ3/AMaG4WFMfFdIcvhj5iEHT6rMD3AHA4kq2TZnsr+c3ukzmwfv+wYvyrre 1HwADyQwsaEs5ImLcveLUR3dkcorY+NEMfDM3Ah4LbgHOTyAJVMcG4uTJfSfPoOIE+/b+f6kZKhU BxdETdXz4Jaef/75GZylcZ45H3EWVciwV9lv4g64VVZ/LWfaD4oUOb4Ox9bq9q1PVenO6clAGik9 tXmAlbauvb80MKa+Q94rd85gHTpk5TQK0BcZZtrGLIMJaLtv+wHwPuwIKCLTGRPnq56AZJDHbKJK TCr0y1I93GJQASLF2o4GO6lJh+QBwdLOD4D4yTFq254/dge//wBQHz4EBx2g2dguSXTRmrpJya0V Qleq8Ozh6RMGShIFomL5hwZafQ5g/wA8wITvue6C/Y54QHv4ABv4A/07LMh0PXw/4DRqo08TLafU CJaLIByJYdNsZTF2hgQmBw9kbxaENHbWBSgp6wzbosoqO7BcN/7ugOPvwHpK6mNGhR5Uz1r6iXTq 8WRlk3RLPgpdJIY03ogiSR8ckMwLBXfTA7srB0TTJDHKUatqMZbKng5cCQg9vj99D7ws1cV0e1nf 6lkZD5qNX7zkZLjXBl0jK1iRMKoxJt+EJNrqGuhxxH1HtjGrQ0j6R2Pqs40d9GIM96MM02weoXcB gOkYdM2WZcFE8Luxbr1Xpmvaf1CGavilq51BTCDKhzLssgPR5jltwVK1B8EYor/o7hNiAPwA/wDX z+wKfUownbBt4FrfO6hBkw9njofqEY8clAS262KxgUIMyQoiGOtSG9rwL/mR/wDmZiS1h6fUFNr2 KHgwYrx0/hb1w031IuSElNrpqf6rfIY2ZdF/ZOsivYYGpYlntAdfmXu4p7ItjoSrWdoKbutrAzF8 Gc5CGucgAB/E+AQfcAyBZI29SeaZJZp5ADHuSBJJd1InkzXLbMhUNiMrJxXpbtHNJNKUhiWLaikC kh5HjjjiaVErvzEYLLkNu6yfKweq/D7LUyWw2cyNTGq1cvVv8xwr1baIrDY/JPmLe8dkx9qQf4sP 4jHzBZFtDw8nObOzyg8f93722CsZSq74Rw6Gk1zVa2ebc6NL/wAFkR0hD+VEsauQ49PWzDIYDj6r g8gAtTITGNH1lH5sb58AQQD9bvn8Y28Ecdcld17aGaBN1iTW7As2pySfU68IAyq9KFHBfvhPT3Bb mD63BTyB6cybmrtCz5urgmwP2HgH4AAAWKSx+oS8ymdXObnb9FshbLDzyTfCnZEqm14CruDhfDh3 4MOBDlSGQA2pDZvF8mR3Z3Sfv2P7Af6GLEIqK6epkriRtuSKSGV43Ro6a/aCDkPcRXbZkuW9uPFM ryJHJxHUbRuexkjyqO6axbXS/jlVh5At3OJNlqS3xszxJ3IOyTyExKtuXYxT8J1u+Id8TMFuehp6 HeC2ss1X03uf3bz/AP1fvcABrdF2RcEg+Lys42BzbIuOvQ6HcweXDqWuWE8eT2BPMVXZDIYIcV7g cqTyaz2v+j2ib+gv37+A4D01MzTnDXKbY5V0nuK21YRthq+2qNreLMFxSz4rw2CZW9kOEyHYENHP fAhLazjV+2LLwECJLxv/AN+PoOwdJ9taNUDG8WplRc6rSQG1BlOZ+TTKO2YuSbqaF6jFsfpvT2RP D3wPMA60uF8VU/bLkfWZZB3YkhDmwAD6CwHwAA+cSojGPchlmGmZJISYpETZC7rOXljilwDoRtSP 7jlha5grZNDupKqI4jB07dkcbY7aiPHjHFrJbvvwtcyQqrNQFdI4eeFziIdIs0LZsdcvLPiB4qvZ h/FOf1x8DTUOyGFwOfltpxJLT4rec97rqxAYAFugAD9sGMllg1+UUocM72FRVelLItp3rYxbVLu9 byjynbVX8gY8GRkT1vGacn1/ypwJsyx3fRnfD6Og7Af8+gdPfU+O9CtbZcVBrJ3pWNTDGpcr0+LD uGvhE0+AUIOOtQPiiGG8/LVJ+LBYz4z4q9XrCxhhg7pHAMMDy+f4+ATUhTW3G2APtknEmgrCQHdo ZLOYF4OUixHLjfzFsuyGGRfmHFLibVxndBlmE3j/AFUAIP8AQP2BguNp3jcNH9O8qSJHJlu45xvE x22VY3rcDVIjeKGNk9Nk2A6iJ91BjuKVxvGWGVecmr+Jh4PuJ+KIohw7FqV4aoDmeJXNpLh207mK rqu2C3A64tg8BhuDJMT3yGydyIFaEHw4hLL1V6GzbFve9gAADYOfdb7ImHa5zM7NtDO+ZAmcTvgl Z1btkOLtDR8wfD4eY5hxsHB4HOfCbyLtAZ7b2bOn0E/5/HE/0wo7I6Zws9Xxm4H/AOek2ku2A+Dr JiLb4mrzRKTyIdkcIcOYnuE5SuADOh8ZF4o2+cKq79g3/wA/0pZGOUGtyG+McyNui2bU2BbziCR3 GTe428EWRDQ7IDQx/nqPIQec/aFnE4ESLRR6ifgG/wDnwHQkqJZpMacQx54vLtttA1hC8jxQ3uG9 pVyoZ5YriUHqGOIdqPMcR7sN3AH8ZViPxZvx02ocx5Frd2IbbXoQlXyTaKQ8OyePh3BxeJz1DT+B snzJY8wqwGE9BME0ah7k/rbulhsB8Af9uP8AS95BCcjjIpUiBk5OUkuy9V57JqBhLi2hITYvME8w YhOCJw8G2j3ydM/a2Zm+7bJsGKCfPv3gJJHOajG23LJdzNnSZkXV0S3BwD1vdyfYwtsxaLs2dPrd 8hp6fNeKWYENqcNzq9Xedj7pBEc+g7+A4DwLrTMdJrat9qotPNuF3EtSDDX+cSX7YtVNu6skPnlf 4h9MbJSZn4e/YNtqGLMeavfO5jwb7pI5/oUfKJ9xt2Y4mMQTVo5o7xzEeBBqRZY6LEdl33UsZanj bJ4Mr9cx1JDQj7lOfEZupX+3s7WviHaF+2KH1AV6xmRuJ5pDjVPcnaOJfE0BLu5NZF987qWpW918 bsbvBPVQ6MTaFcYLB8JdufW79+2ABj0n4Zy3CjJnGaqMVuYPTJMsPZAFH4eUtphi/D424THCYHHz J1lr6i1B+c90ODPBvhJw+/b/AFFv/IAF6pAezNOdsDLubZi3p7q98ktqO7ZweIttDQvSleq2Bw7V zKrMD/gz9SGANQWUZoaBn+9jiCAfj59+ftg6SbJmUWpL9VocVVjW1qgmXGJsi2s6RcYepa51CaX3 wPaExPhoZd8YA7x3QPYLayMV9zGHNjdkd+AfoAftgt0NJJBMjajTSzTQvgoeGTP1IzjMjDEVtyBo wwJzxLUtY9TUrPG0MMsCZruhg0PrsXl31Y9/ru0cqNI9x1kvab6FbEF0m22pT6lQ9ekhtlnkCspA 2vU+VgUaBJQpVae+sjhSaHD558BAbZ1kExituayc7o1dgf4Cvn/Y/v6rkZcNDQxuU0TH/HKyUBeq ca1EHcO0OSnUvJE9xiUmYmMpCYqga/RPJk6v4MjA7RSTbx/X4Dz9RAHYU2OquzNZprtvzuHdqnsD WAtmEgxXNoUg0HqrHh7Ip4xcHIIdjceAznwmMF1esjDjtzYHi/eAqMBsHUbI+PbS+BpKBMCXAuNS lMtAbDr9HmafZRYXV6e4LbIGmskIgyHANgNoMPWbPclX8mBpNXBPvwAAf58f61bnpwRu288WeEzC pBnt5Z8nP2rj7caPm+EqOdThwHdFMX/M27o52MazPGJ8+b56nhdqPjHUde1KnVXpL066oA5u+bYP Xwr3GnnrGmaQFdkcDDhW7JMhkIeLbqArOd953QYzc2CJNV4n0EBsB8/7KW0LYsS+XAOUzVsbZ2bD W4iuSs7TvU8yLKXkIX/JzGQwn9r6eakMhAOYrNvtDSzI1VpPa44AAH37/wA+cEeu5FLWxZ0WUeJc jyJNe2DeVPtAlku6KplKHtQeydh2QN8AxB2+BB4N+ZOTfdqTOfv/AGiAP+HRHT90U/3s1QwFca/q upskt1lT4ft/YTJKV2zSq0GR0O0w4eG4J63ObV98eDHiyjMipBukwfn363d/AffkSYaYTSNvOgeF I1j/AJFzyLBpebjWhsx4DbJfubLg4y+pIjiiUOEllmcjNBHFGZC0cXbt1gQwzYMGU2MKeC1AVHej Rp7AUvb8Mk4bMNEWBDd6vE4/FYUOrzDiYmUOYDh7AZK5rSwICraizxe0FoY8d7eDoPPrd8Af391w G3U3gdvioH3PWrTKaIwunAvad2WDXy1p8PJKxbS0nsweWXp+aoN/bUht729Vo+PmHdQ3aKQbt7Hg OO/efpRV9D1PY0NkrmKh6kKrq88SSK/3IfYVcRQNm7CtpxiF4dPr9bBcwP2NM/F5Xa3g3/QPn8D5 8A/gLOB6juOBRdcakQucSZfmKdhBhx7uaYpHUZcVNgXBeqyZMMMkxwtRHuhgntJkYMwF2YzAjYW7 MV9/AANgQffpbRKZQpeFJotVJKjSLqpYxHrsFGEk7CJpBFDKkscDvt7iNIwGCto3nkjLR7xSaHTa eZIvpVAfRxLGHP0mMYgSQpqDNtR4QxzNg+B6p8ZaA+oYqRfVX/h/N18BcidNXYbjXxXOqRLDRxkv OkQq7W1A2p3QQyxFcDZ8JOgkfQ+TQ02MJyuLDg6nlAx2RnTcyCeqt3Fg8yuKyqnNTlUPERwcZMVd U3E4MBZxzYkL0rk9ZbQK6WDFIXrjMQ6WEBBRkOKaywcQXCyxGGT6c66BfVMbWLJSbU5AWDjRrE1f HH7P5HXElYLLIsg0m4sjq+WkDNmrYtbb4s3dmhfcaHFbbYZAbkLMWNPQ6lcLGzqBqe+KTAo7u4K8 VsZ4r44WnZBhlcIbhMau6Fl1X9ZwfCbMDSdUTtVeCCeAH7dxQetxCn148HmARdpkqZ1BQ1uwsEms DHvqMPMMpnWx5gwxw3DmGAQ84IhtwWVlWtDAm8BLR/7AfYKiAP3VnFZskSqnMZVfDKuuDudpveCH +CYLOFcuTBSNc3Ynww/JNnq8PBAELaarUWXkoUvIZgb2T78ffgB8/wAgwQ+MyqzzIBV1dDjZLc7P +I9P4OWDlHy2N04fMWw62t7gH+BpvvjEztjQURucc2/QBz7/AHB1h0k27Gjp27XokFonywAIa4pX xu/B8fBbnHsarT7TMFVzDI7PEVMsQF4ZD1YVzq15HjmxyOq92AvuikL0xtoYaEybkqWNfK/atwVu JfENod7GTofezF87qQx5gH3AQ2oPyYoLGE+bf5/XwAA+APnyS3LIZJRAOLfNPZvT2+Xxx60JlkWB LZJSuWptyWyHA7thh09xcO9K/AnWQsMuozuZZtqXZ/Xx8+f8Af6xkMTKqONVagSbIt7CS+OYmJ9h MhR8EOVc4sFbraGYmMjAH+AQgQcO2ZTdCRw3vYM/z4+fAbBsFqF/LqSfD2GVqcJWdFJSWG+CQG8E jADYy85Sg/GzCfMMMhCZ+L8Hhk8oU5Mcq427YgNg38/7bBrYyx6qA9wSOGSAs+7LhH6e2AiQyRkr 32JUN2MMe68ymNIZHjjh733HuLFBI9ZM75HHKhiMT4PSZQnmO0Q69XBdM1KnpoEIJR7IyrYvnmSH LlAZg+Gn2QhvlkMCGcUh6kq3Yzdr7kZlo4E84goJ9+t3YAGwGpQxlu9uPi5PGkk+VMW2wwquxhIf ClSsIs8yMBhDrek2Snx4eah8SR4ZPgb5xk54TfwGwbB5/qT4utHk/JbWMwgWE7n41e1+4WF292vk IFNW2CGY09uH18PBPME8Hhp6ZuBrP73i87+/ff8ApSrcxCXEMwuT9yASoaQJT2Q8HXlw8h90Dz4v zORzIfH4bVAsA8D2xZ/GZOq//IPv3H/P4yyRyMIhgnaBHBEFjQg81GsgjS7HsRMvuugV1rI9BZBk 7I6GVjcj5GM27sDI+NcCSRqJOONtkeIeZYDHW54g+reDVV8xkU6fJXAvy4dIgacPAZifDZLgh1un r4dHx03oc4wsszRaCz5sJ7YbB4B+6kmysng88E/+HhQ9wU5ZzQHbRIdJhtMQwUoewhYDTfYFwTLI MMktgho8Bf007PwZoV/7JaP5dQUHf8eAgAmO0EHJwdnx8fHdVtAkyWEHSXztlz2pVNXihwC3vAdk D/MrkCwNtcrQxZ4GTrMHV3CarAIOPHz4ABsAGHru2Fev7apZDdn9VSLOqWIn0PM1EFltyOr0UWYH 1uHsik2QPaAfgZCfOD9jWi0NsBhMMcNgPgAC/v8Ah1qni2I4XEaZ1G0emdc9uSSgpMtj1IMS80eA xiDyZHbxbNE6s7BjeUIlE3JMn+XD4xv3ZNeVUKrq0QiOYn2QeXNhdjD5pdtGvU48Nj2En21dzxfE pPIbOZZLUhuEyceTz1qJ6yTaKvqDfDYRKOAD5/8AoE/j0mVdsT4zJYRRcyWTCtDwSvXBqhyJcKUL iSmgOoTLIDp5iYvrUH6G8bmMKNFZk98N1d9+P7+A58fAGDBVYPTSl1UuXxMNnmRJf4lXkr+q+wkI CrLzRV63aHeAPW6e+OCccA2h85bZifF3nY+bXZz7YPdC4Cf6kcuyO0tuZItcUHb5WcNbI4cOrsNP uUosmi7gXzBhwW2VDHzFXcHw4n0b4uoGZ582Dx/oH+/qjhY59zyKmFLp2uqvYLmuNn1MeDnmfbjz RbcpHVHy7ULrkdw1ii8ityjZ5rHgE9QWa6A4tZ51IpC2pGLBz4zuHApFgFob4mu55XtRwtSt2Sk3 wxX/AIBgn1zgzLKHqMWRhzzaOggN/Ab/AL/0EpbRSdc0GYsEo+US4ZphblkNOqTaCRZG/CHJDcHG HD+HfAer+K2WwUt8wneZRD8HvZvtHsFu+AP7+1DDALpvMpmLzy2rOsamba7PodV8hT8a5K1zaHcD upDZPx+HsbFOgcb3MWLJ7HshwHyAB/X3gFLHt2v0jT+SqV3Drct8VYzDIs488MIcoBYSj44WA4If 4rZPhvFaWApVWh1msi3zbNkdsMT6Dv5/nwDrRGz2dwuiDUxuXR8aDhqBXHuPbxyOifnEDl9nYiX8 xqVxGX+Tn45LE9oHQHMj6kKqqv5WbDQM8yyah0jvMS8MBqX+HSUnp9PrfdQO4L7IjoZ/uoyE3nnh NmeXbZHjn4BB4Dh1aKY6Mi5NZD3JFJkY3AbYSPqEMNFesgBN+XYwciyIdqVWh7gHnASECDW6M81f cnGQbsb33339BAe5/pevi2wLrhMDMd5qVnC6frcsr5z7Hdy9oCmEDF28wtobInzR4fnlf8VmE8EM XZntaPCfoO/7AhYn+rWkhFEKJNO01T7q04oraYp11f8AJzX6py1yPpVnfRI4NjpZZe1vq9Lxx1eg TVqzqdfGZa31JB+lgwOoDF6gB70455GilaMOyQJKgdhpXpyTVLuV2Y2SDi12eBXLIYnHfCvrI+2Z b5d1i06RqE+NwRufccfHd5688pFbvFgyBsU8NNl7BDkpZBks5XxDlCjDFFzPhp8x8Q5g9ctRSYJ4 OEzfff3v38B+gDYNgfC+jQz1b5zIr5PG1d2CKZA8eX7YZLupGX8WyO2ye4WQYMD5kBScYAP6yUGE yfNgiT5894Dfz/SlHvke1QeUUrmZZBhIW1tIaCRjj33KhnyVMsCHadVmGTh/wXxf/nFhGV0NZJ9r sXc5v/4j2DYEF8V2vzLHS7gbXKZGZA1etteyNXTvS5YOAtBUi20YXzFDviehp4/5z4QfOBsyy0U3 +9728Pz8/AH7wHTZFxs37yPSngt5scWW5d0fxSbb+w3Vdt2M8MzDEqMtzztT1jiQe47Zu748VR8/ A44L48NMAlGiwpDIhpDs2K7tnL/zK5PFgNc8vDzMZi3DX7gB1KOfDnB1lDfKzKcJSQhxB2A/9+fu oxgrewVLMJ1emrYwxk3MNSJFtAVdImi0O40OLuHA3xkcLUX+VcefOYDLM4GMWarSQgSqwDAAQfoI Dpy6pZAtjqutwNczBx7BbpwSPmZ3b1wjHWxDsZw+YyGHu1Ia+YeABCfBZOc1eLZhhxJq7YwGwf8A Woj6m0/5ZieUtq1ClVyVVt06qImQBJGGwMhnogu0A7gHoZw3ityExqPWhdM7k15K+2IxxJNuwM+A AAEFAfvfrPNOzQK4R5sskQIZVwrHZhO3LHeVv3tftNJ8F0KpuMmSR+1WLty8bVmgFfNAk2aIujdd DZys0NNzM5cAocbNngfMW04ODCYu4pMuRDZCG8Pn1vEw1AV8D8zc+UEvN/ePPf5P3IDA4cD4NhKK ZmKL4uDRrCrjUOyCxgWsMKHKDp6HDZKTMQsA4Oy/gKvBhgsoT2Pe6uBnwB/+n37phR49qttD0CGq BkoqHZa3GbNP4GjY4lPaLasIDYwdwmWpyQPyDY7LX/dP5NV74zDEfZN8+g7/AOfwPqQfmpykhy7o WLgHAMqmkikrZzpph2UKlu1de3KGnYVxMqCJ+9tkCBBqwnWYsmNetl9SQcYEHABjvwE/1od42UCQ vUm9EIlfDPExWxcqwGNihifJ56FWOeCsnZsTWkQjuw9KRk1+3hr4/H5f6upyJ9gTNPrHXo2Grvhq vUckYviJMA0kJ4bDI+y3MtNbsBwVYCe2gw7NxdoWazOcJNo4D28A+n9gqvdGZXdyOFtZtaTGShw1 tKUOOTr2v20wLFyyibMH2Qt1u+GJjB8Gy/gNUzkyELZkbuibCG/xF1YoWh6IItRzDzvalf5+rQlf +nyhlAbS8X+IvS/hugZPZO9reySyDh/Et8CDDZWa5GhZZ8OE2hwIAfqIAfwXzx9P2BU8fNyyR5WM 2QSnzKK7gMmS0CQ9XuVZFKlRHAwn91FsOQ4q+VepVXxm3/syy8ah/wDqAPn/AO/1E6Fy0JfHONoW dMMcLDFBk2aPkMJLX2kY/gZI14V1Qvg6NNFJchzCcq2HpgY8juzJ5rEW5g7RbivR9YoZ6wrRzk6p G2IQQxpASn2MerIDF28xDtRbZOPuFqPlfb44M21q7NZlqcJdvcBwHtCA38BV1xT7EMsmSm5tkMjt lDYy9V9b2Q4MNkNDl2vKPnchDmGOeDpmCIvoZwOT/wB873vhzf8AYEEBsC/0wijAUocWZXZ4Bbhr bsEr2v3yt5Esw+AWFo+GwMaHcExkQyCGDfU+fOcCdmIauTGbIbSAaCBfqEwPgOegLFVXYGZQVbh9 UsowSPZo1Ss2v4bsHlh/5vUDbSePmQ+H8bIOAM9XzajiFlZVyjMzeENvHPgHAQCCfw6QZjQMkTd7 okmYx3S3tYcGsO7jm8hRFDp2ywYqs5Wu1mjekSQe8O39OWOxsyU3LSdvHVM3BgshttAw+NEMaeaB ra2ELOVbQlsktNYHJo4+t1u9uEOq9nNqXwDYcYzbWMWQaT+m/n9g/YOo14rpLcjA356rXFbmT0nu xnGCMvnh6zXKKYT/AKeh6kMWCt0aA4Ad4WWZX7mEwZvZAXPvbf373PuDVo6A1KxE8zVWdq9PBrCU kgzpv1OvC8tpp7mSG4p8O1FuYYWyENIn1/PrjBGwQ33H8o+c2B+59gAQX5BWIMgV08OB+UUGjVrh MlhjzKfMNheLVyRaDQt2hDQ3xPW4ZAxzyBUsFw2ztezE9ktFJeOfAMEHwGwakAECJAm3CbISGCXf kkJUTO0MqxZwTRFo1VZDnkzErgA6mSZZi8w3nimEJb2FyaKNXfjjIkcmNm8KyF5B2V3XdN1VYlwX TFfGPJvM83THm1GV4EuF8VKJFoYcfwNkmTDDAYxbcLa3d5GK9yLTMcwSAm/0GfAc+fkJ+6TMyzHz NpdkMgclAre2tOpsTIsIC4JCHUp6wnxomV/MT2TGyJt4Pm/YobXyZFxKVmso4QJV2KDv78APv3Vj wWnDVHRFZ46lq9BKKtVWqZTvlWXM6pqnreubQuKiGlawfWQvaqGXsBw7Z1AeVKsWGgozrLM8HEkF j6f0w5DgAYKvSOcUO4WFX1g8bT1w8/qYC04dkWEhyiktNcjC/wBh+5DHW7BaiO908pI7Kzk7kuRG GA97SQfH78AH/YB0lFDRnHCeGKoGWMxRxnSRcSBUihXbxkLpy0mWIYYWVIsZmKK2cM3NZIOZ3xuh Yvdx5H2FB7r4sUpoepAWDGu75bVXNQtpUrNtAbwdIW2ixpYur8V8P3U2dDr9k98J7wyWbWb4UJkz gTE3/wDuDf8AqSgUeQtq5E+vq5uCyBuaeoqXfBL7DwMA7q7kH5gyJweZMIB1We4wAbJ71erk+DhP 7/bu/gAD8AAQMys4eVbGzQBqAHbYdWqY/THbQaIyK8WwpQsPxsxCreGHsBbB3Sn3wcmdjWi5FlZR wlo7H3dYOAoNunz/AE7GSPXbbYFkHoqStja+cBrvfAYNUCm4FEPTgeFwx8PeJhgOPT657gIljTNz V3zFmRwiSE2A/gAP7Afx6kZaNICVyyUF1ghxjMdpsxhMzht2/dbbmXtTHlrkI7K60hplDHJ2ckbs jvS5Z0lLiMAG5N8VLHp8Iqn1v+Wo1nVpnVc72BW4ej1NbKPkQCBcGBPcJlqckr9bx08b68LbwzFC gx5OJKSkg9/qI/h2iQj/AFuV1Nnq9XJSq+shbW2iYSu6Qq6kK3dzBRWli2gPX8yZ4cwQl+PA6jIa zujQjMxzzaO/H37ABz/7AbR8u2KqkEqbH/Gs4WSNiTGc7OFeuBQ8plDzi4VuY+ZdgdP5V2v2PAZw PcyQNJdwnPj4DD78fQeoGZfK/mnFUWxku2KGhv6lHA1Wjyw74r6ZSiHah9wMMlbvi24OGqitGE81 GBmoUoLWSe972DAIAABbuIDqmkpWbZSS3Mqh+bjcJhga/kkwbFPuxvIV0UUKs6nfmR19jZ3yACOK HiRI5PPOGPF5Cq2rRvtdtaKwcke6aQpYa7UwqPE6Gq6nylJ+l9JuZ1sZ8bCY4R90MTLHc5wwqMWG u3sM2L6nowqSZJCJgahlJMnOvRxZqKrLrREB2O2PUsqBmrs2AmzmVezobSYSMhtZ5QBnZhGFXgDg kw5+mbIcszB0jS3g7FPxG5oKECTFmSPVnXOT+2Y4lWPZvABL+p0ougBdbxq/NWf9fNaJP7MiaR2Q 0rMWUbOqNAkEDnT/AKHSwmKdkafbYMVfSztJrKwQMksQyWSmLuDOQEsmylse4dt2RwW2Bb37CfB/ 2uTGA6T/AM8QCDjsAEB1VEhX4dyU6xss8Nq64M3OpSJaFhViwNgeubQmW0BuCv8AT3yRjwDr0yuY DhAnQlkYrq7MzVX9JOe2/n+mQwHV8OLyQy5T+ngwL06u7YrslhK9hWRcibqEAnmQgXhzQ4f6fBQ6 uAnMWYmr7Z4PELsHPn7fwG/9XY076U3wrp/tW/f4qGTS7eaqgc4tRbsBemJqu2aVSiGPmLbgH9vh 88o88D8Yh7mTOVdV/BwCCfX+fAPAdCWX6YPOghhlaYQbs8W3G8n9MFs2xvu+DX76XGAzIjl5FKI8 Y072Y8j3BzjzeK4njw3Hx1VGsw6e0R2R3qqpdnXIdgcwWzFTsJf6RbVSB+eB3yGt1WQmcTr98g8G eUN8ZlkGkmknwHPuA/r1PJ7A0am18bQ4Gq7IsJoW3+zQ7JqQHu5ix65bIt8GLQuH7gHmbPBgYd1L HGPO10bZm9u30Hf+Qfr0gaXmR5UfOFq4G41t3hya9eGri9ZIcrdmhNXB5i4GXh62wvgOfv1VoZMY hqywM+k7Hv58Bv4DpkSGBgyhcOUm3AyadcrmpYxnWEviQ9cxmxNKTK+Ww7gtw4fw2ptXzzUHGcXV 2ZGObJvu/gT4D+wVqF+pZZL/ALzC6nSqZthGjU8wyy4SdntyGHfx7ceU6eVEKB3cadgd8xxbsgxx CYxZpndtfetfu+rOWRbkjTmpuBnVAHGkor4SlyD1qWRgYqWxqytCN9PDrbJDh8DBHp/B2R5ZlcX2 zOO2yO4A+/AP0AdNQJVC2eH9tAy1RS2esJbs28A56wL5m0Ohy9PoFcX4a2hp8vbpiOBYa0nWojM1 YNKys8JtGrngAwY8BXz7+BAV1aFqyNdaHYSbqWyVtkQ0O7EhouB2MCeGtES0LGrev63Qk7h9br75 Yz4wQAYf9RdQfSMLR3/n3uAAb/0mVPlAvWWt2M7jQlkHhslTp+pSWpBIMVKelpqaHn1Wnp5in63o 8P20+qh/KIfnDex7/wCfPvx8BsBwLGiPJG6CWFMp42jExj8BAIs03s6ezlHgR4fPtfIiExKiSrpJ XCRBjsyN7ci6U+ONjEZEnI8iuSogyZYsOBaEh2CQ8owt1k0DbIHiZYFoU/lMlgBzFJ3yH5h9SHqQ OZyb7MTOWjvfAV9Bfn7wB9+h4ZDMlUPYS2rgX8a5HjfyLIqWjpa2r1evIZSHV8OH8NPuBgmI9t/x DzrIZrg4vUCNvaSbxPgD6CA4D1ZWetPh1Js1oU0Rcr7uER1NT75XZInCJouXygB8IahEMQoWotDp cFSUCFOrbNWhXkpIFdaTaXv7IAAAwIHVRROsJ8pO/wCJqApLSKOzcyRcSSOqsaqt1q2dMoUWnMZG WZT5UV6JemvLYYb4VTBRGw9TIURjgM4j8gQMV9/Xz2PTlPcx2N8rKty4Bs9r/LfZef8Aib8eOuZV MkbuNPSLIYzLjhGSNyQNh6sYpcGxTKzwK5grosRTDUeqoZmsVusTyeMsKtmSHZFmrYu2rYTXJ8r/ AIeGcE9kHh65rS0alRuM8XKPAwH3RCVX+/8A/gNuqTh2JZdh0/m1zLtEC+VWEE0+tmGCWyAVeXw2 FYAdPcHxbtTkiOpV/wAqQyZNXpsaT/0TB26ggD799B2DMrUZqDsVCs7UhqLdlJVA6kG27ldOARiy GUPWaK1BTK/h9hi9bp7hjakDgdcoQxZq8m8k9j/f9/Xz/gD/AFueK7aKgtCGkNnyaxclUlp7qdqf LgYXBypuIeFw2AxDQ7UcOY9nIFPqSq4VBZunNWZlg5aKS7nD4Du6A4+fAP2R23IJIpSjTBDG6I4l haNsfqo5DSb0aBYg60mWQ5WudkIeKVdRGHVFaNopyu28eoW9raNsUkJLU/ONDta+2pZB8eK5vC5k gyNr+yAyTGYV+wjzAJMajIrDKKMhBP1Ifs3zPgEPnB7MRkMo81mDCGzaPv8AwDwHVtLQ5RFy4djV fWMnOtomgCY9PpKe2B5UVhA3Itj7U42YMTB5hV248DmeywLRhmPez9OfAAHAdg68/qIaQ+mB0tRY Tr/rdKn6qGxr0/WpW4CZNFprCTTHtge8LImB4ZAy1AV/DANgiq74MWfuqQ8b97H9/wCrxyNXinSJ hVK2gYkp89kCKa/MiaZ6nMSlep4sWGPhmA+EMwwYNQ/lvw+MVdtn7Ib59+It/wAbdPgDklxMSLnE 8TiRo43xjaM1tMqYnDMh75bwOoJFkjkaRkkRkwjSaPKeIt7t1i4yypcbA9p56XtfsEcMnmADlnDc k9CUmxHfBrxEDnotTnpS3V9V7xaieyD0Nq7XwEbbFmm1dZ4O7JLsbP8Atv8Aigv3RhX9NaiKqvit 3zJhm4bxslOB6ffGheh6gikQWUmMBhbW3x77wQ4J4fANzBnF3z/e3gUE+AAAP38Jh3Q4XLU7JFsa YEG1oB3ZHMDWAsYrlzvnmcxf5hDuB8mD/wAlj0O1FtYwQyiyT3vmxw/v4DAB+/2Vqd0U6vcK3ikM iNSem58G3GvXkq7SHFi2Ha7I/nGQO4frOn1/3HT+Mi/Kd0UkJv8A9+ft/AAABI+GmlKwb6LnPSpu IkYKiQRS2Nxz2kJgmZHla6YY4tTqYiHwrbQOy+pLIhtEeLIbWVtRzk8HjjqOIR7gi1vDd2M8tJ8u zmS419qs6REWnKudUt8DLg/idTk9b03zMVt4beewWQnUDRQ6yjcJ4Thifxt1+AH34+A8/WRg1ANt gEtUAZJSYYGyHZ4ockeT1NPTalr080Q7QMIaGtrcwhxU9YAEFg89m2hmGnTlXG/PgD/7Dv74uBfT +6lqMdBc+uatGQ22R63r13LSz0r5V8TF+ZvC2nvg+YDxYLLnIYza2hZeXi0jiSj8Bt1BwAP2wAI1 4qrVpQUuyaWTXCroYuwo1e2g7ae5DYtNFXrzRYyIPD91IYd8HGFWA4QPh8ZfChNm+7OzxsG/vx/o 5FjbuNzvK7ySBu2R4wUyaSTuLbNjEYC9w8jnrFJuKpSJnKRQiEKzZVmF9QmhhGoXvajj2+erLL9b x23TvUrm+GDZ61bCJyzA2t63iMkpXXgMqHiyGLIZIbh8yCh/P3gnyho2z3NhDfPj/wC/n0EBpVg8 yjbwaVcW7INeJuMlTTx2rOmIqE0RcFcCnsER8b1BkDDzN4T1+2vh1mzbXhjjSVXO3PvA/wBAvwFJ 1nZHZHTJZ1JC0MmNihjVe2BzYepzVdyLRav9rgQ6HmWRMX4cCARno8xlJIe6DPd2N++G/n/fgPWn UoUB188OxkWnqVSriq2pC+H0Zh7jtSnLkXgLlDIMjJ3UmJ7B87h7a8GCZMpyZmR/NvADgG/7B59O oVxGyxSCR82UZLhH2YAl5LbDLLgYm6Jv46eFV1jKx+tgheXLhklC5R448XiO7I+Ca6h09806JBRb aJ7I7HosN2EuDUYDiZiHY6RUsWav1uHMVuYhsCG1T7AwVVsXxcXznZOE+A2B+4CeAHljqIIJ/wAy vbQTa3CLdVDW1tshPzpGzyrlE02U1CMG8cw3ggtvDbaClyQX+L6gGbIk1dx/YN/38+fAMhDq+wJe W7afAwfnYZDZIg/JrfhEzdJaurshGHDrf7J9HQ08FyR5Zyj4828j90at38Bv+B8+AAIJspx9Ocvv wxkFWyDDkeoqIj0/VZh3mNCJXr5Yy2P+G4h5gdg7qgV/e/Jq/OcLUSUmrcD/AL/l38QnyZywRpg6 udiExom4EykjjyLZJ53cguP2EXzYEwsygKyYI7agO5xzx27QCmrxy1mr9t8dVK/xNMGkHVnnY6ag ITVPWDs2sLghgXgt/MtgyKhj5iGH1H0m+V+nQoDAeuJbZxgvHawWOP8A7AMf0P3YslgtStJGo+Ba tY1dYWUtY04vmHut2FOi6fdKNSlIQAvDQqHMOKdNR21PwhMiNp7uTHAo8HPd3ffcAwYe+DAlCOnN bgZRK1cpVQE5zPYCWAl78kaAJaV+PxEzZ1vH5ljcfgPGFmM/jCYI394AHz4DfwCD7GxiRHDVPVd3 HraW0Or+0uNXhzAZ3cOBy/iOFgTFsxdifW69DgqQ9DnJ7NWaurE/uxtJwAbB5/fz/VmRXkjKn2ZB 2FpIshChkQgCOPGwSY4lzsZDtFaIEWOBhbl496J4pDFLGTJGYlZlkiawMyQoK3iVJN2GccmZh4xi h5ucSJNFhpLZZENDaIhi0LaltKuH+HDhzN4YJjU+Ve20DDGM4t8szYwlXhDn/wBAAbBW+HXcwNWa TYwEx8POmSVMwBmWgJQ4ibukVk+IH90+Gvw1VtXyE7k1ZiyhRZ837cBfj/uA4Af7AZRbAq6oZDHj ZIySrdTMd2jHD0P5YE8t2AYslPT3BPATPweeamRnZsRZNm82EeAADYN/wP7Bi37NFZ38Ust2N5wY kNXlfIzkeWyPkoS+NEMgY+GyGJjgtg8PgVzCJ2+hq/nUnwe/oID3AefODcFen/Jytt/T+xzx99nj 4x8m+s7csxzy7GesarHAV5PnP/bEijd9WWqBMtjUznrdfWY9hc4o1VNqZRs2pdQ7AoLCdp7xmTcG 5ktSq8FlOEY1Lb4EHT4t5xxxrO1MDKRyD1erFA9L7ifwq4RYbst2y6V09aYL4tPKktz9FtmpVXPK RK8WVPV6dTq/cTJcL6WJexsgGgqVprWFmISreArH1YhQZ63F9fxQvbB+K0uv6fFUf/iwLIZLOtAP GUzFhNThXtkOUpdjSpjBVdkMhiYtuCFy0h9P5MUV1lmBmwuni1D+GwW6f8+AT9iIce36Xs98tC2l sMGT7sqdfGoa9K5ldzY0IZjtu+WRD4ds5w8QqXmH7UMGebOf/wCvv3V1pi4Cqn0z8aWORLeNzVq4 sY7vHNn2HgjjqsWCKWYFo3WWSSCW0kjQUzBse7CxQoe6uOlLR9gSHdwGxNaWq7bc6pRt8yM5bHqc yxjxZovmyWCHcFbzKHcLAWwf5peA4wYU7Po+yGwhwB4Dr0aW3nm48OxoRjhOox8uwSQSdPbwwvnd BerlEZF9wDmA92LZGY8QGBtasBmnq0KvqAni7cJtXz+wYVF79VFS0ewKQzKx1c95glhWCHsiIPSX ZfYVuxpQmVFMEIi3yNbmEHEJt8A4h9zN0GLLwE+8b+A3/p8C7Qy2Mm4H01VUpgbuREvDJajEuZKs aXY13OA8OyJ8y1GQgY+v84cdsfODPPhDaP8AYD4BgAc+wRIYpJGeJ0WFqThs41AreheShhdx4vib pu0Y8tjWVUIdXz2ZWxfdj9NjHtuDHKmWdNww7aAB7yetGYvg81DW021VZtA5uTX7COLpJgt4FTKN D5s6fDp9bTyH8hV88HuYwXydZBm/9v4IH7/1yC7oMUijtXIw8k8pHq3qd4DrTRE/F9xpkWyGAzDW 7IW9wDnLMT+KmOcCygxZ4Sb/AH/wGH0EAziFbyIC+HM2XDG6b0jhJatzDteGHA+JlNnIrdbvktDm r8y1B6+eag4zte0DEZ4CGzbx5+3T/UPTen9bcnjOgRXBJtS7mtksIhbVY1/L5QerICr4j63DsiGh spBwsZttCBYxjuYLQ/6J2T3f/Pr+wAAC9tAmcxwviMVeTmiEPIrL888fBvoRuKzFVSZFQiUyJjJB G2FyNHbV7eFy76JyWuilTOaZ2i6CVyO+S/1WLh1LLHZLUHLB9QUVeA1LMAc8mMjhCTqrajyeB+YU GcX8Gk+DPYn18/sCD0oFcfDMlA6a52RKZKlzrId8XyG4WFDrloloaYY7qXBW4dk1IfDBtuPbkxyZ oVxgzhOybAfAef8AP9DY9LcM5wam1SG2RXr5nMlx1Otnl9dTygsSBKGPh/DDzFCr085/INRkYzFE MmzHEkIbOH9gPgD/AIDBV1uYOWM4TAzvnabxoGvVt3kNWlfURvD5SKQ0NCdaKGHDB1uY4Q/nr/Bw /fJYuRGZnjzZwCA8Af3/AGByRNDul5M0SFI8qx25PslrI3Vt22PPuHnqAxkRssXYzq6tmLbbxsUF Fe8G7PPNfHVjHBOTaCcmqrj6UlMcgCWy5MKQnXBSdiCYAk2KGmhon1tTYQHYzZsOPPw9WfHWAa0k j/RnZUFTWwgmPkwcrOudauWh67iEqyZNEumm/Myt2ZsVBlwAtY94iFd8H+hlKGs44mDAOSrhR6Rn GTJfLToUGKTzYa3lDYxhhOMGUWn5udA8gDsG0+RDkFvp6sgqLrcNXfiz/wCb1JEzKrCaFQQCBmTQ OPF8XWX4Hjqsd6tEMpQ8OexgbRAwLHSVMhajtV+o+HGPO75K2+yA+LJVb5/PT7AAnE9GeSgv+yef fkAAAAHwD91ajUbYF6ZofuXEakm4IGm/Srp7p+q08xETwB7CMUW7RT4bIHshbIOEI8P5VMWSfFxm xu92cHQf0+g7/jDvD5DpDT/fy5fCS7NWoyvhtOGKZPB1OHFTZabzAgnmIdkGGTzlaEFKueCvIt8Z lhH/ABcD4CA59USC/H35/aiKPbF2xE9civlJnoGdTgkOk50B37tVzYSa0cfmIafVZdlH4Tj1gPuJ hZRlfEmT9kkIDPsADHtFsABBBm0m7BAWQTTI8iRTxRJI8cUukjmmhEQj3IIxqEZ5SfJQKosnpCCV opZTIyVgHVGoo7WYkuu4SU4BoY4+Gy4SaAQF6ka7sI8nQwlPzxtXFu3unsOJcLuFy8ANw4W+nrfz DBBb36v54P6zzwmT/wA7UAAO0WwAPPw7jDj5rrMfLGQ4yfSMwbxdDo1XrLi5SspUoOP+h1u+ByKG jgV/4LgzYoavzlG3s3gf5Af/AGDYYdLX63SJAFDd3aNSeV2cteOBu0O73YBKMNoPj5X7IHhw+yfJ AdLEIFV85RmgqzLJyrgjs8Yb+BP7/wBaVs5aF0w85cyhpJqypqBZtwDciQ2GCiGw1zGW6v5LwOGn /VT1f1o8TGblFoE9jNhPP7AAqL/f2qJolWZQ+qk23QK0jmN5IxHDHHIWpss9pmxr0zYye76JllaO As6DLOliOUa0Y/alLgTfPJyFDiupjT2vslckQ+r7TdcFSPlv1j3CreZW5hTZHvVBXtDgHzZ4bI+L cwhZBxSYG2uYfGforzvaRVzw/cBP/Xz/ALL1gfLQMsCe+NDI/gbauB2s1fPEseYW0LUzz4yj3Cq2 Sq3C1HAw1dn56otjCfPHkZveyPGwf2DkHWRGtk0e2olaoK0xC5LbWNkafHc7pvsCwbTTpTY+NGm9 wDWQ+ImIge+NTYPsq0zD08vgwYSx4TV5vj79hx9+xxwmFMwbvOOHsFnT6uyTFhSbYMWr+TTD5V7Y 5NDJYD38x8p/j9qNWnjT/P54MGIauM8J4M+/L5/3590Ikkj1UqvppBDhDWsVs86zuJ4sRUkFjKbc 9fcvbi2+9DRoUK7yLMjsFjft3I+0JIGs1lRtcTXHcb6ku75Dj55XlGLRtqh69ZGuyK9ifW5SJX1o HlseI7qKBhP2d4AMCHBXBvA2fawdXBMcX7gL8AP47+f4hYbVfUCo30SBobBwrW6yNO6hw9KNMOE0 Poi4yyhP4hZC0yJ58PY/z8WtZZSZVCGf6X4m8PfABjhgwH2rW+le7DIDOlUEeJB60p+46nqd2s6v 5aeeKLyG5Mg9DQ7UqtwcCEMHPX60tRPJrLQLWSYPY0kHv78g7+fP4ACQ5alb3c6Pmwsjtf8AqCyX awk92PXAvGFh8UqlqWGwMi3ZCeyJ5CaqtvLYK33fV1cZj/Yz/wD/ABC/ADk242aSG1hkdmEg59c4 fTivyPU5vnjjqsXkgGcrnBEjKg1HIh/kWROcsu0qchhTcNl21XW46Wh1HcCQ5ZJtw1Ap8ZTz6rto gwvljPi9V9cuJCyLIrdPQsXCZBgONtU7MZuUboT+7VcD/YNg8/1aiv8Ag55cVUNXA36qlHZtYY9V qtsV6XchcuUeDsDg4p/zXDAOq7eeNmGYmhq9Z7GbSf09t/4C/n+lupkCAG3EkXKVAu/NS2po/bGv 5bIUV149Lhr4eq1uEYZN4araX3xHZBgxDVhjN/Wxzf8Aj/6fqeClvLXA4eqnJklWEBVf5gPTJhhM K4uW5VzZJBD2d8cFtgT2qAQUnhkZmZDaFl5d7RpN2N/v+ADABvwszyqzYP2O0qh1xwkfApgbPpxU cI/gsTlz02Mq0cYSNC4RQV04ztI/fI57ccclxWjlbdwrlJnKnQ7uU09jPKo4PlLZuzanau5DYhi3 NhlVLMIODIyIcN8sCHvzg3I/OSiuMJ+ESHZHQUHf+0WwbA5suv5DHV9naXz1bxpiGn3ZYV8w7Uj1 lDcj1T10erb8DrTIt8gQ7GBJ5A5W/JihRZ3zzZz9P2A+fwroYB02rkXw8GAu7tlATlOO8O5kdTDJ kqXXKvDX5lwcDQ/raqeYEPkm2PnBmbZAnsAAAAH7A/H5m1LIYNPrYk2/VWSNDu9erez5OcjqbHFi 3erxXzeDCHM+GP4O+L4E3MJ7piSJg3YJV3/f/wBgASR5JGjd5HZIrkhZGwuNCiGJgQ39KSRA98bl leCpGOPY3Iydt/UglFZZI2IYXYrLj4NAfPTC8IeKsgGdZBsa26iiUzEOSMy5kXTnEe3KEQ+Xs62y J63xJfrQHgTrPHtAzI5ve+0R9BAH/wBgQfkOxMwM6ATMqzuExQ7JEkHg9flrUfE3ECe7Pp8N8+Gh r8ydWmCkqzMHko+I3B/N0ef8A+vx/orX09nih+G1+NdryINT/MDIaSY5GLV16xlcPaExOW4b57rd 4AbBng1v6Gh2+MBmzaSjn/P/ALB1JWQ4U3FqdbPZTsMPXSYtGIQPUavr0xNQ69q9Dh/MMGIZiGnz XilnA81J/GeULLMc2NJOH0G3QH35gw6WZdzULK8jSwy3CFSO73MbZjnxjXaK7rPIrlgCBHjRMcc7 dTlHIYzF7GpbvPu47ePOXCraajTLpR74TMrOdu/GTaPskviQpsidUrFV4tkTtn1UTEMwnw508eB2 dGGInGUbuiDN7/v5/j+O/vxhMDNFaB2rSXcjhJqUoksjCYubOIqbIUtGXbQun0/gYcO+GGDtzPq9 8VbJeWZYV/YHj/597AH5B6JLIR7AApieZnh71D/W2xgcA7BLhnoqm0K/84YWw6fD8HP4HYzIzYoe LMTeDQT/ANj6+wb/ANOwpRZ+eQtrvdMN1Kep9AXtUC2HIXG4M8VsTQMMfDcA9VmWRwwaoFwdxoZR ZtCryazsmHgAC/8A9g6vdQSRtOiSYzGeOV1y+nktQAi8emOMEsY0eTfF7DCtrBOxI5MYwBIgPdn3 cu92z/5bo115+lLQMYLb2eKbat2OyIAn5mdX9ZGLQq8tY3dReDp4eFMmJ7IC08Ve2zphMYrlP3zE J9C/YNgP9ejTQh1EFsCmQzHcBLVRV42rrN5INsisodjWgvHnK4B7In1VDcFtvZAQFggTnD+l7MJg 6u2Sq/YAA56fP9IxkL3FlaNb+SkizEgPp/LscWx7BspXrHCr2m17tTw9POMRiwxfGAO1KU+pp+FF 8pKIwwHhj/y4Y1Fv/PcMcK+B09X4uSyjwGNDijYym4QwwdehtEVesaXSaeYWjBeHuDJOPp55qW7M eezdZkwfmweFugNgQf2AZWabblEm3g8qRSgeoa2sikilZIvtyCOMvknFaAJUlIv8iI5N+Luh45r4 6PMcuqxcgblXdDG2QmrZuwl8O7D7CMFALvSJRPIfNmBmSyF8O1PlXvmH+jhQn9JN7Hv/AO/8B6fB i3Fs8h17K/02yiTIw2BcGopgiQz132ahtE1fcNPdVskxDsD23Gy+NozNzwmT96udkf6/4A+/AACl xB6b7VV3Z3V2pA0u2pCJcgmV7X6o+RWhetD4fw6rT6rT/shwEQbbG3Puh9mOJITnAD7Bv/7BAp+j cwGIWEkZph2p+y63CNjwHQ2hT3RDs2UrB18xMQ3wwnuDJvzgpUdyZ5aOMs3m9jfkH2Qdg2AALDcn 3TKioayEhweL21ac+7n7hWJPTHWRIyQaR0jaF+e/TniMVYrHu5s3fAFWQO4LIsxuMNWa052m9k1D u1tRA7VcxBeuBElKb5p9DMKfcHJOH+CqW0G0GYRmZ7q/9fyiD7u+f3/6DI1/pDbKRF8SUnapbatV wZLNDw0NPEoZQoWAi6fI8k+yTN5VJ5A9jM+h8ZZvuxs5/T4B+AAD/UdM1EOCRYEyvmjJN3+G+SkV vZ8xfYUNDiu6vXKGPDrkOYn/AAHA4esEC1TNzVyjNvnv/wCfH8D/AE7BdoIBRHSa5KLdXAdS1Pkp bANcTAkxXP8AEzTdoMjAyWRW5gRyDYwOoD4OBSzFfUY84HAiSk+2/wD7/wCfBJ2jMSrA8MT7VyM8 SwJndetK8W5WJulFDyBY6jRxysZhMjojsiiS4n7cbyS5MfIoWfHnpb1Bp0sQU4XxmlAJsaxmKmLW uNmF0dkpuuWGualUOeQ3BkQjA9bnqR88jiBgzEqMGWpaHNQew4sHtgwMHTCHsAfKX3DgVGslVcPb anuBbuaOJfFfRG2RZVPp9VmIlqKD4oTDlL3hZcH3rMo+cGOBEk2DQPfnwA8/vz8q0dodE2QePaab ashPvh2bRJjJuaOvPdXoctEaE9guBw0xQ0N8IMliwP4eGpb2xCaOTWpjdqSD+ggD/Uk6Za3YIfTr UC4k204ZpJsiB3DlAkOm1ykIdymKvmLd2UnT8zupsI+2qBMdsxdNjKgtThPB/wBgP/sD8+WOV9Sw ek00rmVZdLJNFIXMMEUv1Bl08e/HJtRsEXHHuBbkEhE6QwSCEoJo4UhZp33I13tUQJNO+KXIu+SW rtxA53Ow1Q09Mnhx2bpzhLdhZRery1oPmTW/8QbO0UOLPoY+q5mjRjmBkCyOyzeQB4jFhoV7gZUa r9lwYN/P+wDDEBWSszKW225nC2imWTOtsPgWaKfPV/LW2ixnZ8KQyAcOnmA5i0JiqBIHuSDFl8fO MnElJ2PYD3/0C7FfvEOtCAEXpuznZbTYaS7tFqab3iI4dpROqBDDj0OyFtDhvloVXXL5sP0Zl05+ MOcJNgz+Hn9g+g05qevo/YsPm9saBDz0lb5RMcHCzQ8tXbJR6YQfDFwIVkTN4OdwLL2cmjC1dmJ+ EdvoJ/DHtF5+QyK67is6h67pI8HeiPdHk2FXx3NYJ9tV1UxVTSLSRViAckbPD2yUMsaAPbxx1uMI 8fKSzBTNvhJrcCBjahEcO1GJb5+Qruput1+YHrd8hmeH/AsA8qsnY1oF2YMB4mzZwAA9+fH9/Pm2 ZW6Hdy+TcsU+nMmzA63xe7O8HewXY1TuQsOwTKfodbcIa/alc6h8LpBp7yzofJhiO7G/dfAYvyC/ AN/PuYHwPKj21ArllSU/DVFW6mjWp8enIct8U3KuTCfcFVPgeq2QgGeDxD50MnyhoeUYHSYT6CAP 26/eAP8AUC2VPJbVutx7QBsipXLjZa6FUP8AL2Jod6lF2QQhob4Y/MD5OstPQ525vPKGW3+E9rt/ 7RAF8+/bAfMzJlG0ARHjdSrhfUeQ1hHIwbuz7grUMCCMWyNQKyq0Mwt0rj/CSL80bv8A28fNjpPr avHlL6qkZU1kT7LMKS8r2EBthTcL5KCbHlLfJEPTGnzOXw7G4+2qpis2amr4wswGE9njYAH7AA3+ 4Ec5p6PL5JXn17bSq7uDbLYJjU0JFqIbRplQyj4wVW4ODJvA9PeMbQqaxuM2Y+FGZm83vmwb+A/r 7qosN8dHdTJWDdOEa1EOzWSsmiyCW71XFPXIUPTE8O+Pkx8XHC4EgDgeBp5P2KDBiOECWjaiCA2A A/AAHVhMu2FOximdZdQTW1PDblZt8B2S2GH+JaLYRSxnz+G9wDzE+1CH5aYJ+mTtAsvmDy8nOE3Z pzfgB8AAPnwD8fUsdujBqSK8ImSJ42yxvcR0MZrAY7UcPk5Z9uNRsPVs4bmCll4kEYsOiP8Abnal jR9o4NdB5BfmpDAebT2c7OE6q9pRhrtIE4PkUSri4bgHfDFwUnM+HXJ+e+I8zckPjOGOyBEfE+g8 +fgAB+63GDAuvo8Olii3GajND1u7yGrOYNmlHhN8C8LP42+WS4Ibg+HLLX54N8GcDtEYznAng+An 19B4C/P3SHTyEh3uBP0t9zlJksxwC8HPGKvbO6IF3GAKfIdyDFDXxDIVvQJ4eBVRH5QV7MeKr7XO 2we3P+fW70/q7uxL4vn6frBD38ePB63XlepbOtjeJUXTg+HsbQZNQlbskyk7gwOHk++ONrNZq9yP LzvYQIcwfrd2AAg+fcsjR8CV8zWcakRyR1WO4tP7ucefIY/6UImDFCyMiuyJNG2ccmOAJU0vixY5 q/PSyHMhYquJzBB01EbSOtCeusz24D7yzMmaQdDg/LnzsxnBM6S4GlhulC80OSYhObnBBcwhPzGV XB+lTPgzBjOotvs+0KKIxa9s6qXGx2oYLh4YMCtY9aU/6stcjY5olLHHgdotS05lykZPFg80YXnK a7AGp0lVSQPpZwSgOfG3OlhYKHo61vHMeg0rofZyj4rkpoU1CwbroNyY8mlJokcmjwauhdfBr4HR 6YBlW0oBlMYFJrdos5t0yo8yyOEOB5904YtHvMWzFkB74ILdjPlP0PYzIsrKu0dzHirggRHPvwA/ sCCg0H1vR6rqNSHveVatwVdMV3Y3Ere1LCaEi1K5tpIcnNwYDFVzKfqtDq+ZBunznJ7fpto09LII IESQZ9Bfj4DgNRey2F35mZTANFuWm9StQDXsdTrfOQ7QbLgrA9sKaHcIdkWQ+Pkxwh78wAWowjM1 oFGbfDdXJKOAqLYUFCAHwHXYLzL8nwzCvPzgg1DmBGG6BrUwNhi0LkSBYqanp/G63tQwn8qbV9ta WQWs3JpzRibwb5sj93foPPj+J+kkmVAkUU2n7I5YhLHhHDIe1NhCT2RRqkeGQ9obLuoPkljdizum oLuzyBHrzjiDwaqmAPzya452zyAuLhkLjIdHPdOEiJaSt2aIU2/Cm5UpNmfDfLrpSY3p+OB6r0NV TyZN9KM2Ly6pLsDP+yEA/r7qfvBbuQ9YifKaKNCUDm5ykp1u1EiERaAtCQLtqk1+H23cA6Gvb4pO E9HXGZ5aKvFrJ027UmcPnz4ABv4EAATNyxNQFStkJcdz2quZaA2Spo/Gw6PMAxZYFymEGUwt8PD7 y8KQ8CDhlGZDKcZ//wAB9+8+bWpXavFs25rQAnpNbmUka75GdRo/TgtxSgipdnYHAx4eGnreDa3g Tjh2zV2gZb5zhITYH23ePoPgOjvUTx4zQpGskItV5vcx8hgY2wCg98beSRjzkCYqC8Tv2YiSOQ26 ycBkZa7MaFGznfhce7sh2BI1N3oM053TkoFelA6kptE0CnxIasUsKLV8weyQ3AOtmPmVyh2BPVoY zlDRyZIdtkBn/wD4A+YL7IptFfgZ5SwlIQ0OFosMdDvggW2toKplXrfAplPvtJhyHwQDgesbc+Lt CM8nDfa7gR8/UWwH9g6cFiU+yvkd81aRe5DhqMsitlMhnOGg+Y+OVcpCHaEMetw0/UJcIdgMI6Gn gKrhcZF05UCMctGrkl4AH8H4+AP7/gh6novTflaT2Se5NVXJJ6G23HU8MP2ncXKVbGwra+4GDNVW pMHQu0vaRHD8ZaBZMnanuExxAP2we4AB0lHiiSMaOZItO7rDGrQ7tTngxgmSPxxbeDY7RRtrxTtL K2ph3pnQ6xhuzRbenbGstp1uQURJGbw4piGJ6hhY9byrYhxQ2cpahIAd/wDDoVgO74MisKvUrgPh w1uyFtPcIYP9Jy3tnF7MRnjujSe//QefbCfARDpJfFzVIeXNRle+ZZLQs5wJDa3LYyk2vAMWGwTD PauH5lq7fIfwyYwosecN8JOf5IOwdNSZX+n9SILeVZa42zDIFS+QSs6PbBg8L1CYJsNhfE98MfMs CWqoaeenB0YYU3MY8JITDf8AYP8AMB1XsfVdPrF8ccsvJN2QhzLsiSVuwh8tkVnKXXL5NX5jgyVs t3ZV62jgXCBB3NGKDGZGB75sfgNg38B7MESlp2EnvhZygjmKQ7ePrIkSS+zPlWKZk8MMT0u2dII0 XshmjxG5EKyIv+R47vAe2+fNWLYQNgq+1a/au1TUcG18ytrDH065y+p2RujvxdkT4eCeh2qHXw6r hYFDgzFZMzRzjZNk4Rz4AfAbBiB6shV5yOkPr5WmUeSRtwXxqHofUhSV5L5aq1faTwsO4BzEzjd2 OBid9tVcFni4uzNjxN8439+9n7FB7vCqO2LF8Wxp1Tav0x1LyRPk2xU5IkwNlb/F1jOWD4QmVvDM Bw5APXClcCGD5MslLQRmbmu9nT4BBfgCDsB/pP61FO1FdofM0zxLOF1ibKsBin46QnlE1Tq+KZcN 4T/5wgY/n4FjTBn1fk3hAhx+AHz4DYPP5dQkWsnh0L6fcTT7OsemGmkE6SxS6aDa+piE4l2po9Um Z24nMD4TSSRw6tM30kE2ojmhDy5aRoSYmLwNW9Mrywy+mtJgQi7hZrK4jqyENPvC6SoIWBzn9VV7 sd2xwQ1sh2HTa5sJ8KLdX2o9h4a24L6f/wCn89OT2YYUQxayDCYm/v3t59+x6qKv1fYm1jcoXXvJ dI2cEU3C2obxEsgW5RBZ58HzA5hbMGGB82Gr21H+zbojM2+e7wfAc/8A2DqBru/Zb4YPHotwLdkS qxCL1H5x54SFuxnLs123YXBbW63mbgt7CvgXhkJjBfuT83+wfv2/89JLA1UA5MyHVVeobs4WUqku 4CeBaPYXV9hAShget42Rw9DH1u8YEG2DubMri7MrL6TsX9gQfAdOibuc1jeKqSdU8aot4CV/7zUn JykxTdoUnZ0kmEKot9lLZlbbeRZHxLmGOKGC42xAEZY7VEBmzNZvimGZENj+ZqimGRsnThZGcXeC xjS+Vu6kSgcenshik3zcFu1fAtQcmsi7PWBfZOk6uB7/AL9ifft/6shV8gxYJWyAzG4LeckAkB3e A95D5dbuXHj2zr/A6ffLIT2DfOYNuzvLPyhZ2PujqHR37tFsG/sHIN0fPOHnRPpu37+JIcWyQjAw JK2Qicoxqh8saZXxeHT8Rwl18HrmtdJ9tNT3gzNAtaJnOEhEb6CAAHz6/wBBMNkpd3sQwLSK3reZ ap9kiNFhTK/l88pGsgKuhp7IGfA74HT4dqQK/bZwazGZ8V3nfAlXJRz8RAT4AAg9RttWDBo1ljjR Jt2GIVR7DLtLHs33YhhNmQR24nIUVqLCFNl5IGgCUh3BEkojN3ee8AG4xKZUc6WBOOjwpI57FccL jmWWeSeL2on2QW3WK7i7kZB8Nx4fM2/CCBHviOtrBPi6yM5s7Ygz4Du6f38+AwmJi2KbdhFpFkak JjGtkiw9PT1dImVfdzvaB763g4MnJCHzm0e2g2TDaxazZmxmzbwA3/z6D59y2pDW4EdEsUoYqXTe hut1u9XpKq03xjYz3Q2AKaRWpiffFcOJD4CnWEBqrdnWVi42YmcC4b4AQWAAgAGBAfkKoAexCB5T D/4QdbxUs5bUyEyt9qZGgXU55XTyHzLU09/cOVNpCpYK2Mt/a9zB747c+QkE/sDAfQcdcTGJJTEd OXMz7uqkcYRgY4q617JLbJL7yo7lx6U+bOGljd0H086bXfIYzMkUpEdi9rdRicuSQOPPTszK7uy7 myk3KBcy3xKgUktIsk8Y2cDY1hSmh9H1uhuBhwhWDMVZ+oCe8snBkO0CexpKTaIPYH4+AAbByDJg +s4D5aiuBQ3ZVtBDN1OQh0/Itik/5s6LDV/DcHCZMcLA5xyACDtTc6a4MinDbsE59/1AH+pi0HCG UvQPYKunXZc1VU/GiMAEO8NlVtFcFqvF2QQT3DGx3CZy+4qHq+6UdPZv9TMUc39459wH32DpA5ty La5qYybQVxo3O4RJd2BVA0/Z0w8eXot3WQwJ8yq2SyIhGZakBPgTmTk3eUZ3Uq60auOcBP7Bz7f+ lqqxKgREwRA6iNbd9+WSUhZLG/t2FJwjxsGjnS07bhNjvkrJ/N4kVxx+T89RsdbS7fmQ3yvafsiY eAyWwwyMkiwltNAlYqu+EIb5gHhzE+H7788THlmFq7Nsft/sEAAP/QerErUz8brlI5tBILIYcVJT R6xv6v8AUJgmnlIohmG+4BDIxrbe/wCEEDZ9tKq1ijlEPH3SQgVIYEHkD8e56gL6UeOYJFf0yuAX e/QFX21aImwJuSPE8yQ3dDV1sfMT4a2tvhAPcUCv59jPiyM5RubxVxurXhB++nz9RP3R4UrN0tUg eisecyae7GshSbF8kSML0yuQIjUZFtQe+Mgfklbr7I1ASAHAOMZygtGWd7SXbDf37DAB+wgjqFIS J0TNirtLnv8AC27rtrt58b2mt/EfqnrQdwV3IPtbCPHGRayA7j3x2NuT7cj2m+jYWLvTNzEO2srJ fxpQOgSueTB6QnlFdTfMBBCYnmA7iHIB657f1NYzhwZ8V3kZ+pvYKif/AKDsHXG0FKTd9hFlLDsi ma0renLCshkPNDvCtraTzQY7qIbhpLZdJY/+wzpjMyq9X2+zAwZs2Dx7uoPgD+/pkwQa60MaaYGt yn38xS2TJs1gJODRZtwWN8TdHwen91E/jbBW/LWHnAdZWUPDjGGyd8Me/m/8+AcBYVZpfo+ZMsGg oeoen65zrsxkLaq8Kb5KaF485QyHw637qIdXmKdAsH8mjXk+C3nY3Y2k2oeAH+fHwGwHyZ5O8kY5 Y+jjE+5Vf1HhliGPxtM95d9UtrRY7J87Ts+7/wAvZx4x+d3PzkMAl92XbgOHqkumt7+1Sbwk2Qk1 iSrIheT4X+HXKtZr24sp8xiyOCehkZk7cALxtZN8aOTI4RJ8A/IP4iP4sHS3h2QHMr8NIF7I7baE rKQYJELNRAMVIodyQ/hzLUMahGRg4rAHgbGDjEYor3lWWybI8bA/H8H7YD5/qs24bO0roKlC0xen UMCF6jJdULWrZKuGu04tTrRZKcwubyyPywYxT9jHerED663ILA30jMPU7Ivr9fpPH8a/QgOGLWIJ epD+A8kLTVR2Q/8Ah9kiVsR6ZcFfh74+VlFfLIX4epDeEOt2Fwarpo+BeEPkwsXtmHCQm/279+wX 0BB6izTCWUNAgRpk2GR5RlBJe2XWV5rkUKcnUruWAQMR0mRIyyJE2TxbTTLVd6n33ZrdN8c4BPLX w5stLKWWtjW1jT9/zWRtYR5Kwo8RDcqvlq6uhr9bh9SCGZQ+H9y098v7c2Z8rCoEbAHsmwIP9AgP Y/S0PIFrZhqbVewm2nzwG2ncen8fEmBfHnI8+jzC2YmTEO8GSDPHnjhgmzFBbMsg7RwCHP7+A+/A G0vmXiuVMDaGnNw7nWWNN0j/AIKSPiCEMovFHyn+NzDAdxrdxDNTbeE+4kNGJ4q7MT/KJv8AEWwb 9z5Bfd3eSo7GqcOLumsfmOWSNXt45QWfGhDXnwWh8DmcwmB1/GxgLee1FuHd9oV+c8JdjSOfoM+f 2DYD4BaMQsgYu6F9uJ0js4REUrLlwRnxzzdfHTpRHJLEVk2nVAjptRUKqiTEkN3be4NVcEWbCWjL RzyvT9rV8ypIJchklOt4ZhPXpjk5LzkLfONuEzUIhw9n4kv1pOMM/PLkZll43vYvaoth2BBPn2oc uBgTe7VSgaZSXaKk0mw/4yTYDCYFyohSkWRg0xzHFD1CJ+KeqtqgB2fEXtbyMB0mb7VgAGID8uoJ /qHBp7YGmVLbVXodSw1y8iTvHsijNN7C+xRdZWhV80hW4cwYmLdf2ojga/Q4IfcxdDjGc4b3zgP/ AMAfVUS3KAR5aUm2UnKLtYWckREewQFb4mJL3pQsfmC/VZd8riuJY6JXNlJ9l1YhjGVX06WWynaT SHbYAFuYAQB8/UQAo4qMYkdJKtUwkie3bEqjCOR6yINE1WJoNzVzSRtaOBBlMCTUstxvRkeo4m/i KrQJGe5wRibBFcxmHks9PXKTjJ5RV5DX6TnODDMfGhhKxUMgGfIYhbML4dVbWCeDmcZK7ngDq7e0 fgIA+/HwHT4HMGnu0GhDqWBcxujRcO7OP1vYNsFk98TaR0llFsgt8kh2pC3ifUt4AdW/cx5Q9s2O rkk2c4C/W7sDAA2B/WoyQzNXzL4KIdFanLBuaNMvhVtOj2EP8XSIU4HwNDp98pOG4GK5rOwJ9jYD Hko0C7MOA+6OL9ihe/gN/rHdAtgV2yqyaGHW0mwbgNqafRuS3ryeUtB3cj34rcOSMi2wLaq21/dL UyorOL+jBAgRJBgH6ouAvwDwClmimktDqC8e7Mszx715GMlN3JNwdo5xXGxwb4ZhLplWU7MkI2YZ UbukHBCs4/pX3UO7OiARXdPEZlIWW+Hmh8mYUDd1MqTYQA6rq/tjtyetdNV4ZBbDsjgnrZDnH8UF tHJvY1Dq9ZGf6WvB8Agr4AAA3/o8bDFmV6PrGxophAcHxP0uqZjJDh8VtoTZZ+unBg09h6rvitw9 gVs1AbgA1zZHu0PjMzHO6JvYAAAB5/gOCqtRXsRyZGqwWOq4qRlBwhaNnHzFm97pSmLrl87PzA7I HfLgW7Usuv221JmLML2wmc+7vHIOQYoL8f6CnWRMUo4evmima37qw+Q2AHPV+WfMTzCruRiv9N+N bw63ML9cUD/9vDs5P6yyvGLsceEFBAffvAdGY2EkY1KpqEjhOnqVMJH07Y3G00DQyuaUczNNjdxi PJ81bzLkYht5PHJiD2LJFlgyJQxrNrFm+ORXMvZdW5NqHhzW/ouh2EwyFFOwzhGpsVYkCxljKmrY 45iiw513LZR5ZUyuZRiVXqqyeh1f1IhBV/VlIh8KnRQtfJOdKd/tS9mEmKDJeQ+IQit10VWWfAHp FsE2UwXVMM7LLsFlMcgO3Fj9gzJ0vOiFMo4UikUgQPBVblgFkYhDl8bnVxpqCiFB/aMKFVwhigKx xLSYxouZpEFKOfH+/VvJuOznXQAuxY83ySCfDD9/H5/PVjdPuq+0NOtlqt5Lk1Bs1omDdR0dqrh3 bbIOjIauKiYGWTG4IkKn/wCfHahwjIy2ZWHpRxmPpxwB4+kFhjhyBft6fBvGkys1hKrm39KUc+rN Zq+LHTnRYsKVQ9siD2AfHglWF1suQDeqy0CmDkSy8MaaWvU8Ou9emoQC9UB3H/mAsMRpvmZc9x00 rmpbcj1SgYxav2UPivQ65fKnirH54rdwQw5jjZv+F+tN4GDOUEyYP8Jo79/QNB1F4DjouRZFyj9Q Z6et23ajR3ILY21MIr3KJW6afVu0HCyLItR8/JFc1on74yM1Z/iAnzY2knF8+AAc/P8ATWMUchjE sweN9KzgLtXu7uJbufckOJzk7cu3tHQAMyQlsBn9RWD51sbAN9q1luAj8V83wVR8w4h0fpLY4qfW 54zYXxB6TeVX3ytPljFmgCydyN4ZEIx9qA3hS2IcnWb4UebMBhOEvHaI+fYH5+6D7oIODHHW7G1f DSQ233y2ki0Id8D69lngNZC3xwX1tlfHBPZHCZah6n3yj/8AS8XUAwHaIM3VYBCf8D4DHz+jTYJs udZhLO0y6cFFZzSSDYDOnUEkMSEKsb+HVgRH+qbep74d27x3MI1PDu0XZeFxvO+e+IRfr9AX39Cx PbC28vLpd3Q1Vinkq3agOTV1saX69VZFT9ka6bE0AtuEyt3wOn4L6G1IdoUs8TBlmPloec3t24Dy DsGf2DYACyRNEs7OHCGNYgsVxokssqxxadJ54nkTexmWUHCoypObAM24pEmKB3QTHGVlzjeooIz9 U2QutoGPjjJx9tnSYR7crShw+n2oHWTeWgBwf4hEC4VupzKb+WLivhBwshwTzCeQW8KlvD/cyv3y Znje0gGg8BQUHpD6fwZjuYyLlDgbae2ivQgm6Ji5Gr3hsoTEPMZCyO6kNk7gGMW0eP5ITwfLQWeD hLsSdgAAP7Bv6wV7YOaeKnsmpZWTW946eDo0S8WEH/KgG2hJSuUPgdbh7s+ZszUBcFJq2x54vWe+ BN7BgAB+3dg3/n1hbUfNUGaDGvnNquWzOHyx7tZAewg6bXImkdnHw3DSuHMU+wefHnoMMYTFq5N5 Bdr3Y4/bB+r91NN9TImqL6WNNMrvlMh9Cfbx9V5cfSkezlDjJtED1JM+0JhEuy6zXMmAdcP4ZJfc l5d+OA57S1+B8rG+Qa3b8dPnodPqWktDJVIp2QefGAs4NEVslFKrYLIquyA7KnkMLUgOF8TmQXwN WZ/728f/AJun37YHB3PcL4X8nNsat0ADPMSYgdJhh2wxEfBMp8W6/cOHww4ccyTj+m+eqp40ZV6u TJvHCeD+ffgHgOkbX9sW4LpujaM0+1WbT0fUU2u5DWMNqcsntFc7WBp/tuHY6TZC7B3UUkD+HJ83 O5Pcn4QJv78g8f2A/wBM3NIw1xPIwAN/aXc8DXFb0lPyNwlCMT1e78yMH0KrOR4RLFtkdPsax2dm s9YxKYGjaUDQH19PgMcV/DoIGdYoY4E1MSR7kMM0s0ru+zM0TSSPO0skjvgrMzS8WBX3G5QrySSh oS7JE77AxTuyAASzhVHmzl+BXQI+HNP9qkaS7QUO7MgbJCae3i7MmQkQwJ5sKAZhDkkMO+PjAt7C wgf6ZVxiyT2T22CokA+g8B6vI0K6/msB6/Qsz+F4Dnch23J1IdqinIWhomV+hmQ9bre/uE4Cnnnh k3N8KLOPCQhz8vHj7BsD8gdUVV2VfsKZDXD0NAzrBG3ZLtBqquRzw9yFXizG9P43DmQ+N8D4Gjwx gxXFszMDCG/9/L59+935+7B7YYzXBVdzK3Gds2GtxFcatsFsGKlOibGisjAYmQw9kTN4gnvo8xm4 HV7MT4Ukm/38AfP+AwLTQyymHPUOUjhbKT+0huR3HjRkOSZZ35NY4nzlwyaaNmlIgSN9RuYx6U/T xjIrZqpOV4rxZJ8dTDxQ9UV8vra5S6TetkXmAq2zVfVQNr8StgZSRcguHX5in4aHMhp5g421+eeH 0YTfFcY8nObJPaI/sB9+4Ev9PLU5MqvvQ1LoG5kFkVzAy7le+NSFPrxcDKKyykwe4rfeB8TyDI8W X9qp4YMFq6ws+aq7fz59+AH37pDrFLg8b7VWipRq3X1qVW2qZ/AxkNjIB1QFjr5yCIuPnJJm8I/b 6AEEMyyVaBgz6Sk7AAxQT+IDgPR7X9R1/p9rOwjVfOA18sF27xvGfXuoGJakr4loWNMIJ5in6r2e r0P84T50KsydoC/a1AjtjwE+gfiJ+fj4AjNu6qSRZkZFQ5Nec6zz00kE/jmGNdPKkn9TfcYJtXIs t/do4nV1zcSNGFx07IhARoDZ8yGeNxXaYkbnLFeKGwSIBiZAUqxQGp3yYsOtzGdg2Q7QTK9qXUZV a/DpNDDsrIwODW28DajBNGQ2gYT3vHYuA7/j/kANcu2LYsZgZMMqoKBr1ysJkl1+yTa/rIwLlWbY 0Wk19bcNN624Pi/sYFPnqqGs2YLKDBm91cbeAB9BAHz/AIBgEDBSPPQq9umparrcuB5t2PzhrAvX Yhn+/AGa4Q7IMOBh8YJljbe2o8xZvJoq+s3nhCSb+gn/AGPoL8f63WBIcGO2GrN1DmIySxmFsTgq hw9Th4tYWFKsaYwB1vuQyp7g4YkCFlhA6yTV7QswZ3R2Tf8A79wFBAP3S3CLgkmZ30V4ESWUbv8A zC+mgdJZo4skDSKH2sxajcFihoNi9OsyxSJXts2rXfN0eKHzzz1pQyCW0VncFXi9K9OHq5MWjp7M 3CejsRhpu5eTZTgnskyZT7JcFf1ZXJC0DyqhE1lXKPLzsnucAAPv2G/7/MXJyzTclZ0BtqsbYQuE Ns2p6Oh2eWuCkbaU/i2Qnvi3cHAw4+t3h8Xz1O3AsrO1s2x7HaX6oPn/AN/W2+WQBB8RnuFxpKRW 40QvmD5D5hQ8JAxWRwhVWYhQzHJHiewAZ3J0bi/gzeO+ef8AAb+f6MTC2ya3LQMVJKDv92X7c3cK 0bCsIeWW00ow7CtfMQ3BwcK3YJlOnh9LeM7X8GZtl4ThwHf0E+fPgOjcvuBHV44V8F5d3DLGyBgg 54vkWQP2egZrWR43y1LY1kLjf85pYyIul7h5I589LyoNbeqdJrC5NHFI0mOo0PcmNJV+0uxiLiTw s1oB7hMfbIm2Pdbitza2Halq4h4DCaEU5zVwMLz1gqI8AxP4YnrpumWy2C0GEiwWSSen6UUm+dQF /LdPu61FKab020C5AxagdPfU9g7Vnk+AEMDCauhrKzvZtJ39B/r4/v8A1Uu/JGoy1CCrZb4GGgWi vglTx87UUj/MQxdhAk5b+JW6G+TENxW1WB8Cq+dcnF4DN7B7Hv8AsAD260z5FF5XD56kkuteq/bZ IV1UDW7Y4npS9qMQ2T5kzUhdlwfzhzAhZZwxWZNo4yjfdkjYAADfv38+tFSNY5EO3uWzs/dnJ2Fn mm4q8hguBqmNnpsTb7OsvKLMsG2aSQIDcQdQO3bkVHFk5hSvbWXTgqO2I9crcOKBJKKeUrxSpyON rGyYjhzKvbalLezzE/TfMtRhcHgDo/8AndzSZPc3nsl/X3gEHwCD1MWQHjlBeSru7Ut39AfBruYr 12Hy+eWgjgVdkX1vjafMMkMLGn7DOcSfi3lmR7Rxw2DtEAt1BAeASV0WBDnqYeuU2nv8FoW34sQh 2cYSEM8Ud7Gpt94fDmae7Th8ENwKPnzpbNyfF5ZfuwRHAb+AX+QY7+bx9Tbo5L7gkBqx035wan9S FmyFugUehluWUiWM0J7hDcFuHT8OwHyuXzTfscPxbQU90qrrseEE/j/sEAg1htyISuac5NeISitc c5ZWfkVj83xHcSqVd8aKkmixEe3DLI9CrwzUVYyJuxdAkp+HdjGj2EBv3UIyf4QGSWq5UJK5ZPuT siLuSk2C+PD0nty3ObR/mCbM+Ifg9kN9ovsADgIDYEPRbRcjvV9faZFfVc2p1QJMZscAL5HXq3uS pWwXY4dgW4bhqcezC+YgqXEoKe87XzkmDCVcko+wAD4DwD90apcywLAX7ajZVD6kANyaewlDODg4 L93UOrgUjRvXKfX5hkxZA7gQXP8A1Iad5sxZZu6CysHLRN/7+P8A9/YGTVbAPYzmrTsjqudqlqpV 1IKbAnmKXtiYmyl3mVb2i+MlqU/T4fjYOyq/n0etvKy+f3s3+/gD/gMcerf6eW1aCH+76mHVaeFV qOLViVIuwWa2N0M3ncsDsqyxFeNFp5ZN2IxTMZO/UQHHFncqfdbEDE4i+WB6pmDv1HDD9RWaZtR2 fEevKuYXi2mpXXlur3J3i2M+L+nsx2rD7etwXxPbZzgzPPF0ZZB/i7z79bvPkEB1blBda5DItKPG RLtmRRVMMamj29qPgzXz0uEV+coTjDe73xUYT8/K1z4QQkysrMvn1C/SFOAzSRsOB3HFBAL59NAj AOBUYetGOpZNnSs6UWT3b5DDiBTdQgH4jAZW5i2thx61O5ghbwsrPa953yrnZJBgLdQT/Pum+jLF qBhdBFNQRKPVaadQUifXt5GRDi0HnfT6Bb8FDTe4S6Uqwc4YUvPUq4iMxNDWMFlIBmziPivv/H8X 0DhgeoVsXMauezUMZtuJtssIQDp4nSaWeQYm5IlTZsZhtxcV6ftcPmUptGlkyRp6Mok9SVZYoljf CmjlYBvKt2MDXy6L8zJ4fU7KgEiVkHnZkYa/tSvbAUzEuU7ngN8MGEPWAhocNgp85AcIHG+DK6uT Wt7SaueP+/n35gPz1BrUNjhp+odNSacJIYhkr1H1FJ7O2OAF8LRQNbjrUZGRkrdkr6Y1VLV98bOU JvlXVozHPNnPoPgN/Pn38jvlN2MLPoZS4Dbtq0D3JLDuGTcEszKV9Qp5otS8LIT5gfeF9wnf+oek JizwOrxnauru6JzYF9B8+/dAbQrw1LUoYTW1PJAZUNtrKv1Ua0S63PSpco9WxCJNhuEPj63ghuEB VmDCgsWs2YD8ID8//kAfsIrKrTTOe85zMf8AFRXt/VWebPnxx1A7SOqEIUOzBErpntRrlQBtcvPP C/H46FSFqXZPrPOSM0CbfK1DkogdJSa/pyZV4HT3KsaYAtSyO1a24D0NVPD3w4+cZpxXJ2Zzbwf/ AIFsHU8t5bRAYIZ60ANpTFymUm+a3mpNPqYfvcvSrkrcehh0NkuCyCHautKPPHHDjNNlPvDsD4Py ABUSD3dP+/ZltlPqRzHUZXw2T/ObsrmFrURWW11M7q6uZIIdkB4YeYwbG22BsdVrNmbWTKA3bzmH n9gxx2DsdZCnfCG+Cs0C7Eh42LUxh2VR8uWeTSwAXahAw+J7jDDuC3BgL8DGYs9m1fjJw3gbB/fj 6Dz4B0KhQyMomil+dQDt6hvaQzSd2cnJDviMuO0dX7M2llSRxjlG5E2BuxTWlZ1yaN0PFc/B63aF jKdemZ6ToVqWpVrATpHqUPV4kP8AKti0K52+yO9lkVsnuEz4GwfMrS8mnc2bZAmxgEH/ACYN/wAY 4eHrNXMae6Cv0abGpr4/qdoMd5WwpvmIynAPMOSQw6GH29kd5458p1PJoxQWLJo/CTd4VCfAfQQH UbDbcVwYBzVJDSd0AxpZA8YcC1kSuWafTxhPLh1uGHhp/FYCeB+Y87WLJk/u2+IOwf38/wBNqzFN 4codez812JWcxu0aXX8OZIlh022q9q9DW098quGYmVuvmGo8ngWrc3lXKcZ5sbCbA/8Ad33QX8Af jNPDJErFF0yRSMZS9auJ4ojFEVOJ+ojb6hjNHcX8aAscrUwsc2YvbmXBWY+yeNwM0d+NmsRRxlys 8DHnfX0O2L3um5zzHMUrmioYRheNQlnK8QxUrQ702muHbcPqoMUOnkEOxu+F007xmzHwWsPIT/Sv wADA/sHQQHzKzssXcEqtMk2BrRwJWEHzrODqbIrlPlVKyr+8UPdkx8T5jVUie2waG/iFKNBNZOJJ u7LU7RH7dPn6D3/oPqej3yLbB5Sl5xK2jyS23GQZHyt15k55XospDH7P/Jw2CGc89AWxjNugsYcC b0DP7BhsD959kD4bbXMyY5VVeVtJ+aepxhMWFk2RDDuYCZcj5ZA++Phsi2yODG8W2n3T2TWcbQ1G I3Bzf+4H5f8A8qi6jlo1jZncZIEAds/4yOfC1efI54+ehja8/TztDG3djhISua+DeHHPF3fFUQSt VbJtcBOanPWfp5pg56mhri56XbT85Z7tn4Zh6cV9bpNzpmmpkgZo+xpJSQ+hPWuZgtf2dihYQxub JwmGS+daazTbTsGukoecueqK/l1sCykOKuXox59Bz4AbOly38CNrJXzlrONHqUWwr3BT60aD3phZ mzLnrVlkOBQFZPBjs63jSxULKE0LMn9n7khPHvf6pc25FtiLPNDrH9RIOMIeOP8AiQPFDxtfv/x+ 6I2Sm4cCm7UuSjPjdqnDVpZqPW4FgYZloVLETVdPIOFbsjJcENwfAZ7iU4M8rHjFnm/+/j4DYD/d 3rjp/Vo8AV9wlVU4Eraba9Umyt3B8V1NPFLH8FtoB6f4HMW2RPq/GcBsACbWidZq5RmGPGyGznPj +wAN/QT/AGIalV8VstRSqDONhyiSDLMFeslkL0yr3yWrtHb/AJ4YfDCevmFVS4HVaezDBTQsozwE dTaOAqK3V/B+fgFRL+5LYENXywwuzKrSaBK3NW8tHyjzR3IKNEs9p9fE+q3wwhrX2Q4B1IQGpkwe Xyhyay8UmEq33+/fiLrnavSx6vRrFKJp0imik1Kx8R6qNbKwzpz2bgSZe41PDG9HCjrj1DxSvJF6 c0kMkKTDmSDcwBkiNCpBiCrfH/fpe2BbDQ+NCG+T6lGpOVTLb2nmEqnicDV2FNlbeYcK31CODHcE OdbVP21iyf8AqgFE2b7sbwYPAIPsffj+6vLEIXcLtmAxu2/Hsl/LVwkw6PiGMe7D4Mhp8xbqvZ/D zkPgcEwsrCG0LJMGk/RwADn2B/z/AE4KrF3gkVZDM3mYCZ1BanDZa6EMxV8uHUoGzSjQ4D4eMznk z+eUuBwLUt9GKK/sjhNk8A/IL8g/YOoxgIA1ePXtjIeyE3ya7cwJTE9SDgUOwhb4n4MjJM44HImA ajb4FqMExe1k1kHV+yAwB/EB/kf6ILcSiMI+oEJqSJ845NkjtjOK5O2fYlc0eeOaAxdpZw7abeXe BTCQb3KbaZNuVttn3JVr+evtqaalNIaIcBCPNtzZoH4mn8a7SKnZEMXbB4WtsBgxVbIybhNVR9wA XmYzLL4rk98djYRH3/YD4Df+qu5jIhJsOZPihySTF+NEMc2HpCHFfIjQAmEFuZ3UqvcODn6/5wh8 F5QzLIMI7pO//wBA8B8+aq9gOtoVfcAe+Hx/hoTtZHKNNMyRd3yqHiXI5PieYQ7UfGQPADgwDhPa v6oKExm9pBvf/wBgwP8An+2RWYeuVuHlWqyEq97YqV3MAExjEfH0XfO1mGBbZE+HD7fwzk4eeVbI ZifPCbNj+Lu7r8g4gPc/sDjKMVSUp2WyQZ5YxviFaePEfyY9gy4CPyb6DaVHkMIdEO3TOlf3iKWO ZaFnLbiEZPIv6j4w72FYlqNFS2DLSCj5UqGezlIvH1OAVezZkWxhPcaYnslqVXMQzA+1AYFwqU5L /F/aBnRwgTg78AQvoJ8+AxD7ouSGuauObhrmZD6QyG7CMMjVYHPKbq++dPoyG3p7IyOFVrjAtnG3 geExmGXIr1mT72uwR4PH+An/AD4AAW1dqy0mVPVVs1nYCNK1MXmGoxqEaaq4zYTEm1NSVnknM9Of QlVw5502PPejMHwkiyGu0Kz9Jz1hDCTiBNA1vMw9Prw/bpW9PuSvXrHETyUMC+Wgw4mGrUBZtj2g m2FSItlT0/eL4DzHANOgOCGdrd5t9pfFms/ChNg8+wbB4BUTLJbRxumX08McxX02ouGaPxuVYLCx Vryb4OVXWwWSZCd10RqB3KpSaNY4Gmo3fhas7tP7ACpum3yAUA04NM6hHZeR0kw0YbXbS+m3cYYD Fq2Rw9kYDFcz2CAqp4wX9GZtkSbRxAeA8+Aw6jbYOAxd2NVS03nXY+MbU/wx43JkVkYqUDqEpGxq 3YIbgnvidC42DqVw7jF2ZZ9u2e+f38AeX/PgEGST0+OZ0Z1jXwZDf3yUkjojwezg6nW9XxV6U0OM 9PMQ7shrbA+79aGHD+xqG+cmSDYRJqtBfj6CAPgEI+fakxbvy31OyHK0Jlfu1g0bSdI3RDarAiB6 QlacE2pTBC1JgeGHT1/g8BfunuqTWWhX5MDtIJjwHHYH7YD+wFGZI43lkffdppLDLjG1FAMwp3DV 8bcsfzllxiuTCUwIIn9IqGKDcA0kZ70YdtVkKPN3445rGjsAtNzM6BaBgI1JsONLq8PnXR8Mmr0i ecjFXw7gmMiIHX7JvB8wbQcPbEMWs2Yj2iku4M+AP+ft3YOrKg9OesDTzXkOr2KlDVZKWsZbrIxM T6mU+UWNYUWuLIHmE9kmslkWAZn0PYAA7cAzbBbyTBmzfsAQT5+ouP7AfqwRM6w3Z8zq60y2SNtR j0r05a7hScwzp8p+LyKnJfP4Le93At2qnsmD5AIU84vKxhg8Yg3bELx/2Xz9vHwHRJRdqQ21X706 vtVG8ZtY05Q1Xja3jsL5ckq7leuWQddtVoa38O0A7UBsCA1GMHkV3M5yECOwP9PAAMEHojLP2vgj bTqVWstQI15SOA8Y42c2o2ce0Y8gqwqmAd1yoFlEXfHwsqHcilr1AyAqRQjLEHIKgrWYtgwmLdI2 qk1+Gn2RaRZHJzHDgdXypepZXhuEwwnmO5K8tnKH4HBT1lmVqbWWZ4q43qHOb/UR/E+wcB6fGW0X BKB39WlaAVIPlHn9eYAK2nxLJKC7uA/MT0+q6fh1XqE3iEBT4Hwydv1fh94/F2CCA2AAAQPbqSjk FcoprZmLnVtZNg2dHs0xalYmWyt4tiiQJRbcK3WtPdwPkwc+Az3dqd+X1cWjIxzzdVvwD6Dv4B+Q ZhTeNQBm2KxKaeD2pBw1Sra2JRwOdHU5kpolOVc/cHxDcA9qfMBcfrT6ys8XebM9jaT58B4A+g8+ BoxqjmpR0DxSbaajEJIkscryO20bSTbVWfEbNWRJlSvaQxqVdkRo6yVI8R3VV9x/H/c/nqNkMFfp FR0/XL5W9tJNtVLhcVPtUJX+Y5Hl60HxPX+BmFuY4D+8SH/IzBgxoFvOx737/QUHYPPgIDNOalIF qZ2bTb3aIeAyLctfdrIR4kOpQMRNPQyDgtrnGw7At/AXp86GzbW0LKMctE3sewex8/sGIBz23adm PYvkVlWpZD3rCzvitNhuAYTWwquWFOrrFwEwxCeyUkn4bDQBDFlG1o02j+uynMcd/fgOIDFgALdT oNksFlyQM+YEodtyQdhR69PPBYxzJhPSjA9kW4eGzMGxnl9tBmRiML3NmeMTbs8b/wCAP+f6kOl0 2mjG7NqZNx5XDa+YNIMpmlKI+IuOLdEca0NuFIUtiufV6k6mWbKKKCDFIlZIY9uPmOKQEJkcaMmN WbAu+aCrh41euD5mzZw0wLT6uEp621B7YWxYuIhK7IwclcGRDDj/AJ2JA9BsgmT5Rtm9pJt4/Lr8 Aw58f6ZCVWbxUFiJ7G5IalnVLkm7YITbmsCG+AamLCzwdgT94re7FseHrmtB6F72YMV2gYM5s7Gz iCAXwDBv4BfPxrYPMAUcbFrRDW9PZlktGWGPTKvE0/jci9ckVPcEJwMcwZGAP89fnqsMn+G+S8J5 s8HwCCffsAGPUk2MludklV8fCUkxVSrJpwOqjSC9zKKJVuSMAdkZafmrY8wqgeeA3Dk74rrOxpJu k/7B+ngG66DFJYUkvPGEsk0um1C7nhoVifvojuVm/wANEWelaTUM8gkMMcTxxu6E/wAHATITihY4 GJ+O8Ub6XqO6A4CnkxWNPG3YZSTfKK3ANCnfB4DE5Q+DzD5ZFbmE8eng9PCf7Mm5tFXPKycSbs3x BxAb/sADoqKVPX5Q5DXANnJN/I7UD7b/AOCn0jVYt8LCyuoVfmzDFkQ3DGn4KkwPlHrZN5oe+Fl5 Bm9kObA++A+/dJ+s4an8cDm02kuwfVdMsiVHDZVgU6HPUO8FUMw4vmJin3DugYwn4Hq4DrBOz0Nm R8UnHtXivoJ5f2D9eqw9QWXrRXdLWnBI0j5AmtdJGHptiwl+AxJ4sTqCVYbev4XZY9jWnb5+FghL 8EJDaFrEbcH/ADJfqOHfZgYsV70+heXhaTGQFBWNZbUOGnW8QMu9tokjj35UfGPLGBNCVqruyK5S GMBdx3YVlha0KHLHnqUtCt0eVU9VvkCYyXBppSYtIh7mDq6RMq89LQ2hwX7UvihltPsget4vg/g9 V2+TV3xZsw53SN8+3/H9EHn0kwC6Pv23MkXRlhEq9rTmyn2xW5CQtprRw2+Idf1UYcKTT7U7qdlV 8DaiGjI2NyE7yRwgT6CfP93QD90X6jyi+GqLUhEi6e6L01JOq5bhvAdWklpli2Ok1yrsY9Ph6fET /lnrVcUPiicQeRiuh0+LNmbsSnjHgC+/AcAADr7mXYPlWZMsvWRk2RYbvDdq9V7O00vFYp6a+ahA ItbcGSGGuAOHT1tVUgAKdDqD8Dk98Nmwm/gAAAAg7A/HwaSXseOXU2UWPk72n1Mg4jWfT9ni3KHd OIL8G6EfaEjrggTMkAy7ckTsVEkccmL3XZk2IvgYiup3LsjLaIc2pc2yLjT5+kUbcaBT9hPDFSfD RIGmr4cGOq4bJZFV8wgtq+h1y+cZfcBay7hAnugsCDUXAdgfuq1ArUOWWj0+LPIY24MpDbacq/Uj Z1sQ8D2n2Imxe+C3VWL4Y5BMtRDsGf8AM3N80l6eifCau7Vc+Qd/t0/9BY7Tq0F0PWGbQdcVwbrG qhl11Rq3JWbW9T9+GikbuTrIXnGHRCe+uB9bVnysB7UGxeUL2GnMO12OKCwYY4797RzA8IbbZle6 QaHhqLJeenvsM4WRedLO8toVtR7lvDhD5ghoe4J6OBX/AMqLK0UaGYYc/h4ScD6EAAcBPn9/gCRS osmncTFJJImPsMcW2J2ievUCh4y3C0WU83wSF3iMoe4g8ccilauSW9pSb4ywfmvPxzRfFyJafbVP rdfSq+Nh4gck7h1RwaBMwWr0irnnAeYQzFD3YyJ63O4fq0BvhOzBbReSyD2Q3hsC/wABqLf+qozK 0shIh2Qxttem7CbVRbbHBqA1vLQwLkvVyL+n491E8OPZK5Ar4HBkeSf0b8omwhwAf/sG/gLdZliF MpXMymMDaNJ5RhTsJes6Xx7uhFUwCbdjhfFD0+nzHwf86BR4GcyIvPP97Vd5/wAABAHwHSZQ7caI FgMoaxryCVvFhg6ycALiPw7clNR9tFHxwZE+YyWQHT5kGevodjSyfF+TcHSQiTgAqIAAXwHgMZAN RLIsQR5EbLPKX1EyleULC+B2owJSuGLcqTlyAFTyQRZyDMumKxgJuRiMeI3jzXLDnFshdnjjpzGD FqUjHAhmNPoElK1LaeJdkVuStBsDFLGLJpRwp+rN4TzAcfMOAdQDaccEbi6usjP6JRsX3YMH5A4C fRoNPvjT7aGSr5R5kVbaahkSyLgznCnA4EpXp6pbUsEOtuFV7R8JqukhS1cGHlmaNzZuE73v4B+5 8/IL9sCZQx9oJF5w90h1LcyvMJMNgHkntk4Vyh1keKGB/beHW+pBcX3BqQ0+lniGMsxXKLDzgbw8 /j+vn/d5VGl3RFpewrk16krj73NaTYcgPYVbCTDm5O8Vyb+SLa24Pu3hzlLL7bj3fGC6u/ZHb/V7 wCD59ghj25NaqRxhJPp55b1JeOZ5IhGQpaaeVJEEAaVHiircjoyUSrjlLDpy8tudwCJl9SCMGPbR yrPG15NRSRvacgvFm3cQOkb8ZlViEdstqrewg6qYr8SHApq9Ywvh6fDfNnZCH8gvvkEwzE1coMFg zf8AYAC/v/791x7Qy5Riwt5Gksmr+ANivkw2iwoZQ8v7otj3BwT7Uh1tX62jto+Achs5MXthPHwg Q+g8Bxw3/oE1ENrAh2YBlNFhMtkZRhkXrILzGihn1Xi2xbRVPsCZvFVob4voljNvwHiGzDCnjNk7 o1Xif/ER8ABP9BJCyGhNrf5WzySSvabs12QeT2gTDFi/uQchDrdwZFtb842kN95MTKFCbz5tJ3/2 PgD+wdCI2Rknd5i8qK7ESUD+B7ft55+b6tmbZMZCAR1ShKkGRW9yS/UvHt7Ux7vOV9RqvZj5Xzwk T6HanYPAT4zFW9qLaew4y3Li9jJ9fzE9Dp+H/qNZaeeBoS0M3Tc9kSXYGggEI+AqPwB+YYJgOvtW lzXJPquMh5ucNlr7JM8xFPMMTyHMKgMIi2v4HEO0Lagw1mzUNXWVkHVwQ2cPgH8+AAe5/q3V4ab0 djZHZH5st2plU+EXh6HZ2l9smRSjZKPVXX7JwNwp+tx8wH3APckGe3+WJv8A8+Pvz9wDpV1Wh1/q CsgCZi1vGrdIG1uvcw1USCxhXcq9uSuUOwJhgxvENwQ9hp98eFsXRr5ue+BKSOPHaI/wF+8/0wvA 2cwkQ7+O86RYYYEYWM2yvJq5XGvm+FqrR+kRSJWA/AIAPwPwOrKaV9AtJ6iRV12Kul3FfrXM1E2a Fp6IoK9uamQ/qrIZ6QWIP0+m0apsQ+BJSBpCSYA52BTIAsZTARlthEaTyGWC3s+dUMzLap2gTzYi JQz/ABFb1H/SbBlLfWbbQ7ELjZwQLGh+tlEUsWUq8lSwMaDlJ3oKC8kkUlZCzlZLT61tqjGUBOzq 1FKoM1kAAnCrPHNZGvPPJ8H8dUZbJOPn9/8A86O2Uwhu4uyKlZ8mpc5kPah3en7hcbYLmIuqDT2V iw6vWrsTzEMOQcAfH3y8HyzGYpaFZjO6VopKP7n+7v790wtNa/Qd8SGRtuSybas7WvakZhpekhqu pocq0JZ6m08fMrfkjJDIGK5ss/2dhk0Yo0PSyDNJAQGfwfj+/wCwH+q60+ro9llbafAKeNJZsMld 0h2ya/d4ZSxrYaItkWBMfEQPagchDgvloKSPyZmV1d5t9HwtII8AH4Bv58/gAPz2ZWdoOS/RpRDy X/UsBaqBYbgsOyVaJL7jUNbVXw9ohreBhDX0+xgHaVVMbYrtBMZ5vfAB/wA+A+ggAWGUpHDBq5kC PHg23u+JYpTp2X6bUenqdoLIQY6MYJWSqBNNIktTaSA1WcDcxmwKYgrzIlHbeuzJu1suJit09kfA de6bnGwtnqADaNsNBICrFlsoUrJDimCEN8mJ5iEP2OBYAGCHZhavyYn2u2Q5wHYP38AAKbkujTI7 gz90Zd1rjgGh6oZSRYShp30zPYGTVCHFxgVWn3uhXwt4wwZ6BZQJOp+zMabGvGDrjg84H8GDFgwf 0F9CswfaljSK9QxbKMGu7haImwFZkH2FW6GebHIohj04OYQ94sCtziHxKctkxj5V+BM4E1Du2/7B wE/v/uH6d490JFduyaKJDUlcMdvSF5J5Cs1vgdxgZVq88ZE9btRaX3yxuPtpxb2xoaEZGeTYM3v4 ACAPgOA9FBpoocliWGDcueeGCleHVzySS6ggD+LPJF+7PbsY410DzM1ROrzuONx5B2ooURRqu2cY 4owqKuR8E8XQXsjLujNFjXKVMbQLRZCSWX8TBBeDgQOoUCLD2gtmPhh3AeYBqTAeRg61WYto4yd9 7RwAPz9+wANgf0Ok3+8yrhb+lah1Iwh6ewnMDxcewvmMqke0rhhxBluBPWx9WUfZdwHlWtyZNoV9 PIw5hshx9AfQT/H+jDVowWfpzmW0ByiSRXraHku6PM09vCQn6g4tDVffHb+7K3Mck+yI9aWAAOOD NUCHuYw4btFJBvx8+g/v+wVQOMmvhSltWjxocI1M1pcFXae08Dkr8tPps82U2ecGBkp+1HxPrcfj zxgbeN7Y0Pe2I92G0nDj78f/ANvn7llmnQCFYXhblZL3YF0jY7kqyKBIsjUuBSCTbxaxZXoTFCrE MZg6bEKtW3uT+psvamWM4jc4SSTEsMiMhc/fmW0T7MT7kXKTJQ219Ny7AhjWCkTFXIdsOSvZBBkf WSt8Jg8N4/g9kDCbTV7N2rNpGH//AHz9qEcpajJcFb2WH1ULbraF8aS2ExYVwXB/NK4kCrwyMN8o dPT5jA4b8vnkfkyMVaBn5ROWicfn4AfwAH8fYbONFbu7gSTcq2km5sqtyTvZDhZDhyQDSN86gmhw IOEOq0Mw+MGFxdwLL5JWaM0bmzbIknPAbBsAA/v69rJLIQJlMhuzLtfzbDwbMFuvV/8Ao2zXxDQ+ NuFqLbgtkJn5QgVWyLNltAtGWTmO9+58/wA+5B54ZAs0bl0RnwKMzrnlmVANWtY4nizdjkVyyNdi SN1dzuOqxSI23VmmLJTZeVoZD5+TwSTLkDlK/ZA9NwwieuEpKm8GENPbHBXsa2FdNZB5jjcPT2n1 eG36wB4OYUZhbQTZv2TkH/YOA9agaev20cA5qG7GyTJC+W4BzFkNkwXF54UcCDInokO1A4+Z5D2W 6zZvyYMwSQjsD/7C/AH7ojfK3bN0uWy21kf3YNpiksOlbOr28F7tK5Lya5cfhoa4tviGnh0cCwKU FkZeL8GWQnNjewPx9BQcD/gJ4GnlDymeiz4dXWdXyHGiWABZCBaYUsYTXNjQ2AzDmKEMw4MiOhp/ cUPWbNaHaBG3u7KTB/2DYAB8+pVVI21D+nGzl28NszrhQ+3PayPNLmWHC0AYy+ovxtOj5AVJwLpH +y77jTXQ4FdL05R94C1umdV/MAml20batqwk+t8lXLTALkw88Q+YfcGSqx/3yv7aOIf1dDJvJwIa 3w+/YbAv8+xX4GjzDZQ96Ld/TyQQlarhGiEDJ6MprZ75fKFvZ5hhOZJg+GqodgKVH2pxnlDNwf8A v4DwB9f2E/ZA4n0vQTgyJDu4WjbSlUqlLH2FfCOkGBaakPlyLa8yJ8N8Qoa+YVZ7ApHA/JtRn2be 3arjiDbu/wDH0E+A6orqM1GGIoNDyU2wls9aBgKJsgCk1ekWPF7eygNkOExwDmVswP2Oy08fhVay zC/cn5sJagDwHAfY+fNWklD4ineMxs45LyPW0K4q8X+T/wBOi2YoX3gH2krtd8sCcRwcR7q/wjnp 2UmDXwLJT6mGpkbZEpVsiXp3Q5iOw79K1YJspkHwk/khgwPhtYFP4rDJk1f8vgggQ3j/AP0FAwbV mA5hl0ST1fXBaEM87NsS0GrJHsMz5UQpw9hY7Hp+Hxtg4r/P1ynrKzqMKbmd7o84AYbAgn0HYD6T ZGR81BSOWu9p3ZQzRxtTsBqWqnpzdK5LJsVktB8D8krcywGNh4k8Mgzi6vj2OCf1Bv8AwF+Ae/Sx ZIdqGkPTHqHTeSJLHaZJhaE/Jju7gLTRLRV5hwD8wDmAw8M8AR6Hccxmt8pxjfcUlJeNgfj9un9/ PdHhLqJZJw/9GRV0bpEd52CBEmzRpIrpsWidbJbMNS0l2RI2Ss9yu8dkkePPYxDVllTcfb1dcfaD Q+A73ylx2tFwY5gReqe7O6GFkVL290lxRDB9PmLdkD7Irmen2X3I4yr/AJMB2iEdkbnx9+P8+fuv qWPoPKqu8rz1YXNGhHkOioket6lgS2R8PO4t8cOHp8N8hp9gGPgMClvCMslEOs8KrdglXPB9+/8A c/0gWw4tNDwttspwf7mPODawmLgVXBIQ4vcJNAvn5gW5lwByCGCgL7a8IbyTQ9sRqrChOcL78wPw D9/YBswD0v1LqAzraKDZJKr5jbEMWcNV3eG+Hl+K+Pjgnsdb2R4/524KfJFkYLfbM8I7JP8AT+IA /sB/rK0MepTELtuZt5dvsdOFtdMyjb03xuFITu9mQAQdPE7ws4d7zQqgYxPG8b4YyOkcst3RIVih HJBN9rydKLyzxgDmq9nP7Ux2oSd6fagNTrzJXNjS1eLaY+YtmK3mPlocqtqn7LeITyMV8dQow59J B7+A/QB4ADmKa3hpzod3nuwTnmcEwaGSGHs2ZYwtslFIXzA7IhzE9Ph1yAQICr+6C3n82BHa8LdQ T+wIIDfwF0jBRgY7AhrkaiBpKubC08YWBQ9EU+whhYvTghvhggyd7JjhDwMe2oBE+YTvLgZMl7gw nAfP/wCWOAHIeA9X1eYAocM2SSMGSnBzU+WDWRhyA1PUot8nmFuGt3Zjw+uQNP8Az2TjPA1nY/8A p4ABv/Aej3FEiiQPJtujq0a5I1GiFexd8WceD8c8W0e1W21PJnUO3LFjtyyR8xSou2ThZIaTIGji EDNXs4LbDxTGyx6rGGhkpcE7Cnr/AMx8illcpyBbM8wsgPAh/PYIAPtnwPjIwHib2M/wE/8A5b/G 5lkTHK1KZaCiTGPIaSyKbTNJamCycr6c3cXKmEQ92TGR83BwVa0r98R0Pa1er2as3g1hvngPoO/g OnkPB2e0GHBczXYJnd1ED8wAU/5gsWw1KrzB8MOtlw5j7xUv1Wk1kYU4N7G+1xzz/gMeQdV1Fw6b V6vs4zlXlf2SeslkrLhNhB2JkV9L9hLBRkYA76tl5iePh/AP6ecDLMTFoZNZO44OxzgH9P7/ALA5 gsiyqjojypgqpPV2ASSdvkgkUKF35HSo3+nl000g3EgfMm8K5Xgmm91f7V4N9SR2i/4pbYzq10R1 729qq8n5eq8lQIazflIYloTENgsdwT6rY7IwmA1Ng7cLdmPOHGWbGrsEkHUQAAA/VfPgIdwT2wC+ J+/WQShlE4lLaKBsgg7h00+JTWiGwLcMPjZEMgycS+Aq47YUKM3uk8338Bv4A/v/AESVNflQV7S9 2GbLfBrhfudV1ZVPp1p9fSWQCBiAXKHw98ZA8wwPshqQ3DTS8B1mzUN8ZsQZsGbww4CvgQF+8B66 9TGZaj5R9e2Mr1jonTw1wVdZ1P3xRtD8kPHpcWr09ftRk1OTFuEwYTp7gA42z8nuT9fCHNgt7nwA AAP9L0ciiYq6f3mMvEZ5UiJbci08oZZJZod3HMqQo7e0kjMU3URugEqS7V7MxWJcL8kR3k1RpZ21 rstvOXAhuEewSCquFHBts6fksgmt9nkO4er7QiXyUmcPqsw4Ia2wJ6rqHHz3gOTGPn2ZHNO3gP8A YL9v59+1PmLbk4PlSq9MkmUyHjFngk+PEN9pFzYUOm6T/nK3hmGP3VVJgUZy4Ms0YUGWY8JFopPA QL8APnkAAwH00fT3BDiHtRibYUaZxV/7PLd8csqtNcpdoXIhsDGyVWYEWqwQ523nka1EYn/TOyVc ER0E+g7AfAPz8AbLhRmmsDXa2dM6hFtb1StV+2wkGNK5hsuy+EKhotNoZGE3mC5nuA+2K3OOCOnL PA3vkx1KdXZ4XwCFv6+BX9gNpYmdcdQ7zah0STCtRu5D1SbKbWdKALe8f1ytUkjBURoEhoRqilaj NYqT3XjjwaF2eB0jqrMELQBtVXns52dp+QN3CjclfsJklFGGVbTg4TLsDuCfZFgMiqBHHvhs6xzw YM83diOAxP7AfPn+uM6LmVplkosDJkwyA03Ztfks5gLQ9+r2xkMOQfGTupVa3vEF8T+Kw/q6usjN 79/6Bfj/AOmPWmZR+WGIZ0oW7yT0DO2myDzJxOYhyl5ycltfDuAd8Tw9gTAaGwwHjDgzQ0bYDN75 +/gPf32CHkTBZ63K9PLgBJr0yqrglHJLbREhxRe1yk74fdSG+cwT+Wr75O2wZ9G/zNg/f/582LBS oUHRsAqmz7zW2h4Pv7qI8Y8gknoVijDxGRcNQjiR2ssVjQDNqAF1kOL5vpnVQwFDJRvHi88knHg+ 0tCTVY9I/iMlWFd28MCGHtSn9MQevzE7b0OuU95WbkaKz2M2kuyOA+gr+/8AUYlvAho08OC5mQ36 2mf8UBlzOk4GE7T7MqYUnv7JC0xvkS4HFwnTx4E37rNNqwwliFxxxAAQGOADAAAxVjI203Xy/DKA VW/iVXDVKWHMBx8St4vy9QTQnuExkQw7IYYDEECnVo1BifKEPnKObdgm/vyD/q774Xvw1R5euu0w 9xwNFFBAqHpqv6nD4zTNZTJNYV8BrkM/2PdiHakxjX8AaCv3S0p6yjq5R3rM3gEq8HjjsB7Fgxx6 AywiQFNNaR+quoEGz/HXuTUSQZySFu+RHasVyReCxMlLC31W4aji5O4I4E+67X2ZVQHfkRa1z55U uYBn+1dGKThiBckltL2AtjWCvU8o5CYtoGF4PVacYT7UX4bwevCfOmDPdXJvOyJJsGg9on5+AX51 ZzVJckd8mW1bQoa6vjHUpvBfrGGrxHCua5Xqlq/bzAcOyU+XHw2oCwPirDeXlDKec82cPgH4/sH0 DrSjxw9GWjTLlm5zahxckHqEM1JDX5a2hAZaa0Ia+nh1sOY7XzJ1tJ75OW7yrNXV9zqvsm7A0E+A t1A3/f8ApwPFN2QmvF5BWhbG1KmHkAqrvle1/YRg9/XnHvhp+EMz8w42sEBVZHlmF8mJ+ENnLdYD +G/7B1FRWnzZtyHZCxiaWvTnI3kU4Hztx2f0BQ6hZo42TB4nE0rFWFYyLt7bjzeFtY4vIWRXSBF3 ADn3RUpqgg8avSbIt1kYpk9GXq3fD0TUvXMz4fbd8MUmPMcuH2XagcZwNXJ4A975w/cffvvwDob0 92Q0Pl4LeaBoG9XDUjMdrC0/5NM0uvTNPoF3POcMhMuBPZLUmOEwHS1X1ps/fLFX1M6enjB28/v/ AIACA2BkNhRkrlPtrZrgW4R6Z/DLqQqV2q9IrdXPd7uXuD44Vun3xCIOEFSYJ6OYRbMaFf8AKf8A fwGL9jsHAT8CltD4UtyZqlqVwvUwxh0iwrQtQOHbDFjPhZ7irbBMmGGRwmXAh2MQr/Y8eMtHGd8x pQJ4AAv7+/bB1nMG5FGGLl5EMKTZYfU4yum1NIA2G7GIpUanw3HSm9zNBVZyt27PLKY1AWOF1heW NkW2/wCW6sLF2psY0bcUFnUS0513Q7WtrTgrvCTfLgitSlqhvjUJUF0Kr6CAqOZcIZpE0XeKwkN2 Vhd86zCAex80fMYnYTPhlDzE1y8cGctnXlV611CsyezNQHR0p6g5kqwrXyW9zFBayuyeNc/Rarrm m1tmfDA5uIFjeR/jxjkcpILf4jYtn15+9cfDMbvXIkZ0Y06gADVTACgBxwBh/wDrn/f8cwtqQabR wgg8j8HssXX681+fx07Fe1KTtBLMEKvPah6ZytN9tO+oBkDuGnBb1GVzTj2+TKfT8XCq0Kq+2+/E EOq1soTFvmqsmcq4JwhgAH0E/wA+39BsW2WxIp+zLCF1VbUmk0hkUkgfMZK/sO7bQi3GBih6vp98 vitgxghDVQNf2WqzFkm0Vf2zeLRCBKrfn6oX76DsGCxHyMyqhjU0TySTVavWAReX2RqV69h6gqvS LGtBbtBwrdbh1XMIMiO+af8AUtxtmxF2gss3a5JNnP3/AGBBAYr7IqdL1MT4afo8u52QLId3C7Cy O4zB5YOdtCnNRgHCv94W32biwfBgV++KrIs1mrtGnqzP7Fz/AGBBfufY9NEWDf3iRGQamN43QRDZ 87RYRxRgxw92UjEmmFKKNqV5CjtE+DrplUIYRLu+pBFSsdPPjIN3JI6XcIIy7bClfJCu7i+ZWDWM a1LLJEi1gXYn5DYYTQOJRomDvmY1vVZghDBqRHlS34u0GZG9zeGJ8+A3/f8ApwA8yl4qfqoozVeS bTxnm1sL+ntJDiQ9cnl4o5THCGYW9nDsC3BUvOVWL5RuYztdsmwfv+/8BwrqcOQ7GpevWhcdqlAn gQRhq9kp94lsiuepx8PKDhScSt4czh62cqXlsFOZfxezMxwJ+wPwDYH7kD91PbhHDV3cEANZz/ny mqri1kVXXshTuCxld3ixQ46H2fW3AOPMQYE9tVXCzBn5yRtkq524/wC58/h58AmHTqY63Js/qZGV 9z2SQytFJEyle+NqRnFplwPtsvfUsoYlEXchVnhQY3HKfScvzd09DHjnnqBr+jnjUOwp+n0XkIDg GZBrxZBi1LobPlRV5XtBPHp5hwMw7TT+6kDnhzjIyrxfbP8ArbYNgfj6D0mWBTvS0EusRll2p3gS ElbU2CsWQwWh2NaC80K8MhMDh/vg/nDan0thW9mbpgjEzgPznAffz/TrZNKi3d0xDtXTQn2QHFp9 J2E4WokkCxgCed5QGGwTLsQ08PiQ9qzT60nB0YYr85Z/Nu2B/gIDwHn2HIfJjk4AbBnuwRklDWRI rbhRCvJlcgWHSqLT18PM42tmXBkalK0OKzHknzzkyOEScAe/nz/AT/T0eWTb1CMjoEldXd9qePHa sDT0+efH9VccR7suMbLGd3M4THCuBJBqaBB/wZbX/bc/ddB+Y0HbBKU/PgadPmBVvS7Ep9br1fSN qV0hETYTA+U/dkxDWx/zrLT/AJz4MsxoaBn3bm2B/wDYP1AdbbIeKrq+0NLs/S+72QefDCkWj2pe VkRLIx0+qd8Sg6eYhmK3TzHzFX+RVUNmRimCys+E8Bv/AD4+e2Dpho9kGLBhodN1ynyVuVUtkXHZ BJw3YxSMqImyuPsggwhsnIFt4n8tOMhNH9uTA97dgewIOGAAAwH8a6smFXtDASqqVYSSNaPjO7wH iOHw5QFIaJRggyOC3DhzF8xYz44NrXthQZtmx/d+en+ffv4DqEYkiZLh0qRrJz78vafHaBgb93n9 dNkXMqsJymneR4z42628hXORNija1V1+LIr7RZjuDA2W5XN2fqC8luwl9wsJwr292jabGtBPq/vx W5hDrdghzkNPfJzJWVGtFoLKzR3Nt8X35BfgH9/UhyOyGWgDVRREGuFqzG1TaSVSp69DsYCJlAQ/ JOH2Qnp497sayl/GnXyshgvtmT3t2d0f2P8AnwABBPzy3VchyHp/PLOlPjbkoAlGziTRL37ESBQz HGzPdSGhkA848vqWzo3A8Rmx/wClfPtgQefdKpwp4HTbpnGf8ZtG0PWNOWw8JNPh+eK9jKdjckX+ SOFV2QYIB+5Y89+rMLQxjNVZv+gefILB+/n1LExjZrhEhdpY0h8GTsVGZr/oxrGg47zZtfHRSSqW 7O9B7X8ZeL7ear/U/wDnqwDIQbKgzMkXcirZFeiyf4v+WrxDAEW2WgVDkOYWpDmri+YR1K8KH5h5 Rosz8XY9q7dQX79/38+NR7oj1AQMGcow7KrdZFbie7Q0ww1XaAteTbGW1+t1u+JlPsjBMOVLX0+c YGeK84kpLscAP+D8ggD/AESKdmNlQTIYuVcBJ200niQlHA2E0XE4OdXidRjkhj1u+HCk2R8X0M5U pDuoYZyf3mjTqT4M+AxxAc+38+scyt6jXOYYZVP1dksaStxGjOs4OkBxcX7QHsB8UDCeYQx8OCeX 31Hrf752y3wI7ffgADgJ8AwIJ90kkQiDMXj2k09SZ7u8J/prngkUCRMt/vRIJq20ydcl6oaaeaeL RQRJLqZNSY1hG1DGzxQvIiyb0qRvngwUtLHt9xG5dBnLbQHM2Bqust31LpNkWrnP4mwEmHZAh8A2 gkAabZB9JoSFT4cwPWwbbaF0wnCzN0q9ZeXirjiT/X3/AOmlkMA9Xw+k6Rt/Jq6uLehskut945DT 9XptxvkV8sD5lkTWWt8WM42kOK7YMF85Jgzbsb9n5BP+f6GwH8Peayw7Qo0bW+JSsdPC9qwA21YC QHAFFP4odf8A2fZ6fT+5dgXxY0wpWSGriyZz32M/v4AB1iPT4cNp/wBJeoIzXqkqaRtStkcgD0nb DYY1Ld2LuF1vYH5IuzTehr8M4B55XKfzmr1es3o4ECG/PsGwb+g1FhkWWDYTVxy7aTlpoAdPtyTY 6YZwvozLuS39MtRyGHc3Di3pm3vptSsr6QxoZosYpdueKZFwrBllhaSN8+6wrdmPk302mRosTQ9D 1IaLaWA1LYbbdkanEdqs4ewp9ocsKRZnG7UD7xD4HBUhz4qhyayrUPZgzZKTNmz78gW6A8AA6ajR X8xoeFuuWlVXE+y6HSbusi1E+p0iq+42nur3xwYGRkT2RPWyDgDbU9DgzEYYhi+cvDt2u38/9fP9 U/MR2RtzDttJC3JAwK9kpEcw7J5bhsViV1eGPren0Nkhh2AxVfMICNMJjGl8/ZDZsG/e58+Aw+vm 0PsmruCqBSGS0q3SD1SrxAESX2wyftC7tVVNGN4fDDg4TfB8wso5DrMYUq9mWeE7IcAbB+h/z+vb UNIYlSHy0gRP5JIYtNGznkVnVgc4C1trvpCSMSSxuqC+BUa90acDnbkVHs+ccaF2CRbzBalMrGK7 3Abr1cG1xMr4lDj8lKPn3z8bdk3FPmfMOT6P7xGCWPKP1+knNgAc+Afv69KI+ZFkGGjh9bpNIraS 20dkmKfLTLkqWZYwGGvhw9kGENwIGJx7lqriMZnwpwbm1XY44gD6Dz4Bv4CxTwQKaLdRFAxSlhVd qhsGZTdhWAHqtXXkMo5RCljQ09cshEuCyDI58ONxA8jp4x5+8jAZs2bB+Ax8BsB+Hjvj5d0O5kOt KTGnhV5DbD1ENTKnxENWixJT4HH2p3ImMncCnoNluGniq+DM1Xoby81UkhOcH0G3QHPgADHpZ/kj kXuSTaxOUqE7lg/xyR3jQPdd3wFo5MjZnWVZDczPnJxWINFRXz7W54/NfmBr+QHrSYHlHluyEMpX rsWXyR5XEh+Glv5NwmJ8yYYh88eHxwPfMJ1BV5Tc6PCJJs4fAP2C/i/AD/XHbCdcjkt0/Q7kSpPO DIg1haA40jXpmK0CXxomL4cwHcHyG4B/n8tVVsmjVeVRhhwIb/YD/wB+wXz4APy70S1xfh83ZDSG m2H29+GBMMMw9KYU1X3AOthw8wwnmEbcFI4uIzy0bm8nHZJ5z/X78/H9/PyRgUjlA9nSmh2STy5n Rngg+KpBhcJLlQ3Mltw/nE9khsAexp6+BR5iysboMGfsZz3YAD9yD9VJFFNqBqJf6ErGNPPqbLQF 8v8A6U8i44/cTfFGNNIujm0kcaCGVEjdUGFxiWKbE+bG5DGwPGIUjnKwHo+n/SfbTZEocoHG5z4t kmEOSzh7vW5Rp36uf6w5JMZXDnAG8KzqtbJjBdX7Z7OxvwCCf+gnz/TORx+k+grgSYrk7f4IYa/t i/amorTPSO1i+0toJ/MFtD4eHT4YN8T3wHMJrNoIjyjWok/+P1FjgfwPr9FXyRQdBXYBPBiT/qcT IenivSGSHV4jIBilpR4O4Q/uBgOvw2rmFaTTCKTF93xiObdquBn/AO/nwHtd6qGAXYNZqoupaxjO 1aNVkbhnWov2bcFyHizmUZHCYHp+4HwOwIbVpaXwPk3kqLWXnvZaITj5/YNgP9outUkjlmRp0kSR I3YRdu3eVLEbbavnI02dLwuPOdI2DA7SZphnFINxO+SGJch2ZVmW+PB/xWKu2YDq88+adTL4qjal pskt0ijvlzSIkOxjynXNjIc9bre1LTMBx8OdZdgbHMJ4FFcYjg+Em9/QQHPj6Dbr8AganqOq9Oep QbSyakktYCuSJWEO09p8e2A/A7NiuVqD1unzETjdgVv2lcHyuXzkxQXtmyYfqf8AP7B0/SOZo5TQ mpRWZ5moayNTWc31lW+muvXFemgU1T9PIwDhgyPTIt4TJsDF8Ic3RmjB6Rt6COqOwYvwDn5/DDqu FuB6fqpLduOgeNmQ7v8Azie4MExoF7WeMMCf8xPhht4eMU9SrkMTWd093jZDewYe337gAC1ZXyoM MXZCxXCQY1yj22N/cKPgc9UI8GgdezTyyZqYprCbwWwRgMqxBBsXbcCubx5cyaUOWFVV+uGnhOt/ n9sdzrgcMWQ9V66e2fjcPTGHmVvPmNTavn+Sc5pu0NzwN72jn/oJ/gPn6dA7MFtsPODJpg2yC3YK JjmM4gkQ7QtCp3KKyXBvFJGE8wQquqzyeeazCyTKFMSZzZDZz3AH/fwPRUDbCESyFWwc2yP8A8Yr dTkKsNoiTGgC2WMBMMIf4bIoJ7BM4iQstH40TF7pvm9mznAT/AUE/h0+GSRdDlUdtO644EklylqV 8h74sIewhxVX2ELcjBC1IdVp9PhyEz5/LQe2VAUocYs/dvAvwB+P9RW2kGIsyOiRoe1Fu8i8tNj5 FDDmjyD5ORUdobWkhhfIg5O2GGOEdLlfN94xoWTfBeY0r6rKC3jTI7h1JqzbUUq9kMiHU7vUFS1K kPjkh2BW9bzS7g4YLc4FqQ+CtlCYvc1nhJsIjnz/AIDf+fdU6oeOHcih5DulqbeBvi07mK9r1flh wMotd+zp8yGt3wHwHuH++E/F5V0Pk2yWi7gwADYAAA+f9uys3Su8oxc10njzJamoKYSYVdPp+pxM zFN+LTdVkK35g4WQyMBi4tPA/TxVb4M+0LPBwiSko58B4DwGHTOjhl93ZK9FpjIOfCkwJLT7OTzI nhsqJY138PZJgcO+Mi/DBnk5SnB9PTNV74875shvn+AD/vwC4zKFCS4F5CGZo02kaQVmyozGOPOx YknXkcFqNAFjJeVGdscVCM2b7fG2ka0t4d2R4skcCuWon2Q0QKvrHKV31tuwpMq5gYbCA4Vk4OVS 6WhdSzCC24VvMT1tgD2NAr+f/Uz4rrOAMIk/ftg/fz/IF6rlBbQ8fKApLJcGa4Ru5FPslbiTCI0F nKUhkE+Ghhw8NxfDgIehvG2ExbQ875zbYwGwYgUHz6Cwlut7AsfT3WLHlU+S7cNVx17V6Tk0fbAa LcbDFsZ9cO6ifdlb8gWwd0/avJi8GdFBm0nwD8AfuA+A6CXSs49fHO32SyDTGVW6AkGKfs5orHng u2EPeCEP4bh8weYrm+F488ODMsq5RY2M5vZw+AAH/oL8f6VDCpd8QibaZ9iEZUVFEqzxH8gxySVZ BA7bce9cz750jdj5qvAybKVvnmSR/NqFtsrFadzEMzcmnuVUr5UrJFbyUSQ1LZivVsoCLHlf+cDh 0+HCITAdtMDaDm4DKvKclR7R2Tz/AOvaI/j1SfMIaf6bsw9VQuZjMulDQL5kWFVYdsDgZUSxgMOw A8OHajJMX2S1J5DTTBWxjMrq6MMtTA2cxAfl1+QQH2C10NkpdjsCww1l3lJJW/D48YqUwrsO142a +PjgQmLYeyON8D4lwIGHRkYpwYYjhEkIj93dg/r7DryStyh81ceDzlZedGW3yvX9tkNUNo/2m5Ab I42HhvhhwITK5nuM9qZEZZfPs3CcP3//AKH8OrgLTtOI80/iXviljzkYNthNxY8kkxYpIt+DaDiw nrTxwsUSRJM8GWWycNstkMOPcAOTxY69adJn/Fc08adE+wU9DfdcNG+k/bjQ7NNcqNe6Nz6YDZi4 dZHfFUDDqrjG0iCHrYVcDZctgj7lnzhU7NzvV6cPX6MnKzqm1hHQtfFRifOY6XQp4gDBzZyt6LTb lBOiyTOdMP8AqL1bKVXWSpOVbN/oK+hzX2pQLHFL0SWEmqrJT1BFeDChZ1nk0muLsU18KIWOKbOl bFbFLlsi6BoGhfHAvhseqxRFwvFFF5eaAF+3pq6eDFi6oNW9tVhquW6kojuFp5lV8BzdOFaQ5Ncq ZM/DIPcSq4YhDPuISprRug3CxZ3xCt8XveOKPvwEDhhifA9cdRlLEzUvT3Uu8XHQNS9/qy1AZ1YM EpbocXXrkmh19PcLhQ7UrceXuLb8YLJue6I2+JIQ3hv79sG/nwHTsh6g6ztpLs6tG3OW6rQ2q2lP UQyZO0uDRTensWhw8GT4dbp8wgHsatGDg4jk2BQmTwNu3+dRcBAb/j0kyhBwV3BVdwOntbGhs5bw sh2VE93MRD1OCnvug4Q0+yENwuAxBgL/ABUwMsy+MVl5B0m7Vd2DAHwFRAD/AOXTePTJIiiOY0jP FptQc9Q+1Dpo2EisDLL7VIzlOGZC+SSK7rxtIXR5cokl1ccku2c88SqQyQRmsWsKq+RZ6gUukz5S s74Ut+fzCa+SbDT2RbHsMOz3KwnKm+YXAhvl2Ib4wTJwEeBVbIZidoPhMmcNhN88/UIA/UT8/dWD stDELldB81ZiYWSMT5VfU/CAu+o6HE1AqTOrqEB8hWPinTIGNPNtYPbsIwZactFGKWoEC0qbYAQD BetzH/lQFXqvIWJftmaj3HNdo1bvcxjYLXJJ2Nsh06W2OStVa/hqErdbiVuRZUiCwIcGYsrNYFRt mA0rVEknD4A+fxfj9u9Kxo1E3IuVtTIuUNoqHbVPrde6Rxteo6nMrm7q9Q1dbTw8OHqEDzLA/o98 nWp+6I3B/Ngz+wH0DYMdgZNxHp5RPCiajUnEM/e2QQGFkobMjEDbmyfCm9Nr4qP05XSSJ89NCrkn tj9IVuLJzuxrlcsWKZAp6grptFHgPX0ebjedY1KHzbI+WPMODA779aAnGKtr5gOHpPh/w+IjwJxw WbMaNzZv87U/f9g/fzyn7czKHaKYv2AeSbClOyS2K+oSYObLUtoCvVzEW/yoH1IfMX98UrAgTvs3 KFkYc7ohNgwfkHE/jz7rsOHEOpRZKh21PoHJlTJKQR0orce7odjFWFDsat94T6Tsit3BPhVy2jx7 UZZkZoKExlVuwS7PvwAAf59j0q4YdLsZwGsbHp7dgK5T9b1lV+dYdgS7gAi6n36YvJ+8akK3hp+A SAPbbUMMxPi4smDNhOcP3AQGIABj0oJ9RYVZiiuyWkX8102meCfM1HJIhfLba9oLXNgmO2UVXhMk iK6szSiOO+HSWKWCPccxs6MquNrMMS2QBG7QzHStCg0Dcl2SZjQkmyysNAtDYtq1SiXyVD2dPqtw pPw9xe6kDcCe18GJnAgTfMd/PgN/Ab+NugcRYxAxQVgtSk7LjgELEKfmRxJhXaF5olB2BbDodqQ4 bAHsZ8cO3NbjBlYFBgtHSd8OH8bd/fz790bKCWwVphMY2Oh0hIsZ8G2a8NUOv75muRQSrvsPtWtL d2IbIvzEdD+ecT+5nPGYn/EO7cH/AH/YN/2BgnGDNd9Pb5LpamVt3zbmuNIr92yU+JDuS0FOrwAf mBgxT9qJzgHncfstUTyaNaDQsowNJ7JgwB8/wE/59+eHwlWJBjhOYS13neNMRQqqPFnz56GONWka yjZJkMGyxww4PA92XB/R454EI+ZV6RS9YZR6yJJltAhC2neGH0/lmRoV4j5FTyEOq0Ot3AxYC3O7 H2ZxsnZivaFG2/wnezh8AwbA+/fgDUT48ygrwW7uKIdtW00OBtejzA9XtYe2nITFTQ7BZEP+TfGC JBQ7gAgw6yMfMLLGWoEtE28AAGAABj7nz4pDzNK8Wq0+AApi/qZTXarl4OyOFfxIdjgVPX0mp7BZ Biq5kMwQD07Ar8CDcO5jQ0MzNgb2TDYEEAgn9/YD6+XxdoLifZCQ4kltVPWcpTKefBqeJMHkOJFl zE+yK3fEOYYYA5w9885MGFN0WSZw4Eq5HQQGL8vr5/f8c7ZzLK5TF2TBnWLZkOQDEo+T1hGsjkUc sAOLsVtRoYUDoqKgjjVHiltxiVUmNzjmbot4xNBuadmoy66Dd74uzKUg9o2Rpo1XNtOID4BeJf8A D4hpGoK2lsgHQ9Zlwe9fQ/r/APODLyxfEbfPNo78fPgEHwGB9GyDjY0avLIvh8o0bpXV0NSXrgM1 6rloiGr4Hk2iK/DQ7Hp9kXE9bB8fPPAd5KfefNpPOV9+AgT+PgMOOG0ZlS13Dt+1Q6iBiob+JHzF sPEZLGKcoKPg9kuBCp+7ENgMHFJfbTaftiuLJjDlXBO6gDj+wb+/P3T+c5ifF0v15V/bG0YZmsac bLYW63IXHW9oIf8ADketRPY0O7Fsun8kriliAEEYrNmfBbMMqs2k4f0Cgn9/AAOij242iiwmk3pI wzZblSCSKR5KoVmYlGN/vI1RYytKLaRBhwmZqkNBUB5vCjZ48jgfKlBi49lg63qrKMbbb4EavL4F VR3et+GiYtjQ8N4fIaeyL7KDrTto1IdZ1mUGdzAeyJO/4AD4A/iAAH+xXkL6ZIZDOnhDq6wl1VW3 cgSr22fPAYhS0JlgB63uDRnQ4cetg6lHUtBrZZGWhcoz+9vG/wDs/H0EB0YOCO4OwMbPq5wZE+yl sa73g1XYvu6eLQ7ZfSj5X9b2R2fD3AP+DP8AnvBhZKNCuTJo7vaIQHsB+ocH4/1I1PDXP4SIbRaC E2VW2LZJrHvc1OVESumiqIwFPgGGW+KHe4Z9asZsnzjnGGa46ceSn6++OGK/gAwfmD1MYMiPPLO0 2cjGOKOHHVq702zGNxqkmk3HUfdyOMLYQp3YooDt5wx7zzygxiAWZLYp2+V+Df6rlfLduVGGjjSm VailktGIRsH2Eqh3eGeV6RxV4fzA4dwMMg/Y7LH2W8B2ZmVyiMzb2bCYH3/YD4B+xx6cEy1Cjuh/ 4SvT6kyWgHZPj3ldi+j4WNV+wi+Ph5i24QzBDEGhsDbBDowxDFsyyD2R2/YNgP8AgOhtTrtbaLEa jTcyWQqlLr03xLQSdnYVsWUpyLaCGQmVW+GHBw4ejT6PPI5hGRrkV2ZZeLRCf7+/YEFg64xZVkaF fJd0NkN0y0WpGlr4epaHYYb4hNhSkbgIB2QPDDmLBZMIDh85bWdr7mebNVccQT+P37pZw74wqM4+ nzRZLkiM2YXcXDt/jYr3U9N4rlibsapOUdImeRBIRcb4YEvC1i5EyoNXp5eGzoI2HUZAyr5OVmgS WdYKTyyQNyQ/+o3xWhbITfmWQyw0/AH4FHZGas2j7OCCbJ+n0Hz/ALnk1bsRoqNbgPmdUqJWieFE yKrWx8RblJve4pMT3AxM09sjeQZHhDYJ7xVayzPmO5gwn3g+A8B9g60mChB3tAPXMWt5Om98PVdE aIedYBaYeKFmiVMIMj4+zTK0vhzkBPbZzITJi0N6WfCBPZ+58g4bAA6nrEugWZsGvMqoNPdXaezK 3UrC0WrXzxYXKQJa5KbcGEPDcFtkZCDhB7XW0c4yTaBb0TRzbtsfAX7+vt/fowYMSRmkFCJNncxj IBWJWzFydpwWvU55XDkYFBGAZU+pdoJ3kbFNtMfWmajUEeR3Y678k71x5UrQQW3yZbUtjuwaenoa TEthwviQ2ODkUa9+Q19bmLbJVcMcyQZ9gKX0blCGzDKruwIEBn/AYYIJ/wBySHSenNcsV2sEFqWJ Idl6eyTDdHbG+F4OUAtkqua3X4ZhkmbOnh/n88gshMYh7nUDw7JPn/v3gP0c1lunf23LC1SngLa+ z743Wr9RQ2n1OyFcC7gYq2QquGHMLcxgDqvH1FVWxm6CxjNve98+APz8A4CfwPocfU+Yrh1Vpn6e yTJAtpA7T0PYVPy8a5PCZUV8TzEPCGZmcw4GQ7VTLMWShSoFk5+UQdRH+Anz/IMOmjcjXcCvHIEY xo6ETrHGUxjEF92ORBbcX4GPQoyyPS2NtEDs026jSc5SO+CbOdDFcXuj3dvNutREyGLsx2cr4tpS zu1cntPMQ9N7ZuiakIbRDr8xW/Z+yIdfvnPGCf3IZhnF2as3h27XWofwt0AAQPvwCt+nNksDSrbk OAx3NJG5VAjROpBwloEuHQ/eOILDD1sPagdkuAeyUDZdwAUd8GDCiHxn/RMG/bD9gw3/AK46vT6b SAV/HqVuCiqTiXA7MNfWEh1eJmK7RU8VXmU8+IQeyFu7F9ktTj885/QaujewQIbR/wAu8+39+QUG XdO39l5Cqpz9K6SZgVvaFrmLsuan7jL2g0MIGIt4mENlWg5gcyBD9IPs5bWXjniMtfdklHPcBPr5 9+xAAKliSVFSR0KDyEOd2EDWe3G42kQVZ7y32U1whoyJIUQuKJLyFNuMY5uBg2dWLHb/AKm66jrg ZB6lYB4C+W02w3xwNiU/+JZHti1HJXsIpbVqML5T74tzDA5kqvtdAVWV5ZqvQ0ZZw3tJB7AfPn37 n3TOV3hPDJxLUEhquktqKDNPCRX7sNR2Ha7apECLQiH8Qm8MjJR4euHxPsyuQ6yzPiGsjLUdtPFo vH6AP9/Hw8oYrOql8O+Rc6nBuU1IEQheWcj1OyNAGnLaKGHCZDTnyG+EG9HQx9aPCG8rP8RlZrOD skm3jYH7gJ/+oAkfDbKpzHZSXHyQBrncncfNJUfLmWNKYZT4HT7sD6teN2oAhnAI+y4LIMrMpVyy jI9XO1oo4AAAP7/+/wAJcqioPYiqT+axAP68Hjni+elIFCu7i0XHI37bPHHzdV/2+enwvhw9QVWN /hy+PYWVnNlxq2TnD2xwVwRapQKenmafcENwshgMA55BtR/vNXq9ZjNkScDngF9BP/Qajre0C7Qb fhWXKAEsZ4eN3AQ69YC0woAXijkHT/sYeHyBkgz6/fAQcZ9oRsN8N/8ATDEAf2AA8dOanXaYUMV8 pE7ISdSLtZDDT4Fwsj5ttSlMDF4/s6fQ+ntbIMk4CwPlcviNjqLFvJM5dnNjh8/UR8+AwPn+kEuO ifFHtQEC7Sluy1tt4O7VK4d4KRA1Pciu+L6f8y1IbIOsgGfTwKoH3MWLszYzfe1Hvw+ggAHAQCC/ RxWTASB2xaNHTDOPwrhsmq+bFGuBZvi1X2ESbema8WxzxrC+LW7sfI4Hzd9EiWUsBIKOytXOd8OB qKq6Yr3nXgd389tbRt6GyB9ncPhtR6wJ+zLLy+K4z25sk7AAAYsGPgD7CqcolLiuqytUum/vwBmV K2VfQ9SoHD4tX2FYwswwOHL3xkcCHgbBUge5/Q3n+idj5B+uwdQLpbDgx6hENjyiRsMZZAneBkGB 5lP7DWVci1tfW+Np9kBuSHLar7s6tvNmY7mMBu2ynH4AvoPPt/A9ZIT1dj3gUUPDOW/JYXlPsKr0 fi/c0ohuLAHhzA5gwQh2MpD+KB1l55QzDPCb5sHtsG/9DGGeOEzLsu6afUlPfjll2ZUl1/ixHz28 dNm21mmWF96p3hjOOG4YggLe5sbzHHdX5qyE/pvKWJYKmt1KeatgXA4SWvnocjjcXTnp7aU1wr9D Q7gsjeCBiCPr88qmCbMUKYoxw2EduAn9/AAN/AAHZHFjuNjSmVZ1gctAqUQfZC3YAmnxcpsiyoY+ HW+GnuZVfJGo9R6kq2R3ftGr/BhEl2w8AggN/PgD6ZtmRXbQYDz4thSVtjSVKInuCTILGFcXXu67 fChw5sPmBg42p++cZ++POxhAlo8B2DBBx/f7UOPyEPR2eVzOCBQJkOpCdTGkVVcF6IetCWLKQ2AM tw63+Gvvhyyx7bPhs3KFcmsgwgT6CAP/AL/hh0yaCdtp4dLCsM8zQkqtSfZvMkv2btx2MTWC8kHp UcscSMjO5miQvKUbDKihUEd9eGo2eSeDfR5orr+9L4YLCzTIcbWKa1EkhorFUz2FPPRbCV9QMMgZ 8wYsghDeG2wHuctrDNQ7S8oyPV3gwADHYD76AAdJ9wU47OQMZp6jQiHcGTwjblu+N4cpUSLSK38O JyRkMJ7JXPMUOAno1Z4i3nY0k3SZwAgn0Hf/AL8g1XT6zF1nmKvcGGbT4thjV6v2TOpct/8Aea0+ lFtfZTCfDW2UgYqs8Q+dMswYhvjyMePuwNBAYgAHgen9Iug2kMfctNGoBjKzgjbX+NV2BbDI5Jol yV7IIJ8NbmUnDHrc5Sq+fOh1AzCijOzHAmN2I/AefbBv4DoYjqYmldVtJnV9O8BzkSAxxROA1LgZ xEhBo0VqjVk3wdVhKvA/OQdfFlCObF+D+KsfnrzA1h3rq3arkzpj2KVqfNxVkDkYV7pFU6Oi1eCj TvTKPer1FVKXYMorXlhE55mcVc0o3jFLwZ03JKTBw3Ex6IEfOvaFV16hkuU5ZogjateZDm4znnMr ahr6ryp6wr/0mxQaONWl5IvJKZ7BHejYhwkznSpk+KHKZhfcl0QICyYcDJzrUo0yKiDTf2lSIijO aXOlVR3ZFjkaN2xNnya6Xvany2r0ztwWdXQKx4JICxKoBrgAAUTx0j2FfXqtrunrfUgQyJYzZkao M+A1evJzPSZTCFM+un3ZfKAiUPNhkGGaZmOBpbYe58qwonprnOyqvWoq3XuX6lr13s0w6eq11Rf8 UzUJp/twGIkI6gw6jUKRJRE2uajOOmQsVdUB4OwuubVKUmhyZ3Ei4TsT8YeFEqrtFgC4L2sM0PLm 5M/Os65esdxHI4dg6pCFcMQwFvwGuwP0DXQxACRaAF6qzXFn8n9/vrzyvhnKaX6t0v2TSPpGKViX F/wvgF82E5zgohyLn23VCzuKxcILNyXmEyCMhCMAFRXFhE7IF5YxSjgB/rWcBcj5WdJt/d2k+kj9 64WvgqRg7A0NLUcPChUUVmKcpg9T3lB5h4euGRheCslCZ+PCsMjnKeALLkOo+Hj6cnLVMv1KuZnW daoif/UylnB9LqQ632uLg4ZfDDk8EEcnrY6I39jSsyqzRzaXbYqC0eWeWBItcqGWNXQvwOqfZyoh tWkt2a8a9TV0kng4rOnYqYzPB5ieZbxgUkX9amVyZuYxLYf1lAogp6FIMahJ2ZOGw8yYvy/RkenL wGq0gt9v/wDEAtWgsy4LlrGs/Tp5q5rnAaWsApWcUy9+hyW3dasAqPB+jALnN9fO5z1tVdkI4mLG UJ4oAOFwctdCwQmXnWdGpO2OTxHKw58MuGLD/MtnE+RZo9YSAPAA4XwK+B1fgOjZmQm/8WDLeXFu uxh0Xy78tehnS8M1dsg8uvsQs5IzUdmjC656UidjZQ9eAlnUflqMQZlMoUQbTISfJGQMI9YdMF/t hmo6jes8MtQzuoFmLKbziI5QIiQUkSxXOlZlfpuQPaI/qUa7L5HrzjJZAEZuSn5xHPzBkQLCTsfQ rejOs6W7u0+pyZmqd6yYmrq6smvA/wCnWuNVWNMVC3d4gC+U8158n/qevxBQhObQFm5/pnHIosCe QJkJZhEvVCXvQ81pZNe1SBtuPGjZWXND2yRVfVn5TY6rxANObsZxEcwZc5cITAWcwUitFlut21Mo n6jXwmTTrZRX1wMTxUlkCCBBUFqo7MFSD8kwR9cNWgl2qYtBDE4sAiFWqXNnCiOK1X2Wm51nTfEU jj3Lhi33LY5o+RdC6PPz1U/8h/2//Drj08V2GubT/dToyyiAj0q4TT1AHJyl6BIJCzo1yKLu9nvQ RWPQKkR5vqA+mcTUFPMzM7D1jVWfh65/qLNYhdaQyTsQzl1ppfTrcEAlsoZd1cA3yFw6Fi56YDLG CVTJhT0gwo7a874BAVYXr9c+AcIG48/OUFCPO9MkTkHxjDnWdU5P0+q5P8x/8gf+Olp7l/2/8J16 drS7AxbLKFBc0ip+iCna+myNmrJObCjeg5WitWTgif8AMuys6cn+tdWHe4XZ5FoXqXMa9yHHPEsG CpjPBCs2NTfPi41T/wAB/SjrNX55whaLw42wWz1phY2AnVKv62jItLJOREWv/QTijlDJn5dcruTn Sg+fkF8YGYbD7nsjAXGy86zpEABkjsX6qHn8i6P+o/PVt7JP3GwP7Bqwf0fkdVcql6MO/qxRhnp9 FaAIFNaVLBXcK1IMAcoqtFyUbW1OXJ6wxs0aYS8hctCvHYmvsSEfmG6/FRoIbBKVlT0j8PTm2cpU PM1FBKJsC5nGyHM1n1/X1lzvTjZDsu+kmyWRDMOLj6yRVSOAGeZlzmlZiHQ8zNP4m0sjKlZyKXWf 8AVgMzrOtOpASKB1AVtpUyXhsHYZJYo4tQyW6ahYNDpOmJMmpsk+t8m/ON+fz89UytHLJrr7bGny OyMefWkbIR5ceD6SOAQ5kyy9QuV7ZEnLaVPIXWHD1hHpRAYjfRiQxyJIUdFFsGUc9MaJnR7o6m9Y lx3jSw+zpfqUa2f7XXrlrV7c6rVYIBxMqanpSwsTCD6XQ162VwgciK6bkcSz+keeixiKyZdwcePB jsXp9UDOs6VIB9XEa5F0fkfxeD8dPj50Oqvmtpx+nUPiw/DLZxbyLNEdJj/hxMbrq10o3ERebEsZ IYtOtbW4IrZrqB6ZUJijxSxChcsjkGZkcjPjlhRYfYrCNalPNiZSRYHpywxixlluZwg09HbGdX8q ihutYnXz87xi2ka1rAyq/IG+HMnpacmY1aZsj/mscMaT5i2fKwO/Tlmg2oQFXXFezBqfgBYh2StQ 8r151nStP36PU59/r/f3ebvzfmhf5rpuoJjnUxkxk3eHb4269tfk9b82dbbDYo/OZ9QluNExqqSq vQwzj2XV86SePRR+ql5HuTNh20y47kzwSxtrh+rMdY7EGLhWsiMYwprKEqHqWrGaSaaVtRGqiw65 sLPlxhKyW01egUXRxKZXzPFFamVRjzGZWgGk9UEZoFIr9cToNfVCjrGUDU0ivirKs7OUjsBLNzs6 zqRABYgAAO7xx8p0pv8AinPycbPyeekJOqZUOimCnSvpmy1OvILq9jf1gZGcXmvgErqAnAjwuKPy FTPUoNhLeMr1Lw1bFQ3CKaJZlnc8MwlkwvQFZUKvjNJGl2ZNanNmL3Doh1328wH2nPVy5wMV0ak7 ISqdX1cj6lXJzBwOOGOZXqIlpmBOwR80LBkpDwnbm15bJnWdaGJyXk8SykfosYsiPwTQs/NC+lx+ 50+xkgDJ9jBdzEMvghbOIIIFmvJ6M12vjmm3UPXUSmrmulJw1FjoHptiSIbx8Gean0eASTK0eDzo QCLKTGNi9fqMjbAOJuaBIuYZsaxhXP8AVHM52Ho/cKp14dqHuNe9JA9NOk9Jz/Zti2UUmxCVhW61 W1odzdUbsQfyUsfmA8onOuBe9RqC1Iq8kvAaAXliRTTEih07BXzrOssYB1IcgF3giLuR3MVyxLN5 Yrk2JJNWaqz04E/T6Hk8GQD9BtnID8BqF15oX46SOqK0PSQS7/PjK3qZS9FIaXdPN8V8IVkiNBiD n6QeupTm4Sy8yWRcJyqXiAs0yypmcz4LDe5MLG7tww62To5iFEUssEa+0Q6V9YCQ7Na5c03UDbq3 kyo+UokFgeNkaIy1zTsrIWDioVHEMkhLnm6+mDT+BkL66wPEFvLF5U7IEmxmdZ1usnT6ZiSWbPJi bZqaKrJ5NWas8Wfz1kcAzoSBZu/37fP56YFZ+gZcFHWtcjGK2tlY3ILRzSPV2F1DhGWn7I0zVhbL bXZT04tEo3krpUk0T1Wd6BJwZOKI8YcDNTikiLiSzFZYzW0riTR9vjWZgz2I5Is2lo4VkMkHlGW1 8ZZRpLAmFlLe5DKBHmF8LDieoYLkRJqH6yeXnFiaWRIESsifnWdZk92m/USgfoApQH4A/HU1juul 1GLMtyMTixFm15NEWf2eeoW4dZ1zhE+6a+F+tUHgytE6fXw9IGANnLHCSAsNqeMDyCAaaP8AUKUi I2yyecWV1jLAiPkCRuQIjiBRNzGNd1aJUIl3UlpjlHzLUuErW0y1Nftjz1JmL5GW4t5DXkCjkxZo CxSWRTkLRGSkqhORG9C/lGsuaEi5UM7FG5kofIzrOsWpJTVRRoSkazR4opKotizSilFnk0Oeugiq wkyUNUMlZAGrVLq78/PVoNEv/Dg08anKU7kv3pYxx30OTMB9OUuwa3zMrNhxcyIU9GcQKttdtjWb m4SjEvIjSDrGTxEA8gOpgfSJUl1eBC86zrOu3HLKFUCSSuPvb8p++uPJHGXclEJLMSSqkk35Jr9D /p1//9k= "/></pattern><clipPath id="clipPath4780"><path d="m-129.1 87.31c-6.392 2.701-13.6 5.431-18.34 7.562-2.896 1.3-3.063 2.74-3.906 5.031-2.572 6.989-1.906 13.94-1.906 13.94l1.5 1.75c8.875 5.053 19.5 7.097 29.5 7.938-3.974-8.52-5.978-14.18-9.062-23.34l3.375-4.875-5.688-1.469c2.052-2.783 3.455-4.847 4.531-6.531zm6.844 36.22c1.814 0.1525 3.585 0.2608 5.344 0.3438-1.754-0.0861-3.532-0.1915-5.344-0.3438zm5.344 0.3438c1.754 0.0827 3.485 0.1529 5.156 0.1875-1.673-0.0347-3.402-0.1014-5.156-0.1875zm44.84-36.47c1.062 1.666 2.459 3.711 4.469 6.438l-5.688 1.469 3.375 4.875c-3.085 9.166-5.089 14.82-9.062 23.34 9.956-0.8546 20.51-2.906 29.34-7.938l1.5-1.75s0.666-6.948-1.906-13.94c-0.8434-2.292-1.01-3.731-3.906-5.031-4.692-2.107-11.79-4.798-18.12-7.469zm-6.906 36.12c-0.7134 0.0612-1.418 0.1055-2.125 0.1562 0.7076-0.0494 1.41-0.0949 2.125-0.1562z" fill="#2d2d35" fill-rule="evenodd"/></clipPath><filter id="filter4766" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.31803701"/></filter><radialGradient id="radialGradient3804" cx="-146.3" cy="108.9" r="2.683" gradientTransform="matrix(3.193 -1.547e-7 2.55e-7 5.265 485.4 -468)" gradientUnits="userSpaceOnUse"><stop stop-color="#f5f5f5" offset="0"/><stop stop-color="#f5f5f5" stop-opacity="0" offset="1"/></radialGradient><filter id="filter4824" x="-.1104" y="-.02501" width="1.221" height="1.05" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.24685475"/></filter><radialGradient id="radialGradient3806" cx="-146.3" cy="108.9" r="2.683" gradientTransform="matrix(3.193 -1.547e-7 2.55e-7 5.265 320.7 -464.2)" gradientUnits="userSpaceOnUse"><stop stop-color="#252525" offset="0"/><stop stop-color="#252525" offset=".2935"/><stop stop-color="#252525" offset=".4537"/><stop offset="1"/></radialGradient><linearGradient id="linearGradient3808" x1="-88.89" x2="-88.89" y1="122.5" y2="22.65" gradientTransform="matrix(1.062 0 0 1.062 170.9 -95.98)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3225-3"/><clipPath id="clipPath5001"><path d="m80.24-11.75c-0.5111 16.97-1.901 33.08-4.646 47.82 13.39-0.266 29.77-1.678 42.67-9.026l1.593-1.858s0.7072-7.378-2.024-14.8c-0.8956-2.434-1.073-3.962-4.148-5.343-8.915-4.003-26.13-9.973-31.96-14.3l-1.493-2.489zm-32.55 0.2987-1.327 2.19c-5.831 4.329-23.04 10.3-31.96 14.3-3.075 1.381-3.252 2.909-4.148 5.343-2.731 7.422-2.024 14.8-2.024 14.8l1.593 1.858c12.84 7.31 29.12 8.716 42.48 8.993-2.724-14.65-4.095-30.64-4.613-47.49zm4.613 47.49c3.421 0.07087 6.701 0.1028 9.623 0.09955-2.923 0.0033-6.202-0.02868-9.623-0.09955z" fill="url(#linearGradient5005)" fill-rule="evenodd"/></clipPath><filter id="filter4993" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="1.1621363"/></filter><radialGradient id="radialGradient3812" cx="64.18" cy="116.1" r="7.946" fx="64.58" fy="111.9" gradientTransform="matrix(.5745 5.2e-8 -2.68e-7 2.945 36.13 -215)" gradientUnits="userSpaceOnUse"><stop stop-color="#c92424" offset="0"/><stop stop-color="#9d1e1e" stop-opacity=".9804" offset=".7692"/><stop stop-color="#711919" stop-opacity=".9608" offset="1"/></radialGradient><clipPath id="clipPath5259"><path d="m65.65 122.6c2.354 8.647 3.922 17.39 5.882 30.06l-15.32-1e-5c1.692-12.51 3.087-19.87 6.03-30.06l3.41-5e-3z" fill="url(#radialGradient5263)" fill-rule="evenodd"/></clipPath><filter id="filter5255" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="0.46122808"/></filter><linearGradient id="linearGradient3814" x1="-88.89" x2="-88.89" y1="122.5" y2="84.12" gradientTransform="translate(164.7 -3.415)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4784"/><filter id="filter4898" x="-.02281" y="-.192" width="1.046" height="1.384" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="1.0003101"/></filter><linearGradient id="linearGradient3816" x1="-67.47" x2="-67.47" y1="110.2" y2="121.5" gradientUnits="userSpaceOnUse"><stop stop-color="#54555f" stop-opacity=".9608" offset="0"/><stop stop-color="#3b3944" offset="1"/></linearGradient></defs><path transform="matrix(1.505 0 0 1.505 6.805 -5.109)" d="m8.665 6 1e-5 80 48.65 0.1862c0.3881 0 0.7549-0.1571 1.029-0.4276l19.4-19.88c0.2744-0.2716 0.4316-0.6355 0.4316-1.02l-0.1768-58.86h-69.34z" filter="url(#filter5749)" opacity=".45"/><path d="m23.85 8.284 1.5e-5 111.7h68c0.537 0 1.044-0.2194 1.424-0.5972l25.98-25.1c0.3796-0.3792 0.5972-0.8875 0.5972-1.424l0.2114-84.6-96.21-0.00168z" fill="#fff"/><path d="m28.02 12 1.3e-5 104h62.91c0.4896 0 0.9522-0.2 1.298-0.5444l23.08-22.6c0.346-0.3458 0.5444-0.8091 0.5444-1.298v-79.55h-87.83z" fill="url(#radialGradient4743)"/><path transform="matrix(1.317 0 0 1.326 222.5 14.63)" d="m-99.99 80.6s7.392-6.697 11.18-10.48c3.785-3.782 11.41-12.09 11.41-12.09s-11.14-0.6269-23.14-0.6269c0 12 0.5521 23.2 0.5521 23.2z" filter="url(#filter5704)" opacity=".3"/><path d="m92.54 120s10.33-8.044 14.8-12.51c4.467-4.463 12.29-13.55 12.29-13.55s-10.99 0.8407-25.15 0.8407c0 14.16-1.929 25.22-1.929 25.22z" fill="url(#linearGradient4739)"/><g fill="#fff"><rect x="178.9" y="109.7" width="1.47" height="0" opacity=".5779"/><g fill-opacity=".7569"><path d="m-54.77 2.088v-4.108 4.108z"/><path d="m98.35 0.3839v-3.242 3.242z"/><path d="m-1843-1245v-1.888 1.888z"/></g></g><g transform="matrix(1.11 0 0 1.219 -37.16 -57.49)"><path transform="matrix(.7193 0 0 .7193 26.7 40.36)" d="m11.42 108.2c1.2e-4 1.341 0.0625 2.188 0.0625 2.188l1.5 1.75c12.09 6.884 27.42 8.208 40 8.469 3.222 0.0667 6.31 0.0969 9.062 0.0937 0.4879-5.5e-4 1.031 0 1.5 0 0.3359 1.1e-4 0.6872 0 1 0 0.5038-1.7e-4 1-5.3e-4 1.5 0 2.698 3e-3 5.724 6e-5 8.875-0.0625 12.61-0.2504 28.03-1.58 40.19-8.5l1.5-1.75s0.0624-0.8462 0.0625-2.188c-0.0222 0.7606-0.0625 1.188-0.0625 1.188l-1.5 1.75c-12.16 6.92-27.57 8.25-40.19 8.5-3.151 0.0626-6.177 0.0656-8.875 0.0625-0.4997-5.3e-4 -0.9962-1.7e-4 -1.5 0-0.3128 0-0.6641 1.1e-4 -1 0-0.4692 0-1.012-5.5e-4 -1.5 0-2.752 3e-3 -5.841-0.027-9.062-0.0937-12.58-0.2606-27.91-1.585-40-8.469l-1.5-1.75s-0.04025-0.4269-0.0625-1.188z" fill-opacity=".8555" fill-rule="evenodd" filter="url(#filter10509)"/><g fill-rule="evenodd"><path d="m83.73 94.49c-0.3462 11.5-1.288 22.4-3.147 32.39 9.073-0.1801 20.16-1.136 28.91-6.114l1.079-1.259s0.479-4.997-1.371-10.02c-0.6066-1.648-0.7267-2.684-2.81-3.619-6.038-2.712-17.7-6.755-21.65-9.688zm-22.05 0.2023-0.8991 1.483c-3.949 2.932-15.61 6.976-21.65 9.688-2.083 0.9353-2.203 1.97-2.81 3.619-1.85 5.027-1.371 10.02-1.371 10.02l1.079 1.259c8.698 4.951 19.72 5.904 28.77 6.091-1.845-9.92-2.773-20.75-3.124-32.16zm3.124 32.16c2.317 0.048 4.539 0.0697 6.518 0.0674-1.98 2e-3 -4.201-0.0194-6.518-0.0674z" fill="#2d2d35"/><path d="m84.44 76.95c1.228-0.1041 2.426-0.9716 3.805-7.434 0.1334-1.345-1.662-1.473-1.76-0.2837-1.335 2.573-1.919 5.145-2.044 7.718z" fill="#ddc2a4"/><path d="m60.22 77.86c-1.228-0.104-2.426-0.9716-3.805-7.434-0.1334-1.345 1.662-1.473 1.76-0.2837 1.335 2.573 1.919 5.145 2.044 7.718z" fill="#ddc2a4"/></g><path d="m61.61 78.28c1.031 4.339 3.912 14.1 0.3407 16.42 0.4405 4.217 4.823 5.81 10.22 6.74h1.022c5.398-0.93 9.78-2.523 10.22-6.74-3.571-2.322-0.6904-12.08 0.3407-16.42l-11.07 4.462z" fill="#d3b79a" fill-opacity=".9608" fill-rule="evenodd"/><g fill-rule="evenodd"><path d="m61.61 78.28c1.031 4.339 3.912 14.1 0.3407 16.42 0.4405 4.217 4.823 5.81 10.22 6.74h1.022c5.398-0.93 9.78-2.523 10.22-6.74-3.571-2.322-0.6904-12.08 0.3407-16.42l-11.07 4.462z" fill="url(#linearGradient3774)"/><path d="m61.64 78.34c1.028 4.327 3.901 14.06 0.3397 16.37 0.4393 4.206 4.81 5.794 10.19 6.722h1.019c5.382-0.9274 9.753-2.516 10.19-6.722-3.561-2.315-0.6885-12.04 0.3397-16.37l-11.04 4.45z" fill="url(#linearGradient3776)"/><path transform="matrix(.6776 0 0 .5991 -147.6 -166.7)" d="m324.2 363.8c-7.777 0.205-13.88 5.861-17.01 12.81-3.187 7.081-2.723 15.54-0.8125 25.31 1.91 9.776 5.288 22.13 8.475 25.81 3.02 3.486 6.889 2.856 9.344 2.781 0.1258 0 0.3023-4e-3 0.4375 0 2.455 0.0751 6.323 0.7052 9.344-2.781 3.187-3.678 7.565-16.03 9.475-25.81 1.91-9.776 2.374-18.23-0.8125-25.31-3.129-6.952-10.23-12.61-18.01-12.81z" clip-path="url(#clipPath3705-5)" fill="#382509" filter="url(#filter3694-7)"/><path d="m72.15 52.07c0 2.669-10.78 1.247-12.79 5.71-2.047 4.546-1.106 9.883-0.522 16.25 0.8637 9.427 5.899 12.81 7.946 15.17 1.94 2.238 3.787 1.834 5.364 1.786 0.0808 0 0.1942-3e-3 0.2811 0 1.577 0.0482 3.424 0.4528 5.364-1.786 2.047-2.362 7.446-6.104 7.946-15.17 0.3524-6.386 1.525-11.7-0.522-16.25-2.01-4.463-7.793-5.579-12.79-5.71z" fill="url(#radialGradient3778)"/><path transform="matrix(-.6349 0 0 .642 305.7 -184.9)" d="m347.3 395.4c-0.0925-0.7386-1.155-0.0553-1.237 0.8839-0.0829 0.9391 0.7546 3.214 0.906 2.873 1.212-2.736 0.4627-2.708 0.3314-3.756z" fill="url(#radialGradient3780)" filter="url(#filter3833-7)"/></g><path transform="matrix(.6311 0 0 .6386 32.2 46.11)" d="m42.69 44.36c-2.766-26.27 10.02-16.08 20.66-19.6 10.09-3.343 23.02-4.664 20.07 21.35 7.744-16.11 8.318-29.96-5.261-34.49 2.098-12.55-17.88-13.39-29.51-4.736-10.83 8.06-12.02 17.93-5.96 37.48z" clip-path="url(#clipPath3572)" fill="#b35c27" fill-opacity=".9608" fill-rule="evenodd" filter="url(#filter3568)" stroke="#000" stroke-width=".01228"/><g fill-rule="evenodd"><path transform="matrix(.6349 0 0 .642 102.5 24.35)" d="m-68.33 70.94c-0.09247-0.7386-1.155-0.05525-1.237 0.8839s0.7546 3.214 0.906 2.873c1.212-2.736 0.4627-2.708 0.3314-3.756z" fill="url(#radialGradient3782)" filter="url(#filter3833-7)"/><path transform="matrix(.6386 0 0 .6386 -2.563 46.11)" d="m117.2 7.282c-8.146 0.2146-17.59 2.953-21 10.53-3.39 7.528-1.815 16.08-0.9062 26 1.386 15.12 9.758 20.96 12.72 24.38 1.654 1.908 3.406 2.814 5.031 3.125s3.065 0.09777 4.219 0.0625c0.1505 0 0.2903-0.0026 0.375 0 1.154 0.03527 2.594 0.2487 4.219-0.0625s3.377-1.217 5.031-3.125c2.956-3.409 11.91-9.796 12.72-24.41 0.5463-9.898 2.496-18.41-0.9062-25.97-3.412-7.577-12.85-10.32-21-10.53h-0.5001zm0.0313 2.188h0.4376c7.5 0.1976 16.15 2.849 19.03 9.249 3.009 6.682 1.276 14.84 0.7188 24.94-0.7602 13.77-8.732 19.11-12.19 23.09-1.385 1.597-2.583 2.146-3.781 2.375s-2.435 0.1027-3.75 0.0625c-0.1872-0.0057-0.3661 0-0.4688 0h-0.0313c-1.315 0.04021-2.552 0.1669-3.75-0.0625s-2.397-0.7778-3.781-2.375c-3.45-3.98-10.87-8.726-12.19-23.12-0.9184-10.02-2.303-18.2 0.7188-24.91 2.878-6.392 11.54-9.043 19.03-9.249z" clip-path="url(#clipPath4030)" fill="url(#linearGradient3784)" filter="url(#filter3741)"/><path d="m58.8 74.41c-0.9214-17.9 7.819-10.29 13.84-12.8 6.616-2.751 14.42-3.089 12.51 13.94 4.601-10.31 3.822-17.87-3.404-21.53-2.913-4.137-8.975-4.58-14.14-3.096-6.667 1.806-9.937 6.547-10.53 13.16-0.09567 2.495 0.2971 5.668 1.722 10.32z" fill="url(#linearGradient3786)"/><path transform="matrix(.6349 0 0 .642 105 24.48)" d="m-29.75 50.61 2.25 4.5c1.529 6.141 0.9224 5.357 0.7348 8.333-1.777-4.417-0.4564-7.167-6.235-10.33l-6.25-4z" fill="url(#linearGradient3788)" filter="url(#filter3569-8)"/><path transform="matrix(-.6229 .1242 .1226 .6299 33.37 29.24)" d="m-34.21 47.8 6.71 7.309c1.529 6.141 0.9224 5.357 0.7348 8.333-1.777-4.417-2.666-10.58-8.445-13.75l-4.04-0.5881z" fill="url(#linearGradient3788)" filter="url(#filter3569-8)"/><path transform="matrix(.6311 0 0 .6386 32.2 46.11)" d="m78.5 9.656c-0.04837 0.2393-0.1057 0.4991-0.1875 0.75 0.1048 0.03497 0.2094 0.05789 0.3125 0.09375-0.0068-0.2976-0.06387-0.5669-0.125-0.8438zm-19.15 11.24c-8.9-0.6539-17.34-3.278-17.17 17.88 0.4358-20 8.687-17.31 17.45-15.88 1.141 0.1866 7.907-1.899 8.736-2.05 10.32-1.878 15.63-1.826 15.85 16.37 0.4706-20.08-5.721-19.61-16.49-18.21-0.8121 0.1053-6.257 2.047-8.38 1.891zm-19.33 3.914c-0.1291 5.037-0.3023 11.22 2.262 19.5-0.04112-0.7896-0.07528-1.538-0.09375-2.281-2.179-7.073-1.967-12.62-2.168-17.22zm49.26 0.875c-0.2031 5.103-2.137 11.13-5.312 17.84-0.0704 0.8348-0.1492 1.673-0.25 2.562 3.771-7.844 5.876-14.77 5.562-20.41z" fill="url(#linearGradient3792)" filter="url(#filter4064)" opacity=".3218"/></g><g fill="#2a180f" fill-rule="evenodd"><path transform="matrix(.6311 0 0 .6386 32.2 46.74)" d="m62.41 9.688c-4.755 0.2529-9.59 1.899-10.72 2.781-0.2184 0.1706-0.3567 0.3031-0.5625 0.4688 4.788-1.44 9.498-1.094 12.97-1.094 2.678 0 5.612 0.1395 8.531 0.625-0.0077-0.4408 0.03418-0.8811 0.125-1.312-0.1222-0.09509-0.01814-0.05798-0.5312-0.2812-1.814-0.7893-5.851-1.398-9.812-1.188z" fill-opacity=".2995" filter="url(#filter4219)"/><path transform="matrix(.6311 0 0 .6386 32.2 46.74)" d="m62.31 8.062c-4.97 0.2643-9.984 1.843-11.62 3.125-3.756 2.936-5.884 5.328-7 8.188 0.7823-0.8733 1.609-1.65 2.531-2.312 5.959-4.282 12.91-3.594 17.88-3.594 3.492 0 7.246 0.1926 10.81 1.188-0.6643-1.065-0.8244-2.369-0.4375-3.562 0.2192-0.672 0.1421-0.4664 0.0625-0.5938s-0.5878-0.6465-1.688-1.125c-2.199-0.957-6.39-1.533-10.53-1.312z" fill-opacity=".2299" filter="url(#filter4219)"/><path transform="matrix(.5682 0 0 .5749 37.61 47.16)" d="m62.28 7.344c-5.066 0.2694-10.16 1.82-12.03 3.281-5.084 3.973-7.328 7.107-8.062 11.69-0.03432 0.2139-0.0047 0.4961-0.03125 0.7188 1.242-2.205 2.691-4.106 4.5-5.406 5.689-4.088 12.44-3.438 17.44-3.438 6.161 0 13.01 0.294 18 5.188 1.655 1.623 2.853 3.817 3.812 6.281-0.01081-0.1535 0.01557-0.351 0-0.5-0.483-4.62-2.489-7.389-8.531-9.406-1.83-0.6218-2.819-2.6-2.219-4.438 0.272-0.834 0.1571-0.8862-0.03125-1.188-0.1884-0.3013-0.7827-0.8902-1.969-1.406-2.372-1.032-6.654-1.6-10.88-1.375z" fill-opacity=".1818" filter="url(#filter4219)"/><path transform="matrix(.6311 0 0 .6386 32.2 46.11)" d="m78.75 12.63c0.4269 3.251-0.7473 5.221-2.846 6.451z" fill-opacity=".3102" filter="url(#filter4485)"/></g><g fill-rule="evenodd"><path d="m63.12 92.27-1.439 2.428c-5.904 11.25-2.35 22.15 3.124 32.16 2.317 0.048 4.539 0.0697 6.518 0.0674 0.3509-3.9e-4 0.7414 0 1.079 0 0.2416 8e-5 0.4943 0 0.7193 0 0.3624-1.3e-4 0.7195-3.8e-4 1.079 0 1.94 2e-3 4.117 5e-5 6.383-0.045 4.018-9.614 10.29-19.6 3.147-32.41l-1.326-2.203c-1.849 3.228-5.153 6.787-9.643 8.654-3.812-1.691-8.339-6.108-9.643-8.654z" fill="url(#linearGradient3794)"/><path transform="matrix(.6773 0 0 .6773 29.38 43.38)" d="m65.65 93.19c2.354 8.647 3.922 17.39 5.882 30.06-5.174 0.0465-9.667 0.0736-15.32-1e-5 1.692-12.51 3.087-19.87 6.03-30.06l3.41-0.0053z" fill="#1f0b10" fill-opacity=".5882" filter="url(#filter5331)"/><path transform="matrix(.6773 0 0 .6773 29.38 43.38)" d="m68.81 88.42-3.148 4.791-3.442-0.0081-2.849-4.516 3.497-1.91 2.597 0.01326 3.345 1.629z" fill-opacity=".9608" filter="url(#filter5171)"/><path d="m75.99 103.3-2.132 3.245-2.332-5e-3 -1.93-3.059 2.368-2.648 1.759 9e-3 2.266 2.458z" fill="url(#radialGradient3796)"/><path transform="matrix(.7193 0 0 .7193 145.2 37.63)" d="m-114.1 74.97-2 3.375c-0.8512 1.622-1.858 5.655-2.438 7.266l6.719 12.96 11.03-9.664-1.469-1.656c-4.915-2.732-10.21-9.083-11.84-12.28zm26.81 0c-2.305 4.023-6.247 9.45-11.53 12.19l-1.531 1.75 10.97 9.664 7.164-13.32c-0.6457-1.726-2.222-5.419-3.227-7.222z" clip-path="url(#clipPath4734)" fill-opacity=".9608" filter="url(#filter5019)"/><path transform="matrix(.6568 0 0 .6568 30.77 44.68)" d="m49.26 72.05-2.19 3.696c-0.9323 1.777-1.692 3.54-2.327 5.305l7.016 15.85 10.99-11.81-0.5134-0.7187c-5.383-2.992-11.18-8.819-12.97-12.32zm29.36 0c-2.524 4.406-6.841 9.221-12.63 12.22l-0.5818 0.8214 10.92 11.81 7.016-15.71c-0.7071-1.89-1.603-3.809-2.704-5.784z" clip-path="url(#clipPath3538)" fill="#b67e58" fill-opacity=".9608" filter="url(#filter3531)"/></g><g fill-rule="evenodd"><path d="m63.12 92.27-1.439 2.428c-0.6123 1.167-1.111 2.325-1.528 3.484l4.608 10.41 7.215-7.755-0.3372-0.472c-3.535-1.965-7.341-5.792-8.519-8.092zm19.29 0c-1.658 2.893-4.493 6.056-8.294 8.024l-0.3821 0.5394 7.17 7.755 4.608-10.32c-0.4644-1.242-1.053-2.502-1.776-3.799z" fill="url(#linearGradient3798)"/><path d="m60.31 97.78c-0.0483 0.1283-0.1111 0.2538-0.1573 0.3821l4.608 10.41 7.215-7.755-0.2922-0.4046-6.923 7.44zm25.04 0.0899-4.45 9.98-6.878-7.44-0.2922 0.4046 7.17 7.755 4.608-10.32c-0.0471-0.1259-0.1077-0.2558-0.1573-0.3821z" fill="url(#linearGradient3800)"/><path d="m83.73 94.49c-0.3462 11.5-1.288 22.4-3.147 32.39 9.073-0.1801 20.16-1.136 28.91-6.114l1.079-1.259s0.479-4.997-1.371-10.02c-0.6066-1.648-0.7267-2.684-2.81-3.619-6.038-2.712-17.7-6.755-21.65-9.688zm-22.05 0.2023-0.8991 1.483c-3.949 2.932-15.61 6.976-21.65 9.688-2.083 0.9353-2.203 1.97-2.81 3.619-1.85 5.027-1.371 10.02-1.371 10.02l1.079 1.259c8.698 4.951 19.72 5.904 28.77 6.091-1.845-9.92-2.773-20.75-3.124-32.16zm3.124 32.16c2.317 0.048 4.539 0.0697 6.518 0.0674-1.98 2e-3 -4.201-0.0194-6.518-0.0674z" fill="url(#linearGradient3802)"/><path d="m83.73 94.49c-0.3462 11.5-1.288 22.4-3.147 32.39 9.073-0.1801 20.16-1.136 28.91-6.114l1.079-1.259s0.479-4.997-1.371-10.02c-0.6066-1.648-0.7267-2.684-2.81-3.619-6.038-2.712-17.7-6.755-21.65-9.688zm-22.05 0.2023-0.8991 1.483c-3.949 2.932-15.61 6.976-21.65 9.688-2.083 0.9353-2.203 1.97-2.81 3.619-1.85 5.027-1.371 10.02-1.371 10.02l1.079 1.259c8.698 4.951 19.72 5.904 28.77 6.091-1.845-9.92-2.773-20.75-3.124-32.16zm3.124 32.16c2.317 0.048 4.539 0.0697 6.518 0.0674-1.98 2e-3 -4.201-0.0194-6.518-0.0674z" fill="url(#sand_bitmap)" opacity=".06763"/></g><path transform="matrix(.7193 0 0 .7193 145.2 37.63)" d="m-100.6 67.66v0.03125l-24.53 12.97c-2.144 3.572-3.109 5.918-8.469 13.19l5.688 1.469-3.375 4.875c3.266 9.704 5.283 15.44 9.75 24.84l20.94 5.625h0.0313l20.94-5.625c4.467-9.403 6.484-15.14 9.75-24.84l-3.375-4.875 5.688-1.469c-5.36-7.27-6.293-9.616-8.438-13.19l-24.56-12.97-0.0313-0.03125z" clip-path="url(#clipPath4780)" fill="none" filter="url(#filter4766)" opacity=".2921" stroke="#000" stroke-width="1px"/><g fill-rule="evenodd"><path transform="matrix(.7193 0 0 .7193 26.7 40.36)" d="m15.76 93.22c4.073 8.364 4.921 15.87 5.365 23.69-0.1124-8.245-2.353-22.89-5.365-23.69z" fill="url(#radialGradient3804)" filter="url(#filter4824)" opacity=".1782"/><path transform="matrix(-.7193 0 0 .7193 .4189 37.63)" d="m-148.9 97.01c4.073 8.364 4.921 15.87 5.365 23.69-0.1124-8.245-2.353-22.89-5.365-23.69z" fill="url(#radialGradient3806)" filter="url(#filter4824)" opacity=".6683"/><path transform="matrix(.6773 0 0 .6773 29.38 102.4)" d="m80.24-12.01c-0.5111 16.97-1.912 33.07-4.656 47.81 0.06083-0.0012 0.1266 0.0013 0.1875 0 2.624-14.47 3.969-30.22 4.469-46.81l1.5 2.469c5.831 4.329 23.02 10.31 31.94 14.31 3.075 1.381 3.261 2.91 4.156 5.344 1.707 4.639 2.061 9.249 2.094 12.06 0.0438-2.6-0.1541-7.792-2.094-13.06-0.8956-2.434-1.081-3.963-4.156-5.344-8.915-4.003-26.11-9.984-31.94-14.31zm-32.56 0.2812-1.312 2.187c-5.831 4.329-23.05 10.31-31.97 14.31-3.075 1.381-3.261 2.91-4.156 5.344-1.852 5.033-2.111 9.982-2.094 12.69 0.05851-2.837 0.4548-7.234 2.094-11.69 0.8956-2.434 1.081-3.963 4.156-5.344 8.915-4.003 26.14-9.984 31.97-14.31l1.312-2.187c0.5063 16.47 1.834 32.13 4.438 46.5 0.06113 0.0013 0.1265-0.0013 0.1875 0-2.724-14.65-4.107-30.65-4.625-47.5z" clip-path="url(#clipPath5001)" fill="url(#linearGradient3808)" filter="url(#filter4993)" opacity=".6832"/><path d="m75.99 103.3-2.132 3.245-2.332-5e-3 -1.93-3.059 2.368-2.648 1.759 9e-3 2.266 2.458z" fill="url(#radialGradient3796)" opacity=".4257"/><path d="m73.85 106.5c1.594 5.857 2.657 11.78 3.984 20.36-3.505 0.0315-6.548 0.0498-10.38-1e-5 1.146-8.472 2.091-13.46 4.084-20.36l2.31-3e-3z" fill="url(#radialGradient3812)"/></g><path transform="matrix(.6773 0 0 .6773 29.38 23.55)" d="m65.66 121.7-3.406 0.0313h-0.375l-0.125 0.3438c-2.949 10.21-4.338 18.01-6.031 30.52l-0.03125 0.2188 0.125 0.1562c2.44 3.115 4.599 5.05 6.531 6.094s3.675 1.204 5.094 0.7188c2.838-0.9696 4.284-4.256 4.594-7.062v-0.125c-1.961-12.67-3.545-21.85-5.906-30.53l-0.09375-0.375zm-0.4062 1c2.29 8.487 3.855 17.52 5.781 29.96-0.2879 2.536-1.652 5.386-3.906 6.156-1.131 0.3866-2.528 0.3221-4.281-0.625-1.711-0.924-3.78-2.712-6.094-5.625 1.654-12.2 3.034-19.94 5.875-29.84l2.625-0.0313z" clip-path="url(#clipPath5259)" fill="#4b1c1c" fill-opacity=".9608" fill-rule="evenodd" filter="url(#filter5255)"/><path transform="matrix(.7193 0 0 .7193 26.7 40.36)" d="m11.42 108.2c1.2e-4 1.341 0.0625 2.188 0.0625 2.188l1.5 1.75c12.09 6.884 27.42 8.208 40 8.469 3.222 0.0667 6.31 0.0969 9.062 0.0937 0.4879-5.5e-4 1.031 0 1.5 0 0.3359 1.1e-4 0.6872 0 1 0 0.5038-1.7e-4 1-5.3e-4 1.5 0 2.698 3e-3 5.724 6e-5 8.875-0.0625 12.61-0.2504 28.03-1.58 40.19-8.5l1.5-1.75s0.0624-0.8462 0.0625-2.188c-0.0222 0.7606-0.0625 1.188-0.0625 1.188l-1.5 1.75c-12.16 6.92-27.57 8.25-40.19 8.5-3.151 0.0626-6.177 0.0656-8.875 0.0625-0.4997-5.3e-4 -0.9962-1.7e-4 -1.5 0-0.3128 0-0.6641 1.1e-4 -1 0-0.4692 0-1.012-5.5e-4 -1.5 0-2.752 3e-3 -5.841-0.027-9.062-0.0937-12.58-0.2606-27.91-1.585-40-8.469l-1.5-1.75s-0.04025-0.4269-0.0625-1.188z" fill="url(#linearGradient3814)" fill-rule="evenodd" filter="url(#filter4898)"/><path transform="matrix(.7193 0 0 .7193 145.2 37.63)" d="m-100.6 67.66v0.03125l-24.53 12.97c-2.144 3.572-3.109 5.918-8.469 13.19l5.688 1.469-3.375 4.875c3.266 9.704 5.283 15.44 9.75 24.84l20.94 5.625h0.0313l20.94-5.625c4.467-9.403 6.484-15.14 9.75-24.84l-3.375-4.875 5.688-1.469c-5.36-7.27-6.293-9.616-8.438-13.19l-24.56-12.97-0.0313-0.03125z" clip-path="url(#clipPath4780)" fill="none" stroke="url(#linearGradient3816)" stroke-opacity=".9608" stroke-width=".1781"/><path transform="matrix(.6773 0 0 .6773 29.38 102.4)" d="m47.68-11.73-1.312 2.187c-5.831 4.329-23.05 10.31-31.97 14.31-3.075 1.381-3.261 2.91-4.156 5.344-1.852 5.033-2.111 9.982-2.094 12.69 0.05851-2.837 0.4548-7.234 2.094-11.69 0.8956-2.434 1.081-3.963 4.156-5.344 8.915-4.003 26.14-9.984 31.97-14.31l1.312-2.187c0.5063 16.47 1.834 32.13 4.438 46.5 0.06113 0.0013 0.1265-0.0013 0.1875 0-2.724-14.65-4.107-30.65-4.625-47.5z" clip-path="url(#clipPath5001)" fill="#579a06" fill-rule="evenodd" filter="url(#filter4993)" opacity=".6832"/><path transform="matrix(.7193 0 0 .7193 26.7 40.36)" d="m11.42 108.2c1.2e-4 1.341 0.0625 2.188 0.0625 2.188l1.5 1.75c12.09 6.884 27.42 8.208 40 8.469 3.222 0.0667 6.31 0.0969 9.062 0.0937 0.4879-5.5e-4 1.031 0 1.5 0 0.3359 1.1e-4 0.6872 0 1 0 0.5038-1.7e-4 1-5.3e-4 1.5 0 2.698 3e-3 5.724 6e-5 8.875-0.0625 12.61-0.2504 28.03-1.58 40.19-8.5l1.5-1.75s0.0624-0.8462 0.0625-2.188c-0.0222 0.7606-0.0625 1.188-0.0625 1.188l-1.5 1.75c-12.16 6.92-27.57 8.25-40.19 8.5-3.151 0.0626-6.177 0.0656-8.875 0.0625-0.4997-5.3e-4 -0.9962-1.7e-4 -1.5 0-0.3128 0-0.6641 1.1e-4 -1 0-0.4692 0-1.012-5.5e-4 -1.5 0-2.752 3e-3 -5.841-0.027-9.062-0.0937-12.58-0.2606-27.91-1.585-40-8.469l-1.5-1.75s-0.04025-0.4269-0.0625-1.188z" fill-rule="evenodd" filter="url(#filter10509)"/></g></svg>
diff --git a/share/icons/svg/utilities-terminal.svg b/share/icons/svg/utilities-terminal.svg
deleted file mode 100644
index df601b7b4..000000000
--- a/share/icons/svg/utilities-terminal.svg
+++ /dev/null
@@ -1,1517 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.0"
- id="svg2756"
- height="128"
- width="128">
- <defs
- id="defs2758">
- <radialGradient
- gradientUnits="userSpaceOnUse"
- r="136.0037"
- cy="-31"
- cx="52"
- id="radialGradient12454">
- <stop
- id="stop12458"
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop12460"
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1" />
- </radialGradient>
- <radialGradient
- id="radialGradient5295"
- cx="52"
- cy="-31"
- r="136.0037"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#c6c6c6;stop-opacity:1;"
- id="stop5297" />
- <stop
- offset="0.52140325"
- style="stop-color:#EEEEEE"
- id="stop5299" />
- <stop
- offset="1"
- style="stop-color:#c6c6c6;stop-opacity:1;"
- id="stop5301" />
- </radialGradient>
- <linearGradient
- gradientTransform="translate(92,-19)"
- y2="105.6677"
- x2="13.5162"
- y1="104.1768"
- x1="12.3638"
- gradientUnits="userSpaceOnUse"
- id="XMLID_100_">
- <stop
- id="stop71"
- style="stop-color:#131313;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop73"
- style="stop-color:#4e4e4e;stop-opacity:1;"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(1.087916,0,0,1,3.3638403,16)"
- y2="80"
- x2="55.9526"
- y1="81"
- x1="55.9526"
- gradientUnits="userSpaceOnUse"
- id="XMLID_99_">
- <stop
- id="stop64"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop66"
- style="stop-color:#EEEEEE"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="40"
- x2="44"
- y1="44"
- x1="44"
- gradientUnits="userSpaceOnUse"
- id="XMLID_96_">
- <stop
- id="stop53"
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <stop
- id="stop55"
- style="stop-color:#EEEEEC"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="20"
- x2="24"
- y1="40"
- x1="24"
- gradientUnits="userSpaceOnUse"
- id="XMLID_95_">
- <stop
- id="stop46"
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <stop
- id="stop48"
- style="stop-color:#EEEEEC"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="53.655067"
- x2="106.55763"
- y1="24.324116"
- x1="9"
- gradientUnits="userSpaceOnUse"
- id="XMLID_94_">
- <stop
- id="stop35"
- style="stop-color:#555753"
- offset="0" />
- <stop
- id="stop37"
- style="stop-color:#2E2E2E"
- offset="0.6272" />
- <stop
- id="stop39"
- style="stop-color:#2E2E2E"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(1.0816327,0,0,1.0135135,3.4285714,7.9054054)"
- y2="7.0005"
- x2="56.0005"
- y1="81"
- x1="56.0005"
- gradientUnits="userSpaceOnUse"
- id="XMLID_93_">
- <stop
- id="stop22"
- style="stop-color:#BBBBBB"
- offset="0" />
- <stop
- id="stop24"
- style="stop-color:#9F9F9F"
- offset="0.5885" />
- <stop
- id="stop26"
- style="stop-color:#888888"
- offset="1" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(4,16)"
- y2="20"
- x2="24"
- y1="40"
- x1="24"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3134"
- xlink:href="#XMLID_95_" />
- <linearGradient
- gradientTransform="translate(4,16)"
- y2="40"
- x2="44"
- y1="44"
- x1="44"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3136"
- xlink:href="#XMLID_96_" />
- <linearGradient
- gradientTransform="translate(4,16)"
- y2="20"
- x2="24"
- y1="40"
- x1="24"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3140"
- xlink:href="#XMLID_95_" />
- <filter
- id="filter3723"
- height="1.48"
- y="-0.24"
- width="1.12"
- x="-0.06">
- <feGaussianBlur
- id="feGaussianBlur3725"
- stdDeviation="0.4" />
- </filter>
- <filter
- id="filter4489"
- height="1.1728"
- y="-0.0864"
- width="1.216"
- x="-0.108">
- <feGaussianBlur
- id="feGaussianBlur4491"
- stdDeviation="0.72" />
- </filter>
- <linearGradient
- gradientTransform="matrix(1,0,0,1.0792079,0,-9.1881184)"
- y2="64"
- x2="120"
- y1="40.665478"
- x1="8"
- gradientUnits="userSpaceOnUse"
- id="linearGradient9764"
- xlink:href="#radialGradient5295" />
- <filter
- id="filter10229">
- <feGaussianBlur
- id="feGaussianBlur10231"
- stdDeviation="2.0795501" />
- </filter>
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(-4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10356"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="15.5172"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(-4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10358"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(-4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10360"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="13.5172"
- y1="104.1777"
- x1="12.3647"
- gradientTransform="translate(-4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10362"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="11.5172"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10364"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10366"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10368"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="9.5167"
- y1="104.1777"
- x1="8.3643"
- gradientTransform="translate(4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10370"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10372"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="13.5167"
- y1="104.1777"
- x1="12.3643"
- gradientTransform="translate(4,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10374"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="11.5172"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(12,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10376"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(12,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10378"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(12,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10380"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="9.5167"
- y1="104.1777"
- x1="8.3643"
- gradientTransform="translate(12,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10382"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(12,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10384"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="13.5167"
- y1="104.1777"
- x1="12.3643"
- gradientTransform="translate(12,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10386"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="11.5167"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(20,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10388"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(20,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10390"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(20,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10392"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6679"
- x2="9.5161"
- y1="104.1777"
- x1="8.3643"
- gradientTransform="translate(20,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10394"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(20,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10396"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="13.5167"
- y1="104.1777"
- x1="12.3643"
- gradientTransform="translate(20,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10398"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="11.5167"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(28,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10400"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(28,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10402"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(28,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10404"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="9.5162"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(28,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10406"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(28,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10408"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="13.5162"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(28,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10410"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="11.5167"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(36,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10412"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6684"
- x2="12.5167"
- y1="107.1768"
- x1="11.3638"
- gradientTransform="translate(36,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10414"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(36,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10416"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="9.5162"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(36,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10418"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6684"
- x2="16.5167"
- y1="107.1768"
- x1="15.3638"
- gradientTransform="translate(36,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10420"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="13.5162"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(36,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10422"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="11.5167"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(44,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10424"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6677"
- x2="12.5162"
- y1="107.1768"
- x1="11.3638"
- gradientTransform="translate(44,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10426"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(44,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10428"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="9.5162"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(44,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10430"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6684"
- x2="16.5167"
- y1="107.1768"
- x1="15.3638"
- gradientTransform="translate(44,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10432"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="13.5162"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(44,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10434"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6684"
- x2="11.5163"
- y1="110.1768"
- x1="10.3633"
- gradientTransform="translate(52,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10436"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6677"
- x2="12.5162"
- y1="107.1768"
- x1="11.3638"
- gradientTransform="translate(52,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10438"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(52,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10440"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="9.5162"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(52,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10442"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6684"
- x2="16.5167"
- y1="107.1768"
- x1="15.3638"
- gradientTransform="translate(52,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10444"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="13.5162"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(52,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10446"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6696"
- x2="11.5172"
- y1="110.1787"
- x1="10.3647"
- gradientTransform="translate(60,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10448"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6694"
- x2="12.5172"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(60,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10450"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="15.5172"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(60,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10452"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="9.5167"
- y1="104.1777"
- x1="8.3643"
- gradientTransform="translate(60,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10454"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6694"
- x2="16.5172"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(60,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10456"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="13.5167"
- y1="104.1777"
- x1="12.3643"
- gradientTransform="translate(60,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10458"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="11.5172"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(68,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10460"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(68,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10462"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="15.5172"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(68,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10464"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6687"
- x2="9.5167"
- y1="104.1777"
- x1="8.3643"
- gradientTransform="translate(68,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10466"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(68,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10468"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6684"
- x2="13.5167"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(68,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10470"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="11.5172"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(76,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10472"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(76,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10474"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6694"
- x2="15.5172"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(76,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10476"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6684"
- x2="9.5167"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(76,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10478"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="16.5167"
- y1="107.1777"
- x1="15.3643"
- gradientTransform="translate(76,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10480"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6684"
- x2="13.5167"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(76,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10482"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="11.5167"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(84,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10484"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6687"
- x2="12.5167"
- y1="107.1777"
- x1="11.3643"
- gradientTransform="translate(84,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10486"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="15.5167"
- y1="110.1777"
- x1="14.3643"
- gradientTransform="translate(84,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10488"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6684"
- x2="9.5167"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(84,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10490"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6684"
- x2="16.5167"
- y1="107.1768"
- x1="15.3638"
- gradientTransform="translate(84,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10492"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6684"
- x2="13.5167"
- y1="104.1768"
- x1="12.3638"
- gradientTransform="translate(84,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10494"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="111.6687"
- x2="11.5167"
- y1="110.1777"
- x1="10.3643"
- gradientTransform="translate(92,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10496"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="108.6684"
- x2="12.5167"
- y1="107.1768"
- x1="11.3638"
- gradientTransform="translate(92,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10498"
- xlink:href="#XMLID_100_" />
- <linearGradient
- y2="105.6677"
- x2="9.5162"
- y1="104.1768"
- x1="8.3638"
- gradientTransform="translate(92,-19)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient10500"
- xlink:href="#XMLID_100_" />
- <linearGradient
- gradientTransform="matrix(1,0,0,1.0792079,0,-9.1881184)"
- y2="65.874321"
- x2="64"
- y1="17.358589"
- x1="64"
- gradientUnits="userSpaceOnUse"
- id="linearGradient12462"
- xlink:href="#radialGradient12454" />
- </defs>
- <metadata
- id="metadata2761">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1">
- <g
- style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter10229)"
- id="g4493"
- transform="matrix(1.0357143,0,0,1.1354166,6,7)">
- <radialGradient
- id="radialGradient4495"
- cx="52"
- cy="-31"
- r="136.00369"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#BBBBBB"
- id="stop4497" />
- <stop
- offset="0.3077"
- style="stop-color:#EEEEEE"
- id="stop4499" />
- <stop
- offset="0.7811"
- style="stop-color:#BBBBBB"
- id="stop4501" />
- <stop
- offset="1"
- style="stop-color:#DBDBDB"
- id="stop4503" />
- </radialGradient>
- <path
- d="M 3,0 C 1.35,0 0,1.35 0,3 L 0,93 C 0,94.65 1.35,96 3,96 L 109,96 C 110.65,96 112,94.65 112,93 L 112,3 C 112,1.35 110.65,0 109,0 L 3,0 z "
- id="path4505"
- style="fill:#000000;fill-opacity:1" />
- </g>
- <path
- style="fill:url(#linearGradient9764);fill-opacity:1"
- id="path9762"
- d="M 10.999999,8.079208 C 9.3500001,8.079208 8,9.5361386 8,11.316832 L 8,108.44554 C 8,110.22623 9.3500001,111.68317 10.999999,111.68317 L 117.00001,111.68317 C 118.64999,111.68317 120,110.22623 120,108.44554 L 120,11.316832 C 120,9.5361386 118.64999,8.079208 117.00001,8.079208 L 10.999999,8.079208 z " />
- <path
- style="fill:url(#XMLID_93_)"
- id="path28"
- d="M 12.081633,15 C 11.484571,15 11,15.454054 11,16.013514 L 11,88.986486 C 11,89.546959 11.484571,90 12.081633,90 L 115.91837,90 C 116.51651,90 117,89.546959 117,88.986486 L 117,16.013514 C 117,15.454054 116.51651,15 115.91837,15 L 12.081633,15 z " />
- <rect
- id="rect30"
- height="80"
- width="104"
- y="16"
- x="12" />
- <g
- transform="matrix(1.0851064,0,0,1.1142857,3.2340422,6.9714286)"
- id="g32">
- <linearGradient
- y2="83"
- x2="55.9995"
- y1="7"
- x1="55.9995"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3040">
- <stop
- id="stop3042"
- style="stop-color:#555753"
- offset="0" />
- <stop
- id="stop3044"
- style="stop-color:#2E2E2E"
- offset="0.6272" />
- <stop
- id="stop3046"
- style="stop-color:#2E2E2E"
- offset="1" />
- </linearGradient>
- <path
- style="fill:url(#XMLID_94_)"
- id="path41"
- d="M 103,76 C 103,77.65 101.65,79 100,79 L 12,79 C 10.35,79 9,77.65 9,76 L 9,12 C 9,10.35 10.35,9 12,9 L 100,9 C 101.65,9 103,10.35 103,12 L 103,76 z " />
- </g>
- <path
- style="opacity:0.05;fill:#ffffff"
- id="path43"
- d="M 13,53 C 54.904638,30.634107 95.223936,25.438915 115,24.301649 L 115,17 L 13,17 L 13,53 z " />
- <path
- style="opacity:0.9;fill:url(#linearGradient3134)"
- id="path50"
- d="M 36,48 L 20,56 L 20,51.712 L 30.667,46 L 20,40.288 L 20,36 L 36,44.296 L 36,48 z " />
- <path
- style="opacity:0.9;fill:url(#linearGradient3136)"
- id="path57"
- d="M 56,60 L 40,60 L 40,56 L 56,56 L 56,60 z " />
- <path
- transform="matrix(1.125,0,0,1.5,-10.5,-29)"
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;filter:url(#filter3723)"
- id="path59"
- d="M 60,60 L 44,60 L 44,56 L 60,56 L 60,60 z " />
- <path
- style="opacity:0.4;fill:url(#linearGradient3140);filter:url(#filter4489)"
- id="path61"
- d="M 36,48 L 20,56 L 20,51.712 L 30.667,46 L 20,40.288 L 20,36 L 36,44.296 L 36,48 z " />
- <path
- style="fill:url(#XMLID_99_)"
- id="path68"
- d="M 117.236,96.732 L 116.65179,96 L 11.923562,96 L 11.236,96.621 C 11.418769,96.829 11.682046,96.965 11.989927,96.985 L 116.50818,97 C 116.78995,97 117.04234,96.895 117.236,96.732 z " />
- <g
- id="g2644">
- <circle
- cx="101"
- cy="86"
- r="1"
- id="circle89"
- style="fill:url(#linearGradient10500)"
- transform="translate(8,15)" />
- <circle
- cx="104"
- cy="89"
- r="1"
- id="circle103"
- style="fill:url(#linearGradient10498)"
- transform="translate(8,15)" />
- <circle
- cx="103"
- cy="92"
- r="1"
- id="circle110"
- style="fill:url(#linearGradient10496)"
- transform="translate(8,15)" />
- <circle
- cx="97"
- cy="86"
- r="1"
- id="circle117"
- style="fill:url(#linearGradient10494)"
- transform="translate(8,15)" />
- <circle
- cx="100"
- cy="89"
- r="1"
- id="circle124"
- style="fill:url(#linearGradient10492)"
- transform="translate(8,15)" />
- <circle
- cx="93"
- cy="86"
- r="1"
- id="circle131"
- style="fill:url(#linearGradient10490)"
- transform="translate(8,15)" />
- <circle
- cx="99"
- cy="92"
- r="1"
- id="circle138"
- style="fill:url(#linearGradient10488)"
- transform="translate(8,15)" />
- <circle
- cx="96"
- cy="89"
- r="1"
- id="circle145"
- style="fill:url(#linearGradient10486)"
- transform="translate(8,15)" />
- <circle
- cx="95"
- cy="92"
- r="1"
- id="circle152"
- style="fill:url(#linearGradient10484)"
- transform="translate(8,15)" />
- <circle
- cx="89"
- cy="86"
- r="1"
- id="circle159"
- style="fill:url(#linearGradient10482)"
- transform="translate(8,15)" />
- <circle
- cx="92"
- cy="89"
- r="1"
- id="circle166"
- style="fill:url(#linearGradient10480)"
- transform="translate(8,15)" />
- <circle
- cx="85"
- cy="86"
- r="1"
- id="circle173"
- style="fill:url(#linearGradient10478)"
- transform="translate(8,15)" />
- <circle
- cx="91"
- cy="92"
- r="1"
- id="circle180"
- style="fill:url(#linearGradient10476)"
- transform="translate(8,15)" />
- <circle
- cx="88"
- cy="89"
- r="1"
- id="circle187"
- style="fill:url(#linearGradient10474)"
- transform="translate(8,15)" />
- <circle
- cx="87"
- cy="92"
- r="1"
- id="circle194"
- style="fill:url(#linearGradient10472)"
- transform="translate(8,15)" />
- <circle
- cx="81"
- cy="86"
- r="1"
- id="circle201"
- style="fill:url(#linearGradient10470)"
- transform="translate(8,15)" />
- <circle
- cx="84"
- cy="89"
- r="1"
- id="circle208"
- style="fill:url(#linearGradient10468)"
- transform="translate(8,15)" />
- <circle
- cx="77"
- cy="86"
- r="1"
- id="circle215"
- style="fill:url(#linearGradient10466)"
- transform="translate(8,15)" />
- <circle
- cx="83"
- cy="92"
- r="1"
- id="circle222"
- style="fill:url(#linearGradient10464)"
- transform="translate(8,15)" />
- <circle
- cx="80"
- cy="89"
- r="1"
- id="circle229"
- style="fill:url(#linearGradient10462)"
- transform="translate(8,15)" />
- <circle
- cx="79"
- cy="92"
- r="1"
- id="circle236"
- style="fill:url(#linearGradient10460)"
- transform="translate(8,15)" />
- <circle
- cx="73"
- cy="86"
- r="1"
- id="circle243"
- style="fill:url(#linearGradient10458)"
- transform="translate(8,15)" />
- <circle
- cx="76"
- cy="89"
- r="1"
- id="circle250"
- style="fill:url(#linearGradient10456)"
- transform="translate(8,15)" />
- <circle
- cx="69"
- cy="86"
- r="1"
- id="circle257"
- style="fill:url(#linearGradient10454)"
- transform="translate(8,15)" />
- <circle
- cx="75"
- cy="92"
- r="1"
- id="circle264"
- style="fill:url(#linearGradient10452)"
- transform="translate(8,15)" />
- <circle
- cx="72"
- cy="89"
- r="1"
- id="circle271"
- style="fill:url(#linearGradient10450)"
- transform="translate(8,15)" />
- <circle
- cx="71"
- cy="92"
- r="1"
- id="circle278"
- style="fill:url(#linearGradient10448)"
- transform="translate(8,15)" />
- <circle
- cx="65"
- cy="86"
- r="1"
- id="circle285"
- style="fill:url(#linearGradient10446)"
- transform="translate(8,15)" />
- <circle
- cx="68"
- cy="89"
- r="1"
- id="circle292"
- style="fill:url(#linearGradient10444)"
- transform="translate(8,15)" />
- <circle
- cx="61"
- cy="86"
- r="1"
- id="circle299"
- style="fill:url(#linearGradient10442)"
- transform="translate(8,15)" />
- <circle
- cx="67"
- cy="92"
- r="1"
- id="circle306"
- style="fill:url(#linearGradient10440)"
- transform="translate(8,15)" />
- <circle
- cx="64"
- cy="89"
- r="1"
- id="circle313"
- style="fill:url(#linearGradient10438)"
- transform="translate(8,15)" />
- <circle
- cx="63"
- cy="92"
- r="1"
- id="circle320"
- style="fill:url(#linearGradient10436)"
- transform="translate(8,15)" />
- <circle
- cx="57"
- cy="86"
- r="1"
- id="circle327"
- style="fill:url(#linearGradient10434)"
- transform="translate(8,15)" />
- <circle
- cx="60"
- cy="89"
- r="1"
- id="circle334"
- style="fill:url(#linearGradient10432)"
- transform="translate(8,15)" />
- <circle
- cx="53"
- cy="86"
- r="1"
- id="circle341"
- style="fill:url(#linearGradient10430)"
- transform="translate(8,15)" />
- <circle
- cx="59"
- cy="92"
- r="1"
- id="circle348"
- style="fill:url(#linearGradient10428)"
- transform="translate(8,15)" />
- <circle
- cx="56"
- cy="89"
- r="1"
- id="circle355"
- style="fill:url(#linearGradient10426)"
- transform="translate(8,15)" />
- <circle
- cx="55"
- cy="92"
- r="1"
- id="circle362"
- style="fill:url(#linearGradient10424)"
- transform="translate(8,15)" />
- <circle
- cx="49"
- cy="86"
- r="1"
- id="circle369"
- style="fill:url(#linearGradient10422)"
- transform="translate(8,15)" />
- <circle
- cx="52"
- cy="89"
- r="1"
- id="circle376"
- style="fill:url(#linearGradient10420)"
- transform="translate(8,15)" />
- <circle
- cx="45"
- cy="86"
- r="1"
- id="circle383"
- style="fill:url(#linearGradient10418)"
- transform="translate(8,15)" />
- <circle
- cx="51"
- cy="92"
- r="1"
- id="circle390"
- style="fill:url(#linearGradient10416)"
- transform="translate(8,15)" />
- <circle
- cx="48"
- cy="89"
- r="1"
- id="circle397"
- style="fill:url(#linearGradient10414)"
- transform="translate(8,15)" />
- <circle
- cx="47"
- cy="92"
- r="1"
- id="circle404"
- style="fill:url(#linearGradient10412)"
- transform="translate(8,15)" />
- <circle
- cx="41"
- cy="86"
- r="1"
- id="circle411"
- style="fill:url(#linearGradient10410)"
- transform="translate(8,15)" />
- <circle
- cx="44"
- cy="89"
- r="1"
- id="circle418"
- style="fill:url(#linearGradient10408)"
- transform="translate(8,15)" />
- <circle
- cx="37"
- cy="86"
- r="1"
- id="circle425"
- style="fill:url(#linearGradient10406)"
- transform="translate(8,15)" />
- <circle
- cx="43"
- cy="92"
- r="1"
- id="circle432"
- style="fill:url(#linearGradient10404)"
- transform="translate(8,15)" />
- <circle
- cx="40"
- cy="89"
- r="1"
- id="circle439"
- style="fill:url(#linearGradient10402)"
- transform="translate(8,15)" />
- <circle
- cx="39"
- cy="92"
- r="1"
- id="circle446"
- style="fill:url(#linearGradient10400)"
- transform="translate(8,15)" />
- <circle
- cx="33"
- cy="86"
- r="1"
- id="circle453"
- style="fill:url(#linearGradient10398)"
- transform="translate(8,15)" />
- <circle
- cx="36"
- cy="89"
- r="1"
- id="circle460"
- style="fill:url(#linearGradient10396)"
- transform="translate(8,15)" />
- <circle
- cx="29"
- cy="86"
- r="1"
- id="circle467"
- style="fill:url(#linearGradient10394)"
- transform="translate(8,15)" />
- <circle
- cx="35"
- cy="92"
- r="1"
- id="circle474"
- style="fill:url(#linearGradient10392)"
- transform="translate(8,15)" />
- <circle
- cx="32"
- cy="89"
- r="1"
- id="circle481"
- style="fill:url(#linearGradient10390)"
- transform="translate(8,15)" />
- <circle
- cx="31"
- cy="92"
- r="1"
- id="circle488"
- style="fill:url(#linearGradient10388)"
- transform="translate(8,15)" />
- <circle
- cx="25"
- cy="86"
- r="1"
- id="circle495"
- style="fill:url(#linearGradient10386)"
- transform="translate(8,15)" />
- <circle
- cx="28"
- cy="89"
- r="1"
- id="circle502"
- style="fill:url(#linearGradient10384)"
- transform="translate(8,15)" />
- <circle
- cx="21"
- cy="86"
- r="1"
- id="circle509"
- style="fill:url(#linearGradient10382)"
- transform="translate(8,15)" />
- <circle
- cx="27"
- cy="92"
- r="1"
- id="circle516"
- style="fill:url(#linearGradient10380)"
- transform="translate(8,15)" />
- <circle
- cx="24"
- cy="89"
- r="1"
- id="circle523"
- style="fill:url(#linearGradient10378)"
- transform="translate(8,15)" />
- <circle
- cx="23"
- cy="92"
- r="1"
- id="circle530"
- style="fill:url(#linearGradient10376)"
- transform="translate(8,15)" />
- <circle
- cx="17"
- cy="86"
- r="1"
- id="circle537"
- style="fill:url(#linearGradient10374)"
- transform="translate(8,15)" />
- <circle
- cx="20"
- cy="89"
- r="1"
- id="circle544"
- style="fill:url(#linearGradient10372)"
- transform="translate(8,15)" />
- <circle
- cx="13"
- cy="86"
- r="1"
- id="circle551"
- style="fill:url(#linearGradient10370)"
- transform="translate(8,15)" />
- <circle
- cx="19"
- cy="92"
- r="1"
- id="circle558"
- style="fill:url(#linearGradient10368)"
- transform="translate(8,15)" />
- <circle
- cx="16"
- cy="89"
- r="1"
- id="circle565"
- style="fill:url(#linearGradient10366)"
- transform="translate(8,15)" />
- <circle
- cx="15"
- cy="92"
- r="1"
- id="circle572"
- style="fill:url(#linearGradient10364)"
- transform="translate(8,15)" />
- <circle
- cx="9"
- cy="86"
- r="1"
- id="circle579"
- style="fill:url(#linearGradient10362)"
- transform="translate(8,15)" />
- <circle
- cx="12"
- cy="89"
- r="1"
- id="circle586"
- style="fill:url(#linearGradient10360)"
- transform="translate(8,15)" />
- <circle
- cx="11"
- cy="92"
- r="1"
- id="circle600"
- style="fill:url(#linearGradient10358)"
- transform="translate(8,15)" />
- <circle
- cx="8"
- cy="89"
- r="1"
- id="circle607"
- style="fill:url(#linearGradient10356)"
- transform="translate(8,15)" />
- </g>
- <path
- id="path12444"
- d="M 11,8.079208 C 9.3500011,8.079208 8,9.5361386 8,11.316832 L 8,108.44554 C 8,109.41314 8.4024998,110.27916 9.03125,110.87376 C 9.0240254,110.78181 9,110.69787 9,110.60396 L 9,12.39604 C 9,10.615347 10.316907,9.1584159 11.9375,9.1584159 L 116.0625,9.1584159 C 117.68308,9.1584159 118.95136,10.616175 119,12.39604 C 119.68573,37.488452 119,110.60396 119,110.60396 C 119,110.69787 118.97597,110.78181 118.96875,110.87376 C 119.5975,110.27916 120,109.41314 120,108.44554 L 120,11.316832 C 120,9.5361386 118.64998,8.079208 117,8.079208 L 11,8.079208 z "
- style="opacity:0.9;fill:url(#linearGradient12462);fill-opacity:1" />
- </g>
-</svg>
diff --git a/share/icons/svg/view-history.svg b/share/icons/svg/view-history.svg
deleted file mode 100644
index 519a4d3ee..000000000
--- a/share/icons/svg/view-history.svg
+++ /dev/null
@@ -1,753 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xml:space="preserve"
- enable-background="new 0 0 128 128"
- overflow="visible"
- viewBox="0 0 128 128"
- height="128"
- width="128"
- id="Layer_1"
- version="1.1"><defs
- id="defs105"><radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9792,0,0,0.9725,133.0002,20.8762)"
- r="55.148"
- cy="-0.2148"
- cx="48"
- id="radialGradient3351"><stop
- id="stop3353"
- style="stop-color:#909975;stop-opacity:1;"
- offset="0" /><stop
- id="stop3361"
- style="stop-color:#f2eee5;stop-opacity:1;"
- offset="1" /></radialGradient><radialGradient
- xlink:href="#linearGradient3880"
- id="radialGradient3902"
- gradientUnits="userSpaceOnUse"
- gradientTransform="scale(1,0.125)"
- cx="56"
- cy="0"
- fx="44.494534"
- fy="-6.2420459"
- r="32" /><radialGradient
- xlink:href="#linearGradient3880"
- id="radialGradient3896"
- gradientUnits="userSpaceOnUse"
- gradientTransform="scale(1,0.125)"
- cx="56"
- cy="0"
- fx="44.494534"
- fy="-6.2420459"
- r="32" /><radialGradient
- xlink:href="#linearGradient3880"
- id="radialGradient3890"
- gradientUnits="userSpaceOnUse"
- gradientTransform="scale(1,0.125)"
- cx="56"
- cy="0"
- fx="44.494534"
- fy="-6.2420459"
- r="32" /><radialGradient
- xlink:href="#linearGradient3880"
- id="radialGradient3886"
- cx="56"
- cy="0"
- fx="44.494534"
- fy="-6.2420459"
- r="32"
- gradientTransform="scale(1,0.125)"
- gradientUnits="userSpaceOnUse" /><filter
- id="filter3850"><feGaussianBlur
- stdDeviation="0.95374318"
- id="feGaussianBlur3852" /></filter><linearGradient
- xlink:href="#radialGradient3351"
- id="linearGradient3810"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8776237,0,0,0.8776237,-108.35269,12.790918)"
- x1="193.78946"
- y1="59.78125"
- x2="215.63715"
- y2="59.78125"
- spreadMethod="reflect" /><filter
- id="filter3798"><feGaussianBlur
- stdDeviation="0.26380028"
- id="feGaussianBlur3800" /></filter><filter
- id="filter3794"><feGaussianBlur
- stdDeviation="0.26380028"
- id="feGaussianBlur3796" /></filter><linearGradient
- xlink:href="#linearGradient3569"
- id="linearGradient3648"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- x1="60.771305"
- y1="15.0625"
- x2="88.066513"
- y2="15.0625" /><linearGradient
- xlink:href="#linearGradient3569"
- id="linearGradient3645"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- x1="60.771305"
- y1="15.0625"
- x2="88.066513"
- y2="15.0625" /><linearGradient
- xlink:href="#linearGradient3569"
- id="linearGradient3643"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- x1="60.771305"
- y1="15.0625"
- x2="88.066513"
- y2="15.0625" /><linearGradient
- xlink:href="#linearGradient3569"
- id="linearGradient3641"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- x1="60.771305"
- y1="15.0625"
- x2="88.066513"
- y2="15.0625" /><filter
- id="filter3629"><feGaussianBlur
- stdDeviation="0.13790379"
- id="feGaussianBlur3631" /></filter><filter
- id="filter3605"><feGaussianBlur
- stdDeviation="0.22076896"
- id="feGaussianBlur3607" /></filter><linearGradient
- xlink:href="#linearGradient4045"
- id="linearGradient4051"
- x1="60.396191"
- y1="6.6136646"
- x2="60.396191"
- y2="12.073788"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(16,0)" /><filter
- x="-0.034965621"
- width="1.0699312"
- y="-0.93707865"
- height="2.8741573"
- id="filter4039"><feGaussianBlur
- stdDeviation="1.5251931"
- id="feGaussianBlur4041" /></filter><filter
- x="-0.23834054"
- width="1.4766811"
- y="-0.01944416"
- height="1.0388883"
- id="filter3997"><feGaussianBlur
- stdDeviation="0.80688202"
- id="feGaussianBlur3999" /></filter><linearGradient
- xlink:href="#linearGradient2575"
- id="linearGradient3963"
- x1="180.4375"
- y1="59.484375"
- x2="188.5625"
- y2="59.484375"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.23437,0)" /><linearGradient
- xlink:href="#linearGradient3837"
- id="linearGradient3942"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-135.5291,-0.296875)"
- x1="193.78946"
- y1="59.78125"
- x2="220.94405"
- y2="59.78125" /><linearGradient
- xlink:href="#linearGradient3871"
- id="linearGradient3935"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-135.36504,0)"
- x1="210.54687"
- y1="52.591824"
- x2="230.1729"
- y2="52.591824" /><linearGradient
- xlink:href="#linearGradient3883"
- id="linearGradient3932"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-135.36504,0)"
- x1="197.65625"
- y1="9.2500019"
- x2="226.5625"
- y2="34.250004" /><linearGradient
- xlink:href="#linearGradient3893"
- id="linearGradient3929"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-135.36504,0)"
- x1="201.63591"
- y1="74.828888"
- x2="211.5796"
- y2="80.629371" /><radialGradient
- xlink:href="#linearGradient3779"
- id="radialGradient3920"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8977981,1.3403251e-7,-1.863763e-7,2.6389461,-162.99627,-106.25459)"
- cx="200.92145"
- cy="64.46875"
- fx="200.92145"
- fy="64.46875"
- r="26.97573" /><radialGradient
- xlink:href="#linearGradient3771"
- id="radialGradient3918"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2828719,0,0,2.8333783,-87.050985,-105.5079)"
- cx="238.03082"
- cy="59.78125"
- fx="238.03082"
- fy="59.78125"
- r="23.47573" /><radialGradient
- xlink:href="#linearGradient3803"
- id="radialGradient3916"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.7071068,0.7071068,-2.0618473,2.0618473,213.58585,-187.37083)"
- cx="180.99957"
- cy="59.78125"
- fx="180.99957"
- fy="59.78125"
- r="22.22573" /><filter
- id="filter3867"><feGaussianBlur
- stdDeviation="0.27751822"
- id="feGaussianBlur3869" /></filter><clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath3824"><path
- style="opacity:0.20599252;fill:#9c9c9c;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1"
- d="M 218.31207,14.09375 C 206.17822,14.09375 196.33634,19.645615 196.33634,33.875 C 196.33634,44.394613 211.7205,52.817738 214.59118,63.53125 C 212.23986,72.306511 196.33634,82.873505 196.33634,93.53125 C 196.33634,107.95361 206.17822,113.65625 218.31207,113.65625 C 230.44593,113.65625 240.2878,107.95361 240.2878,93.53125 C 240.28779,82.873504 224.61835,73.180052 222.03296,63.53125 C 224.86896,52.947146 240.28779,44.394613 240.2878,33.875 C 240.2878,19.645614 230.44593,14.09375 218.31207,14.09375 z"
- id="path3826" /></clipPath><filter
- id="filter3799"><feGaussianBlur
- stdDeviation="0.40593809"
- id="feGaussianBlur3801" /></filter><filter
- id="filter3767"><feGaussianBlur
- stdDeviation="1.1199548"
- id="feGaussianBlur3769" /></filter><filter
- x="-0.10216047"
- width="1.2043209"
- y="-0.050306506"
- height="1.100613"
- id="filter3755"><feGaussianBlur
- stdDeviation="2.2965444"
- id="feGaussianBlur3757" /></filter><linearGradient
- xlink:href="#linearGradient3143"
- id="linearGradient3486"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5000001,0,0,0.5000002,48,-44.000025)"
- spreadMethod="reflect"
- x1="48"
- y1="112"
- x2="112"
- y2="112" /><linearGradient
- xlink:href="#linearGradient3143"
- id="linearGradient3481"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5094973,0,0,0.5870287,46.977137,42.949012)"
- spreadMethod="reflect"
- x1="48"
- y1="112"
- x2="112"
- y2="112" /><linearGradient
- xlink:href="#linearGradient3143"
- id="linearGradient3477"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- x1="26.204611"
- y1="60"
- x2="32"
- y2="60"
- gradientTransform="matrix(1,0,0,1.1818182,87.999998,-10.909091)" /><linearGradient
- xlink:href="#linearGradient3143"
- id="linearGradient3473"
- x1="25.687912"
- y1="60"
- x2="32"
- y2="60"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- gradientTransform="matrix(1,0,0,1.1818182,16,-10.909091)" /><linearGradient
- xlink:href="#linearGradient3143"
- id="linearGradient3463"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- x1="48"
- y1="112"
- x2="112"
- y2="112"
- gradientTransform="matrix(1,0,0,0.4999997,16,-51.999973)" /><linearGradient
- xlink:href="#linearGradient3143"
- id="linearGradient3459"
- x1="48"
- y1="112"
- x2="112"
- y2="112"
- gradientUnits="userSpaceOnUse"
- spreadMethod="reflect"
- gradientTransform="matrix(1,0,0,0.5000002,16,59.999975)" /><linearGradient
- id="linearGradient3143"><stop
- id="stop3145"
- offset="0"
- style="stop-color:#4e4a54;stop-opacity:1;" /><stop
- style="stop-color:#3f3c44;stop-opacity:1;"
- offset="0.10221675"
- id="stop3285" /><stop
- style="stop-color:#312e34;stop-opacity:1;"
- offset="0.2044335"
- id="stop3283" /><stop
- style="stop-color:#141215;stop-opacity:1;"
- offset="0.408867"
- id="stop3281" /><stop
- id="stop3147"
- offset="1"
- style="stop-color:#000000;stop-opacity:1;" /></linearGradient><linearGradient
- id="linearGradient2575"
- gradientUnits="userSpaceOnUse"
- x1="28"
- y1="57.5"
- x2="28"
- y2="0">
- <stop
- offset="0"
- style="stop-color:#FFEA00"
- id="stop2577" />
- <stop
- offset="1"
- style="stop-color:#ffa000;stop-opacity:1;"
- id="stop2579" />
- </linearGradient><linearGradient
- id="linearGradient3771"><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3773" /><stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop3775" /></linearGradient><linearGradient
- id="linearGradient3779"><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3781" /><stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop3783" /></linearGradient><linearGradient
- id="linearGradient3803"><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3805" /><stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop3807" /></linearGradient><linearGradient
- id="linearGradient3837"><stop
- style="stop-color:#b8b8b8;stop-opacity:1;"
- offset="0"
- id="stop3839" /><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="1"
- id="stop3841" /></linearGradient><linearGradient
- id="linearGradient3871"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3874" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3876" /></linearGradient><linearGradient
- id="linearGradient3883"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3885" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3887" /></linearGradient><linearGradient
- id="linearGradient3893"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3895" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3897" /></linearGradient><linearGradient
- id="linearGradient4045"><stop
- style="stop-color:#121212;stop-opacity:1;"
- offset="0"
- id="stop4047" /><stop
- style="stop-color:#121212;stop-opacity:0;"
- offset="1"
- id="stop4049" /></linearGradient><linearGradient
- id="linearGradient3569"><stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3571" /><stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop3573" /></linearGradient><linearGradient
- id="linearGradient3880"><stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3882" /><stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3884" /></linearGradient><linearGradient
- y2="108.51858"
- x2="212"
- y1="76"
- x1="108"
- gradientTransform="matrix(-0.5,0,0,0.4305231,182,51.362312)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2688"
- xlink:href="#radialGradient3351" /></defs>
-<metadata
- id="metadata3">
- <ns:sfw>
- <ns:slices>
- <ns:slice
- sliceID="1316743234"
- width="128"
- height="128"
- x="0"
- y="0" />
- </ns:slices>
- <ns:sliceSourceBounds
- bottomLeftOrigin="true"
- width="128"
- height="128"
- x="0"
- y="0" />
- <ns:optimizationSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="0">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- <ns:targetSettings
- fileFormat="PNG24Format"
- targetSettingsID="1696735251">
- <ns:PNG24Format
- interlaced="false"
- noMatteColor="false"
- matteColor="#FFFFFF"
- filtered="false"
- transparency="true">
- </ns:PNG24Format>
- </ns:targetSettings>
- </ns:optimizationSettings>
- </ns:sfw>
-<rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.5585"
- cy="112.3047"
- cx="102"
- id="XMLID_7_">
- <stop
- id="stop16"
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0" />
-
-
-
-
- <stop
- id="stop26"
- style="stop-color:#dfdfdf;stop-opacity:1;"
- offset="0.1737" />
- <stop
- id="stop28"
- style="stop-color:#ECF2F5"
- offset="0.2099" />
- <stop
- id="stop30"
- style="stop-color:#FAFCFD"
- offset="0.2435" />
- <stop
- id="stop32"
- style="stop-color:#FFFFFF"
- offset="0.2722" />
-</radialGradient>
-
-<radialGradient
- gradientUnits="userSpaceOnUse"
- r="139.55859"
- cy="112.3047"
- cx="102"
- id="XMLID_8_">
- <stop
- id="stop37"
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0" />
-
- <stop
- id="stop41"
- style="stop-color:#bdbebf;stop-opacity:1;"
- offset="0.11366145" />
-
-
- <stop
- id="stop47"
- style="stop-color:#ECECEC"
- offset="0.20296688" />
- <stop
- id="stop49"
- style="stop-color:#FAFAFA"
- offset="0.2363" />
- <stop
- id="stop51"
- style="stop-color:#FFFFFF"
- offset="0.38818121" />
- <stop
- id="stop53"
- style="stop-color:#FAFAFA"
- offset="0.5313" />
- <stop
- id="stop55"
- style="stop-color:#EBECEC"
- offset="0.8449" />
- <stop
- id="stop57"
- style="stop-color:#E1E2E3"
- offset="1" />
-</radialGradient>
-
-<linearGradient
- y2="94.5366"
- x2="86.5356"
- y1="102.3447"
- x1="94.3438"
- gradientUnits="userSpaceOnUse"
- id="XMLID_9_">
- <stop
- id="stop62"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop64"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="94.5865"
- x2="86.5865"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_10_">
- <stop
- id="stop69"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop71"
- style="stop-color:#555753"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="95.293"
- x2="87.293"
- y1="103"
- x1="95"
- gradientUnits="userSpaceOnUse"
- id="XMLID_11_">
- <stop
- id="stop76"
- style="stop-color:#FFFFFF"
- offset="0" />
- <stop
- id="stop78"
- style="stop-color:#393B38"
- offset="1" />
-</linearGradient>
-
-<linearGradient
- y2="96.0002"
- x2="88.0002"
- y1="104"
- x1="96"
- gradientUnits="userSpaceOnUse"
- id="XMLID_12_">
- <stop
- id="stop83"
- style="stop-color:#888A85"
- offset="0" />
- <stop
- id="stop85"
- style="stop-color:#8C8E89"
- offset="0.0072" />
- <stop
- id="stop87"
- style="stop-color:#ABACA9"
- offset="0.0673" />
- <stop
- id="stop89"
- style="stop-color:#C5C6C4"
- offset="0.1347" />
- <stop
- id="stop91"
- style="stop-color:#DBDBDA"
- offset="0.2115" />
- <stop
- id="stop93"
- style="stop-color:#EBEBEB"
- offset="0.3012" />
- <stop
- id="stop95"
- style="stop-color:#F7F7F6"
- offset="0.4122" />
- <stop
- id="stop97"
- style="stop-color:#FDFDFD"
- offset="0.5679" />
- <stop
- id="stop99"
- style="stop-color:#FFFFFF"
- offset="1" />
-</linearGradient>
-
-
-<g
- transform="translate(-16,0.1595895)"
- id="g2656"
- style="overflow:visible"><path
- style="opacity:0.30337082;fill:url(#linearGradient3963);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3997)"
- d="M 82.689408,9.6875 C 82.174198,9.6875 81.684588,9.8337303 81.203128,10.0625 C 84.150718,11.443627 86.355568,17.248903 86.355568,29.5 C 86.355558,38.980671 84.921748,46.85021 83.549468,56.0625 C 83.698488,57.070603 83.841308,58.077184 83.925998,59.125 C 83.849678,60.069285 83.709378,61.04759 83.549468,62.03125 C 84.884598,70.729119 86.355558,79.535706 86.355568,89.125 C 86.355568,101.54225 84.150718,107.49083 81.203128,108.90625 C 81.684588,109.14069 82.174198,109.28125 82.689408,109.28125 C 86.349208,109.28125 89.328128,103.54736 89.328128,89.125 C 89.328118,78.467254 84.598778,68.773802 83.818978,59.125 C 84.674358,48.540896 89.328118,40.019613 89.328128,29.5 C 89.328128,15.270614 86.349208,9.6875 82.689408,9.6875 z"
- id="path3950" /><g
- id="g3812"
- transform="translate(-138.07598,-4.390625)"
- clip-path="url(#clipPath3824)"><path
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3916);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3799)"
- d="M 218.31207,14.09375 C 206.17822,14.09375 196.33634,19.645615 196.33634,33.875 C 196.33634,44.394613 211.72051,52.817738 214.59118,63.53125 C 212.23987,72.306511 196.33634,82.873505 196.33634,93.53125 C 196.33634,107.95361 206.17822,113.65625 218.31207,113.65625 C 230.44593,113.65625 240.2878,107.95361 240.2878,93.53125 C 240.2878,82.873504 224.61836,73.180052 222.03296,63.53125 C 224.86897,52.947146 240.2878,44.394613 240.2878,33.875 C 240.2878,19.645614 230.44593,14.09375 218.31207,14.09375 z"
- id="path3721" /><path
- id="path3723"
- d="M 218.31207,14.09375 C 206.17822,14.09375 196.33634,19.645615 196.33634,33.875 C 196.33634,44.394613 211.7205,52.817738 214.59118,63.53125 C 212.23986,72.306511 196.33634,82.873505 196.33634,93.53125 C 196.33634,107.95361 206.17822,113.65625 218.31207,113.65625 C 230.44593,113.65625 240.2878,107.95361 240.2878,93.53125 C 240.28779,82.873504 224.61835,73.180052 222.03296,63.53125 C 224.86896,52.947146 240.28779,44.394613 240.2878,33.875 C 240.2878,19.645614 230.44593,14.09375 218.31207,14.09375 z"
- style="opacity:0.53183522;fill:none;fill-opacity:1;stroke:url(#radialGradient3918);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3767)" /><path
- style="opacity:0.2284644;fill:none;fill-opacity:1;stroke:url(#radialGradient3920);stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3755)"
- d="M 218.31207,14.09375 C 206.17822,14.09375 196.33634,19.645615 196.33634,33.875 C 196.33634,44.394613 211.7205,52.817738 214.59118,63.53125 C 212.23986,72.306511 196.33634,82.873505 196.33634,93.53125 C 196.33634,107.95361 206.17822,113.65625 218.31207,113.65625 C 230.44593,113.65625 240.2878,107.95361 240.2878,93.53125 C 240.28779,82.873504 224.61835,73.180052 222.03296,63.53125 C 224.86896,52.947146 240.28779,44.394613 240.2878,33.875 C 240.2878,19.645614 230.44593,14.09375 218.31207,14.09375 z"
- id="path3725" /><path
- id="path3828"
- d="M 218.31207,14.09375 C 206.17822,14.09375 196.33634,19.645615 196.33634,33.875 C 196.33634,44.394613 211.7205,52.817738 214.59118,63.53125 C 212.23986,72.306511 196.33634,82.873505 196.33634,93.53125 C 196.33634,107.95361 206.17822,113.65625 218.31207,113.65625 C 230.44593,113.65625 240.2878,107.95361 240.2878,93.53125 C 240.28779,82.873504 224.61835,73.180052 222.03296,63.53125 C 224.86896,52.947146 240.28779,44.394613 240.2878,33.875 C 240.2878,19.645614 230.44593,14.09375 218.31207,14.09375 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3850)" /></g><path
- style="opacity:0.78277151;fill:url(#linearGradient3648);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3798)"
- d="M 64.397094,9.6875 C 56.220084,9.6875 49.087964,12.219475 45.303344,18.21875 C 49.849104,19.561052 56.943534,20.237501 64.959594,20.2375 C 72.408044,20.2375 79.090624,19.682669 83.647094,18.5 C 79.908094,12.305393 72.696284,9.6875 64.397094,9.6875 z"
- id="path2977"
- transform="matrix(0.8615336,0,0,1,24.927649,0)" /><g
- id="g3637"
- transform="matrix(-1,0,0,-1,144.95044,118.79687)"
- style="opacity:0.55805209"><path
- style="opacity:0.78277151;fill:url(#linearGradient3641);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3629)"
- d="M 64.397094,9.6875 C 56.220084,9.6875 49.087964,12.219475 45.303344,18.21875 C 49.849104,19.561052 56.943534,20.437501 64.959594,20.4375 C 72.408044,20.4375 79.090624,19.682669 83.647094,18.5 C 79.908094,12.305393 72.696284,9.6875 64.397094,9.6875 z"
- id="path3633" /><path
- id="path3635"
- d="M 64.397094,9.6875 C 56.220084,9.6875 49.087964,12.219475 45.303344,18.21875 C 49.891666,16.989313 56.943534,16.628907 64.959594,16.628906 C 72.408044,16.628906 79.105236,17.283013 83.647094,18.5 C 79.908094,12.305393 72.696284,9.6875 64.397094,9.6875 z"
- style="opacity:0.78277151;fill:url(#linearGradient3643);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3605)" /></g><path
- style="opacity:1;fill:url(#linearGradient2688);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1"
- d="M 68.886471,43.163393 C 71.593361,47.52917 77.064231,51.568656 78.351601,56.373175 C 78.338331,56.422713 79.514151,57.678297 79.499461,57.728024 L 79.593541,57.840929 L 79.593541,85.983371 L 82.077431,85.983371 L 82.077431,57.633938 C 81.889471,57.214052 82.942501,56.792572 82.830131,56.373175 C 84.027671,51.903896 88.933501,48.031354 91.768371,43.934905 L 80.496781,50.29517 L 68.886471,43.163393 z"
- id="path3802" /><path
- id="path3496"
- d="M 80.236088,9.703125 C 68.102238,9.703125 58.260358,15.25499 58.260358,29.484375 C 58.260358,40.003988 73.644518,48.427113 76.515198,59.140625 C 74.163878,67.915886 58.260358,78.48288 58.260358,89.140625 C 58.260358,103.56299 68.102238,109.26563 80.236088,109.26563 C 92.369948,109.26563 102.21182,103.56299 102.21182,89.140625 C 102.21181,78.482879 86.542368,68.789427 83.956978,59.140625 C 86.792978,48.556521 102.21181,40.003988 102.21182,29.484375 C 102.21182,15.254989 92.369948,9.703125 80.236088,9.703125 z"
- style="opacity:0.20599252;fill:url(#linearGradient3942);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" /><path
- style="opacity:1;fill:url(#linearGradient3810);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1"
- d="M 81.199231,84.166408 L 61.891511,94.25908 C 63.157886,104.72999 71.236953,108.95928 81.007251,108.95928 C 90.25952,108.95928 97.4792,104.8801 99.348739,95.587355 L 81.199231,84.166408 z"
- id="path2979" /><rect
- ry="3.5185578"
- rx="3.5185578"
- y="104"
- x="55.129093"
- height="12.486969"
- width="48.911736"
- id="rect3479"
- style="opacity:1;fill:url(#linearGradient3481);fill-opacity:1;stroke:none;stroke-width:0.49613535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /><path
- style="opacity:0.39325843;fill:#373737;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1"
- d="M 61.891511,94.341358 C 63.190196,104.75211 71.262599,108.95928 81.007251,108.95928 C 90.221566,108.95928 97.511716,104.79658 99.421312,95.586903 C 95.057426,98.020015 89.122694,97.963631 82.07686,97.963631 C 73.557583,97.963631 66.104675,97.70593 61.891511,94.341358 z"
- id="path3814" /><path
- style="fill:url(#linearGradient3935);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3867)"
- d="M 75.181828,50.265627 C 76.418808,53.4355 77.655788,56.605373 78.892768,59.775246 C 78.569168,62.951702 78.936088,62.951702 81.236518,59.775246 C 83.825638,53.301954 88.169268,47.307165 94.807858,41.938275 C 89.504808,46.150621 84.569338,50.870608 81.041208,56.515627 C 80.585478,56.580731 80.129748,56.645835 79.674018,56.710939 C 78.176618,54.562502 76.679228,52.414064 75.181828,50.265627 z"
- id="path3845" /><path
- id="path3577"
- d="M 64.397094,9.6875 C 56.220084,9.6875 49.087964,12.219475 45.303344,18.21875 C 49.891666,16.989313 56.943534,16.628907 64.959594,16.628906 C 72.408044,16.628906 79.105236,17.283013 83.647094,18.5 C 79.908094,12.305393 72.696284,9.6875 64.397094,9.6875 z"
- style="opacity:0.78277151;fill:url(#linearGradient3645);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3794)"
- transform="matrix(0.8615336,0,0,1,24.927649,0)" /><rect
- ry="0.84041047"
- rx="0.84041005"
- y="5.7902913"
- x="56"
- height="10.209717"
- width="48"
- id="rect4043"
- style="opacity:1;fill:url(#linearGradient4051);fill-opacity:1;stroke:none;stroke-width:0.49613535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /><path
- style="fill:url(#linearGradient3932);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 80.650578,11.203128 C 67.293058,11.855855 62.020038,16.593608 60.061868,27.609377 C 62.034138,31.262447 67.035628,33.314089 71.275588,34.250002 C 68.616698,24.223961 72.536848,15.369794 80.650578,11.203128 z"
- id="path3881" /><path
- style="fill:url(#linearGradient3929);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 76.214558,65.851944 C 68.566958,73.115009 60.955828,80.253837 59.917958,90.98738 C 61.830298,95.045382 65.441068,94.857277 68.756798,95.406798 C 68.039398,82.885746 72.782328,74.914974 76.214558,65.851944 z"
- id="path3891" /><rect
- style="opacity:1;fill:url(#linearGradient3459);fill-opacity:1;stroke:none;stroke-width:0.49613535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"
- id="rect2871"
- width="96"
- height="8.0000076"
- x="32"
- y="112"
- rx="1.6808201"
- ry="0.84041047" /><rect
- style="opacity:0.89513113;fill:url(#linearGradient3473);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"
- id="rect3465"
- width="8"
- height="104"
- x="40"
- y="8"
- rx="0"
- ry="0" /><rect
- ry="0"
- rx="0"
- y="8"
- x="112"
- height="104"
- width="8"
- id="rect3475"
- style="opacity:0.89513113;fill:url(#linearGradient3477);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /><rect
- style="opacity:1;fill:url(#linearGradient3486);fill-opacity:1;stroke:none;stroke-width:0.49613535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"
- id="rect3483"
- width="48"
- height="12.219788"
- x="56"
- y="3.7802198"
- rx="2.8096411"
- ry="2.8096411" /><rect
- ry="1.1055746"
- rx="1.1055746"
- y="0"
- x="32"
- height="8.000001"
- width="96"
- id="rect3461"
- style="opacity:1;fill:url(#linearGradient3463);fill-opacity:1;stroke:none;stroke-width:0.49613535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /><rect
- style="opacity:0.78277151;fill:#121212;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4039)"
- id="rect4001"
- width="96.09375"
- height="2.34375"
- x="32.015625"
- y="118.23438"
- rx="16.04812"
- ry="1.171875" /><path
- style="opacity:1;fill:url(#radialGradient3886);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"
- id="path3854"
- d="M 88,0 A 32,4 0 0 1 56,4 32,4 0 0 1 24,0 32,4 0 0 1 56,-4 32,4 0 0 1 88,0 Z"
- transform="matrix(1.4263736,0,0,0.2409394,-0.703297,1.067012)" /><path
- transform="matrix(1.4263736,0,0,0.2409394,-0.703297,1.067012)"
- d="M 88,0 A 32,4 0 0 1 56,4 32,4 0 0 1 24,0 32,4 0 0 1 56,-4 32,4 0 0 1 88,0 Z"
- id="path3888"
- style="opacity:1;fill:url(#radialGradient3890);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /><path
- transform="matrix(1.4263736,0,0,0.2409394,-0.703297,113.10923)"
- d="M 88,0 A 32,4 0 0 1 56,4 32,4 0 0 1 24,0 32,4 0 0 1 56,-4 32,4 0 0 1 88,0 Z"
- id="path3892"
- style="opacity:1;fill:url(#radialGradient3896);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /><path
- style="opacity:1;fill:url(#radialGradient3902);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"
- id="path3900"
- d="M 88,0 A 32,4 0 0 1 56,4 32,4 0 0 1 24,0 32,4 0 0 1 56,-4 32,4 0 0 1 88,0 Z"
- transform="matrix(0.742578,0,0,0.2248956,37.19141,104.97172)" /></g></svg> \ No newline at end of file
diff --git a/share/keepassxc.ini b/share/keepassxc.ini
deleted file mode 100644
index ab450d485..000000000
--- a/share/keepassxc.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[General]
-UpdateCheckMessageShown=false
-LastActiveDatabase=@Invalid()
-LastOpenedDatabases=@Invalid()
-HideWindowOnCopy=false
-MinimizeOnCopy=true
-
-[GUI]
-HideUsernames=false
-HidePasswords=true
diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml
index 872c158c1..9227251d6 100644
--- a/share/linux/org.keepassxc.KeePassXC.appdata.xml
+++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml
@@ -50,6 +50,11 @@
</screenshots>
<releases>
+ <release version="2.6.0" date="2020-04-01">
+ <description>
+ <ul><li>TBD</li></ul>
+ </description>
+ </release>
<release version="2.5.4" date="2020-04-09">
<description>
<ul>
diff --git a/share/translations/keepassx_ar.ts b/share/translations/keepassx_ar.ts
index 7c1b015fe..8e1ea521e 100644
--- a/share/translations/keepassx_ar.ts
+++ b/share/translations/keepassx_ar.ts
@@ -23,7 +23,7 @@
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;إستكشاف المساهمات عبر GitHub&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;إستكشاف المساهمين عبر GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
@@ -43,17 +43,37 @@
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>شكر خاص من فريق KeePassXC إلى debfx لإنشاء KeePassX الأصلي.</translation>
+ <translation>شكر خاص من فريق KeePassXC يذهب إلى debfx لإنشاء KeePassX الأصلي.</translation>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>تفعيل وكيل SSH (يتطلب إعادة التشغيل)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
<translation type="unfinished"/>
</message>
</context>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>هل أنت متأكد من رغبتك في إعادة جميع الإعدادات العامة وإعدادات الأمن الى وضعها النمطي الأولي ؟</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -116,7 +148,7 @@
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>شغل نسخة واحدة فقط من تطبيق KeePassXC</translation>
+ <translation>شغل تطبيق واحد فقط من KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
@@ -127,12 +159,8 @@
<translation>إدارة الملفات</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>حفظ ملفات قواعد البيانات بأمان (قد يكون غير متوافق مع Dropbox، إلخ)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
- <translation>عمل نسخة إحتياطية من ملف قاعدة البيانات قبل الحفظ</translation>
+ <translation>إحتفظ بنسخة من ملف قاعدة البيانات قبل الحفظ</translation>
</message>
<message>
<source>Automatically save after every change</source>
@@ -143,32 +171,16 @@
<translation>الحفظ تلقائيًا عند الإغلاق</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>عدم وضع علامة على قاعدة البيانات المعدلة للتغييرات غير المتعلقة بالبيانات (مثال، توسيع المجموعات)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا</translation>
</message>
<message>
<source>Entry Management</source>
- <translation>إدارة ادخال البيانات</translation>
+ <translation>إدارة الإدخالات</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>استخدم شعار المجموعة عند إنشاء المدخلات</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>إخفاء إستعراض لوحة المدخلات </translation>
- </message>
- <message>
- <source>General</source>
- <translation>العام</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>إخفاء شريط العُدد (الأيقونات)</translation>
+ <translation>استخدم رمز المجموعة عند إنشاء الإدخال</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
@@ -176,11 +188,7 @@
</message>
<message>
<source>Show a system tray icon</source>
- <translation>اظهار أيقونة البرنامج في شريط واجهة النظام</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation>رمز شريط المهام المظلم</translation>
+ <translation>اظهر أيقونة البرنامج في صينية النظام</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
@@ -188,7 +196,7 @@
</message>
<message>
<source>Auto-Type</source>
- <translation> نمط تلقائي</translation>
+ <translation>الطباعة التلقائية</translation>
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
@@ -200,24 +208,12 @@
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>السؤأل دائما قبل التغيير للنمط التلقائي</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>المفتاح العام للطباعة التلقائية</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
+ <translation>اسأل دائما قبل تنفيذ الطباعة التلقائية</translation>
</message>
<message>
<source> ms</source>
<comment>Milliseconds</comment>
- <translation>جزء الثانية</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
+ <translation>مل.ثانية</translation>
</message>
<message>
<source>Movable toolbar</source>
@@ -244,10 +240,6 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Button style:</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Language:</source>
<translation> اللغة</translation>
</message>
@@ -293,18 +285,10 @@
<translation> نمط مفاتيح شريط العُدد </translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation> إستخدام بنط ذا مسافات أحادية في الملاحظات</translation>
- </message>
- <message>
<source>Language selection</source>
<translation> إختيار اللغة</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation> إعادة الإعدادات الى وضعها الأولي</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation> المختصر الى النمط-التلقائي العمومي</translation>
</message>
@@ -317,12 +301,56 @@
<source>Auto-type start delay milliseconds</source>
<translation> تأخير بدء النمط-التلقائي بأجزاء الثانية</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
<message>
<source>Timeouts</source>
- <translation> نفاذ الوقت</translation>
+ <translation>مهلة نفاد الوقت</translation>
</message>
<message>
<source>Clear clipboard after</source>
@@ -335,7 +363,7 @@
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>أغلق قواعد البيانات بعد حالة عدم النشاط لـ</translation>
+ <translation>أغلق قواعد البيانات بعد حالة عدم النشاط ل</translation>
</message>
<message>
<source> min</source>
@@ -363,19 +391,7 @@
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>أعد قفل قاعدة البيانات التي تم تأمينها سابقًا بعدالتغيير للنمط التلقائي</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>لا تطلب تكرار كلمة المرور عندما تكون مرئية</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation> لا تخفي كلمات السر عند تعديلها </translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation> لا تستعمل محددات أقواس أو مزدوجات لحقول كلمات السر الفارغة </translation>
+ <translation>أعد قفل قاعدة البيانات التي تم تأمينها سابقًا بعد تنفيذ الطباعة التلقائية</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@@ -414,6 +430,18 @@
<source>Clear search query after</source>
<translation> مسح محددات البحث بعد مضي </translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -515,11 +543,11 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>النمط التلقائي - KeePassXC</translation>
+ <translation>الطباعة التلقائية - KeePassXC</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
- <translation>إختيار مدخلات الى النمط التلقائي:</translation>
+ <translation>حدد مدخل للطباعة التلقائية:</translation>
</message>
<message>
<source>Search...</source>
@@ -529,34 +557,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-تأكيد الوصول إلى المتصفح</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>تذكر هذا القرار</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>إسمح</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>ارفض</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 طلب الدخول إلى كلمات المرور للعنصر التالي (العناصر) التالية.
-يرجى تحديد ما إذا كنت تريد السماح بالوصول أم لا.</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation> أسمح بالدخول</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
- <translation> أمنع الدخول</translation>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -571,7 +601,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Cancel</source>
- <translation>ألغاء</translation>
+ <translation>ألغ</translation>
</message>
<message>
<source>You have multiple databases open.
@@ -581,300 +611,336 @@ Please select the correct database for saving credentials.</source>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>الحوار</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: طلب مصادقة مفتاح جديد</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>هذا مطلوب للوصول إلى قواعد بياناتك مع KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>حفظ والسماح بالوصول</translation>
</message>
<message>
- <source>General</source>
- <translation>العام</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: الكتابة على المفتاح الحالي؟</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>تفعيل التكامل لهذه المتصفحات:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>مفتاح التشفير المشترك مع إسم &quot;%1&quot; موجود بالفعل.
+هل تريد الكتابة عليه؟</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;قوقل كروم</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: تحديث المُدخل</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;فايرفوكس</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>هل تريد تحديث المعلومات في %1 - %2؟</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;كروميوم</translation>
+ <source>Abort</source>
+ <translation>إجهاض </translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;فافيلادي</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>أظهر الإشعار عندما يتم طلب بيانات الإعتماد</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>طلب إلغاء القفل قاعدة البيانات في حال تم الإقفال</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>السماح فقط بالمدخلات التي تعود بنفس الصيغة (http://, https://, ...) </translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>مطابقة صيغة عنوان الانترنت (على سبيل المثال https://... )</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>لا تعرض سوى أفضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;عرض أفضل مطابقة لبيانات الإعتماد فقط</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>فرز ومطابقة بيانات الإعتماد حسب العنوان</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>فرز ومطابقة بيانات الإعتماد حسب إسم المستخدم</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Advanced</source>
- <translation>متقدم</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>لا تُظهر هذا التحذير مرة أخرى</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>لا تسأل مطلقًا قبل الوصول إلى بيانات الإعتماد</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>لا تسأل مطلقًا قبل تحديث بيانات الإعتماد</translation>
+ <source>Dialog</source>
+ <translation>الحوار</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>البحث في جميع قواعد البيانات لمطابقة بيانات الإعتماد</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>هذا مطلوب للوصول إلى قواعد بياناتك مع KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>إنشاء او تحديث حقول التسلسل تلقائيًا غير مدعوم.</translation>
+ <source>Enable browser integration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;جلب حقول التسلسل المتقدمة التي تبدأ ب &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>العام</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>تحديثات مسارات KeePassXC أو keepassxc-proxy تلقائيًا لبرامج المراسلات الأصلية عند بدء التشغيل.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>تحديث &amp;أصل ملفات manifest للمراسلات الأصلية عند بدء التشغيل</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>تفعيل التكامل لهذه المتصفحات:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>دعم تطبيق الوكيل بين KeePassXC وإضافات المتصفح.</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>استخدام تطبيق &amp;الوكيل بين KeePassXC وإضافات المتصفح</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>إستخدام موقع وكيل مخصص في حالة تثبيت خادم وكيل يدويًا.</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>إستخدام &amp;موقع وكيل مخصص</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>إستعراض...</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;تحذير:&lt;/b&gt; قد تكون الخيارات التالية خطيرة!</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>حدد موقع خادم الوكيل المخصص</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>متصفح تور</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation> ملفات برامج </translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation> جميع الملفات</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>السماح فقط بالمدخلات التي تعود بنفس الصيغة (http://, https://, ...) </translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation> لا تطلب الإذن لصفحات النترنت العادية HTTP&amp; و عند الإذن الأساسي</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>لا تعرض سوى أفضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله.</translation>
+ </message>
+ <message>
+ <source>Return only best-matching credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
- <translation> متصفح &amp;Brave</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Advanced</source>
+ <translation>متقدم</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>إنشاء او تحديث حقول التسلسل تلقائيًا غير مدعوم.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>تحديثات مسارات KeePassXC أو keepassxc-proxy تلقائيًا لبرامج المراسلات الأصلية عند بدء التشغيل.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: طلب مصادقة مفتاح جديد</translation>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>إستخدام موقع وكيل مخصص في حالة تثبيت خادم وكيل يدويًا.</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>حفظ والسماح بالوصول</translation>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: الكتابة على المفتاح الحالي؟</translation>
+ <source>Custom proxy location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>مفتاح التشفير المشترك مع إسم &quot;%1&quot; موجود بالفعل.
-هل تريد الكتابة عليه؟</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: تحديث المُدخل</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>إستعراض...</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>هل تريد تحديث المعلومات في %1 - %2؟</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>إجهاض </translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
+ <source>Toolbar button style</source>
+ <translation> نمط مفاتيح شريط العُدد </translation>
+ </message>
+ <message>
+ <source>Config Location:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <source>Custom browser location field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
<translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <message>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <source>Custom extension ID:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <source>Custom extension ID</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
+ <source>Please see special instructions for browser extension use below</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>لا تُظهر هذا التحذير مرة أخرى</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;تحذير:&lt;/b&gt; قد تكون الخيارات التالية خطيرة!</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Executable Files</source>
+ <translation> ملفات برامج </translation>
+ </message>
+ <message>
+ <source>All Files</source>
+ <translation> جميع الملفات</translation>
+ </message>
+ <message>
+ <source>Select custom proxy location</source>
+ <translation>حدد موقع خادم الوكيل المخصص</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -932,10 +998,6 @@ chrome-laptop.</source>
<translation>تبدأ التعليقات عند</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>يحتوي السجل الأول على أسماء الحقول</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>يعتبر &apos;\&apos; حرف هروب</translation>
</message>
@@ -944,14 +1006,6 @@ chrome-laptop.</source>
<translation>معاينة</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>تخطيط العمود</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>غير موجود في ملف CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>مُستورد من ملف CSV</translation>
</message>
@@ -964,14 +1018,6 @@ chrome-laptop.</source>
<translation>خطأ</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation type="unfinished"/>
</message>
@@ -1000,12 +1046,64 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>آخر تعديل</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>كلمه السر</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>أُنشئت</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>ملاحظات</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>العنوان</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>المجموعة</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>رابط</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>اسم المستخدم</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n عمود</numerusform><numerusform>%n عمود</numerusform><numerusform>%n عمود</numerusform><numerusform>%n عمود</numerusform><numerusform>%n عمود</numerusform><numerusform>%n عمود</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1024,11 +1122,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>الجذر</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation type="unfinished"/>
</message>
@@ -1069,6 +1162,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>سلة المهملات</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>كلمه السر</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1122,10 +1228,6 @@ Please consider generating a new key file.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation type="unfinished"/>
</message>
@@ -1138,14 +1240,6 @@ Please consider generating a new key file.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
@@ -1206,28 +1300,44 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <source>Key file help</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Key file help</source>
+ <source>?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>?</source>
+ <source>Cannot use database file as key file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select key file...</source>
+ <source>You cannot use your database file as a key file.
+If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Cannot use database file as key file</source>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You cannot use your database file as a key file.
-If you do not have a key file, please leave the field empty.</source>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>يرجى لمس الزر المتواجد على YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1253,10 +1363,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>الأمان</translation>
</message>
<message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Encryption Settings</source>
<translation type="unfinished"/>
</message>
@@ -1264,6 +1370,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>تكامل المتصفح</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1272,18 +1382,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;فصل جميع المتصفحات</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Stored keys</source>
<translation type="unfinished"/>
</message>
@@ -1387,6 +1485,64 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>أُنشئت</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>خطأ مجهول</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1411,10 +1567,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>جولات التحول:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>مؤشر تأخير 1-ثانية</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>إستخدام الذاكرة:</translation>
</message>
@@ -1435,14 +1587,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation type="unfinished"/>
</message>
@@ -1519,16 +1663,6 @@ If you keep this number, your database may be too easy to crack!</source>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation type="unfinished"/>
@@ -1561,6 +1695,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1569,15 +1711,15 @@ If you keep this number, your database may be too easy to crack!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1624,10 +1766,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>إعدادات قاعدة البيانات الإضافية</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>تفعيل &amp;الضغط (مستحسن)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation type="unfinished"/>
</message>
@@ -1660,6 +1798,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1694,43 +1836,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>خطأ مجهول</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1750,125 +1855,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>الاسم</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>القيمة</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1962,6 +1948,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1979,7 +1969,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟</numerusform><numerusform>هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟</numerusform><numerusform>هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟</numerusform><numerusform>هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟</numerusform><numerusform>هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟</numerusform><numerusform>هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2141,6 +2131,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2185,14 +2183,6 @@ Disable safe saves and try again?</source>
<translation>إختر المفتاح السري</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>ملف كبير جدًا ليكون مفتاح سري</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>تعذر فتح المفتاح السري</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>تاريخ دخول</translation>
</message>
@@ -2205,10 +2195,6 @@ Disable safe saves and try again?</source>
<translation>تعديل مُدخل</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>توفير كلمات السر مختلفة.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>خاصية جديدة</translation>
</message>
@@ -2222,36 +2208,20 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n أسبوع</numerusform><numerusform>أسبوع</numerusform><numerusform>أسبوعين</numerusform><numerusform>%n أسابيع</numerusform><numerusform>%n أسبوع</numerusform><numerusform>%n أسابيع</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>تطبيق كلمة المرور المولدة؟</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>هل تريد تطبيق كلمة المرور المولدة لهذا المُدخل؟</translation>
+ <translation><numerusform>%n شهر</numerusform><numerusform>شهر</numerusform><numerusform>شهرين</numerusform><numerusform>%n شهور</numerusform><numerusform>%n شهور</numerusform><numerusform>%n شهور</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>حُدث المُدخل بنجاح.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>New attribute %1</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
@@ -2272,6 +2242,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>إستكشاف</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2347,6 +2337,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2355,14 +2353,6 @@ Disable safe saves and try again?</source>
<translation>تفعيل الطباعة التلقائية لهذا المدخل</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>ورث تسلسل الطباعة التلقائية الإفتراضي من &amp;المجموعة</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;إستخدام تسلسل طباعة تلقائية مخصص:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>مصادقات النافذة</translation>
</message>
@@ -2418,6 +2408,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2453,6 +2451,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2504,18 +2510,10 @@ Disable safe saves and try again?</source>
<translation>كلمه السر:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>تكرار:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>العنوان:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>ملاحظات</translation>
- </message>
- <message>
<source>Presets</source>
<translation>المسبقة</translation>
</message>
@@ -2528,10 +2526,6 @@ Disable safe saves and try again?</source>
<translation>اسم المستخدم:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>انتهاء</translation>
- </message>
- <message>
<source>Url field</source>
<translation type="unfinished"/>
</message>
@@ -2540,22 +2534,10 @@ Disable safe saves and try again?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2587,6 +2569,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>ملاحظات:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2722,10 +2716,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>النموذج</translation>
- </message>
- <message>
<source>Type:</source>
<translation type="unfinished"/>
</message>
@@ -2734,10 +2724,6 @@ Disable safe saves and try again?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password:</source>
<translation>كلمه السر:</translation>
</message>
@@ -2820,96 +2806,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>إستعراض...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>الاسم</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>ملاحظات</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expires</source>
- <translation>انتهاء</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>بحث</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>الطباعة التلقائية</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;إستخدام تسلسل الطباعة التلقائية الإفتراضي للمجموعة الرئيسية</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>تعيين تسلسل الطباعة التلقائية الإفتراضي</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>ملاحظات:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;إستخدم الرمز الإفتراضي</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>استخدم أيقونة مخصصة</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>أضف أيقونة مخصصة</translation>
</message>
@@ -2974,27 +2948,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3113,7 +3095,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>هل أنت متأكد من حذف %n مرفق؟</numerusform><numerusform>هل أنت متأكد من حذف %n مرفق؟</numerusform><numerusform>هل أنت متأكد من حذف %n مرفق؟</numerusform><numerusform>هل أنت متأكد من حذف %n مرفقات؟</numerusform><numerusform>هل أنت متأكد من حذف %n مرفق؟</numerusform><numerusform>هل أنت متأكد من حذف %n مرفقات؟</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3180,6 +3162,17 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3263,11 +3256,51 @@ This may cause the affected plugins to malfunction.</source>
<translation>المرفقات</translation>
</message>
<message>
- <source>Yes</source>
+ <source>Size</source>
+ <translation>الحجم</translation>
+ </message>
+ <message>
+ <source>Group name</source>
<translation type="unfinished"/>
</message>
<message>
- <source>TOTP</source>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3368,6 +3401,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3394,8 +3434,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>إعادة التعيين إلى الإعدادات الافتراضية</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>المرفقات (رمز)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3407,20 +3453,73 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>المجموعة</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3433,14 +3532,10 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: لا يمكن حفظ الملف!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>لا يمكن حفظ ملف برنامج المراسلات الأصلية.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3451,7 +3546,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Cancel</source>
- <translation>ألغ</translation>
+ <translation>ألغاء</translation>
</message>
<message>
<source>Having trouble downloading icons?
@@ -3509,14 +3604,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>تعذر حساب المفتاح الرئيسي</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>تعذر إصدار إستجابة التحدي.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>رؤوس قاعدة البيانات مفقودة</translation>
</message>
@@ -3541,16 +3628,24 @@ You can enable the DuckDuckGo website icon service in the security section of th
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>تعذر إصدار إستجابة التحدي.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>تعذر حساب المفتاح الرئيسي</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3560,10 +3655,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>رؤوس قاعدة البيانات مفقودة</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>تعذر حساب المفتاح الرئيسي</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>حجم رأس تدقيق المجموع غير صحيح</translation>
</message>
@@ -3680,6 +3771,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3693,14 +3788,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>خطأ في الحجم الرابع بخورزامية تشفير بالمفتاح المتناظر </translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>تعذر حساب المفتاح الرئيسي</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>أخفق تسلسل معطيات KDF للخريطة المتنوعة</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3850,10 +3945,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<translation>مفتاح سلسلة الإدخال أو القيمة مفقودة</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>عُثر على مرفق مكرر</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>مُدخل المفتاح الثنائي او القيمة مفقودة</translation>
</message>
@@ -3898,10 +3989,33 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>ملف كبير جدًا ليكون مفتاح سري</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>تعذر فتح المفتاح السري</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
- <translation>يتعذر فتح قاعدة البيانات.</translation>
+ <translation>فتح قاعدة البيانات غير ممكن.</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
@@ -3960,10 +4074,6 @@ Line %2, column %3</source>
<translation>الجذر</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>تعذر حساب المفتاح الرئيسي</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>تعذر تحويل المفتاح</translation>
</message>
@@ -4064,6 +4174,10 @@ Line %2, column %3</source>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4170,13 +4284,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>تنسيق ملف المفتاح القديم</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation type="unfinished"/>
@@ -4242,6 +4349,13 @@ Message: %2</source>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4250,18 +4364,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;قاعدة البيانات</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;قواعد البيانات الحديثة</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;مساعدة</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>المُدخلات</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;المجموعات</translation>
</message>
@@ -4278,46 +4384,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;حول</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;فتح قاعدة البيانات...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;حفظ قاعدة البيانات</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;إغلاق قاعدة البيانات</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;حذف مدخل</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;تعديل المجموعة</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;حذف المجموعة</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>حفظ قاعدة البيانات بأسم...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>إعدادات قاعدة البيانات</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;إستنساخ مدخل</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>نسخ &amp;اسم المستخدم</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>نسخ اسم المستخدم إلى الحافظة</translation>
</message>
@@ -4330,10 +4400,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;الإعدادات</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;قفل قواعد البيانات</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;العنوان</translation>
</message>
@@ -4358,14 +4424,6 @@ Are you sure you want to continue with this file?</source>
<translation>نسخ الملاحظات إلى الحافظة</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;تصدير كملف CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>إعداد TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>نسخ &amp;TOTP</translation>
</message>
@@ -4410,10 +4468,6 @@ This version is not meant for production use.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation type="unfinished"/>
@@ -4423,180 +4477,358 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
+ <source>Create a new database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>TOTP...</source>
+ <source>Merge from another KDBX database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New database...</source>
+ <source>Add a new entry</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Create a new database</source>
+ <source>View or edit entry</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Merge from database...</source>
+ <source>Add a new group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Merge from another KDBX database</source>
+ <source>Perform &amp;Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New entry</source>
+ <source>Open &amp;URL</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Add a new entry</source>
+ <source>Import a KeePass 1 database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Edit entry</source>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>View or edit entry</source>
+ <source>Check for updates on startup?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New group</source>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Add a new group</source>
+ <source>You can always check for updates manually from the application menu.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Change master &amp;key...</source>
+ <source>&amp;Export</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Database settings...</source>
+ <source>Sort &amp;A-Z</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation> نسخ و كلمة السر</translation>
+ <source>Sort &amp;Z-A</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
+ <source>&amp;Password Generator</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open &amp;URL</source>
+ <source>Import a 1Password Vault</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePass 1 database...</source>
+ <source>&amp;Getting Started</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a KeePass 1 database</source>
+ <source>&amp;User Guide</source>
<translation type="unfinished"/>
</message>
<message>
- <source>CSV file...</source>
+ <source>&amp;Keyboard Shortcuts</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a CSV file</source>
+ <source>&amp;Recent Databases</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP...</source>
+ <source>&amp;Entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP QR Code...</source>
+ <source>Copy Att&amp;ribute</source>
<translation type="unfinished"/>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <source>TOTP</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Check for updates on startup?</source>
+ <source>View</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
+ <source>Theme</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
+ <source>&amp;Check for Updates</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export</source>
+ <source>&amp;Open Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Check for Updates...</source>
+ <source>&amp;Save Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
+ <source>&amp;Close Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;New Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>&amp;Merge From Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>&amp;New Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>تحميل رمز المفضلة</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>&amp;Delete Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;New Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>&amp;Edit Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>&amp;Delete Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>Download All &amp;Favicons…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Sa&amp;ve Database As…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>Database &amp;Security…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>Database &amp;Reports...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Statistics, health check, etc.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>إظهار TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>إعدادات قاعدة البيانات</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>إلغاء قفل قاعدة البيانات</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>قفل قاعدة بيانات</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4686,10 +4918,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation type="unfinished"/>
</message>
@@ -4701,26 +4929,30 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Encryption Settings</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
- <name>NewDatabaseWizardPageEncryption</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Encryption Settings</source>
+ <source>Database Credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <source>A set of credentials known only to you that protects your database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
+ <source>Encryption Settings</source>
<translation type="unfinished"/>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4736,6 +4968,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4910,6 +5149,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4934,25 +5185,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4961,10 +5200,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>كلمه السر:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>القوة</translation>
@@ -5014,14 +5249,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>فاصل الكلمة:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>نسخ</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>قبول</translation>
- </message>
- <message>
<source>Close</source>
<translation>إغلاق</translation>
</message>
@@ -5118,14 +5345,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
</message>
@@ -5146,14 +5365,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5202,10 +5413,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5218,7 +5425,43 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>عدد الكلمات:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>مسح</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5232,6 +5475,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5371,10 +5666,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>مسار المُدخل للإضافة.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>نسخ كلمة المرور الإدخال إلى الحافظة.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>مسار المُدخل للقص.</translation>
@@ -5532,14 +5823,6 @@ Available commands:
<translation>تكامل المتصفح</translation>
</message>
<message>
- <source>Press</source>
- <translation>اضغط</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>سلبي</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>وكيل SSH</translation>
</message>
@@ -5578,10 +5861,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5593,14 +5872,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
@@ -5820,10 +6091,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>file empty</source>
<translation type="unfinished"/>
</message>
@@ -5832,18 +6099,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – مستحسن)</translation>
</message>
@@ -6007,7 +6262,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Auto-Type</source>
- <translation>الطباعة التلقائية</translation>
+ <translation> نمط تلقائي</translation>
</message>
<message>
<source>KeeShare (signed and unsigned sharing)</source>
@@ -6094,10 +6349,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6114,10 +6365,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6158,10 +6405,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6254,10 +6497,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6273,10 +6512,6 @@ Kernel: %3 %4</source>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6289,6 +6524,193 @@ Kernel: %3 %4</source>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6325,6 +6747,290 @@ Kernel: %3 %4</source>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>ضعيف جدا</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>ضعيفة</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>العنوان</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>العنوان</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>الاسم</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>القيمة</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>no</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6358,6 +7064,14 @@ Kernel: %3 %4</source>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6465,26 +7179,10 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>المجموعة</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
<translation type="unfinished"/>
</message>
@@ -6493,39 +7191,19 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>إعدادات قاعدة البيانات</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>إلغاء قفل قاعدة البيانات</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>قفل قاعدة بيانات</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -6799,10 +7477,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6971,6 +7645,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7061,6 +7742,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>اضغط</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>سلبي</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7075,19 +7803,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
+ <source>Refresh hardware tokens</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
+ <source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/share/translations/keepassx_en_GB.ts b/share/translations/keepassx_bg.ts
index 34ecfd3d1..e44bb2158 100644
--- a/share/translations/keepassx_en_GB.ts
+++ b/share/translations/keepassx_bg.ts
@@ -1,190 +1,198 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="en_GB" version="2.1">
+<?xml version="1.0" ?><!DOCTYPE TS><TS language="bg" version="2.1">
<context>
<name>AboutDialog</name>
<message>
<source>About KeePassXC</source>
- <translation>About KeePassXC</translation>
+ <translation>Относно KeePassXC</translation>
</message>
<message>
<source>About</source>
- <translation>About</translation>
+ <translation>Относно</translation>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
- <translation>Contributors</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Debug Info</source>
- <translation>Debug Info</translation>
+ <translation>Информация за отстраняване на грешки</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>Include the following information whenever you report a bug:</translation>
+ <translation>Включвайте следната информация, когато съобщавате за грешка:</translation>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Copy to clipboard</translation>
+ <translation>Копиране в клипборда</translation>
</message>
<message>
<source>Project Maintainers:</source>
- <translation>Project Maintainers:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Enable SSH Agent (requires restart)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation>Използвайте OpenSSH за Windows вместо Pageant</translation>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation>Use OpenSSH for Windows instead of Pageant</translation>
+ <source>Enable SSH Agent integration</source>
+ <translation>Включване на интеграция на SSH Agent</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK стойност</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK презаписване</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(празно)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Няма SSH Agent сокет. Уверете, че съществува променлива на средата SSH_AUTH_SOCK или я презапишете.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH Agent връзката работи!</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
<message>
<source>Application Settings</source>
- <translation>Application Settings</translation>
+ <translation>Настройки на приложението</translation>
</message>
<message>
<source>General</source>
- <translation>General</translation>
+ <translation>Основни</translation>
</message>
<message>
<source>Security</source>
- <translation>Security</translation>
+ <translation>Сигурност</translation>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Access error for config file %1</translation>
+ <translation>Грешка при достъп на конфигурационния файл %1</translation>
</message>
<message>
<source>Icon only</source>
- <translation>Icon only</translation>
+ <translation>Само икона</translation>
</message>
<message>
<source>Text only</source>
- <translation>Text only</translation>
+ <translation>Само текст</translation>
</message>
<message>
<source>Text beside icon</source>
- <translation>Text beside icon</translation>
+ <translation>Текст до иконата</translation>
</message>
<message>
<source>Text under icon</source>
- <translation>Text under icon</translation>
+ <translation>Текст под икона</translation>
</message>
<message>
<source>Follow style</source>
- <translation>Follow style</translation>
+ <translation>Следване на стила</translation>
</message>
<message>
<source>Reset Settings?</source>
- <translation type="unfinished"/>
+ <translation>Да се нулират настройките?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
+ <translation>Наистина ли искате да нулирате стойностите по подразбиране на всички общи настройки и настройки за защита?</translation>
+ </message>
+ <message>
+ <source>Monochrome (light)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Цветни</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
<message>
<source>Basic Settings</source>
- <translation>Basic Settings</translation>
+ <translation>Основни настройки</translation>
</message>
<message>
<source>Startup</source>
- <translation>Startup</translation>
+ <translation>Стартиране</translation>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>Start only a single instance of KeePassXC</translation>
+ <translation>Започнете само една инстанция на KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Minimise window at application startup</translation>
+ <translation>Минимизиране на прозореца при стартиране на приложението</translation>
</message>
<message>
<source>File Management</source>
- <translation>File Management</translation>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Safely save database files (may be incompatible with Dropbox, etc)</translation>
+ <translation>Управление на файлове</translation>
</message>
<message>
<source>Backup database file before saving</source>
- <translation>Backup database file before saving</translation>
+ <translation>Архивиране на файла с базата данни преди записване</translation>
</message>
<message>
<source>Automatically save after every change</source>
- <translation>Automatically save after every change</translation>
+ <translation>Автоматично записване след всяка промяна</translation>
</message>
<message>
<source>Automatically save on exit</source>
- <translation>Automatically save on exit</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</translation>
+ <translation>Автоматично записване при изход</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
- <translation>Automatically reload the database when modified externally</translation>
+ <translation>Автоматично презареждане на базата данни при външно модифициране</translation>
</message>
<message>
<source>Entry Management</source>
- <translation>Entry Management</translation>
+ <translation>Управление на записи</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>Use group icon on entry creation</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>Hide the entry preview panel</translation>
- </message>
- <message>
- <source>General</source>
- <translation>General</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Hide toolbar (icons)</translation>
+ <translation>Използване на груповата икона при създаване на запис</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
- <translation>Minimise instead of app exit</translation>
+ <translation>Минимизиране вместо излизане от приложение</translation>
</message>
<message>
<source>Show a system tray icon</source>
- <translation>Show a system tray icon</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation>Dark system tray icon</translation>
+ <translation>Показване на икона в системния панел</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
- <translation>Hide window to system tray when minimised</translation>
+ <translation>Скриване на прозореца в системния панел при минимизиране</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -192,44 +200,32 @@
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
- <translation>Use entry title to match windows for global Auto-Type</translation>
+ <translation>Използвайте заглавието на записа, за да съответствате на прозорците за глобалния Auto-Type</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
- <translation>Use entry URL to match windows for global Auto-Type</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Always ask before performing Auto-Type</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Global Auto-Type shortcut</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Auto-Type typing delay</translation>
+ <translation>Винаги питай преди да извършиш Auto-Type</translation>
</message>
<message>
<source> ms</source>
<comment>Milliseconds</comment>
- <translation> ms</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation>Auto-Type start delay</translation>
+ <translation>ms</translation>
</message>
<message>
<source>Movable toolbar</source>
- <translation>Movable toolbar</translation>
+ <translation>Преместваща се лента с инструменти</translation>
</message>
<message>
<source>Remember previously used databases</source>
- <translation type="unfinished"/>
+ <translation>Запаметяване на предишни използвани бази данни</translation>
</message>
<message>
<source>Load previously open databases on startup</source>
- <translation type="unfinished"/>
+ <translation>Зареждане на последно отворената бази данни при стартиране</translation>
</message>
<message>
<source>Remember database key files and security dongles</source>
@@ -237,39 +233,35 @@
</message>
<message>
<source>Check for updates at application startup once per week</source>
- <translation type="unfinished"/>
+ <translation>Проверка за актуализации при стартиране на приложението веднъж седмично</translation>
</message>
<message>
<source>Include beta releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style:</source>
- <translation type="unfinished"/>
+ <translation>Включване на бета версии при проверка за актуализации</translation>
</message>
<message>
<source>Language:</source>
- <translation type="unfinished"/>
+ <translation>Език:</translation>
</message>
<message>
<source>(restart program to activate)</source>
- <translation type="unfinished"/>
+ <translation>(рестартиране програма за активиране)</translation>
</message>
<message>
<source>Minimize window after unlocking database</source>
- <translation type="unfinished"/>
+ <translation>Намаляване на прозореца след отключване на базата данни</translation>
</message>
<message>
<source>Minimize when opening a URL</source>
- <translation type="unfinished"/>
+ <translation>Минимизиране при отваряне на URL</translation>
</message>
<message>
<source>Hide window when copying to clipboard</source>
- <translation type="unfinished"/>
+ <translation>Скриване на прозореца при копиране в клипборда</translation>
</message>
<message>
<source>Minimize</source>
- <translation type="unfinished"/>
+ <translation>Минимизиране</translation>
</message>
<message>
<source>Drop to background</source>
@@ -286,119 +278,143 @@
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> sec</translation>
+ <translation>сек</translation>
</message>
<message>
<source>Toolbar button style</source>
- <translation type="unfinished"/>
+ <translation>Стил на бутоните от лентата с инструменти</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation type="unfinished"/>
+ <source>Language selection</source>
+ <translation>Избор на език</translation>
</message>
<message>
- <source>Language selection</source>
- <translation type="unfinished"/>
+ <source>Global auto-type shortcut</source>
+ <translation>Глобален пряк път за auto-type</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation type="unfinished"/>
+ <source>Auto-type character typing delay milliseconds</source>
+ <translation>Забавяне на auto-type въвеждане на знаци милисекунди</translation>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Auto-type start delay milliseconds</source>
+ <translation>Забавяне на auto-type старта милисекунди</translation>
+ </message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Автоматично стартиране на KeePassXC при стартиране на системата</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Безопасно записване на файловете с бази данни (деактивирайте, ако имате проблеми с Dropbox и т.н.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Потребителски интерфейс</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Стил на бутоните от лентата с инструменти:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>Tray icon type:</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Нулиране на настройките по подразбиране...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Забавяне на auto-type въвеждането:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Глобален Auto-Type пряк път:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Забавяне на Auto-Type включването:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
<message>
<source>Timeouts</source>
- <translation>Timeouts</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Clear clipboard after</source>
- <translation>Clear clipboard after</translation>
+ <translation>Изчистване на клипборда след</translation>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> sec</translation>
+ <translation>сек</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>Lock databases after inactivity of</translation>
+ <translation>Заключване на бази данни след бездействие от</translation>
</message>
<message>
<source> min</source>
- <translation> min</translation>
+ <translation>мин</translation>
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation>Forget TouchID after inactivity of</translation>
+ <translation>Забравяне на TouchID след бездействие</translation>
</message>
<message>
<source>Convenience</source>
- <translation>Convenience</translation>
+ <translation>Удобство</translation>
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>Lock databases when session is locked or lid is closed</translation>
+ <translation>Заключване на базите данни при заключена сесия или затваряне на капака</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Forget TouchID when session is locked or lid is closed</translation>
+ <translation>Забравете TouchID, когато сесията е заключена или капакът е затворен</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>Lock databases after minimising the window</translation>
+ <translation>Заключи базите данни след минимизиране на прозореца</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Re-lock previously locked database after performing Auto-Type</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Don&apos;t require password repeat when it is visible</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Don&apos;t hide passwords when editing them</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Don&apos;t use placeholder for empty password fields</translation>
+ <translation>Повторно заключване на предварително заключена база данни след извършване на Auto-Type</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Hide passwords in the entry preview panel</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Hide entry notes by default</source>
- <translation>Hide entry notes by default</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
- <translation>Privacy</translation>
+ <translation>Поверителност</translation>
</message>
<message>
<source>Use DuckDuckGo service to download website icons</source>
- <translation type="unfinished"/>
+ <translation>Използвайте DuckDuckGo за изтегляне на иконите на уебсайта</translation>
</message>
<message>
<source>Clipboard clear seconds</source>
- <translation type="unfinished"/>
+ <translation>Изчистване на клипборда секунди</translation>
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation type="unfinished"/>
+ <translation>Нулиране при неактивността на Touch ID</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
@@ -407,10 +423,22 @@
<message>
<source> min</source>
<comment>Minutes</comment>
- <translation> min</translation>
+ <translation>мин</translation>
</message>
<message>
<source>Clear search query after</source>
+ <translation>Изчистване на заявката за търсене след</translation>
+ </message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Изискване на парола, когато е видима</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Скриване на пароли при редактирането им</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
<translation type="unfinished"/>
</message>
</context>
@@ -418,7 +446,7 @@
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Couldn&apos;t find an entry that matches the window title:</translation>
+ <translation>Не може да се намери запис, който отговаря на заглавието на прозореца:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
@@ -430,23 +458,23 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>The Syntax of your Auto-Type statement is incorrect!</translation>
+ <translation>Синтаксисът на вашия Auto-type е неправилен!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>This Auto-Type command contains a very long delay. Do you really want to proceed?</translation>
+ <translation>Тази Auto-Type команда съдържа много голямо забавяне. Наистина ли искате да продължите?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>This Auto-Type command contains very slow key presses. Do you really want to proceed?</translation>
+ <translation>Тази Auto-Type команда съдържа много бавни натискания на клавиши. Наистина ли искате да продължите?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</translation>
+ <translation>Тази Auto-Type команда съдържа аргументи, които се повтарят много често. Наистина ли искате да продължите?</translation>
</message>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Нужно е разрешение</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
@@ -457,52 +485,52 @@
<name>AutoTypeAssociationsModel</name>
<message>
<source>Window</source>
- <translation>Window</translation>
+ <translation>Прозорец</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Sequence</translation>
+ <translation>Последователност</translation>
</message>
<message>
<source>Default sequence</source>
- <translation>Default sequence</translation>
+ <translation>Последователност по подразбиране</translation>
</message>
</context>
<context>
<name>AutoTypeMatchModel</name>
<message>
<source>Group</source>
- <translation>Group</translation>
+ <translation>Група</translation>
</message>
<message>
<source>Title</source>
- <translation>Title</translation>
+ <translation>Заглавие</translation>
</message>
<message>
<source>Username</source>
- <translation>Username</translation>
+ <translation>Портебител</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Sequence</translation>
+ <translation>Последователност</translation>
</message>
</context>
<context>
<name>AutoTypeMatchView</name>
<message>
<source>Copy &amp;username</source>
- <translation>Copy &amp;username</translation>
+ <translation>Копиране на &amp;username</translation>
</message>
<message>
<source>Copy &amp;password</source>
- <translation type="unfinished"/>
+ <translation>Копиране на &amp;password</translation>
</message>
</context>
<context>
<name>AutoTypePlatformMac</name>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Изисква се разрешение</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
@@ -517,260 +545,320 @@
</message>
<message>
<source>Select entry to Auto-Type:</source>
- <translation>Select entry to Auto-Type:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Search...</source>
- <translation>Search...</translation>
+ <translation>Търсене...</translation>
</message>
</context>
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser Confirm Access</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - заявка за достъп до браузъра</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Remember this decision</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 иска достъп до следните записи:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Allow</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Запомни достъпа до избраните записи</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Deny</translation>
+ <source>Remember</source>
+ <translation>Запомни</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</translation>
+ <source>Allow access to entries</source>
+ <translation>Разреши достъп до записите</translation>
</message>
<message>
- <source>Allow access</source>
- <translation type="unfinished"/>
+ <source>Allow Selected</source>
+ <translation>Разреши избраните</translation>
</message>
<message>
- <source>Deny access</source>
- <translation type="unfinished"/>
+ <source>Deny All</source>
+ <translation>Забрани всички</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Изключи за този сайт</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-Browser Save Entry</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Ok</source>
- <translation>Ok</translation>
+ <translation>OK</translation>
</message>
<message>
<source>Cancel</source>
- <translation>Cancel</translation>
+ <translation>Отказ</translation>
</message>
<message>
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
- <translation>You have multiple databases open.
-Please select the correct database for saving credentials.</translation>
+ <translation>Имате отворени няколко бази данни.
+Изберете правилната база данни за записване на идентификационни данни.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Искане за нова асоциация на ключове</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>This is required for accessing your databases with KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Записване и разрешаване на достъп</translation>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Презаписване на съществуващ ключ?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Enable integration for these browsers:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Вече съществува споделен шифроващ ключ с име &quot;%1&quot;.
+Искате ли да го презапишете?</translation>
+ </message>
+ <message>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Актуализация на записа</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Желаете ли да актуализирате информацията в %1 -%2?</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Abort</source>
+ <translation>Отказ</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Конвертиране на атрибути към потребителски данни...</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Конвертиране на KeePassHTTP атрибути</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Show a &amp;notification when credentials are requested</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Успешно преобразувани атрибути от %1 запис(и).
+Преместени са %2 ключа в персонализираните данни.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Успешно преместени %n ключове в потребителски данни.</numerusform><numerusform>Успешно преместени %n ключове в персонализираните данни.</numerusform></translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Re&amp;quest to unlock the database if it is locked</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Няма записи с намерени KeePassHTTP атрибути!</translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Only entries with the same scheme (http://, https://, ...) are returned.</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Активната база данни не съдържа запис с KeePassHTTP атрибути.</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Match URL scheme (e.g., https://...)</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Открити са остарели интеграционни настройки на браузъра</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Only returns the best matches for a specific URL instead of all entries for the whole domain.</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Създаване на нова група</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Return only best-matching credentials</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Заявка за създаване на нова група &quot;%1&quot; е получена.
+Желаете ли да създадете тази група?
+</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sort &amp;matching credentials by title</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Вашите настройки за KeePassXC-Browser трябва да бъдат преместени в настройките на базата данни.
+Това е необходимо, за да се поддържа текущите връзки на браузъра.
+Искате ли да мигрирате съществуващите настройки сега?</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sort matching credentials by &amp;username</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Не показвай това предупреждение отново</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Advanced</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Never &amp;ask before accessing credentials</translation>
+ <source>Dialog</source>
+ <translation>Диалог</translation>
</message>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Never ask before &amp;updating credentials</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Това е необходимо за достъп до вашите бази данни с KeePassXC-Browser</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Searc&amp;h in all opened databases for matching credentials</translation>
+ <source>Enable browser integration</source>
+ <translation>Разрешаване на интеграцията на браузъра</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatically creating or updating string fields is not supported.</translation>
+ <source>General</source>
+ <translation>Основни</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Return advanced string fields which start with &quot;KPH: &quot;</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Включване на интегрирането на тези браузъри:</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Update &amp;native messaging manifest files at startup</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Support a proxy application between KeePassXC and browser extension.</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Use a &amp;proxy application between KeePassXC and browser extension</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Use a custom proxy location if you installed a proxy manually.</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Use a &amp;custom proxy location</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Browse...</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Select custom proxy location</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Показвай известие при поискване на идентификационни данни</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Искане за отключване на базата данни, ако е заключена</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Executable Files</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Връщат се само записи със същата схема (http://, https://, ...).</translation>
</message>
<message>
- <source>All Files</source>
- <translation>All Files</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Съвпадение на схемата за URL (напр. https://...)</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Do not ask permission for HTTP &amp;Basic Auth</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Връща само най-добрите съвпадения за конкретен URL адрес вместо всички записи за целия домейн.</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Връща само идентификационните данни с най-добро съвпадение</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Please see special instructions for browser extension use below</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Връща невалидни идентификационни данни. Низ [изтекъл] се добавя към заглавието.</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Позволяване на връщане на изтекли идентификационни данни</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation type="unfinished"/>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Всички бази данни, свързани с разширението, ще върнат съвпадащи идентификационни данни.</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation type="unfinished"/>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Търсене във всички отворени бази данни за съвпадащи идентификационни данни</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation type="unfinished"/>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Сортиране на съвпадащи идентификационни данни по заглавие</translation>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Сортиране на съвпадащи идентификационни данни по потребителско име</translation>
+ </message>
+ <message>
+ <source>Advanced</source>
+ <translation>Допълнителни</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Никога не питай преди достъпване на идентификационни данни</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Никога не питай преди актуализиране на идентификационни данни</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Не искай разрешение за HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Автоматично създаване или актуализиране на низови полета не се поддържа.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
+ <translation>Не показвайте изскачащ прозорец, който предполага миграция на остарели настройки на KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Не питай за миграция на KeePassHTTP настройки.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
<translation type="unfinished"/>
</message>
<message>
@@ -782,102 +870,80 @@ Please select the correct database for saving credentials.</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: New key association request</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Save and allow access</translation>
+ <source>Browser type:</source>
+ <translation>Тип на браузъра:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Overwrite existing key?</translation>
+ <source>Toolbar button style</source>
+ <translation>Стил на бутоните от лентата с инструменти</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</translation>
+ <source>Config Location:</source>
+ <translation>Местоположение на конфигурацията:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Update Entry</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Do you want to update the information in %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abort</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Converting attributes to custom data…</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Converted KeePassHTTP attributes</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: No entry with KeePassHTTP attributes found!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser е необходим, за да работи интеграцията с браузъра.&lt;br /&gt;Изтеглете го тук за %1 и %2 и %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>The active database does not contain an entry with KeePassHTTP attributes.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Моля, вижте специалните инструкции за използване на разширението на браузъра по-долу</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Legacy browser integration settings detected</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Грешка:&lt;/b&gt; Не може да бъде намерено потребителското местоположението на прокси сървъра!&lt;br/&gt;Интеграцията с браузъра НЯМА ДА РАБОТИ без прокси приложението.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Create a new group</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Предупреждение:&lt;/b&gt; Следните опции могат да бъдат опасни!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</translation>
+ <source>Executable Files</source>
+ <translation>Изпълними файлове</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</translation>
+ <source>All Files</source>
+ <translation>Всички файлове</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Don&apos;t show this warning again</translation>
+ <source>Select custom proxy location</source>
+ <translation>Избор на потребитерско местоположение на прокси сървър</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -885,108 +951,87 @@ chrome-laptop.</source>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
- <translation>Clone Options</translation>
+ <translation>Клонирай опциите</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Append &apos; - Clone&apos; to title</translation>
+ <translation>Добавяне на &apos; - Clone&apos; към заглавието</translation>
</message>
<message>
<source>Replace username and password with references</source>
- <translation>Replace username and password with references</translation>
+ <translation>Замяна на потребителско име и парола с референции</translation>
</message>
<message>
<source>Copy history</source>
- <translation>Copy history</translation>
+ <translation>Копиране на хронологията</translation>
</message>
</context>
<context>
<name>CsvImportWidget</name>
<message>
<source>Import CSV fields</source>
- <translation>Import CSV fields</translation>
+ <translation>Импортиране на полета в CSV</translation>
</message>
<message>
<source>filename</source>
- <translation>filename</translation>
+ <translation>име</translation>
</message>
<message>
<source>size, rows, columns</source>
- <translation>size, rows, columns</translation>
+ <translation>размер, редове, колони</translation>
</message>
<message>
<source>Encoding</source>
- <translation>Encoding</translation>
+ <translation>Кодиране</translation>
</message>
<message>
<source>Codec</source>
- <translation>Codec</translation>
+ <translation>Кодек</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>Text is qualified by</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Fields are separated by</source>
- <translation>Fields are separated by</translation>
+ <translation>Полетата са разделени с</translation>
</message>
<message>
<source>Comments start with</source>
- <translation>Comments start with</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>First record has field names</translation>
+ <translation>Коментарите започват с</translation>
</message>
<message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>Consider &apos;\&apos; an escape character</translation>
+ <translation>Приеми за &apos;\&apos; символ за край</translation>
</message>
<message>
<source>Preview</source>
- <translation>Preview</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Column layout</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Not present in CSV file</translation>
+ <translation>Преглед</translation>
</message>
<message>
<source>Imported from CSV file</source>
- <translation>Imported from CSV file</translation>
+ <translation>Импортиран от CSV файл</translation>
</message>
<message>
<source>Original data: </source>
- <translation>Original data: </translation>
+ <translation>Оригинални данни:</translation>
</message>
<message>
<source>Error</source>
- <translation>Error</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation>Empty fieldname %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>column %1</translation>
+ <translation>Грешка</translation>
</message>
<message>
<source>Error(s) detected in CSV file!</source>
- <translation>Error(s) detected in CSV file!</translation>
+ <translation>Грешки, открити в CSV файл!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>[%n повече съобщения пропуснати]</numerusform><numerusform>[още %n съобщения са пропуснати]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>CSV import: writer has errors:
-%1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Text qualification</source>
@@ -994,22 +1039,74 @@ chrome-laptop.</source>
</message>
<message>
<source>Field separation</source>
- <translation type="unfinished"/>
+ <translation>Разделител на полета</translation>
</message>
<message>
<source>Number of header lines to discard</source>
- <translation type="unfinished"/>
+ <translation>Брой на редовете с хедъри за отхвърляне</translation>
</message>
<message>
<source>CSV import preview</source>
- <translation type="unfinished"/>
+ <translation>Визуализация на импортирането от CSV</translation>
+ </message>
+ <message>
+ <source>Column Association</source>
+ <translation>Асоциация на колоната</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Последно променена</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Парола</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Създаден</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Бележки</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заглавие</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Група</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>Url</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Портебител</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Прескочени хедър редове</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Първият ред съдържа имената на полета</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Не е налично</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Колона %1</translation>
</message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n колона(и)</numerusform><numerusform>%n колона(и)</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1018,140 +1115,137 @@ chrome-laptop.</source>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n байта(ите)</numerusform><numerusform>%n байт(а)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n ред(а)</numerusform><numerusform>%n ред(а)</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Root</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
- <translation>File %1 does not exist.</translation>
+ <translation>Файлът %1 не съществува.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
- <translation>Unable to open file %1.</translation>
+ <translation>Файлът %1 не може да бъде отворен.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>Error while reading the database: %1</translation>
+ <translation>Грешка при четене на базата данни: %1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>File cannot be written as it is opened in read-only mode.</translation>
+ <translation>Файлът не може да бъде записан докато е отворен в режим само за четене.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Key not transformed. This is a bug, please report it to the developers!</translation>
+ <translation>Ключът не е трансформиран. Това е бъг, моля докладвайте за това на разработчиците!</translation>
</message>
<message>
<source>%1
Backup database located at %2</source>
- <translation type="unfinished"/>
+ <translation>%1
+Резервана база данни се намира на %2</translation>
</message>
<message>
<source>Could not save, database does not point to a valid file.</source>
- <translation type="unfinished"/>
+ <translation>Не може да се запише, базата данни не сочи към валиден файл.</translation>
</message>
<message>
<source>Could not save, database file is read-only.</source>
- <translation type="unfinished"/>
+ <translation>Не може да се запише, файлът с базата данни е само за четене.</translation>
</message>
<message>
<source>Database file has unmerged changes.</source>
- <translation type="unfinished"/>
+ <translation>Файлът с базата данни има неслети промени</translation>
</message>
<message>
<source>Recycle Bin</source>
- <translation>Recycle Bin</translation>
+ <translation>Кошче</translation>
+ </message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Пароли</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Записването на базата данни вече е в ход.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Не може да се запише, базата данни не е инициализирана!</translation>
</message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Unlock Database - KeePassXC</translation>
+ <translation>Отключване на база данни - KeePassXC</translation>
</message>
</context>
<context>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>Key File:</translation>
+ <translation>Файл-ключ:</translation>
</message>
<message>
<source>Refresh</source>
- <translation>Refresh</translation>
+ <translation>Обновяване</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Legacy key file format</translation>
+ <translation>Остарял файлов формат на ключа</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>You are using a legacy key file format which may become
-unsupported in the future.
+ <translation>Използвате остарял файлов формат на ключа, който може да стане
+неподдържан в бъдеще.
-Please consider generating a new key file.</translation>
+Помислете за генериране на нов файл с ключове.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
- <translation>Don&apos;t show this warning again</translation>
+ <translation>Не показвай това предупреждение отново</translation>
</message>
<message>
<source>All files</source>
- <translation>All files</translation>
+ <translation>Всички файлове</translation>
</message>
<message>
<source>Key files</source>
- <translation>Key files</translation>
+ <translation>Файл-ключове</translation>
</message>
<message>
<source>Select key file</source>
- <translation>Select key file</translation>
+ <translation>Избор на файл-ключ</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
+ <translation>Грешка при отваряне на файл-ключ: %1</translation>
</message>
<message>
<source>Unlock KeePassXC Database</source>
- <translation type="unfinished"/>
+ <translation>Отключване на KeePassXC базата данни</translation>
</message>
<message>
<source>Enter Password:</source>
- <translation type="unfinished"/>
+ <translation>Въведете парола:</translation>
</message>
<message>
<source>Password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
+ <translation>Поле за парола</translation>
</message>
<message>
<source>Hardware key slot selection</source>
- <translation type="unfinished"/>
+ <translation>Избор на слот на хардуерен ключ</translation>
</message>
<message>
<source>Browse for key file</source>
@@ -1159,312 +1253,369 @@ Please consider generating a new key file.</translation>
</message>
<message>
<source>Browse...</source>
- <translation>Browse...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Refresh hardware tokens</source>
- <translation type="unfinished"/>
+ <translation>Обновяване на хардуерни токени</translation>
</message>
<message>
<source>Hardware Key:</source>
- <translation type="unfinished"/>
+ <translation>Хардуерен ключ:</translation>
</message>
<message>
<source>Hardware key help</source>
- <translation type="unfinished"/>
+ <translation>Помощ за хардуерен ключ</translation>
</message>
<message>
<source>TouchID for Quick Unlock</source>
- <translation type="unfinished"/>
+ <translation>TouchID за бързо отключване</translation>
</message>
<message>
<source>Clear</source>
- <translation>Clear</translation>
+ <translation>Почисти</translation>
</message>
<message>
<source>Clear Key File</source>
- <translation type="unfinished"/>
+ <translation>Изчистване на файл-ключ</translation>
</message>
<message>
<source>Unlock failed and no password given</source>
- <translation type="unfinished"/>
+ <translation>Грешка при отключване и не е върната парола</translation>
</message>
<message>
<source>Unlocking the database failed and you did not enter a password.
Do you want to retry with an &quot;empty&quot; password instead?
To prevent this error from appearing, you must go to &quot;Database Settings / Security&quot; and reset your password.</source>
- <translation type="unfinished"/>
+ <translation>Отключването на базата данни е неуспешно и не сте въвели парола.
+Искате ли вместо това да опитате отново с &quot;празна&quot; парола?
+
+За да предотвратите появата на тази грешка, трябва да отидете на &quot;Настройки на базата данни / сигурност&quot; и да нулирате паролата си.</translation>
</message>
<message>
<source>Retry with empty password</source>
- <translation type="unfinished"/>
+ <translation>Опитай отново с празна парола</translation>
</message>
<message>
<source>Enter Additional Credentials (if any):</source>
- <translation type="unfinished"/>
+ <translation>Въведете допълнителни идентификационни данни (ако има такива):</translation>
</message>
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;p&gt;Можете да използвате хардуерен ключ за защита, като например &lt;strong&gt;YubiKey&lt;/strong&gt; или &lt;strong&gt;OnlyKey&lt;/strong&gt; със слотове, конфигурирани за HMAC-SHA1.&lt;/p&gt;
+&lt;p&gt;Щракнете за повече информация...&lt;/p&gt;</translation>
</message>
<message>
<source>Key file help</source>
- <translation type="unfinished"/>
+ <translation>Помощ за файл-ключове</translation>
</message>
<message>
<source>?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select key file...</source>
- <translation type="unfinished"/>
+ <translation>?</translation>
</message>
<message>
<source>Cannot use database file as key file</source>
- <translation type="unfinished"/>
+ <translation>Не може да се използва файлът с базата данни като файл-ключ</translation>
</message>
<message>
<source>You cannot use your database file as a key file.
If you do not have a key file, please leave the field empty.</source>
- <translation type="unfinished"/>
+ <translation>Не можете да използвате файла с базата данни като файл-ключ.
+Ако нямате файл-ключ, оставете полето празно.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;В допълнение към парола, можете да използвате таен файл за подобряване на защитата на вашата база данни. Този файл може да бъде генериран в настройките за защита на вашата база данни.&lt;/p&gt;&lt;p&gt;Това &lt;strong&gt;не&lt;/strong&gt; е вашият *.kdbx файл с база данни!&lt;br&gt;Ако нямате файл-ключ, оставете това поле празно.&lt;/p&gt;&lt;p&gt;Щракнете за повече информация...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Файл-ключ за отключване на базата данни</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Моля, докоснете бутона на yubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Откриване на хардуерни ключове...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Не са открити хардуерни ключове</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Избор на хардуерен ключ...</translation>
</message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
<message>
<source>Passwords</source>
- <translation>Passwords</translation>
+ <translation>Пароли</translation>
</message>
</context>
<context>
<name>DatabaseSettingsDialog</name>
<message>
<source>Advanced Settings</source>
- <translation>Advanced Settings</translation>
+ <translation>Разширени настройки</translation>
</message>
<message>
<source>General</source>
- <translation>General</translation>
+ <translation>Основни</translation>
</message>
<message>
<source>Security</source>
- <translation>Security</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation>Master Key</translation>
+ <translation>Сигурност</translation>
</message>
<message>
<source>Encryption Settings</source>
- <translation>Encryption Settings</translation>
+ <translation>Настройки на шифроване</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Browser Integration</translation>
+ <translation>Интеграция на браузъра</translation>
+ </message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Идентификационни данни на база данни</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
<message>
<source>KeePassXC-Browser settings</source>
- <translation>KeePassXC-Browser settings</translation>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Disconnect all browsers</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Forg&amp;et all site-specific settings on entries</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</translation>
+ <translation>KeePassXC-Browser настройки</translation>
</message>
<message>
<source>Stored keys</source>
- <translation>Stored keys</translation>
+ <translation>Съхранени ключове</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Delete the selected key?</source>
- <translation>Delete the selected key?</translation>
+ <translation>Изтриване на избрания ключ?</translation>
</message>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</translation>
+ <translation>Наистина ли искате да изтриете избрания ключ?
+Това може да попречи на свързването с приставката на браузъра.</translation>
</message>
<message>
<source>Key</source>
- <translation>Key</translation>
+ <translation>Ключ</translation>
</message>
<message>
<source>Value</source>
- <translation>Value</translation>
+ <translation>Стойност</translation>
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>Enable Browser Integration to access these settings.</translation>
+ <translation>Разрешаване на интеграция с браузъри за достъп до тези настройки.</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>Disconnect all browsers</translation>
+ <translation>Разедини всички браузъри</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</translation>
+ <translation>Наистина ли искате да разедините всички браузъри?
+Това може да попречи на свързването с приставката в браузъра.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
- <translation>KeePassXC: No keys found</translation>
+ <translation>KeePassXC: Не са намерени ключове</translation>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>No shared encryption keys found in KeePassXC settings.</translation>
+ <translation>Не са намерени споделени ключове за криптиране в настройките на KeePassXC.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC: Removed keys from database</translation>
+ <translation>KeePassXC: Премахнати ключове от базата данни</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Успешно отстранен %n шифроващ ключ от настройките на KeePassXC.</numerusform><numerusform>Успешно отстранен %n ключ(а) за шифроване от настройките на KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>Forget all site-specific settings on entries</translation>
+ <translation>Забравете всички настройки за конкретни сайтове на записите</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</translation>
+ <translation>Наистина ли искате да се забравят всички настройки за конкретния сайт за всеки запис?
+Разрешенията за достъп до записите ще бъдат отменени.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>Removing stored permissions…</translation>
+ <translation>Премахване на съхранените разрешения...</translation>
</message>
<message>
<source>Abort</source>
- <translation>Abort</translation>
+ <translation>Отказ</translation>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: Removed permissions</translation>
+ <translation>KeePassXC: Премахнати разрешения</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Успешно премахнали разрешения от %n записа.</numerusform><numerusform>Успешно премахнали разрешения от %n записа.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC: No entry with permissions found!</translation>
+ <translation>KeePassXC: Няма намерени записи с разрешения!</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
- <translation>The active database does not contain an entry with permissions.</translation>
+ <translation>Активната база данни не съдържа запис с разрешения.</translation>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>Move KeePassHTTP attributes to custom data</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</translation>
+ <translation>Наистина ли искате да преместите всички данни за интегриране на остарели браузъри към най-новия стандарт?
+Това е необходимо, за да се поддържа съвместимост с приставката на браузъра.</translation>
</message>
<message>
<source>Stored browser keys</source>
- <translation type="unfinished"/>
+ <translation>Съхранените ключове на браузъра</translation>
</message>
<message>
<source>Remove selected key</source>
+ <translation>Премахване на избрания ключ</translation>
+ </message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Създаден</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Добавяне на допълнителна защита...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Няма зададена парола</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>Предупреждение! Не сте задали парола. Използването на база данни без парола е силно обезсърчено!
+
+Наистина ли искате да продължите без парола?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Продължи без парола</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Не е добавен шифроващ ключ</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Трябва да добавите поне един шифроващ ключ, за да защитите вашата база данни!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Неизвестна грешка</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Неуспешна промяна на идентификационните данни на базата данни</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
<message>
<source>Encryption Algorithm:</source>
- <translation>Encryption Algorithm:</translation>
+ <translation>Алгоритъм за шифроване:</translation>
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES: 256 Bit (default)</translation>
+ <translation>AES: 256 бита (по подразбиране)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 Bit</translation>
+ <translation>Twofish: 256 бита</translation>
</message>
<message>
<source>Key Derivation Function:</source>
- <translation>Key Derivation Function:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Transform rounds:</source>
- <translation>Transform rounds:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation>Benchmark 1-second delay</translation>
+ <translation>Рунда за трансформиране:</translation>
</message>
<message>
<source>Memory Usage:</source>
- <translation>Memory Usage:</translation>
+ <translation>Използване на паметта:</translation>
</message>
<message>
<source>Parallelism:</source>
- <translation>Parallelism:</translation>
+ <translation>Паралелизъм:</translation>
</message>
<message>
<source>Decryption Time:</source>
- <translation>Decryption Time:</translation>
+ <translation>Време за дешифриране:</translation>
</message>
<message>
<source>?? s</source>
- <translation>?? s</translation>
+ <translation>?? с</translation>
</message>
<message>
<source>Change</source>
- <translation>Change</translation>
- </message>
- <message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
+ <translation>Промяна</translation>
</message>
<message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation>Higher values offer more protection, but opening the database will take longer.</translation>
+ <translation>По-високите стойности предлагат по-голяма защита, но отварянето на базата данни ще отнеме повече време.</translation>
</message>
<message>
<source>Database format:</source>
- <translation>Database format:</translation>
+ <translation>Формат на базата данни:</translation>
</message>
<message>
<source>This is only important if you need to use your database with other programs.</source>
- <translation>This is only important if you need to use your database with other programs.</translation>
+ <translation>Това е важно само, ако трябва да използвате вашата база данни с други програми.</translation>
</message>
<message>
<source>KDBX 4.0 (recommended)</source>
- <translation>KDBX 4.0 (recommended)</translation>
+ <translation>KDBX 4.0 (препоръчително)</translation>
</message>
<message>
<source>KDBX 3.1</source>
@@ -1473,101 +1624,99 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<message>
<source>unchanged</source>
<comment>Database decryption time is unchanged</comment>
- <translation>unchanged</translation>
+ <translation>Непроменени</translation>
</message>
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Number of rounds too high</translation>
+ <translation>Броят на рудновете е твърде висок</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>You are using a very high number of key transform rounds with Argon2.
+ <translation>Използвате много голям брой рундове за преобразуване на ключа с Argon2.
-If you keep this number, your database may take hours or days (or even longer) to open!</translation>
+Ако запазите този номер, вашата база данни може да отнеме часове или дни (или дори по-дълго) да се отвори!</translation>
</message>
<message>
<source>Understood, keep number</source>
- <translation>Understood, keep number</translation>
+ <translation>Разбирам, остави стойнстта</translation>
</message>
<message>
<source>Cancel</source>
- <translation>Cancel</translation>
+ <translation>Отказ</translation>
</message>
<message>
<source>Number of rounds too low</source>
<comment>Key transformation rounds</comment>
- <translation>Number of rounds too low</translation>
+ <translation>Твърде нисък брой рундове</translation>
</message>
<message>
<source>You are using a very low number of key transform rounds with AES-KDF.
If you keep this number, your database may be too easy to crack!</source>
- <translation>You are using a very low number of key transform rounds with AES-KDF.
+ <translation>Използвате много нисък брой ключови трансформационни рундове с AES-KDF.
-If you keep this number, your database may be too easy to crack!</translation>
+Ако запазите тази стойност, вашата база данни може да бъде твърде лесна за разбиване!</translation>
</message>
<message>
<source>KDF unchanged</source>
- <translation>KDF unchanged</translation>
+ <translation>KDF непромен</translation>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>Failed to transform key with new KDF parameters; KDF unchanged.</translation>
+ <translation>Неуспешно преобразуване на ключа с новите параметри на KDF; KDF непроменен.</translation>
</message>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Мб</numerusform><numerusform>Мб</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>резба(и)</numerusform><numerusform>нишка(и)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
- <translation type="unfinished"/>
+ <translation>Промяна на времето за дешифриране</translation>
</message>
<message>
<source>Decryption time in seconds</source>
- <translation type="unfinished"/>
+ <translation>Време за дешифриране в секунди</translation>
</message>
<message>
<source>Database format</source>
- <translation type="unfinished"/>
+ <translation>Формат на базата данни</translation>
</message>
<message>
<source>Encryption algorithm</source>
- <translation type="unfinished"/>
+ <translation>Алгоритъм за шифроване</translation>
</message>
<message>
<source>Key derivation function</source>
- <translation type="unfinished"/>
+ <translation>Функция за формиране на ключа</translation>
</message>
<message>
<source>Transform rounds</source>
- <translation type="unfinished"/>
+ <translation>Трансформиционни рунда</translation>
</message>
<message>
<source>Memory usage</source>
- <translation type="unfinished"/>
+ <translation>Използване на паметта</translation>
</message>
<message>
<source>Parallelism</source>
- <translation type="unfinished"/>
+ <translation>Паралелизъм</translation>
+ </message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? мс</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? с</translation>
</message>
</context>
<context>
@@ -1577,15 +1726,15 @@ If you keep this number, your database may be too easy to crack!</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1593,107 +1742,108 @@ If you keep this number, your database may be too easy to crack!</translation>
<name>DatabaseSettingsWidgetGeneral</name>
<message>
<source>Database Meta Data</source>
- <translation>Database Meta Data</translation>
+ <translation>Метаданни на база данни</translation>
</message>
<message>
<source>Database name:</source>
- <translation>Database name:</translation>
+ <translation>Име на базата данни:</translation>
</message>
<message>
<source>Database description:</source>
- <translation>Database description:</translation>
+ <translation>Описание на базата данни:</translation>
</message>
<message>
<source>Default username:</source>
- <translation>Default username:</translation>
+ <translation>Потребителско име по подразбиране:</translation>
</message>
<message>
<source>History Settings</source>
- <translation>History Settings</translation>
+ <translation>Настройки на хронологията</translation>
</message>
<message>
<source>Max. history items:</source>
- <translation>Max. history items:</translation>
+ <translation>Макс. елементи от хронологията:</translation>
</message>
<message>
<source>Max. history size:</source>
- <translation>Max. history size:</translation>
+ <translation>Макс. размер на хронологията:</translation>
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation>Мб</translation>
</message>
<message>
<source>Use recycle bin</source>
- <translation>Use recycle bin</translation>
+ <translation>Използване на кошче</translation>
</message>
<message>
<source>Additional Database Settings</source>
- <translation>Additional Database Settings</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Enable &amp;compression (recommended)</translation>
+ <translation>Допълнителни настройки на базата данни</translation>
</message>
<message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>Поле за име на база данни</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
+ <translation>Поле за описание на базата данни</translation>
</message>
<message>
<source>Default username field</source>
- <translation type="unfinished"/>
+ <translation>Поле за потребителско име по подразбиране</translation>
</message>
<message>
<source>Maximum number of history items per entry</source>
- <translation type="unfinished"/>
+ <translation>Максимален брой елементи от историята за запис</translation>
</message>
<message>
<source>Maximum size of history per entry</source>
- <translation type="unfinished"/>
+ <translation>Максимален размер на историята за запис</translation>
</message>
<message>
<source>Delete Recycle Bin</source>
- <translation type="unfinished"/>
+ <translation>Изтриване на кошчето</translation>
</message>
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
- <translation type="unfinished"/>
+ <translation>Искате ли да изтриете текущото кошче и цялото му съдържание?
+Това действие е необратимо.</translation>
</message>
<message>
<source> (old)</source>
- <translation type="unfinished"/>
+ <translation>(стар)</translation>
+ </message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Разрешаване на компресирането (препоръчително)</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
<message>
<source>Sharing</source>
- <translation>Sharing</translation>
+ <translation>Споделяне</translation>
</message>
<message>
<source>Breadcrumb</source>
- <translation>Breadcrumb</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type</source>
- <translation>Type</translation>
+ <translation>Тип</translation>
</message>
<message>
<source>Path</source>
- <translation>Path</translation>
+ <translation>Път</translation>
</message>
<message>
<source>Last Signer</source>
- <translation>Last Signer</translation>
+ <translation>Последно подписал</translation>
</message>
<message>
<source>Certificates</source>
- <translation>Certificates</translation>
+ <translation>Сертификати</translation>
</message>
<message>
<source> &gt; </source>
@@ -1702,421 +1852,266 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Add additional protection...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>No encryption key added</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>You must add at least one encryption key to secure your database!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>No password set</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Unknown error</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Failed to change master key</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
- <translation>Database Name:</translation>
+ <translation>Име на базата данни:</translation>
</message>
<message>
<source>Description:</source>
- <translation>Description:</translation>
+ <translation>Описание:</translation>
</message>
<message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>Поле за име на база данни</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Name</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Value</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
+ <translation>Поле за описание на базата данни</translation>
</message>
</context>
<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
- <translation>KeePass 2 Database</translation>
+ <translation>KeePass 2 база данни</translation>
</message>
<message>
<source>All files</source>
- <translation>All files</translation>
+ <translation>Всички файлове</translation>
</message>
<message>
<source>Open database</source>
- <translation>Open database</translation>
+ <translation>Отваряне на база данни</translation>
</message>
<message>
<source>CSV file</source>
- <translation>CSV file</translation>
+ <translation>CSV файл</translation>
</message>
<message>
<source>Merge database</source>
- <translation>Merge database</translation>
+ <translation>Сливане на база данни</translation>
</message>
<message>
<source>Open KeePass 1 database</source>
- <translation>Open KeePass 1 database</translation>
+ <translation>Отвораряне на KeePass 1 база данни</translation>
</message>
<message>
<source>KeePass 1 database</source>
- <translation>KeePass 1 database</translation>
+ <translation>KeePass 1 база данни</translation>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>Export database to CSV file</translation>
+ <translation>Експортиране на база данни в CSV файл</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>Writing the CSV file failed.</translation>
+ <translation>Записът на CSV файла е неуспешен.</translation>
</message>
<message>
<source>Database creation error</source>
- <translation>Database creation error</translation>
+ <translation>Грешка при създаване на база данни</translation>
</message>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Select CSV file</source>
- <translation>Select CSV file</translation>
+ <translation>Изберете CSV файл</translation>
</message>
<message>
<source>New Database</source>
- <translation>New Database</translation>
+ <translation>Нова база данни</translation>
</message>
<message>
<source>%1 [New Database]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [New Database]</translation>
+ <translation>%1 [Нова база данни]</translation>
</message>
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Locked]</translation>
+ <translation>%1 [Заключен]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Read-only]</translation>
+ <translation>%1 [Само за четене]</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
- <translation type="unfinished"/>
+ <translation>Грешка при отваряне на %1. Или не съществува, или не е достъпно.</translation>
</message>
<message>
<source>Export database to HTML file</source>
- <translation type="unfinished"/>
+ <translation>Експортиране на база данни в HTML файл</translation>
</message>
<message>
<source>HTML file</source>
- <translation type="unfinished"/>
+ <translation>HTML файл</translation>
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation type="unfinished"/>
+ <translation>Записът на HTML файл е неуспешен.</translation>
</message>
<message>
<source>Export Confirmation</source>
- <translation type="unfinished"/>
+ <translation>Потвърждение на експортирането</translation>
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
- <translation type="unfinished"/>
+ <translation>Ще експортирате вашата база данни в нешифрован файл. Това ще направи вашите пароли и чувствителна информация уязвими! Наистина ли искате да продължите?</translation>
+ </message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Отвори OPVault</translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>Searching...</translation>
+ <translation>Търсене...</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Do you really want to delete the entry &quot;%1&quot; for good?</translation>
+ <translation>Наистина ли искате да изтриете записа &quot;%1&quot; за добро?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Do you really want to move entry &quot;%1&quot; to the recycle bin?</translation>
+ <translation>Наистина ли искате да преместите запис &quot;%1&quot; в кошчето?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Наистина ли искате да преместите %n записа(тата) в кошчето?</numerusform><numerusform>Наистина ли искате да преместите %n запис(а) в кошчето?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
- <translation>Execute command?</translation>
+ <translation>Да се изпълни командата?</translation>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>Наистина ли искате да изпълните следната команда?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
- <translation>Remember my choice</translation>
+ <translation>Запомни моя избор</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Do you really want to delete the group &quot;%1&quot; for good?</translation>
+ <translation>Наистина ли искате да изтриете групата &quot;%1&quot; за добро?</translation>
</message>
<message>
<source>No current database.</source>
- <translation>No current database.</translation>
+ <translation>Няма текуща база данни.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
- <translation>No source database, nothing to do.</translation>
+ <translation>Няма база данни източник, нищо за правене.</translation>
</message>
<message>
<source>Search Results (%1)</source>
- <translation>Search Results (%1)</translation>
+ <translation>Резултати от търсенето (%1)</translation>
</message>
<message>
<source>No Results</source>
- <translation>No Results</translation>
+ <translation>Няма резултати</translation>
</message>
<message>
<source>File has changed</source>
- <translation>File has changed</translation>
+ <translation>Файлът е променен</translation>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation>The database file has changed. Do you want to load the changes?</translation>
+ <translation>Файлът с базата данни е променен. Искате ли да заредите промените?</translation>
</message>
<message>
<source>Merge Request</source>
- <translation>Merge Request</translation>
+ <translation>Заявка за сливане</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</translation>
+ <translation>Файлът с базата данни е променен и имате незаписани промени.
+Искате ли да обедините вашите промени?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
- <translation>Empty recycle bin?</translation>
+ <translation>Изпразване на кошчето?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Are you sure you want to permanently delete everything from your recycle bin?</translation>
+ <translation>Наистина ли искате да изтриете завинаги всичко от кошчето?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Наистина ли искате да изтриете %n записа(тата) за добро?</numerusform><numerusform>Наистина ли искате да изтриете %n запис(а) за добро?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Да се изтрие ли запис(и)?</numerusform><numerusform>Да се изтрие ли запис(и)?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Преместване на записи в кошчето?</numerusform><numerusform>Преместване на записи в кошчето?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
- <translation>Lock Database?</translation>
+ <translation>Заключване на базата данни?</translation>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>You are editing an entry. Discard changes and lock anyway?</translation>
+ <translation>Редактирате запис. Отхвърляне на промените и заключване въпреки това?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>&quot;%1&quot; was modified.
-Save changes?</translation>
+ <translation>&quot;%1&quot; е променен.
+Да се запишат ли промените?</translation>
</message>
<message>
<source>Database was modified.
Save changes?</source>
- <translation>Database was modified.
-Save changes?</translation>
+ <translation>Базата данни е променена.
+Да се запишат ли промените?</translation>
</message>
<message>
<source>Save changes?</source>
- <translation>Save changes?</translation>
+ <translation>Да се запишат ли промените?</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>Could not open the new database file while attempting to autoreload.
-Error: %1</translation>
+ <translation>Не можа да се отвори новия файл с базата данни при опит за автоматично презареждане.
+Грешка: %1</translation>
</message>
<message>
<source>Disable safe saves?</source>
- <translation>Disable safe saves?</translation>
+ <translation>Забраняване на безопасно запазване?</translation>
</message>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</translation>
+ <translation>KeePassXC не успя да запази базата данни няколко пъти. Това вероятно се дължи на услугите за синхронизация на файлове, които заключват записа на файла.
+Забраняване на безопасното запазване и опитайте отново?</translation>
</message>
<message>
<source>Passwords</source>
- <translation>Passwords</translation>
+ <translation>Пароли</translation>
</message>
<message>
<source>Save database as</source>
- <translation>Save database as</translation>
+ <translation>Записване на база данни като</translation>
</message>
<message>
<source>KeePass 2 Database</source>
- <translation>KeePass 2 Database</translation>
+ <translation>KeePass 2 база данни</translation>
</message>
<message>
<source>Replace references to entry?</source>
- <translation>Replace references to entry?</translation>
+ <translation type="unfinished"/>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
@@ -2124,50 +2119,58 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Delete group</source>
- <translation>Delete group</translation>
+ <translation>Изтриване на група</translation>
</message>
<message>
<source>Move group to recycle bin?</source>
- <translation>Move group to recycle bin?</translation>
+ <translation>Преместване на група в кошчето?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Do you really want to move the group &quot;%1&quot; to the recycle bin?</translation>
+ <translation>Наистина ли искате да преместите групата &quot;%1&quot; в кошчето?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>Successfully merged the database files.</translation>
+ <translation>Успешно слети файловете на базата данни.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>Database was not modified by merge operation.</translation>
+ <translation>Базата данни не е модифицирана от операция по сливане.</translation>
</message>
<message>
<source>Shared group...</source>
- <translation>Shared group...</translation>
+ <translation>Споделена група...</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
+ <translation>Грешка при запис на базата данни: %1</translation>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
+ <translation>Тази база данни е отворена в режим само за четене. Автоматичното записване е изключено.</translation>
+ </message>
+ <message>
+ <source>Save database backup</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Файлът с базата данни не може да бъде намерен: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
<message>
<source>Entry</source>
- <translation>Entry</translation>
+ <translation>Запис</translation>
</message>
<message>
<source>Advanced</source>
- <translation>Advanced</translation>
+ <translation>Допълнителни</translation>
</message>
<message>
<source>Icon</source>
- <translation>Icon</translation>
+ <translation>Икона</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -2175,11 +2178,11 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Properties</source>
- <translation>Properties</translation>
+ <translation>Свойства</translation>
</message>
<message>
<source>History</source>
- <translation>History</translation>
+ <translation>История</translation>
</message>
<message>
<source>SSH Agent</source>
@@ -2187,170 +2190,162 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>n/a</source>
- <translation>n/a</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>(encrypted)</source>
- <translation>(encrypted)</translation>
+ <translation>(шифровано)</translation>
</message>
<message>
<source>Select private key</source>
- <translation>Select private key</translation>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation>File too large to be a private key</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Failed to open private key</translation>
+ <translation>Избор на частен ключ</translation>
</message>
<message>
<source>Entry history</source>
- <translation>Entry history</translation>
+ <translation>История на записа</translation>
</message>
<message>
<source>Add entry</source>
- <translation>Add entry</translation>
+ <translation>Добавяне на запис</translation>
</message>
<message>
<source>Edit entry</source>
- <translation>Edit entry</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Different passwords supplied.</translation>
+ <translation>Редактиране на запис</translation>
</message>
<message>
<source>New attribute</source>
- <translation>New attribute</translation>
+ <translation>Нов атрибут</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Are you sure you want to remove this attribute?</translation>
+ <translation>Наистина ли искате да премахнете този атрибут?</translation>
</message>
<message>
<source>Tomorrow</source>
- <translation>Tomorrow</translation>
+ <translation>Утре</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n седмица(а)</numerusform><numerusform>%n седмица(и)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Apply generated password?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Do you want to apply the generated password to this entry?</translation>
+ <translation><numerusform>%n месец(а)</numerusform><numerusform>%n месец(а)</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
- <translation>Entry updated successfully.</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>Entry has unsaved changes</translation>
+ <translation>Записът е актуализиран успешно.</translation>
</message>
<message>
<source>New attribute %1</source>
- <translation>New attribute %1</translation>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTECTED] Press reveal to view or edit</translation>
+ <translation>Нов атрибут %1</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n година(а)</numerusform><numerusform>%n година(е)</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
- <translation>Confirm Removal</translation>
+ <translation>Потвърждаване на премахването</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Browser Integration</translation>
+ <translation>Интеграция на браузъра</translation>
</message>
<message>
<source>&lt;empty URL&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;empty URL&gt;</translation>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
- <translation type="unfinished"/>
+ <translation>Наистина ли искате да премахнете този URL?</translation>
+ </message>
+ <message>
+ <source>Reveal</source>
+ <translation>Показване</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Скриване</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Незаписани промени</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Желаете ли да запишете промените в този запис?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[ЗАЩИТЕНО] Натиснете &quot;Показане&quot;, за да видите или редактирате</translation>
</message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
<message>
<source>Additional attributes</source>
- <translation>Additional attributes</translation>
+ <translation>Допълнителни атрибути</translation>
</message>
<message>
<source>Add</source>
- <translation>Add</translation>
+ <translation>Добавите</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Edit Name</source>
- <translation>Edit Name</translation>
+ <translation>Редактиране на името</translation>
</message>
<message>
<source>Protect</source>
- <translation>Protect</translation>
+ <translation>Защити</translation>
</message>
<message>
<source>Reveal</source>
- <translation>Reveal</translation>
+ <translation>Показване</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Attachments</translation>
+ <translation>Приложения</translation>
</message>
<message>
<source>Foreground Color:</source>
- <translation>Foreground Colour:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Background Color:</source>
- <translation>Background Colour:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Attribute selection</source>
- <translation type="unfinished"/>
+ <translation>Избор на атрибут</translation>
</message>
<message>
<source>Attribute value</source>
- <translation type="unfinished"/>
+ <translation>Стойност на атрибута</translation>
</message>
<message>
<source>Add a new attribute</source>
- <translation type="unfinished"/>
+ <translation>Добавяне на нов атрибут</translation>
</message>
<message>
<source>Remove selected attribute</source>
- <translation type="unfinished"/>
+ <translation>Премахни избрания атрибут</translation>
</message>
<message>
<source>Edit attribute name</source>
- <translation type="unfinished"/>
+ <translation>Редактиране на име на атрибут</translation>
</message>
<message>
<source>Toggle attribute protection</source>
- <translation type="unfinished"/>
+ <translation>Превключване на защита на атрибути</translation>
</message>
<message>
<source>Show a protected attribute</source>
- <translation type="unfinished"/>
+ <translation>Показване на защитен атрибут</translation>
</message>
<message>
<source>Foreground color selection</source>
@@ -2360,24 +2355,24 @@ Disable safe saves and try again?</translation>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
<message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Enable Auto-Type for this entry</translation>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Inherit default Auto-Type sequence from the &amp;group</translation>
+ <source>Exclude from database reports</source>
+ <translation>Изключване от отчетите на базата данни</translation>
</message>
+</context>
+<context>
+ <name>EditEntryWidgetAutoType</name>
<message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Use custom Auto-Type sequence:</translation>
+ <source>Enable Auto-Type for this entry</source>
+ <translation>Разреши Auto-Type за този запис</translation>
</message>
<message>
<source>Window Associations</source>
- <translation>Window Associations</translation>
+ <translation>Асоциация на прозореца</translation>
</message>
<message>
<source>+</source>
@@ -2389,19 +2384,19 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Window title:</source>
- <translation>Window title:</translation>
+ <translation>Заглавие на прозорец:</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Use a specific sequence for this association:</translation>
+ <translation>Използвайте конкретна последователност за тази асоциация:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
- <translation type="unfinished"/>
+ <translation>Персонализирана Auto-Type последователност</translation>
</message>
<message>
<source>Open Auto-Type help webpage</source>
- <translation type="unfinished"/>
+ <translation>Отваряне на уеб страницата за помощ за Auto-Type</translation>
</message>
<message>
<source>Existing window associations</source>
@@ -2409,28 +2404,36 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Add new window association</source>
- <translation type="unfinished"/>
+ <translation>Добавяне на нова асоциация с прозорец</translation>
</message>
<message>
<source>Remove selected window association</source>
- <translation type="unfinished"/>
+ <translation>Премахване на избраната асоциация с прозорец</translation>
</message>
<message>
<source>You can use an asterisk (*) to match everything</source>
- <translation type="unfinished"/>
+ <translation>Можете да използвате звездичка (*), за да съответства на всичко</translation>
</message>
<message>
<source>Set the window association title</source>
- <translation type="unfinished"/>
+ <translation>Задаване на заглавието на асоциацията с прозорец</translation>
</message>
<message>
<source>You can use an asterisk to match everything</source>
- <translation type="unfinished"/>
+ <translation>Можете да използвате звездичка, за да съответства на всичко</translation>
</message>
<message>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Наследена последователност Auto-Type по подразбиране от групата</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2440,70 +2443,78 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>General</source>
- <translation>General</translation>
+ <translation>Основни</translation>
</message>
<message>
<source>Skip Auto-Submit for this entry</source>
- <translation type="unfinished"/>
+ <translation>Пропускане на автоматично подаване за този запис</translation>
</message>
<message>
<source>Hide this entry from the browser extension</source>
- <translation type="unfinished"/>
+ <translation>Скриване на този елемент от разширението на браузъра</translation>
</message>
<message>
<source>Additional URL&apos;s</source>
- <translation type="unfinished"/>
+ <translation>Допълнителни URL-и</translation>
</message>
<message>
<source>Add</source>
- <translation>Add</translation>
+ <translation>Добавите</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Edit</source>
- <translation type="unfinished"/>
+ <translation>Редактиране</translation>
+ </message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Изпращане само на тази настройка към браузъра за HTTP Auth диалози. Ако е включено, нормалните форми за влизане няма да покажат този запис за селекция.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Използвай този запис само с HTTP Basic Auth</translation>
</message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
<message>
<source>Show</source>
- <translation>Show</translation>
+ <translation>Показване</translation>
</message>
<message>
<source>Restore</source>
- <translation>Restore</translation>
+ <translation>Възстановяване</translation>
</message>
<message>
<source>Delete</source>
- <translation>Delete</translation>
+ <translation>Триене</translation>
</message>
<message>
<source>Delete all</source>
- <translation>Delete all</translation>
+ <translation>Триене на всичко</translation>
</message>
<message>
<source>Entry history selection</source>
- <translation type="unfinished"/>
+ <translation>Избор на записи от хронологията</translation>
</message>
<message>
<source>Show entry at selected history state</source>
- <translation type="unfinished"/>
+ <translation>Показване на запис в избраното състояние от хронологията</translation>
</message>
<message>
<source>Restore entry to selected history state</source>
- <translation type="unfinished"/>
+ <translation>Възстановяване на записа в избраното състояние от хронологията</translation>
</message>
<message>
<source>Delete selected history state</source>
- <translation type="unfinished"/>
+ <translation>Изтриване на избраното състояние от хронологията</translation>
</message>
<message>
<source>Delete all history</source>
- <translation type="unfinished"/>
+ <translation>Изтриване на цялата хронология</translation>
</message>
</context>
<context>
@@ -2514,59 +2525,35 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Password:</source>
- <translation>Password:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Repeat:</translation>
+ <translation>Парола:</translation>
</message>
<message>
<source>Title:</source>
- <translation>Title:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notes</translation>
+ <translation>Заглавие:</translation>
</message>
<message>
<source>Presets</source>
- <translation>Presets</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Toggle the checkbox to reveal the notes section.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Username:</source>
- <translation>Username:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Expires</translation>
+ <translation>Потребителско име:</translation>
</message>
<message>
<source>Url field</source>
- <translation type="unfinished"/>
+ <translation>Поле за URL</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
+ <translation>Изтегляне на favicon за URL</translation>
</message>
<message>
<source>Password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
+ <translation>Поле за парола</translation>
</message>
<message>
<source>Toggle notes visible</source>
@@ -2574,7 +2561,7 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Expiration field</source>
- <translation type="unfinished"/>
+ <translation>Поле за изтичане на срока</translation>
</message>
<message>
<source>Expiration Presets</source>
@@ -2586,99 +2573,111 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>Notes field</source>
- <translation type="unfinished"/>
+ <translation>Поле за бележки</translation>
</message>
<message>
<source>Title field</source>
- <translation type="unfinished"/>
+ <translation>Поле за заглавие</translation>
</message>
<message>
<source>Username field</source>
- <translation type="unfinished"/>
+ <translation>Поле за потребителско име</translation>
</message>
<message>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Бележки:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Изтича:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
<message>
<source>Form</source>
- <translation>Form</translation>
+ <translation>Форма</translation>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>Remove key from agent after</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source> seconds</source>
- <translation> seconds</translation>
+ <translation>секунди</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Fingerprint</translation>
+ <translation>Отпечатък</translation>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>Remove key from agent when database is closed/locked</translation>
+ <translation>Премахване на ключа от агента при затваряне/заключване на базата данни</translation>
</message>
<message>
<source>Public key</source>
- <translation>Public key</translation>
+ <translation>Публичен ключ</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Add key to agent when database is opened/unlocked</translation>
+ <translation>Добавяне на ключ към агента при отваряне/отключване на базата данни</translation>
</message>
<message>
<source>Comment</source>
- <translation>Comment</translation>
+ <translation>Коментар</translation>
</message>
<message>
<source>Decrypt</source>
- <translation>Decrypt</translation>
+ <translation>Заклеймявам</translation>
</message>
<message>
<source>n/a</source>
- <translation>n/a</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Copy to clipboard</translation>
+ <translation>Копиране в клипборда</translation>
</message>
<message>
<source>Private key</source>
- <translation>Private key</translation>
+ <translation>Частен ключ</translation>
</message>
<message>
<source>External file</source>
- <translation>External file</translation>
+ <translation>Външен файл</translation>
</message>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>Browse...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Attachment</source>
- <translation>Attachment</translation>
+ <translation>Приложение</translation>
</message>
<message>
<source>Add to agent</source>
- <translation>Add to agent</translation>
+ <translation>Добавяне към агента</translation>
</message>
<message>
<source>Remove from agent</source>
- <translation>Remove from agent</translation>
+ <translation>Премахване от агента</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
- <translation>Require user confirmation when this key is used</translation>
+ <translation>Изискване на потвърждение от потребителя при използване на този ключ</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
- <translation type="unfinished"/>
+ <translation>Премахване на ключа от агента след указани секунди</translation>
</message>
<message>
<source>Browser for key file</source>
@@ -2686,7 +2685,7 @@ Disable safe saves and try again?</translation>
</message>
<message>
<source>External key file</source>
- <translation type="unfinished"/>
+ <translation>Външен файл-ключ</translation>
</message>
<message>
<source>Select attachment file</source>
@@ -2697,274 +2696,255 @@ Disable safe saves and try again?</translation>
<name>EditGroupWidget</name>
<message>
<source>Group</source>
- <translation>Group</translation>
+ <translation>Група</translation>
</message>
<message>
<source>Icon</source>
- <translation>Icon</translation>
+ <translation>Икона</translation>
</message>
<message>
<source>Properties</source>
- <translation>Properties</translation>
+ <translation>Свойства</translation>
</message>
<message>
<source>Add group</source>
- <translation>Add group</translation>
+ <translation>Добавяне на група</translation>
</message>
<message>
<source>Edit group</source>
- <translation>Edit group</translation>
+ <translation>Редактиране на група</translation>
</message>
<message>
<source>Enable</source>
- <translation>Enable</translation>
+ <translation>Включване</translation>
</message>
<message>
<source>Disable</source>
- <translation>Disable</translation>
+ <translation>Изключване</translation>
</message>
<message>
<source>Inherit from parent group (%1)</source>
- <translation>Inherit from parent group (%1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>Entry has unsaved changes</translation>
+ <translation>Записът има незаписани промени</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Form</translation>
- </message>
- <message>
<source>Type:</source>
- <translation>Type:</translation>
+ <translation>Тип:</translation>
</message>
<message>
<source>Path:</source>
- <translation>Path:</translation>
- </message>
- <message>
- <source>...</source>
- <translation>...</translation>
+ <translation>Път:</translation>
</message>
<message>
<source>Password:</source>
- <translation>Password:</translation>
+ <translation>Парола:</translation>
</message>
<message>
<source>Inactive</source>
- <translation>Inactive</translation>
+ <translation>Неактивен</translation>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation>KeeShare unsigned container</translation>
+ <translation>KeeShare неподписан контейнер</translation>
</message>
<message>
<source>KeeShare signed container</source>
- <translation>KeeShare signed container</translation>
+ <translation>KeeShare подписан контейнер</translation>
</message>
<message>
<source>Select import source</source>
- <translation>Select import source</translation>
+ <translation>Избор на източник за импортиране</translation>
</message>
<message>
<source>Select export target</source>
- <translation>Select export target</translation>
+ <translation>Изберете целта за експортиране</translation>
</message>
<message>
<source>Select import/export file</source>
- <translation>Select import/export file</translation>
+ <translation>Изберете файл за импортиране/експортиране</translation>
</message>
<message>
<source>Clear</source>
- <translation>Clear</translation>
+ <translation>Почисти</translation>
</message>
<message>
<source>Import</source>
- <translation>Import</translation>
+ <translation>Импортиране</translation>
</message>
<message>
<source>Export</source>
- <translation type="unfinished"/>
+ <translation>Експортиране</translation>
</message>
<message>
<source>Synchronize</source>
- <translation type="unfinished"/>
+ <translation>Синхронизиране</translation>
</message>
<message>
<source>Your KeePassXC version does not support sharing this container type.
Supported extensions are: %1.</source>
- <translation type="unfinished"/>
+ <translation>Вашата KeePassXC версия не поддържа споделянето на този тип контейнер.
+Поддържаните разширения са: %1.</translation>
</message>
<message>
<source>%1 is already being exported by this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 вече се експортира от тази база данни.</translation>
</message>
<message>
<source>%1 is already being imported by this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 вече е импортиран от тази база данни.</translation>
</message>
<message>
<source>%1 is being imported and exported by different groups in this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 се импортира и експортира от различни групи в тази база данни.</translation>
</message>
<message>
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
<comment>KeeShare is a proper noun</comment>
- <translation type="unfinished"/>
+ <translation>KeeShare е изключено в момента. Можете да разрешите импортиране/експортиране в настройките на приложението.</translation>
</message>
<message>
<source>Database export is currently disabled by application settings.</source>
- <translation type="unfinished"/>
+ <translation>Експортирането на база данни в момента е изключено от настройките на приложението.</translation>
</message>
<message>
<source>Database import is currently disabled by application settings.</source>
- <translation type="unfinished"/>
+ <translation>Импортирането на база данни в момента е изключено от настройките на приложението.</translation>
</message>
<message>
<source>Sharing mode field</source>
- <translation type="unfinished"/>
+ <translation>Споделне на поле за режим</translation>
</message>
<message>
<source>Path to share file field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
- <translation type="unfinished"/>
+ <translation>Поле за парола</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
+ <source>Clear fields</source>
+ <translation>Изчисти полетата</translation>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
+ <source>Browse...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Name</translation>
+ <source>Name field</source>
+ <translation>Поле за име</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
+ <source>Notes field</source>
+ <translation>Поле бележки</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expires</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Search</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Auto-Type</translation>
+ <source>Expiration field</source>
+ <translation>Поле за изтичане на срока</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Use default Auto-Type sequence of parent group</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Set default Auto-Type se&amp;quence</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>Поле за auto-type последователност по подразбиране</translation>
</message>
<message>
- <source>Name field</source>
- <translation type="unfinished"/>
+ <source>Expires:</source>
+ <translation>Изтича:</translation>
</message>
<message>
- <source>Notes field</source>
- <translation type="unfinished"/>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Използвай Auto-Type последователността по подразбиране на родителската група</translation>
</message>
<message>
- <source>Toggle expiration</source>
- <translation type="unfinished"/>
+ <source>Auto-Type:</source>
+ <translation>Auto-Type:</translation>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
- <translation type="unfinished"/>
+ <source>Search:</source>
+ <translation>Търсене:</translation>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>Бележки:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
- <translation type="unfinished"/>
+ <source>Name:</source>
+ <translation>Име:</translation>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation type="unfinished"/>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Задаване на Auto-Type последователност по подразбиране</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Use default icon</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Use custo&amp;m icon</translation>
- </message>
- <message>
<source>Add custom icon</source>
- <translation>Add custom icon</translation>
+ <translation>Добавяне на икона по избор</translation>
</message>
<message>
<source>Delete custom icon</source>
- <translation>Delete custom icon</translation>
+ <translation>Изтриване на икона по избор</translation>
</message>
<message>
<source>Download favicon</source>
- <translation>Download favicon</translation>
+ <translation>Изтегляне на favicon</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>Unable to fetch favicon.</translation>
+ <translation>Не може да се изтегли favicon.</translation>
</message>
<message>
<source>Images</source>
- <translation>Images</translation>
+ <translation>Изображения</translation>
</message>
<message>
<source>All files</source>
- <translation>All files</translation>
+ <translation>Всички файлове</translation>
</message>
<message>
<source>Confirm Delete</source>
- <translation>Confirm Delete</translation>
+ <translation>Потвърждаване на изтриването</translation>
</message>
<message>
<source>Select Image(s)</source>
- <translation>Select Image(s)</translation>
+ <translation>Избор на изображение(я)</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%1 от %n иконата(ите) е успешно заредена</numerusform><numerusform>%1 от %n иконата(ите) е успешно заредена</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
- <translation>No icons were loaded</translation>
+ <translation>Не са заредени икони</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n иконата(ите) вече съществува в базата данни</numerusform><numerusform>%n иконата(и) вече съществува в базата данни</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2972,27 +2952,19 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Тази икона се използва от %n запис(а) и ще бъде заменена от иконата по подразбиране. Наистина ли искате да го изтриете?</numerusform><numerusform>Тази икона се използва от %n запис(а) и ще бъде заменена от иконата по подразбиране. Наистина ли искате да го изтриете?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
- <translation type="unfinished"/>
+ <translation>Можете да активирате услугата за икона на DuckDuckGo в Инструменти -&gt; Настройки -&gt; Сигурност</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation type="unfinished"/>
+ <translation>Изтегляне на фавикон за URL</translation>
</message>
<message>
<source>Apply selected icon to subgroups and entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Apply icon &amp;to ...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation type="unfinished"/>
+ <translation>Прилагане на избраната икона към подгрупи и записи</translation>
</message>
<message>
<source>Also apply to child groups</source>
@@ -3004,26 +2976,42 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Also apply to all children</source>
- <translation type="unfinished"/>
+ <translation>Прилага се и за всички деца</translation>
</message>
<message>
<source>Existing icon selected.</source>
- <translation type="unfinished"/>
+ <translation>Избрана е съществуваща икона.</translation>
+ </message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Използване на иконата по подразбиране</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Използване на икона по избор</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Икона за прилагане към...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Приложи само към тази група</translation>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
<message>
<source>Created:</source>
- <translation>Created:</translation>
+ <translation>Създаден:</translation>
</message>
<message>
<source>Modified:</source>
- <translation>Modified:</translation>
+ <translation>Модифициран:</translation>
</message>
<message>
<source>Accessed:</source>
- <translation>Accessed:</translation>
+ <translation>Достъпeн:</translation>
</message>
<message>
<source>Uuid:</source>
@@ -3031,193 +3019,208 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Plugin Data</source>
- <translation>Plugin Data</translation>
+ <translation>Данни за приставката</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Delete plugin data?</source>
- <translation>Delete plugin data?</translation>
+ <translation>Изтриване на данни от приставката?</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key</source>
- <translation>Key</translation>
+ <translation>Ключ</translation>
</message>
<message>
<source>Value</source>
- <translation>Value</translation>
+ <translation>Стойност</translation>
</message>
<message>
<source>Datetime created</source>
- <translation type="unfinished"/>
+ <translation>Дата и час на създаване</translation>
</message>
<message>
<source>Datetime modified</source>
- <translation type="unfinished"/>
+ <translation>Дата и час на промяна</translation>
</message>
<message>
<source>Datetime accessed</source>
- <translation type="unfinished"/>
+ <translation>Дата и час на достъп</translation>
</message>
<message>
<source>Unique ID</source>
- <translation type="unfinished"/>
+ <translation>Уникален ID</translation>
</message>
<message>
<source>Plugin data</source>
- <translation type="unfinished"/>
+ <translation>Данни за приставката</translation>
</message>
<message>
<source>Remove selected plugin data</source>
- <translation type="unfinished"/>
+ <translation>Премахване на избраните данни за приставката</translation>
</message>
</context>
<context>
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>%1 - Clone</translation>
+ <translation>%1 - Клониране</translation>
</message>
</context>
<context>
<name>EntryAttachmentsModel</name>
<message>
<source>Name</source>
- <translation>Name</translation>
+ <translation>Име</translation>
</message>
<message>
<source>Size</source>
- <translation>Size</translation>
+ <translation>Размер</translation>
</message>
</context>
<context>
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation>Form</translation>
+ <translation>Форма</translation>
</message>
<message>
<source>Add</source>
- <translation>Add</translation>
+ <translation>Добавите</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Open</source>
- <translation>Open</translation>
+ <translation>Отвори</translation>
</message>
<message>
<source>Save</source>
- <translation>Save</translation>
+ <translation>Запази</translation>
</message>
<message>
<source>Select files</source>
- <translation>Select files</translation>
+ <translation>Избор на файлове</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Наистина ли искате да премахнете %n прикачени файлове?</numerusform><numerusform>Наистина ли искате да премахнете %n прикачени файлове?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
- <translation>Save attachments</translation>
+ <translation>Запис на прикачени файлове</translation>
</message>
<message>
<source>Unable to create directory:
%1</source>
- <translation>Unable to create directory:
+ <translation>Директорията не може да бъде създадена:
%1</translation>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</translation>
+ <translation>Наистина ли искате да заместите съществуващия файл &quot;%1&quot; с прикачения?</translation>
</message>
<message>
<source>Confirm overwrite</source>
- <translation>Confirm overwrite</translation>
+ <translation>Потвърждаване на презаписването</translation>
</message>
<message>
<source>Unable to save attachments:
%1</source>
- <translation>Unable to save attachments:
+ <translation>Не може да се запишат прикачените файлове:
%1</translation>
</message>
<message>
<source>Unable to open attachment:
%1</source>
- <translation>Unable to open attachment:
+ <translation>Не може да се отворят прикаченте файл:
%1</translation>
</message>
<message>
<source>Unable to open attachments:
%1</source>
- <translation>Unable to open attachments:
+ <translation>Не може да се отворят прикачените файлове:
%1</translation>
</message>
<message>
<source>Confirm remove</source>
- <translation>Confirm remove</translation>
+ <translation>Потвърдете премахването</translation>
</message>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Не може да се отворят файлове:
+%1</numerusform><numerusform>Не може да се отворят файлове:
+%1</numerusform></translation>
</message>
<message>
<source>Attachments</source>
- <translation>Attachments</translation>
+ <translation>Приложения</translation>
</message>
<message>
<source>Add new attachment</source>
- <translation type="unfinished"/>
+ <translation>Добавяне на нов прикачен файл</translation>
</message>
<message>
<source>Remove selected attachment</source>
- <translation type="unfinished"/>
+ <translation>Премахване на избрания прикачен файл</translation>
</message>
<message>
<source>Open selected attachment</source>
- <translation type="unfinished"/>
+ <translation>Отваряне на избрания прикачен файл</translation>
</message>
<message>
<source>Save selected attachment to disk</source>
- <translation type="unfinished"/>
+ <translation>Записване на избрания прикачен файл на диска</translation>
+ </message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 е голям файл (%2 МБ).
+Вашата база данни може да стане много голяма и да се намали производителността.
+
+Наистина ли искате да добавите файла?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Потвърждаване на прикачения файл</translation>
</message>
</context>
<context>
<name>EntryAttributesModel</name>
<message>
<source>Name</source>
- <translation>Name</translation>
+ <translation>Име</translation>
</message>
</context>
<context>
<name>EntryHistoryModel</name>
<message>
<source>Last modified</source>
- <translation>Last modified</translation>
+ <translation>Последна промяна</translation>
</message>
<message>
<source>Title</source>
- <translation>Title</translation>
+ <translation>Заглавие</translation>
</message>
<message>
<source>Username</source>
- <translation>Username</translation>
+ <translation>Портебител</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Url</translation>
</message>
</context>
<context>
@@ -3225,134 +3228,174 @@ This may cause the affected plugins to malfunction.</translation>
<message>
<source>Ref: </source>
<comment>Reference abbreviation</comment>
- <translation>Ref: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Group</source>
- <translation>Group</translation>
+ <translation>Група</translation>
</message>
<message>
<source>Title</source>
- <translation>Title</translation>
+ <translation>Заглавие</translation>
</message>
<message>
<source>Username</source>
- <translation>Username</translation>
+ <translation>Портебител</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Url</translation>
</message>
<message>
<source>Never</source>
- <translation>Never</translation>
+ <translation>Никога</translation>
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation>Парола</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notes</translation>
+ <translation>Бележки</translation>
</message>
<message>
<source>Expires</source>
- <translation>Expires</translation>
+ <translation>Изтича</translation>
</message>
<message>
<source>Created</source>
- <translation>Created</translation>
+ <translation>Създаден</translation>
</message>
<message>
<source>Modified</source>
- <translation>Modified</translation>
+ <translation>Променен</translation>
</message>
<message>
<source>Accessed</source>
- <translation>Accessed</translation>
+ <translation>Достъпен</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Attachments</translation>
+ <translation>Приложения</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Yes</translation>
+ <source>Size</source>
+ <translation>Размер</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Име на група</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Заглавие на записа</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Бележки на записа</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Записа изтича на</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Дата на създаване</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Последна дата на промяна</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Последна дата на достъп</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Прикачени файлове</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Размер на записа</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Има прикачени файлове</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Има еднократна TOTP парола</translation>
</message>
</context>
<context>
<name>EntryPreviewWidget</name>
<message>
<source>Close</source>
- <translation>Close</translation>
+ <translation>Затваряне</translation>
</message>
<message>
<source>General</source>
- <translation>General</translation>
+ <translation>Основни</translation>
</message>
<message>
<source>Username</source>
- <translation>Username</translation>
+ <translation>Портебител</translation>
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation>Парола</translation>
</message>
<message>
<source>Expiration</source>
- <translation>Expiration</translation>
+ <translation>Изтичане</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Url</translation>
</message>
<message>
<source>Attributes</source>
- <translation>Attributes</translation>
+ <translation>Атрибути</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Attachments</translation>
+ <translation>Приложения</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notes</translation>
+ <translation>Бележки</translation>
</message>
<message>
<source>Autotype</source>
- <translation>Autotype</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Window</source>
- <translation>Window</translation>
+ <translation>Прозорец</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Sequence</translation>
+ <translation>Последователност</translation>
</message>
<message>
<source>Searching</source>
- <translation>Searching</translation>
+ <translation>Търсене</translation>
</message>
<message>
<source>Search</source>
- <translation>Search</translation>
+ <translation>Търси</translation>
</message>
<message>
<source>Clear</source>
- <translation>Clear</translation>
+ <translation>Почисти</translation>
</message>
<message>
<source>Never</source>
- <translation>Never</translation>
+ <translation>Никога</translation>
</message>
<message>
<source>[PROTECTED]</source>
- <translation>[PROTECTED]</translation>
+ <translation>[ЗАЩИТЕНО]</translation>
</message>
<message>
<source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
@@ -3361,79 +3404,145 @@ This may cause the affected plugins to malfunction.</translation>
</message>
<message>
<source>Enabled</source>
- <translation>Enabled</translation>
+ <translation>Включено</translation>
</message>
<message>
<source>Disabled</source>
- <translation>Disabled</translation>
+ <translation>Изключено</translation>
</message>
<message>
<source>Share</source>
- <translation>Share</translation>
+ <translation>Сподели</translation>
</message>
<message>
<source>Display current TOTP value</source>
- <translation type="unfinished"/>
+ <translation>Показване на текущата стойност на TOTP</translation>
</message>
<message>
<source>Advanced</source>
- <translation>Advanced</translation>
+ <translation>Допълнителни</translation>
+ </message>
+</context>
+<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Невалиден URL</translation>
</message>
</context>
<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
- <translation>Customize View</translation>
+ <translation>Персонализиране на изгледа</translation>
</message>
<message>
<source>Hide Usernames</source>
- <translation>Hide Usernames</translation>
+ <translation>Скриване на потребителските имена</translation>
</message>
<message>
<source>Hide Passwords</source>
- <translation>Hide Passwords</translation>
+ <translation>Скриване на паролите</translation>
</message>
<message>
<source>Fit to window</source>
- <translation>Fit to window</translation>
+ <translation>Побиране в прозореца</translation>
</message>
<message>
<source>Fit to contents</source>
- <translation>Fit to contents</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Reset to defaults</source>
- <translation>Reset to defaults</translation>
+ <translation>Нулиране на настройките към подразбиращите се</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Attachments (icon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Има прикачени файлове</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Има TOTP</translation>
</message>
</context>
<context>
<name>FdoSecrets::Item</name>
<message>
<source>Entry &quot;%1&quot; from database &quot;%2&quot; was used by %3</source>
- <translation type="unfinished"/>
+ <translation>Запис &quot;%1&quot; от база данни &quot;%2&quot; е използван от %3</translation>
</message>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n Запис(и) е(са) използван(и) от %1</numerusform><numerusform>%n Запис(а) е(са) използван(и) от %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Неуспешно регистриране на услугата DBus на % 1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Име на файл</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Група</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Управление</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Отключване за показване</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Приложение</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Управление</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Неизвестен</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Неизвестен</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3442,29 +3551,25 @@ This may cause the affected plugins to malfunction.</translation>
<message>
<source>[empty]</source>
<comment>group has no children</comment>
- <translation>[empty]</translation>
+ <translation>[празно]</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Cannot save file!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Cannot save the native messaging script file.</translation>
+ <source>Online password validation failed</source>
+ <translation>Неуспешна онлайн проверка паролата</translation>
</message>
</context>
<context>
<name>IconDownloaderDialog</name>
<message>
<source>Download Favicons</source>
- <translation type="unfinished"/>
+ <translation>Изтегляне на Favicons</translation>
</message>
<message>
<source>Cancel</source>
- <translation>Cancel</translation>
+ <translation>Отказ</translation>
</message>
<message>
<source>Having trouble downloading icons?
@@ -3473,358 +3578,360 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Close</source>
- <translation>Close</translation>
+ <translation>Затваряне</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Url</translation>
</message>
<message>
<source>Status</source>
- <translation type="unfinished"/>
+ <translation>Статут</translation>
</message>
<message>
<source>Please wait, processing entry list...</source>
- <translation type="unfinished"/>
+ <translation>Моля, изчакайте, обработка на списъка с записи...</translation>
</message>
<message>
<source>Downloading...</source>
- <translation type="unfinished"/>
+ <translation>Изтегляне...</translation>
</message>
<message>
<source>Ok</source>
- <translation>Ok</translation>
+ <translation>OK</translation>
</message>
<message>
<source>Already Exists</source>
- <translation type="unfinished"/>
+ <translation>Вече съществува</translation>
</message>
<message>
<source>Download Failed</source>
- <translation type="unfinished"/>
+ <translation>Неуспешно изтегляне</translation>
</message>
<message>
<source>Downloading favicons (%1/%2)...</source>
- <translation type="unfinished"/>
+ <translation>Изтегляне на favicons (%1/%2)...</translation>
</message>
</context>
<context>
<name>KMessageWidget</name>
<message>
<source>&amp;Close</source>
- <translation>&amp;Close</translation>
+ <translation>&amp;Затваряне</translation>
</message>
<message>
<source>Close message</source>
- <translation>Close message</translation>
+ <translation>Съобщение при затаряне</translation>
</message>
</context>
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Unable to issue challenge-response.</translation>
- </message>
- <message>
<source>missing database headers</source>
- <translation>missing database headers</translation>
+ <translation>липсващи хедъри на базата данни</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation>Header doesn&apos;t match hash</translation>
+ <translation>Хедърът не съвпада с хеша</translation>
</message>
<message>
<source>Invalid header id size</source>
- <translation>Invalid header id size</translation>
+ <translation>Невалиден размер на id хедъра</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Invalid header field length</translation>
+ <translation>Невалидна дължина на полето на хедъра</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Invalid header data length</translation>
+ <translation>Невалидна дължина на данните на хедъра</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation type="unfinished"/>
+ <translation>Предоставени са невалидни идентификационни данни, опитайте отново.
+Ако това се повтори вероятно базата данни е повредена.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Не може да се изчисли ключът на базата данни</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Грешка при издаването на challenge-response: %1</translation>
</message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Unable to issue challenge-response.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Грешка при издаването на challenge-response: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Не може да се изчисли ключът на базата данни</translation>
</message>
</context>
<context>
<name>Kdbx4Reader</name>
<message>
<source>missing database headers</source>
- <translation>missing database headers</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
+ <translation>липсващи хедъри на базата данни</translation>
</message>
<message>
<source>Invalid header checksum size</source>
- <translation>Invalid header checksum size</translation>
+ <translation>Невалиден размер на контролната сума на хедъра</translation>
</message>
<message>
<source>Header SHA256 mismatch</source>
- <translation>Header SHA256 mismatch</translation>
+ <translation>Sha256 несъответствие на хедъра</translation>
</message>
<message>
<source>Unknown cipher</source>
- <translation>Unknown cipher</translation>
+ <translation>Неизвестно шифър</translation>
</message>
<message>
<source>Invalid header id size</source>
- <translation>Invalid header id size</translation>
+ <translation>Невалиден размер на id хедъра</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Invalid header field length</translation>
+ <translation>Невалидна дължина на полето на хедъра</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Invalid header data length</translation>
+ <translation>Невалидна дължина на данните на хедъра</translation>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>Failed to open buffer for KDF parameters in header</translation>
+ <translation>Неуспешно отваряне на буфер за KDF параметрите в хедъра</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation>Unsupported key derivation function (KDF) or invalid parameters</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
- <translation>Legacy header fields found in KDBX4 file.</translation>
+ <translation>Остарели полета на хедъри намерени в KDBX4 файл.</translation>
</message>
<message>
<source>Invalid inner header id size</source>
- <translation>Invalid inner header id size</translation>
+ <translation>Невалиден размер на вътрешния id хедъра</translation>
</message>
<message>
<source>Invalid inner header field length</source>
- <translation>Invalid inner header field length</translation>
+ <translation>Невалидна дължина на полето на вътрешния хедъра</translation>
</message>
<message>
<source>Invalid inner header binary size</source>
- <translation>Invalid inner header binary size</translation>
+ <translation>Невалиден размер на binary хедъра</translation>
</message>
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Unsupported KeePass variant map version.</translation>
+ <translation>Неподдържана версия на KeePass структурата с метаданни.</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>Невалидна дължина на името в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map entry name data</translation>
+ <translation>Невалидна стойност на името в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map entry value length</translation>
+ <translation>Невалидна дължина на стойността в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map entry value data</translation>
+ <translation>Невалидна стойност на стойността в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map Bool entry value length</translation>
+ <translation>Невалидна дължина на Bool стойността в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map Int32 entry value length</translation>
+ <translation>Невалидна дължина на Int32 в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map UInt32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map UInt32 entry value length</translation>
+ <translation>Невалидна дължина на UInt32 в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map Int64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map Int64 entry value length</translation>
+ <translation>Невалидна дължина на Int64 в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map UInt64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map UInt64 entry value length</translation>
+ <translation>Невалидна дължина на UInt64 в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map entry type</translation>
+ <translation>Невалиден типа запис в структурата с метаданни</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Invalid variant map field type size</translation>
+ <translation>Невалиден размер на типа запис в структурата с метаданни</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation type="unfinished"/>
+ <translation>Предоставени са невалидни идентификационни данни, опитайте отново.
+Ако това се повтори вероятно базата данни е повредена.</translation>
</message>
<message>
<source>(HMAC mismatch)</source>
- <translation type="unfinished"/>
+ <translation>(HMAC несъответствие)</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Грешка при изчисляване на ключа на базата данни: %1</translation>
</message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>Invalid symmetric cipher algorithm.</translation>
+ <translation>Невалиден алгоритъм за симетричено шифриране.</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Invalid symmetric cipher IV size.</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
+ <translation>Невалиден размер на IV за симетричния шифър.</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Failed to serialize KDF parameters variant map</translation>
+ <translation>Неуспешно сериализиране на KDF параметърите в структурата с метаданни</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Грешка при изчисляване на ключа на базата данни: %1</translation>
</message>
</context>
<context>
<name>KdbxReader</name>
<message>
<source>Unsupported cipher</source>
- <translation>Unsupported cipher</translation>
+ <translation>Неподдържан шифър</translation>
</message>
<message>
<source>Invalid compression flags length</source>
- <translation>Invalid compression flags length</translation>
+ <translation>Невалидна дължина на флаговете за компресиране</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
- <translation>Unsupported compression algorithm</translation>
+ <translation>Неподдържан алгоритъм за компресиране</translation>
</message>
<message>
<source>Invalid master seed size</source>
- <translation>Invalid master seed size</translation>
+ <translation>Невалиден размер на главния seed</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Invalid transform seed size</translation>
+ <translation>Невалиден размер на seed за трансформиране</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation>Invalid transform rounds size</translation>
+ <translation>Невалиден размер на рундовете за преобразуване</translation>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation>Invalid start bytes size</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid random stream id size</source>
- <translation>Invalid random stream id size</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>Invalid inner random stream cipher</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>Not a KeePass database.</translation>
+ <translation>Не е KeePass база данни.</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>The selected file is an old KeePass 1 database (.kdb).
+ <translation>Избраният файл е стара база данни KeePass 1 (.kdb).
-You can import it by clicking on Database &gt; &apos;Import KeePass 1 database...&apos;.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</translation>
+Можете да го импортирате, като кликнете върху Database -&gt; &quot;Импортиране keePass 1 база данни...&quot;.
+Това е еднопосочна миграция. Няма да можете да отворите импортираната база данни със старата версия на KeePassX 0.4.</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
- <translation>Unsupported KeePass 2 database version.</translation>
+ <translation>Неподдържана версия на KeePass 2 базата данни.</translation>
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Invalid cipher uuid length: %1 (length=%2)</translation>
+ <translation>Невалидна дължина на uuid не шифъра: %1 (дължина=%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>Unable to parse UUID: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Failed to read database file.</source>
- <translation>Failed to read database file.</translation>
+ <translation>Грешка при четене на файл с база данни.</translation>
</message>
</context>
<context>
<name>KdbxXmlReader</name>
<message>
<source>XML parsing failure: %1</source>
- <translation>XML parsing failure: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No root group</source>
- <translation>No root group</translation>
+ <translation>Без коренова група</translation>
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Missing icon uuid or data</translation>
+ <translation>Липса на uuid или данни за иконата</translation>
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>Missing custom data key or value</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Multiple group elements</source>
- <translation>Multiple group elements</translation>
+ <translation>Множество елементи на група</translation>
</message>
<message>
<source>Null group uuid</source>
- <translation>Null group uuid</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Invalid group icon number</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid EnableAutoType value</source>
- <translation>Invalid EnableAutoType value</translation>
+ <translation>Невалидна EnableAutoType стойност</translation>
</message>
<message>
<source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
+ <translation>Невалидна EnableSearching стойност</translation>
</message>
<message>
<source>No group uuid found</source>
- <translation type="unfinished"/>
+ <translation>Не е намерен uuid на групата</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
@@ -3832,7 +3939,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
+ <translation>Липсва DeletedObject uuid или време</translation>
</message>
<message>
<source>Null entry uuid</source>
@@ -3844,31 +3951,27 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>History element in history entry</source>
- <translation type="unfinished"/>
+ <translation>Елемент от хронологията в хронологически запис</translation>
</message>
<message>
<source>No entry uuid found</source>
- <translation type="unfinished"/>
+ <translation>Не е намерен uuid на записа</translation>
</message>
<message>
<source>History element with different uuid</source>
- <translation type="unfinished"/>
+ <translation>Хронологически елемент с различен uuid</translation>
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Duplicate custom attribute found</translation>
- </message>
- <message>
- <source>Entry string key or value missing</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Duplicate attachment found</translation>
+ <source>Entry string key or value missing</source>
+ <translation>Липсващ низов ключ или стойност на записа</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
+ <translation>Липсващ двоичен ключ или стойност на запис</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
@@ -3876,117 +3979,138 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Invalid bool value</source>
- <translation type="unfinished"/>
+ <translation>Невалидна бинарна стойност</translation>
</message>
<message>
<source>Invalid date time value</source>
- <translation type="unfinished"/>
+ <translation>Невалидна стойност за дата и час</translation>
</message>
<message>
<source>Invalid color value</source>
- <translation>Invalid colour value</translation>
+ <translation>Невалидна стойност за цвета</translation>
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Invalid colour rgb part</translation>
+ <translation>Невалидна rgb част за цвят</translation>
</message>
<message>
<source>Invalid number value</source>
- <translation type="unfinished"/>
+ <translation>Невалидна числова стойност</translation>
</message>
<message>
<source>Invalid uuid value</source>
- <translation type="unfinished"/>
+ <translation>Невалидна uuid стойност</translation>
</message>
<message>
<source>Unable to decompress binary</source>
<extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
+ <translation>Не може да се декомпресира двоичените данни</translation>
</message>
<message>
<source>XML error:
%1
Line %2, column %3</source>
- <translation type="unfinished"/>
+ <translation>XML грешка:
+%1
+Ред %2, колона %3</translation>
+ </message>
+</context>
+<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Невалидна структура на файла с KeeAgent настройки.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Личният ключ е прикачен, но няма прикачени файлове.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Личният ключ е празен</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Файлът е твърде голям, за да бъде частен ключ</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Неуспешно отваряне на частния ключ</translation>
</message>
</context>
<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
- <translation>Unable to open the database.</translation>
+ <translation>Базата данни не може да се отвори.</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
- <translation type="unfinished"/>
+ <translation>Импортиране на KeePass1 база данни</translation>
</message>
</context>
<context>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
+ <translation>Файл-ключа не може да бъде прочетен.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>Not a KeePass database.</translation>
+ <translation>Не е KeePass база данни.</translation>
</message>
<message>
<source>Unsupported encryption algorithm.</source>
- <translation>Unsupported encryption algorithm.</translation>
+ <translation>Неподдържан алгоритъм за шифроване.</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
+ <translation>Неподдържана версия на KeePass базата данни.</translation>
</message>
<message>
<source>Unable to read encryption IV</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
+ <translation>Не може да бъде прочетено шифровъчното IV</translation>
</message>
<message>
<source>Invalid number of groups</source>
- <translation type="unfinished"/>
+ <translation>Невалиден брой групи</translation>
</message>
<message>
<source>Invalid number of entries</source>
- <translation type="unfinished"/>
+ <translation>Невалиден брой записи</translation>
</message>
<message>
<source>Invalid content hash size</source>
- <translation type="unfinished"/>
+ <translation>Невалиден размер на хеш на съдържанието</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Invalid transform seed size</translation>
+ <translation>Невалиден размер на seed за трансформиране</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
+ <translation>Невалиден брой преобразуващи рундове</translation>
</message>
<message>
<source>Unable to construct group tree</source>
- <translation>Unable to construct group tree</translation>
+ <translation>Не може да се изгради дърво на групите</translation>
</message>
<message>
<source>Root</source>
- <translation>Root</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
+ <translation>Корен</translation>
</message>
<message>
<source>Key transformation failed</source>
- <translation>Key transformation failed</translation>
+ <translation>Неуспешно преобразуване на ключа</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation type="unfinished"/>
+ <translation>Невалиден брой на поле за групата</translation>
</message>
<message>
<source>Invalid group field size</source>
- <translation type="unfinished"/>
+ <translation>Невалиден размер на поле за групата</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
@@ -4075,7 +4199,12 @@ Line %2, column %3</source>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation type="unfinished"/>
+ <translation>Предоставени са невалидни идентификационни данни, опитайте отново.
+Ако това се повтори вероятно базата данни е повредена.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Не може да се изчисли ключът на базата данни</translation>
</message>
</context>
<context>
@@ -4137,7 +4266,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Cancel</source>
- <translation>Cancel</translation>
+ <translation>Отказ</translation>
</message>
<message>
<source>Key Component set, click to change or remove</source>
@@ -4168,59 +4297,53 @@ If this reoccurs, then your database file may be corrupt.</source>
<name>KeyFileEditWidget</name>
<message>
<source>Generate</source>
- <translation>Generate</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key File</source>
- <translation type="unfinished"/>
+ <translation>Файл-ключ</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;p&gt;Можете да добавите ключ-файл, съдържащ случайни байтове за допълнителна сигурност.&lt;/p&gt;&lt;p&gt;Трябва да го пазите в тайна и никога да не го губите или ще бъдете заключени!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Legacy key file format</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
+ <translation>Остарял формат на файл-ключа</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation type="unfinished"/>
+ <translation>Грешка при зареждане на файл-ключа &quot;%1&quot;
+Съобщение: %2</translation>
</message>
<message>
<source>Key files</source>
- <translation>Key files</translation>
+ <translation>Файл-ключове</translation>
</message>
<message>
<source>All files</source>
- <translation>All files</translation>
+ <translation>Всички файлове</translation>
</message>
<message>
<source>Create Key File...</source>
- <translation type="unfinished"/>
+ <translation>Създаване на ключ-файл...</translation>
</message>
<message>
<source>Error creating key file</source>
- <translation type="unfinished"/>
+ <translation>Грешка при създаване на файл-ключ</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
+ <translation>Не може да се създаде ключ-файл: %1</translation>
</message>
<message>
<source>Select a key file</source>
- <translation>Select a key file</translation>
+ <translation>Избор на файл-ключ</translation>
</message>
<message>
<source>Key file selection</source>
- <translation type="unfinished"/>
+ <translation>Избор на файл-ключ</translation>
</message>
<message>
<source>Browse for key file</source>
@@ -4228,187 +4351,142 @@ Message: %2</source>
</message>
<message>
<source>Browse...</source>
- <translation>Browse...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Generate a new key file</source>
- <translation type="unfinished"/>
+ <translation>Генериране на нов файл-ключ</translation>
</message>
<message>
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
- <translation type="unfinished"/>
+ <translation>Забележка: Не използвайте файл, който може да се промени, понеже това ще Ви попречи да отключите вашата база данни!</translation>
</message>
<message>
<source>Invalid Key File</source>
- <translation type="unfinished"/>
+ <translation>Невалиден файл-ключ</translation>
</message>
<message>
<source>You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file.</source>
- <translation type="unfinished"/>
+ <translation>Не можете да използвате текущата база данни като собствен файл-ключ. Изберете друг файл или създайте нов файл-ключ.</translation>
</message>
<message>
<source>Suspicious Key File</source>
- <translation type="unfinished"/>
+ <translation>Подозрителен файл-ключ</translation>
</message>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
- <translation type="unfinished"/>
+ <translation>Избраният файл-ключ изглежда като файл с база данни. Файл-ключът трябва да е статичен файл, който никога не се променя или ще загубите достъпа до вашата база данни завинаги.
+Наистина ли искате да продължите с този файл?</translation>
+ </message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Използвате остарял файлов формат на ключа, който може да стане
+неподдържан в бъдеще.
+
+Генериране на нов ключ файл в настройките за сигурност на базата данни.</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<source>&amp;Database</source>
- <translation>&amp;Database</translation>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Recent databases</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
- <translation>&amp;Help</translation>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntries</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Groups</source>
- <translation>&amp;Groups</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Tools</source>
- <translation>&amp;Tools</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Quit</source>
- <translation>&amp;Quit</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;About</source>
- <translation>&amp;About</translation>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation>&amp;Open database...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Save database</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Close database</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Delete entry</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Edit group</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Delete group</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Sa&amp;ve database as...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Database settings</source>
- <translation>Database settings</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clone entry</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copy &amp;username</translation>
+ <translation>Настройки на базата данни</translation>
</message>
<message>
<source>Copy username to clipboard</source>
- <translation>Copy username to clipboard</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy password to clipboard</source>
- <translation>Copy password to clipboard</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Settings</source>
- <translation>&amp;Settings</translation>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lock databases</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Title</source>
- <translation>&amp;Title</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy title to clipboard</source>
- <translation>Copy title to clipboard</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;URL</source>
- <translation>&amp;URL</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy URL to clipboard</source>
- <translation>Copy URL to clipboard</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Notes</source>
- <translation>&amp;Notes</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy notes to clipboard</source>
- <translation>Copy notes to clipboard</translation>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Export to CSV file...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Set up TOTP...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy &amp;TOTP</source>
- <translation>Copy &amp;TOTP</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>E&amp;mpty recycle bin</source>
- <translation>E&amp;mpty recycle bin</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Clear history</source>
- <translation>Clear history</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Access error for config file %1</translation>
+ <translation>Грешка при достъп на конфигурационния файл %1</translation>
</message>
<message>
<source>Settings</source>
- <translation>Settings</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Toggle window</source>
- <translation>Toggle window</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Quit KeePassXC</source>
- <translation>Quit KeePassXC</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>Please touch the button on your YubiKey!</translation>
+ <translation>Моля, докоснете бутона на yubiKey!</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
@@ -4421,10 +4499,6 @@ This version is not meant for production use.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation type="unfinished"/>
@@ -4434,200 +4508,378 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
+ <source>Create a new database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>TOTP...</source>
+ <source>Merge from another KDBX database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New database...</source>
+ <source>Add a new entry</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Create a new database</source>
+ <source>View or edit entry</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Merge from database...</source>
+ <source>Add a new group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Merge from another KDBX database</source>
+ <source>Perform &amp;Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New entry</source>
+ <source>Open &amp;URL</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Add a new entry</source>
+ <source>Import a KeePass 1 database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Edit entry</source>
+ <source>Import a CSV file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>View or edit entry</source>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New group</source>
+ <source>Check for updates on startup?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Add a new group</source>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Change master &amp;key...</source>
+ <source>You can always check for updates manually from the application menu.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Database settings...</source>
+ <source>&amp;Export</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
+ <source>Sort &amp;A-Z</source>
+ <translation>Сортиране &amp;А-Я</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
+ <source>Sort &amp;Z-A</source>
+ <translation>Сортиране &amp;Я-А</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Генератор на парола</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
+ <source>Import a 1Password Vault</source>
+ <translation>Импортиране на 1Password Vault</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Първи стъпки</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Ръководство за потребителя</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Клавишни комбинации</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Скорошни бази данни</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
+ <source>&amp;Entries</source>
+ <translation>&amp;Записи</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <source>Copy Att&amp;ribute</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
+ <source>View</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
+ <source>Theme</source>
+ <translation>Тема</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation type="unfinished"/>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Проверка за актуализации</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation type="unfinished"/>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Отваряне на база данни</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation type="unfinished"/>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Записване на базата данни</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation type="unfinished"/>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Затвори базата данни</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation type="unfinished"/>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Нова база данни...</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>&amp;Merge From Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>Download favicon</translation>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Нов запис...</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation type="unfinished"/>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Редактиране на запис...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Изтриване на запис...</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Нова група...</translation>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Редактиране на група...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Изтриване на група...</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Изтегляне на всички &amp;favicons...</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>Database &amp;Security…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>Database &amp;Reports...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>Statistics, health check, etc.</source>
+ <translation>Статистика, проверка на здравето и др.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Настройки на базата данни...</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Клониране на запис...</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Move entry one step up</source>
+ <translation>Преместване на записа една стъпка нагоре</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>Move entry one step down</source>
+ <translation>Преместване на запис с една стъпка надолу</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Копиране на &amp;Username</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Копиране на &amp;Паролата</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Изтегляне &amp;Фавикон</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Заключи базата данни</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV файл...</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML файл...</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 база данни...</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password Vault…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV файл...</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Показване на TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Показване на QR код</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Настройване на TOTP...</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>Open Getting Started Guide</source>
+ <translation>Отваряне на ръководството &quot;Първи стъпки&quot;</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Онлайн помощ</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Към онлайн документацията</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Отваряне на ръководството за потребителя</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Записване на резервно копие на базата данни...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Добавяне на ключ към SSH Agent</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Премахване на ключ от SSH Agent</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Компактен режим</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Автоматично</translation>
+ </message>
+ <message>
+ <source>Light</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Dark</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>Classic (Platform-native)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Покажи лентата с инструменти</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Показване на панела за визуализация</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Не показвай повече за тази версия</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Рестартиране на приложението?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Трябва да рестартирате приложението, за да приложите тази настройка. Желаете ли да рестартирате сега?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Настройки на базата данни</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Редактиране на настройките на базата данни</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Отключване на базата данни</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Отключване на базата данни за показване на повече информация</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Заключване на базата данни</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Разедини</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Разедини това приложение</translation>
+ </message>
</context>
<context>
<name>Merger</name>
<message>
<source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Създаване на липсващите %1 [%2]</translation>
</message>
<message>
<source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Преместване на % 1 [%2]</translation>
</message>
<message>
<source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Презаписване %1 [%2]</translation>
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
+ <translation>по-стари записи, обединени от база данни &quot;%1&quot;</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4687,7 +4939,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<message>
<source>Root</source>
<comment>Root group</comment>
- <translation>Root</translation>
+ <translation>Корен</translation>
</message>
</context>
<context>
@@ -4697,72 +4949,79 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
+ <translation>Тук можете да коригирате настройките за шифроване на база данни. Не се притеснявайте, можете да ги промените по-късно в настройките на базата данни.</translation>
</message>
<message>
<source>Advanced Settings</source>
- <translation>Advanced Settings</translation>
+ <translation>Разширени настройки</translation>
</message>
<message>
<source>Simple Settings</source>
- <translation type="unfinished"/>
+ <translation>Опростени настройки</translation>
+ </message>
+ <message>
+ <source>Encryption Settings</source>
+ <translation>Настройки на шифроване</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageEncryption</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Encryption Settings</source>
- <translation>Encryption Settings</translation>
+ <source>Database Credentials</source>
+ <translation>Идентификационни данни на база данни</translation>
</message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Набор от идентификационни данни, известни само за вас, които защитават вашата база данни.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
+ <source>Encryption Settings</source>
+ <translation>Настройки на шифроване</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Тук можете да коригирате настройките за шифроване на база данни. Не се притеснявайте, можете да ги промените по-късно в настройките на базата данни.</translation>
</message>
</context>
<context>
<name>NewDatabaseWizardPageMetaData</name>
<message>
<source>General Database Information</source>
- <translation type="unfinished"/>
+ <translation>Обща информация за база данни</translation>
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
+ <translation>Моля, попълнете име и незадължително описание за новата си база данни:</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Мениджър на пароли</translation>
</message>
</context>
<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
- <translation type="unfinished"/>
+ <translation>Невалиден OpData01, не съдържа хедър</translation>
</message>
<message>
<source>Unable to read all IV bytes, wanted 16 but got %1</source>
- <translation type="unfinished"/>
+ <translation>Не може да се прочетат всички IV байта, нужни са 16, но имам %1</translation>
</message>
<message>
<source>Unable to init cipher for opdata01: %1</source>
- <translation type="unfinished"/>
+ <translation>Не може да се инициализира шифъра за opdata01: %1</translation>
</message>
<message>
<source>Unable to read all HMAC signature bytes</source>
- <translation type="unfinished"/>
+ <translation>Не може да се прочетат всички байтове на HMAC подписа</translation>
</message>
<message>
<source>Malformed OpData01 due to a failed HMAC</source>
@@ -4774,7 +5033,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Expected %1 bytes of clear-text, found %2</source>
- <translation type="unfinished"/>
+ <translation>Очаквано %1 байта текст, намерени %2</translation>
</message>
</context>
<context>
@@ -4789,23 +5048,23 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>OpVaultReader</name>
<message>
<source>Directory .opvault must exist</source>
- <translation type="unfinished"/>
+ <translation>Директорията .opvault трябва да съществува</translation>
</message>
<message>
<source>Directory .opvault must be readable</source>
- <translation type="unfinished"/>
+ <translation>Директорията .opvault трябва да бъде четима</translation>
</message>
<message>
<source>Directory .opvault/default must exist</source>
- <translation type="unfinished"/>
+ <translation>Директория .opvault/default трябва да съществува</translation>
</message>
<message>
<source>Directory .opvault/default must be readable</source>
- <translation type="unfinished"/>
+ <translation>Директория .opvault/default трябва да е четима</translation>
</message>
<message>
<source>Unable to decode masterKey: %1</source>
- <translation type="unfinished"/>
+ <translation>Грешка при декодиране на masterKey: %1</translation>
</message>
<message>
<source>Unable to derive master key: %1</source>
@@ -4816,7 +5075,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
+ <translation>Невалиден файл с ключа, очаква се openSSH ключ</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
@@ -4824,11 +5083,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Base64 decoding failed</source>
- <translation type="unfinished"/>
+ <translation>Base64 декодирането е неуспешно</translation>
</message>
<message>
<source>Key file way too small.</source>
- <translation type="unfinished"/>
+ <translation> Файлът с ключа е твърде малък.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
@@ -4836,15 +5095,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Found zero keys</source>
- <translation type="unfinished"/>
+ <translation>Намерени нула ключа</translation>
</message>
<message>
<source>Failed to read public key.</source>
- <translation>Failed to read public key.</translation>
+ <translation>Не може да се прочете публичения ключ.</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
+ <translation>Повреден файл с ключа, четенето на частен ключ е неуспешно</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
@@ -4856,7 +5115,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Passphrase is required to decrypt this key</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
@@ -4868,11 +5127,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>Unexpected EOF while reading public key</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>Unexpected EOF while reading private key</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
@@ -4880,7 +5139,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>Unexpected EOF when writing public key</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
@@ -4888,15 +5147,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>Unexpected EOF when writing private key</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation>Unsupported key type: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unknown cipher: %1</source>
- <translation>Unknown cipher: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
@@ -4908,7 +5167,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unknown key type: %1</source>
- <translation>Unknown key type: %1</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4921,12 +5180,24 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>Enter password:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Confirm password:</source>
@@ -4934,7 +5205,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation>Парола</translation>
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
@@ -4942,28 +5213,16 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
+ <translation>Паролите не съвпадат.</translation>
</message>
<message>
<source>Password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
+ <translation>Поле за парола</translation>
</message>
<message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4972,41 +5231,37 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Password:</source>
- <translation>Password:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation type="unfinished"/>
</message>
<message>
<source>entropy</source>
- <translation type="unfinished"/>
+ <translation>ентропия</translation>
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation>Парола</translation>
</message>
<message>
<source>Character Types</source>
- <translation>Character Types</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Numbers</source>
- <translation type="unfinished"/>
+ <translation>Числа</translation>
</message>
<message>
<source>Extended ASCII</source>
- <translation>Extended ASCII</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Exclude look-alike characters</source>
- <translation>Exclude look-alike characters</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Pick characters from every group</source>
- <translation>Pick characters from every group</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Length:</source>
@@ -5014,7 +5269,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Passphrase</source>
- <translation>Passphrase</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Wordlist:</source>
@@ -5025,16 +5280,8 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Copy</source>
- <translation>Copy</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accept</translation>
- </message>
- <message>
<source>Close</source>
- <translation>Close</translation>
+ <translation>Затваряне</translation>
</message>
<message>
<source>Entropy: %1 bit</source>
@@ -5074,7 +5321,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Advanced</source>
- <translation>Advanced</translation>
+ <translation>Допълнителни</translation>
</message>
<message>
<source>A-Z</source>
@@ -5129,14 +5376,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
</message>
@@ -5157,14 +5396,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5213,10 +5444,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5229,7 +5456,43 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Допълнителни знаци</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Брой думи:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Почисти</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5243,28 +5506,80 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Слаба парола</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Използвани в %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
<message>
<source>Overwrite</source>
- <translation type="unfinished"/>
+ <translation>Презапиши</translation>
</message>
<message>
<source>Delete</source>
- <translation>Delete</translation>
+ <translation>Триене</translation>
</message>
<message>
<source>Move</source>
- <translation type="unfinished"/>
+ <translation>Премести</translation>
</message>
<message>
<source>Empty</source>
- <translation type="unfinished"/>
+ <translation>Изпразни</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Skip</source>
@@ -5272,11 +5587,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Disable</source>
- <translation>Disable</translation>
+ <translation>Изключване</translation>
</message>
<message>
<source>Merge</source>
- <translation type="unfinished"/>
+ <translation>Слей</translation>
</message>
<message>
<source>Continue</source>
@@ -5287,23 +5602,23 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>QObject</name>
<message>
<source>Database not opened</source>
- <translation>Database not opened</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Database hash not available</source>
- <translation>Database hash not available</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Client public key not received</source>
- <translation>Client public key not received</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Cannot decrypt message</source>
- <translation>Cannot decrypt message</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Action cancelled or denied</source>
- <translation>Action cancelled or denied</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeePassXC association failed, try again</source>
@@ -5311,7 +5626,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Encryption key is not recognized</source>
- <translation>Encryption key is not recognised</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect action</source>
@@ -5319,39 +5634,39 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Empty message received</source>
- <translation>Empty message received</translation>
+ <translation>Получено е празно съобщение</translation>
</message>
<message>
<source>No URL provided</source>
- <translation>No URL provided</translation>
+ <translation>Не е предоставен URL</translation>
</message>
<message>
<source>No logins found</source>
- <translation>No logins found</translation>
+ <translation>Не са намерени данни за вход</translation>
</message>
<message>
<source>Unknown error</source>
- <translation>Unknown error</translation>
+ <translation>Неизвестна грешка</translation>
</message>
<message>
<source>Add a new entry to a database.</source>
- <translation>Add a new entry to a database.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the database.</source>
- <translation>Path of the database.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key file of the database.</source>
- <translation>Key file of the database.</translation>
+ <translation>Файл-ключа на базата данни.</translation>
</message>
<message>
<source>path</source>
- <translation type="unfinished"/>
+ <translation>път</translation>
</message>
<message>
<source>Username for the entry.</source>
- <translation>Username for the entry.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>username</source>
@@ -5359,19 +5674,19 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>URL for the entry.</source>
- <translation>URL for the entry.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Url</translation>
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Prompt for the entry&apos;s password.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Generate a password for the entry.</source>
- <translation>Generate a password for the entry.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>length</source>
@@ -5379,11 +5694,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Path of the entry to add.</source>
- <translation>Path of the entry to add.</translation>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copy an entry&apos;s password to the clipboard.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the entry to clip.</source>
@@ -5392,42 +5703,45 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Timeout in seconds before clearing the clipboard.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Edit an entry.</source>
- <translation>Edit an entry.</translation>
+ <translation>Редактиране на запис.</translation>
</message>
<message>
<source>Title for the entry.</source>
- <translation>Title for the entry.</translation>
+ <translation>Заглавие на записа.</translation>
</message>
<message>
<source>title</source>
- <translation type="unfinished"/>
+ <translation>заглавие</translation>
</message>
<message>
<source>Path of the entry to edit.</source>
- <translation>Path of the entry to edit.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Estimate the entropy of a password.</source>
- <translation>Estimate the entropy of a password.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Password for which to estimate the entropy.</source>
- <translation>Password for which to estimate the entropy.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Perform advanced analysis on the password.</source>
- <translation>Perform advanced analysis on the password.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>WARNING: You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation type="unfinished"/>
+ <translation>ВНИМАНИЕ: Използвате остарял файлов формат на ключа, който може да стане
+неподдържан в бъдеще.
+
+Помислете за генериране на нов файл с ключове.</translation>
</message>
<message>
<source>
@@ -5438,11 +5752,11 @@ Available commands:
</message>
<message>
<source>Name of the command to execute.</source>
- <translation>Name of the command to execute.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>List database entries.</source>
- <translation>List database entries.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the group to list. Default is /</source>
@@ -5450,35 +5764,35 @@ Available commands:
</message>
<message>
<source>Find entries quickly.</source>
- <translation>Find entries quickly.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Search term.</source>
- <translation>Search term.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Merge two databases.</source>
- <translation>Merge two databases.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>Path of the database to merge from.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation>Use the same credentials for both database files.</translation>
+ <translation>Използвайте едни и същи идентификационни данни за двата файла с бази данни.</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation>Key file of the database to merge from.</translation>
+ <translation>Файл-ключа на базата данни за сливане.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
- <translation>Show an entry&apos;s information.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>attribute</source>
@@ -5486,7 +5800,7 @@ Available commands:
</message>
<message>
<source>Name of the entry to show.</source>
- <translation>Name of the entry to show.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>NULL device</source>
@@ -5506,43 +5820,35 @@ Available commands:
</message>
<message>
<source>Group</source>
- <translation>Group</translation>
+ <translation>Група</translation>
</message>
<message>
<source>Title</source>
- <translation>Title</translation>
+ <translation>Заглавие</translation>
</message>
<message>
<source>Username</source>
- <translation>Username</translation>
+ <translation>Портебител</translation>
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation>Парола</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notes</translation>
+ <translation>Бележки</translation>
</message>
<message>
<source>Last Modified</source>
- <translation type="unfinished"/>
+ <translation>Последно променена</translation>
</message>
<message>
<source>Created</source>
- <translation>Created</translation>
+ <translation>Създаден</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Browser Integration</translation>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
+ <translation>Интеграция на браузъра</translation>
</message>
<message>
<source>SSH Agent</source>
@@ -5550,11 +5856,11 @@ Available commands:
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
- <translation>Generate a new random diceware passphrase.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>Word count for the diceware passphrase.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Wordlist for the diceware generator.
@@ -5563,7 +5869,7 @@ Available commands:
</message>
<message>
<source>Generate a new random password.</source>
- <translation>Generate a new random password.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not create entry with path %1.</source>
@@ -5575,17 +5881,13 @@ Available commands:
</message>
<message>
<source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
+ <translation>Грешка при запис на базата данни: %1</translation>
</message>
<message>
<source>Successfully added entry %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5597,14 +5899,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -5636,7 +5930,7 @@ Available commands:
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
+ <translation>Грешка при запис на базата данни: %1</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
@@ -5744,7 +6038,7 @@ Available commands:
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
+ <translation>Грешка при зареждане на файла-ключ %1: %2</translation>
</message>
<message>
<source>Length of the generated password</source>
@@ -5797,11 +6091,11 @@ Available commands:
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
+ <translation>Базата данни не може да бъде записана във файл: %1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
+ <translation>Базата данни не може да бъде записана във файл: % 1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
@@ -5824,10 +6118,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>file empty</source>
<translation type="unfinished"/>
</message>
@@ -5836,18 +6126,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation type="unfinished"/>
</message>
@@ -5887,7 +6165,7 @@ Available commands:
</message>
<message>
<source>Loading the key file failed</source>
- <translation type="unfinished"/>
+ <translation>Зареждането на файл-ключа е неуспешно</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
@@ -5911,15 +6189,15 @@ Available commands:
</message>
<message>
<source>Path of the entry to remove.</source>
- <translation>Path of the entry to remove.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation>Existing single-instance lock file is invalid. Launching new instance.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation>The lock file could not be created. Single-instance mode disabled.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
@@ -5935,7 +6213,7 @@ Available commands:
</message>
<message>
<source>key file of the database</source>
- <translation type="unfinished"/>
+ <translation>файл-ключа на базата данни</translation>
</message>
<message>
<source>read password of the database from stdin</source>
@@ -5947,11 +6225,11 @@ Available commands:
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation>Another instance of KeePassXC is already running.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
- <translation>Fatal error while testing the cryptographic functions.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeePassXC - Error</source>
@@ -5979,19 +6257,19 @@ Available commands:
</message>
<message>
<source>Version %1</source>
- <translation>Version %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Build Type: %1</source>
- <translation>Build Type: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Revision: %1</source>
- <translation>Revision: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Distribution: %1</source>
- <translation>Distribution: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Debugging mode is disabled.</source>
@@ -6005,9 +6283,7 @@ Available commands:
<source>Operating system: %1
CPU architecture: %2
Kernel: %3 %4</source>
- <translation>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Auto-Type</source>
@@ -6015,31 +6291,31 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>KeeShare (signed and unsigned sharing)</source>
- <translation>KeeShare (signed and unsigned sharing)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeeShare (only signed sharing)</source>
- <translation>KeeShare (only signed sharing)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeeShare (only unsigned sharing)</source>
- <translation>KeeShare (only unsigned sharing)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>YubiKey</source>
- <translation>YubiKey</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>TouchID</source>
- <translation>TouchID</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>None</source>
- <translation>None</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Enabled extensions:</source>
- <translation>Enabled extensions:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Cryptographic libraries:</source>
@@ -6079,7 +6355,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Analyze passwords for weaknesses and problems.</source>
- <translation type="unfinished"/>
+ <translation>Анализирай паролите за слабости и проблеми.</translation>
</message>
<message>
<source>Failed to open HIBP file %1: %2</source>
@@ -6098,10 +6374,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6111,17 +6383,13 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>The word list is too small (&lt; 1000 items)</source>
- <translation type="unfinished"/>
+ <translation>Списъкът с думи е твърде малък (&lt; 1000 елемента)</translation>
</message>
<message>
<source>Exit interactive mode.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6162,10 +6430,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6191,7 +6455,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>Database was not modified by merge operation.</translation>
+ <translation>Базата данни не е модифицирана от операция по сливане.</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6239,15 +6503,15 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Failed to open database file %1: not found</source>
- <translation type="unfinished"/>
+ <translation>Грешка при отваряне на файла %1: не е намерен</translation>
</message>
<message>
<source>Failed to open database file %1: not a plain file</source>
- <translation type="unfinished"/>
+ <translation>Грешка при отваряне на файла %1 на база данни: не е текстов файл</translation>
</message>
<message>
<source>Failed to open database file %1: not readable</source>
- <translation type="unfinished"/>
+ <translation>Грешка при отваряне на файла %1: не е четим</translation>
</message>
<message>
<source>Enter password to unlock %1: </source>
@@ -6258,10 +6522,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6277,10 +6537,6 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6293,6 +6549,193 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Целево време за дешифриране на базата в MS.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Задаване на файл-ключа за базата данни.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Невалидно време за дешифриране %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Целевото реме за дешифриране трябва да бъде между %1 и %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>% 1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6329,208 +6772,464 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
- <name>SSHAgent</name>
+ <name>ReportsWidgetHealthcheck</name>
<message>
- <source>Agent connection failed.</source>
+ <source>Also show entries that have been excluded from reports</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Agent protocol error.</source>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No agent running, cannot add identity.</source>
+ <source>Bad</source>
+ <comment>Password quality</comment>
<translation type="unfinished"/>
</message>
<message>
- <source>No agent running, cannot remove identity.</source>
+ <source>Bad — password must be changed</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Agent refused this identity. Possible reasons include:</source>
+ <source>Poor</source>
+ <comment>Password quality</comment>
<translation type="unfinished"/>
</message>
<message>
- <source>The key has already been added.</source>
+ <source>Poor — password should be changed</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
+ <source>Weak</source>
+ <comment>Password quality</comment>
<translation type="unfinished"/>
</message>
<message>
- <source>A confirmation request is not supported by the agent (check options).</source>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заглавие</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Път</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
<translation type="unfinished"/>
</message>
</context>
<context>
- <name>SearchHelpWidget</name>
+ <name>ReportsWidgetHibp</name>
<message>
- <source>Search Help</source>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
+ <source>Perform Online Analysis</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Every search term must match (ie, logical AND)</source>
+ <source>Also show entries that have been excluded from reports</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Modifiers</source>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>exclude term from results</source>
+ <source>Congratulations, no exposed passwords!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>match term exactly</source>
+ <source>Title</source>
+ <translation>Заглавие</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Път</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>use regex in term</source>
+ <source> (Excluded)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Fields</source>
+ <source>This entry is being excluded from reports</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Term Wildcards</source>
+ <source>once</source>
<translation type="unfinished"/>
</message>
<message>
- <source>match anything</source>
+ <source>up to 10 times</source>
<translation type="unfinished"/>
</message>
<message>
- <source>match one</source>
+ <source>up to 100 times</source>
<translation type="unfinished"/>
</message>
<message>
- <source>logical OR</source>
+ <source>up to 1000 times</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Examples</source>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
<translation type="unfinished"/>
</message>
</context>
<context>
- <name>SearchWidget</name>
+ <name>ReportsWidgetStatistics</name>
<message>
- <source>Search</source>
- <translation>Search</translation>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear</source>
- <translation>Clear</translation>
+ <source>Name</source>
+ <translation>Име</translation>
</message>
<message>
- <source>Limit search to selected group</source>
- <translation>Limit search to selected group</translation>
+ <source>Value</source>
+ <translation>Стойност</translation>
</message>
<message>
- <source>Search Help</source>
+ <source>Please wait, database statistics are being calculated...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
+ <source>Database name</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Case sensitive</source>
+ <source>Description</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>SettingsWidgetFdoSecrets</name>
<message>
- <source>Options</source>
+ <source>Location</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
+ <source>Last saved</source>
<translation type="unfinished"/>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show notification when credentials are requested</source>
+ <source>yes</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <source>no</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Exposed database groups:</source>
+ <source>Number of groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
+ <source>Number of entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Group</source>
- <translation>Group</translation>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Manage</source>
+ <source>The database contains entries that have expired.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Authorization</source>
+ <source>Unique passwords</source>
<translation type="unfinished"/>
</message>
<message>
- <source>These applications are currently connected:</source>
+ <source>Non-unique passwords</source>
+ <translation>Неуникални пароли</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Повече от 10% от паролите се преизползват. Използвайте уникални пароли, когато е възможно.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Максимална преизползване на парола</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Някои пароли се преизползват от три пъти. Използвайте уникални пароли, когато е възможно.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Брой кратки пароли</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Препоръчителната минимална дължина на паролата е поне 8 знака.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Брой на слабите пароли</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Препоръчваме използването на дълги, произволни пароли с оценка на &quot;добро&quot; или &quot;отлично&quot;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Записи, изключени от отчетите</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Изключването на записи от отчетите, например защото е известно, че имат лоша парола, не е непременно проблем, но трябва да ги държите под око.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Средна дължина на паролата</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 знака</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Средната дължина на паролата е по-малка от десет знака. По-дългите пароли осигуряват по-голяма сигурност.</translation>
+ </message>
+</context>
+<context>
+ <name>SSHAgent</name>
+ <message>
+ <source>Agent connection failed.</source>
+ <translation>Неуспешно свързване на агента.</translation>
+ </message>
+ <message>
+ <source>Agent protocol error.</source>
+ <translation>Протоколна грешка на агента.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot add identity.</source>
+ <translation>Не се изпълнява агент, не може да добави самоличност.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot remove identity.</source>
+ <translation>Няма работещ агент, не може да премахне самоличността.</translation>
+ </message>
+ <message>
+ <source>Agent refused this identity. Possible reasons include:</source>
+ <translation>Агентът отказа тази самоличност. Възможните причини включват:</translation>
+ </message>
+ <message>
+ <source>The key has already been added.</source>
+ <translation>Ключът вече е добавен.</translation>
+ </message>
+ <message>
+ <source>Restricted lifetime is not supported by the agent (check options).</source>
+ <translation>Ограничената продължителност на живота не се поддържа от агента (проверете настройките).</translation>
+ </message>
+ <message>
+ <source>A confirmation request is not supported by the agent (check options).</source>
+ <translation>Заявка за потвърждение не се поддържа от агента (проверете настройките).</translation>
+ </message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Няма изпълняващ се агент, не може да се покажат самоличностите.</translation>
+ </message>
+</context>
+<context>
+ <name>SearchHelpWidget</name>
+ <message>
+ <source>Search Help</source>
+ <translation>Търсенете помощ</translation>
+ </message>
+ <message>
+ <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
+ <translation>Думи за търсене са следните: [modifiers][field:][&quot;]term[&quot;]</translation>
+ </message>
+ <message>
+ <source>Every search term must match (ie, logical AND)</source>
+ <translation>Всеки дума за търсене трябва да съответства (т.е. логическо И)</translation>
+ </message>
+ <message>
+ <source>Modifiers</source>
+ <translation>Модификатори</translation>
+ </message>
+ <message>
+ <source>exclude term from results</source>
+ <translation>изключване на термин от резултатите</translation>
+ </message>
+ <message>
+ <source>match term exactly</source>
+ <translation>точен съвпадение на думата</translation>
+ </message>
+ <message>
+ <source>use regex in term</source>
+ <translation>използвайте регулярен израз за търсене</translation>
+ </message>
+ <message>
+ <source>Fields</source>
+ <translation>Полета</translation>
+ </message>
+ <message>
+ <source>Term Wildcards</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Disconnect</source>
+ <source>match anything</source>
+ <translation>съвпадение на всичко</translation>
+ </message>
+ <message>
+ <source>match one</source>
+ <translation>съвпадение един</translation>
+ </message>
+ <message>
+ <source>logical OR</source>
+ <translation>логическо ИЛИ</translation>
+ </message>
+ <message>
+ <source>Examples</source>
+ <translation>Примери</translation>
+ </message>
+</context>
+<context>
+ <name>SearchWidget</name>
+ <message>
+ <source>Search</source>
+ <translation>Търсене</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Почисти</translation>
+ </message>
+ <message>
+ <source>Limit search to selected group</source>
+ <translation>Ограничаване на търсенето до избрана група</translation>
+ </message>
+ <message>
+ <source>Search Help</source>
+ <translation>Търсенете помощ</translation>
+ </message>
+ <message>
+ <source>Search (%1)...</source>
+ <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
+ <translation>Търсене (%1)...</translation>
+ </message>
+ <message>
+ <source>Case sensitive</source>
<translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>SettingsWidgetFdoSecrets</name>
<message>
- <source>Database settings</source>
- <translation>Database settings</translation>
+ <source>Options</source>
+ <translation>Опции</translation>
</message>
<message>
- <source>Edit database settings</source>
+ <source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Unlock database</translation>
+ <source>General</source>
+ <translation>Основни</translation>
</message>
<message>
- <source>Unlock database to show more information</source>
+ <source>Show notification when credentials are requested</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Lock database</translation>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock to show</source>
+ <source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>None</source>
- <translation>None</translation>
+ <source>Authorization</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>These applications are currently connected:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6569,15 +7268,15 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Generate</source>
- <translation>Generate</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Import</source>
- <translation>Import</translation>
+ <translation>Импортиране</translation>
</message>
<message>
<source>Export</source>
- <translation type="unfinished"/>
+ <translation>Експортиране</translation>
</message>
<message>
<source>Imported certificates</source>
@@ -6597,19 +7296,19 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remove</translation>
+ <translation>Премахване</translation>
</message>
<message>
<source>Path</source>
- <translation>Path</translation>
+ <translation>Път</translation>
</message>
<message>
<source>Status</source>
- <translation type="unfinished"/>
+ <translation>Статут</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Fingerprint</translation>
+ <translation>Отпечатък</translation>
</message>
<message>
<source>Certificate</source>
@@ -6625,7 +7324,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Unknown</source>
- <translation type="unfinished"/>
+ <translation>Неизвестен</translation>
</message>
<message>
<source>key.share</source>
@@ -6634,11 +7333,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>KeeShare key file</source>
- <translation type="unfinished"/>
+ <translation>Ключ-файл на KeeShare</translation>
</message>
<message>
<source>All files</source>
- <translation>All files</translation>
+ <translation>Всички файлове</translation>
</message>
<message>
<source>Select path</source>
@@ -6670,7 +7369,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Key</source>
- <translation>Key</translation>
+ <translation>Ключ</translation>
</message>
<message>
<source>Signer name field</source>
@@ -6772,7 +7471,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Never</source>
- <translation>Never</translation>
+ <translation>Никога</translation>
</message>
<message>
<source>Always</source>
@@ -6803,10 +7502,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6866,11 +7561,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>000000</source>
- <translation type="unfinished"/>
+ <translation>000000</translation>
</message>
<message>
<source>Copy</source>
- <translation>Copy</translation>
+ <translation>Копиране</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
@@ -6881,7 +7576,7 @@ Kernel: %3 %4</translation>
<name>TotpExportSettingsDialog</name>
<message>
<source>Copy</source>
- <translation>Copy</translation>
+ <translation>Копиране</translation>
</message>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
@@ -6890,30 +7585,30 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
+ <translation>Възникна грешка при създаването на QR кода.</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
+ <translation>Затваряне след %1 секунди.</translation>
</message>
</context>
<context>
<name>TotpSetupDialog</name>
<message>
<source>Setup TOTP</source>
- <translation type="unfinished"/>
+ <translation>Настройка на TOTP</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
- <translation>Default RFC 6238 token settings</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Steam token settings</source>
- <translation>Steam token settings</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Use custom settings</source>
- <translation>Use custom settings</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Custom Settings</source>
@@ -6926,7 +7621,7 @@ Kernel: %3 %4</translation>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> sec</translation>
+ <translation>сек</translation>
</message>
<message>
<source>Code size:</source>
@@ -6946,7 +7641,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Algorithm:</source>
- <translation type="unfinished"/>
+ <translation>Алгоритъм:</translation>
</message>
<message>
<source>Time step field</source>
@@ -6954,11 +7649,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source> digits</source>
- <translation type="unfinished"/>
+ <translation>цифри</translation>
</message>
<message>
<source>Invalid TOTP Secret</source>
- <translation type="unfinished"/>
+ <translation>Невалидна TOTP тайна</translation>
</message>
<message>
<source>You have entered an invalid secret key. The key must be in Base32 format.
@@ -6967,7 +7662,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Confirm Remove TOTP Settings</source>
- <translation type="unfinished"/>
+ <translation>Потвърдете премахването на TOTP настройките</translation>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
@@ -6975,92 +7670,146 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Невалиден URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
- <translation type="unfinished"/>
+ <translation>Проверка за актуализации</translation>
</message>
<message>
<source>Checking for updates...</source>
- <translation type="unfinished"/>
+ <translation>Проверка за актуализации...</translation>
</message>
<message>
<source>Close</source>
- <translation>Close</translation>
+ <translation>Затваряне</translation>
</message>
<message>
<source>Update Error!</source>
- <translation type="unfinished"/>
+ <translation>Грешка при актуализиране!</translation>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
+ <translation>Възникна грешка при извличането на информация за актуализиране.</translation>
</message>
<message>
<source>Please try again later.</source>
- <translation type="unfinished"/>
+ <translation>Моля, опитайте отново по-късно.</translation>
</message>
<message>
<source>Software Update</source>
- <translation type="unfinished"/>
+ <translation>Софтуерно актуализиране</translation>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
+ <translation>Нова версия на KeePassXC е налична!</translation>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC %1 е на разположение — текущата %2.</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
+ <translation>Изтеглете я на keepassxc.org</translation>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
+ <translation>Версията е актуалната!</translation>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC %1 в момента е най-новата версия</translation>
</message>
</context>
<context>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Start storing your passwords securely in a KeePassXC database</translation>
+ <translation>Започнете да съхранявате паролите си сигурно в KeePassXC базата данни</translation>
</message>
<message>
<source>Create new database</source>
- <translation>Create new database</translation>
+ <translation>Създаване на нова база данни</translation>
</message>
<message>
<source>Open existing database</source>
- <translation>Open existing database</translation>
+ <translation>Отваряне на съществуващата база данни</translation>
</message>
<message>
<source>Import from KeePass 1</source>
- <translation type="unfinished"/>
+ <translation>Внос от KeePass 1</translation>
</message>
<message>
<source>Import from CSV</source>
- <translation>Import from CSV</translation>
+ <translation>Импортиране от CSV</translation>
</message>
<message>
<source>Recent databases</source>
- <translation>Recent databases</translation>
+ <translation>Скорошни бази данни</translation>
</message>
<message>
<source>Welcome to KeePassXC %1</source>
- <translation>Welcome to KeePassXC %1</translation>
+ <translation>Добре дошли в KeePassXC %1</translation>
</message>
<message>
<source>Import from 1Password</source>
- <translation type="unfinished"/>
+ <translation>Импортиране от 1Password</translation>
</message>
<message>
<source>Open a recent database</source>
+ <translation>Отваряне на скорошна база данни</translation>
+ </message>
+</context>
+<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Конфигуриран слот -% 3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Натиснете</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Пасивни</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Невалиден слот -% 2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>YubiKey интерфейсът не е инициализиран.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Хардуерният ключ в момента се използва.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Не може да се намери хардуерен ключ със сериен номер %1. Включете го, за да продължите.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Грешка с USB при достъп до хардуерния ключ: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
<translation type="unfinished"/>
</message>
</context>
@@ -7068,7 +7817,7 @@ Example: JBSWY3DPEHPK3PXP</source>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
- <translation>Refresh</translation>
+ <translation>Обновяване</translation>
</message>
<message>
<source>YubiKey Challenge-Response</source>
@@ -7079,20 +7828,28 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
+ <source>Refresh hardware tokens</source>
+ <translation>Обновяване на хардуерни токени</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
+ <source>Hardware key slot selection</source>
+ <translation>Избор на слот на хардуерен ключ</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation type="unfinished"/>
+ <source>Could not find any hardware keys!</source>
+ <translation>Не са намерени хардуерни ключове!</translation>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Откриване на хардуерни ключове...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Не са открити хардуерни ключове</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_bn.ts b/share/translations/keepassx_bn.ts
deleted file mode 100644
index 2aa9200a4..000000000
--- a/share/translations/keepassx_bn.ts
+++ /dev/null
@@ -1,5445 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="bn" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation>KeePassXC সম্পর্কে</translation>
- </message>
- <message>
- <source>About</source>
- <translation>সম্পর্কে</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>বাগ রিপোর্ট করুন: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt; https://github.com&lt;/a&gt;</translation>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>GNU General Public License (GPL) সংস্করণ 2 বা (আপনার ইচ্ছানুসারে) সংস্করণ 3 এর অধীনে KeePassXC বিনামূল্যে বিতরন করা হয়।</translation>
- </message>
- <message>
- <source>Contributors</source>
- <translation>অবদানকারীগণ</translation>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt; গিটহাবে আবদনকারীদের দেখুন&lt;/a&gt;</translation>
- </message>
- <message>
- <source>Debug Info</source>
- <translation>ডিবাগের তথ্য</translation>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation>যখন আপনি একটি বাগ রিপোর্ট করবেন, নিচের তথ্যগুলো অন্তর্ভুক্ত করুন:</translation>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>ক্লিপবোর্ডে কপি করুন</translation>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation>পরিমার্জনা %1</translation>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation>বিতরণ: %1</translation>
- </message>
- <message>
- <source>Libraries:</source>
- <translation>লাইব্রেরীসমূহ:</translation>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation>অপারেটিং সিস্টেম: %1
-সিপিইউ আর্কিটেক্সার: %2
-কার্নেল: %3 %4</translation>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation>সক্রিয় এক্সটেনশনগুলি:</translation>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation>প্রকল্প রক্ষণাবেক্ষণকারী:</translation>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>KeePassXC টিম থেকে বিশেষ ধন্যবাদ debfx-কে মূল KeePassX তৈরি করার জন্য ।</translation>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>অটো-টাইপ</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>SSH এজেন্ট</translation>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH এজেন্ট সক্ষম করুন (পুনর্সূচনা প্রয়োজন)</translation>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>সাধারন</translation>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation>সূচনা</translation>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation>ফাইল ব্যবস্থাপনা</translation>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>নিরাপদে ডাটাবেস সংরক্ষণ করুন (ড্রডবক্স, এবং অন্যান্যর সাথে অসংগত হতে পারে)</translation>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation>সংরক্ষণ করার আগে ডাটাবেস ব্যাকআপ করুন</translation>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation>এন্ট্রি ব্যবস্থাপনা</translation>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>সাধারন</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>অটো-টাইপ</translation>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation>এমএস</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation>সময় শেষ</translation>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation>ক্লিপবোর্ড পরিস্কার হবে</translation>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>সে.</translation>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation>অব্যবহৃত থাকলে ডাটাবেস লক হবে</translation>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation>সাচ্ছন্দ্য</translation>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation>ডাটাবেস লক হবে লিড বন্ধ করলে বা সেশন লক করলে</translation>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation>উইন্ডো মিনিমাইজ করলে ডাটাবেস লক হবে</translation>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>অটো-টাইপের পরে পূনরায় লক করুন আগের লক করা ডাটাবেস</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>আবার যখন দৃশ্যমান হবে তখন পাসওয়ার্ড লাগবেনা</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation>ডিফল্টভাবে এন্ট্রি নোট লুকান</translation>
- </message>
- <message>
- <source>Privacy</source>
- <translation>গোপণীয়তা</translation>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>উইন্ডো শিরোনামের সাথে সম্পর্কিক একটিও এন্ট্রি খুঁজে পাওয়া যায়নি:</translation>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>অটো-টাইপ- KeePassXC</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>অটো-টাইপ</translation>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>আপনার অটো টাইপ বিবৃতি সিনট্যাক্স সঠিক নয়!</translation>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>এই অটো-টাইপ কমান্ডের মধ্যে একটি খুব দীর্ঘ বিলম্ব রয়েছে। আপনি কি সত্যিই এগিয়ে যেতে চান?</translation>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>এই অটো-টাইপ কমান্ডটি খুব ধীর গতির কী প্রেস রয়েছে। আপনি কি সত্যিই এগিয়ে যেতে চান?</translation>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>এই অটো-টাইপ কমান্ডটি আর্গুমেন্টগুলির মধ্যে রয়েছে যা প্রায়শই পুনরাবৃত্তি হয়। আপনি কি সত্যিই এগিয়ে যেতে চান?</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>উইন্ডো</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>অনুক্রম</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>সচারচর অনুক্রম</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>দল</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>শিরোনাম</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>ব্যবহারকরীর নাম</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>অনুক্রম</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>অটো-টাইপ- KeePassXC</translation>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation>অটো-টাইপের জন্য এন্ট্রি নির্বাচন করুন</translation>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC- ব্রাউজার অ্যাক্সেস নিশ্চিত করুন</translation>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation>এই সিদ্ধান্ত মনে রাখুন</translation>
- </message>
- <message>
- <source>Allow</source>
- <translation>অনুমতি দিন</translation>
- </message>
- <message>
- <source>Deny</source>
- <translation>নাকচ করুন</translation>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 নিম্নলিখিত আইটেম (গুলি) এর জন্য পাসওয়ার্ড অ্যাক্সেসের অনুরোধ জানিয়েছে
-আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন।</translation>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>বাতিল</translation>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation>সংলাপ</translation>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>KeePassXC- ব্রাউজারের সাথে আপনার ডেটাবেস অ্যাক্সেস করার জন্য এটি প্রয়োজনীয়</translation>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation>ব্রাউজারের সাথে KeepassXC ইন্টিগ্রেশন সচল করুন</translation>
- </message>
- <message>
- <source>General</source>
- <translation>সাধারন</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation>এইসব ব্রাউজারের সাথে ইন্টিগ্রেশন সচল করুন:</translation>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;গুগল ক্রোম</translation>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation>&amp;ফায়ারফক্স</translation>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation>&amp;ক্রোমিয়াম</translation>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;ভিভালডি</translation>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>প্রমাণপ্রত্রাদি অনুরোধ করা হলে একটি বিজ্ঞপ্তি দেখান</translation>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান</translation>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>শুধুমাত্র (http://, https://, ...) সম্বলিত এন্ট্রিগুলো এসেছে।</translation>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>ইউআরএল সূচি মিলান (e.g., https://...)</translation>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে।</translation>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে</translation>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>সম্ভাব্য সর্ব্বোত্তম ফলাফলটি শিরোনাম অনুসারে সাজান</translation>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>সম্ভাব্য সর্ব্বোত্তম ফলাফলটি ব্যবহারকারী অনুসারে সাজান</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>উন্নততর</translation>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>তথ্যে প্রবেশ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না</translation>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>তথ্য হালনাগাদ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না</translation>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation>শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত।</translation>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>এই ধরনের তথ্য সকল চালু থাকা ডাটেবেসে খূঁজে দেখুন</translation>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না।</translation>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&quot;KPH: &quot; দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান</translation>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>KeePassXC অথবা keepassxc-proxy বাইনারী পাথ হালনাগাদ রাখুন লোকাল মেসেজিং স্ক্রিপ্ট হিসেবে চালুর সময়</translation>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>স্টার্ট-আপের সময় ন্যাটিভ ম্যাসেজিং ফাইল আপডেট করুন</translation>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি এ্যাপ সমর্থন করে।</translation>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি ব্যবহার করুন</translation>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>আপনি যদি ম্যানুয়ালী প্রক্সি যোগ করে থাকেন তবে তার স্থান ব্যাবহার করুন</translation>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>পরিবর্তিত প্রক্সি স্থান ব্যবহার করুন</translation>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>ব্রাউজ...</translation>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;সতর্কতা:&lt;/b&gt; নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে।</translation>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation>স্বনির্বাচিত প্রক্সি অবস্থান নির্বাচন করুন</translation>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation>আমরা দুঃখিত, কিন্তু এই মুহূর্তে স্নাপ রিলিজ KeePassXC ব্রাউজার সমর্থন করে না।</translation>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: নতুন কী যুক্ত করার আবেদন</translation>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation>আপনি উপরের কী যুক্ত করার অনুরোধ গ্রহণ করেছে।
-
-যদি আপনি এটি আপনার KeePassXC ডাটাবেস প্রবেশের সম্মতি দিতে চান, তা শনাক্ত করা যায় এমন একটি অনন্য নাম দিন।</translation>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation>সংরক্ষণ করুন এবং প্রবেশে সম্মতি দিন</translation>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: বর্তমান কী উপরিলিখন করবেন?</translation>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>শেয়ারকৃত এনক্রিপশন কী &quot;%1&quot; নামটি ইতিমধ্যেই বিদ্যমান।
-এটির ওপর দিয়েই লিখতে চান?</translation>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: হালনাগাদ এন্ট্রি</translation>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>%1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান?</translation>
- </message>
- <message>
- <source>Abort</source>
- <translation>বাতিল</translation>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation>ক্লোন বিকল্পসমূহ</translation>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation>&apos; - Clone&apos; শিরোনামে যোগ করুন</translation>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation>ব্যবহারকারীর নাম এবং পাসওয়ার্ড তথ্যসূত্র দ্বারা প্রতিস্থাপন করুন</translation>
- </message>
- <message>
- <source>Copy history</source>
- <translation>ইতিহাস অনুলিপি করুন</translation>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation>CSV আমদানি করুন</translation>
- </message>
- <message>
- <source>filename</source>
- <translation>ফাইলের নাম</translation>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation>আকার, সারি, কলাম</translation>
- </message>
- <message>
- <source>Encoding</source>
- <translation>এনকোডিং</translation>
- </message>
- <message>
- <source>Codec</source>
- <translation>কোডেক</translation>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation>লেখা যোগ্য হয়েছে</translation>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation>ক্ষেত্র আলাদা করা হয়</translation>
- </message>
- <message>
- <source>Comments start with</source>
- <translation>মন্তব্য শুরু হয়েছে</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>প্রথম রেকর্ড রয়েছে ফিল্ডের নাম</translation>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation>হেডার লাইন সংখ্যা বাতিল করতে হবে</translation>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation>&apos; \&apos; কে পালানোর চরিত্র বিবেচনা করুন </translation>
- </message>
- <message>
- <source>Preview</source>
- <translation>প্রাক্-দর্শন</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>কলাম বিন্যাস</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>CSV ফাইলে উপস্থিত নয়</translation>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation>CSV ফাইল থেকে আমদানি করা।</translation>
- </message>
- <message>
- <source>Original data: </source>
- <translation>অরিজিনাল তথ্য: </translation>
- </message>
- <message>
- <source>Error</source>
- <translation>ত্রুটি</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation><numerusform>%n column(s)</numerusform><numerusform>%n কলাম(সমূহ)</numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>রুট</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation>মাস্টার কী প্রবেশ করান</translation>
- </message>
- <message>
- <source>Key File:</source>
- <translation>কী ফাইল:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>পাসওয়ার্ড:</translation>
- </message>
- <message>
- <source>Browse</source>
- <translation>ব্রাউজ করুন</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation>রিফ্রেশ</translation>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation>চ্যালেঞ্জের জবাব:</translation>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation>পূর্ববর্তী কী ফাইল ফরম্যাট</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation>আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন
- যা ভবিষ্যতে অসমর্থিত হতে পারে ।
-নতুন কী (key) ফাইল তৈরি করুন।</translation>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation>আবার এই সতর্কীকরণ দেখাবেন না</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>সকল ফাইল</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>কী ফাইলগুলো</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>কী ফাইল নির্বাচন করুন</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation>পাসওয়ার্ডসমূহ</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>সাধারন</translation>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>সকল ব্রাউজারে সংযোগ বিচ্ছিন্ন করুন</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>অপসারণ করুন</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation>কী</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>মান</translation>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation>KeePassXC: কোন কী পাওয়া যায়নি</translation>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে</translation>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation>সঞ্চিত অনুমতিসমূহ অপসারণ করা হচ্ছে...</translation>
- </message>
- <message>
- <source>Abort</source>
- <translation>বাতিল</translation>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে</translation>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি।</translation>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation>সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই।</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation>এনক্রিপশন এ্যালগরিদম:</translation>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation>AES: 256 Bit (default)</translation>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 Bit</translation>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation>কী ডেরিভেশন ফাংশন:</translation>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation>রাউন্ড রূপান্তর করো:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation>বেঞ্চমার্ক 1 সেকেন্ড দেরি</translation>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation>মেমোরি ব্যবহার:</translation>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation>সমান্তরালভাবে:</translation>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation>খুব বেশি রাউন্ড গণনা</translation>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>Argon2 সাথে খুব বেশি সংখ্যক রূপান্তর কী রাউন্ডের ব্যবহার করছেন।
-
-আপনি এই সংখ্যা রাখতে চাইলে, ডাটাবেস খোলার জন্য সময় নেবে কয়েক ঘন্টা বা দিন (বা তারও বেশি) ।</translation>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation>বোঝা যায়, নাম্বার রাখুন</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>বাতিল</translation>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation>রাউন্ড খুব কম সংখ্যক</translation>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation>আপনি খুব কম সংখ্যক রূপান্তর কী রাউন্ডের AES-KDF এর সাথে ব্যবহার করছে।
-
-যদি আপনি এই নাম্বার রাখেন, আপনার ডাটাবেজ খুব সহজেই ক্রাক হতে পারে!</translation>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation>KDF অপরিবর্তিত</translation>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>নতুন KDF প্যারামিটার দিয়ে কী পরিবর্তন করতে ব্যর্থ হয়েছে। KDF অপরিবর্তিত।</translation>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation>ডাটাবেস মেটা ডাটা</translation>
- </message>
- <message>
- <source>Database name:</source>
- <translation>ডাটাবেজ নাম:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>ডাটাবেস বিবরণ:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>পূর্ব-নির্ধারিত ব্যবহারকারীর নাম:</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation>ইতিহাস সেটিংস</translation>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>সর্বাধিত ঐতিহাসিক বিষয়:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>সর্বাধিত ঐতিহাসিক আকার:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation> MiB</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation>রিসাইকেল বিন ব্যবহার করুন </translation>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation>অতিরিক্ত ডাটাবেস সেটিংস</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>সংকোচন সক্রিয় করুন (প্রস্তাবিত)</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 ডাটাবেস</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>সকল ফাইল</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>উন্মুক্ত ডাটাবেস</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>CSV ফাইল</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation>ডাটাবেস একত্রীকরণ</translation>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>খোলা KeePass 1 তথ্যভাণ্ডার</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>KeePass 1 তথ্যভাণ্ডার</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation>ডাটাবেস CSV ফাইল হিসেবে রপ্তানি করুন</translation>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation> CSV ফাইলে লেখা ব্যর্থ হয়েছে।</translation>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation>সন্ধান করা হচ্ছে...</translation>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>আপনি কি সত্যিই এন্ট্রি &quot;%1&quot; মুছে ফেলতে চান?</translation>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>আপনি কি &quot;%1&quot; এন্ট্রিটি রিসাইকেল বিনে সরাতে চান?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>আপনি কি সত্যিই %n entry(s) রিসাইকেল বিনে সরাতে চান?</numerusform><numerusform>আপনি কি সত্যিই %n এন্ট্রি(সমূহ) রিসাইকেল বিনে সরাতে চান?</numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation>কমান্ড চালাও?</translation>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>আপনি কি নিচের কমান্ড সঞ্চালন করতে চান? &lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation>আমার পছন্দ মনে রাখুন</translation>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>আপনি কি গ্রুপ &apos;%1&apos; মুছে ফেলতে চান?</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation>কোন বর্তমান ডাকাবেস নেই।</translation>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation>কোন উৎস ডাটাবেস নেই, কিছুই করা যাবেনা।</translation>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation>অনুসন্ধানের ফলাফল (%1)</translation>
- </message>
- <message>
- <source>No Results</source>
- <translation>কোনো ফলাফল নেই</translation>
- </message>
- <message>
- <source>File has changed</source>
- <translation>ফাইলটি পরিবর্তিত হয়েছে</translation>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation>এই ডাটাবেস ফাইল পরিবর্তন করা হয়েছে। আপনি যে পরিবর্তনগুলো লোড করতে চান?</translation>
- </message>
- <message>
- <source>Merge Request</source>
- <translation>একত্রিত করার অনুরোধ করুন</translation>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation>এই ডাটাবেস ফাইল পরিবর্তন হয়েছে এবং আপনার পরিবর্তন অসংরক্ষিত রয়েছে।
-আপনি কি আপনার পরিবর্তন একত্রিত করতে চান?</translation>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation>রিসাইকেল বিন খালি করুন?</translation>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>আপনি কি নিশ্চিত যে ,আপনি রিসাইকেল বিন থেকে সবকিছু স্থায়ীভাবে মুছে ফেলতে চান?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation>ফাইলটি শুধুমাত্র পঠন পরিমণ্ডলে খোলা।</translation>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation>&apos;%1&apos; পরিবর্তিত হয়েছে।
-পরিবর্তন সংরক্ষণ করব?</translation>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation>পরিবর্তন সংরক্ষণ করব?</translation>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation>নিরাপদ সংরক্ষণ অক্ষম?</translation>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation>KeePassXC একাধিক বার ডাটাবেস সংরক্ষণ করতে ব্যর্থ হয়েছে। ফাইল সিংক্রোনাইজ সেবা ফাইলটি লক ধরে রাখলে এমনটি হতে পারে।
-নিরাপদ সংরক্ষণ অক্ষম করুন এবং আবার চেষ্টা করুন।</translation>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation>পাসওয়ার্ডসমূহ</translation>
- </message>
- <message>
- <source>Save database as</source>
- <translation>ডাটাবেজ হিসেবে সংরক্ষণ করুন</translation>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 ডাটাবেস</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>এন্ট্রি</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>উন্নততর</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>আইকন</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>অটো-টাইপ</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>বৈশিষ্ট্য</translation>
- </message>
- <message>
- <source>History</source>
- <translation>ইতিহাস</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>SSH এজেন্ট</translation>
- </message>
- <message>
- <source>n/a</source>
- <translation>n/a</translation>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation>(এনক্রিপ্টেড)</translation>
- </message>
- <message>
- <source>Select private key</source>
- <translation>ব্যক্তিগত কী নির্বাচন করো</translation>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation>একটি প্রাইভেট কী&apos;র জন্য ফাইলটি খুবই বড়</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>গোপনীয় কী খুলতে ব্যর্থ</translation>
- </message>
- <message>
- <source>Entry history</source>
- <translation>এন্ট্রি ইতিহাস</translation>
- </message>
- <message>
- <source>Add entry</source>
- <translation>এন্ট্রি যোগ করো</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>এন্ট্রি সম্পাদন করো</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>ভিন্ন ভিন্ন পাসওয়ার্ড সরবরাহ করা হয়েছে।</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>নতুন বৈশিষ্ট্য</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation>আপনি কি নিশ্চিত আপনি এই বৈশিষ্ট্য অপসারণ করতে চান?</translation>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>আগামীকাল</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>দিনগুলো সপ্তাহগুলো মাসগুলো %n</numerusform><numerusform>%n সপ্তাহ(s)</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation><numerusform>%n month(s)</numerusform><numerusform>%n মাস(s)</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>জেনারেট করা পাসওয়ার্ড প্রয়োগ করবেন?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>জেনারেট করা পাসওয়ার্ড এন্ট্রির সাথে প্রয়োগ করতে চান?</translation>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation>এন্ট্রি সফলভাবে আপডেট করা হয়েছে।</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation>অতিরিক্ত বৈশিষ্ট্য</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>যোগ করুন</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>অপসারণ করুন</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation>নাম পরিবর্তন করুন</translation>
- </message>
- <message>
- <source>Protect</source>
- <translation>রক্ষা করুন</translation>
- </message>
- <message>
- <source>Reveal</source>
- <translation>রিভেল</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>সংযুক্তিসমূহ</translation>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation>পুরোভূমির রং:</translation>
- </message>
- <message>
- <source>Background Color:</source>
- <translation>পটভূমির রং:</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation>এই এন্ট্রির জন্য অটো-টাইপ সক্রিয় করুন</translation>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>দল থেকে পূর্ব-নির্ধারিত অটো-টাইপ ধারাবাহিকতা বজায়</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>পছন্দসই অটো-টাইপ ক্রম ব্যবহার করুন:</translation>
- </message>
- <message>
- <source>Window Associations</source>
- <translation>উইণ্ডো সমিতিসমূহ</translation>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>উইন্ডো শিরোনাম:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation>এই এসোসিয়েশনের জন্য নির্দিষ্ট ক্রম ব্যবহার করুন:</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>প্রদর্শন</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>পুনর্বহাল করুন</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>মুছে ফেলুন</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>সব মুছে ফেলুন</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>ইউআরএল:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>পাসওয়ার্ড:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>পূনরায়:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>শিরোনাম:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>নোটসমূহ</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation>পূর্বনির্ধারিত</translation>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation>নোট বিভাগ দেখার জন্য চেকবক্স টিক দিন।</translation>
- </message>
- <message>
- <source>Username:</source>
- <translation>ব্যবহারকারীর নাম:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>মেয়াদ উত্তীর্ণ হয়ে যাবে</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation>ফরম</translation>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation>পরে এজেন্ট থেকে কী অপসারণ করুন</translation>
- </message>
- <message>
- <source> seconds</source>
- <translation> সেকেন্ড</translation>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation>আঙ্গুলের ছাপ</translation>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation>ডাটাবেজ বন্ধ/লক করা হয় তখন এজেন্টের কাছ থেকে কী অপসারণ করুন</translation>
- </message>
- <message>
- <source>Public key</source>
- <translation>পাবলিক কী</translation>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation>এজেন্টের কাছে কী যোগ করুন যখন ডাটাবেস খোলা/মুক্ত থাকে</translation>
- </message>
- <message>
- <source>Comment</source>
- <translation>মন্তব্য</translation>
- </message>
- <message>
- <source>Decrypt</source>
- <translation>ডিক্রাইপ্ট</translation>
- </message>
- <message>
- <source>n/a</source>
- <translation>n/a</translation>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>ক্লিপবোর্ডে কপি করুন</translation>
- </message>
- <message>
- <source>Private key</source>
- <translation>ব্যক্তিগত কী</translation>
- </message>
- <message>
- <source>External file</source>
- <translation>বাইরের ফাইল</translation>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>ব্রাউজ...</translation>
- </message>
- <message>
- <source>Attachment</source>
- <translation>সংযুক্তি</translation>
- </message>
- <message>
- <source>Add to agent</source>
- <translation>এজেন্টের সাথে যুক্ত করুন</translation>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation>এজেন্টের কাছ থেকে অপসারণ করুন</translation>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation>এ কী যখন ব্যবহার করা হয় ব্যবহারকারী অনুমোদন প্রয়োজন</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>দল</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>আইকন</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>বৈশিষ্ট্য</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>দল যোগ করুন</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>দল সম্পাদন করুন</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>সক্রিয় করুন</translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>নিষ্ক্রিয়</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation>মূল দল (%1) এর মত</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation>ফরম</translation>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>পাসওয়ার্ড:</translation>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>নাম</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>নোটসমূহ</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>মেয়াদ উত্তীর্ণ হয়ে যাবে</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>সন্ধান</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>অটো-টাইপ</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>মূল দলে পূর্বনির্ধারিত অটো-টাইপ ধারা ব্যবহার করুন</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>ডিফল্ট অটো-টাইপ ধারা</translation>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation>ডিফল্ট আইকন ব্যবহার করুন</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>ইচ্ছামত আইকন ব্যবহার করুন</translation>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>নিজস্ব আইকন যোগ করুন</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation>স্বনির্বাচিত আইকন মুছে ফেলুন</translation>
- </message>
- <message>
- <source>Download favicon</source>
- <translation>Favicon ডাউনলোড করুন</translation>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation>Favicon আনতে অক্ষম হয়েছে।</translation>
- </message>
- <message>
- <source>Images</source>
- <translation>ছবি</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>সকল ফাইল</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation>স্বনির্বাচিত আইকন ইতোমধ্যে বিদ্যমান</translation>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation>মুছে ফেলা নিশ্চিত করুন</translation>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>সৃষ্টি করেছে:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>সংশোধিত:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>দেখা হয়েছে:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>Uuid:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation>প্লাগ-ইন তথ্য</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>অপসারণ করুন</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation>প্লাগ-ইন তথ্য মুছে ফেলতে চান?</translation>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation>আপনি কি নির্বাচিত প্লাগ-ইন তথ্য মুছে ফেলতে চান?
-এর কারনে আক্রান্ত প্লাগ ইন খারাপ হতে পারে।</translation>
- </message>
- <message>
- <source>Key</source>
- <translation>কী</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>মান</translation>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>নাম</translation>
- </message>
- <message>
- <source>Size</source>
- <translation>মাপ</translation>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation>ফরম</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>যোগ করুন</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>অপসারণ করুন</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>খুলুন</translation>
- </message>
- <message>
- <source>Save</source>
- <translation>সংরক্ষণ করুন</translation>
- </message>
- <message>
- <source>Select files</source>
- <translation>ফাইল নির্বাচন করুন</translation>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>আপনি কি নিশ্চিত যে আপনি %n সংযোজন (গুলো) অপসারণ করতে চান?</numerusform><numerusform>আপনি কি নিশ্চিত যে আপনি %n সংযুক্তি (গুলো) অপসারণ করতে চান?</numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation>সংযুক্তিসমূহ সংরক্ষণ করুন</translation>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation>ডিরেক্টরি তৈরি করা যায়নি:
- %1</translation>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>আপনি কি বিদ্যমান ফাইল &quot;%1&quot; সঙ্গে সংযুক্তি উপরিলিখন করতে চান?</translation>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation>উপরিলিখন নিশ্চিত করুন</translation>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation>সংযুক্তি সংরক্ষণ করা যায়নি:
-%1</translation>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation>সংযুক্তি খুলতে ব্যর্থ:
- %1</translation>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation>সংযুক্তিসমূহ খুলতে ব্যর্থ:
-%1</translation>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>নাম</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>শেষ বার পরিমার্জিত</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>শিরোনাম</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>ব্যবহারকরীর নাম</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation>প্রসঙ্গ: </translation>
- </message>
- <message>
- <source>Group</source>
- <translation>দল</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>শিরোনাম</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>ব্যবহারকরীর নাম</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation>কখনো না</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>পাসওয়ার্ড</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>নোটসমূহ</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>মেয়াদ উত্তীর্ণ হয়ে যাবে</translation>
- </message>
- <message>
- <source>Created</source>
- <translation>সৃষ্টি করা হয়েছে</translation>
- </message>
- <message>
- <source>Modified</source>
- <translation>পরিবর্তন করা হয়েছে</translation>
- </message>
- <message>
- <source>Accessed</source>
- <translation>প্রবেশ করা হয়েছে</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>সংযুক্তিসমূহ</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation>TOTP টোকেন তৈরি করুন</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>বন্ধ করুন</translation>
- </message>
- <message>
- <source>General</source>
- <translation>সাধারন</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>ব্যবহারকরীর নাম</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>পাসওয়ার্ড</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation>মেয়াদ শেষে</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation>বৈশিষ্ট্যাবলী</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>সংযুক্তিসমূহ</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>নোটসমূহ</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation>অটোটাইপ</translation>
- </message>
- <message>
- <source>Window</source>
- <translation>উইন্ডো</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>অনুক্রম</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation>সন্ধান করা হচ্ছে</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>সন্ধান</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation>পরিস্কার</translation>
- </message>
- <message>
- <source>Never</source>
- <translation>কখনো না</translation>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation>[সংরক্ষিত]</translation>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation>সক্রিয়</translation>
- </message>
- <message>
- <source>Disabled</source>
- <translation>নিষ্ক্রিয়</translation>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation>পছন্দসই প্রদর্শন‌</translation>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation>ব্যবহারকারীর নাম লুকান</translation>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation>পাসওয়ার্ড লুকান</translation>
- </message>
- <message>
- <source>Fit to window</source>
- <translation>উইন্ডোতে মানানসই</translation>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation>বিষয়বস্তুর সাথে মিল করুন</translation>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation>স্বাভাবিক অবস্থায় ফেরত</translation>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation>সংযুক্তিসমূহ (আইকন)</translation>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation>রিসাইকেল বিন</translation>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: ফাইল সংরক্ষণ হয়নি!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>স্থানীয় মেসেজিং স্ক্রিপ্ট ফাইল সংরক্ষণ হয়নি।</translation>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation>বন্ধ করুন</translation>
- </message>
- <message>
- <source>Close message</source>
- <translation>বার্তা বন্ধ করুন</translation>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation>মাস্টার কী গণনা করতে অক্ষম</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>চ্যালেঞ্জের জবাব ইস্যু করতে ব্যর্থ।</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে।</translation>
- </message>
- <message>
- <source>missing database headers</source>
- <translation>ডাটাবেসের হেডারসমূহ নেই</translation>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation>হেডারের আইডি আকার সঠিক নয়</translation>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation>হেডার ক্ষেত্রের দৈর্ঘ্য সঠিক নয়</translation>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation>হেডার তথ্য দৈর্ঘ্য সঠিক নয়</translation>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>চ্যালেঞ্জের জবাব ইস্যু করতে ব্যর্থ।</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>মাস্টার কী গণনা করতে অক্ষম</translation>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation>ডাটাবেসের হেডারসমূহ নেই</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>মাস্টার কী গণনা করতে অক্ষম</translation>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation>হেডারের চেকসাম আকার সঠিক নয়</translation>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation>হেডারের SHA256 মিলছে না</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation>ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। (HMAC অমিল)</translation>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation>অপরিচিত সংকেতায়ন</translation>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation>হেডারের আইডি আকার সঠিক নয়</translation>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation>হেডার ক্ষেত্রের দৈর্ঘ্য সঠিক নয়</translation>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation>হেডার তথ্য দৈর্ঘ্য সঠিক নয়</translation>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation>শুরুতে KDF প্যারামিটারের জন্য বাফার আরাম্ভ করতে ব্যার্থ হয়েছে</translation>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation>KDBX4 ফাইলে লেগাসি হেডার ফিল্ড পাওয়া গেছে</translation>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation>ভেতরের শিরোনামের আইডি সাইজ সঠিক নয়</translation>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation>শিরোনামের ভেতরের আইডি পরিমান সঠিক নয়</translation>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation>শিরোনামের ভেতরের আইডি বাইনারি সাইজ সঠিক নয়</translation>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>মাস্টার কী গণনা করতে অক্ষম</translation>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>KeePass ডাটাবেস নয়</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation>ডাটাবেজ খুলে দিতে অক্ষম।</translation>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>KeePass ডাটাবেস নয়</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>রুট</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>মাস্টার কী গণনা করতে অক্ষম</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে।</translation>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>বাতিল</translation>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>ব্রাউজ করুন</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation>পূর্ববর্তী কী ফাইল ফরম্যাট</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>কী ফাইলগুলো</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>সকল ফাইল</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>কী ফাইল তৈরি করুন...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>কী ফাইল নির্বাচন করুন</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation>সেটিংস</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation>উইন্ডো পরিবর্তন</translation>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation>KeePassXC বন্ধ করুন</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation>দয়া করে আপনার YubiKey! বাটন স্পর্শ করুন</translation>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation>সতর্কীকরণ: আপনি একটি আনস্টেবল ভার্সনের KeePassXC ব্যবহার করছেন।
-সমস্যা হবার উচ্চ ঝুঁকি আছে, আপনার ডাটাবেস ব্যাকআপ রাখুন।
--এই সংস্করণ নিয়মিত ব্যবহারের জন্য বানানো হয়নি।</translation>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>রুট</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation>কী ফাইল খুবই ছোট</translation>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation>কোন কী খুজে পাওয়া যায়নি</translation>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation>পাবলিক কী পড়তে ব্যর্থ হয়েছে।</translation>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>পাসওয়ার্ড প্রবেশ করান:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>পাসওয়ার্ড</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>পাসওয়ার্ড:</translation>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>পাসওয়ার্ড</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>অক্ষরের ধরণ</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>বড় হাতের অক্ষর</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>ছোট হাতের অক্ষর</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>নম্বরগুলি</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>বিশেষ অক্ষরসমূহ</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation>বর্ধিত ASCII</translation>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation>কপি</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>গ্রহণ</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>বন্ধ করুন</translation>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation>নিম্নমানের</translation>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation>দূর্বল</translation>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation>ভাল</translation>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation>খুব ভাল</translation>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>উন্নততর</translation>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation>A-Z</translation>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation>a-z</translation>
- </message>
- <message>
- <source>0-9</source>
- <translation>0-9</translation>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>মুছে ফেলুন</translation>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>অপসারণ করুন</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>নিষ্ক্রিয়</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation>ডাটাবেসের পাথ</translation>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>দল</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>শিরোনাম</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>ব্যবহারকরীর নাম</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>পাসওয়ার্ড</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>নোটসমূহ</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation>সৃষ্টি করেছেন</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>SSH এজেন্ট</translation>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation>ডাটাবেস থেকে একটি এন্ট্রি মুছে ফেলুন</translation>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation>যে এন্ট্রি মুছে ফেলতে চান তার পাথ</translation>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation>KeePassXC - ক্রস প্ল্যাটফর্ম পাসওয়ার্ড ম্যানেজার</translation>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation>পাসওয়ার্ড দিয়ে যে ডাটাবেস (*.kdbx) খুলতে চান তার ফাইলনেম</translation>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation>একটি কাস্টম কনফিগ ফাইল পাথ</translation>
- </message>
- <message>
- <source>key file of the database</source>
- <translation>ডাটাবেসের কী ফাইল</translation>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation>stdin থেকে ডাটাবেসের পাসওয়ার্ড পড়</translation>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation>মূল উইন্ডো হ্যান্ডেল</translation>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>সন্ধান</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation>পরিস্কার</translation>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation>কী:</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>অপসারণ করুন</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation>আঙ্গুলের ছাপ</translation>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>সকল ফাইল</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation>কখনো না</translation>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation>সময়ানুসারে পাসওয়ার্ড</translation>
- </message>
- <message>
- <source>000000</source>
- <translation>000000</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>কপি</translation>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation>কপি</translation>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation>TOTP সেট করুন</translation>
- </message>
- <message>
- <source>Key:</source>
- <translation>কী:</translation>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation>ডিফল্ট RFC 6238 টোকেন সেটিংসমূহ</translation>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation>স্টেম টোকেন সেটিংসমূহ</translation>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation>সচারচর সেটিংসমূহ ব্যবহার করুন</translation>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation>সময় ধাপ:</translation>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>সে.</translation>
- </message>
- <message>
- <source>Code size:</source>
- <translation>কোড সাইজ:</translation>
- </message>
- <message>
- <source>6 digits</source>
- <translation>৬ ডিজিট</translation>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation>৮ ডিজিট</translation>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>বন্ধ করুন</translation>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>আপনার পাসওয়ার্ডসমূহ নিরাপদে KeePassXC ডাটাবেসে সংরক্ষণ করুন</translation>
- </message>
- <message>
- <source>Create new database</source>
- <translation>একটি নতুন ডাটাবেস তৈরী করুন</translation>
- </message>
- <message>
- <source>Open existing database</source>
- <translation>পূর্বের একটি ডাটাবেস খুলুন</translation>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation>KeePass 1 থেকে আমদানি করুন</translation>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation>CSV থেকে আমদানি করুন</translation>
- </message>
- <message>
- <source>Recent databases</source>
- <translation>সাম্প্রতিক ডাটাবেস</translation>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation>KeePassXC %1 -তে আপনাকে স্বাগতম</translation>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation>রিফ্রেশ</translation>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_ca.ts b/share/translations/keepassx_ca.ts
index db4a3efea..4de90ede7 100644
--- a/share/translations/keepassx_ca.ts
+++ b/share/translations/keepassx_ca.ts
@@ -11,7 +11,7 @@
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Notifica els errors a: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>Reporteu errors a: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
@@ -31,7 +31,7 @@
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>Inclou la següent informació a l&apos;hora de notificar un error:</translation>
+ <translation>Inclogueu la següent informació a l&apos;hora de reportar un error:</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Habilita l&apos;agent SSH (requereix reiniciar-se)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Utilitza OpenSSH per a Windows enlloc de Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -85,7 +105,7 @@
</message>
<message>
<source>Text beside icon</source>
- <translation>Text enlloc d&apos;icona</translation>
+ <translation>Text al costat de la icona</translation>
</message>
<message>
<source>Text under icon</source>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Esteu segur que voleu reinicialitzar totes les configuracions generals i de seguretat als valors predeterminats?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -116,21 +148,17 @@
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>Obre només una sola instància del KeePassXC</translation>
+ <translation>Inicia només una instància del KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Minimitza la finestra a l&apos;iniciar l&apos;aplicació</translation>
+ <translation>Minimitza la finestra en obrir l&apos;aplicació</translation>
</message>
<message>
<source>File Management</source>
<translation>Gestió de fitxers</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Desa amb segurat els fitxers de base de dades (pot ser incompatible amb Dropbox, etc.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Fes una còpia de seguretat abans de desar</translation>
</message>
@@ -140,11 +168,7 @@
</message>
<message>
<source>Automatically save on exit</source>
- <translation>Deseu en tancar de forma automàtica</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>No marquis la base de dades com a modificada si no hi han hagut canvis en les dades (per exemple, a l&apos;expandir grups)</translation>
+ <translation>Desa en tancar de forma automàtica</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
@@ -156,35 +180,19 @@
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>Utilitza la icona del grup al crear una entrada</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>Oculta el panell de previsualització d&apos;entrades</translation>
- </message>
- <message>
- <source>General</source>
- <translation>General</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Oculta la barra d&apos;eines (les icones)</translation>
+ <translation>Utilitza la icona del grup en crear una entrada</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
- <translation>Minimitza enlloc de sortir de l&apos;app</translation>
+ <translation>Minimitza en lloc de sortir de l&apos;aplicació</translation>
</message>
<message>
<source>Show a system tray icon</source>
- <translation>Mostra una icona a la safata del sistema</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation>Icona fosca a la safata del sistema</translation>
+ <translation>Mostreu una icona a la safata del sistema</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
- <translation>Oculta la finestra a la safata del sistema quan es minimitza</translation>
+ <translation>Amaga la finestra a la safata del sistema en minimitzar</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -200,15 +208,7 @@
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Pregunta sempre abans de fer una compleció automàtica</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Drecera global de compleció automàtica</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Retard d&apos;escriptura de la compleció automàtica</translation>
+ <translation>Pregunta sempre abans d&apos;efectuar la compleció automàtica</translation>
</message>
<message>
<source> ms</source>
@@ -216,10 +216,6 @@
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Retard d&apos;inici de la compleció automàtica</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Barra d&apos;eines mòbil</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Inclou les versions beta quan es comprovin les actualitzacions</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Estil de botó:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Idioma:</translation>
</message>
@@ -286,25 +278,17 @@
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> sec</translation>
+ <translation> s</translation>
</message>
<message>
<source>Toolbar button style</source>
<translation>Estil dels botons de la barra d&apos;eines</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Utilitza un tipus de lletra monoespai per a les notes</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Selecció d&apos;idioma</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Restableix la configuració per defecte</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Drecera global de compleció automàtica</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Retard d&apos;inici en mil·lisegons de la compleció automàtica</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -325,16 +353,16 @@
</message>
<message>
<source>Clear clipboard after</source>
- <translation>Neteja el porta-retalls després</translation>
+ <translation>Esborra el porta-retalls després de</translation>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> sec</translation>
+ <translation> s</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>Bloqueja les bases de dades després d&apos;estar inactives</translation>
+ <translation>Bloca les bases de dades després d&apos;una inactivitat de</translation>
</message>
<message>
<source> min</source>
@@ -350,31 +378,19 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>Bloqueja les bases de dades quan la sessió sigui bloquejada o es tanqui la tapa</translation>
+ <translation>Bloca les bases de dades quan la sessió es bloquegi o es tanqui la tapa</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Oblida el TouchID quan la sessió està bloquejada o la tapa està tancada</translation>
+ <translation>Oblida el TouchID quan la sessió està blocada o la tapa està tancada</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>Bloqueja les bases de dades després minimitzar la finestra</translation>
+ <translation>Bloca les bases de dades després de minimitzar la finestra</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Torna a bloquejar la base de dades prèviament bloquejada després d&apos;una compleció automàtica</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>No requerir la repetició de la contrasenya quan aquesta és visible</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>No ocultis les contrasenyes en editar-les</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>No usis un marcador de posició per als camps buits de contrasenya</translation>
+ <translation>Torna a blocar la base de dades després d&apos;una compleció automàtica</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Elimina la teva cerca després de</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -430,7 +458,7 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>La sintaxi de l&apos;Auto-Type no és correcte!</translation>
+ <translation>La sintaxi de la declaració de compleció automàtica és incorrecta!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Confirma l&apos;accés al navegador KeePassXC</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Recorda aquesta decisió</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Permet</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Denega</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 ha demanat l&apos;accés a contrasenyes pels següents elements.
-Seleccioneu si voleu permetre l&apos;accés.</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>Permetre l&apos;accés</translation>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
- <translation>Denega l&apos;accés</translation>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -569,7 +599,7 @@ Seleccioneu si voleu permetre l&apos;accés.</translation>
</message>
<message>
<source>Cancel</source>
- <translation>Cancel·la</translation>
+ <translation>Cancel·lar</translation>
</message>
<message>
<source>You have multiple databases open.
@@ -579,300 +609,336 @@ Seleccioneu la base de dades correcta per desar les credencials.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Diàleg</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Nova petició de associació de clau</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Requerit per l&apos;accés a les teues bases de dades amb el navegador KeePassXC</translation>
+ <source>Save and allow access</source>
+ <translation>Desa i autoritza l&apos;accès</translation>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Voleu sobreescriure la clau existent?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Habilita la integració amb els següents navegadors:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Ja existeix una clau de xifrat compartida amb el nom &quot;%1&quot;.
+Voleu sobreescriure-la?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Actualitza l&apos;entrada</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Voleu actualitzar la informació en %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Avorta</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Conversió d&apos;atributs a dades personalitzades...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Mostra una &amp;notificació quan es demanen credencials</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: atributs convertits de KeePassHTTP</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Sol·licita el desbloqueig de la base de dades si està blocada</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Només es retornen les entrades amb el mateix patró (http://, https://, ...)</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Torna les coincidències a&amp;mb patrons URL (e.g., https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Només retorna les millors coincidències per a una adreça URL específica en lloc de totes les entrades per al domini.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Retorna només les millors coincidències de les credencials</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: crea un grup nou</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordena les entrades coincidents per títol (ctrl + &amp;m)</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordena les entrades coincidents per nom d&apos;&amp;usuari</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Advanced</source>
- <translation>Avançat</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>No tornis a mostrar aquest avís</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>No torn&amp;ar a preguntar abans d&apos;accedir a les credencials</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
+ <message>
+ <source>Dialog</source>
+ <translation>Diàleg</translation>
</message>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>No preguntar abans d&apos;act&amp;ualitzar les credencials</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Requerit per a l&apos;accés a les teves bases de dades amb el navegador KeePassXC</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Cerca en totes les bases de dades obertes, entrades coincidents (crtl + &amp;h)</translation>
+ <source>Enable browser integration</source>
+ <translation>Habilita la integració del navegador</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>L&apos;actualització o creació de camps de test no està suportada.</translation>
+ <source>General</source>
+ <translation>General</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Retorna camps avançats de text que comencen amb &quot;KPH: &quot;</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Actualment, no s&apos;admeten els navegadors instal·lats com a Snaps.</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Actualitza la ruta binària de KeePassXC o keepassxc-proxy automàticament als scripts de missatgeria nativa a l&apos;inici.</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Habilita la integració amb els següents navegadors:</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Actualitza el fitxers de manifest de la missatgeria &amp;nativa a l&apos;inici</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
+ <source>&amp;Edge</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Usa una aplicació de servidor intermediari entre KeePassXC i l&apos;extensió del navegador</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Usa una ubicació &amp;personalitzada de servidor intermediari si s&apos;ha instal·lat el servidor intermediari manualment</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Usa una ubicació &amp;personalitzada de servidor intermediari</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Navega...</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Atenció:&lt;/b&gt; Canviar les següents opcions és perillós!</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Seleccioneu la ubicació personalitzada del servidor intermediari</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Navegador &amp;Tor</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Fitxers executables</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Només es retornen les entrades amb el mateix patró (http://, https://, ...)</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Tots els fitxers</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>No demanis permís per a HTTP &amp;BASIC Auth</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Només retorna les millors coincidències per a una adreça URL específica en lloc de totes les entrades per al domini.</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <source>Return only best-matching credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Vegeu a sota les instruccions especials per a l&apos;ús d&apos;extensions del navegador</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Perquè funcioni la integració del navegador cal el KeePassXC-Browse.&lt;br&gt;Baixeu-lo de %1 i de %2. %3</translation>
+ <source>Allow returning expired credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
+ <source>All databases connected to the extension will return matching credentials.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Permet el retorn de credencials caducades.</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Habilita la integració del navegador</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Actualment, no s&apos;admeten els navegadors instal·lats com a Snaps.</translation>
+ <source>Advanced</source>
+ <translation>Avançat</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>L&apos;actualització o creació de camps de test no està suportada.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Nova petició de associació de clau</translation>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Actualitza la ruta binària de KeePassXC o keepassxc-proxy automàticament als scripts de missatgeria nativa a l&apos;inici.</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Desa i autoritza l&apos;accés</translation>
+ <source>Update native messaging manifest files at startup</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Voleu sobreescriure la clau existent?</translation>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Usa una ubicació personalitzada de servidor intermediari si s&apos;ha instal·lat el servidor intermediari manualment</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Ja existeix una clau de xifratge compartida amb el nom &quot;%1&quot;.
-Voleu sobreescriure-la?</translation>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Actualitza l&apos;entrada</translation>
+ <source>Custom proxy location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Voleu actualitzar la informació en %1 - %2?</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Avorta</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Navega...</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Conversió d&apos;atributs a dades personalitzades...</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: atributs convertits de KeePassHTTP</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
+ <source>Toolbar button style</source>
+ <translation>Estil dels botons de la barra d&apos;eines</translation>
+ </message>
+ <message>
+ <source>Config Location:</source>
<translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <message>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
<translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <source>Browse for custom browser path</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
+ <source>Custom extension ID:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: crea un grup nou</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>No tornis a mostrar aquest avís</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Vegeu a sota les instruccions especials per a l&apos;ús d&apos;extensions del navegador</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Atenció:&lt;/b&gt; Canviar les següents opcions és perillós!</translation>
+ </message>
+ <message>
+ <source>Executable Files</source>
+ <translation>Fitxers executables</translation>
+ </message>
+ <message>
+ <source>All Files</source>
+ <translation>Tots els fitxers</translation>
+ </message>
+ <message>
+ <source>Select custom proxy location</source>
+ <translation>Seleccioneu la ubicació personalitzada del servidor intermediari</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -884,15 +950,15 @@ chrome-laptop.</source>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Afegeix &apos;-clon&apos; al títol</translation>
+ <translation>Afegeix &apos; - clon&apos; al títol</translation>
</message>
<message>
<source>Replace username and password with references</source>
- <translation>Substituir el nom d&apos;usuari i contrasenya amb referències</translation>
+ <translation>Substitueix el nom d&apos;usuari i la contrasenya amb referències</translation>
</message>
<message>
<source>Copy history</source>
- <translation>Copia l&apos;historial</translation>
+ <translation>Còpia el historial</translation>
</message>
</context>
<context>
@@ -930,10 +996,6 @@ chrome-laptop.</source>
<translation>Els comentaris comencen amb</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>El primer registre conté els noms de camp</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Considera &apos; \&apos; com un caràcter d&apos;escapada</translation>
</message>
@@ -942,14 +1004,6 @@ chrome-laptop.</source>
<translation>Visualització prèvia</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Columnes</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>No apareix al fitxer CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importats d&apos;un fitxer CSV</translation>
</message>
@@ -962,20 +1016,12 @@ chrome-laptop.</source>
<translation>Error</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nom de camp buit %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>columna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>S&apos;han detectat errors al fitxer CSV!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>[% n més missatges s&apos;ha omès]</numerusform><numerusform>[s&apos;ha/n omès %n missatge/s més]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -999,12 +1045,64 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation>Previsualització de la importació CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Darrera modificació</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Contrasenya</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creat</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notes</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Títol</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grup</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nom d&apos;usuari</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>% n columna (s)</numerusform><numerusform>%n columna/es</numerusform></translation>
+ <translation><numerusform>%n columna(es)</numerusform><numerusform>%n columna(es)</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1013,27 +1111,22 @@ chrome-laptop.</source>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>% n bytes (s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
+ <translation><numerusform>%n byte(s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>% n files (s)</numerusform><numerusform>%n fila/es</numerusform></translation>
+ <translation><numerusform>%n fila(es)</numerusform><numerusform>%n fila(es)</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Arrel</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>El fitxer %1 no existeix.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
- <translation>No s&apos;ha pogut obrir el fitxer %1.</translation>
+ <translation>No es pot obrir el fitxer %1.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
@@ -1069,12 +1162,25 @@ Còpia de seguretat de la base de dades situada a %2</translation>
<source>Recycle Bin</source>
<translation>Paperera</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Contrasenyes</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Desbloqueja la base de dades - KeePassXC</translation>
+ <translation>Desbloca la base de dades - KeePassXC</translation>
</message>
</context>
<context>
@@ -1112,17 +1218,13 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Select key file</source>
- <translation>Selecciona el fitxer de clau</translation>
+ <translation>Seleccioneu el fitxer de clau</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
<translation>No s&apos;ha pogut obrir el fitxer de clau: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Selecciona una ranura...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Desbloqueja la base de dades de KeePassXC</translation>
</message>
@@ -1135,14 +1237,6 @@ Please consider generating a new key file.</source>
<translation>Camp de contrasenya</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Commuta la visibilitat de la contrasenya</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Selecció del fitxer clau</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Selecció de la ranura de la motxilla</translation>
</message>
@@ -1203,10 +1297,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Key file help</source>
<translation type="unfinished"/>
</message>
@@ -1215,10 +1305,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>Select key file...</source>
- <translation>Selecciona el fitxer clau...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation type="unfinished"/>
</message>
@@ -1227,6 +1313,30 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Per favor, toqueu el botó en el seu YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1250,10 +1360,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Seguretat</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Clau Mestra</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Configuració del xifrat</translation>
</message>
@@ -1261,6 +1367,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Integració amb el navegador</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1269,18 +1379,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-Configuració del navegador</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Desconnecta tots els navegadors</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Stored keys</source>
<translation>Claus emmagatzemades</translation>
</message>
@@ -1385,12 +1483,70 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>Suprimeix la clau seleccionada</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creat</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Afegeix una protecció addicional...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Sense contrasenya</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continua sense contrasenya</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>No s&apos;ha afegit cap clau de xifrat</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>S&apos;ha d&apos;afegir com a mínim una clau d&apos;encriptació per assegurar la base de dades!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Error desconegut</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
<message>
<source>Encryption Algorithm:</source>
- <translation>Algorisme de xifratge:</translation>
+ <translation>Algorisme de d’encriptatge:</translation>
</message>
<message>
<source>AES: 256 Bit (default)</source>
@@ -1409,10 +1565,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Transformar rondes:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Ús de memòria:</translation>
</message>
@@ -1433,14 +1585,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Canvia</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Els valors més alts ofereixen més protecció, però es trigarà més a obrir la base de dades.</translation>
</message>
@@ -1482,7 +1626,7 @@ If you keep this number, your database may take hours or days (or even longer) t
</message>
<message>
<source>Cancel</source>
- <translation>Cancel·la</translation>
+ <translation>Cancel·lar</translation>
</message>
<message>
<source>Number of rounds too low</source>
@@ -1506,22 +1650,12 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>MiB</numerusform><numerusform>MiB</numerusform></translation>
+ <translation><numerusform> MiB</numerusform><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>Thread (s)</numerusform><numerusform>fil(s)</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 MS</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform>Thread (s)</numerusform><numerusform>Fil(s)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1555,6 +1689,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation>Paral·lelisme</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1563,15 +1705,15 @@ If you keep this number, your database may be too easy to crack!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1618,10 +1760,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>Configuració addicional de la base de dades</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Habilita la &amp;compressió (recomanat)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Camp de nom de la base de dades</translation>
</message>
@@ -1654,6 +1792,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation>(antic)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1688,43 +1830,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Afegeix una protecció addicional...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>No s&apos;ha afegit cap clau de xifrat</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>S&apos;ha d&apos;afegir com a mínim una clau d&apos;encriptació per assegurar la base de dades!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Sense contrasenya</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Error desconegut</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>No s&apos;ha pogut canviar la clau mestra</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continua sense contrasenya</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1744,125 +1849,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Estadístiques</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Nom</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valor</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nom de la base de dades</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Descripció</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Ubicació</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Desat per darrera vegada</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Canvis no desats</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>sí</translation>
- </message>
- <message>
- <source>no</source>
- <translation>no</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Nombre de grups</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Nombre d&apos;entrades</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Nombre d&apos;entrades caducades</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Contrasenyes úniques</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Nombre de contrasenyes curtes</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>La longitud mínima recomanada de la contrasenya és d&apos;almenys 8 caràcters.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Nombre de contrasenyes febles</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Longitud mitjana de les contrasenyes</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caràcters</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>La longitud mitjana de les contrasenyes és inferior a 10 caràcters. Les contrasenyes més llargues proporcionen més seguretat.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1925,7 +1911,7 @@ This is definitely a bug, please report it to the developers.</source>
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Bloquejat]</translation>
+ <translation>%1 [bloquejat]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
@@ -1956,6 +1942,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1973,7 +1963,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Realment voleu desplaçar% n entrada (s) a la Paperera de reciclatge?</numerusform><numerusform>Esteu segur que voleu moure %n entrada/es a la paperera de reciclatge?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -1985,7 +1975,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Remember my choice</source>
- <translation>Recorda la meva elecció</translation>
+ <translation>Recordar la meva elecció</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
@@ -2035,7 +2025,7 @@ Voleu fusionar els canvis?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Esteu segur que voleu suprimir% n entrades per al Good?</numerusform><numerusform>Esteu segur que voleu suprimir %n entrada/es permanentment?</numerusform></translation>
+ <translation><numerusform>Esteu segur que voleu suprimir% n entrades per al Good?</numerusform><numerusform>Esteu segur que voleu suprimir % n entrades permanentment?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2043,7 +2033,7 @@ Voleu fusionar els canvis?</translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Mou l&apos;entrada (s) a la Paperera de reciclatge?</numerusform><numerusform>Mou l&apos;entrada(es) a la paperera de reciclatge?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2103,7 +2093,7 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>L&apos;entrada &quot;%1&quot; té %2 referències. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment?</numerusform><numerusform>L&apos;entrada &quot;%1&quot; té %2 referència/es. Voleu sobreescriure les referències amb valors, ometre aquesta entrada, o suprimir igualment?</numerusform></translation>
+ <translation><numerusform>L&apos;entrada &quot;%1&quot; té %2 referències. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment?</numerusform><numerusform>L&apos;entrada &quot;%1&quot; té %2 referència/es. Voleu sobreescriure les referències amb valors, ometre aquesta entrada o suprimir igualment?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2137,6 +2127,14 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2174,21 +2172,13 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
</message>
<message>
<source>(encrypted)</source>
- <translation>(xifrat)</translation>
+ <translation>(encriptat)</translation>
</message>
<message>
<source>Select private key</source>
<translation>Selecciona una clau privada</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Fitxer massa gran per ser una clau privada</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>No s&apos;ha pogut obrir la clau privada</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Historial de l&apos;entrada</translation>
</message>
@@ -2201,10 +2191,6 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation>Edita l&apos;entrada</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Les contrasenyes no coincideixen.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nou atribut</translation>
</message>
@@ -2225,29 +2211,13 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation><numerusform>% n mes/s</numerusform><numerusform>%n mes/os</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Aplica la contrasenya generada?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Voleu aplicar la contrasenya generada a aquesta entrada?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>L&apos;entrada s&apos;ha actualitzat correctament.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>L&apos;entrada té canvis sense desar</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Atribut nou %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTEGIT] Premeu revelar per veure o editar</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>% n any/s</numerusform><numerusform>%n any/s</numerusform></translation>
@@ -2268,6 +2238,26 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Revela</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2343,6 +2333,14 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<source>Background color selection</source>
<translation>Selecció del color de fons</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2351,14 +2349,6 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation>Permetre la compleció automàtica per a aquesta entrada</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Hereta la seqüència de compleció automàtica per defecte de &amp;grup</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Utilitza una seqüència personalitzada per a la compleció automàtica:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Associacions de finestra</translation>
</message>
@@ -2414,6 +2404,14 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Seqüència de compleció automàtica personalitzada per a aquesta finestra</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2449,6 +2447,14 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<source>Edit</source>
<translation>Edita</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2500,18 +2506,10 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation>Contrasenya:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repeteix:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Títol:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Configuracions</translation>
</message>
@@ -2524,10 +2522,6 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation>Nom d&apos;usuari:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expira</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Camp d&apos;URL</translation>
</message>
@@ -2536,22 +2530,10 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation>Descarrega el favicon de URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Commuta el generador de contrasenyes</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Camp de contrasenya</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Commuta la visibilitat de la contrasenya</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Commuta la visibilitat de les notes</translation>
</message>
@@ -2583,6 +2565,18 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notes:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2649,7 +2643,7 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
</message>
<message>
<source>Add to agent</source>
- <translation>Afegeix-lo a un agent</translation>
+ <translation>Afegeix-lo a l&apos;agent</translation>
</message>
<message>
<source>Remove from agent</source>
@@ -2708,7 +2702,7 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
</message>
<message>
<source>Inherit from parent group (%1)</source>
- <translation>Hereta del grup pare (%1)</translation>
+ <translation>Hereta de grup pare (%1)</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
@@ -2718,10 +2712,6 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulari</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipus:</translation>
</message>
@@ -2730,10 +2720,6 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
<translation>Camí:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Contrasenya:</translation>
</message>
@@ -2816,96 +2802,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation>Camp de contrasenya</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Commuta la visibilitat de la contrasenya</translation>
+ <source>Clear fields</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Commuta el generador de contrasenyes</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Navega...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nom</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
+ <source>Notes field</source>
+ <translation>Camp de notes</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expira</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Cerca</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Compleció automàtica</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Usa la seqüència per defecte del grup pare per a la compleció automàtica</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Estableix la se&amp;qüència per defecte per a la compleció automàtica</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>Camp de seqüència de compleció automàtica per defecte</translation>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
- <translation>Camp de notes</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>Notes:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation>Camp de seqüència de compleció automàtica per defecte</translation>
+ <source>Set default Auto-Type sequence</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Utilitzar icona per defecte</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Utilitza una icona personalitzada</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Afegeix una icona personalitzada</translation>
</message>
@@ -2943,19 +2917,19 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>No icons were loaded</source>
- <translation>No s&apos;ha carrega cap icona</translation>
+ <translation>No s&apos;ha carregat cap icona</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>% n icona (s) ja existeix a la base de dades</numerusform><numerusform>Ja existeix/en %n icona/es a la base de dades</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>La icona (s) següent (es) ha fallat:</numerusform><numerusform>Han fallat la/les icona/es següent/s:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Aquesta icona s&apos;utilitza en% n entrada (s), i serà substituïda per la icona per defecte. Esteu segur que voleu suprimir-la?</numerusform><numerusform>Aquesta icona s&apos;usa en %n entrada/es, i serà substituïda per la icona per defecte. Esteu segur que voleu suprimir-la?</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2970,27 +2944,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Usa la &amp;icona a...</translation>
+ <source>Also apply to child groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3172,6 +3154,17 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3255,12 +3248,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>Fitxers adjunts</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Sí</translation>
+ <source>Size</source>
+ <translation>Mida</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3360,6 +3393,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3386,8 +3426,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>Reinicialitza-la als valors predeterminats</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Fitxers adjunts (icona)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3399,20 +3445,73 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grup</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gestiona</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplicació</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gestiona</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3425,13 +3524,9 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: no s&apos;ha pogut desar el fitxer!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
+ <source>Online password validation failed</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3501,14 +3596,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>No es pot calcular la clau mestra</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>No s&apos;ha pogut emetre una comprovació-resposta.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation type="unfinished"/>
</message>
@@ -3518,11 +3605,11 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Invalid header id size</source>
- <translation>Mida de l&apos;id de capçalera no vàlid</translation>
+ <translation>Mida de l&apos;identificador de capçalera no vàlida</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Longitud del camp de capçalera no vàlid</translation>
+ <translation>Longitud del camp de capçalera no vàlida</translation>
</message>
<message>
<source>Invalid header data length</source>
@@ -3533,16 +3620,24 @@ You can enable the DuckDuckGo website icon service in the security section of th
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>No s&apos;ha pogut emetre una comprovació-resposta.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No es pot calcular la clau mestra</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3552,10 +3647,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No es pot calcular la clau mestra</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation type="unfinished"/>
</message>
@@ -3672,6 +3763,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3685,14 +3780,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No es pot calcular la clau mestra</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3795,7 +3890,7 @@ Es tracta d&apos;una migració unidireccional. No obrir la base de dades importa
</message>
<message>
<source>Invalid EnableAutoType value</source>
- <translation>Valor no vàlid de compleció automàtica</translation>
+ <translation>Valor d&apos;EnableAutoType invàlid</translation>
</message>
<message>
<source>Invalid EnableSearching value</source>
@@ -3842,10 +3937,6 @@ Es tracta d&apos;una migració unidireccional. No obrir la base de dades importa
<translation type="unfinished"/>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation type="unfinished"/>
</message>
@@ -3890,6 +3981,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Fitxer massa gran per ser una clau privada</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>No s&apos;ha pogut obrir la clau privada</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3912,7 +4026,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Unsupported encryption algorithm.</source>
- <translation>Algoritme de xifratge no admès.</translation>
+ <translation>Algoritme d&apos;encriptació no admès.</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
@@ -3952,10 +4066,6 @@ Line %2, column %3</source>
<translation>Arrel</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No es pot calcular la clau mestra</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation type="unfinished"/>
</message>
@@ -4056,6 +4166,10 @@ Line %2, column %3</source>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4116,7 +4230,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Cancel</source>
- <translation>Cancel·la</translation>
+ <translation>Cancel·lar</translation>
</message>
<message>
<source>Key Component set, click to change or remove</source>
@@ -4162,13 +4276,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Format de fitxer clau antic</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation type="unfinished"/>
@@ -4195,7 +4302,7 @@ Message: %2</source>
</message>
<message>
<source>Select a key file</source>
- <translation>Selecciona un fitxer clau</translation>
+ <translation>Seleccioneu un fitxer clau</translation>
</message>
<message>
<source>Key file selection</source>
@@ -4234,6 +4341,13 @@ Message: %2</source>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4242,18 +4356,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Base de dades</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>Bases de dades &amp;recents</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Ajuda</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntrades</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grups</translation>
</message>
@@ -4267,65 +4373,25 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>&amp;About</source>
- <translation>Quant &amp;a</translation>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation>&amp;Obre una base de dades...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Desa la base de dades</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Tanca la base de dades</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Esborra l&apos;entrada</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Edita el grup</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Suprimeix el grup</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>&amp;Desa la base de dades com a...</translation>
+ <translation>&amp;Sobre</translation>
</message>
<message>
<source>Database settings</source>
<translation>Configuració de la base de dades</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clona l&apos;entrada</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copia el nom d&apos;&amp;usuari</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
- <translation>Copia el nom d&apos;usuari al porta-retalls</translation>
+ <translation>Còpia el nom d&apos;usuari al porta-retalls</translation>
</message>
<message>
<source>Copy password to clipboard</source>
- <translation>Copia la contrasenya al porta-retalls</translation>
+ <translation>Còpia la contrasenya al porta-retalls</translation>
</message>
<message>
<source>&amp;Settings</source>
<translation>&amp;Configuració</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Bloqueja la bases de dades</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Títol</translation>
</message>
@@ -4350,16 +4416,8 @@ Are you sure you want to continue with this file?</source>
<translation>Copia les notes al porta-retalls</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exporta a un fitxer CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configura TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
- <translation>Copia &amp;TOTP</translation>
+ <translation>Còpia &amp;TOTP</translation>
</message>
<message>
<source>E&amp;mpty recycle bin</source>
@@ -4402,111 +4460,51 @@ Aquesta versió no està pensada per usar-se en producció.</translation>
<translation>Fes un &amp;donatiu</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Notifica un &amp;error</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Import</source>
- <translation>&amp;Importa</translation>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copia un at&amp;ribut...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Nova base de dades...</translation>
+ <translation>&amp; Importa</translation>
</message>
<message>
<source>Create a new database</source>
<translation>Crea una nova base de dades</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Combina amb una base de dades...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
- <translation>Combina amb una altra base de dades KDBX</translation>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation>&amp;Nova entrada</translation>
+ <translation>Fusiona amb una altra base de dades KDBX</translation>
</message>
<message>
<source>Add a new entry</source>
<translation>Afegeix una nova entrada</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Edita l&apos;entrada</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Mostra o edita l&apos;entrada</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nou grup</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Afegeix un grup nou</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Canvia la &amp;clau mestra</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>Configuració de la base de &amp;dades...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copia la contrasenya</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
- <translation>Fes una compleció &amp;automàtica</translation>
+ <translation>Fes una compleció automàtica</translation>
</message>
<message>
<source>Open &amp;URL</source>
<translation>Obre la &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importa una base de dades de KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Fitxer CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importa un fitxer CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Mostra el TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOTA: esteu utilitzant una versió preliminar de KeePassXC!
@@ -4529,14 +4527,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation>&amp;Exporta</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Comprova si hi ha actualitzacions...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Descarreg&amp;a tots els favicons</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Ordena &amp;A-Z</translation>
</message>
@@ -4549,48 +4539,290 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation>Generador de contrasenyes</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Descarrega el favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importa un 1Password Vault</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>Primers passos</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exporta a un fitxer HTML...</translation>
+ <source>&amp;User Guide</source>
+ <translation>Guia d&apos;&amp;Usuari</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>Dreceres de teclat</translation>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;Recent Databases</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importa un 1Password Vault</translation>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>Primers passos</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Obre el PDF de la guia Primers passos</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Ajuda &amp;online...</translation>
+ <source>View</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>Theme</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Guia d&apos;&amp;Usuari</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Obre el PDF de la Guia d&apos;usuari</translation>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>Dreceres de teclat</translation>
+ <source>&amp;Save Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Mostra TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Configuració de la base de dades</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Desbloqueja la base de dades</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Bloqueja la base de dades</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4679,10 +4911,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation type="unfinished"/>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades.</translation>
</message>
@@ -4694,30 +4922,34 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<source>Simple Settings</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Configuració del xifrat</translation>
</message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades.</translation>
- </message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Database Master Key</source>
+ <source>Database Credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
+ <source>A set of credentials known only to you that protects your database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
+ <name>NewDatabaseWizardPageEncryption</name>
+ <message>
+ <source>Encryption Settings</source>
+ <translation>Opcions de xifrat</translation>
+ </message>
+ <message>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Aquí podeu ajustar la configuració del xifrat de la base de dades. També ho podeu canviar més endavant a la configuració de la base de dades.</translation>
+ </message>
+</context>
+<context>
<name>NewDatabaseWizardPageMetaData</name>
<message>
<source>General Database Information</source>
@@ -4729,6 +4961,13 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4838,7 +5077,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Cal la frase de contrasenya per desxifrar aquesta clau</translation>
+ <translation>Cal la contrasenya per desxifrar aquesta clau</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
@@ -4903,6 +5142,18 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4927,25 +5178,13 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation type="unfinished"/>
</message>
<message>
- <source>Generate master password</source>
- <translation>Genera una contrasenya mestra</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Camp de contrasenya</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Commuta la visibilitat de la contrasenya</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Commuta la generació de contrasenyes</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4954,10 +5193,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation>%p %</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Contrasenya:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>força</translation>
@@ -4984,7 +5219,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Exclude look-alike characters</source>
- <translation>Exclou caràcters d&apos;aspecte similar</translation>
+ <translation>Excloure caràcters d&apos;aspecte semblant</translation>
</message>
<message>
<source>Pick characters from every group</source>
@@ -4996,7 +5231,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Passphrase</source>
- <translation>Frase de contrasenya</translation>
+ <translation>Contrasenya</translation>
</message>
<message>
<source>Wordlist:</source>
@@ -5007,14 +5242,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation>Separador de paraula:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copia</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accepta</translation>
- </message>
- <message>
<source>Close</source>
<translation>Tanca</translation>
</message>
@@ -5111,14 +5338,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation type="unfinished"/>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Canvia al mode simple</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
</message>
@@ -5139,14 +5358,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation type="unfinished"/>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regenera</translation>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5195,10 +5406,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation>Copia la contrasenya</translation>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation>minúscules</translation>
</message>
@@ -5211,8 +5418,44 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Commuta la visibilitat de la contrasenya</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Nombre de paraules:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Neteja</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5225,6 +5468,58 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<source>Statistics</source>
<translation>Estadístiques</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5364,10 +5659,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<translation type="unfinished"/>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copia la contrasenya d&apos;una entrada al porta-retalls.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation type="unfinished"/>
@@ -5519,14 +5810,6 @@ Available commands:
<translation>Integració amb el navegador</translation>
</message>
<message>
- <source>Press</source>
- <translation>Prem</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiu</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agent SSH</translation>
</message>
@@ -5565,10 +5848,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5580,14 +5859,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -5735,7 +6006,7 @@ Available commands:
</message>
<message>
<source>Use lowercase characters</source>
- <translation>Usa caràcters en minúscula</translation>
+ <translation>Usa lletres en minúscula</translation>
</message>
<message>
<source>Use uppercase characters</source>
@@ -5808,10 +6079,6 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>file empty</source>
<translation>fitxer buit</translation>
</message>
@@ -5820,20 +6087,8 @@ Available commands:
<translation type="unfinished"/>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20:256-bits</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
- <translation>Argon2 (KDBX 4 – recomanat)</translation>
+ <translation>Argon2 (KDBX 4 - recomanat)</translation>
</message>
<message>
<source>AES-KDF (KDBX 4)</source>
@@ -5851,7 +6106,7 @@ Available commands:
<message>
<source>Invalid Key</source>
<comment>TOTP</comment>
- <translation>Clau invàlida</translation>
+ <translation>Clau no vàlida</translation>
</message>
<message>
<source>Message encryption failed.</source>
@@ -5935,7 +6190,7 @@ Available commands:
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
- <translation>S&apos;ha produït un error quan es provaven les funcions criptogràfiques.</translation>
+ <translation>Error mentre es provava les funcions criptogràfiques.</translation>
</message>
<message>
<source>KeePassXC - Error</source>
@@ -6082,10 +6337,6 @@ Nucli: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6102,10 +6353,6 @@ Nucli: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Format a utilitzar en l&apos;exportació. Les opcions disponibles són XML o CSV. Per defecte s&apos;usa XML.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6146,10 +6393,6 @@ Nucli: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>La base de dades s&apos;ha importat correctament.</translation>
</message>
@@ -6242,10 +6485,6 @@ Nucli: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6261,10 +6500,6 @@ Nucli: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6277,6 +6512,193 @@ Nucli: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6313,6 +6735,290 @@ Nucli: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Pobre</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Feble</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Títol</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Camí</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Títol</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Camí</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nom</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nom de la base de dades</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descripció</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Ubicació</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Desat per darrera vegada</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Canvis no desats</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>sí</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>no</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Nombre de grups</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Nombre d&apos;entrades</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Nombre d&apos;entrades caducades</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Contrasenyes úniques</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Nombre de contrasenyes curtes</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>La longitud mínima recomanada de la contrasenya és d&apos;almenys 8 caràcters.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Nombre de contrasenyes febles</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Longitud mitjana de les contrasenyes</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caràcters</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>La longitud mitjana de les contrasenyes és inferior a 10 caràcters. Les contrasenyes més llargues proporcionen més seguretat.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6346,6 +7052,14 @@ Nucli: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6355,7 +7069,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation>Els termes de cerca són així: [Modificadors] [camp:] [&quot;] terme [&quot;]</translation>
+ <translation>Els termes de cerca són així: [modificadors] [camp:] [&quot;] terme [&quot;]</translation>
</message>
<message>
<source>Every search term must match (ie, logical AND)</source>
@@ -6391,7 +7105,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>match one</source>
- <translation>coincideix amb un</translation>
+ <translation>concorda amb un</translation>
</message>
<message>
<source>logical OR</source>
@@ -6453,26 +7167,10 @@ Nucli: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>No confirmar quan les entrades són esborrades pel clients.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Grup</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Gestiona</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorització</translation>
</message>
@@ -6481,39 +7179,19 @@ Nucli: %3 %4</translation>
<translation>Aquestes aplicacions estan ara connectades:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplicació</translation>
- </message>
- <message>
- <source>Disconnect</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Configuració de la base de dades</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Desbloqueja la base de dades</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Bloqueja la base de dades</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -6787,10 +7465,6 @@ Nucli: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Error inesperat</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6854,7 +7528,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Copy</source>
- <translation>Copia</translation>
+ <translation>Còpia</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
@@ -6865,7 +7539,7 @@ Nucli: %3 %4</translation>
<name>TotpExportSettingsDialog</name>
<message>
<source>Copy</source>
- <translation>Copia</translation>
+ <translation>Còpia</translation>
</message>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
@@ -6878,7 +7552,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation>Es tancarà en %1 segons.</translation>
+ <translation>Tancant en %1 segons.</translation>
</message>
</context>
<context>
@@ -6889,15 +7563,15 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
- <translation>Configuració per defecte amb testimoni RFC 6238</translation>
+ <translation>Configuració per defecte amb token RFC 6238</translation>
</message>
<message>
<source>Steam token settings</source>
- <translation>Configuració amb testimoni d&apos;Steam</translation>
+ <translation>Configuració amb token d&apos;Steam</translation>
</message>
<message>
<source>Use custom settings</source>
- <translation>Utilitza una configuració personalitzada</translation>
+ <translation>Utilitza la configuració personalitzada</translation>
</message>
<message>
<source>Custom Settings</source>
@@ -6959,6 +7633,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7049,6 +7730,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Prem</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiu</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7063,20 +7791,28 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Si teniu una &lt;a href=&quot;https://www.yubico.com/&quot;&gt;Yubikey&lt;/a&gt;, la podeu usar com a seguretat addicional.&lt;/p&gt;&lt;p&gt;La YubiKey necessita que una de les seves ranures es programi com a &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt; comprovació-resposta HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
+ <source>Refresh hardware tokens</source>
+ <translation>Refresca els testimonis de maquinari</translation>
+ </message>
+ <message>
+ <source>Hardware key slot selection</source>
+ <translation>Selecció de la ranura de la motxilla</translation>
+ </message>
+ <message>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>Refresca els testimonis de maquinari</translation>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>Selecció de la ranura de la motxilla</translation>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_cs.ts b/share/translations/keepassx_cs.ts
index 0024262ad..3470c8d2e 100644
--- a/share/translations/keepassx_cs.ts
+++ b/share/translations/keepassx_cs.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Zapnout SSH agenta (vyžaduje restart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Použít namísto Pagent raději OpenSSH pro Windows</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Zapnout integraci s SSH agentem</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(prázdné)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Spojení s SSH Agentem funguje!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Opravdu chcete vrátit veškerá obecná nastavení a nastavení zabezpečení do výchozích hodnot?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Správa souboru</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Ukládat databázové soubory bezpečně (může být neslučitelné s Dropbox, atd.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Před uložením zazálohovat databázový soubor</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Před ukončením aplikace automaticky uložit případné změny</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Neoznačovat databázi jako upravenou při změnách, nepostihujících údaje (např. rozkliknutí skupin)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>V případě úpravy zvenčí, automaticky znovu načíst databázi</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Pro vytvářený záznam použít ikonu skupiny, pod kterou je vytvářen</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Skrýt panel náhledu položky</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Obecné</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Skrýt lištu nástrojů (ikony)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Namísto ukončení aplikaci minimalizovat</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Zobrazovat ikonu v oznamovací oblasti systémového panelu</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Tmavá ikona v oznamovací oblasti systémového panelu</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Minimalizovat okno aplikace do oznamovací oblasti systémového panelu</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Vždy se zeptat před provedením automatického vyplnění</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Klávesová zkratka pro všeobecné automatické vyplňování</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Prodleva automatického vyplnění</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Prodleva zahájení automatického vyplňování</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Přesouvatelná lišta nástrojů</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Při zjišťování případných aktualizací brát v potaz i vývojové testovací verze</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Styl tlačítka:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Jazyk:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Styl tlačítek na liště nástrojů</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>V sekci Poznámky použít písmo s neměnnou šířkou</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Výběr jazyka</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Vráti nastavení do výchozích hodnot</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Globální zkratka automatického vyplňování</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Prodleva (v milisekundách) zahájení automatického vyplňování</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Uživatelské rozhraní</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Styl tlačítek na liště nástrojů:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Vráti nastavení do výchozích hodnot…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Prodleva automatického vyplnění:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Klávesová zkratka pro všeobecné automatické vyplňování:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Prodleva zahájení automatického vyplňování:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Po provedení automatického vyplnění opět zamknout dříve uzamčenou databázi.</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Pokud je viditelné, nevyžadovat zopakování zadání hesla</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Neskrývat hesla při jejich upravování</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Nepoužívat pro prázdné kolonky pro heslo zástupnou výplň</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Skrýt hesla v panelu náhledu položky</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Vyčistit vyhledávací dotaz po uplynutí</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Skrývat hesla při jejich upravování</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Používat pro prázdné kolonky pro heslo zástupnou výplň</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -484,7 +512,7 @@
</message>
<message>
<source>Sequence</source>
- <translation>Pořadí</translation>
+ <translation>Posloupnost</translation>
</message>
</context>
<context>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Potvrzení přístupu pro KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Zapamatovat si toto rozhodnutí</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Umožnit</translation>
+ <source>Remember</source>
+ <translation>Zapamatovat</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Odepřít</translation>
+ <source>Allow access to entries</source>
+ <translation>Umožnit přístup k záznamům</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 si vyžádalo přístup k heslům u následujících položek.
-Umožnit přístup?</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>Umožnit přístup</translation>
+ <source>Deny All</source>
+ <translation>Odepřít vše</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Odepřít přístup</translation>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -579,201 +609,263 @@ Vyberte databázi, do které chcete přihlašovací údaje uložit.</translation
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Nový požadavek na přiřazení klíče</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Toto je potřebné pro přístup do vašich databází pomocí KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Uložit a umožnit přístup</translation>
</message>
<message>
- <source>General</source>
- <translation>Obecné</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Přepsat stávající klíč?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Zapnout propojení pro tyto prohlížeče:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Sdílený šifrovací klíč nazvaný „%1“ už existuje.
+Přejete si ho přepsat?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Aktualizovat záznam</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Chcete aktualizovat údaj v %1 – %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Přerušit</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Převádění atributů na uživatelsky určená data…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Zobrazit oz&amp;námení když jsou vyžádány přihlašovací údaje</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Převedené KeePassHTTP atributy</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>&amp;Vyžádat odemknutí zamčené databáze</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Úspěšně převedeny atributy z %1 položek.
+Přesunuto %2 klíčů do uživatelsky určených dat.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n klíč úspěšně přesunut do uživatelsky určených dat.</numerusform><numerusform>%n klíče úspěšně přesunuty do uživatelsky určených dat.</numerusform><numerusform>%n klíčů úspěšně přesunuto do uživatelsky určených dat.</numerusform><numerusform>%n klíčy úspěšně přesunuty do uživatelsky určených dat.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Je odpovězeno pouze položkami stejného schématu (http://, https://, …).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Hledat shodu se sché&amp;maty URL (např. https://…)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Právě otevřená databáze neobsahuje žádnou položku s atributy KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Odpoví pouze nejlepšími shodami pro konkrétní URL adresu namísto všech položek pro celou doménu.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: zjištěna nastavení starého napojení na webový prohlížeč</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Odpovědět pouze nejlépe odpovídajícími přihlašovacími údaji</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: vytvořit novou skupinu</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Seřadit odpovídající přihlašovací údaje podle titulku</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Byl obdržen požadavek na vytvoření nové skupiny „%1“.
+Chcete tuto skupinu vytvořit?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Seřadit odpovídající přihlašovací údaje podle &amp;uživatelského jména</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Vaše nastavení KeePassXC-Browser je třeba přesunout do nastavení databáze.
+Toto je nezbytné pro zachování vašich stávajících spojení prohlížeče.
+Chcete přenést vaše stávající nastavení nyní?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Pokročilé</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Toto varování znovu nezobrazovat</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nikdy se nept&amp;at před přístupem k přihlašovacím údajům</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Obdrželi jste požadavek na asociaci pro následující databázi:
+%1
+
+Dejte spojení neopakující se název nebo identifikátor, například:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nikdy se neptat před akt&amp;ualizací přihlašovacích údajů</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Hledat odpovídající přihlašovací údaje ve všech otevřených databázích</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Toto je potřebné pro přístup do vašich databází pomocí KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatické vytváření nebo aktualizace není u textových kolonek podporované!</translation>
+ <source>Enable browser integration</source>
+ <translation>Zapnout napojení na webový prohlížeč</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Odpovědět také kolonkami pok&amp;ročilých textových řetězců které začínají na „KPH: “</translation>
+ <source>General</source>
+ <translation>Obecné</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Při spuštění automaticky aktualizuje popis umístění spustitelného souboru s KeePassXC nebo keepassxc-proxy na skripty posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging).</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Prohlížeče, nainstalované formou snap balíčků, zatím nejsou podporované.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Při spouštění aktualizovat soubory s manifestem posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging)</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Zapnout propojení pro tyto prohlížeče:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Podporovat zprostředkovávající aplikaci mezi KeePassXC a rozšířením pro webový prohlížeč.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Použít z&amp;prostředkovávající aplikaci mezi KeePassXC a rozšířením pro prohlížeč</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelem určené umístění.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Použít uživatelem určené umístění zprostředkovávají&amp;cí aplikace</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Procházet…</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Varování:&lt;/b&gt; Následující předvolby mohou být nebezpečné!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Vybrat uživatelem určené umístění zprostředkovávající aplikace</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Spustitelné soubory</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>Veškeré soubory</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Je odpovězeno pouze položkami stejného schématu (http://, https://, …).</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Neptat se na oprávnění pro HTTP &amp;Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Z důvodu, že software ze Snap balíčku je provozován v ohraničeném prostředí, je třeba spustit skript, který zapíná napojení na webový prohlížeč. &lt;br /&gt;Tento skript je možné získat z %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Odpoví pouze nejlepšími shodami pro konkrétní URL adresu namísto všech položek pro celou doménu.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Níže si přečtěte konkrétní pokyny pro rozšíření do webového prohlížeče</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Odpovědět pouze nejlépe odpovídajícími přihlašovacími údaji</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Aby fungovalo napojení na prohlížeč, je třeba KeePassXC. &lt;br /&gt; Stáhnete ho pro %1 a %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Vracet přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired].</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Umožnit poskytování i přihlašovacích údajů, kterým skončila platnost.</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Vracet přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired].</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Odpovídající přihlašovací údaje budou poskytovány ze všech databází, napojených na toto rozšíření.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Umožnit poskytování i přihlašovacích údajů, kterým skončila platnost.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Hledat odpovídající přihlašovací údaje ve všech otevřených databázích</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Zapnout napojení na webový prohlížeč</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Seřadit odpovídající přihlašovací údaje podle titulku</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Prohlížeče, nainstalované formou snap balíčků, zatím nejsou podporované.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Seřadit odpovídající přihlašovací údaje podle uživatelského jména</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Odpovídající přihlašovací údaje budou poskytovány ze všech databází, napojených na toto rozšíření.</translation>
+ <source>Advanced</source>
+ <translation>Pokročilé</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nikdy se neptat před přístupem k přihlašovacím údajům</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nikdy se neptat před aktualizací přihlašovacích údajů</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Neptat se na oprávnění pro HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatické vytváření nebo aktualizace není u textových kolonek podporované!</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Odpovědět také kolonkami pokročilých textových řetězců které začínají na „KPH: “</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Nezobrazovat vyskakovací okno doporučující převedení nastavení ze starého KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation>Nedotazovat se na převedení nastavení z KeePassHTTP.</translation>
</message>
<message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Při spuštění automaticky aktualizuje popis umístění spustitelného souboru s KeePassXC nebo keepassxc-proxy na skripty posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging).</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Při spouštění aktualizovat soubory s manifestem posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging)</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelem určené umístění.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Použít uživatelem určené umístění zprostředkovávající aplikace</translation>
+ </message>
+ <message>
<source>Custom proxy location field</source>
<translation>Kolonka pro uživatelsky určené proxy umístění</translation>
</message>
@@ -782,107 +874,81 @@ Vyberte databázi, do které chcete přihlašovací údaje uložit.</translation
<translation>Nalistovat uživatelsky určený proxy soubor</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Varování&lt;/b&gt;, aplikace keepassxc-prox nenalezena! &lt;br /&gt;Zkontrolujte instalační složku KeePassXC nebo potvrďte vlastní popis umístění v pokročilých volbách.&lt;br /&gt;Napojení na webový prohlížeč NEBUDE FUNGOVAT bez proxy aplikace.&lt;br /&gt;Očekávaný popis umístění: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Procházet…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Nový požadavek na přiřazení klíče</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Uložit a umožnit přístup</translation>
+ <source>Browser type:</source>
+ <translation>Typ prohlížeče:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Přepsat stávající klíč?</translation>
+ <source>Toolbar button style</source>
+ <translation>Styl tlačítek na liště nástrojů</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Sdílený šifrovací klíč nazvaný „%1“ už existuje.
-Přejete si ho přepsat?</translation>
+ <source>Config Location:</source>
+ <translation>Umístění nastavení:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Aktualizovat záznam</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Chcete aktualizovat údaj v %1 – %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Přerušit</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Převádění atributů na uživatelsky určená data…</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Převedené KeePassHTTP atributy</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Úspěšně převedeny atributy z %1 položek.
-Přesunuto %2 klíčů do uživatelsky určených dat.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n klíč úspěšně přesunut do uživatelsky určených dat.</numerusform><numerusform>%n klíče úspěšně přesunuty do uživatelsky určených dat.</numerusform><numerusform>%n klíčů úspěšně přesunuto do uživatelsky určených dat.</numerusform><numerusform>%n klíče úspěšně přesunuty do uživatelsky určených dat.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Z důvodu, že software ze Snap balíčku je provozován v ohraničeném prostředí, je třeba spustit skript, který zapíná napojení na webový prohlížeč. &lt;br /&gt;Tento skript je možné získat z %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>Aby fungovalo napojení na prohlížeč, je třeba KeePassXC. &lt;br /&gt; Stáhnete ho pro %1 a %2 a %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Právě otevřená databáze neobsahuje žádnou položku s atributy KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Níže si přečtěte konkrétní pokyny pro rozšíření do webového prohlížeče</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: zjištěna nastavení starého napojení na webový prohlížeč</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: vytvořit novou skupinu</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Varování:&lt;/b&gt; Následující předvolby mohou být nebezpečné!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Byl obdržen požadavek na vytvoření nové skupiny „%1“.
-Chcete tuto skupinu vytvořit?
-</translation>
+ <source>Executable Files</source>
+ <translation>Spustitelné soubory</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Vaše nastavení KeePassXC-Browser je třeba přesunout do nastavení databáze.
-Toto je nezbytné pro zachování vašich stávajících spojení prohlížeče.
-Chcete přenést vaše stávající nastavení nyní?</translation>
+ <source>All Files</source>
+ <translation>Veškeré soubory</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Toto varování znovu nezobrazovat</translation>
+ <source>Select custom proxy location</source>
+ <translation>Vybrat uživatelem určené umístění zprostředkovávající aplikace</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Obdrželi jste požadavek na asociaci pro následující databázi:
-%1
-
-Dejte spojení neopakující se název nebo identifikátor, například:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-laptop.</translation>
<translation>Komentáře začínají na</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>První záznam obsahuje názvy kolonek</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Považovat „\“ za únikový znak</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>Náhled</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Rozvržení sloupce</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Nenachází se v CSV souboru</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importováno z CSV souboru</translation>
</message>
@@ -971,20 +1025,12 @@ chrome-laptop.</translation>
<translation>Chyba</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Prázdný název kolonky %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>sloupec %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>V CSV soubory byly zjištěny chyby!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n další zpráva přeskočeno]</numerusform><numerusform>[%n další zprávy přeskočeny]</numerusform><numerusform>[%n dalších zpráv přeskočeno]</numerusform><numerusform>[%n další zprávy přeskočeny]</numerusform></translation>
+ <translation><numerusform>[%n další zpráva přeskočena]</numerusform><numerusform>[%n další zprávy přeskočeny]</numerusform><numerusform>[%n dalších zpráv přeskočeno]</numerusform><numerusform>[%n další zprávy přeskočeny]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1008,12 +1054,64 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>Náhled importu CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Okamžik poslední úpravy</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Heslo</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Vytvořeno</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Poznámky</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulek</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Skupina</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL adresa</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Uživatelské jméno</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Sloupec %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n sloupec</numerusform><numerusform>%n sloupce</numerusform><numerusform>%n sloupců</numerusform><numerusform>%n sloupce</numerusform></translation>
+ <translation><numerusform>%n sloupec</numerusform><numerusform>%n sloupce</numerusform><numerusform>%n sloupců</numerusform><numerusform>%n sloupců</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Kořen</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Soubor %1 neexistuje.</translation>
</message>
@@ -1078,6 +1171,19 @@ Záložní databáze se nachází v %2</translation>
<source>Recycle Bin</source>
<translation>Koš</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Hesla</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1130,10 +1236,6 @@ Zvažte vytvoření nového souboru s klíčem.</translation>
<translation>Nepodařilo se otevřít soubor s klíčem: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Vybrat slot…</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Odemknout databázi KeePassXC</translation>
</message>
@@ -1146,14 +1248,6 @@ Zvažte vytvoření nového souboru s klíčem.</translation>
<translation>Kolonka pro heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Zobraz./nezobrazovat hesla</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Výběr souboru s klíčem</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Výběr slotu v hardwarovém klíči</translation>
</message>
@@ -1218,10 +1312,6 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d
&lt;p&gt;Klikněte pro další informace…&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Krom hlavního hesla je možné použít tajný soubor a vylepšit tak zabezpečení databáze. Takový soubor je možné vytvořit v nastavení zabezpečení databáze.&lt;/p&gt;&lt;p&gt;Toto &lt;strong&gt;není&lt;/strong&gt; *.kdbx databázový soubor!&lt;br&gt;Pokud nemáte soubor s klíčem, ponechte kolonku nevyplněnou.&lt;/p&gt;&lt;p&gt;Pro více informaci klikněte sem…&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Nápověda k souboru s klíčem</translation>
</message>
@@ -1230,10 +1320,6 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Vyberte soubor s klíčem…</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Soubor s databází není možné použít pro účely souboru s klíčem</translation>
</message>
@@ -1243,6 +1329,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Soubor s databází není možné použít pro účely souboru s klíčem (bude se měnit).
Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhodný jako klíč), tuto kolonku nevyplňujte.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Krom hlavního hesla je možné použít tajný soubor a vylepšit tak zabezpečení databáze. Takový soubor je možné vytvořit v nastavení zabezpečení databáze.&lt;/p&gt;&lt;p&gt;Toto &lt;strong&gt;není&lt;/strong&gt; *.kdbx databázový soubor!&lt;br&gt;Pokud nemáte soubor s klíčem, ponechte kolonku nevyplněnou.&lt;/p&gt;&lt;p&gt;Pro více informaci klikněte sem…&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Dotkněte se tlačítka na svém YubiKey zařízení!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1266,16 +1376,16 @@ Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhod
<translation>Zabezpečení</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Hlavní klíč</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Nastavení šifrování</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Napojení na webový prohlížeč</translation>
+ <translation>Napojení webového prohlížeče</translation>
+ </message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1285,18 +1395,6 @@ Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhod
<translation>Nastavení pro KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>O&amp;dpojit veškeré prohlížeče</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Zapom&amp;enout v položkách veškerá nastavení specifická pro daný web</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Přesunout KeePassHTTP atributy do uživatelsky určených dat v KeePassX&amp;C-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Uložené klíče</translation>
</message>
@@ -1350,7 +1448,7 @@ To může zabránit spojení se zásuvným modulem prohlížeče.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Úspěšně odebrán %n šifrovací klíč z nastavení KeePassXC.</numerusform><numerusform>Úspěšně odebrány %n šifrovací klíče z nastavení KeePassXC.</numerusform><numerusform>Úspěšně odebráno %n šifrovacích klíčů z nastavení KeePassXC.</numerusform><numerusform>Úspěšně odebrány %n šifrovací klíče z nastavení KeePassXC.</numerusform></translation>
+ <translation><numerusform>Z nastavení KeePassXC úspěšně odebrán %n šifrovací klíč.</numerusform><numerusform>Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče.</numerusform><numerusform>Z nastavení KeePassXC úspěšně odebráno %n šifrovacích klíčů.</numerusform><numerusform>Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1376,7 +1474,7 @@ Oprávnění pro přístup k položkám budou odvolána.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Z %n položky úspěšně odebrána oprávnění.</numerusform><numerusform>Ze %n položek úspěšně odebrána oprávnění.</numerusform><numerusform>Ze %n položek úspěšně odebrána oprávnění.</numerusform><numerusform>Ze %n položek úspěšně odebrána oprávnění.</numerusform></translation>
+ <translation><numerusform>Z %n položky úspěšně odebrána oprávnění.</numerusform><numerusform>Ze %n položek úspěšně odebrána oprávnění.</numerusform><numerusform>Z %n položek úspěšně odebrána oprávnění.</numerusform><numerusform>Ze %n položek úspěšně odebrána oprávnění.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1404,6 +1502,66 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl
<source>Remove selected key</source>
<translation>Odebrat označený klíč</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Vytvořeno</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Přidat další ochranu…</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Není nastavené žádné heslo</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>VAROVÁNÍ! Nenastavili jste heslo. Používání databáze bez hesla je silně nedoporučeno!
+
+Opravdu chcete pokračovat bez hesla?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Pokračovat bez hesla</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nepřidán žádný šifrovací klíč</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Aby byla vaše databáze zabezpečená, je třeba přidat alespoň jeden šifrovací klíč!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Neznámá chyba</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1428,10 +1586,6 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl
<translation>Počet průchodů šifrovacího algoritmu:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Jednosekundová prodleva testu výkonnosti</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Využití paměti:</translation>
</message>
@@ -1452,14 +1606,6 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl
<translation>Změnit</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Vyšší hodnota poskytuje lepší ochranu, ale otevírání databáze zabere déle.</translation>
</message>
@@ -1536,16 +1682,6 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>vlákno</numerusform><numerusform>vlákna</numerusform><numerusform>vláken</numerusform><numerusform>vlákna</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Změnit existující čas rozšifrování</translation>
@@ -1578,6 +1714,14 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v
<source>Parallelism</source>
<translation>Souběžné zpracovávání</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1586,16 +1730,16 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v
<translation>Vystavené záznamy</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>&amp;Nevystavovat tuto databázi</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Nevystavovat tuto databázi</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Vystavit záznamy nacházející s v této sk&amp;upině:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Vystavit položky pod touto skupinou:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Pro přístup k těmto nastavením zapněte fd.o Secret Service.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Pro přístup k těmto nastavením zapněte Secret Service.</translation>
</message>
</context>
<context>
@@ -1641,10 +1785,6 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v
<translation>Rozšířená nastavení databáze</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Zapnout &amp;kompresi (doporučeno)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Kolonka název databáze</translation>
</message>
@@ -1678,6 +1818,10 @@ Tuto akci nelze vzít zpět.</translation>
<source> (old)</source>
<translation>(staré)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Zapnout kompresi (doporučeno)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1712,45 +1856,6 @@ Tuto akci nelze vzít zpět.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Přidat další ochranu…</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nepřidán žádný šifrovací klíč</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Aby byla vaše databáze zabezpečená, je třeba přidat alespoň jeden šifrovací klíč!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Není nastavené žádné heslo</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>VAROVÁNÍ! Nenastavili jste heslo. Používání databáze bez hesla je silně nedoporučeno!
-
-Opravdu chcete pokračovat bez hesla?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Neznámá chyba</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Hlavní klíč se nepodařilo změnit</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Pokračovat bez hesla</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1770,125 +1875,6 @@ Opravdu chcete pokračovat bez hesla?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistiky</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Další informace získáte najetím kurzoru nad řádky s ikonou chyb.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Název</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Hodnota</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Název databáze</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Popis</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Umístění</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Naposledy uloženo</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Neuložené změny</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>ano</translation>
- </message>
- <message>
- <source>no</source>
- <translation>ne</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Databáze byla změněna, ale změny doposud nebyly uloženy na disk.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Počet skupin</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Počet položek</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Počet záznamů, kterým skončila platnost</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Databáze obsahuje záznamy, kterým skončila platnost.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Hesel, která se neopakují</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Hesel, které se opakují</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Více než 10% hesel je použito na více místech. Pokud je to jen trochu možné, používejte pro různé účely různá hesla.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Kolikrát nejvýše je možné opakovat použití hesla</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Některá hesla jsou použita více než třikrát. Pokud možno používejte pro každou věc jiné heslo.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Počet krátkých hesel</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Doporučené minimum délky hesla je alespoň 8 znaků.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Počet slabých hesel</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Doporučovat používání dlouhých, náhodných hesel s hodnocením „dobré“ nebo „excelentní“.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Průměrná délka hesla</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 znaků</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Průměrná délka hesla je kratší, než deset znaků. Delší hesla poskytují vyšší zabezpečení.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Čekejte, probíhá výpočet statistik o databázi…</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1983,6 +1969,10 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Chystáte se exportovat svou databázi do nešifrovaného souboru. To zanechá vaše hesla a citlivé informace zranitelné. Opravdu to chcete?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Otevřít OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2000,7 +1990,7 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům.</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Opravdu přesunout %n záznam do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamy do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamů do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamy do Koše?</numerusform></translation>
+ <translation><numerusform>Opravdu přesunout %n záznam do Koše? ()</numerusform><numerusform>Opravdu přesunout %n záznamy do Koše? ()</numerusform><numerusform>Opravdu přesunout %n záznamů do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamů do Koše?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2062,15 +2052,15 @@ Přejete si je sloučit?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Opravdu chcete nadobro smazat %n položku?</numerusform><numerusform>Opravdu chcete nadobro smazat %n položky?</numerusform><numerusform>Opravdu chcete nadobro smazat %n položek?</numerusform><numerusform>Opravdu chcete nadobro smazat %n položky?</numerusform></translation>
+ <translation><numerusform>Opravdu chcete %n položku nadobro smazat?</numerusform><numerusform>Opravdu chcete %n položky nadobro smazat?</numerusform><numerusform>Opravdu chcete %n položek nadobro smazat?</numerusform><numerusform>Opravdu chcete %n položky nadobro smazat?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Smazat položku?</numerusform><numerusform>Smazat položky?</numerusform><numerusform>Smazat položek?</numerusform><numerusform>Smazat položky?</numerusform></translation>
+ <translation><numerusform>Smazat položku</numerusform><numerusform>Smazat položky</numerusform><numerusform>Smazat položek</numerusform><numerusform>Smazat položky</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Přesunout položku do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform></translation>
+ <translation><numerusform>Přesunout položku do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform><numerusform>Přesunout položek do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2122,7 +2112,7 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
</message>
<message>
<source>KeePass 2 Database</source>
- <translation>Databáze ve formátu KeePass verze 2</translation>
+ <translation>Databáze ve formátu KeePass 2</translation>
</message>
<message>
<source>Replace references to entry?</source>
@@ -2164,6 +2154,14 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Tato databáze je otevřena v režimu pouze pro čtení. Automatické ukládání je vypnuto.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Uložit zálohu databáze</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2208,14 +2206,6 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Vybrat soukromou část klíče</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Soubor je na soukromou část klíče příliš velký</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Nepodařilo se otevřít soukromou část klíče</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Historie záznamu</translation>
</message>
@@ -2228,10 +2218,6 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Upravit záznam</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Nepodařilo se vám zadat heslo do obou kolonek stejně.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nový atribut</translation>
</message>
@@ -2245,36 +2231,20 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>%n týden</numerusform><numerusform>%n týdny</numerusform><numerusform>%n týdnů</numerusform><numerusform>%n týdny</numerusform></translation>
+ <translation><numerusform>%n týden</numerusform><numerusform>%n týdny</numerusform><numerusform>%n týdnů</numerusform><numerusform>%n týdnů</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n měsíc</numerusform><numerusform>%n měsíce</numerusform><numerusform>%n měsíců</numerusform><numerusform>%n měsíce</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Použít vytvořené heslo?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Opravdu chcete použít vytvořené heslo na tuto položku?</translation>
+ <translation><numerusform>%n měsíc</numerusform><numerusform>%n měsíce</numerusform><numerusform>%n měsíců</numerusform><numerusform>%n měsíců</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Položka úspěšně aktualizována.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Položka má neuložené změny</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Nový atribut %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[CHRÁNĚNO] Pro zobrazení nebo úpravu klikněte na Odhalit</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n rok</numerusform><numerusform>%n roky</numerusform><numerusform>%n let</numerusform><numerusform>%n roky</numerusform></translation>
@@ -2295,6 +2265,26 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Opravdu chcete tuto URL odebrat?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Odhalit</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Skrýt</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Neuložené změny</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Chcete uložit změny, provedené v této položce?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[CHRÁNĚNO] Pro zobrazení nebo úpravu klikněte na odhalit</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2370,6 +2360,14 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<source>Background color selection</source>
<translation>Výběr barvy pozadí</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2378,14 +2376,6 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Zapnout automatické vyplňování tohoto záznamu</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Převzít výchozí pořadí automatického vyplňování od skupiny</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Po&amp;užít vlastní pořadí automatického vyplňování:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Přiřazení oken</translation>
</message>
@@ -2441,6 +2431,14 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Uživatelsky určená posloupnost automatického vyplňování pro toto okno</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Převzít výchozí posloupnost automatického vyplňování od skupiny</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Použít vlastní posloupnost automatického vyplňování:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2476,6 +2474,14 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<source>Edit</source>
<translation>Upravit</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2527,18 +2533,10 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Heslo:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Zopakování hesla:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titulek:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Poznámky</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Předpřipravené</translation>
</message>
@@ -2551,10 +2549,6 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Uživatelské jméno:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Platnost skončí</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Kolonka pro URL</translation>
</message>
@@ -2563,22 +2557,10 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Stáhnout ikonu webu pro URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Kolonka pro zopakování zadání hesla</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Vyp./zap vytváření hesel</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Kolonka pro heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Zobraz./nezobrazovat hesla</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Zobraz./nezobrazovat poznámky</translation>
</message>
@@ -2610,6 +2592,18 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<source>Toggle expiration</source>
<translation>Vyp/zap. skončení platnosti</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Poznámky:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Platnost skončí:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2745,10 +2739,6 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulář</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Typ:</translation>
</message>
@@ -2757,10 +2747,6 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
<translation>Popis umístění:</translation>
</message>
<message>
- <source>...</source>
- <translation>…</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Heslo:</translation>
</message>
@@ -2844,57 +2830,25 @@ Podporovaná rozšíření jsou: %1.</translation>
<translation>Kolonka pro popis umístění sdíleného souboru</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Nalistovat sdílený soubor</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Kolonka pro heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Zobraz./nezobrazovat hesla</translation>
+ <source>Clear fields</source>
+ <translation>Vyčistit kolonky</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Vyp./zap vytváření hesel</translation>
+ <source>Browse for share file</source>
+ <translation>Nalistovat sdílený soubor</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Vyčistit kolonky</translation>
+ <source>Browse...</source>
+ <translation>Procházet…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Název</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Poznámky</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Platnost skončí</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Hledat</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Automatické vyplňování</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Převzít výchozí pořadí a&amp;utomatického vyplňování nadřazené skupiny</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Nastavit výchozí pořadí automatického vyplňování</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Kolonka pro název</translation>
</message>
@@ -2922,18 +2876,38 @@ Podporovaná rozšíření jsou: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Výchozí kolonka pro posloupnost automatického vyplňování</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Po&amp;užít výchozí ikonu</translation>
+ <source>Expires:</source>
+ <translation>Platnost skončí:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Použít svou vlastní ikonu</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Převzít výchozí pořadí automatického vyplňování nadřazené skupiny</translation>
</message>
<message>
+ <source>Auto-Type:</source>
+ <translation>Automatické vyplňování:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Hledat:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Poznámky:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Název:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Nastavit výchozí pořadí automatického vyplňování</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Přidat svou vlastní ikonu</translation>
</message>
@@ -2975,7 +2949,7 @@ Podporovaná rozšíření jsou: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>V databázi už existuje %n ikona</numerusform><numerusform>V databázi už existují %n ikony</numerusform><numerusform>V databázi už existuje %n ikon</numerusform><numerusform>V databázi už existují %n ikony</numerusform></translation>
+ <translation><numerusform>%n ikona už v databázi existuje</numerusform><numerusform>%n ikony už v databázi existují</numerusform><numerusform>%n ikon už v databázi existuje</numerusform><numerusform>%n ikony už v databázi existují</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2998,14 +2972,6 @@ Podporovaná rozšíření jsou: %1.</translation>
<translation>Uplatnit označenou ikonu na podskupiny a záznamy</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Použí&amp;t ikonu na…</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Použít pouze na toto</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Uplatnit také na podskupiny</translation>
</message>
@@ -3021,6 +2987,22 @@ Podporovaná rozšíření jsou: %1.</translation>
<source>Existing icon selected.</source>
<translation>Vybrána existující ikona.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Použít výchozí ikonu</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Použít svou vlastní ikonu</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Použít ikonu na…</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3137,7 +3119,7 @@ Dotčený zásuvný modul to může rozbít.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Opravdu chcete odebrat %n přílohu?</numerusform><numerusform>Opravdu chcete odebrat %n přílohy?</numerusform><numerusform>Opravdu chcete odebrat %n příloh?</numerusform><numerusform>Opravdu chcete odebrat %n přílohy?</numerusform></translation>
+ <translation><numerusform>Opravdu chcete odebrat %n přílohu?</numerusform><numerusform>Opravdu chcete odebrat %n přílohy?</numerusform><numerusform>Opravdu chcete odebrat %n příloh?</numerusform><numerusform>Opravdu chcete odebrat %n příloh?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3184,7 +3166,7 @@ Dotčený zásuvný modul to může rozbít.</translation>
%1</source>
<translation><numerusform>Nedaří se otevřít soubor:
%1</numerusform><numerusform>Nedaří se otevřít soubory:
-%1</numerusform><numerusform>Nedaří se otevřít souborů:
+%1</numerusform><numerusform>Nedaří se otevřít soubory:
%1</numerusform><numerusform>Nedaří se otevřít soubory:
%1</numerusform></translation>
</message>
@@ -3208,6 +3190,17 @@ Dotčený zásuvný modul to může rozbít.</translation>
<source>Save selected attachment to disk</source>
<translation>Uložit označenou přílohu na disk</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3291,12 +3284,52 @@ Dotčený zásuvný modul to může rozbít.</translation>
<translation>Přílohy</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ano</translation>
+ <source>Size</source>
+ <translation>Velikost</translation>
+ </message>
+ <message>
+ <source>Group name</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Datum vytvoření</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Datum poslední změny</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Datum posledního přístupu</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3347,7 +3380,7 @@ Dotčený zásuvný modul to může rozbít.</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Pořadí</translation>
+ <translation>Posloupnost</translation>
</message>
<message>
<source>Searching</source>
@@ -3396,6 +3429,13 @@ Dotčený zásuvný modul to může rozbít.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Neplatné URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3422,8 +3462,14 @@ Dotčený zásuvný modul to může rozbít.</translation>
<translation>Vrátit na výchozí</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Přípony (ikona)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3435,21 +3481,74 @@ Dotčený zásuvný modul to může rozbít.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Nepodařilo se zaregistrovat službu DBus na %1: je spuštěná jiná služba.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n záznam byl použit %1</numerusform><numerusform>%n záznamy byly použity %1</numerusform><numerusform>%n záznamů bylo použito %1</numerusform><numerusform>%n záznamy byly použity %1</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Nepodařilo se zaregistrovat službu DBus na %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Soubor</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Skupina</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Spravovat</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Odemkněte pro zobrazení</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Žádné</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplikace</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Spravovat</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo tajná služba: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo tajná služba:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Neznámý</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Neznámý</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3461,14 +3560,10 @@ Dotčený zásuvný modul to může rozbít.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Soubor se nedaří uložit!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging).</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3538,14 +3633,6 @@ Můžete zapnout službu pro stahování ikon z DuckDuckGo v sekci zabezpečení
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nedaří se spočítat hlavní klíč</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nedaří se vyvolat výzva-odpověď.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>chybí databázové hlavičky</translation>
</message>
@@ -3571,16 +3658,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Byly zadány neplatné přihlašovací údaje, zkuste to prosím znovu.
Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškozený.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nedaří se vyvolat výzva-odpověď: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nedaří se vyvolat výzva-odpověď.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nedaří se vyvolat výzva-odpověď: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nedaří se spočítat hlavní klíč</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3590,10 +3685,6 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze
<translation>chybí databázové hlavičky</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nedaří se spočítat hlavní klíč</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Neplatná velikost kontrolního součtu hlavičky</translation>
</message>
@@ -3711,6 +3802,10 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze
<source>(HMAC mismatch)</source>
<translation>(HMAC neshoda)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3724,14 +3819,14 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze
<translation>Neplatná velikost symetrické šifry IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nedaří se spočítat hlavní klíč</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Nepodařilo se serializovat mapu varianty parametrů funkce pro odvození klíče</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3773,7 +3868,7 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>Nejedná se o databázi Keepass.</translation>
+ <translation>Nejedná se o databázi KeePass.</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
@@ -3881,10 +3976,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
<translation>Chybí klíč nebo hodnota řetězce položky</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Zjištěna duplicitní příloha</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Chybí binární klíč nebo hodnota položky</translation>
</message>
@@ -3931,6 +4022,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Soubor je na soukromou část klíče příliš velký</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Nepodařilo se otevřít soukromou část klíče</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3993,10 +4107,6 @@ Line %2, column %3</source>
<translation>Kořen</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nedaří se spočítat hlavní klíč</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Transformace klíče se nezdařila</translation>
</message>
@@ -4098,6 +4208,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Byly zadány neplatné přihlašovací údaje, zkuste to prosím znovu.
Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškozený.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4204,15 +4318,6 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze
<translation>Starý formát souboru s klíčem</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Používáte starý formát souboru s klíčem, který v budoucnu nemusí být podporován.
-
-Jděte do nastavení hlavního klíče a vytvořte nový soubor s klíčem.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Chyba načítání souboru s klíčem „%1“
@@ -4280,6 +4385,13 @@ Are you sure you want to continue with this file?</source>
<translation>Zvolený soubor se zdá být souborem s databází hesel. Je třeba, aby soubor s klíčem byl soubor, který se nikdy nezmění, nebo navždy ztratíte k databázi přístup.
Opravdu chcete tento soubor použít?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4288,18 +4400,10 @@ Opravdu chcete tento soubor použít?</translation>
<translation>&amp;Databáze</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Nedávno otevřené databáze</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>Nápověda</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>Záz&amp;namy</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>Skupiny</translation>
</message>
@@ -4316,46 +4420,10 @@ Opravdu chcete tento soubor použít?</translation>
<translation>O &amp;aplikaci</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Otevřít databázi…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Uložit databázi</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Zavřít databázi</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Smazat záznam</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Upravit skupinu</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Smazat skupinu</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>&amp;Uložit databázi jako…</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Nastavení databáze</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>Klonovat záznam</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Zkopírovat &amp;uživatelské jméno</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Zkopírovat uživatelské jméno do schránky</translation>
</message>
@@ -4368,10 +4436,6 @@ Opravdu chcete tento soubor použít?</translation>
<translation>Na&amp;stavení</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Uzamknout databáze</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titulek</translation>
</message>
@@ -4396,14 +4460,6 @@ Opravdu chcete tento soubor použít?</translation>
<translation>Zkopírovat poznámky do schránky</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportovat do CSV souboru…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Nastavit TOTP…</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Zkopírovat &amp;TOTP</translation>
</message>
@@ -4448,10 +4504,6 @@ Tato verze není určena pro produkční použití.</translation>
<translation>&amp;Darovat</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Nahlásit chy&amp;bu</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>VAROVÁNÍ: Vámi používaná verze Qt může způsobovat, že při použití klávesnice na obrazovce KeePassXC zhavaruje!
@@ -4462,66 +4514,26 @@ Doporučujeme použít AppImage, které je k dispozici v sekci stahování naši
<translation>&amp;Importovat</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Zkopírovat at&amp;ribut…</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP…</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Nová databáze…</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Vytvořit novou databázi</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Sloučit z databáze…</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Sloučit z jiné KDBX databáze</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nový záznam</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Přidat nový záznam</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Upravit záznam</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Zobrazit nebo upravit položku</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nová skupina</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Přidat novou skupinu</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Změnit hlavní &amp;klíč…</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>Nastavení &amp;databáze…</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Zko&amp;pírovat heslo</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Provést &amp;automatické vyplnění</translation>
</message>
@@ -4530,30 +4542,14 @@ Doporučujeme použít AppImage, které je k dispozici v sekci stahování naši
<translation>Otevřít &amp;URL adresu</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Databáze ve formátu KeePass verze 1…</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importovat databázi aplikace KeePass verze 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV soubor…</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importovat CSV soubor</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Zobrazit na času založené jednorázové heslo (TOTP)…</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Zobrazit QR kód s TOTP…</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>UPOZORNĚNÍ: Používáte vývojové sestavení KeePassXC!
@@ -4576,14 +4572,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>&amp;Export</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Zjistit dostupnost případných aktualizací…</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>&amp;Stáhnout veškeré ikony webů</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Seřadit &amp;A-Z</translation>
</message>
@@ -4596,48 +4584,290 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>&amp;Vytváření hesel</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Stáhnout ikonu webu (favicon)</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importovat 1Password trezor</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Začínáme</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Uživatelská příručka</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Klávesové zkratky</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Nedávno otevřené databáze</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Zkopírovat at&amp;ribut</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Zobrazit</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Zjistit dostupnost případných aktualizací</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Otevřít databázi…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>Uložit databázi</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>Zavřít databázi</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Nová databáze…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Sloučit z databáze…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nový záznam…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Upravit záznam…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>Smazat záznam…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Nová skupina…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>Upravit skupinu…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>Smazat skupinu…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Uložit databázi jako…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Nastavení &amp;databáze…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>Klonovat záznam…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportovat do HTML souboru…</translation>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>Copy &amp;Username</source>
+ <translation>Zkopírovat &amp;uživatelské jméno</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Zko&amp;pírovat heslo</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>Uzamknout databáze</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
<translation>1Password trezor…</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importovat 1Password trezor</translation>
+ <source>CSV File…</source>
+ <translation>CSV soubor…</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Začínáme</translation>
+ <source>Show TOTP</source>
+ <translation>Zobrazit na času založené jednorázové heslo (TOTP)</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Otevřít PDF s příručkou Začínáme</translation>
+ <source>Show QR Code</source>
+ <translation>Zobrazit QR kód</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Náp&amp;ověda na webu…</translation>
+ <source>Set up TOTP…</source>
+ <translation>Nastavit TOTP…</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Přejít na dokumentaci na webu (otevře prohlížeč)</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Nahlásit chy&amp;bu</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Uživatelská příručka</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Otevřít příručku Začínáme</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Otevřít PDF s uživatelskou příručkou</translation>
+ <source>&amp;Online Help</source>
+ <translation>Náp&amp;ověda na webu</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Klávesové zkratky</translation>
+ <source>Go to online documentation</source>
+ <translation>Přejít na dokumentaci na webu</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Otevřít Uživatelskou příručku</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Uložit zálohu databáze…</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Světlý</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Tmavý</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Zobrazovat lištu nástrojů</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Nastavení databáze</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Upravit nastavení databáze</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Odemknout databázi</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Odemknout databázi a zobrazit další informace</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Uzamknout databázi</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Odpojit</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4726,10 +4956,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Stránka průvodce</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>&amp;Nastavení šifrování</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze.</translation>
</message>
@@ -4741,27 +4967,31 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<source>Simple Settings</source>
<translation>Základní nastavení</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Nastavení šifrování</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Hlavní klíč do databáze</translation>
+ <source>Encryption Settings</source>
+ <translation>Nastavení šifrování</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Hlavní klíč, známý pouze vám, pro ochranu vaší databáze.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze.</translation>
</message>
</context>
<context>
@@ -4776,6 +5006,13 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4951,6 +5188,18 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<source>Passwords match so far</source>
<translation>Zadání hesla jsou zatím shodná</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Vytvořit heslo (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4975,25 +5224,13 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Zadání hesla se neshodují.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Vytvořit hlavní heslo</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Kolonka pro heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Zobraz./nezobrazovat hesla</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Kolonka pro zopakování zadání hesla</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Vyp./zap vytváření hesel</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5002,10 +5239,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Heslo:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>odolnost</translation>
@@ -5055,14 +5288,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Oddělovač slov:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopírovat</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Přijmout</translation>
- </message>
- <message>
<source>Close</source>
<translation>Zavřít</translation>
</message>
@@ -5159,14 +5384,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Přepnout do zjednodušeného režimu</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Jednoduchý</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Sada znaků kterou z vytvářených hesel vynechat</translation>
</message>
@@ -5187,14 +5404,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Vynechané znaky: „0“, „1“, „l“, „I“, „O“, „|“, „ . “</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Počet slov:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Vytvoř nové</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Vytvořené heslo</translation>
</message>
@@ -5243,10 +5452,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Zkopírovat heslo</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Přijmout heslo</translation>
- </message>
- <message>
<source>lower case</source>
<translation>malá písmena</translation>
</message>
@@ -5259,8 +5464,44 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Velikost písmen nadpisu</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Zobraz./nezobrazovat hesla</translation>
+ <source>Generate Password</source>
+ <translation>Vytvořit heslo</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Počet slov:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Vyčistit</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Znovu vytvořit heslo (%1)</translation>
</message>
</context>
<context>
@@ -5273,6 +5514,58 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<source>Statistics</source>
<translation>Statistiky</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Velmi slabé heslo</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Slabé heslo</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5412,10 +5705,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<translation>Popis umístění záznamu, který přidat.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Zkopírovat heslo záznamu do schránky.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Popis umístění záznamu ke zkopírování do schránky.</translation>
@@ -5572,14 +5861,6 @@ Příkazy k dispozici:
<translation>Napojení na webový prohlížeč</translation>
</message>
<message>
- <source>Press</source>
- <translation>Stisknout</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasivní</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH agent</translation>
</message>
@@ -5618,10 +5899,6 @@ Příkazy k dispozici:
<translation>Položka %1 úspěšně přidána.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Zkopírovat stávající TOTP do schránky.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Neplatná hodnota časového limitu %1.</translation>
</message>
@@ -5633,17 +5910,9 @@ Příkazy k dispozici:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Položka s umístěním %1 nemá nastavené TOTP heslo.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Stávající TOTP heslo položky zkopírováno do schránky!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Heslo položky zkopírováno do schránky!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Obsah schránky bude vymazán za %1 sekundu…</numerusform><numerusform>Obsah schránky bude vymazán za %1 sekundy…</numerusform><numerusform>Obsah schránky bude vymazán za %1 sekund…</numerusform><numerusform>Obsah schránky bude vymazán za %1 sekundy…</numerusform></translation>
+ <translation><numerusform>Vyčištění schránky za %1 sekundu…</numerusform><numerusform>Vyčištění schránky za %1 sekundy…</numerusform><numerusform>Vyčištění schránky za %1 sekund…</numerusform><numerusform>Vyčištění schránky za %1 sekundy…</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5861,10 +6130,6 @@ Příkazy k dispozici:
<translation>Nebyl určen program pro manipulaci se schránkou</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Nedaří se spustit program %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>soubor je prázdný</translation>
</message>
@@ -5873,18 +6138,6 @@ Příkazy k dispozici:
<translation>%1: (řádek, sloupec) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – doporučeno)</translation>
</message>
@@ -6137,10 +6390,6 @@ Jádro systému: %3 %4</translation>
<translation>Zobrazit tuto nápovědu.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Slot v Yubikey použitý pro šifrování databáze.</translation>
- </message>
- <message>
<source>slot</source>
<translation>slot</translation>
</message>
@@ -6157,10 +6406,6 @@ Jádro systému: %3 %4</translation>
<translation>Opustit interaktivní režim.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formát který použít pro export. Možnosti jsou xml nebo csv. Výchozí je xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exportuje obsah databáze na standardní výstup v zadaném formátu.</translation>
</message>
@@ -6201,10 +6446,6 @@ Jádro systému: %3 %4</translation>
<translation>Popis umístění nové databáze.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Nedaří se importovat XML export z databáze %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Úspěšně naimportovaná databáze.</translation>
</message>
@@ -6297,10 +6538,6 @@ Jádro systému: %3 %4</translation>
<translation>Neplatný slot na YubiKey %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Odemkněte %1 dotknutím se tlačítka na YubiKey</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Zadejte heslo pro zašifrování databáze (volitelné):</translation>
</message>
@@ -6316,13 +6553,9 @@ Jádro systému: %3 %4</translation>
<source>User name</source>
<translation>Uživatelské jméno</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Výzva-odpověď – slot %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Otisk z hesla pro „%1“ unikl %2 krát!</numerusform><numerusform>Otisk z hesla pro „%1“ unikl %2 krát!</numerusform><numerusform>Otisk z hesla pro „%1“ unikl %2 krát!</numerusform><numerusform>Otisk z hesla pro „%1“ unikl %2 krát!</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6332,6 +6565,193 @@ Jádro systému: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Zobrazit chráněné atributy v čitelném textu.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Zkopírovat stávající TOTP do schránky (totožné s &quot;=a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Zkopírovat atribut záznamu do schránky.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>čas</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Nedaří se importovat XML databázi: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Název:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Popis:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Zopakujte heslo:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Chyba: Zadáná hesla se neshodují.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6368,6 +6788,290 @@ Jádro systému: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Velmi slabá</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Slabá</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Vyloučeno)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulek</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Popis umístění</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Důvod</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Upravit záznam…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulek</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Popis umístění</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Vyloučeno)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>jednou</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Upravit záznam…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Další informace získáte najetím kurzoru nad řádky s ikonou chyb.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Název</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Hodnota</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Čekejte, probíhá výpočet statistik o databázi…</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Název databáze</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Popis</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Umístění</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Naposledy uloženo</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Neuložené změny</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>ano</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>ne</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Databáze byla změněna, ale změny doposud nebyly uloženy na disk.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Počet skupin</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Počet položek</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Počet záznamů, kterým skončila platnost</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Databáze obsahuje záznamy, kterým skončila platnost.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Hesel, která se neopakují</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Hesel, které se opakují</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Více než 10% hesel je použito na více místech. Pokud je to jen trochu možné, používejte pro různé účely různá hesla.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Kolikrát nejvýše je možné opakovat použití hesla</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Některá hesla jsou použita více než třikrát. Pokud možno používejte pro každou věc jiné heslo.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Počet krátkých hesel</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Doporučené minimum délky hesla je alespoň 8 znaků.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Počet slabých hesel</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Doporučovat používání dlouhých, náhodných hesel s hodnocením „dobré“ nebo „excelentní“.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Průměrná délka hesla</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 znaků</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Průměrná délka hesla je kratší, než deset znaků. Delší hesla poskytují vyšší zabezpečení.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6401,6 +7105,14 @@ Jádro systému: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Požadavek na potvrzení není podporován agentem (zkontrolujte volby).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6508,26 +7220,10 @@ Jádro systému: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;/p&gt;Pokud je pro databázi zapnutý Koš, záznamy budou přesouvány přímo do něj. Jinak budou bez potvrzování smazány.&lt;/p&gt;&lt;p&gt;Pokud je položka odkazována z jiné, budete ale dotázáni.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Když jsou záznamy mazány klienty, nevyžadovat potvrzení.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Vystavené skupiny databáze:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Soubor</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Skupina</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Spravovat</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorizace</translation>
</message>
@@ -6536,40 +7232,20 @@ Jádro systému: %3 %4</translation>
<translation>Tyto aplikace jsou aktuálně připojené:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplikace</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Odpojit</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Nastavení databáze</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Upravit nastavení databáze</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Odemknout databázi</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Odemknout databázi a zobrazit další informace</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Uzamknout databázi</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Odemkněte pro zobrazení</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Varování:&lt;/b&gt;</translation>
</message>
<message>
- <source>None</source>
- <translation>Žádné</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6842,10 +7518,6 @@ Jádro systému: %3 %4</translation>
<translation>Úspěšný podepsaný import</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Neočekávaná chyba</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Kontejner nepodepsaného sdílení není podporován – importu zabráněno</translation>
</message>
@@ -6913,7 +7585,7 @@ Jádro systému: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Platnost skončí za &lt;b&gt;%n&lt;/b&gt; sekundu</numerusform><numerusform>Platnost skončí za %n sekundy</numerusform><numerusform>Platnost skončí za %n sekund</numerusform><numerusform>Platnost skončí za %n sekundy</numerusform></translation>
+ <translation><numerusform>Platnost končí za &lt;b&gt;%n&lt;/b&gt; sekundu</numerusform><numerusform>Platnost končí za %n sekundy</numerusform><numerusform>Platnost končí za %n sekund</numerusform><numerusform>Platnost končí za %n sekundy</numerusform></translation>
</message>
</context>
<context>
@@ -7015,6 +7687,13 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Neplatné URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7105,6 +7784,53 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Stisknout</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasivní</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7119,14 +7845,6 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Pokud vlastníte zařízení &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, můžete ho použít jako další úroveň zabezpečení.&lt;/p&gt;&lt;p&gt;YubiKey  vyžaduje aby jeden z jeho slotů byl naprogramován jako &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 výzva-odpověď&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nezjištěno žádné YubiKey zařízení – ověřte, že je připojené.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Není připojeno žádné Yubikey zařízení.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Znovu načíst hardwarová bezpečnostní zařízení</translation>
</message>
@@ -7134,5 +7852,21 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Výběr slotu v hardwarovém klíči</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_da.ts b/share/translations/keepassx_da.ts
index 5c46b36a9..0ace57003 100644
--- a/share/translations/keepassx_da.ts
+++ b/share/translations/keepassx_da.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Aktivér SSH-agent (kræver genstart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Brug OpenSSH til Windows i stedet for Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Filhåndtering</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Gem databasefiler sikkert (kan være inkompatibelt med Dropbox osv.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Sikkerhedskopiér databasefilen inden den gemmes</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Gem automatisk ved afslutning</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Markér ikke databasen som ændret når ikke-data ændres (f.eks. udvidelse af grupper)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Genindlæs automatisk databasen når den er blevet ændret eksternt</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Brug gruppeikon ved oprettelse af post</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Skjul panelet til forhåndsvisning af post</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Generelt</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Skjul værktøjslinje (ikoner)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimer i stedet for at afslutte programmet</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Vis et ikon i systembakken</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Mørkt ikon i systembakken</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Skjul vindue i systembakken når det er minimeret</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Spørg altid før autoskriv udføres</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Global genvej til autoskriv</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Skriveforsinkelse for autoskriv</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Startforsinkelse for autoskriv</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Værktøjslinje kan flyttes</translation>
</message>
@@ -244,10 +240,6 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Button style:</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Language:</source>
<translation type="unfinished"/>
</message>
@@ -293,27 +285,63 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Use monospaced font for Notes</source>
+ <source>Language selection</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Language selection</source>
+ <source>Global auto-type shortcut</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Reset Settings to Default</source>
+ <source>Auto-type character typing delay milliseconds</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Auto-type start delay milliseconds</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
</context>
@@ -365,18 +393,6 @@
<translation>Lås tidligere låste databaser igen efter udførsel af autoskriv</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Kræv ikke gentagelse af adgangskode når det er synligt</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Skjul ikke adgangskoder når de redigeres</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Brug ikke pladsholder til tomme adgangskodefelter</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Skjul adgangskoder i panelet til forhåndsvisning af post</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,33 +555,35 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser Bekræft Adgang</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Husk dette valg</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Tillad</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Afvis</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 har anmodet om adgang til adgangskoder tilhørende disse element(er).
-Vælg venligst hvorvidt du vil tillade denne adgang.</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
+ <source>Allow Selected</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disable for this site</source>
<translation type="unfinished"/>
</message>
</context>
@@ -579,190 +609,231 @@ Venligst vælg den korrekte database for at gemme loginoplysninger.</translation
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Ny anmodning om nøgletilknytning</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Dette er nødvendigt for at tilgå din database med KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Gem og tillad adgang</translation>
</message>
<message>
- <source>General</source>
- <translation>Generelt</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Overskriv eksisterende nøgle?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Aktivér integritet for disse browsere:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>En delt krypteringsnøgle med navnet &quot;%1&quot; eksisterer allerede.
+Vil du overskrive den?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Opdater post</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Vil du opdatere oplysningerne i %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Afbryd</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Konverterer attributter til tilpasset data …</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Vis en &amp;underretning når der anmodes om loginoplysninger</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Konverterede KeePassHTTP-attributter</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Anmod om at låse op for databasen hvis den er låst</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Det lykkedes at konvertere attributter fra %1 post(er).
+Flyttede %2 nøgler til tilpasset data.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Det lykkedes at flytte %n nøgle til tilpasset data.</numerusform><numerusform>Det lykkedes at flytte %n nøgler til tilpasset data.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Kun poster med samme skema (http://, https:// ...) bliver returneret.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Fandt ingen post med KeePassHTTP-attributter!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Match URL-skema (f.eks. https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Den aktive database indeholder ikke en post med KeePassHTTP-attributter.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Returnér kun det bedste match for en specifik URL i stedet for alle matches for hele domænet.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Registreret udgået browserintegritetindstillinger</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Returnér kun de loginoplysninger som matcher bedst</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Opret en ny gruppe</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortér matchende loginoplysninger efter &amp;titel</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Modtog en anmodning om at oprette en ny gruppe &quot;%1&quot;.
+Vil du oprette gruppen?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortér matchende loginoplysninger efter &amp;brugernavn</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Dine indstillinger for KeePassXC-Browser skal flyttes ind i databaseindstillingerne.
+Det er nødvendigt for at vedligeholde dine nuværende browserforbindelser.
+Vil du migrere dine eksisterende indstillinger nu?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avanceret</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Vis ikke denne advarsel igen</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Spørg aldrig før loginoplysninger tilgås</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Spørg aldrig før loginoplysninger &amp;opdateres</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Søg i &amp;alle åbne databaser efter matchende loginoplysninger</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Dette er nødvendigt for at tilgå din database med KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatisk oprettelse eller opdatering af tekstfelter understøttes ikke.</translation>
+ <source>Enable browser integration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Returnér avancerede strengfelter som begynder med &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Generelt</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Opdaterer KeePassXC eller keepassxc-proxy binære sti automatisk til beskedscript ved opstart.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Opdater &amp;beskedmanifestfiler ved opstart</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Aktivér integritet for disse browsere:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Understøttelse af et proxyprogram mellem KeePassXC og browserudvidelse.</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Brug et proxyprogram mellem KeePassXC og browserudvidelse</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Brug en tilpasset proxyplacering hvis du har installeret en proxy manuelt.</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Brug en tilpasset proxyplacering</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Gennemse ...</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Advarsel:&lt;/b&gt; Følgende indstillinger kan være farlige!</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Vælg en tilpasset proxyplacering</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Eksekverbare filer</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>Alle filer</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Kun poster med samme skema (http://, https:// ...) bliver returneret.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Spørg ikke om tilladelse til HTTP &amp;Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Grundet Snap-sandkasse, er du nødsaget til at køre et script for at aktivere browserintegritet.&lt;br /&gt;Du kan hente scriptet fra %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Returnér kun det bedste match for en specifik URL i stedet for alle matches for hele domænet.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Venligst se vigtige instruktioner for brug af browser tilføjelsen nedenfor</translation>
+ <source>Return only best-matching credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser kræves for at browserintegritet skal virke. &lt;br /&gt;Download den til %1 og %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>All databases connected to the extension will return matching credentials.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Advanced</source>
+ <translation>Avanceret</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatisk oprettelse eller opdatering af tekstfelter understøttes ikke.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
@@ -770,114 +841,109 @@ Venligst vælg den korrekte database for at gemme loginoplysninger.</translation
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Opdaterer KeePassXC eller keepassxc-proxy binære sti automatisk til beskedscript ved opstart.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Brug en tilpasset proxyplacering hvis du har installeret en proxy manuelt.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Custom proxy location field</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Ny nøgleassocieringsanmodelse</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Gem og tillad adgang</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Gennemse ...</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Overskriv eksisterende nøgle?</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>En delt krypteringsnøgle med navnet &quot;%1&quot; eksisterer allerede.
-Vil du overskrive den?</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Opdater post</translation>
+ <source>Toolbar button style</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Vil du opdatere oplysningerne i %1 - %2?</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Afbryd</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Konverterer attributter til tilpasset data …</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Konverterede KeePassHTTP-attributter</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Det lykkedes at konvertere attributter fra %1 post(er).
-Flyttede %2 nøgler til tilpasset data.</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Det lykkedes at flytte %n nøgle til tilpasset data.</numerusform><numerusform>Det lykkedes at flytte %n nøgler til tilpasset data.</numerusform></translation>
+ <message>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Fandt ingen post med KeePassHTTP-attributter!</translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Grundet Snap-sandkasse, er du nødsaget til at køre et script for at aktivere browserintegritet.&lt;br /&gt;Du kan hente scriptet fra %1</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Den aktive database indeholder ikke en post med KeePassHTTP-attributter.</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Registreret udgået browserintegritetindstillinger</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Venligst se vigtige instruktioner for brug af browser tilføjelsen nedenfor</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Opret en ny gruppe</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Modtog en anmodning om at oprette en ny gruppe &quot;%1&quot;.
-Vil du oprette gruppen?
-</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Advarsel:&lt;/b&gt; Følgende indstillinger kan være farlige!</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Dine indstillinger for KeePassXC-Browser skal flyttes ind i databaseindstillingerne.
-Det er nødvendigt for at vedligeholde dine nuværende browserforbindelser.
-Vil du migrere dine eksisterende indstillinger nu?</translation>
+ <source>Executable Files</source>
+ <translation>Eksekverbare filer</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Vis ikke denne advarsel igen</translation>
+ <source>All Files</source>
+ <translation>Alle filer</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Select custom proxy location</source>
+ <translation>Vælg en tilpasset proxyplacering</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -935,10 +1001,6 @@ chrome-laptop.</source>
<translation>Kommentarer starter med</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Første optegnelse har feltnavne</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Betragt &apos;\&apos; som en escape karakter</translation>
</message>
@@ -947,14 +1009,6 @@ chrome-laptop.</source>
<translation>Forhåndsvisning</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Kolonnelayout</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Ikke til stede i CSV-fil</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importeret fra CSV-fil</translation>
</message>
@@ -967,14 +1021,6 @@ chrome-laptop.</source>
<translation>Fejl</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Tomt feltnavn %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>kolonne %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Fejl registreret i CSV-fil!</translation>
</message>
@@ -1004,6 +1050,58 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Sidst ændret</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Adgangskode</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Oprettet</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Bemærkninger</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppe</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Brugernavn</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1028,11 +1126,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Rod</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Filen %1 findes ikke.</translation>
</message>
@@ -1073,6 +1166,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Papirkurv</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Adgangskoder</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1126,10 +1232,6 @@ Overvej at generere en ny nøglefil.</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation type="unfinished"/>
</message>
@@ -1142,14 +1244,6 @@ Overvej at generere en ny nøglefil.</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
@@ -1210,28 +1304,44 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <source>Key file help</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Key file help</source>
+ <source>?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>?</source>
+ <source>Cannot use database file as key file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select key file...</source>
+ <source>You cannot use your database file as a key file.
+If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Cannot use database file as key file</source>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You cannot use your database file as a key file.
-If you do not have a key file, please leave the field empty.</source>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Tryk på knappen på din YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1257,10 +1367,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Sikkerhed</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Hovednøgle</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Krypteringsindstillinger</translation>
</message>
@@ -1268,6 +1374,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Browserintegritet</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1276,18 +1386,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-Browserindstillinger</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Afbryd forbindelse til alle browsere</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>&amp;Glem alle stedspecifikke indstillinger på posterne</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Flyt KeePassHTTP-attributter til KeePassXC-Browser &amp;tilpasset data</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Gemte nøgler</translation>
</message>
@@ -1395,6 +1493,66 @@ Det er nødvendigt for at vedligeholde kompatibilitet med browserpluginet.</tran
<source>Remove selected key</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Oprettet</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Tilføj yderligere beskyttelse ...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Ingen adgangskode indstillet</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>ADVARSEL! Du har ikke indstillet en adgangskode. Det frarådes kraftigt at bruge en database uden en adgangskode!
+
+Er du sikker på, du vil fortsætte uden en adgangskode?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Ingen krypteringsnøgle tilføjet</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Du skal tilføje mindst en krypteringsnøgle for at sikre din database!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Ukendt fejl</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1419,10 +1577,6 @@ Det er nødvendigt for at vedligeholde kompatibilitet med browserpluginet.</tran
<translation>Transformationsrunder:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Benchmark forsinkelse på 1 sekund</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Hukommelsesforbrug:</translation>
</message>
@@ -1443,14 +1597,6 @@ Det er nødvendigt for at vedligeholde kompatibilitet med browserpluginet.</tran
<translation>Skift</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Højere værdier giver mere beskyttelse, men det vil tage længere at åbne databasen.</translation>
</message>
@@ -1527,16 +1673,6 @@ Hvis du beholder dette antal, så kan din database være nem af knække!</transl
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> tråd</numerusform><numerusform> tråde</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation type="unfinished"/>
@@ -1569,6 +1705,14 @@ Hvis du beholder dette antal, så kan din database være nem af knække!</transl
<source>Parallelism</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1577,15 +1721,15 @@ Hvis du beholder dette antal, så kan din database være nem af knække!</transl
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1632,10 +1776,6 @@ Hvis du beholder dette antal, så kan din database være nem af knække!</transl
<translation>Yderligere databaseindstillinger</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Aktivér &amp;komprimering (anbefales)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation type="unfinished"/>
</message>
@@ -1668,6 +1808,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1702,45 +1846,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Tilføj yderligere beskyttelse ...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Ingen krypteringsnøgle tilføjet</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Du skal tilføje mindst en krypteringsnøgle for at sikre din database!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Ingen adgangskode indstillet</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>ADVARSEL! Du har ikke indstillet en adgangskode. Det frarådes kraftigt at bruge en database uden en adgangskode!
-
-Er du sikker på, du vil fortsætte uden en adgangskode?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Ukendt fejl</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Kunne ikke skifte hovednøgle</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1760,125 +1865,6 @@ Er du sikker på, du vil fortsætte uden en adgangskode?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Navn</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Værdi</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1973,6 +1959,10 @@ Det er helt sikkert en fejl. Rapportér det venligst til udviklerne.</translatio
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2154,6 +2144,14 @@ Så sikre gem fra og prøv igen?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2198,14 +2196,6 @@ Så sikre gem fra og prøv igen?</translation>
<translation>Vælg privat nøgle</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Filen er for stor til at være en privat nøgle</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Kunne ikke åbne privat nøgle</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Indtastningshistorik</translation>
</message>
@@ -2218,10 +2208,6 @@ Så sikre gem fra og prøv igen?</translation>
<translation>Rediger post</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Andre adgangskoder leveret.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Ny attribut</translation>
</message>
@@ -2242,29 +2228,13 @@ Så sikre gem fra og prøv igen?</translation>
<translation><numerusform>%n måned</numerusform><numerusform>%n måneder</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Anvend genereret adgangskode?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Vil du bruge den genererede adgangskode i denne post?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Post blev succesfuldt opdateret.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Posten har ændringer som ikke er blevet gemt</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Ny attribut %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[BESKYTTET] Tryk på vis for at vise eller redigere</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n år</numerusform><numerusform>%n år</numerusform></translation>
@@ -2285,6 +2255,26 @@ Så sikre gem fra og prøv igen?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Vis</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2360,6 +2350,14 @@ Så sikre gem fra og prøv igen?</translation>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2368,16 +2366,8 @@ Så sikre gem fra og prøv igen?</translation>
<translation>Aktivér autoskriv for denne post</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Nedarv standard autoskriv-sekvens fra &amp;gruppen</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Brug tilpasset autoskriv-sekvens:</translation>
- </message>
- <message>
<source>Window Associations</source>
- <translation>Vinduesassocieringer</translation>
+ <translation>Vinduestilknytninger</translation>
</message>
<message>
<source>+</source>
@@ -2393,7 +2383,7 @@ Så sikre gem fra og prøv igen?</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Brug en specifik sekvens for denne associering:</translation>
+ <translation>Brug en specifik sekvens for tilknytningen:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2431,6 +2421,14 @@ Så sikre gem fra og prøv igen?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Nedarv standard Auto-Indsæt sekvens fra gruppe</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Brug brugerdefineret Auto-indsæt sekvens:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2466,6 +2464,14 @@ Så sikre gem fra og prøv igen?</translation>
<source>Edit</source>
<translation>Rediger</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2517,18 +2523,10 @@ Så sikre gem fra og prøv igen?</translation>
<translation>Adgangskode:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Gentag:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titel:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Bemærkninger</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Forudindstillinger</translation>
</message>
@@ -2541,10 +2539,6 @@ Så sikre gem fra og prøv igen?</translation>
<translation>Brugernavn:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Udløber</translation>
- </message>
- <message>
<source>Url field</source>
<translation type="unfinished"/>
</message>
@@ -2553,22 +2547,10 @@ Så sikre gem fra og prøv igen?</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2600,6 +2582,18 @@ Så sikre gem fra og prøv igen?</translation>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Noter:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2735,10 +2729,6 @@ Så sikre gem fra og prøv igen?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formular</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Type:</translation>
</message>
@@ -2747,10 +2737,6 @@ Så sikre gem fra og prøv igen?</translation>
<translation>Sti:</translation>
</message>
<message>
- <source>...</source>
- <translation> ...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Adgangskode:</translation>
</message>
@@ -2833,96 +2819,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Gennemse ...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Navn</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>Bemærkninger</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expires</source>
- <translation>Udløber</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Søg</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Autoskriv</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Brug standard autoskriv-sekvens fra forældregruppe</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Definér standard autoskriv-sekvens</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>Noter:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Brug standardikon</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Brug &amp;tilpasset ikon</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Tilføj tilpasset ikon</translation>
</message>
@@ -2987,27 +2961,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
+ <translation>Brug standardikon</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Brug brugerbestemt ikon</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3195,6 +3177,17 @@ Det kan få de påvirkede plugins til at svigte.</translation>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3278,12 +3271,52 @@ Det kan få de påvirkede plugins til at svigte.</translation>
<translation>Vedhæftninger</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ja</translation>
+ <source>Size</source>
+ <translation>Størrelse</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3383,6 +3416,13 @@ Det kan få de påvirkede plugins til at svigte.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3409,8 +3449,14 @@ Det kan få de påvirkede plugins til at svigte.</translation>
<translation>Nulstil til standardindstillinger</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Vedhæftninger (ikon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3422,20 +3468,73 @@ Det kan få de påvirkede plugins til at svigte.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppe</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Ukendt</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Ukendt</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3448,14 +3547,10 @@ Det kan få de påvirkede plugins til at svigte.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Kan ikke gemme fil!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Kan ikke gemme besked-script filen.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3524,14 +3619,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke beregne hovednøgle</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kunne ikke udstede udfordring/svar.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>mangler databaseheadere</translation>
</message>
@@ -3556,16 +3643,24 @@ You can enable the DuckDuckGo website icon service in the security section of th
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kunne ikke udstede udfordring/svar.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke beregne hovednøgle</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3575,10 +3670,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>mangler databaseheadere</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke beregne hovednøgle</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Ugyldig størrelse på gruppefelt</translation>
</message>
@@ -3695,6 +3786,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3708,14 +3803,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ugyldig størrelse på IV for symmetrisk ciffer.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke beregne hovednøgle</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Kunne ikke serielisere KDF-parameternes variantkort</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3865,16 +3960,12 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<translation>Poststreng-nøgle eller -værdi mangler</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Fandt ens vedhæftning</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Binær nøgle eller værdi for post mangler</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>Autoskriv associeringsvindue eller -sekvens mangler</translation>
+ <translation>Autoskriv tilknytningsvindue eller -sekvens mangler</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3915,6 +4006,29 @@ Linje %2, kolonne %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Filen er for stor til at være en privat nøgle</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Kunne ikke åbne privat nøgle</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3977,10 +4091,6 @@ Linje %2, kolonne %3</translation>
<translation>Rod</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke beregne hovednøgle</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Nøgletransformering mislykkedes</translation>
</message>
@@ -4081,6 +4191,10 @@ Linje %2, kolonne %3</translation>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4187,16 +4301,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Udgået nøglefilformat</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Du bruger et udgået nøglefilformat, som muligvis ikke
-understøttes i fremtiden.
-
-Gå venligst til hovednøgleindstillingerne og generér en ny nøglefil.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Fejl ved indlæsning af nøglefilen &apos;%1&apos;
@@ -4263,6 +4367,13 @@ Meddelelse: %2</translation>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4271,18 +4382,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Database</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Seneste databaser</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Hjælp</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Poster</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupper</translation>
</message>
@@ -4299,46 +4402,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Om</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Åbn database ...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Gem database</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Luk database</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Slet post</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Rediger gruppe</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Slet gruppe</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>&amp;Gem database som ...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Databaseindstillinger</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Klon post</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopiér &amp;brugernavn</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Kopiér brugernavn til udklipsholder</translation>
</message>
@@ -4351,10 +4418,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Indstillinger</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lås databaser</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titel</translation>
</message>
@@ -4379,14 +4442,6 @@ Are you sure you want to continue with this file?</source>
<translation>Kopiér bemærkninger til udklipsholder</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Eksportér til CSV-fil ...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Opsæt TOTP ...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopiér &amp;TOTP</translation>
</message>
@@ -4431,10 +4486,6 @@ Denne version er ikke beregnet til at blive brugt i produktion.</translation>
<translation>&amp;Donér</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Rapportér en &amp;fejl</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>ADVARSEL: Din Qt-version kan få KeePassXC til at holde op med at virke ved brug af skærmtastatur!
@@ -4445,66 +4496,26 @@ Vi anbefaler at du i bruger det AppImage som findes på vores downloadside.</tra
<translation>&amp;Importér</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopiér a&amp;ttribut ...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP ...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Ny database ...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Opret en ny database</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>Sammenlæg &amp;fra database ...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Sammenlæg fra en anden KDBX-database</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Ny post</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Tilføj en ny post</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Rediger post</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Vis eller rediger post</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Ny gruppe</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Tilføj en ny gruppe</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Skift &amp;hovednøgle ...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Databaseindstillinger ...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Kopiér adgangsk&amp;ode</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Udfør &amp;autoskriv</translation>
</message>
@@ -4513,30 +4524,14 @@ Vi anbefaler at du i bruger det AppImage som findes på vores downloadside.</tra
<translation>Åbn &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1-database ...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importér en KeePass 1-database</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV-fil ...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importér en CSV-fil</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Vis TOTP ...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Vis TOTP QR-kode ...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>BEMÆRK: Du bruger en præudgivelsesversion af KeePassXC!
@@ -4559,14 +4554,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>&amp;Eksportér</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Søg efter opdateringer ...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>&amp;Download alle faviconer</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Sortér &amp;A-Å</translation>
</message>
@@ -4579,48 +4566,290 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>&amp;Adgangskodegenerator</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Download favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importér en 1Password-boks</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Eksportér til HTML-fil ...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Kom godt i gang</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password-boks ...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Brugerguide</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importér en 1Password-boks</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Tastaturgenveje</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Kom godt i gang</translation>
+ <source>&amp;Recent Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>Copy Att&amp;ribute</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Onlinehjælp ...</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>View</source>
+ <translation>Vis</translation>
+ </message>
+ <message>
+ <source>Theme</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Brugerguide</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>&amp;Open Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Tastaturgenveje</translation>
+ <source>&amp;Save Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Vis TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Databaseindstillinger</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Lås database op</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Lås database</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4709,10 +4938,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>Assistentside</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>&amp;Krypteringsindstillinger</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne.</translation>
</message>
@@ -4724,27 +4949,31 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<source>Simple Settings</source>
<translation>Simple indstillinger</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Krypteringsindstillinger</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Hovednøgle til database</translation>
+ <source>Encryption Settings</source>
+ <translation>Krypteringsindstillinger</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>En hovednøgle til at beskytte din database, som kun kendes af dig.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne.</translation>
</message>
</context>
<context>
@@ -4759,6 +4988,13 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4933,6 +5169,18 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4957,25 +5205,13 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>Adgangskoderne er ikke ens.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Generér hovedadgangskode</translation>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4984,10 +5220,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Adgangskode:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>styrke</translation>
@@ -5037,14 +5269,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>Ordseparator:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopiér</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Acceptér</translation>
- </message>
- <message>
<source>Close</source>
<translation>Luk</translation>
</message>
@@ -5141,14 +5365,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Skift til simpel tilstand</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Simpel</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Tegnsæt som skal medtages fra generede adgangskode</translation>
</message>
@@ -5169,14 +5385,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>Udeluk tegnene: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Ordtælling:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regenerér</translation>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5225,10 +5433,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>Kopiér kodeord</translation>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5241,7 +5445,43 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Antal ord:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Ryd</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5255,6 +5495,58 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<source>Statistics</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5319,7 +5611,7 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>KeePassXC-associering mislykkedes, prøv igen</translation>
+ <translation>KeePassXC-tilknytning mislykkedes, prøv igen</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5394,10 +5686,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<translation>Sti for posten, som skal tilføjes.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Kopiér adgangskoden for post til udklipsholder.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Sti til posten, som skal klippes.</translation>
@@ -5555,14 +5843,6 @@ Tilgængelige kommandoer:
<translation>Browserintegritet</translation>
</message>
<message>
- <source>Press</source>
- <translation>Tryk</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiv</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-agent</translation>
</message>
@@ -5601,10 +5881,6 @@ Tilgængelige kommandoer:
<translation>Det lykkedes at tilføje posten %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Kopiér den nuværende TOTP til udklipsholderen.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Ugyldig timeout-værdi %1.</translation>
</message>
@@ -5616,14 +5892,6 @@ Tilgængelige kommandoer:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Posten med stien %1 har ikke opsat nogen TOTP.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Postens nuværende TOTP kopieret til udklipsholderen!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Postens adgangskode kopieret til udklipsholderen!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>Rydder udklipsholderen om %1 sekund ...</numerusform><numerusform>Rydder udklipsholderen om %1 sekunder ...</numerusform></translation>
@@ -5844,10 +6112,6 @@ Tilgængelige kommandoer:
<translation>Der er ikke angivet noget program til manipulering af udklipsholderen</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Kan ikke starte programmet %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>filen er tom</translation>
</message>
@@ -5856,18 +6120,6 @@ Tilgængelige kommandoer:
<translation>%1: (række, kolonne) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – anbefales)</translation>
</message>
@@ -6118,10 +6370,6 @@ Kerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6138,10 +6386,6 @@ Kerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6182,10 +6426,6 @@ Kerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6278,10 +6518,6 @@ Kerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6297,10 +6533,6 @@ Kerne: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6313,6 +6545,193 @@ Kerne: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6349,6 +6768,290 @@ Kerne: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Dårlig</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Svag</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Sti</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Sti</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Navn</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Værdi</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>no</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6382,6 +7085,14 @@ Kerne: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>En bekræftelsesanmodning understøttes ikke af agenten (tjek indstillingerne).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6489,26 +7200,10 @@ Kerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Gruppe</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
<translation type="unfinished"/>
</message>
@@ -6517,39 +7212,19 @@ Kerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Disconnect</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Databaseindstillinger</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Lås database op</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock database</source>
- <translation>Lås database</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -6823,10 +7498,6 @@ Kerne: %3 %4</translation>
<translation>Underskriver import lykkedes</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Uventet fejl</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Delingsbeholder som ikke er underskrevet understøttes ikke - import forhindret</translation>
</message>
@@ -6995,6 +7666,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7085,6 +7763,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Tryk</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiv</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7099,19 +7824,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Hvis du ejer en &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, så kan du bruge den for yderligere sikkerhed.&lt;/p&gt;&lt;p&gt;YubiKey kræver at en af dets pladser er programmet som &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1-udfordring/svar&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Der er ikke registreret nogen YubiKey. Sørg venligst for at den er sat i.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Der er ikke indsat nogen YubiKey.</translation>
+ <source>Hardware key slot selection</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/share/translations/keepassx_de.ts b/share/translations/keepassx_de.ts
index 9193c6ccd..4f3f472e6 100644
--- a/share/translations/keepassx_de.ts
+++ b/share/translations/keepassx_de.ts
@@ -43,19 +43,39 @@
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>Das KeePassXC-Team bedankt sich besonders bei debfx für die Entwicklung des ursprünglichen KeePassX.</translation>
+ <translation>Das KeePassXC-Team möchte ganz besonders debfx danken für die Entwicklung des ursprünglichen KeePassX.</translation>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH-Agent aktivieren (Neustart erforderlich)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>OpenSSH für Windows statt Pageant benutzen</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>SSH-Agent-Integration aktivieren</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK-Wert</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK-Überschreibung</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(leer)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Kein SSH-Agent-Socket verfügbar. Stellen Sie sicher, dass die SSH_AUTH_SOCK-Umgebungsvariable existiert, oder setzen Sie einen Überschreibungswert.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH-Agent-Verbindung funktioniert!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -73,7 +93,7 @@
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Zugriffsfehler für Konfigurationsdatei %1</translation>
+ <translation>Zugriffsfehler bei Konfigurationsdatei %1</translation>
</message>
<message>
<source>Icon only</source>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Wollen Sie alle allgemeinen und Sicherheitseinstellungen auf die Voreinstellung zurücksetzen?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochrom (hell)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochrom (dunkel)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Bunt</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -120,17 +152,13 @@
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Fenster bei Programmstart minimieren</translation>
+ <translation>Bei Programmstart Fenster minimieren</translation>
</message>
<message>
<source>File Management</source>
<translation>Dateiverwaltung</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Datenbanken sicher speichern (ggf. inkompatibel mit Dropbox usw.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Vor dem Speichern Backup der Datenbank erstellen</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Automatisch speichern beim Beenden</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Datenbank bei geringfügigen Änderungen (z. B. Gruppen ausklappen) nicht als geändert markieren</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Datenbank nach externer Änderung automatisch neu laden</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Gruppensymbol beim Erstellen neuer Einträge verwenden</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Eintrags-Vorschau-Panel ausblenden</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Allgemein</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Werkzeugleiste (Symbole) ausblenden</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimieren, statt Programm zu beenden</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Taskleistensymbol anzeigen</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Dunkles Taskleistensymbol</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Fenster verstecken, wenn minimiert</translation>
</message>
@@ -203,25 +211,13 @@
<translation>Vor Auto-Type immer nachfragen</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globale Tastenkombination für Auto-Type</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Tastenverzögerung für Auto-Type</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Startverzögerung für Auto-Type</translation>
- </message>
- <message>
<source>Movable toolbar</source>
- <translation>Verschiebbare Werkzeugleiste</translation>
+ <translation>Bewegbare Werkzeugleiste</translation>
</message>
<message>
<source>Remember previously used databases</source>
@@ -244,10 +240,6 @@
<translation>Bei Update-Prüfung Beta-Versionen einbeziehen</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Schaltflächenstil:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Sprache:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Schaltflächenstil der Werkzeugleiste</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Monospace-Schriftart für Notizen nutzen</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Sprachauswahl</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Einstellungen auf Voreinstellung zurücksetzen</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Tastenkürzel für globales Auto-Type</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Startverzögerung für Auto-Type in Millisekunden</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>KeePassXC beim Systemstart automatisch starten</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Datenbank bei geringfügigen Änderungen (z. B. Gruppen ausklappen) als geändert markieren</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Sicheres speichern der Datenbank (bei Problemen mit Dropbox, etc. deaktivieren)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Benutzeroberfläche</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Design der Symbolleisten-Buttons:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Nutze eine monospaced Schriftart für Notizen</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Tray Icon Typ:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Einstellungen auf Voreinstellung zurücksetzen…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Tastenverzögerung für Auto-Type:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Tastenkürzel für globales Auto-Type:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Startverzögerung für Auto-Type:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Zuvor gesperrte Datenbank nach Auto-Type wieder sperren</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Keine Passwort-Wiederholung erforderlich, wenn das Passwort sichtbar ist</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Passwörter beim Bearbeiten nicht verstecken</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Keine Platzhalter für leere Passwortfelder verwenden</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Passwörter im Eintrags-Vorschau-Panel verstecken</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Suchabfrage löschen nach</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Passwort-Wiederholung erfordern, wenn das Passwort sichtbar ist</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Passwörter beim Bearbeiten verstecken</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Platzhalter für leere Passwortfelder verwenden</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser: Zugriff bestätigen</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Browser-Zugriffsanfrage</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Diese Entscheidung merken</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 fordert Zugriff auf die folgenden Einträge an:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Erlauben</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Zugriff auf markierte Einträge merken</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Verweigern</translation>
+ <source>Remember</source>
+ <translation>Merken</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 hat Zugriff auf Passwörter für folgende Einträge angefordert.
-Bitte wählen Sie aus, ob Sie den Zugriff erlauben möchten.</translation>
+ <source>Allow access to entries</source>
+ <translation>Zugriff auf Einträge erlauben</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Zugriff erlauben</translation>
+ <source>Allow Selected</source>
+ <translation>Auswahl erlauben</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Zugriff verweigern</translation>
+ <source>Deny All</source>
+ <translation>Alle verweigern</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Für diese Seite deaktivieren</translation>
</message>
</context>
<context>
@@ -579,199 +609,260 @@ Bitte wählen Sie die richtige Datenbank zum Speichern der Anmeldedaten.</transl
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Neue Schlüsselverbindungsanfrage</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Dies ist notwendig, um mit KeePassXC-Browser auf Ihre Datenbanken zuzugreifen</translation>
+ <source>Save and allow access</source>
+ <translation>Speichern und Zugriff erlauben</translation>
</message>
<message>
- <source>General</source>
- <translation>Allgemein</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Bestehenden Schlüssel überschreiben?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Integration für diese Browser aktivieren:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Ein geteilter Schlüssel mit dem Namen „%1“ existiert bereits.
+Möchten Sie ihn überschreiben?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Eintrag aktualisiert</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Möchten Sie die Informationen in %1 - %2 aktualisieren?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Abbrechen</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Eigenschaften werden in Plugin-Daten umgewandelt ...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Be&amp;nachrichtigung anzeigen, wenn Anmeldedaten benötigt werden</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeepassXC: KeePassHTTP-Eigenschaften wurden umgewandelt</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Entsperrung verlangen, wenn die Datenbank gesperrt ist</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Eigenschaften von %1 Einträgen wurden erfolgreich umgewandelt.
+%2 Schlüssel in die Plugin-Daten verschoben.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%1 Einträge wurden erfolgreich umgewandelt</numerusform><numerusform>%n Schlüssel wurden erfolgreich in die Plugin-Daten verschoben.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Nur Einträge mit dem gleichen Schema (http://, https://, …) werden zurückgeliefert.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Kein Eintrag mit KeePassHTTP-Eigenschaften gefunden!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>URL-Sche&amp;ma abgleichen (z. B. https://…)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP-Eigenschaften.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Nur die am besten passenden Einträge für eine URL anzeigen statt aller Einträge der ganzen Domain</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Veraltete Einstellungen für Browser-Integration gefunden</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Nur am &amp;besten passende Anmeldedaten zurückliefern</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Neue Gruppe erstellen</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Passende Anmeldedaten nach &amp;Titel sortieren</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Eine Anfrage zur Erstellung einer neuen Gruppe &quot;%1&quot; ist eingegangen.
+Möchten Sie diese Gruppe erstellen?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Passende Anmeldedaten nach &amp;Benutzernamen sortieren</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Ihre KeePassXC-Browser-Einstellungen müssen in die Datenbankeinstellungen verschoben werden.
+Dies ist notwendig, um Ihre aktuellen Browserverbindungen aufrechtzuerhalten.
+Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Fortgeschritten</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Diese Warnung nicht wieder anzeigen</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Niemals &amp;fragen, bevor auf Anmeldedaten zugegriffen wird</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Verbindungsanfrage erhalten für folgende Datenbank:
+%1
+
+Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot;.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Niemals fragen, bevor Anmeldedaten a&amp;ktualisiert werden</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>In allen geöffneten Datenbanken nach passenden Anmeldedaten suc&amp;hen</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Dies ist notwendig, um mit KeePassXC-Browser auf Ihre Datenbanken zuzugreifen</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatisches Erstellen und Aktualisieren von erweiterten Attributen wird nicht unterstützt.</translation>
+ <source>Enable browser integration</source>
+ <translation>Browserintegration aktivieren</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Auch erweiterte Attribute an&amp;zeigen, die mit &quot;KPH: &quot; beginnen</translation>
+ <source>General</source>
+ <translation>Allgemein</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Aktualisiert beim Start den KeePassXC- oder KeePassXC-Proxy-Pfad automatisch in den Native-Messaging-Skripts.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Browser, die als Snaps installiert sind, werden derzeit nicht unterstützt.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Native-Messaging-Manifest beim Start aktualisieren</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Integration für diese Browser aktivieren:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Proxy-Anwendung zwischen KeePassXC und Browser-Erweiterung unterstützen</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>&amp;Proxy-Anwendung zwischen KeePassXC und Browser-Erweiterung verwenden</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Benutzerdefinierten Proxy-Pfad verwenden, falls ein Proxy manuell installiert wurde</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>&amp;Benutzerdefinierten Proxy-Pfad verwenden</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Durchsuchen ...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Warnung:&lt;/b&gt; Die folgenden Einstellungen können gefährlich sein!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Benutzerdefinierten Proxy-Pfad auswählen</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor-Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Benachrichtigung anzeigen, wenn Anmeldedaten angefragt werden</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Ausführbare Dateien</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Entsperrung anfragen, wenn die Datenbank gesperrt ist</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Alle Dateien</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Nur Einträge mit dem gleichen Schema (http://, https://, …) werden zurückgeliefert.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Nicht nach &amp;Berechtigung für &quot;HTTP Basic Auth&quot; fragen</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>URL-Schema abgleichen (z. B. https://…)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Aufgrund von Snap Sandboxing müssen Sie ein Skript ausführen, um die Browser-Integration zu aktivieren.&lt;br /&gt;Sie können dieses Skript erhalten unter %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Nur die am besten passenden Einträge für eine URL anzeigen statt aller Einträge der ganzen Domain</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Bitte beachten Sie die untenstehenden speziellen Anweisungen für die Verwendung der Browser-Erweiterung</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Nur am besten passende Anmeldedaten zurückliefern</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser wird für die Browserintegration benötigt. &lt;br /&gt;Laden Sie es für %1 und %2 herunter. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Abgelaufene Anmeldedaten zurückgeben. &quot;Abgelaufen&quot; wird an den Titel angehängt.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Rückgabe abgelaufener Anmeldedaten erlauben</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Abgelaufene Anmeldedaten zurückgeben. &quot;Abgelaufen&quot; wird an den Titel angehängt.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Alle Datenbanken, die mit der Erweiterung verbunden sind, geben übereinstimmende Anmeldedaten zurück.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>Rückgabe abgelaufener Anmeldedaten &amp;erlauben.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>In allen geöffneten Datenbanken nach passenden Anmeldedaten suchen</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Browserintegration aktivieren</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Passende Anmeldedaten nach Titel sortieren</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Browser, die als Snaps installiert sind, werden derzeit nicht unterstützt.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Passende Anmeldedaten nach Benutzername sortieren</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Alle Datenbanken, die mit der Erweiterung verbunden sind, geben übereinstimmende Anmeldedaten zurück.</translation>
+ <source>Advanced</source>
+ <translation>Fortgeschritten</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Niemals fragen, bevor auf Anmeldedaten zugegriffen wird</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Niemals fragen, bevor Anmeldedaten aktualisiert werden</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Nicht nach Berechtigung für &quot;HTTP Basic Auth&quot; fragen</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatisches Erstellen und Aktualisieren von erweiterten Attributen wird nicht unterstützt.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Auch erweiterte Attribute anzeigen, die mit &quot;KPH: &quot; beginnen</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Kein Popup zeigen, das die Migration von älteren KeePassHTTP-Einstellungen vorschlägt.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Nicht zur Migration der KeePassHTTP-Einstellungen auffordern.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Nicht zur Migration der KeePassHTTP-Einstellungen auffordern.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Aktualisiert beim Start den KeePassXC- oder KeePassXC-Proxy-Pfad automatisch in den Native-Messaging-Skripts.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Native-Messaging-Manifest beim Start aktualisieren</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Benutzerdefinierten Proxy-Pfad verwenden, falls ein Proxy manuell installiert wurde</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Benutzerdefinierten Proxy-Pfad verwenden</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,117 +873,92 @@ Bitte wählen Sie die richtige Datenbank zum Speichern der Anmeldedaten.</transl
<translation>Browser für benutzerdefinierte Proxydatei</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Achtung&lt;/b&gt;, die KeePassXC-Proxy-Anwendung wurde nicht gefunden!&lt;br&gt;Bitte überprüfen Sie das KeePassXC-Installationsverzeichnis oder bestätigen Sie den benutzerdefinierten Pfad in den Fortgeschrittenen-Einstellungen.&lt;br&gt; Die Browser-Integration wird ohne die Proxy-Anwendung NICHT FUNKTIONIEREN.&lt;br&gt;Erwarteter Pfad: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Durchsuchen ...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Neue Schlüsselverbindungsanfrage</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Benutzerdefinierten Browser-Konfigurations-Pfad verwenden:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Speichern und Zugriff erlauben</translation>
+ <source>Browser type:</source>
+ <translation>Browser-Typ:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Bestehenden Schlüssel überschreiben?</translation>
+ <source>Toolbar button style</source>
+ <translation>Schaltflächenstil der Werkzeugleiste</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Ein geteilter Schlüssel mit dem Namen „%1“ existiert bereits.
-Möchten Sie ihn überschreiben?</translation>
+ <source>Config Location:</source>
+ <translation>Konfigurations-Pfad.</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Eintrag aktualisieren</translation>
+ <source>Custom browser location field</source>
+ <translation>Feld für benutzerdefinierten Browserpfad</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Möchten Sie die Informationen in %1 - %2 aktualisieren?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abbrechen</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Nach benutzerdefiniertem Browserpfad suchen</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Eigenschaften werden in Plugin-Daten umgewandelt ...</translation>
+ <source>Custom extension ID:</source>
+ <translation>Benutzerdefinierte Erweiterungs-ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeepassXC: KeePassHTTP-Eigenschaften wurden umgewandelt</translation>
+ <source>Custom extension ID</source>
+ <translation>Benutzerdefinierte Erweiterungs-ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Eigenschaften von %1 Einträgen wurden erfolgreich umgewandelt.
-%2 Schlüssel in die Plugin-Daten verschoben.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n Schlüssel wurde erfolgreich zu Plugin-Daten verschoben.</numerusform><numerusform>%n Schlüssel wurden erfolgreich in die Plugin-Daten verschoben.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Aufgrund von Snap Sandboxing müssen Sie ein Skript ausführen, um die Browser-Integration zu aktivieren.&lt;br /&gt;Sie können dieses Skript erhalten unter %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Kein Eintrag mit KeePassHTTP-Eigenschaften gefunden!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser wird für die Browserintegration benötigt. &lt;br /&gt;Laden Sie es für %1 und %2 und %3 herunter. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP-Eigenschaften.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Bitte beachten Sie die untenstehenden speziellen Anweisungen für die Verwendung der Browser-Erweiterung</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Veraltete Einstellungen für Browser-Integration gefunden</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Fehler:&lt;/b&gt; Der benutzerdefinierte Proxy-Pfad kann nicht gefunden werden!&lt;br/&gt;Browser-Integration WIRD NICHT FUNKTIONIEREN ohne die Proxy-Anwendung.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Neue Gruppe erstellen</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Warnung:&lt;/b&gt; Die folgenden Einstellungen können gefährlich sein!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Eine Anfrage zur Erstellung einer neuen Gruppe &quot;%1&quot; ist eingegangen.
-Möchten Sie diese Gruppe erstellen?
-</translation>
+ <source>Executable Files</source>
+ <translation>Ausführbare Dateien</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Ihre KeePassXC-Browser-Einstellungen müssen in die Datenbankeinstellungen verschoben werden.
-Dies ist notwendig, um Ihre aktuellen Browserverbindungen aufrechtzuerhalten.
-Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren?</translation>
+ <source>All Files</source>
+ <translation>Alle Dateien</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Diese Warnung nicht mehr anzeigen</translation>
+ <source>Select custom proxy location</source>
+ <translation>Benutzerdefinierten Proxy-Pfad auswählen</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Verbindungsanfrage erhalten für folgende Datenbank:
-%1
-
-Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot;.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Ordner-Pfad für Native-Messaging-Host auswählen</translation>
</message>
</context>
<context>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
- <translation>Klon-Einstellungen</translation>
+ <translation>Klon-Optionen</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>„ - Klon“ an Titel anfügen</translation>
+ <translation>„ - Klon“ zum Titel hinzufügen</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -938,26 +1004,14 @@ Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot
<translation>Kommentare beginnen mit</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Erster Eintrag enthält Feldnamen</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>Behandle „\“ als Maskierungszeichen</translation>
+ <translation>„\“ als Maskierungs-Zeichen behandeln</translation>
</message>
<message>
<source>Preview</source>
<translation>Vorschau</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Spaltenlayout</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Nicht in CSV-Datei vorhanden</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Aus CSV-Datei importiert</translation>
</message>
@@ -970,20 +1024,12 @@ Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot
<translation>Fehler</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Leerer Feldname %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>Spalte %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Fehler in CSV-Datei gefunden!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n weitere Nachricht übersprungen]</numerusform><numerusform>[%n weitere Meldung(en) übersprungen]</numerusform></translation>
+ <translation><numerusform>[zusätzlich %n Nachricht(en) übersprungen]</numerusform><numerusform>[%n weitere Nachricht(en) übersprungen]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1006,6 +1052,58 @@ Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot
<source>CSV import preview</source>
<translation>CSV-Import-Vorschau</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Spalten-Zuordnung</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Zuletzt bearbeitet</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Passwort</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Erstellt</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notizen</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppe</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Benutzername</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Kopfzeilen übersprungen</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Erste Zeile enthält Feldnamen</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Nicht vorhanden</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Spalte %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1020,21 +1118,16 @@ Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n Byte</numerusform><numerusform>%n Byte(s)</numerusform></translation>
+ <translation><numerusform>%n Byte(s)</numerusform><numerusform>%n Byte(s)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n Zeile</numerusform><numerusform>%n Zeile(n)</numerusform></translation>
+ <translation><numerusform>%n Zeile(n)</numerusform><numerusform>%n Zeile(n)</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Root</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Datei %1 existiert nicht.</translation>
</message>
@@ -1044,7 +1137,7 @@ Geben Sie der Verbindung einen eindeutigen Namen, z. B. &quot;chrome-laptop&quot
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>Fehler beim Einlesen der Datenbank: %1</translation>
+ <translation>Fehler beim Öffnen der Datenbank: %1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
@@ -1076,6 +1169,19 @@ Sicherungskopie der Datenbank ist in %2</translation>
<source>Recycle Bin</source>
<translation>Papierkorb</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Passwörter</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Speichern der Datenbank wird bereits ausgeführt.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Kann nicht abspeichern, die Datenbank wurde nicht initialisiert!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1128,10 +1234,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu erzeugen.</translat
<translation>Fehler beim Öffnen der Schlüsseldatei: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Slot auswählen ...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>KeePassXC-Datenbank entsperren</translation>
</message>
@@ -1144,14 +1246,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu erzeugen.</translat
<translation>Passwort-Feld</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Passwort-Sichtbarkeit umschalten</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Auswahl der Schlüsseldatei</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Auswahl des Hardwareschlüssel-Slots</translation>
</message>
@@ -1216,10 +1310,6 @@ Um zu verhindern, dass dieser Fehler auftritt, müssen Sie zu &quot;Datenbankein
&lt;p&gt;Klicken Sie hier, um weitere Informationen zu erhalten ...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Zusätzlich zu Ihrem Masterpasswort können Sie eine geheime Datei verwenden, um die Sicherheit Ihrer Datenbank zu erhöhen. Eine solche Datei kann in den Sicherheitseinstellungen Ihrer Datenbank generiert werden.&lt;/p&gt; &lt;p&gt;Diese Datei ist jedoch &lt;strong&gt;nicht&lt;/strong&gt; Ihre *.kdbx-Datei!&lt;br&gt; Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld leer.&lt;/p&gt; &lt;p&gt;Klicken Sie hier für weitere Informationen ...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Schlüsseldatei-Hilfe</translation>
</message>
@@ -1228,10 +1318,6 @@ Um zu verhindern, dass dieser Fehler auftritt, müssen Sie zu &quot;Datenbankein
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Schlüsseldatei auswählen ...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Datenbankdatei kann nicht als Schlüsseldatei verwendet werden</translation>
</message>
@@ -1241,6 +1327,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Sie können nicht Ihre Datenbank als Schlüsseldatei verwenden.
Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Zusätzlich zum Passwort können Sie eine geheime Datei verwenden, um die Sicherheit Ihrer Datenbank zu verbessern. Diese Datei kann in den Sicherheitseinstellungen Ihrer Datenbank erzeugt werden.&lt;/p&gt;&lt;p&gt;Dies ist &lt;strong&gt;nicht&lt;/strong&gt; Ihre *.kdbx-Datenbankdatei!&lt;br&gt;Wenn Sie keine Schlüsseldatei haben, lassen Sie dieses Feld frei.&lt;/p&gt;&lt;p&gt;Hier klicken für weitere Informationen...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Schlüsseldatei zum Entsperren der Datenbank</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Bitte drücken Sie die Taste an Ihrem YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Hardwareschlüssel werden erkannt…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Keine Hardwareschlüssel erkannt</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Hardwareschlüssel auswählen…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1264,10 +1374,6 @@ Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer.</translati
<translation>Sicherheit</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Master-Passwort</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Verschlüsselungs-Einstellungen</translation>
</message>
@@ -1275,6 +1381,10 @@ Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer.</translati
<source>Browser Integration</source>
<translation>Browser-Integration</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Datenbank-Anmeldedaten</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1283,18 +1393,6 @@ Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer.</translati
<translation>KeePassXC-Browser-Einstellungen</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>Alle Browser &amp;abmelden</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Alle auf Internetseiten bezogenen Einstellungen löschen</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>KeePassHTTP-Eigenschaften in die KeePassXC-Browser-Plugin-Daten verschieben</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Gespeicherte Schlüssel</translation>
</message>
@@ -1374,7 +1472,7 @@ Zugriffserlaubnisse zu allen Einträgen werden gelöscht.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Berechtigungen aus %n Eintrag erfolgreich entfernt.</numerusform><numerusform>Berechtigungen aus %n Einträgen erfolgreich entfernt.</numerusform></translation>
+ <translation><numerusform>Zugriffsberechtigungen für %n Eintrag/Einträge erfolgreich gelöscht.</numerusform><numerusform>Berechtigungen aus %n Einträgen erfolgreich entfernt.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1402,6 +1500,67 @@ Das ist nötig, um das Browser-Plugin kompatibel zu halten.</translation>
<source>Remove selected key</source>
<translation>Ausgewählten Schlüssel entfernen</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>KeePassHTTP-Eigenschaften in die KeePassXC-Browser-Plugin-Daten verschieben</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>ID der Datenbank-Root-Gruppe erneuern</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Erstellt</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Datenbank-ID erneuern</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Wollen Sie wirklich die Datenbank-ID erneuern?
+Dies ist nur nötig, wenn Ihre Datenbank eine Kopie einer anderen ist und die Browser-Erweiterung sich nicht verbinden kann.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Zusätzlichen Schutz hinzufügen ...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Kein Passwort festgelegt</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>WARNUNG! Sie haben kein Passwort festgelegt. Es wird streng davon abgeraten, eine Datenbank ohne Passwort zu benutzen!
+
+Wollen Sie wirklich ohne Passwort fortfahren?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Ohne Passwort fortfahren</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Kein Schlüssel zum Verschlüsseln hinzugefügt</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Sie müssen mindestens einen Schlüssel hinzufügen, um die Datenbank zu sichern!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Unbekannter Fehler</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Fehler beim Ändern der Datenbank-Anmeldedaten</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1426,10 +1585,6 @@ Das ist nötig, um das Browser-Plugin kompatibel zu halten.</translation>
<translation>Verschlüsselungs-Durchläufe:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>1-Sekunden-Verzögerung messen</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Speicherverbrauch</translation>
</message>
@@ -1450,14 +1605,6 @@ Das ist nötig, um das Browser-Plugin kompatibel zu halten.</translation>
<translation>Ändern</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Höhere Werte sind sicherer, aber das Öffnen der Datenbank dauert länger.</translation>
</message>
@@ -1532,17 +1679,7 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>Thread</numerusform><numerusform> Thread(s)</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform>Thread(s)</numerusform><numerusform>Thread(s)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1576,6 +1713,14 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken
<source>Parallelism</source>
<translation>Parallelität</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1584,16 +1729,16 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken
<translation>Offengelegte Einträge</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Diese Datenbank nicht o&amp;ffenlegen</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Diese Datenbank nicht offenlegen</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Einträge &amp;unter dieser Gruppe offenlegen:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Einträge unter dieser Gruppe offenlegen:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Aktivieren Sie den fd.o Secret Service, um auf diese Einstellungen zuzugreifen.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Aktivieren Sie Secret Service, um auf diese Einstellungen zuzugreifen.</translation>
</message>
</context>
<context>
@@ -1624,11 +1769,11 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken
</message>
<message>
<source>Max. history size:</source>
- <translation>Max. Größe des Verlaufs:</translation>
+ <translation>Max. Verlaufsgröße:</translation>
</message>
<message>
<source> MiB</source>
- <translation>MiB</translation>
+ <translation> MiB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1639,10 +1784,6 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken
<translation>Weitere Datenbank-Einstellungen</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>&amp;Komprimierung aktivieren (empfohlen)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Namensfeld der Datenbank</translation>
</message>
@@ -1676,6 +1817,10 @@ Das kann nicht rückgängig gemacht werden.</translation>
<source> (old)</source>
<translation>(alt)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Komprimierung aktivieren (empfohlen)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1697,7 +1842,7 @@ Das kann nicht rückgängig gemacht werden.</translation>
</message>
<message>
<source>Last Signer</source>
- <translation>Letzter Unterzeichner</translation>
+ <translation>Letzte Unterschrift</translation>
</message>
<message>
<source>Certificates</source>
@@ -1710,45 +1855,6 @@ Das kann nicht rückgängig gemacht werden.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Zusätzlichen Schutz hinzufügen ...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Kein Schlüssel zum Verschlüsseln hinzugefügt</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Sie müssen mindestens einen Schlüssel hinzufügen, um die Datenbank zu sichern!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Kein Passwort festgelegt</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>WARNUNG! Sie haben kein Passwort festgelegt. Es wird streng davon abgeraten, eine Datenbank ohne Passwort zu benutzen!
-
-Wollen Sie wirklich ohne Passwort fortfahren?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Unbekannter Fehler</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Fehler beim Ändern des Master-Passworts</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Ohne Passwort fortfahren</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1768,125 +1874,6 @@ Wollen Sie wirklich ohne Passwort fortfahren?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistiken</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Fahren Sie für weitere Informationen mit der Maus über die Zeilen mit Fehlersymbolen.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Name</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Wert</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Name der Datenbank</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Beschreibung</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Speicherort</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Zuletzt gespeichert</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Ungespeicherte Änderungen</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>ja</translation>
- </message>
- <message>
- <source>no</source>
- <translation>nein</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Die Datenbank wurde geändert, aber die Änderungen wurden noch nicht auf dem Datenträger gespeichert.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Anzahl der Gruppen</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Anzahl der Einträge</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Anzahl der abgelaufenen Einträge</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Die Datenbank enthält abgelaufene Einträge.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Einzigartige Passwörter</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Nicht einzigartige Passwörter</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maximale Wiederverwendung eines Passworts</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Anzahl der kurzen Passwörter</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Empfohlene minimale Passwortlänge beträgt mindestens 8 Zeichen.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Anzahl der schwachen Passwörter</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Die Verwendung langer, zufällig erzeugter Passwörter mit der Bewertung &quot;gut&quot; oder &quot;hervorragend&quot; wird empfohlen.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Durchschnittliche Passwortlänge</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 Zeichen</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Die durchschnittliche Passwortlänge beträgt weniger als zehn Zeichen. Längere Passwörter bieten mehr Sicherheit.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Bitte warten Sie, die Datenbank-Statistiken werden ermittelt ...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1926,7 +1913,7 @@ Wollen Sie wirklich ohne Passwort fortfahren?</translation>
</message>
<message>
<source>Database creation error</source>
- <translation>Fehler beim Erzeugen der Datenbank</translation>
+ <translation>Fehler beim Erstellen der Datenbank</translation>
</message>
<message>
<source>The created database has no key or KDF, refusing to save it.
@@ -1981,16 +1968,20 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.<
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Ihre Datenbank wird in eine unverschlüsselte Datei exportiert. Dadurch werden Ihre Passwörter und anderen Daten anfällig! Wollen Sie wirklich fortfahren?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>OPVault öffnen</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>Suche läuft ...</translation>
+ <translation>Suche …</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Wollen Sie den Eintrag „%1“ wirklich löschen?</translation>
+ <translation>Wollen Sie den Eintrag „%1“ wirklich endgültig löschen?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
@@ -1998,7 +1989,7 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.<
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Wollen Sie wirklich %n Eintrag in den Papierkorb verschieben?</numerusform><numerusform>Wollen Sie wirklich %n Einträge in den Papierkorb verschieben?</numerusform></translation>
+ <translation><numerusform>Möchten Sie wirklich %n Eintrag aus dem Papierkorb löschen?</numerusform><numerusform>Möchten Sie wirklich %n Einträge aus dem Papierkorb löschen?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2014,7 +2005,7 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.<
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Wollen Sie die Gruppe &quot;%1&quot; wirklich löschen?</translation>
+ <translation>Wollen Sie die Gruppe &quot;%1&quot; wirklich endgültig löschen?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2060,15 +2051,15 @@ Möchten Sie Ihre Änderungen zusammenführen?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Möchten Sie wirklich %n Eintrag für immer löschen?</numerusform><numerusform>Möchten Sie wirklich %n Einträge löschen?</numerusform></translation>
+ <translation><numerusform>Sollen tatsächlich %n Einträge gelöscht werden?</numerusform><numerusform>Möchten Sie wirklich %n Einträge löschen?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Eintrag löschen?</numerusform><numerusform>Einträge löschen?</numerusform></translation>
+ <translation><numerusform>Eintrag/Einträge löschen?</numerusform><numerusform>Einträge löschen?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Eintrag in den Papierkorb verschieben?</numerusform><numerusform>Einträge in den Papierkorb verschieben?</numerusform></translation>
+ <translation><numerusform>Eintrag/Einträge in den Papierkorb verschieben?</numerusform><numerusform>Einträge in den Papierkorb verschieben?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2129,7 +2120,7 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>Eintrag &quot;%1&quot; hat %2 Referenz. Möchten Sie die Referenz mit einem Wert überschreiben, diesen Eintrag überspringen oder trotzdem löschen?</numerusform><numerusform>Eintrag &quot;%1&quot; hat %2 Referenz(en). Möchten Sie die Referenzen mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen?</numerusform></translation>
+ <translation><numerusform>Eintrag &quot;%1&quot; hat %2 Referenz(en). Sollen die Referenzen mit den Werten überschrieben, der Eintrag überprungen oder trotzdem gelöscht werden?</numerusform><numerusform>Eintrag &quot;%1&quot; hat %2 Referenz(en). Möchten Sie die Referenzen mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2145,11 +2136,11 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>Datenbanken erfolgreich zusammengeführt</translation>
+ <translation>Datenbanken erfolgreich zusammengeführt.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>Datenbank wurde beim Zusammenführen nicht verändert.</translation>
+ <translation>Datenbank wurde beim Zusammenführen nicht geändert.</translation>
</message>
<message>
<source>Shared group...</source>
@@ -2163,6 +2154,14 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Diese Datenbank ist nur zum Lesen geöffnet. Automatisches Speichern ist deaktiviert.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Datenbank-Backup speichern</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Datenbank-Datei konnte nicht gefunden werden: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2207,14 +2206,6 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Privaten Schlüssel auswählen</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Datei ist zu groß, um ein privater Schlüssel zu sein</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Fehler beim Öffnen des privaten Schlüssels</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Eintragsverlauf</translation>
</message>
@@ -2227,16 +2218,12 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Eintrag bearbeiten</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Passwörter sind verschieden.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Neue Eigenschaft</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Sind Sie sicher, dass Sie diese Eigenschaft entfernen möchten?</translation>
+ <translation>Sind Sie sicher, dass Sie dieses Attribut entfernen möchten?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2251,32 +2238,16 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation><numerusform>%n Monat</numerusform><numerusform>%n Monat(e)</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Erzeugtes Passwort anwenden?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Möchten Sie das das erzeugte Passwort auf den Eintrag anwenden?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Eintrag erfolgreich aktualisiert.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Eintrag enthält nicht gespeicherte Änderungen</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Neue Eigenschaft %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[GESCHÜTZT] „Zeigen“ anklicken zum Anzeigen oder Bearbeiten</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation><numerusform>%n Jahr</numerusform><numerusform>%n Jahr(e)</numerusform></translation>
+ <translation><numerusform>%n Jahre</numerusform><numerusform>%n Jahr(e)</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
@@ -2294,6 +2265,26 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Möchten Sie diese URL wirklich entfernen?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Zeigen</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Verstecken</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Ungespeicherte Änderungen</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Möchten Sie Änderungen an diesem Eintrag speichern?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[GESCHÜTZT] „Zeigen“ anklicken zum Anzeigen oder Bearbeiten</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2369,6 +2360,14 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<source>Background color selection</source>
<translation>Auswahl der Hintergrundfarbe</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wenn aktiv, dann wird dieser Eintrag nicht in Berichten wie dem Gesundheitscheck oder HIBP erscheinen, selbst wenn es die Qualitätsanforderungen nicht erfüllt (z.B. Passwort-Entropie oder Wiederverwendung). Sie können das Häkchen setzen, wenn das Passwort außerhalb Ihrer Kontrolle liegt (z.B. wenn es eine vierstellige PIN sein muss), damit es die Berichte nicht durcheinanderbringt.</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Von Datenbank-Berichten ausschließen</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2377,14 +2376,6 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Auto-Type für diesen Eintrag aktivieren</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Standard-Auto-Type-Sequenz von der &amp;Gruppe erben</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Ben&amp;utzerdefinierte Auto-Type-Sequenz verwenden:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Fenster-Zuordnungen</translation>
</message>
@@ -2440,6 +2431,14 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Benutzerdefinierte Auto-Type-Sequenz für dieses Fenster</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Standard-Auto-Type-Sequenz von der Gruppe erben</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Benutzerdefinierte Auto-Type-Sequenz benutzen:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2475,6 +2474,14 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<source>Edit</source>
<translation>Bearbeiten</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Diese Einstellung nur zum Browser für HTTP-Auth-Dialoge senden. Wenn aktiv, werden normale Login-Formulare diesen Eintrag nicht zur Auswahl anbieten.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Diesen Eintrag nur mit &quot;HTTP Basic Auth&quot; verwenden</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2526,18 +2533,10 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Passwort:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Wiederholen:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titel:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notizen</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Vorgaben</translation>
</message>
@@ -2550,10 +2549,6 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Benutzername:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Läuft ab</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL-Feld</translation>
</message>
@@ -2562,20 +2557,8 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Favicon für URL herunterladen</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Feld zum Wiederholen des Passworts</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Passwortgenerator umschalten</translation>
- </message>
- <message>
<source>Password field</source>
- <translation>Passwortfeld</translation>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation>Passwort-Sichtbarkeit umschalten</translation>
+ <translation>Passwort-Feld</translation>
</message>
<message>
<source>Toggle notes visible</source>
@@ -2609,6 +2592,18 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<source>Toggle expiration</source>
<translation>Ablaufdatum umschalten</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notizen:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Läuft ab:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2638,7 +2633,7 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Schlüssel zum Agenten hinzufügen, wenn Datenbank geöffnet/entsperrt wird</translation>
+ <translation>Key zum Agenten hinzufügen, wenn Datenbank geöffnet/entsperrt wird</translation>
</message>
<message>
<source>Comment</source>
@@ -2654,7 +2649,7 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>In die Zwischenablage kopieren</translation>
+ <translation>In Zwischenablage kopieren</translation>
</message>
<message>
<source>Private key</source>
@@ -2744,10 +2739,6 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formular</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Typ:</translation>
</message>
@@ -2756,10 +2747,6 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
<translation>Pfad:</translation>
</message>
<message>
- <source>...</source>
- <translation>…</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Passwort:</translation>
</message>
@@ -2769,11 +2756,11 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation>KeeShare unbestätigter Container</translation>
+ <translation>KeeShare unsignierter Container</translation>
</message>
<message>
<source>KeeShare signed container</source>
- <translation>KeeShare bestätigter Container</translation>
+ <translation>KeeShare signierter Container</translation>
</message>
<message>
<source>Select import source</source>
@@ -2843,57 +2830,25 @@ Unterstützte Erweiterungen sind: %1.</translation>
<translation>Feld für Pfad der Freigabe-Datei</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Browser für Freigabe-Datei</translation>
- </message>
- <message>
<source>Password field</source>
- <translation>Passwortfeld</translation>
+ <translation>Passwort-Feld</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Passwort-Sichtbarkeit umschalten</translation>
+ <source>Clear fields</source>
+ <translation>Felder leeren</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Passwortgenerator umschalten</translation>
+ <source>Browse for share file</source>
+ <translation>Nach Freigabe-Datei durchsuchen</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Felder leeren</translation>
+ <source>Browse...</source>
+ <translation>Durchsuchen ...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Name</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notizen</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Läuft ab</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Suchen</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Type</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Standard-A&amp;uto-Type-Sequenz der übergeordneten Gruppe verwenden</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Standard-Auto-Type-Se&amp;quenz festlegen</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Namensfeld</translation>
</message>
@@ -2921,20 +2876,40 @@ Unterstützte Erweiterungen sind: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Standard-Auto-Type-Sequenz-Feld</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Standardsymbol verwenden</translation>
+ <source>Expires:</source>
+ <translation>Läuft ab:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Standard-Auto-Type-Sequenz der übergeordneten Gruppe verwenden</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Auto-Type:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Suche:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notizen:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>B&amp;enutzerdefiniertes Symbol verwenden</translation>
+ <source>Name:</source>
+ <translation>Name:</translation>
</message>
<message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Standard-Auto-Type-Sequenz festlegen</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
- <translation>Benutzerdefiniertes Symbol hinzufügen</translation>
+ <translation>Eigenes Symbol hinzufügen</translation>
</message>
<message>
<source>Delete custom icon</source>
@@ -2966,7 +2941,7 @@ Unterstützte Erweiterungen sind: %1.</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Erfolgreich %1 von %n Symbol geladen</numerusform><numerusform>%1 von %n Symbol(en) erfolgreich geladen</numerusform></translation>
+ <translation><numerusform>%1 von %n Symbol(en) erfolgreiche heruntergeladen</numerusform><numerusform>%1 von %n Symbol(en) erfolgreich geladen</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2974,11 +2949,11 @@ Unterstützte Erweiterungen sind: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n Symbol gibt es bereits in der Datenbank</numerusform><numerusform>%n Symbol(e) gibt es in der Datenbank bereits</numerusform></translation>
+ <translation><numerusform>%n Symbol(e) gibt es bereits in der Datenbank</numerusform><numerusform>%n Symbol(e) gibt es bereits in der Datenbank</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>Das folgende Symbol ist fehlgeschlagen:</numerusform><numerusform>Die folgenden Symbole sind fehlgeschlagen:</numerusform></translation>
+ <translation><numerusform>Das Laden der folgenden Symbole ist fehlgeschlagen:</numerusform><numerusform>Das Laden der folgenden Symbole ist fehlgeschlagen:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
@@ -2997,14 +2972,6 @@ Unterstützte Erweiterungen sind: %1.</translation>
<translation>Ausgewähltes Symbol auf Untergruppen und Einträge anwenden</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Symbol anwenden &amp;auf ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Nur hierauf anwenden</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Auch auf Untergruppen anwenden</translation>
</message>
@@ -3020,6 +2987,22 @@ Unterstützte Erweiterungen sind: %1.</translation>
<source>Existing icon selected.</source>
<translation>Bestehendes Symbol ausgewählt.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Standardsymbol verwenden</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Benutzerdefiniertes Symbol verwenden</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Symbol anwenden auf...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Nur auf diese Gruppe anwenden</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3029,7 +3012,7 @@ Unterstützte Erweiterungen sind: %1.</translation>
</message>
<message>
<source>Modified:</source>
- <translation>Geändert:</translation>
+ <translation>Bearbeitet:</translation>
</message>
<message>
<source>Accessed:</source>
@@ -3124,7 +3107,7 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
<message>
<source>Open</source>
- <translation>Öffnen</translation>
+ <translation>Offen</translation>
</message>
<message>
<source>Save</source>
@@ -3136,7 +3119,7 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Sind Sie sicher, dass Sie %n Anhang löschen möchten?</numerusform><numerusform>Sind Sie sicher, dass Sie %n Anhänge löschen möchten?</numerusform></translation>
+ <translation><numerusform>Sind Sie sicher, dass Sie einen Anhang löschen möchten?</numerusform><numerusform>Sind Sie sicher, dass Sie %n Anhänge löschen möchten?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3181,7 +3164,7 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Datei kann nicht geöffnet werden:
+ <translation><numerusform>Öffnen der Datei(en) nicht möglich:
%1</numerusform><numerusform>Datei(en) können nicht geöffnet werden:
%1</numerusform></translation>
</message>
@@ -3205,6 +3188,20 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
<source>Save selected attachment to disk</source>
<translation>Ausgewählten Anhang speichern</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 ist eine große Datei (%2 MB).
+Ihre Datenbank könnte sehr groß werden und die Leistung könnte sich verschlechtern.
+
+Wollen Sie diese Datei wirklich hinzufügen?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Anhang bestätigen</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3281,19 +3278,59 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
<message>
<source>Accessed</source>
- <translation>Zuletzt zugegriffen</translation>
+ <translation>Letzter Zugriff</translation>
</message>
<message>
<source>Attachments</source>
<translation>Anhänge</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ja</translation>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <source>Group name</source>
+ <translation>Gruppenname</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Entry title</source>
+ <translation>Eintragstitel</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Eintragsnotizen</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Eintrag läuft ab</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Erzeugungsdatum</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Datum der letzten Änderung</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Datum des letzten Zugriffs</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Angehängte Dateien</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Eintragsgröße</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Hat Anhänge</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Hat TOTP-Einmal-Passwort</translation>
</message>
</context>
<context>
@@ -3324,7 +3361,7 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
<message>
<source>Attributes</source>
- <translation>Eigenschaften</translation>
+ <translation>Attribute</translation>
</message>
<message>
<source>Attachments</source>
@@ -3352,7 +3389,7 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
<message>
<source>Search</source>
- <translation>Suchen</translation>
+ <translation>Suche</translation>
</message>
<message>
<source>Clear</source>
@@ -3393,6 +3430,13 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Ungültige URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3419,8 +3463,14 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
<translation>Auf Voreinstellung zurücksetzen</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Anhänge (Symbol)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Hat Anhänge</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Hat TOTP</translation>
</message>
</context>
<context>
@@ -3432,21 +3482,74 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Registration des DBus-Service auf %1 fehlgeschlagen: es läuft bereits ein anderer Secret Service.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n Eintrag wurde von %1 verwendet</numerusform><numerusform>%n Einträge wurden von %1 verwendet</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Registrierung des DBus-Service auf %1 fehlgeschlagen.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppe</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Verwalten</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Entsperren, um anzuzeigen</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Keine</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Anwendung</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Verwalten</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Unbekannt</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Unbekannt</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Programmdatei: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Ein anderer Secret Service läuft bereits (%1).&lt;br/&gt;Bitte stoppen/entfernen Sie ihn, bevor Sie die Secret-Service-Integration erneut aktivieren.</translation>
</message>
</context>
<context>
@@ -3458,14 +3561,10 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Kann Datei nicht speichern!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Speichern des Native-Messaging-Skripts nicht möglich.</translation>
+ <source>Online password validation failed</source>
+ <translation>Online-Passwortvalidierung fehlgeschlagen</translation>
</message>
</context>
<context>
@@ -3535,14 +3634,6 @@ Sie können den DuckDuckGo-Dienst im Abschnitt &quot;Sicherheit&quot; der Anwend
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Fehler beim Berechnen des Master-Passworts</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Fehler beim Challenge-Response-Verfahren.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>fehlende Datenbank-Header</translation>
</message>
@@ -3556,7 +3647,7 @@ Sie können den DuckDuckGo-Dienst im Abschnitt &quot;Sicherheit&quot; der Anwend
</message>
<message>
<source>Invalid header field length</source>
- <translation>Ungültige Header-Feldlänge</translation>
+ <translation>Ungültiger Header-Feldlänge</translation>
</message>
<message>
<source>Invalid header data length</source>
@@ -3568,27 +3659,31 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal.
Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Berechnung des Datenbankschlüssels gescheitert</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Fehler beim Challenge-Response-Verfahren: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Fehler beim Challenge-Response-Verfahren.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Fehler beim Challenge-Response-Verfahren: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Fehler beim Berechnen des Master-Passworts</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Berechnung des Datenbankschlüssels gescheitert</translation>
</message>
</context>
<context>
<name>Kdbx4Reader</name>
<message>
<source>missing database headers</source>
- <translation>Fehlende Datenbank-Header</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Fehler beim Berechnen des Master-Passworts</translation>
+ <translation>fehlende Datenbank-Header</translation>
</message>
<message>
<source>Invalid header checksum size</source>
@@ -3608,7 +3703,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
</message>
<message>
<source>Invalid header field length</source>
- <translation>Ungültige Header-Feldlänge</translation>
+ <translation>Ungültiger Header-Feldlänge</translation>
</message>
<message>
<source>Invalid header data length</source>
@@ -3628,7 +3723,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
</message>
<message>
<source>Invalid inner header id size</source>
- <translation>Ungültige Größer der Inner-Header-ID</translation>
+ <translation>Ungültige Größe der Inner-Header-ID</translation>
</message>
<message>
<source>Invalid inner header field length</source>
@@ -3708,12 +3803,16 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
<source>(HMAC mismatch)</source>
<translation>(HMAC stimmt nicht überein)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Berechnung des Datenbankschlüssels gescheitert: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>Ungültiger symmetrischer Verschlüsselungsalgorithmus.</translation>
+ <translation>Ungültiger symmetrischer Verschlüsselungsalgorithmus</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
@@ -3721,14 +3820,14 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
<translation>Ungültige symmetrische Verschlüsselungs-IV-Größe.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Fehler beim Berechnen des Master-Passworts</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>KDF-Parameter aus Variant-Map konnten nicht serialisiert werden</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Berechnung des Datenbankschlüssels gescheitert: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3742,7 +3841,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
</message>
<message>
<source>Unsupported compression algorithm</source>
- <translation>Nicht unterstützter Komprimierungsalgorithmus</translation>
+ <translation>Nicht unterstütztes Komprimierungsverfahren</translation>
</message>
<message>
<source>Invalid master seed size</source>
@@ -3792,7 +3891,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>UUID kann nicht analysiert werden: %1</translation>
+ <translation>UUID konnte nicht gelesen werden: %1</translation>
</message>
<message>
<source>Failed to read database file.</source>
@@ -3815,11 +3914,11 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>Fehlender Plugin-Daten-Schlüssel oder -wert</translation>
+ <translation>Fehlender benutzerdefinierter Datenschlüssel oder -wert</translation>
</message>
<message>
<source>Multiple group elements</source>
- <translation>Mehrere Gruppenelemente</translation>
+ <translation>Mehrere Gruppen-Elemente</translation>
</message>
<message>
<source>Null group uuid</source>
@@ -3871,17 +3970,13 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Doppelte benutzerdefinierte Eigenschaft gefunden</translation>
+ <translation>Doppeltes Benutzerattribut gefunden</translation>
</message>
<message>
<source>Entry string key or value missing</source>
<translation>Eintrags-Schlüssel oder -Wert fehlt</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Doppelter Anhang gefunden</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Eintrags-Binärschlüssel oder -Wert fehlt</translation>
</message>
@@ -3928,6 +4023,29 @@ Zeile %2, Spalte %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Ungültige KeeAgent-Einstellungs-Dateistruktur.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Privater Schlüssel ist ein Anhang, aber es wurde kein Anhang angegeben.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Privater Schlüssel ist leer</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Datei zu groß, um ein privater Schlüssel zu sein</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Fehler beim Öffnen des privaten Schlüssels</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3990,16 +4108,12 @@ Zeile %2, Spalte %3</translation>
<translation>Root</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Berechnung des Master-Passworts gescheitert</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Schlüssel-Transformation fehlgeschlagen</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>Ungültige Gruppen-Typnummer</translation>
+ <translation>Ungültige Gruppen-Typanzahl</translation>
</message>
<message>
<source>Invalid group field size</source>
@@ -4095,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal.
Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Berechnung des Datenbankschlüssels gescheitert</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4186,7 +4304,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
<name>KeyFileEditWidget</name>
<message>
<source>Generate</source>
- <translation>Generieren</translation>
+ <translation>Erzeugen</translation>
</message>
<message>
<source>Key File</source>
@@ -4198,16 +4316,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.</t
</message>
<message>
<source>Legacy key file format</source>
- <translation>Veraltetes Format der Schlüsseldatei</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Sie verwenden ein veraltetes Schlüsseldatei-Format, welches in Zukunft nicht mehr unterstützt wird.
-
-Bitte erzeugen Sie in den Master-Passwort-Einstellungen eine neue Schlüsseldatei.</translation>
+ <translation>Veraltetes Schlüsseldatei-Format</translation>
</message>
<message>
<source>Error loading the key file '%1'
@@ -4229,7 +4338,7 @@ Message: %2</source>
</message>
<message>
<source>Error creating key file</source>
- <translation>Fehler beim Erzeugen der Schlüsseldatei </translation>
+ <translation>Fehler beim Erstellen der Schlüsseldatei </translation>
</message>
<message>
<source>Unable to create key file: %1</source>
@@ -4277,6 +4386,16 @@ Are you sure you want to continue with this file?</source>
<translation>Die gewählte Schlüsseldatei sieht aus wie eine Passwort-Datenbank. Eine Schlüsseldatei darf sich niemals ändern, sonst verlieren Sie für immer den Zugriff auf Ihre Datenbank.
Wollen Sie wirklich mit dieser Datei fortfahren?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Sie verwenden ein veraltetes Schlüsseldatei-Format,
+welches in Zukunft nicht mehr unterstützt werden könnte.
+
+Erzeugen Sie eine neue Schlüsseldatei in den Datenbank-Sicherheits-Einstellungen.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4285,18 +4404,10 @@ Wollen Sie wirklich mit dieser Datei fortfahren?</translation>
<translation>&amp;Datenbank</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Zuletzt verwendete Datenbanken</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Hilfe</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>Ei&amp;nträge</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Gruppen</translation>
</message>
@@ -4313,62 +4424,22 @@ Wollen Sie wirklich mit dieser Datei fortfahren?</translation>
<translation>&amp;Über</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Datenbank öffnen ...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Datenbank &amp;speichern</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Datenbank schließen</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Eintrag &amp;löschen</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Gruppe b&amp;earbeiten</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Gruppe &amp;löschen</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Datenbank speichern unter ...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Datenbank-Einstellungen</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>Eintrag &amp;klonen</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>&amp;Benutzername kopieren</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Benutzername in Zwischenablage kopieren</translation>
</message>
<message>
<source>Copy password to clipboard</source>
- <translation>Passwort in Zwischenablage kopieren</translation>
+ <translation>Passwort in die Zwischenablage kopieren</translation>
</message>
<message>
<source>&amp;Settings</source>
<translation>&amp;Einstellungen</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Datenbanken &amp;sperren</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titel</translation>
</message>
@@ -4393,14 +4464,6 @@ Wollen Sie wirklich mit dieser Datei fortfahren?</translation>
<translation>Notizen in Zwischenablage kopieren</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>Als CSV-Datei &amp;exportieren ...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>TOTP einrichten ...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>&amp;TOTP kopieren</translation>
</message>
@@ -4445,10 +4508,6 @@ Diese Version ist nicht für den Produktiveinsatz gedacht.</translation>
<translation>&amp;Spenden</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Einen &amp;Fehler melden</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>WARNUNG: Ihre Qt-Version kann KeePassXC bei Verwendung der Bildschirmtastatur zum Absturz bringen!
@@ -4459,66 +4518,26 @@ Wir empfehlen die Verwendung des auf unserer Downloadseite verfügbaren AppImage
<translation>Importieren</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Attribut kopieren</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP ...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Neue Datenbank …</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Neue Datenbank erstellen</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>Mit &amp;Datenbank zusammenführen …</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
- <translation>Mit anderer KDBX-Datenbank zusammenführen</translation>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation>&amp;Neuer Eintrag</translation>
+ <translation>Mit einer anderen KDBX-Datenbank zusammenführen</translation>
</message>
<message>
<source>Add a new entry</source>
<translation>Neuen Eintrag hinzufügen</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Eintrag bearbeiten</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Eintrag anzeigen oder bearbeiten</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Neue Gruppe</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Neue Gruppe hinzufügen</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Master-Passwort ändern ...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Datenbank-Einstellungen ...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Passwort kopieren</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Auto-Ausfüllen</translation>
</message>
@@ -4527,30 +4546,14 @@ Wir empfehlen die Verwendung des auf unserer Downloadseite verfügbaren AppImage
<translation>&amp;URL öffnen</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1-Datenbank …</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>KeePass 1-Datenbank importieren</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV-Datei ...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>CSV-Datei importieren</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>TOTP anzeigen ...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>TOTP-QR-Code anzeigen ...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>WARNUNG: Sie verwenden eine Vorabversion von KeePassXC!
@@ -4573,14 +4576,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>&amp;Export</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>Nach Updates &amp;suchen ...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>&amp;Alle Favicons herunterladen</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Sortieren &amp;A-Z</translation>
</message>
@@ -4593,48 +4588,290 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>&amp;Passwortgenerator</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Favicon herunterladen</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>1Password-Tresor importieren</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Erste Schritte</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportieren in HTML-Datei ...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Benutzerhandbuch</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password-Tresor ...</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Tastenkombinationen</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>1Password-Tresor importieren</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Zuletzt verwendete Datenbanken</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Erste Schritte</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Einträge</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Erste Schritte (PDF-Datei) öffnen</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Att&amp;ribut kopieren</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Online-Hilfe ...</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Online-Dokumentation im Browser öffnen</translation>
+ <source>View</source>
+ <translation>Ansicht</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Benutzerhandbuch</translation>
+ <source>Theme</source>
+ <translation>Design</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Benutzerhandbuch (PDF-Datei) öffnen</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>Nach Updates &amp;suchen</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Tastenkombinationen</translation>
+ <source>&amp;Open Database…</source>
+ <translation>Datenbank &amp;öffnen…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>Datenbank &amp;speichern</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>Datenbank &amp;schließen</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Neue Datenbank…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>Mit Datenbank &amp;zusammenführen…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Neuer Eintrag…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>Eintrag &amp;bearbeiten…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>Eintrag &amp;löschen…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Neue Gruppe…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>Gruppe &amp;bearbeiten…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>Gruppe &amp;löschen…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Alle &amp;Favicons herunterladen…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Datenbank s&amp;peichern als…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>Datenbank-&amp;Sicherheit…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>Datenbank-&amp;Berichte…</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistiken, Gesundheitscheck usw.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Datenbank-Einstellungen…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>Eintrag &amp;klonen…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Nach &amp;oben verschieben</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Eintrag einen Schritt nach oben verschieben</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Nach &amp;unten verschieben</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Eintrag einen Schritt nach unten verschieben</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>&amp;Benutzername kopieren</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Passwort kopieren</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>&amp;Favicon herunterladen</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>Datenbanken &amp;sperren</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV-Datei…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML-Datei…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1-Datenbank…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password-Tresor…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV-Datei…</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>TOTP anzeigen</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>QR-Code anzeigen</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>TOTP einrichten…</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Einen &amp;Fehler melden</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>Erste Schritte öffnen</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Online-Hilfe</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Online-Dokumentation aufrufen</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Benutzerhandbuch öffnen</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Datenbank-Backup speichern...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Schlüssel zum SSH-Agent hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Schlüssel vom SSH-Agent entfernen</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Kompakter Modus</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Hell</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Dunkel</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klassisch (Plattform-nativ)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Symbolleiste anzeigen</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Vorschau-Panel anzeigen</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Für diese Version nicht erneut anzeigen</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Anwendung neustarten?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Sie müssen die Anwendung neustarten, um diese Einstellung anzuwenden. Möchten Sie jetzt neustarten?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Datenbank-Einstellungen</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Datenbank-Einstellungen bearbeiten</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Datenbank entsperren</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Datenbank entsperren, um mehr Informationen anzuzeigen</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Datenbank sperren</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Trennen</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Diese Anwendung trennen</translation>
</message>
</context>
<context>
@@ -4723,10 +4960,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>Assistent</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Verschlüsselungseinstellungen</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern.</translation>
</message>
@@ -4738,27 +4971,31 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<source>Simple Settings</source>
<translation>Grundeinstellungen</translation>
</message>
+ <message>
+ <source>Encryption Settings</source>
+ <translation>Verschlüsselungs-Einstellungen</translation>
+ </message>
</context>
<context>
- <name>NewDatabaseWizardPageEncryption</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Encryption Settings</source>
- <translation>Verschlüsselungseinstellungen</translation>
+ <source>Database Credentials</source>
+ <translation>Datenbank-Anmeldedaten</translation>
</message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Ein Satz von nur Ihnen bekannten Anmeldedaten, der Ihre Datenbank schützt.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Datenbank-Master-Passwort</translation>
+ <source>Encryption Settings</source>
+ <translation>Verschlüsselungs-Einstellungen</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Ein nur Ihnen bekanntes Master-Passwort schützt Ihre Datenbank.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern.</translation>
</message>
</context>
<context>
@@ -4773,6 +5010,13 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Passwortmanager</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4847,7 +5091,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>PEM boundary mismatch</source>
- <translation>Falsche PEM-Boundary</translation>
+ <translation>Falsche PEM-Boundarys</translation>
</message>
<message>
<source>Base64 decoding failed</source>
@@ -4867,7 +5111,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Failed to read public key.</source>
- <translation>Öffentlicher Schlüssel konnte nicht gelesen werden.</translation>
+ <translation>Öffentlicher Schlüssel kann nicht gelesen werden.</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
@@ -4887,11 +5131,11 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>Schlüssel-Ableitung fehlgeschlagen, ist die Schlüsseldatei defekt?</translation>
+ <translation>Schlüssel-Ableitung fehlgeschlagen, Schlüsseldatei beschädigt?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Entschlüsselung fehlgeschlagen, ist die Passphrase falsch?</translation>
+ <translation>Entschlüsselung fehlgeschlagen, falsche Passphrase?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
@@ -4911,7 +5155,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>Privater Schlüssel kann nicht geschrieben werden, da er leer ist</translation>
+ <translation>Privatschlüssel konnte nicht geschrieben werden, da er leer ist</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
@@ -4919,7 +5163,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation>Nicht unterstützter Schlüsseltyp: %1</translation>
+ <translation>Nicht unterstützter Schlüssel-Typ: %1</translation>
</message>
<message>
<source>Unknown cipher: %1</source>
@@ -4948,6 +5192,18 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<source>Passwords match so far</source>
<translation>Passwörter stimmen überein</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Passwort umschalten (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Passwort erzeugen (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Warnung: Feststelltaste aktiviert!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4972,24 +5228,12 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>Die Passwörter stimmen nicht überein.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Master-Passwort erzeugen</translation>
- </message>
- <message>
<source>Password field</source>
- <translation>Passwortfeld</translation>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation>Passwort-Sichtbarkeit umschalten</translation>
+ <translation>Passwort-Feld</translation>
</message>
<message>
<source>Repeat password field</source>
- <translation>Wiederhole Passwortfeld</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Passwortgenerator umschalten</translation>
+ <translation>Feld zum Wiederholen des Passworts</translation>
</message>
</context>
<context>
@@ -4999,10 +5243,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Passwort:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>Stärke</translation>
@@ -5029,7 +5269,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Exclude look-alike characters</source>
- <translation>Gleich aussehende Zeichen ausschließen</translation>
+ <translation>Gleichaussehende Zeichen ausschließen</translation>
</message>
<message>
<source>Pick characters from every group</source>
@@ -5045,21 +5285,13 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Wordlist:</source>
- <translation>Wortliste:</translation>
+ <translation>Wortliste</translation>
</message>
<message>
<source>Word Separator:</source>
<translation>Worttrenner:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopieren</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Übernehmen</translation>
- </message>
- <message>
<source>Close</source>
<translation>Schließen</translation>
</message>
@@ -5156,14 +5388,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Zum einfachen Modus wechseln</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Einfach</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Zeichen, die nicht im Passwort enthalten sein sollen</translation>
</message>
@@ -5184,16 +5408,8 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>Ausgeschlossene Zeichen: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Wortanzahl:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Neu erzeugen</translation>
- </message>
- <message>
<source>Generated password</source>
- <translation>Generiertes Passwort</translation>
+ <translation>Erzeugtes Passwort</translation>
</message>
<message>
<source>Upper-case letters</source>
@@ -5240,10 +5456,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>Passwort kopieren</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Passwort übernehmen</translation>
- </message>
- <message>
<source>lower case</source>
<translation>Kleinbuchstaben</translation>
</message>
@@ -5256,8 +5468,44 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>Anfangsbuchstaben groß</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Passwort-Sichtbarkeit umschalten</translation>
+ <source>Generate Password</source>
+ <translation>Passwort erzeugen</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Auch wählen aus:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Zusätzliche Zeichen für die Passwort-Erzeugung</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Zusätzliche Zeichen</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Wort-Anzahl</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Passwort anwenden</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Strg+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Passwort neu erzeugen (%1)</translation>
</message>
</context>
<context>
@@ -5270,6 +5518,58 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<source>Statistics</source>
<translation>Statistiken</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Sehr schwaches Passwort</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Passwort-Entropie ist %1 Bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Schwaches Passwort</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Verwendet in %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Passwort wird %1 Mal verwendet</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Passwort ist abgelaufen</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Passwort-Ablauf war %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Passwort läuft bald ab</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Passwort läuft in %1 Tagen ab</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Passwort wird bald ablaufen</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Passwort läuft am %1 ab</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Gesundheitscheck</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5326,7 +5626,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Cannot decrypt message</source>
- <translation>Nachricht kann nicht entschlüsselt werden</translation>
+ <translation>Nachricht konnte nicht entschlüsselt werden</translation>
</message>
<message>
<source>Action cancelled or denied</source>
@@ -5362,7 +5662,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Add a new entry to a database.</source>
- <translation>Neuen Eintrag zur Datenbank hinzufügen</translation>
+ <translation>Neuen Eintrag zur Datenbank hinzufügen.</translation>
</message>
<message>
<source>Path of the database.</source>
@@ -5398,7 +5698,7 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
</message>
<message>
<source>Generate a password for the entry.</source>
- <translation>Passwort für den Eintrag erzeugen.</translation>
+ <translation>Passwort für den Eintrag generieren.</translation>
</message>
<message>
<source>length</source>
@@ -5409,10 +5709,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<translation>Pfad des hinzuzufügenden Eintrags.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Passwort eines Eintrags in die Zwischenablage kopieren.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Pfad des in die Zwischenablage zu kopierenden Eintrags</translation>
@@ -5454,9 +5750,9 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>WARNUNG: Sie verwenden ein veraltetes Schlüsseldatei-Format, welches in Zukunft evtl. nicht mehr unterstützt wird.
+ <translation>WARNUNG: Sie verwenden ein veraltetes Schlüsseldatei-Format, welches in Zukunft möglicherweise nicht mehr unterstützt wird.
-Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.</translation>
+Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu erzeugen.</translation>
</message>
<message>
<source>
@@ -5490,7 +5786,7 @@ Verfügbare Kommandos:
</message>
<message>
<source>Merge two databases.</source>
- <translation>Zwei Datenbanken zusammenführen.</translation>
+ <translation>Zwei Datenbanken zusammenführen</translation>
</message>
<message>
<source>Path of the database to merge from.</source>
@@ -5510,7 +5806,7 @@ Verfügbare Kommandos:
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>Namen der anzuzeigenden Eigenschaften. Diese Option kann mehr als einmal angegeben werden, wobei jede Eigenschaft in einer eigenen Zeile in der gegebenen Reihenfolge angegeben wird. Wenn keine Eigenschaften angegeben sind, wird eine Zusammenfassung der Standardeigenschaften gegeben.</translation>
+ <translation>Namen der anzuzeigenden Attribute. Diese Option kann mehr als einmal angegeben werden, wobei jedes Attribut in einer eigenen Zeile in der gegebenen Reihenfolge angegeben wird. Wenn keine Attribute angegeben sind, wird eine Zusammenfassung der Standardattribute gegeben.</translation>
</message>
<message>
<source>attribute</source>
@@ -5526,7 +5822,7 @@ Verfügbare Kommandos:
</message>
<message>
<source>error reading from device</source>
- <translation>Fehler beim Lesen des Geräts</translation>
+ <translation>Fehler beim Lesen vom Gerät</translation>
</message>
<message>
<source>malformed string</source>
@@ -5569,14 +5865,6 @@ Verfügbare Kommandos:
<translation>Browser-Integration</translation>
</message>
<message>
- <source>Press</source>
- <translation>Aktiver Button</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiv</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-Agent</translation>
</message>
@@ -5615,12 +5903,8 @@ Verfügbare Kommandos:
<translation>Eintrag %1 erfolgreich hinzugefügt.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Aktuelles TOTP in die Zwischenablage kopieren.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
- <translation>Ungültiger Timeout-Wert %1.</translation>
+ <translation>Ungültiger Timeout-Wert %1</translation>
</message>
<message>
<source>Entry %1 not found.</source>
@@ -5630,17 +5914,9 @@ Verfügbare Kommandos:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Zu Eintrag %1 wurde kein TOTP eingerichtet.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP wurde in die Zwischenablage kopiert.</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Passwort wurde in die Zwischenablage kopiert.</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Löschen der Zwischenablage in %1 Sekunde...</numerusform><numerusform>Zwischenablage wird in %1 Sekunde(n) gelöscht ...</numerusform></translation>
+ <translation><numerusform>Zwischenablage wird in %1 Sekunde(n) geleert…</numerusform><numerusform>Zwischenablage wird in %1 Sekunde(n) gelöscht ...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5817,7 +6093,7 @@ Verfügbare Kommandos:
</message>
<message>
<source>Recursively list the elements of the group.</source>
- <translation>Alle Elemente der Gruppe rekursiv auflisten.</translation>
+ <translation>Rekursiv alle Elemente der Gruppe auflisten</translation>
</message>
<message>
<source>Cannot find group %1.</source>
@@ -5858,10 +6134,6 @@ Verfügbare Kommandos:
<translation>Kein Programm zur Manipulation der Zwischenablage angegeben.</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Programm %1 kann nicht gestartet werden</translation>
- </message>
- <message>
<source>file empty</source>
<translation>Datei leer</translation>
</message>
@@ -5870,18 +6142,6 @@ Verfügbare Kommandos:
<translation>%1: (Zeile, Spalte) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – empfohlen)</translation>
</message>
@@ -5905,11 +6165,11 @@ Verfügbare Kommandos:
</message>
<message>
<source>Message encryption failed.</source>
- <translation>Nachrichtenverschlüsselung fehlgeschlagen.</translation>
+ <translation>Nachrichtenverschlüsselung fehlgeschlagen</translation>
</message>
<message>
<source>No groups found</source>
- <translation>Keine Gruppen gefunden</translation>
+ <translation>Keine Gruppe gefunden</translation>
</message>
<message>
<source>Create a new database.</source>
@@ -5933,7 +6193,7 @@ Verfügbare Kommandos:
</message>
<message>
<source>Successfully created new database.</source>
- <translation>Datenbank erfolgreiche erstellt.</translation>
+ <translation>Datenbank erfolgreich erstellt.</translation>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
@@ -6132,10 +6392,6 @@ Kernel: %3 %4</translation>
<translation>Diese Hilfe anzeigen.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Yubikey-Slot. der für die Verschlüsselung der Datenbank verwendet wird.</translation>
- </message>
- <message>
<source>slot</source>
<translation>Slot</translation>
</message>
@@ -6152,10 +6408,6 @@ Kernel: %3 %4</translation>
<translation>Verlasse interaktiven Modus.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Zu benutzendes Format für den Export. Mögliche Optionen sind xml oder csv. Standard ist xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exportiert den Inhalt einer Datenbank im angegebenen Format auf die Standardausgabe.</translation>
</message>
@@ -6196,10 +6448,6 @@ Kernel: %3 %4</translation>
<translation>Pfad zur neuen Datenbank.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Fehler beim Importieren des XML-Datenbank-Exports %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Datenbank erfolgreich importiert.</translation>
</message>
@@ -6225,7 +6473,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>Datenbank wurde beim Zusammenführen nicht geändert.</translation>
+ <translation>Datenbank wurde beim Zusammenführen nicht verändert.</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6292,10 +6540,6 @@ Kernel: %3 %4</translation>
<translation>Ungültiger YubiKey-Slot %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Bitte drücken Sie die Taste auf Ihrem YubiKey, um %1 zu entsperren</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Passwort eingeben, um Datenbank zu verschlüsseln (optional):</translation>
</message>
@@ -6311,10 +6555,6 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation>Benutzername</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Challenge-Response - Slot %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation><numerusform>Passwort für &apos;%1&apos; wurde %2 Mal in Datenlecks gefunden!</numerusform><numerusform>Passwort für &apos;%1&apos; wurde %2 Mal in Datenlecks gefunden!</numerusform></translation>
@@ -6327,6 +6567,194 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Geschützte Eigenschaften im Klartext anzeigen.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Browser-Plugin-Fehler</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Speichern des Native-Messaging-Skripts für %1 fehlgeschlagen.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Angegebene Eigenschaft in die Zwischenablage kopieren. Standardmäßig &quot;password&quot;, wenn nicht spezifiziert.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Aktuelles TOTP in die Zwischenablage kopieren (äquivalent zu &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Eigenschaft eines Eintrags in die Zwischenablage kopieren.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>FEHLER: Geben Sie entweder --attribute oder --totp an, nicht beides.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>FEHLER: Eigenschaft %1 ist uneindeutig, es passt zu %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Eigenschaft &quot;%1&quot; nicht gefunden.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Eigenschaft &quot;%1&quot; des Eintrags wurde in die Zwischenablage kopiert!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Yubikey-Slot und optional Seriennummer zum Zugriff auf die Datenbank (z.B. 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>Slot[:Seriennummer]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Ziel-Entschlüsselungszeit in ms für die Datenbank.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>Zeit</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Schlüsseldatei für die Datenbank festlegen.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Passwort für die Datenbank festlegen.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Ungültige Entschlüsselungszeit %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Ziel-Entschlüsselungszeit muss zwischen %1 und %2 sein.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Festlegen des Datenbank-Passworts fehlgeschlagen.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Messe Schlüssel-Ableitungsfunktion für %1ms Verzögerung.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Stelle %1 Runden für Schlüssel-Ableitungsfunktion ein.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>Fehler beim Setzen der Datenbank-Schlüsselableitungs-Einstellungen.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Zu benutzendes Format für den Export. Verfügbare Optionen sind &apos;xml&apos; oder &apos;csv&apos;. Standard ist &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Fehler beim Importieren der XML-Datenbank: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Datenbankinformationen anzeigen.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID:</translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Name: </translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Beschreibung:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Verschlüsselungsalgorithmus:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Papierkorb ist aktiviert.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Papierkorb ist nicht aktiviert.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Ungültiger Befehl %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Ungültige YubiKey-Seriennummer %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Bitte drücken Sie die Taste an Ihrem YubiKey, um fortzufahren…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Wollen Sie eine Datenbank mit einem leeren Passwort erstellen? [y/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Passwort wiederholen:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Fehler: Passwörter stimmen nicht überein.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Alle Clipping-Programme fehlgeschlagen. %1 versucht
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 Runden)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 Runden, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Verzögerung von %1 messen</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6363,6 +6791,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Auch Einträge zeigen, die von Berichten ausgeschlossen wurden</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Für weitere Informationen mit der Maus über den Grund fahren. Doppelklick auf Einträge zum Bearbeiten.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Sehr schlecht</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Sehr schlecht —Passwort muss geändert werden</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Schlecht</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Schlecht — Passwort sollte geändert werden</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Schwach</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Schwach — Passwortänderung sollte erwägt werden</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(ausgeschlossen)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Dieser Eintrag wird von Berichten ausgeschlossen</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Bitte warten, Gesundheitsdaten werden berechnet...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Glückwunsch, alles ist gesund!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Pfad</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Bewertung</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Grund</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Eintrag bearbeiten...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Von Berichten ausschließen</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>ACHTUNG: Dieser Bericht erfordert, dass Informationen an den &quot;Have I Been Pwned&quot;-Onlinedienst (https://haveibeenpwned.com) gesendet werden. Wenn Sie fortfahren, werden Ihre Datenbank-Passwörter kryptografisch gehasht, und die ersten fünf Zeichen dieser Hashes werden sicher an diesen Dienst übertragen. Ihre Datenbank bleibt sicher und kann nicht aus diesen Informationen rekonstruiert werden. Jedoch werden die Anzahl der gesendeten Passwörter und Ihre IP-Adresse dem Dienst offengelegt.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Online-Analyse durchführen</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Auch Einträge zeigen, die von Berichten ausgeschlossen wurden</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Dieser Build von KeePassXC hat keine Netzwerkfunktionalität. Diese ist erforderlich, um Ihre Passwörter gegen die Datenbanken von Have I Been Pwned zu überprüfen.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Glückwunsch, keine offengelegten Passwörter!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Pfad</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Passwort offengelegt…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(ausgeschlossen)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Dieser Eintrag wird von Berichten ausgeschlossen</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>einmal</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>bis zu 10 Mal</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>bis zu 100 Mal</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>bis zu 1000 Mal</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>bis zu 10.000 Mal</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>bis zu 100.000 Mal</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>bis zu einer Million Mal</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>Millionen Mal</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Eintrag bearbeiten...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Von Berichten ausschließen</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Fahren Sie für weitere Informationen mit der Maus über die Zeilen mit Fehlersymbolen.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Name</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Wert</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Bitte warten Sie, die Datenbank-Statistiken werden ermittelt ...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Name der Datenbank</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Beschreibung</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Speicherort</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Zuletzt gespeichert</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Ungespeicherte Änderungen</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>ja</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>nein</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Die Datenbank wurde geändert, aber die Änderungen wurden noch nicht auf dem Datenträger gespeichert.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Anzahl der Gruppen</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Anzahl der Einträge</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Anzahl der abgelaufenen Einträge</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Die Datenbank enthält abgelaufene Einträge.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Einzigartige Passwörter</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Nicht einzigartige Passwörter</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maximale Wiederverwendung eines Passworts</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Anzahl der kurzen Passwörter</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Empfohlene minimale Passwortlänge beträgt mindestens 8 Zeichen.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Anzahl der schwachen Passwörter</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Die Verwendung langer, zufällig erzeugter Passwörter mit der Bewertung &quot;gut&quot; oder &quot;hervorragend&quot; wird empfohlen.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Von Berichten ausgeschlossene Einträge</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Das Ausschließen von Einträgen aus Berichten, z.B. weil sie bekannterweise schlechte Passwörter haben, ist nicht unbedingt ein Problem, aber Sie sollten ein Auge auf sie haben.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Durchschnittliche Passwortlänge</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 Zeichen</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Die durchschnittliche Passwortlänge beträgt weniger als zehn Zeichen. Längere Passwörter bieten mehr Sicherheit.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6396,6 +7108,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Eine Bestätigungsanfrage wird durch den Agenten nicht unterstützt (Optionen prüfen).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Konflikt beim Schlüssel-Identitäts-Besitz. Füge nicht hinzu.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Kein Agent ausgeführt, kann keine Identitäten auflisten.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6503,26 +7223,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wenn der Papierkorb für diese Datenbank aktiviert ist, werden Einträge direkt in den Papierkorb verschoben. Ansonsten werden sie ohne Nachfragen gelöscht.&lt;/p&gt;&lt;p&gt;Sie erhalten eine Meldung, wenn irgendwelche Einträge von anderen referenziert werden.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Nicht bestätigen, wenn Einträge von Clients gelöscht werden.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Offengelegte Datenbankgruppen:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Gruppe</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Verwalten</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Authorisierung</translation>
</message>
@@ -6531,40 +7235,20 @@ Kernel: %3 %4</translation>
<translation>Diese Anwendungen sind derzeit verbunden:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Anwendung</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Nicht bestätigen, wenn Einträge von Clients gelöscht werden</translation>
</message>
<message>
- <source>Disconnect</source>
- <translation>Trennen</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Fehler:&lt;/b&gt; Konnte nicht mit DBus verbinden. Bitte überprüfen Sie Ihr DBus-Setup.</translation>
</message>
<message>
- <source>Database settings</source>
- <translation>Datenbank-Einstellungen</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Warnung:&lt;/b&gt; </translation>
</message>
<message>
- <source>Edit database settings</source>
- <translation>Datenbank-Einstellungen bearbeiten</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Datenbank entsperren</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Datenbank entsperren, um mehr Informationen anzuzeigen</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>Datenbank sperren</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>Entsperren, um anzuzeigen</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Keine</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Speichern Sie die aktuellen Änderungen, um das Plugin und das Anpassen dieses Abschnitts zu aktivieren.</translation>
</message>
</context>
<context>
@@ -6595,7 +7279,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Signer</source>
- <translation>Unterzeichner</translation>
+ <translation>Unterzeichner:</translation>
</message>
<message>
<source>Key:</source>
@@ -6603,7 +7287,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Generate</source>
- <translation>Generieren</translation>
+ <translation>Erzeugen</translation>
</message>
<message>
<source>Import</source>
@@ -6779,7 +7463,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Unexpected export error occurred</source>
- <translation>Unerwarteter Fehler ist aufgetreten</translation>
+ <translation>Unerwarteter Fehler beim Export</translation>
</message>
</context>
<context>
@@ -6834,11 +7518,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Successful signed import</source>
- <translation>Erfolgreicher unterzeichneter Import</translation>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation>Unerwarteter Fehler</translation>
+ <translation>Erfolgreich signierter Import</translation>
</message>
<message>
<source>Unsigned share container are not supported - import prevented</source>
@@ -6908,7 +7588,7 @@ Kernel: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Verfällt in &lt;b&gt;%n&lt;/b&gt; Sekunde</numerusform><numerusform>Läuft in &lt;b&gt;%n&lt;/b&gt; Sekunde(n) ab</numerusform></translation>
+ <translation><numerusform>Läuft in &lt;b&gt;%n&lt;/b&gt; Sekunde(n) ab</numerusform><numerusform>Läuft in &lt;b&gt;%n&lt;/b&gt; Sekunde(n) ab</numerusform></translation>
</message>
</context>
<context>
@@ -7009,6 +7689,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Ungültige URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7099,6 +7786,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Konfigurierter Slot - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Challenge-Response - Slot %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Aktiver Button</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiv</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Ungültiger Slot spezifiziert - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>Das YubiKey-Interface wurde nicht initialisiert.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Der Hardwareschlüssel wird gerade verwendet.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Hardwareschlüssel mit Seriennummer %1 konnte nicht gefunden werden. Bitte schließen Sie ihn an, um fortzufahren.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Der Hardwareschlüssel hatte eine Zeitüberschreitung beim Warten auf Nutzerinteraktion.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Beim Zugriff auf den Hardwareschlüssel ist ein USB-Fehler aufgetreten: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Abschluss von Challenge-Response ist fehlgeschlagen, der spezifische Fehler war: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7113,20 +7847,28 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Ein &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt; kann für zusätzliche Sicherheit sorgen.&lt;/p&gt;&lt;p&gt;Der YubiKey muss in einem Slot das Verfahren &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Reponse&lt;/a&gt; gesetzt haben.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Kein YubiKey erkannt. Ist er eingesteckt?</translation>
+ <source>Refresh hardware tokens</source>
+ <translation>Hardware-Token aktualisieren</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Kein YubiKey angeschlossen.</translation>
+ <source>Hardware key slot selection</source>
+ <translation>Auswahl des Hardwareschlüssel-Slots</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>Aktualisieren von Hardwaretoken</translation>
+ <source>Could not find any hardware keys!</source>
+ <translation>Konnte keine Hardwareschlüssel finden!</translation>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>Hardwareschlüssel-Slot-Auswahl</translation>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Ausgewählter Hardwareschlüssel-Slot unterstützt nicht Challenge-Response!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Hardwareschlüssel werden erkannt…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Keine Hardwareschlüssel erkannt</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_el.ts b/share/translations/keepassx_el.ts
deleted file mode 100644
index 5c1e9d8ff..000000000
--- a/share/translations/keepassx_el.ts
+++ /dev/null
@@ -1,5428 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="el" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation>Σχετικά με το KeepPassXC</translation>
- </message>
- <message>
- <source>About</source>
- <translation>Σχετικά</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Αναφέρετε σφάλματα στο: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>Το KeePassXC διανέμεται υπό τους όρους του GNU General Public License (GPL) έκδοση 2 ή (κατά την επιλογή σας) έκδοση 3.</translation>
- </message>
- <message>
- <source>Contributors</source>
- <translation>Συνεισφέροντες</translation>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Δείτε τους Συνεισφέροντες στο GitHub&lt;/a&gt;</translation>
- </message>
- <message>
- <source>Debug Info</source>
- <translation>Πληροφορίες Αποσφαλμάτωσης</translation>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation>Συμπεριλάβετε τις ακόλουθες πληροφορίες όποτε αναφέρετε κάποιο σφάλμα:</translation>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Αντιγραφή στο πρόχειρο</translation>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation>Αναθεώρηση: %1</translation>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation>Διανομή: %1</translation>
- </message>
- <message>
- <source>Libraries:</source>
- <translation>Βιβλιοθήκες:</translation>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation>Λειτουργικό Σύστημα: %1
-Αρχιτεκτονική Επεξεργαστή: %2
-Πυρήνας: %3 %4</translation>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation>Ενεργοποιημένες επεκτάσεις:</translation>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation>Υποστήριξη έργου:</translation>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>Η Ομάδα του KeePassXC ευχαριστεί ιδιαίτερα τον ή την debfx που δημιούργησε το πρώτο KeePassx.</translation>
- </message>
- <message>
- <source>Version %1</source>
- <translation>Έκδοση %1</translation>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation>Τύπος build: %1</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Αυτόματη-Γραφή</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Ενσωμάτωση Περιηγητή</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>πράκτορας SSH</translation>
- </message>
- <message>
- <source>YubiKey</source>
- <translation>YubiKey</translation>
- </message>
- <message>
- <source>TouchID</source>
- <translation>TouchID</translation>
- </message>
- <message>
- <source>None</source>
- <translation>None</translation>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Ενεργοποίηση πράκτορα SSH (απαιτεί επανεκκίνηση)</translation>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation>Ρυθμίσεις Εφαρμογής</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Γενικά</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Ασφάλεια</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation>Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1</translation>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation>Βασικές Ρυθμίσεις</translation>
- </message>
- <message>
- <source>Startup</source>
- <translation>Startup</translation>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation>Εκκίνηση μόνον μιας περίπτωσης KeePassXC</translation>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation>Θυμηθείτε την τελευταία βάσεις δεδομένων</translation>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation>Να θυμάσαι το τελευταίο αρχείο κλειδιού και φορητές συσκευές ασφαλείας</translation>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation>Φόρτωμα προηγούμενων βάσεων δεδομένων κατά την εκκίνηση</translation>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation>Ελαχιστοποίηση παραθύρου κατά την εκκίνηση</translation>
- </message>
- <message>
- <source>File Management</source>
- <translation>Διαχείριση αρχείων</translation>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Ασφαλής αποθήκευση αρχείων βάσης δεδομένων (λειτουργία ίσως ασύμβατη με Dropbox, κλπ)</translation>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation>Δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων πριν αποθηκεύσετε</translation>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation>Αυτόματη Αποθήκευση μετά απο κάθε αλλαγή</translation>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation>Αυτόματη αποθήκευση κατα την έξοδο</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Η βάση δεδομένων να μην σημαίνεται ως τροποποιημένη για αλλαγές που δεν αφορούν δεδομένα (π.χ. επέκταση ομάδων)</translation>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation>Αυτόματη επαναφόρτωση βάσης σε περίπτωση εξωτερικής τροποποίησης</translation>
- </message>
- <message>
- <source>Entry Management</source>
- <translation>Διαχείριση καταχώρισης</translation>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation>Χρησιμοποίηση εικονιδίου ομάδας κατα την δημιουργία καταχώρησης</translation>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation>Ελαχιστοποίηση οταν αντιγράφετε στο πρόχειρο</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>Απόκρυψη του πλαισίου προεπισκόπισης καταχωρήσεων</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Γενικά</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Απόκρυψη εργαλειοθήκης (εικονιδίων)</translation>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation>Ελλαχιστοποίηση αντί για έξοδος από την εφαρμογή</translation>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation>Δείχνουν ένα εικονίδιο του δίσκου συστήματος</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation>Σκοτεινό εικονίδιο περιοχής συστήματος</translation>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation>Απόκρυψη του παραθύρου στην περιοχή συστήματος όταν γίνεται ελλαχιστοποίηση</translation>
- </message>
- <message>
- <source>Language</source>
- <translation>Γλώσσα</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Αυτόματη-Γραφή</translation>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation>Να γίνεται χρήση του τίτλου για το ταίριασμα των παραθύρων της λειτουργίας Auto-Type</translation>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation>Να γίνεται χρήση του URL του τίτλου για το ταίριασμα των παραθύρων λειτουργίας Auto-Type</translation>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation>Πάντα ερώτηση για την εκτέλεση του Auto-Type</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Συντόμευση για την λειτουργία Auto-Type</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Καθυστέρηση πληκτρολόγησης στο Auto-Type</translation>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation> ms</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation>Καθυστέρηση έναρξης του Auto-Type</translation>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation>Χρονικά όρια λήξης</translation>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation>Εκκαθάριση πρόχειρου μετά από</translation>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>δευτερόλεπτα</translation>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation>Κλείδωμα βάσης δεδομένων μετα απο ανενεργεία </translation>
- </message>
- <message>
- <source> min</source>
- <translation> min</translation>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation>Απενεργοποίηση του TouchID μετά από αδράνεια</translation>
- </message>
- <message>
- <source>Convenience</source>
- <translation>Ευκολία</translation>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation>Κλείδωμα βάσεων δεδομένων κατά το κλείδωμα της συνεδρίας ή την αναδίπλωση της οθόνης</translation>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Απενεργοποίηση του TouchID όταν η συνεδρία κλειδώνει ή το κάλυμα κλείνει</translation>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation>Κλείδωμα της βάσης δεδομένων μετά την ελαχιστοποίηση του παραθύρου</translation>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Να κλειδώνει εκ νέου η προηγούμενα κλειδωμένη βάση δεδομένων μετά την χρήση του Auto-Type</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Να μην απαιτείται επανάληψη του κωδικού όταν αυτός είναι ορατός</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Να μην αποκρύβονται οι κωδικοί όταν γίνεται επεξεργασία τους</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Να μην γίνεται χρήση συμβόλου υποκατάστασης για τα κενά πεδία κωδικών</translation>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation>Απόκρυψη των κωδικών στο πλαίσιο προεπισκόπισης καταχωρήσεων</translation>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation>Να αποκρύπτονται εξ ορισμού οι σημειώσεις καταχωρήσεων</translation>
- </message>
- <message>
- <source>Privacy</source>
- <translation>Ιδιωτικότητα</translation>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation>Να γίνεται χρήση του DuckDuckGo ως εναλλακτικής πηγής για λήψη εικονιδίων ιστοσελίδων</translation>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Αποτυχία να βρεθεί μια καταχώρηση που να ταιριάζει με τον τίτλο του παραθύρου:</translation>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>Auto-Type - KeePassXC</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Αυτόματη-Γραφή</translation>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>Η Σύνταξη της εντολής Auto-Type είναι εσφαλμένη!</translation>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>Αυτή η εντολή Auto-Type περιέχει μια πολύ μεγάλη καθυστέρηση. Θέλετε να προχωρήσετε;</translation>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Αυτή η εντολή Auto-Type περιέχει πολύ αργή πληκτρολόγηση. Θέλετε να προχωρήσετε;</translation>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Αυτή η εντολή Auto-Type περιέχει λειτουργίες που επαναλαμβάνονται πολύ συχνά. Θέλετε να προχωρήσετε;</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Παράθυρο</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Ακολουθία</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>Προεπιλεγμένη ακολουθία</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Όμαδα</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Τίτλος</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Όνομα χρήστη</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Ακολουθία</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>Auto-Type - KeePassXC</translation>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation>Επιλέξτε καταχώρηση για αυτόματη γραφή:</translation>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Kee-PassXC-Browser Επιβεβαίωση πρόσβασης</translation>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation>Να θυμάσαι αυτή την απόφαση</translation>
- </message>
- <message>
- <source>Allow</source>
- <translation>Αποδοχή</translation>
- </message>
- <message>
- <source>Deny</source>
- <translation>Άρνηση</translation>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 έχει ζητήσει πρόσβαση σε κωδικούς για το/τα ακόλουθο/α αντικείμενο/α.
-Παρακαλώ επιλέξετε εάν θέλετε να επιτρέψετε τη πρόσβαση.</translation>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-Browser Αποθήκευση καταχώρησης</translation>
- </message>
- <message>
- <source>Ok</source>
- <translation>ΟΚ</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Άκυρο</translation>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation>Έχετε ανοικτές πολλές βάσεις δεδομένων
-Παρακαλώ επιλέξτε την σωστή βάση για την αποθήκευση των διαπιστευτηρίων.</translation>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation>Διάλογος</translation>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Αυτό απαιτείται για να έχετε πρόσβαση στις βάσεις δεδομένων με το KeePassXC-Browser</translation>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation>Ενεργοποίηση της συνεργασίας του περιηγητή ιστού και του KeePassXC</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Γενικά</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation>Ενεργοποίηση της ενσωμάτωσης με τους ακόλουθους περιηγητές:</translation>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Εμφάνιση &amp;ειδοποίησης όταν απαιτούνται διαπιστευτήρια</translation>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Για προχωρημένους</translation>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Αντικατάσταση τρέχοντος κλειδιού;</translation>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Ενημέρωση Καταχώρησης</translation>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation>Διακοπή</translation>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation>Κλωνοποίηση Επιλογών</translation>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation>Αντικατάσταση του ονόματος χρήστη και του κωδικού με παραπομπές</translation>
- </message>
- <message>
- <source>Copy history</source>
- <translation>Αντιγραφή ιστορικού</translation>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation>Εισαγωγή πεδίων CSV</translation>
- </message>
- <message>
- <source>filename</source>
- <translation>όνομα αρχείου</translation>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation>μέγεθος, γραμμές, στήλες</translation>
- </message>
- <message>
- <source>Encoding</source>
- <translation>Κωδικοποίηση</translation>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation>Το κείμενο χαρακτηρίζεται από</translation>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation>Τα πεδία διαχωρίζονται από</translation>
- </message>
- <message>
- <source>Comments start with</source>
- <translation>Τα σχόλια ξεκινούν με</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>Η πρώτη εγγραφή έχει ονόματα πεδίων</translation>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation>Αριθμός κεφαλίδων για απόρριψη</translation>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation>Θεώρησε το &apos;\&apos; χαρακτήρα διαφυγής</translation>
- </message>
- <message>
- <source>Preview</source>
- <translation>Προεπισκόπηση</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Διάταξη στηλών</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Δεν υπάρχει στο αρχείο CSV</translation>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation>Εισήχθη από αρχείο CSV</translation>
- </message>
- <message>
- <source>Original data: </source>
- <translation>Αρχικά δεδομένα:</translation>
- </message>
- <message>
- <source>Error</source>
- <translation>Σφάλμα</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Ρίζα</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation>Εισαγάγετε το πρωτεύον κλειδί</translation>
- </message>
- <message>
- <source>Key File:</source>
- <translation>Αρχείο κλειδί:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Κωδικός:</translation>
- </message>
- <message>
- <source>Browse</source>
- <translation>Αναζήτηση</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation>Ανανέωση</translation>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation>Απόκριση Πρόκλησης:</translation>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation>Να μην εμφανιστεί ξανά αυτή η προειδοποίηση</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Όλα τα αρχεία</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>Αρχεία κλειδιά</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>Επιλέξτε αρχείο κλειδί</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation>Κωδικοί</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Γενικά</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Ασφάλεια</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Ενσωμάτωση Περιηγητή</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Αφαίρεση</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation>KeePassXC: Δε βρεθήκαν κλειδιά</translation>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC: Κλειδιά αφαιρέθηκαν από τη βάση</translation>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation>Διακοπή</translation>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: Δικαιώματα αφαιρέθηκαν</translation>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC: Δε βρέθηκε καταχώρηση με δικαιώματα!</translation>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation>Αλγόριθμος κρυπτογράφησης:</translation>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation>AES: 256 Bit (προεπιλεγμένο)</translation>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 Bit</translation>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation>Μετατρεπόμενοι γύροι:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation>Χρήση μνήμης:</translation>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation>Παραλληλισμός:</translation>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation>Αριθμός γύρων πάρα πολύ υψηλός</translation>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Άκυρο</translation>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation>Αριθμός γύρων πάρα πολύ χαμηλός</translation>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation>Μετα-δεδομένα βάσης</translation>
- </message>
- <message>
- <source>Database name:</source>
- <translation>Όνομα βάσης δεδομένων:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>Περιγραφή βάσης δεδομένων:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>Προεπιλεγμένο όνομα χρήστη:</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation>Ρυθμίσεις ιστορικού</translation>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>Μέγιστα αντικείμενα ιστορικού:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>Μέγιστο μέγεθος ιστορικού:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation>MiB</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation>Χρήση κάδου ανακύκλωσης</translation>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation>Πρόσθετες ρυθμίσεις βάσης δεδομένων</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>Βάση Δεδομένων KeePass 2</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Όλα τα αρχεία</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>Άνοιγμα Βάσης Δεδομένων</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>αρχείο CSV</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation>Συγχώνευση βάσης δεδομένων</translation>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>Άνοιγμα βάσης δεδομένων KeePass 1</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>Βάση δεδομένων KeePass 1</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation>Εξαγωγή βάσης δεδομένων σε αρχείο CSV</translation>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation>Γράψιμο στο αρχείο CSV απέτυχε.</translation>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation>Αναζήτηση...</translation>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Θέλετε πραγματικά να διαγράψετε την καταχώρηση &quot;%1&quot; μόνιμα;</translation>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Θέλετε πραγματικά να κινηθεί εισόδου &quot;%1&quot; στον κάδο ανακύκλωσης;</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation>Εκτέλεση εντολής;</translation>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Θέλετε πραγματικά να εκτελέσετε την ακόλουθη εντολή;&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation>Να θυμάσαι αυτή την επιλογή</translation>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Θέλετε στα αλήθεια να διαγράψετε την ομάδα &quot;%1&quot; μόνιμα;</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation>Καμία τρέχουσα βάση δεδομένων.</translation>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation>Αποτελέσματα Αναζήτησης (%1)</translation>
- </message>
- <message>
- <source>No Results</source>
- <translation>Δεν Υπάρχουν Αποτελέσματα</translation>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation>Η βάση δεδομένων έχει αλλάξει. Θέλετε να φορτώσετε τις αλλαγές;</translation>
- </message>
- <message>
- <source>Merge Request</source>
- <translation>Αίτημα Συγχώνευσης</translation>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation>Άδειασμα κάδου ανακύκλωσης;</translation>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Είστε σίγουροι ότι θέλετε να διαγράψετε μόνιμα τα πάντα από το κάδο ανακύκλωσής σας;</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation>Αρχείο ανοιχτό μόνο για ανάγνωση.</translation>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation>&quot;%1&quot; έχει τροποποιηθή.
-Αποθήκευση αλλαγών;</translation>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation>Αποθήκευση αλλαγών;</translation>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation>Κωδικοί</translation>
- </message>
- <message>
- <source>Save database as</source>
- <translation>Αποθήκευση βάσης δεδομένων ως</translation>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>Βάση Δεδομένων KeePass 2</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation>Διαγραφή ομάδας</translation>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>Καταχώρηση</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Για προχωρημένους</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Εικονίδιο</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Αυτόματη-Γραφή</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Ιδιότητες</translation>
- </message>
- <message>
- <source>History</source>
- <translation>Ιστορικό</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>πράκτορας SSH</translation>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation>Ιστορικό καταχωρήσεων</translation>
- </message>
- <message>
- <source>Add entry</source>
- <translation>Πρόσθεση καταχώρησης</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>Επεξεργασία καταχώρησης</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Παρέχονται διαφορετικοί κωδικοί.</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>Νέο χαρακτηριστικό</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation>Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτό το χαρακτηριστικό.</translation>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>Αύριο</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[ΠΡΟΣΤΑΤΕΥΜΕΝΟ] Πατήστε αποκάλυψη για προβολή ή επεξεργασία</translation>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation>Πρόσθετα χαρακτηριστικά</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>Πρόσθεση</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Αφαίρεση</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation>Επεξεργασία Ονόματος</translation>
- </message>
- <message>
- <source>Protect</source>
- <translation>Προστασία</translation>
- </message>
- <message>
- <source>Reveal</source>
- <translation>Αποκάλυψη</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Συνημμένα</translation>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Ενεργοποίηση Αυτόματης-Γραφής για αυτήν την καταχώρηση</translation>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Κληρονόμηση προεπιλεγμένης ακολουθίας Auto-Type από την &amp;ομάδα</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Χρήση προσαρμοσμένης ακολουθίας Auto-Type:</translation>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>Τίτλος Παραθύρου:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>Εμφάνιση</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>Επαναφορά</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>Διαγραφή</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>Διαγραφή όλων</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>URL:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Κωδικός:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Επαναλάβετε:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>Τίτλος:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Σημειώσεις</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation>Προεπιλογές</translation>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation>Όνομα χρήστη:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Λήγει</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Αντιγραφή στο πρόχειρο</translation>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Όμαδα</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Εικονίδιο</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Ιδιότητες</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>Πρόσθεση Ομάδας</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>Επεξεργασία Ομάδας</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>Ενεργοποίηση </translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>Απενεργοποίηση</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation>Κληρονομούν από γονική ομάδα (%1)</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Κωδικός:</translation>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>Όνομα</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Σημειώσεις</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Λήγει</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Αναζήτηση</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Αυτόματη-Γραφή</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Χρήση προεπιλεγμένου εικονιδίου</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Χρήση προσαρμο&amp;σμένου εικονιδίου</translation>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>Πρόσθεση προσαρμοσμένου εικονιδίου</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation>Διαγραφή προσαρμοσμένου εικονιδίου</translation>
- </message>
- <message>
- <source>Download favicon</source>
- <translation>Κατέβασμα favicon</translation>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation>Αδυναμία λήψης favicon.</translation>
- </message>
- <message>
- <source>Images</source>
- <translation>Εικόνες</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Όλα τα αρχεία</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation>Επιβεβαίωση Διαγραφής</translation>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>Δημιουργήθηκε:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>Τροποποιήθηκε:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>Προσπελάστηκε:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>UUID:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Αφαίρεση</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>Όνομα</translation>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation>Πρόσθεση</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Αφαίρεση</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>Άνοιγμα</translation>
- </message>
- <message>
- <source>Save</source>
- <translation>Αποθήκευση</translation>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>Όνομα</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>Τελευταία τροποποίηση</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Τίτλος</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Όνομα χρήστη</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation>Αναφ:</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Όμαδα</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Τίτλος</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Όνομα χρήστη</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Κωδικός</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Σημειώσεις</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Λήγει</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Συνημμένα</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>Κλείσιμο</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Γενικά</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Όνομα χρήστη</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Κωδικός</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Συνημμένα</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Σημειώσεις</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation>Παράθυρο</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Ακολουθία</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation>Αναζήτηση</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation>Καλάθι ανακύκλωσης</translation>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation>&amp;Κλείσιμο</translation>
- </message>
- <message>
- <source>Close message</source>
- <translation>Κλείσιμο Μηνύματος</translation>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο.</translation>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Δεν είναι βάση δεδομένων KeePass.</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation>Εισαγωγή βάσης δεδομένων KeePass1</translation>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation>Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων.</translation>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation>Αποτυχία διαβάσματος αρχείου κλειδιού.</translation>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Δεν είναι βάση δεδομένων KeePass.</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation>Μη υποστηριζόμενος αλογόριθμος κρυπτογράφησης.</translation>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation>Μη υποστηριζόμενη έκδοση βάσης δεδομένων KeePass.</translation>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>Ρίζα</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο.</translation>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Άκυρο</translation>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>Αναζήτηση</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>Αρχεία κλειδιά</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Όλα τα αρχεία</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>Δημιουργεία αρχείου κλειδιού...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>Επιλέξτε ένα αρχείο κλειδί</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation>&amp;Βάση Δεδομένων</translation>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Πρόσφατες βάσεις δεδομένων</translation>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation>Ε&amp;γγραφές</translation>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation>&amp;Ομάδες</translation>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation>&amp;Εργαλεία</translation>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation>&amp;Έξοδος</translation>
- </message>
- <message>
- <source>&amp;About</source>
- <translation>&amp;Σχετικά με</translation>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Αποθήκευση βάσης δεδομένων</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Κλείσιμο βάσης δεδομένων</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Διαγραφή καταχώρησης</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Επεξεργασία ομάδας</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Διαγραφή ομάδας</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Ρυθμίσεις βάσης δεδομένων</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Κλωνοποίηση καταχώρησης </translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Αντιγραφή &amp;ονόματος χρήστη</translation>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation>Αντιγραφή όνομα χρήστη στο πρόχειρο</translation>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation>Αντιγραφή κωδικού στο πρόχειρο</translation>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation>&amp;Ρυθμίσεις</translation>
- </message>
- <message>
- <source>Password Generator</source>
- <translation>Γεννήτρια Κωδικών</translation>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Κλείδωμα βάσεων δεδομένων</translation>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation>&amp;Τίτλος</translation>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation>&amp;URL</translation>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation>&amp;Σημειώσεις</translation>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation>Καθαρισμός ιστορικού</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation>Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1</translation>
- </message>
- <message>
- <source>Settings</source>
- <translation>Ρύθμίσεις</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation>Εναλλαγή παραθύρων</translation>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation>Κλείσιμο KeePassXC</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation>Παρακαλώ αγγίξτε το κουμπί στο YubiKey σας!</translation>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>Ρίζα</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>Εισάγετε κωδικό:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Κωδικός</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Κωδικός:</translation>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation>ισχύς</translation>
- </message>
- <message>
- <source>entropy</source>
- <translation>εντροπία</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Κωδικός</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>Τύποι χαρακτήρων</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>Κεφαλαία γράμματα</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>Πεζά γράμματα</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>Αριθμοί</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>Ειδικοί χαρακτήρες</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation>Εξαίρεση χαρακτήρων που μοίαζουν</translation>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation>&amp;Μήκος:</translation>
- </message>
- <message>
- <source>Passphrase</source>
- <translation>Φράση Κλειδί</translation>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation>Λίστα Λέξεων:</translation>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation>Διαχωριστικό Λέξεων:</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>Αντιγραφή</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Αποδοχή</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>Κλείσιμο</translation>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation>Φτωχή</translation>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation>Αδύναμη</translation>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation>Καλή</translation>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation>Εξαιρετική</translation>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Για προχωρημένους</translation>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation>Α-Ω</translation>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation>α-ω</translation>
- </message>
- <message>
- <source>0-9</source>
- <translation>0-9</translation>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>Διαγραφή</translation>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Αφαίρεση</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>Απενεργοποίηση</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation>Διαδρομή της βάσης δεδομένων.</translation>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation>Εξαγωγή και τύπωμα των περιεχομένων της βάσης δεδομένων.</translation>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation>Διαδρομή της βάσης δεδομένων προς εξαγωγή.</translation>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation>Όνομα εντολής προς εκτέλεση.</translation>
- </message>
- <message>
- <source>List database entries.</source>
- <translation>Προβολή καταχωρίσεων βάσης δεδομένων.</translation>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation>Συγχώνευση δύο βάσεων δεδομένων.</translation>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation>Όνομα καταχώρησης προς προβολή.</translation>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation>σφάλμα κατά την ανάγνωση από συσκευή</translation>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Όμαδα</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Τίτλος</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Όνομα χρήστη</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Κωδικός</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Σημειώσεις</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Ενσωμάτωση Περιηγητή</translation>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>πράκτορας SSH</translation>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation>ονόματα αρχείων των βάσεων δεδομένων κωδικών προς άνοιγμα (*.kdbx)</translation>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation>διαδρομή σε προσαρμοσμένο αρχείο ρυθμίσεων</translation>
- </message>
- <message>
- <source>key file of the database</source>
- <translation>Αρχείο κλειδί της βάσεως δεδομένων</translation>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation>Διάβασμα κωδικού βάσης από το stdin</translation>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation>Μία άλλη διεργασία του KeePassXC ήδη τρέχει.</translation>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation>Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών.</translation>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation>KeePassXC - Σφάλμα</translation>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation>Σφάλμα κατά την εγγραφή για την υποκείμενη συσκευή: </translation>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation>Σφάλμα άνοιγμα υποκείμενη συσκευή: </translation>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation>Σφάλμα κατά την ανάγνωση δεδομένων από υποκείμενη συσκευή: </translation>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation>Εσωτερικό σφάλμα zlib:</translation>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>Αναζήτηση</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation>Περιορισμός αναζήτησης στην επιλεγμένη ομάδα</translation>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation>Διάκριση πεζών-κεφαλαίων</translation>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation>Κλειδί:</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation>Εισαγωγή</translation>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Αφαίρεση</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Όλα τα αρχεία</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation>000000</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>Αντιγραφή</translation>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation>Αντιγραφή</translation>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation>Κλειδί:</translation>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation>Χρήση προσαρμοσμένων ρυθμίσεων</translation>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation>Βήμα χρόνου:</translation>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>δευτερόλεπτα</translation>
- </message>
- <message>
- <source>Code size:</source>
- <translation>Μέγεθος κώδικα:</translation>
- </message>
- <message>
- <source>6 digits</source>
- <translation>6 Ψηφία</translation>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation>8 Ψηφία</translation>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>Κλείσιμο</translation>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Ξεκινήστε να αποθηκεύετε τους κωδικούς σας με ασφάλεια σε μία βάση δεδομένων KeePassXC</translation>
- </message>
- <message>
- <source>Create new database</source>
- <translation>Δημιουργία νέας βάσης δεδομένων</translation>
- </message>
- <message>
- <source>Open existing database</source>
- <translation>Άνοιγμα υπάρχουσας βάσης δεδομένων</translation>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation>Εισαγωγή από KeePass 1</translation>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation>Εισαγωγή από CSV</translation>
- </message>
- <message>
- <source>Recent databases</source>
- <translation>Πρόσφατες βάσεις δεδομένων</translation>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation>Ανανέωση</translation>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_en.ts b/share/translations/keepassx_en.ts
index 3b9ae00fc..e4e05db39 100644
--- a/share/translations/keepassx_en.ts
+++ b/share/translations/keepassx_en.ts
@@ -51,13 +51,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Enable SSH Agent (requires restart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Use OpenSSH for Windows instead of Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -105,6 +125,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -129,10 +161,6 @@
<translation>File Management</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Safely save database files (may be incompatible with Dropbox, etc)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Backup database file before saving</translation>
</message>
@@ -145,10 +173,6 @@
<translation>Automatically save on exit</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Automatically reload the database when modified externally</translation>
</message>
@@ -161,18 +185,6 @@
<translation>Use group icon on entry creation</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Hide the entry preview panel</translation>
- </message>
- <message>
- <source>General</source>
- <translation>General</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Hide toolbar (icons)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimize instead of app exit</translation>
</message>
@@ -181,10 +193,6 @@
<translation>Show a system tray icon</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Dark system tray icon</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Hide window to system tray when minimized</translation>
</message>
@@ -205,23 +213,11 @@
<translation>Always ask before performing Auto-Type</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Global Auto-Type shortcut</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Auto-Type typing delay</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Auto-Type start delay</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Movable toolbar</translation>
</message>
@@ -246,10 +242,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Button style:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Language:</source>
<translation type="unfinished"></translation>
</message>
@@ -295,27 +287,63 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
+ <source>Language selection</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Language selection</source>
+ <source>Global auto-type shortcut</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Reset Settings to Default</source>
+ <source>Auto-type character typing delay milliseconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Auto-type start delay milliseconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -367,18 +395,6 @@
<translation>Re-lock previously locked database after performing Auto-Type</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Don&apos;t require password repeat when it is visible</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Don&apos;t hide passwords when editing them</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Don&apos;t use placeholder for empty password fields</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Hide passwords in the entry preview panel</translation>
</message>
@@ -415,6 +431,18 @@
<source>Clear search query after</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -529,33 +557,35 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser Confirm Access</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Remember this decision</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Allow</source>
- <translation>Allow</translation>
+ <source>Remember</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Deny</source>
- <translation>Deny</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Allow access</source>
+ <source>Deny All</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Deny access</source>
+ <source>Disable for this site</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -581,166 +611,176 @@ Please select the correct database for saving credentials.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: New key association request</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>This is required for accessing your databases with KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Save and allow access</translation>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Overwrite existing key?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Enable integration for these browsers:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Update Entry</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Do you want to update the information in %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Abort</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Converting attributes to custom data…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Show a &amp;notification when credentials are requested</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Converted KeePassHTTP attributes</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Re&amp;quest to unlock the database if it is locked</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</translation>
</message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Only entries with the same scheme (http://, https://, ...) are returned.</translation>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation>
+ <numerusform>Successfully moved %n keys to custom data.</numerusform>
+ <numerusform>Successfully moved %n keys to custom data.</numerusform>
+ </translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Match URL scheme (e.g., https://...)</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: No entry with KeePassHTTP attributes found!</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Only returns the best matches for a specific URL instead of all entries for the whole domain.</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>The active database does not contain an entry with KeePassHTTP attributes.</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Return only best-matching credentials</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Legacy browser integration settings detected</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sort &amp;matching credentials by title</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sort matching credentials by &amp;username</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Advanced</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Never &amp;ask before accessing credentials</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation type="unfinished">Don&apos;t show this warning again</translation>
</message>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Never ask before &amp;updating credentials</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Searc&amp;h in all opened databases for matching credentials</translation>
+ <source>Dialog</source>
+ <translation type="unfinished">Dialog</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatically creating or updating string fields is not supported.</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation type="unfinished">This is required for accessing your databases with KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Return advanced string fields which start with &quot;KPH: &quot;</translation>
+ <source>Enable browser integration</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</translation>
+ <source>General</source>
+ <translation type="unfinished">General</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Update &amp;native messaging manifest files at startup</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Support a proxy application between KeePassXC and browser extension.</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation type="unfinished">Enable integration for these browsers:</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Use a &amp;proxy application between KeePassXC and browser extension</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Use a custom proxy location if you installed a proxy manually.</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Use a &amp;custom proxy location</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Browse...</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</translation>
+ <source>Brave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Select custom proxy location</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Executable Files</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>All Files</source>
- <translation>All Files</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Do not ask permission for HTTP &amp;Basic Auth</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation type="unfinished">Only entries with the same scheme (http://, https://, ...) are returned.</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <source>Match URL scheme (e.g., https://...)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation type="unfinished"></translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation type="unfinished">Only returns the best matches for a specific URL instead of all entries for the whole domain.</translation>
</message>
<message>
- <source>&amp;Brave</source>
+ <source>Return only best-matching credentials</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -748,141 +788,163 @@ Please select the correct database for saving credentials.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>All databases connected to the extension will return matching credentials.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Advanced</source>
+ <translation type="unfinished">Advanced</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation type="unfinished">Automatically creating or updating string fields is not supported.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Edge</source>
+ <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: New key association request</translation>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation type="unfinished">Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Save and allow access</translation>
+ <source>Update native messaging manifest files at startup</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Overwrite existing key?</translation>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation type="unfinished">Use a custom proxy location if you installed a proxy manually.</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</translation>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Update Entry</translation>
+ <source>Custom proxy location field</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Do you want to update the information in %1 - %2?</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abort</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation type="unfinished">Browse...</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Converting attributes to custom data…</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Converted KeePassHTTP attributes</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</translation>
+ <source>Toolbar button style</source>
+ <translation type="unfinished"></translation>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation>
- <numerusform>Successfully moved %n keys to custom data.</numerusform>
- <numerusform>Successfully moved %n keys to custom data.</numerusform>
- </translation>
+ <message>
+ <source>Config Location:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: No entry with KeePassHTTP attributes found!</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>The active database does not contain an entry with KeePassHTTP attributes.</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Legacy browser integration settings detected</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
+ <source>Custom extension ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
+ <source>Custom extension ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished">Don&apos;t show this warning again</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation type="unfinished">&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</translation>
+ </message>
+ <message>
+ <source>Executable Files</source>
+ <translation type="unfinished">Executable Files</translation>
+ </message>
+ <message>
+ <source>All Files</source>
+ <translation type="unfinished">All Files</translation>
+ </message>
+ <message>
+ <source>Select custom proxy location</source>
+ <translation type="unfinished">Select custom proxy location</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -940,10 +1002,6 @@ chrome-laptop.</source>
<translation>Comments start with</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>First record has field names</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Consider &apos;\&apos; an escape character</translation>
</message>
@@ -952,14 +1010,6 @@ chrome-laptop.</source>
<translation>Preview</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Column layout</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Not present in CSV file</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Imported from CSV file</translation>
</message>
@@ -972,14 +1022,6 @@ chrome-laptop.</source>
<translation>Error</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Empty fieldname %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>column %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Error(s) detected in CSV file!</translation>
</message>
@@ -1012,6 +1054,58 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation type="unfinished">Last Modified</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Password</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation type="unfinished">Created</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation type="unfinished">Notes</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">Title</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation type="unfinished">Group</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation type="unfinished">URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation type="unfinished">Username</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1045,11 +1139,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Root</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>File %1 does not exist.</translation>
</message>
@@ -1090,6 +1179,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation type="unfinished">Recycle Bin</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation type="unfinished">Passwords</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1143,10 +1245,6 @@ Please consider generating a new key file.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation type="unfinished"></translation>
</message>
@@ -1159,14 +1257,6 @@ Please consider generating a new key file.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"></translation>
</message>
@@ -1227,28 +1317,44 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"></translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <source>Key file help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Key file help</source>
+ <source>?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>?</source>
+ <source>Cannot use database file as key file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>You cannot use your database file as a key file.
+If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Select key file...</source>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cannot use database file as key file</source>
+ <source>Key file to unlock the database</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>You cannot use your database file as a key file.
-If you do not have a key file, please leave the field empty.</source>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation type="unfinished">Please touch the button on your YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1274,10 +1380,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Security</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Master Key</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Encryption Settings</translation>
</message>
@@ -1285,6 +1387,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Browser Integration</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1293,18 +1399,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-Browser settings</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Disconnect all browsers</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Forg&amp;et all site-specific settings on entries</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Stored keys</translation>
</message>
@@ -1418,6 +1512,66 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<source>Remove selected key</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation type="unfinished">Created</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation type="unfinished">Add additional protection...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation type="unfinished">No password set</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation type="unfinished">WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation type="unfinished">No encryption key added</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation type="unfinished">You must add at least one encryption key to secure your database!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation type="unfinished">Unknown error</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1442,10 +1596,6 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<translation>Transform rounds:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Benchmark 1-second delay</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Memory Usage:</translation>
</message>
@@ -1466,14 +1616,6 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<translation>Change</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Higher values offer more protection, but opening the database will take longer.</translation>
</message>
@@ -1556,22 +1698,6 @@ If you keep this number, your database may be too easy to crack!</translation>
<numerusform> thread(s)</numerusform>
</translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation>
- <numerusform>%1 ms</numerusform>
- <numerusform>%1 ms</numerusform>
- </translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation>
- <numerusform>%1 s</numerusform>
- <numerusform>%1 s</numerusform>
- </translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation type="unfinished"></translation>
@@ -1604,6 +1730,14 @@ If you keep this number, your database may be too easy to crack!</translation>
<source>Parallelism</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1612,15 +1746,15 @@ If you keep this number, your database may be too easy to crack!</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1667,10 +1801,6 @@ If you keep this number, your database may be too easy to crack!</translation>
<translation>Additional Database Settings</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Enable &amp;compression (recommended)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation type="unfinished"></translation>
</message>
@@ -1703,6 +1833,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1737,45 +1871,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Add additional protection...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>No encryption key added</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>You must add at least one encryption key to secure your database!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>No password set</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Unknown error</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Failed to change master key</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1795,125 +1890,6 @@ Are you sure you want to continue without a password?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Name</source>
- <translation type="unfinished">Name</translation>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished">Value</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -2008,6 +1984,10 @@ This is definitely a bug, please report it to the developers.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2204,6 +2184,14 @@ Disable safe saves and try again?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2248,14 +2236,6 @@ Disable safe saves and try again?</translation>
<translation>Select private key</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>File too large to be a private key</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Failed to open private key</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Entry history</translation>
</message>
@@ -2268,10 +2248,6 @@ Disable safe saves and try again?</translation>
<translation>Edit entry</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Different passwords supplied.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>New attribute</translation>
</message>
@@ -2298,29 +2274,13 @@ Disable safe saves and try again?</translation>
</translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Apply generated password?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Do you want to apply the generated password to this entry?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Entry updated successfully.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Entry has unsaved changes</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>New attribute %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTECTED] Press reveal to view or edit</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation>
@@ -2352,6 +2312,18 @@ Disable safe saves and try again?</translation>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2427,6 +2399,14 @@ Disable safe saves and try again?</translation>
<source>Background color selection</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2435,14 +2415,6 @@ Disable safe saves and try again?</translation>
<translation>Enable Auto-Type for this entry</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Inherit default Auto-Type sequence from the &amp;group</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Use custom Auto-Type sequence:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Window Associations</translation>
</message>
@@ -2498,6 +2470,14 @@ Disable safe saves and try again?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2592,18 +2572,10 @@ Disable safe saves and try again?</translation>
<translation>Password:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repeat:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Title:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Presets</translation>
</message>
@@ -2616,10 +2588,6 @@ Disable safe saves and try again?</translation>
<translation>Username:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expires</translation>
- </message>
- <message>
<source>Url field</source>
<translation type="unfinished"></translation>
</message>
@@ -2628,22 +2596,10 @@ Disable safe saves and try again?</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"></translation>
</message>
@@ -2675,6 +2631,18 @@ Disable safe saves and try again?</translation>
<source>Toggle expiration</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2810,10 +2778,6 @@ Disable safe saves and try again?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Form</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Type:</translation>
</message>
@@ -2822,10 +2786,6 @@ Disable safe saves and try again?</translation>
<translation>Path:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Password:</translation>
</message>
@@ -2908,96 +2868,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"></translation>
+ <source>Browse...</source>
+ <translation type="unfinished">Browse...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Name</translation>
+ <source>Name field</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expires</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Search</source>
- <translation>Search</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Auto-Type</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Use default Auto-Type sequence of parent group</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Set default Auto-Type se&amp;quence</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Expiration field</source>
+ <source>Notes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Use default icon</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Use custo&amp;m icon</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Add custom icon</translation>
</message>
@@ -3074,27 +3022,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3288,6 +3244,17 @@ This may cause the affected plugins to malfunction.</translation>
<source>Save selected attachment to disk</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3371,12 +3338,52 @@ This may cause the affected plugins to malfunction.</translation>
<translation>Attachments</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Yes</translation>
+ <source>Size</source>
+ <translation type="unfinished">Size</translation>
+ </message>
+ <message>
+ <source>Group name</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Entry title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3509,8 +3516,14 @@ This may cause the affected plugins to malfunction.</translation>
<translation>Reset to defaults</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Attachments (icon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3522,10 +3535,6 @@ This may cause the affected plugins to malfunction.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"></translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
@@ -3534,6 +3543,10 @@ This may cause the affected plugins to malfunction.</translation>
<numerusform></numerusform>
</translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>FdoSecrets::SettingsDatabaseModel</name>
@@ -3572,7 +3585,26 @@ This may cause the affected plugins to malfunction.</translation>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation type="unfinished">Unknown</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation type="unfinished">Unknown</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3585,14 +3617,10 @@ This may cause the affected plugins to malfunction.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Cannot save file!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Cannot save the native messaging script file.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3661,14 +3689,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Unable to issue challenge-response.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>missing database headers</translation>
</message>
@@ -3693,16 +3713,24 @@ You can enable the DuckDuckGo website icon service in the security section of th
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Unable to issue challenge-response.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3712,10 +3740,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>missing database headers</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Invalid header checksum size</translation>
</message>
@@ -3832,6 +3856,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3845,14 +3873,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Invalid symmetric cipher IV size.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Failed to serialize KDF parameters variant map</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -4002,10 +4030,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<translation>Entry string key or value missing</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Duplicate attachment found</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Entry binary key or value missing</translation>
</message>
@@ -4052,6 +4076,29 @@ Line %2, column %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation type="unfinished">File too large to be a private key</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation type="unfinished">Failed to open private key</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -4114,10 +4161,6 @@ Line %2, column %3</translation>
<translation>Root</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Key transformation failed</translation>
</message>
@@ -4218,6 +4261,10 @@ Line %2, column %3</translation>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4324,16 +4371,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Legacy key file format</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</translation>
- </message>
- <message>
<source>Error loading the key file &apos;%1&apos;
Message: %2</source>
<translation>Error loading the key file &apos;%1&apos;
@@ -4400,6 +4437,13 @@ Message: %2</translation>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4408,18 +4452,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Database</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Recent databases</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Help</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntries</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Groups</translation>
</message>
@@ -4436,46 +4472,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;About</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Open database...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Save database</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Close database</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Delete entry</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Edit group</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Delete group</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Sa&amp;ve database as...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Database settings</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clone entry</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copy &amp;username</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copy username to clipboard</translation>
</message>
@@ -4488,10 +4488,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Settings</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lock databases</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Title</translation>
</message>
@@ -4516,14 +4512,6 @@ Are you sure you want to continue with this file?</source>
<translation>Copy notes to clipboard</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Export to CSV file...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Set up TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copy &amp;TOTP</translation>
</message>
@@ -4568,10 +4556,6 @@ This version is not meant for production use.</translation>
<translation>&amp;Donate</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Report a &amp;bug</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
@@ -4582,66 +4566,26 @@ We recommend you use the AppImage available on our downloads page.</translation>
<translation>&amp;Import</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copy att&amp;ribute...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;New database...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Create a new database</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Merge from database...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Merge from another KDBX database</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;New entry</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Add a new entry</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Edit entry</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>View or edit entry</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;New group</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Add a new group</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Change master &amp;key...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Database settings...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copy &amp;password</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Perform &amp;Auto-Type</translation>
</message>
@@ -4650,30 +4594,14 @@ We recommend you use the AppImage available on our downloads page.</translation>
<translation>Open &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 database...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Import a KeePass 1 database</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV file...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Import a CSV file</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Show TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Show TOTP QR Code...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOTE: You are using a pre-release version of KeePassXC!
@@ -4696,67 +4624,267 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
+ <source>Sort &amp;A-Z</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
+ <source>Sort &amp;Z-A</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;Password Generator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>Import a 1Password Vault</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>&amp;Getting Started</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Download favicon</source>
- <translation type="unfinished">Download favicon</translation>
+ <source>&amp;User Guide</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>&amp;Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;Recent Databases</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>&amp;Entries</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>Copy Att&amp;ribute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>TOTP</source>
+ <translation type="unfinished">TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Theme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>&amp;Check for Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>&amp;Open Database…</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>&amp;Save Database</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4880,10 +5008,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>WizardPage</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>En&amp;cryption Settings</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</translation>
</message>
@@ -4895,27 +5019,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Simple Settings</translation>
</message>
+ <message>
+ <source>Encryption Settings</source>
+ <translation type="unfinished">Encryption Settings</translation>
+ </message>
</context>
<context>
- <name>NewDatabaseWizardPageEncryption</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Encryption Settings</source>
- <translation>Encryption Settings</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Database Master Key</translation>
+ <source>Encryption Settings</source>
+ <translation>Encryption Settings</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>A master key known only to you protects your database.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</translation>
</message>
</context>
<context>
@@ -4930,6 +5058,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -5104,6 +5239,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -5128,25 +5275,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Passwords do not match.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Generate master password</translation>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5155,10 +5290,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Password:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>strength</translation>
@@ -5208,14 +5339,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Word Separator:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copy</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accept</translation>
- </message>
- <message>
<source>Close</source>
<translation>Close</translation>
</message>
@@ -5312,14 +5435,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Switch to simple mode</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Simple</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Character set to exclude from generated password</translation>
</message>
@@ -5340,14 +5455,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Word Co&amp;unt:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regenerate</translation>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"></translation>
</message>
@@ -5396,10 +5503,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"></translation>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"></translation>
</message>
@@ -5412,7 +5515,43 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation type="unfinished">Clear</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5426,6 +5565,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5565,10 +5756,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Path of the entry to add.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copy an entry&apos;s password to the clipboard.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Path of the entry to clip.</translation>
@@ -5726,14 +5913,6 @@ Available commands:
<translation>Browser Integration</translation>
</message>
<message>
- <source>Press</source>
- <translation>Press</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passive</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH Agent</translation>
</message>
@@ -5772,10 +5951,6 @@ Available commands:
<translation>Successfully added entry %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copy the current TOTP to the clipboard.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Invalid timeout value %1.</translation>
</message>
@@ -5787,14 +5962,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Entry with path %1 has no TOTP set up.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Entry&apos;s current TOTP copied to the clipboard!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Entry&apos;s password copied to the clipboard!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation>
@@ -6018,10 +6185,6 @@ Available commands:
<translation>No program defined for clipboard manipulation</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Unable to start program %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>file empty</translation>
</message>
@@ -6030,18 +6193,6 @@ Available commands:
<translation>%1: (row, col) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recommended)</translation>
</message>
@@ -6290,10 +6441,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"></translation>
</message>
@@ -6310,10 +6457,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"></translation>
</message>
@@ -6354,10 +6497,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"></translation>
</message>
@@ -6450,10 +6589,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"></translation>
</message>
@@ -6469,10 +6604,6 @@ Kernel: %3 %4</source>
<source>User name</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"></translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished">
@@ -6488,6 +6619,199 @@ Kernel: %3 %4</source>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished">ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished">
+ <numerusform>%1 ms</numerusform>
+ <numerusform>%1 ms</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished">
+ <numerusform>%1 s</numerusform>
+ <numerusform>%1 s</numerusform>
+ </translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6524,6 +6848,290 @@ Kernel: %3 %4</source>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished">Poor</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished">Weak</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">Title</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation type="unfinished">Path</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">Title</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation type="unfinished">Path</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation type="unfinished">Name</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation type="unfinished">Value</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6557,6 +7165,14 @@ Kernel: %3 %4</source>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>A confirmation request is not supported by the agent (check options).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6664,10 +7280,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"></translation>
</message>
@@ -6679,6 +7291,22 @@ Kernel: %3 %4</source>
<source>These applications are currently connected:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
@@ -6950,10 +7578,6 @@ Kernel: %3 %4</source>
<translation type="unfinished">Successful signed import</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation type="unfinished">Unexpected error</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished">Unsigned share container are not supported - import prevented</translation>
</message>
@@ -7222,6 +7846,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation type="unfinished">Press</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation type="unfinished">Passive</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7236,19 +7907,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>No YubiKey detected, please ensure it&apos;s plugged in.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>No YubiKey inserted.</translation>
+ <source>Hardware key slot selection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/share/translations/keepassx_en_US.ts b/share/translations/keepassx_en_US.ts
index f5477c488..3aee2bf72 100644
--- a/share/translations/keepassx_en_US.ts
+++ b/share/translations/keepassx_en_US.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Enable SSH Agent (requires restart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Use OpenSSH for Windows instead of Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Enable SSH Agent integration</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK value</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK override</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(empty)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH Agent connection is working!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Are you sure you want to reset all general and security settings to default?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochrome (light)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochrome (dark)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Colorful</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>File Management</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Safely save database files (may be incompatible with Dropbox, etc)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Backup database file before saving</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Automatically save on exit</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Automatically reload the database when modified externally</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Use group icon on entry creation</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Hide the entry preview panel</translation>
- </message>
- <message>
- <source>General</source>
- <translation>General</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Hide toolbar (icons)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimize instead of app exit</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Show a system tray icon</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Dark system tray icon</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Hide window to system tray when minimized</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Always ask before performing Auto-Type</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Global Auto-Type shortcut</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Auto-Type typing delay</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Auto-Type start delay</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Movable toolbar</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Include beta releases when checking for updates</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Button style:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Language:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Toolbar button style</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Use monospaced font for notes</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Language selection</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Reset Settings to Default</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Global auto-type shortcut</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Auto-type start delay milliseconds</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Automatically launch KeePassXC at system startup</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Mark database as modified for non-data changes (e.g., expanding groups)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Safely save database files (disable if experiencing problems with Dropbox, etc.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>User Interface</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Toolbar button style:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Use monospaced font for notes</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Tray icon type:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Reset settings to default…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Auto-Type typing delay:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Global Auto-Type shortcut:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Auto-Type start delay:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Re-lock previously locked database after performing Auto-Type</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Don&apos;t require password repeat when it is visible</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Don&apos;t hide passwords when editing them</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Don&apos;t use placeholder for empty password fields</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Hide passwords in the entry preview panel</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Clear search query after</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Require password repeat when it is visible</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Hide passwords when editing them</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Use placeholder for empty password fields</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser Confirm Access</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Browser Access Request</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 is requesting access to the following entries:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Remember this decision</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Remember access to checked entries</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Allow</translation>
+ <source>Remember</source>
+ <translation>Remember</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Deny</translation>
+ <source>Allow access to entries</source>
+ <translation>Allow access to entries</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</translation>
+ <source>Allow Selected</source>
+ <translation>Allow Selected</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Allow access</translation>
+ <source>Deny All</source>
+ <translation>Deny All</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Deny access</translation>
+ <source>Disable for this site</source>
+ <translation>Disable for this site</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Please select the correct database for saving credentials.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: New key association request</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>This is required for accessing your databases with KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Save and allow access</translation>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Overwrite existing key?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Enable integration for these browsers:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Update Entry</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Do you want to update the information in %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Abort</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Converting attributes to custom data…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Show a &amp;notification when credentials are requested</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Converted KeePassHTTP attributes</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Re&amp;quest to unlock the database if it is locked</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Successfully moved %n keys to custom data.</numerusform><numerusform>Successfully moved %n keys to custom data.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Only entries with the same scheme (http://, https://, ...) are returned.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: No entry with KeePassHTTP attributes found!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Match URL scheme (e.g., https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>The active database does not contain an entry with KeePassHTTP attributes.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Only returns the best matches for a specific URL instead of all entries for the whole domain.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Legacy browser integration settings detected</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Return only best-matching credentials</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Create a new group</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sort &amp;matching credentials by title</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sort matching credentials by &amp;username</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Advanced</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Don&apos;t show this warning again</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Never &amp;ask before accessing credentials</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Never ask before &amp;updating credentials</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Searc&amp;h in all opened databases for matching credentials</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>This is required for accessing your databases with KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatically creating or updating string fields is not supported.</translation>
+ <source>Enable browser integration</source>
+ <translation>Enable browser integration</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Return advanced string fields which start with &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>General</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Browsers installed as snaps are currently not supported.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Update &amp;native messaging manifest files at startup</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Enable integration for these browsers:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Support a proxy application between KeePassXC and browser extension.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Use a &amp;proxy application between KeePassXC and browser extension</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Use a custom proxy location if you installed a proxy manually.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Use a &amp;custom proxy location</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Browse...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Select custom proxy location</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Show a notification when credentials are requested</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Executable Files</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Request to unlock the database if it is locked</translation>
</message>
<message>
- <source>All Files</source>
- <translation>All Files</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Only entries with the same scheme (http://, https://, ...) are returned.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Do not ask permission for HTTP &amp;Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Match URL scheme (e.g., https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Only returns the best matches for a specific URL instead of all entries for the whole domain.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Please see special instructions for browser extension use below</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Return only best-matching credentials</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Returns expired credentials. String [expired] is added to the title.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Allow returning expired credentials</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Returns expired credentials. String [expired] is added to the title.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>All databases connected to the extension will return matching credentials.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Allow returning expired credentials</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Search in all opened databases for matching credentials</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Enable browser integration</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sort matching credentials by title</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Browsers installed as snaps are currently not supported.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sort matching credentials by username</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>All databases connected to the extension will return matching credentials.</translation>
+ <source>Advanced</source>
+ <translation>Advanced</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Never ask before accessing credentials</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Never ask before updating credentials</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Do not ask permission for HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatically creating or updating string fields is not supported.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Return advanced string fields which start with &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Do not prompt for KeePassHTTP settings migration.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Do not prompt for KeePassHTTP settings migration.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Update native messaging manifest files at startup</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Use a custom proxy location if you installed a proxy manually.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Use a custom proxy location:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Please select the correct database for saving credentials.</translation>
<translation>Browser for custom proxy file</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Browse...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: New key association request</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Use a custom browser configuration location:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Save and allow access</translation>
+ <source>Browser type:</source>
+ <translation>Browser type:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Overwrite existing key?</translation>
+ <source>Toolbar button style</source>
+ <translation>Toolbar button style</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</translation>
+ <source>Config Location:</source>
+ <translation>Config Location:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Update Entry</translation>
+ <source>Custom browser location field</source>
+ <translation>Custom browser location field</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Do you want to update the information in %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abort</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Browse for custom browser path</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Converting attributes to custom data…</translation>
+ <source>Custom extension ID:</source>
+ <translation>Custom extension ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Converted KeePassHTTP attributes</translation>
+ <source>Custom extension ID</source>
+ <translation>Custom extension ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Successfully moved %n keys to custom data.</numerusform><numerusform>Successfully moved %n keys to custom data.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: No entry with KeePassHTTP attributes found!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>The active database does not contain an entry with KeePassHTTP attributes.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Please see special instructions for browser extension use below</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Legacy browser integration settings detected</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Create a new group</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</translation>
+ <source>Executable Files</source>
+ <translation>Executable Files</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</translation>
+ <source>All Files</source>
+ <translation>All Files</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Don&apos;t show this warning again</translation>
+ <source>Select custom proxy location</source>
+ <translation>Select custom proxy location</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Select native messaging host folder location</translation>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-laptop.</translation>
<translation>Comments start with</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>First record has field names</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Consider &apos;\&apos; an escape character</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>Preview</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Column layout</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Not present in CSV file</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Imported from CSV file</translation>
</message>
@@ -971,14 +1025,6 @@ chrome-laptop.</translation>
<translation>Error</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Empty fieldname %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>column %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Error(s) detected in CSV file!</translation>
</message>
@@ -1008,6 +1054,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>CSV import preview</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Column Association</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Last Modified</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Password</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Created</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notes</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Title</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Group</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Username</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Header lines skipped</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>First line has field names</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Not Present</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Column %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Root</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>File %1 does not exist.</translation>
</message>
@@ -1054,7 +1147,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Key not transformed. This is a bug, please report it to the developers!</translation>
+ <translation>Key not transformed. This is a bug, please report it to the developers.</translation>
</message>
<message>
<source>%1
@@ -1078,6 +1171,19 @@ Backup database located at %2</translation>
<source>Recycle Bin</source>
<translation>Recycle Bin</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Passwords</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Database save is already in progress.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Could not save, database has not been initialized!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1131,10 +1237,6 @@ Please consider generating a new key file.</translation>
<translation>Failed to open key file: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Select slot...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Unlock KeePassXC Database</translation>
</message>
@@ -1147,14 +1249,6 @@ Please consider generating a new key file.</translation>
<translation>Password field</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Toggle password visibility</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Key file selection</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Hardware key slot selection</translation>
</message>
@@ -1219,10 +1313,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
&lt;p&gt;Click for more information...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Key file help</translation>
</message>
@@ -1231,10 +1321,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Select key file...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Cannot use database file as key file</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>You cannot use your database file as a key file.
If you do not have a key file, please leave the field empty.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Key file to unlock the database</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Please touch the button on your YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detecting hardware keys…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>No hardware keys detected</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Select hardware key…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,10 +1377,6 @@ If you do not have a key file, please leave the field empty.</translation>
<translation>Security</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Master Key</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Encryption Settings</translation>
</message>
@@ -1278,6 +1384,10 @@ If you do not have a key file, please leave the field empty.</translation>
<source>Browser Integration</source>
<translation>Browser Integration</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Database Credentials</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ If you do not have a key file, please leave the field empty.</translation>
<translation>KeePassXC-Browser settings</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Disconnect all browsers</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Forg&amp;et all site-specific settings on entries</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Stored keys</translation>
</message>
@@ -1394,7 +1492,7 @@ Permissions to access entries will be revoked.</translation>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>Do you really want to move all legacy browser integration data to the latest standard?
+ <translation>Do you really want to convert all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</translation>
</message>
<message>
@@ -1405,6 +1503,67 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<source>Remove selected key</source>
<translation>Remove selected key</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Move KeePassHTTP attributes to KeePassXC-Browser custom data</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Refresh database root group ID</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Created</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Refresh database ID</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Add additional protection...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>No password set</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continue without password</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>No encryption key added</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>You must add at least one encryption key to secure your database!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Unknown error</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Failed to change database credentials</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1588,6 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<translation>Transform rounds:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Benchmark 1-second delay</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Memory Usage:</translation>
</message>
@@ -1453,14 +1608,6 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
<translation>Change</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Higher values offer more protection, but opening the database will take longer.</translation>
</message>
@@ -1496,7 +1643,7 @@ This is necessary to maintain compatibility with the browser plugin.</translatio
If you keep this number, your database may take hours or days (or even longer) to open!</source>
<translation>You are using a very high number of key transform rounds with Argon2.
-If you keep this number, your database may take hours or days (or even longer) to open!</translation>
+If you keep this number, your database may take hours or longer to open.</translation>
</message>
<message>
<source>Understood, keep number</source>
@@ -1517,7 +1664,7 @@ If you keep this number, your database may take hours or days (or even longer) t
If you keep this number, your database may be too easy to crack!</source>
<translation>You are using a very low number of key transform rounds with AES-KDF.
-If you keep this number, your database may be too easy to crack!</translation>
+If you keep this number, your database will not be protected from brute force attacks.</translation>
</message>
<message>
<source>KDF unchanged</source>
@@ -1537,16 +1684,6 @@ If you keep this number, your database may be too easy to crack!</translation>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> thread</numerusform><numerusform> threads</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Change existing decryption time</translation>
@@ -1579,6 +1716,14 @@ If you keep this number, your database may be too easy to crack!</translation>
<source>Parallelism</source>
<translation>Parallelism</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,23 +1732,23 @@ If you keep this number, your database may be too easy to crack!</translation>
<translation>Exposed Entries</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Don&apos;t e&amp;xpose this database</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Don&apos;t expose this database</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Expose entries &amp;under this group:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Expose entries under this group:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Enable fd.o Secret Service to access these settings.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Enable Secret Service to access these settings.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidgetGeneral</name>
<message>
<source>Database Meta Data</source>
- <translation>Database Meta Data</translation>
+ <translation>Database Metadata</translation>
</message>
<message>
<source>Database name:</source>
@@ -1642,10 +1787,6 @@ If you keep this number, your database may be too easy to crack!</translation>
<translation>Additional Database Settings</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Enable &amp;compression (recommended)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Database name field</translation>
</message>
@@ -1679,6 +1820,10 @@ This action is not reversible.</translation>
<source> (old)</source>
<translation> (old)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Enable compression (recommended)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1858,6 @@ This action is not reversible.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Add additional protection...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>No encryption key added</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>You must add at least one encryption key to secure your database!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>No password set</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Unknown error</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Failed to change master key</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continue without password</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1877,6 @@ Are you sure you want to continue without a password?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistics</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Hover over lines with error icons for further information.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Name</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Value</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Database name</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Description</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Location</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Last saved</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Unsaved changes</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>yes</translation>
- </message>
- <message>
- <source>no</source>
- <translation>no</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>The database was modified, but the changes have not yet been saved to disk.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Number of groups</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Number of entries</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Number of expired entries</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>The database contains entries that have expired.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Unique passwords</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Non-unique passwords</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>More than 10% of passwords are reused. Use unique passwords when possible.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maximum password reuse</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Some passwords are used more than three times. Use unique passwords when possible.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Number of short passwords</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Recommended minimum password length is at least 8 characters.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Number of weak passwords</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Average password length</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 characters</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Average password length is less than ten characters. Longer passwords provide more security.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Please wait, database statistics are being calculated...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1984,6 +1971,10 @@ This is definitely a bug, please report it to the developers.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Open OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2165,6 +2156,14 @@ Disable safe saves and try again?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>This database is opened in read-only mode. Autosave is disabled.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Save database backup</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Could not find database file: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2209,14 +2208,6 @@ Disable safe saves and try again?</translation>
<translation>Select private key</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>File too large to be a private key</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Failed to open private key</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Entry history</translation>
</message>
@@ -2229,10 +2220,6 @@ Disable safe saves and try again?</translation>
<translation>Edit entry</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Different passwords supplied.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>New attribute</translation>
</message>
@@ -2253,29 +2240,13 @@ Disable safe saves and try again?</translation>
<translation><numerusform>%n month</numerusform><numerusform>%n months</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Apply generated password?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Do you want to apply the generated password to this entry?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Entry updated successfully.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Entry has unsaved changes</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>New attribute %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTECTED] Press reveal to view or edit</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n year</numerusform><numerusform>%n years</numerusform></translation>
@@ -2296,6 +2267,26 @@ Disable safe saves and try again?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Are you sure you want to remove this URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Reveal</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Hide</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Unsaved Changes</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Would you like to save changes to this entry?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[PROTECTED] Press Reveal to view or edit</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2371,6 +2362,14 @@ Disable safe saves and try again?</translation>
<source>Background color selection</source>
<translation>Background color selection</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Exclude from database reports</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2379,14 +2378,6 @@ Disable safe saves and try again?</translation>
<translation>Enable Auto-Type for this entry</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Inherit default Auto-Type sequence from the &amp;group</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Use custom Auto-Type sequence:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Window Associations</translation>
</message>
@@ -2442,6 +2433,14 @@ Disable safe saves and try again?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Custom Auto-Type sequence for this window</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Inherit default Auto-Type sequence from the group</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Use custom Auto-Type sequence:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2477,6 +2476,14 @@ Disable safe saves and try again?</translation>
<source>Edit</source>
<translation>Edit</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Use this entry only with HTTP Basic Auth</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2528,18 +2535,10 @@ Disable safe saves and try again?</translation>
<translation>Password:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repeat:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Title:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Presets</translation>
</message>
@@ -2552,10 +2551,6 @@ Disable safe saves and try again?</translation>
<translation>Username:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expires</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Url field</translation>
</message>
@@ -2564,22 +2559,10 @@ Disable safe saves and try again?</translation>
<translation>Download favicon for URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Repeat password field</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Toggle password generator</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Password field</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Toggle password visibility</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Toggle notes visible</translation>
</message>
@@ -2611,6 +2594,18 @@ Disable safe saves and try again?</translation>
<source>Toggle expiration</source>
<translation>Toggle expiration</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notes:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Expires:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2746,10 +2741,6 @@ Disable safe saves and try again?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Form</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Type:</translation>
</message>
@@ -2758,10 +2749,6 @@ Disable safe saves and try again?</translation>
<translation>Path:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Password:</translation>
</message>
@@ -2845,57 +2832,25 @@ Supported extensions are: %1.</translation>
<translation>Path to share file field</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Browser for share file</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Password field</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Toggle password visibility</translation>
+ <source>Clear fields</source>
+ <translation>Clear fields</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Toggle password generator</translation>
+ <source>Browse for share file</source>
+ <translation>Browse for share file</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Clear fields</translation>
+ <source>Browse...</source>
+ <translation>Browse...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Name</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notes</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Expires</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Search</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Type</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Use default Auto-Type sequence of parent group</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Set default Auto-Type se&amp;quence</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Name field</translation>
</message>
@@ -2923,18 +2878,38 @@ Supported extensions are: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Default auto-type sequence field</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Use default icon</translation>
+ <source>Expires:</source>
+ <translation>Expires:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Use default Auto-Type sequence of parent group</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Auto-Type:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Search:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Use custo&amp;m icon</translation>
+ <source>Notes:</source>
+ <translation>Notes:</translation>
</message>
<message>
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Set default Auto-Type sequence</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Add custom icon</translation>
</message>
@@ -2976,7 +2951,7 @@ Supported extensions are: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n icon already exists in the database</numerusform><numerusform>%n icons already exist in the database</numerusform></translation>
+ <translation><numerusform>%n icon already exist in the database</numerusform><numerusform>%n icons already exist in the database</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2999,14 +2974,6 @@ Supported extensions are: %1.</translation>
<translation>Apply selected icon to subgroups and entries</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Apply icon &amp;to ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Apply to this only</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Also apply to child groups</translation>
</message>
@@ -3022,6 +2989,22 @@ Supported extensions are: %1.</translation>
<source>Existing icon selected.</source>
<translation>Existing icon selected.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Use default icon</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Use custom icon</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Apply icon to...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Apply to this group only</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3207,6 +3190,20 @@ This may cause the affected plugins to malfunction.</translation>
<source>Save selected attachment to disk</source>
<translation>Save selected attachment to disk</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Confirm Attachment</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3290,12 +3287,52 @@ This may cause the affected plugins to malfunction.</translation>
<translation>Attachments</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Yes</translation>
+ <source>Size</source>
+ <translation>Size</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Group name</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Entry title</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Entry notes</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Entry expires at</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Creation date</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Last modification date</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Last access date</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Attached files</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Entry size</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Has attachments</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Has TOTP one-time password</translation>
</message>
</context>
<context>
@@ -3395,6 +3432,13 @@ This may cause the affected plugins to malfunction.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Invalid URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3421,8 +3465,14 @@ This may cause the affected plugins to malfunction.</translation>
<translation>Reset to defaults</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Attachments (icon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Has attachments</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Has TOTP</translation>
</message>
</context>
<context>
@@ -3434,21 +3484,74 @@ This may cause the affected plugins to malfunction.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Failed to register DBus service at %1: another secret service is running.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n entry was used by %1</numerusform><numerusform>%n entries was used by %1</numerusform></translation>
+ <translation><numerusform>%n Entry was used by %1</numerusform><numerusform>%n Entries were used by %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Failed to register DBus service at %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>File Name</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Group</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Manage</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Unlock to show</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>None</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Application</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Manage</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Unknown</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Unknown</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</translation>
</message>
</context>
<context>
@@ -3460,14 +3563,10 @@ This may cause the affected plugins to malfunction.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Cannot save file!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Cannot save the native messaging script file.</translation>
+ <source>Online password validation failed</source>
+ <translation>Online password validation failed</translation>
</message>
</context>
<context>
@@ -3537,14 +3636,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Unable to issue challenge-response.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>missing database headers</translation>
</message>
@@ -3570,16 +3661,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Unable to calculate database key</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Unable to issue challenge-response: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Unable to issue challenge-response.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Unable to issue challenge-response: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Unable to calculate database key</translation>
</message>
</context>
<context>
@@ -3589,10 +3688,6 @@ If this reoccurs, then your database file may be corrupt.</translation>
<translation>missing database headers</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Invalid header checksum size</translation>
</message>
@@ -3710,6 +3805,10 @@ If this reoccurs, then your database file may be corrupt.</translation>
<source>(HMAC mismatch)</source>
<translation>(HMAC mismatch)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Unable to calculate database key: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3723,14 +3822,14 @@ If this reoccurs, then your database file may be corrupt.</translation>
<translation>Invalid symmetric cipher IV size.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Failed to serialize KDF parameters variant map</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Unable to calculate database key: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3880,10 +3979,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<translation>Entry string key or value missing</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Duplicate attachment found</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Entry binary key or value missing</translation>
</message>
@@ -3930,6 +4025,29 @@ Line %2, column %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Invalid KeeAgent settings file structure.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Private key is an attachment but no attachments provided.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Private key is empty</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>File too large to be a private key</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Failed to open private key</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3992,10 +4110,6 @@ Line %2, column %3</translation>
<translation>Root</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Unable to calculate master key</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Key transformation failed</translation>
</message>
@@ -4061,7 +4175,7 @@ Line %2, column %3</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Invalid entry uuid field size</translation>
+ <translation>Invalid entry UUID field size</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
@@ -4097,6 +4211,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Unable to calculate database key</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4196,23 +4314,13 @@ If this reoccurs, then your database file may be corrupt.</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out.&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
<translation>Legacy key file format</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Error loading the key file &apos;%1&apos;
@@ -4280,6 +4388,16 @@ Are you sure you want to continue with this file?</source>
<translation>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>You are using a legacy key file format which may become
+unsupported in the future.
+
+You can generate a new key file in the database security settings.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4288,18 +4406,10 @@ Are you sure you want to continue with this file?</translation>
<translation>&amp;Database</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Recent databases</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Help</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntries</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Groups</translation>
</message>
@@ -4316,46 +4426,10 @@ Are you sure you want to continue with this file?</translation>
<translation>&amp;About</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Open database...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Save database</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Close database</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Delete entry</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Edit group</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Delete group</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Sa&amp;ve database as...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Database settings</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clone entry</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copy &amp;username</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copy username to clipboard</translation>
</message>
@@ -4368,10 +4442,6 @@ Are you sure you want to continue with this file?</translation>
<translation>&amp;Settings</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lock databases</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Title</translation>
</message>
@@ -4396,14 +4466,6 @@ Are you sure you want to continue with this file?</translation>
<translation>Copy notes to clipboard</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Export to CSV file...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Set up TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copy &amp;TOTP</translation>
</message>
@@ -4439,7 +4501,7 @@ Are you sure you want to continue with this file?</translation>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>WARNING: You are using an unstable build of KeePassXC!
+ <translation>WARNING: You are using an unstable build of KeePassXC.
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</translation>
</message>
@@ -4448,10 +4510,6 @@ This version is not meant for production use.</translation>
<translation>&amp;Donate</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Report a &amp;bug</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
@@ -4462,66 +4520,26 @@ We recommend you use the AppImage available on our downloads page.</translation>
<translation>&amp;Import</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copy att&amp;ribute...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;New database...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Create a new database</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Merge from database...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Merge from another KDBX database</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;New entry</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Add a new entry</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Edit entry</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>View or edit entry</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;New group</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Add a new group</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Change master &amp;key...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Database settings...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copy &amp;password</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Perform &amp;Auto-Type</translation>
</message>
@@ -4530,33 +4548,17 @@ We recommend you use the AppImage available on our downloads page.</translation>
<translation>Open &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 database...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Import a KeePass 1 database</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV file...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Import a CSV file</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Show TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Show TOTP QR Code...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>NOTE: You are using a pre-release version of KeePassXC!
+ <translation>NOTE: You are using a pre-release version of KeePassXC.
Expect some bugs and minor issues, this version is not meant for production use.</translation>
</message>
<message>
@@ -4576,14 +4578,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>&amp;Export</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Check for Updates...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Downlo&amp;ad all favicons</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Sort &amp;A-Z</translation>
</message>
@@ -4596,48 +4590,290 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>&amp;Password Generator</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Download favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Import a 1Password Vault</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Export to HTML file...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Getting Started</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Vault...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;User Guide</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Import a 1Password Vault</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Keyboard Shortcuts</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Getting Started</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Recent Databases</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Open Getting Started Guide PDF</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Entries</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Online Help...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Copy Att&amp;ribute</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Go to online documentation (opens browser)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;User Guide</translation>
+ <source>View</source>
+ <translation>View</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Open User Guide PDF</translation>
+ <source>Theme</source>
+ <translation>Theme</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Keyboard Shortcuts</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Check for Updates</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Open Database…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Save Database</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Close Database</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;New Database…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Merge From Database…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;New Entry…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Edit Entry…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Delete Entry…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;New Group…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Edit Group…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Delete Group…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Download All &amp;Favicons…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Sa&amp;ve Database As…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>Database &amp;Security…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>Database &amp;Reports...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistics, health check, etc.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Database Settings…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Clone Entry…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Move u&amp;p</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Move entry one step up</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Move do&amp;wn</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Move entry one step down</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Copy &amp;Username</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Copy &amp;Password</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Download &amp;Favicon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Lock Databases</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV File…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML File…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 Database…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password Vault…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV File…</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Show TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Show QR Code</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Set up TOTP…</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Report a &amp;Bug</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>Open Getting Started Guide</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Online Help</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Go to online documentation</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Open User Guide</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Save Database Backup...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Add key to SSH Agent</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Remove key from SSH Agent</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Compact Mode</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automatic</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Light</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Dark</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Classic (Platform-native)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Show Toolbar</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Show Preview Panel</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Don&apos;t show again for this version</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Restart Application?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>You must restart the application to apply this setting. Would you like to restart now?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Database settings</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Edit database settings</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Unlock database</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Unlock database to show more information</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Lock database</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Disconnect</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Disconnect this application</translation>
</message>
</context>
<context>
@@ -4726,10 +4962,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>WizardPage</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>En&amp;cryption Settings</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</translation>
</message>
@@ -4741,27 +4973,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Simple Settings</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Encryption Settings</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Database Credentials</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>A set of credentials known only to you that protects your database.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Database Master Key</translation>
+ <source>Encryption Settings</source>
+ <translation>Encryption Settings</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>A master key known only to you protects your database.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</translation>
</message>
</context>
<context>
@@ -4776,6 +5012,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Password Manager</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4951,6 +5194,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>Passwords match so far</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Toggle Password (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Generate Password (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Warning: Caps Lock enabled!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4975,25 +5230,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Passwords do not match.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Generate master password</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Password field</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Toggle password visibility</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Repeat password field</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Toggle password generator</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5002,10 +5245,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Password:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>strength</translation>
@@ -5055,14 +5294,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Word Separator:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copy</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accept</translation>
- </message>
- <message>
<source>Close</source>
<translation>Close</translation>
</message>
@@ -5159,14 +5390,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Switch to simple mode</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Simple</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Character set to exclude from generated password</translation>
</message>
@@ -5187,14 +5410,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Word Co&amp;unt:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regenerate</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Generated password</translation>
</message>
@@ -5243,10 +5458,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Copy password</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Accept password</translation>
- </message>
- <message>
<source>lower case</source>
<translation>lower case</translation>
</message>
@@ -5259,8 +5470,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Title Case</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Toggle password visibility</translation>
+ <source>Generate Password</source>
+ <translation>Generate Password</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Also choose from:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Additional characters to use for the generated password</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Additional characters</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Word Count:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Apply Password</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Clear</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Regenerate password (%1)</translation>
</message>
</context>
<context>
@@ -5273,6 +5520,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>Statistics</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Very weak password</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Password entropy is %1 bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Weak password</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Used in %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Password is used %1 times</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Password has expired</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Password expiry was %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Password is about to expire</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Password expires in %1 days</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Password will expire soon</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Password expires on %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Health Check</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5412,10 +5711,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Path of the entry to add.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copy an entry&apos;s password to the clipboard.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Path of the entry to clip.</translation>
@@ -5573,14 +5868,6 @@ Available commands:
<translation>Browser Integration</translation>
</message>
<message>
- <source>Press</source>
- <translation>Press</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passive</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH Agent</translation>
</message>
@@ -5619,10 +5906,6 @@ Available commands:
<translation>Successfully added entry %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copy the current TOTP to the clipboard.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Invalid timeout value %1.</translation>
</message>
@@ -5634,14 +5917,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Entry with path %1 has no TOTP set up.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Entry&apos;s current TOTP copied to the clipboard!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Entry&apos;s password copied to the clipboard!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>Clearing the clipboard in %1 second...</numerusform><numerusform>Clearing the clipboard in %1 seconds...</numerusform></translation>
@@ -5862,10 +6137,6 @@ Available commands:
<translation>No program defined for clipboard manipulation</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Unable to start program %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>file empty</translation>
</message>
@@ -5874,18 +6145,6 @@ Available commands:
<translation>%1: (row, col) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recommended)</translation>
</message>
@@ -6136,10 +6395,6 @@ Kernel: %3 %4</translation>
<translation>Display this help.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Yubikey slot used to encrypt the database.</translation>
- </message>
- <message>
<source>slot</source>
<translation>slot</translation>
</message>
@@ -6156,10 +6411,6 @@ Kernel: %3 %4</translation>
<translation>Exit interactive mode.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exports the content of a database to standard output in the specified format.</translation>
</message>
@@ -6200,10 +6451,6 @@ Kernel: %3 %4</translation>
<translation>Path of the new database.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Unable to import XML database export %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Successfully imported database.</translation>
</message>
@@ -6296,10 +6543,6 @@ Kernel: %3 %4</translation>
<translation>Invalid YubiKey slot %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Please touch the button on your YubiKey to unlock %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Enter password to encrypt database (optional): </translation>
</message>
@@ -6315,10 +6558,6 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation>User name</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Challenge Response - Slot %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation><numerusform>Password for &apos;%1&apos; has been leaked %2 time!</numerusform><numerusform>Password for &apos;%1&apos; has been leaked %2 times!</numerusform></translation>
@@ -6331,6 +6570,194 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Show the protected attributes in clear text.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Browser Plugin Failure</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Could not save the native messaging script file for %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Copy an entry&apos;s attribute to the clipboard.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>ERROR: Please specify one of --attribute or --totp, not both.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>ERROR: attribute %1 is ambiguous, it matches %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Attribute &quot;%1&quot; not found.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>slot[:serial]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Target decryption time in MS for the database.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>time</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Set the key file for the database.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Set a password for the database.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Invalid decryption time %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Target decryption time must be between %1 and %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Failed to set database password.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Benchmarking key derivation function for %1ms delay.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Setting %1 rounds for key derivation function.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>error while setting database key derivation settings.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Unable to import XML database: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Show a database&apos;s information.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Name: </translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Description: </translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Cipher: </translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Recycle bin is enabled.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Recycle bin is not enabled.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Invalid command %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Invalid YubiKey serial %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Please touch the button on your YubiKey to continue…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Do you want to create a database with an empty password? [y/N]: </translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Repeat password: </translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Error: Passwords do not match.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>All clipping programs failed. Tried %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 rounds)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 rounds, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Benchmark %1 delay</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6367,6 +6794,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Also show entries that have been excluded from reports</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Hover over reason to show additional details. Double-click entries to edit.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Bad</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Bad — password must be changed</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Poor</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Poor — password should be changed</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Weak</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Weak — consider changing the password</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Excluded)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>This entry is being excluded from reports</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Please wait, health data is being calculated...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Congratulations, everything is healthy!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Title</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Path</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Score</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Reason</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Edit Entry...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Exclude from reports</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Perform Online Analysis</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Also show entries that have been excluded from reports</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Congratulations, no exposed passwords!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Title</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Path</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Password exposed…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Excluded)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>This entry is being excluded from reports</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>once</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>up to 10 times</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>up to 100 times</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>up to 1000 times</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>up to 10,000 times</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>up to 100,000 times</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>up to a million times</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>millions of times</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Edit Entry...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Exclude from reports</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Hover over lines with error icons for further information.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Name</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Value</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Please wait, database statistics are being calculated...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Database name</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Description</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Location</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Last saved</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Unsaved changes</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>yes</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>no</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>The database was modified, but the changes have not yet been saved to disk.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Number of groups</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Number of entries</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Number of expired entries</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>The database contains entries that have expired.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Unique passwords</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Non-unique passwords</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>More than 10% of passwords are reused. Use unique passwords when possible.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maximum password reuse</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Some passwords are used more than three times. Use unique passwords when possible.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Number of short passwords</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Recommended minimum password length is at least 8 characters.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Number of weak passwords</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Entries excluded from reports</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Average password length</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 characters</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Average password length is less than ten characters. Longer passwords provide more security.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6400,6 +7111,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>A confirmation request is not supported by the agent (check options).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Key identity ownership conflict. Refusing to add.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>No agent running, cannot list identities.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6507,26 +7226,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Don&apos;t confirm when entries are deleted by clients.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Exposed database groups:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>File Name</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Group</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Manage</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Authorization</translation>
</message>
@@ -6535,40 +7238,20 @@ Kernel: %3 %4</translation>
<translation>These applications are currently connected:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Application</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Disconnect</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Database settings</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Edit database settings</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Unlock database</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Unlock database to show more information</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Don&apos;t confirm when entries are deleted by clients</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Lock database</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Unlock to show</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Warning:&lt;/b&gt; </translation>
</message>
<message>
- <source>None</source>
- <translation>None</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Save current changes to activate the plugin and enable editing of this section.</translation>
</message>
</context>
<context>
@@ -6587,7 +7270,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Own certificate</source>
- <translation>Own certificate</translation>
+ <translation>Personal certificate</translation>
</message>
<message>
<source>Fingerprint:</source>
@@ -6724,7 +7407,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Export own certificate</source>
- <translation>Export own certificate</translation>
+ <translation>Export personal certificate</translation>
</message>
<message>
<source>Known shares</source>
@@ -6841,10 +7524,6 @@ Kernel: %3 %4</translation>
<translation>Successful signed import</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Unexpected error</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Unsigned share container are not supported - import prevented</translation>
</message>
@@ -7014,6 +7693,13 @@ Example: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Invalid URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7104,6 +7790,53 @@ Example: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Configured Slot - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Challenge Response - Slot %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Press</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passive</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Invalid slot specified - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>The YubiKey interface has not been initialized.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Hardware key is currently in use.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Could not find hardware key with serial number %1. Please plug it in to continue.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Hardware key timed out waiting for user interaction.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>A USB error ocurred when accessing the hardware key: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Failed to complete a challenge-response, the specific error was: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7118,14 +7851,6 @@ Example: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>No YubiKey detected, please ensure it&apos;s plugged in.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>No YubiKey inserted.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Refresh hardware tokens</translation>
</message>
@@ -7133,5 +7858,21 @@ Example: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Hardware key slot selection</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Could not find any hardware keys!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Selected hardware key slot does not support challenge-response!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detecting hardware keys…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>No hardware keys detected</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_es.ts b/share/translations/keepassx_es.ts
index fde22b2fe..989215ec9 100644
--- a/share/translations/keepassx_es.ts
+++ b/share/translations/keepassx_es.ts
@@ -11,7 +11,7 @@
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Comunique defectos a: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>Comunique defectos en: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
@@ -49,12 +49,32 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Habilitar agente de SSH (requiere reinicio)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation>Usar OpenSSH para Windows en lugar de Pageant</translation>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation>Utilizar OpenSSH para Windows en lugar de Pageant</translation>
+ <source>Enable SSH Agent integration</source>
+ <translation>Habilitar la integración del Agente de SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Valor SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>Anulación de SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(vacío)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>No hay ningún socket de agente SSH disponible. Asegúrese de que existe SSH_AUTH_SOCK variable de entorno o establezca una invalidación.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>¡La conexión del agente de SSH está funcionando!</translation>
</message>
</context>
<context>
@@ -103,12 +123,24 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>¿Desea reiniciar la configuración general y de seguridad a sus valores por defecto?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monocromo (claro)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monocromo (oscuro)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Colorido</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
<message>
<source>Basic Settings</source>
- <translation>Configuraciones básicas</translation>
+ <translation>Configuraciones Básicas</translation>
</message>
<message>
<source>Startup</source>
@@ -116,7 +148,7 @@
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>Inicie solo una instancia de KeePassXC</translation>
+ <translation>Iniciar solo una instancia de KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
@@ -127,48 +159,28 @@
<translation>Administración de archivos</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Hacer una copia de seguridad de la base de datos antes de guardar</translation>
</message>
<message>
<source>Automatically save after every change</source>
- <translation>Guardar automáticamente tras cada cambio</translation>
+ <translation>Guardar automáticamente después de cada cambio</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Guardar automáticamente al salir</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>No marcar la base de datos como modificada cuando los cambios no afecten a los datos (ej. expandir grupos)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Recargar automáticamente la base de datos cuando sea modificada externamente</translation>
</message>
<message>
<source>Entry Management</source>
- <translation>Gestión del apunte</translation>
+ <translation>Gestión de entrada</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>Utilizar icono del grupo en la creación del apunte</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>Ocultar apunte del panel de vista previa</translation>
- </message>
- <message>
- <source>General</source>
- <translation>General</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Ocultar barra de herramientas (iconos)</translation>
+ <translation>Usar icono del grupo en la creación de entrada</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
@@ -179,10 +191,6 @@
<translation>Mostrar icono en la bandeja del sistema</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Icono de bandeja del sistema oscuro</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Ocultar la ventana a la bandeja del sistema cuando se minimiza</translation>
</message>
@@ -192,23 +200,15 @@
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
- <translation>Utilizar título del apunte para emparejar ventanas en autoescritura global</translation>
+ <translation>Usar título del apunte para emparejar ventanas en autotecleo global</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
- <translation>Utilizar URL del apunte para emparejar ventanas en autoescritura global</translation>
+ <translation>Usar URL del apunte para emparejar ventanas en autotecleo global</translation>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Siempre solicitar antes de hacer autoescritura</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Atajo global de autoescritura</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Retardo de escritura de la autoescritura</translation>
+ <translation>Siempre preguntar antes de autoescritura</translation>
</message>
<message>
<source> ms</source>
@@ -216,10 +216,6 @@
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Retardo de inicio de autoescritura</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Barra de herramientas móvil</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Incluir versiones beta al comprobar actualizaciones</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Estilo del botón:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Idioma:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Estilo de botón de barra de herramientas</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Utilizar tipografía monoespacio para Notas</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Selección de idioma</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Restaurar configuración por defecto</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Atajo global de autoescritura</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Retardo de inicio de autoescriturura en milisegundos</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Inicie automáticamente KeePassXC al inicio del sistema</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Marcar la base de datos como modificada cuando los cambios no afecten a los datos (ej. expandir grupos)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Interfaz de Usuario</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Estilo del botón de la barra de botones:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Utilizar tipografía mono espaciadas para notas</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Estilo de ícono de en la barra de tareas:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Restaurar configuración por defecto...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Retardo de escritura de la Autoescritura:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Atajo global de Autoescritura:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Retardo de inicio de Autoescritura:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -330,7 +358,7 @@
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> seg</translation>
+ <translation> segundos</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
@@ -362,27 +390,15 @@
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Rebloquear la base de datos tras realizar autoescritura</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>No solicitar repetición de la contraseña cuando está visible</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>No ocultar las contraseñas durante la edición de ellas</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>No utilice marcador de posición para los campos de contraseña vacíos</translation>
+ <translation>Volver a bloquear la base de datos tras realizar una autoescritura</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Ocultar contraseñas en el panel de vista previa del apunte</translation>
+ <translation>Ocultar contraseñas en entrada del panel de vista previa</translation>
</message>
<message>
<source>Hide entry notes by default</source>
- <translation>Ocultar notas del apunte por defecto</translation>
+ <translation>Ocultar notas de entrada por defecto</translation>
</message>
<message>
<source>Privacy</source>
@@ -413,36 +429,48 @@
<source>Clear search query after</source>
<translation>Vaciar consulta de búsqueda tras</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Pedir repetición de la contraseña cuando está visible</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Ocultar las contraseñas durante la edición de ellas</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Usar marcador de posición para los campos de contraseña vacíos</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>No se puede encontrar un apunte que corresponda al título de la ventana:</translation>
+ <translation>No se puede encontrar una entrada que corresponda al título de la ventana:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Autoescritura - KeePassXC</translation>
+ <translation>Autotecleo - KeePassXC</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Autoescritura</translation>
+ <translation>Autotecleo</translation>
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>¡La sintaxis de la sentencia de su autoescritura es incorrecta!</translation>
+ <translation>¡La sintaxis de la sentencia de su autotecleo es incorrecta!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>Este mandato de autoescritura contiene un retraso muy largo. ¿Desea continuar?</translation>
+ <translation>Este mandato de autotecleo contiene un retraso muy largo. ¿Desea continuar?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Este mandato de autoescritura contiene pulsaciones de teclas muy lentas. ¿Desea continuar?</translation>
+ <translation>Este mandato de autotecleo contiene pulsaciones de teclas muy lentas. ¿Desea continuar?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Este mandato de autoescritura contiene argumentos que se repiten muy a menudo. ¿Desea continuar?</translation>
+ <translation>Este mandato de autotecleo contiene argumentos que se repiten muy a menudo. ¿Desea continuar?</translation>
</message>
<message>
<source>Permission Required</source>
@@ -480,7 +508,7 @@
</message>
<message>
<source>Username</source>
- <translation>Usuario</translation>
+ <translation>Usuario:</translation>
</message>
<message>
<source>Sequence</source>
@@ -517,7 +545,7 @@
</message>
<message>
<source>Select entry to Auto-Type:</source>
- <translation>Seleccionar apunte para autoescritura:</translation>
+ <translation>Seleccionar entrada para autoescritura:</translation>
</message>
<message>
<source>Search...</source>
@@ -527,41 +555,43 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Confirmación de acceso KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>Solicitud de Acceso KeePassXC-Browser</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Recordar esta decisión</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 está solicitando acceso a las siguientes entradas:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Permitir</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Recordar el acceso a las entradas marcadas</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Denegar</translation>
+ <source>Remember</source>
+ <translation>Recuerda</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 ha solicitado acceso a las contraseñas de los siguientes elementos.
-Seleccione si desea autorizar su acceso.</translation>
+ <source>Allow access to entries</source>
+ <translation>Permitir acceso a las entradas</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Permitir acceso</translation>
+ <source>Allow Selected</source>
+ <translation>Permitir Seleccionado</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Denegar acceso</translation>
+ <source>Deny All</source>
+ <translation>Denegar Todo</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Deshabilitar para este sitio</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>Guarda apunte KeePassXC-Browser</translation>
+ <translation>KeePassXC-Browser Guardar Entrada</translation>
</message>
<message>
<source>Ok</source>
@@ -579,199 +609,261 @@ Por favor, seleccione la base de datos correcta para guardar las credenciales.</
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Cuadro de diálogo</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Solicitud de asociación de nueva clave</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Esto es necesario para acceder a las bases de datos con KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Guardar y permitir acceso</translation>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: ¿Sobrescribir clave existente?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Permitir la integración con estos exploradores:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Existe una llave con el nombre «%1».
+¿Desea sobrescribirlo?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Actualizar Entrada</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>¿Desea actualizar la información en %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Abortar</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Convirtiendo atributos a datos personalizados...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Mostrar una &amp;notificación cuando las credenciales son requeridas</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: atributos de KeePassHTTP convertidos</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Solicitar el desblo&amp;queo de la base de datos si se encuentra bloqueada</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Atributos correctamente convertidos desde %1 apunte(s).
+Movió %2 llaves a datos personalizados.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n llave(s) movida(s) a datos propios exitosamente.</numerusform><numerusform>%n llave(s) movida(s) a datos propios correctamente.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Sólo se muestran las entradas con el mismo esquema (http://, https://,...)</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: ¡No se encontró ningún apunte con los atributos KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Coinciden con el esquema de URL (p.e. https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>La base de datos activa no contiene una entrada con atributos de KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Sólo devolver los resultados similares para una URL específica en vez de todas las entradas para todo el dominio.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: detectada configuración de integración del explorador heredada </translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Mostrar sólo las mejores credenciales</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: crear un grupo nuevo</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar credenciales por &amp;título</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Se ha recibido una solicitud para crear un grupo «%1».
+¿Desea crear este grupo?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar credenciales por &amp;usuario</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Sus configuraciones de KeePassXC-Browser necesitan moverse a las configuraciones de base de datos.
+Es necesario para mantener sus conexiones presentes del navegador.
+¿Desea migrar sus configuraciones existentes ahora?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avanzado</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>No mostrar esta advertencia de nuevo</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nunca &amp;solicitar antes de acceder a las credenciales</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Ha recibido una solicitud de asociación para la siguiente base de datos:
+%1
+
+Asigne a la conexión un nombre único o identificativo, por ejemplo:
+portatil-chrome.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>No solicitar y guardar los credenciales</translation>
+ <source>Dialog</source>
+ <translation>Cuadro de diálogo</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Buscar en todas las bases de datos abiertas las credenciales correspondientes</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Esto es necesario para acceder a las bases de datos con KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>No se permite crear o actualizar campos de caracteres automáticamente.</translation>
+ <source>Enable browser integration</source>
+ <translation>Habilitar integración con explorador</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Mostra&amp;r campos de caracteres avanzados que comiencen con «KPH: » </translation>
+ <source>General</source>
+ <translation>General</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Actualizaciones KeePassXC o keepassxc-proxy binario automáticamente para obtener los mensajes nativos en el arranque.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Los exploradores instalados como snaps no están soportados.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Actualizar archivo manifiesto de mensajería &amp;nativa al iniciar</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Permitir la integración con estos navegadores:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Soporta una aplicación proxy entre KeePassXC y una extensión de explorador.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Utilizar un &amp;proxy entre KeePassXC y la extensión del explorador</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Utilizar un proxy instalado manualmente</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Utilizar una ubicación proxy &amp;personalizada</translation>
+ <source>Tor Browser</source>
+ <translation>Navegador Tor</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Explorar…</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Advertencia:&lt;/b&gt; las siguientes opciones pueden ser peligrosas.</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Elegir una ubicación de proxy personalizada</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Navegador &amp;Tor</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Mostrar una notificación cuando las credenciales son requeridas</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Archivos ejecutables</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Solicitar el desbloqueo de la base de datos si se encuentra bloqueada</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Todos los archivos</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Sólo se muestran las entradas con el mismo esquema (http://, https://,...)</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>No solicitar permiso para autenticación HTTP &amp;básica</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Iguala el formato de URL (e.g., https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Debido al modo aislado de Snap, debe ejecutar un código para permitir la integración con el explorador.&lt;br/&gt;Puedes obtener este código desde %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Sólo devolver los resultados similares para una URL específica en vez de todas las entradas para todo el dominio.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Por favor vea las instrucciones especiales para el uso de extensiones del explorador debajo</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Devolver solo las credenciales con mejor coincidencia</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser es necesario para que la integración con el explorador funcione. &lt;br /&gt;Descárguelo para %1 y %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Devuelve las credenciales expiradas. La cadena [expirada] es añadida al título.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Permitir devolver credenciales caducadas</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Devuelve las credenciales expiradas. La cadena [expirada] es añadida al título.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Todas las bases de datos conectadas a la extensión devolverán las credenciales coincidentes.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Permitir devolver credenciales expiradas.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Buscar en todas las bases de datos abiertas las credenciales correspondientes</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Habilitar integración con explorador</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordenar las credenciales coincidentes por título</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Los exploradores instalados como snaps no están soportados.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordenar las credenciales coincidentes por nombre de usuario</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Todas las bases de datos conectadas a la extensión devolverán las credenciales coincidentes.</translation>
+ <source>Advanced</source>
+ <translation>Avanzado</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nunca solicitar antes de acceder a las credenciales</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nunca solicitar antes de actualizar las credenciales</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>No solicitar permiso para Autenticación HTTP Básica</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>No se permite crear o actualizar campos de caracteres automáticamente.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Devuelve campos de texto avanzados que comienzan por &quot;KPH:&quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>No permitir ventana emergente sugiriendo migración de configuración antigua de KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;No preguntar por migración de configuración de KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>No preguntar por migración de configuración de KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Actualizaciones KeePassXC o keepassxc-proxy binario automáticamente para obtener los mensajes nativos en el arranque.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Actualizar archivo manifiesto de mensajería nativa al iniciar</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Utilizar un proxy instalado manualmente</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Usar una ubicación de proxy personalizada</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,122 +874,96 @@ Por favor, seleccione la base de datos correcta para guardar las credenciales.</
<translation>Explorar para archivo personalizado proxy</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Advertencia&lt;/b&gt;, no se encontró la aplicación keepassxc-proxy!&lt;br /&gt;Compruebe el directorio de instalación de KeePassXC o confirme la ruta personalizada en las opciones avanzadas.&lt;br /&gt;La integración del explorador NO FUNCIONARÁ sin la aplicación proxy.&lt;br /&gt;Ruta esperada: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Explorar…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: solicitud de asociación de nueva clave</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Usar una ubicación de proxy personalizada</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Guardar y permitir acceso</translation>
+ <source>Browser type:</source>
+ <translation>Tipo de navegador:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: ¿sobrescribir clave existente?</translation>
+ <source>Toolbar button style</source>
+ <translation>Estilo de botón de barra de herramientas</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Existe una llave con el nombre «%1».
-¿Desea sobrescribirlo?</translation>
+ <source>Config Location:</source>
+ <translation>Localización de la configuración:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: actualizar apunte</translation>
+ <source>Custom browser location field</source>
+ <translation>Campo de ubicación del navegador personalizado</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>¿Desea actualizar la información en %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abortar</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Busque la ruta del explorador personalizada</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Convirtiendo atributos a datos personalizados ...</translation>
+ <source>Custom extension ID:</source>
+ <translation>ID de extensión personalizado:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: atributos de KeePassHTTP convertidos</translation>
+ <source>Custom extension ID</source>
+ <translation>ID de extensión personalizado</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Atributos correctamente convertidos desde %1 apunte(s).
-Movidas %2 claves a datos personalizados.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n llave movida a datos propios correctamente.</numerusform><numerusform>%n llaves movidas a datos propios correctamente.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Debido al modo aislado de Snap, debe ejecutar un código para permitir la integración con el navegador.&lt;br/&gt;Puede obtener este código de %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: ¡no se encontró un apunte con los atributos KeePassHTTP!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser es necesario para que la integración del navegador funcione.&lt;br /&gt;Descárgalo desde %1 y %2 y %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>La base de datos activa no contiene un apunte con atributos de KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Vea las instrucciones especiales para el uso de extensiones del explorador debajo.</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: detectada configuración de integración del explorador heredada </translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Error:&lt;/b&gt; ¡No se puede encontrar la ubicación de proxy personalizada!&lt;br/&gt;La integración del navegador NO funcionará sin la aplicación proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: crear un grupo nuevo</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Advertencia:&lt;/b&gt; las siguientes opciones pueden ser peligrosas.</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Una solicitud para crear un nuevo grupo «%1» se ha recibido.
-¿Desea crear este grupo?
-</translation>
+ <source>Executable Files</source>
+ <translation>Ficheros ejecutables</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Sus configuraciones de KeePassXC-Browser necesitan moverse a las configuraciones de base de datos.
-Es necesario para mantener sus conexiones presentes del explorador.
-¿Desea migrar sus configuraciones existentes ahora?</translation>
+ <source>All Files</source>
+ <translation>Todos los ficheros</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>No mostrar esta advertencia de nuevo</translation>
+ <source>Select custom proxy location</source>
+ <translation>Elegir una ubicación de proxy personalizada</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Ha recibido una solicitud de asociación para la siguiente base de datos:
-%1
-
-Asigne a la conexión un nombre único o identificativo, por ejemplo:
-portatil-chrome.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
- <translation>Opciones de clonado</translation>
+ <translation>Opciones de Clonado</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Añadir «- Clon» al título</translation>
+ <translation>Adjuntar «- Clon» al título</translation>
</message>
<message>
<source>Replace username and password with references</source>
- <translation>Reemplazar usuario y contraseña con referencias</translation>
+ <translation>Reemplace usuario y contraseña con referencias</translation>
</message>
<message>
<source>Copy history</source>
@@ -912,7 +978,7 @@ portatil-chrome.</translation>
</message>
<message>
<source>filename</source>
- <translation>nombre del archivo</translation>
+ <translation>nombre del fichero</translation>
</message>
<message>
<source>size, rows, columns</source>
@@ -939,28 +1005,16 @@ portatil-chrome.</translation>
<translation>Los comentarios comienzan con</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>El primer registro tiene los nombres de los campos</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>Considerar «\» como un caracter de escape </translation>
+ <translation>Considerar &apos;\&apos; como un carácter de escape </translation>
</message>
<message>
<source>Preview</source>
- <translation>Vista previa</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Distribución en columnas</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>No presente en el archivo CSV</translation>
+ <translation>Vista anticipada</translation>
</message>
<message>
<source>Imported from CSV file</source>
- <translation>Importado de un archivo CSV</translation>
+ <translation>Importado de un fichero CSV</translation>
</message>
<message>
<source>Original data: </source>
@@ -971,20 +1025,12 @@ portatil-chrome.</translation>
<translation>Error</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nombre de campo vacío %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>columna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
- <translation>¡Error(es) detectado(s) en el archivo CSV!</translation>
+ <translation>¡Error(es) detectado(s) en el fichero CSV!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n mensaje más descartado]</numerusform><numerusform>[%n mensajes más descartados]</numerusform></translation>
+ <translation><numerusform>[%n más mensaje(s) omitidos]</numerusform><numerusform>[%n más mensaje(s) descartado(s)]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1008,12 +1054,64 @@ portatil-chrome.</translation>
<source>CSV import preview</source>
<translation>Previsualización importar CSV </translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Columnas Asociadas</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Última modificación</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Contraseña</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creado</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Anotaciones</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Usuario</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Líneas de encabezado salteados</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>La primera línea tiene los nombres de los campos</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>No presente</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Columna %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n columna</numerusform><numerusform>%n columnas</numerusform></translation>
+ <translation><numerusform>%n columna(s)</numerusform><numerusform>%n columna(s) </numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1022,27 +1120,22 @@ portatil-chrome.</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n byte</numerusform><numerusform>%n bytes</numerusform></translation>
+ <translation><numerusform>%n byte(s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n fila</numerusform><numerusform>%n filas</numerusform></translation>
+ <translation><numerusform>%n fila(s)</numerusform><numerusform>%n fila(s)</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Raíz</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
- <translation>El archivo %1 no existe.</translation>
+ <translation>El fichero %1 no existe.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
- <translation>Incapaz de abrir el archivo %1.</translation>
+ <translation>Incapaz de abrir el fichero %1.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
@@ -1050,11 +1143,11 @@ portatil-chrome.</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>El archivo no se puede escribir, ya que se ha abierto en modo de solo lectura.</translation>
+ <translation>El fichero no se puede escribir, ya que se ha abierto en modo de solo lectura.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Llave no está transformada. Esto es un defecto, por favor, informe sobre él a los desarrolladores</translation>
+ <translation>Llave no está transformada. Esto es un defecto, por favor, ¡comunique de éste a los desarrolladores!</translation>
</message>
<message>
<source>%1
@@ -1076,7 +1169,20 @@ Copiar de seguridad de base de datos ubicada en %2</translation>
</message>
<message>
<source>Recycle Bin</source>
- <translation>Papelera de reciclaje</translation>
+ <translation>Papelera</translation>
+ </message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Contraseñas</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Guardado de la base de datos actualmente en proceso.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>No se puede guardar, la base de datos no a sido inicializada.</translation>
</message>
</context>
<context>
@@ -1090,7 +1196,7 @@ Copiar de seguridad de base de datos ubicada en %2</translation>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>Fichero clave:</translation>
+ <translation>Archivo llave:</translation>
</message>
<message>
<source>Refresh</source>
@@ -1105,10 +1211,10 @@ Copiar de seguridad de base de datos ubicada en %2</translation>
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Está utilizando un formato de fichero clave heredado que puede convertirse
-en no soportado en el futuro.
+ <translation>Está utilizando un formato de fichero llave heredado que puede convertirse
+ en no soportado en el futuro.
-Considere generar un nuevo archivo llave.</translation>
+Considere generar un nuevo fichero llave.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1120,21 +1226,17 @@ Considere generar un nuevo archivo llave.</translation>
</message>
<message>
<source>Key files</source>
- <translation>Ficheros clave</translation>
+ <translation>Ficheros llave</translation>
</message>
<message>
<source>Select key file</source>
- <translation>Seleccionar fichero clave</translation>
+ <translation>Seleccionar archivo llave</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
<translation>Fallo al abrir fichero clave: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Seleccionar ranura...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Desbloquear base de datos KeePassXC</translation>
</message>
@@ -1147,14 +1249,6 @@ Considere generar un nuevo archivo llave.</translation>
<translation>Campo de contraseña</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Intercambiar visibilidad de contraseña</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Selección de fichero clave</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Selección de ranura de clave hardware</translation>
</message>
@@ -1164,7 +1258,7 @@ Considere generar un nuevo archivo llave.</translation>
</message>
<message>
<source>Browse...</source>
- <translation>Explorar...</translation>
+ <translation>Explorar…</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -1219,10 +1313,6 @@ Para prevenir que aparezca este error, debe ir a «Configuración de base de dat
&lt;p&gt;Clic para más información...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Adicionalmente a su contraseña maestra, puede usar un archivo secreto para mejorar la seguridad de su base de datos. Dicho archivo puede ser generado en la configuración de seguridad de su base de datos.&lt;/p&gt;&lt;p&gt;Este no es su archivo de base de datos *.kdbx. &lt;br&gt;Si no tiene un fichero clave, deje el campo vacío.&lt;/p&gt;&lt;p&gt;Clic para más información...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Ayuda de fichero clave</translation>
</message>
@@ -1231,10 +1321,6 @@ Para prevenir que aparezca este error, debe ir a «Configuración de base de dat
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Seleccionar fichero clave...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>No se puede usar una base de datos como fichero clave</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>No puede usar una base de datos como fichero clave.
Si no tiene un fichero clave, deje el campo vacío.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Archivo de llave para desbloquear la base de datos</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>¡Por favor presione el botón en su YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detectando llaves por hardware...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>No se detectaron llaves de hardware</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,16 +1377,16 @@ Si no tiene un fichero clave, deje el campo vacío.</translation>
<translation>Seguridad</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Clave maestra</translation>
- </message>
- <message>
<source>Encryption Settings</source>
- <translation>Configuraciones de cifrado</translation>
+ <translation>Configuraciones de Cifrado</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integración con exploradores</translation>
+ <translation>Integración con navegador</translation>
+ </message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1286,18 +1396,6 @@ Si no tiene un fichero clave, deje el campo vacío.</translation>
<translation>Configuraciones del KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Desconectar todos los exploradores</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Olvid&amp;ar todas las configuraciones específicas del sitio en las entradas</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Mover los atributos de KeePassHTTP a los datos &amp;personalizados de KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Claves almacenadas</translation>
</message>
@@ -1307,13 +1405,13 @@ Si no tiene un fichero clave, deje el campo vacío.</translation>
</message>
<message>
<source>Delete the selected key?</source>
- <translation>¿Eliminar la clave seleccionada?</translation>
+ <translation>¿Eliminar clave seleccionada?</translation>
</message>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>¿Desea eliminar la clave seleccionada?
-Esto puede impedir la conexión con el complemento del explorador.</translation>
+ <translation>¿Desea borrar la clave seleccionada?
+Esto puede impedir la conexión con el complemento del navegador.</translation>
</message>
<message>
<source>Key</source>
@@ -1325,11 +1423,11 @@ Esto puede impedir la conexión con el complemento del explorador.</translation>
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>Habilitar la integración del explorador para acceder a esta configuración.</translation>
+ <translation>Habilitar la integración del navegador para acceder a esta configuración.</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>Desconectar todos los navegadores</translation>
+ <translation>Desconectar todos los exploradores</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
@@ -1339,7 +1437,7 @@ Esto puede impedir la conexión con el complemento del explorador.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
- <translation>KeePassXC: no se encontró ninguna clave</translation>
+ <translation>KeePassXC: No se encontró ninguna clave</translation>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
@@ -1347,25 +1445,25 @@ Esto puede impedir la conexión con el complemento del explorador.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC: las claves se eliminaron de la base de datos</translation>
+ <translation>KeePassXC: Las claves se eliminaron de la base de datos</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Quitada con éxito %n llave de cifrado de configuración de KeePassXC.</numerusform><numerusform>Eliminadas con éxito %n llaves de cifrado de configuración de KeePassXC.</numerusform></translation>
+ <translation><numerusform>Correctamente borrada %n clave de cifrado de la configuración KeePassXC.</numerusform><numerusform>Correctamente borrada %n claves de cifrado de la configuración KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>Olvidar todas las configuraciones específicas del sitio en las entradas</translation>
+ <translation>Olvidar todas las opciones del sitio específico en los apuntes</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>¿Desea olvidar todas las configuraciones específicas del sitio en cada apunte?
-Los permisos para acceder a los apuntes serán revocados.</translation>
+ <translation>¿Desea olvidar todas las configuraciones específicas del sitio en cada entrada?
+Los permisos para acceder a las entradas serán revocados.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>Eliminando permisos almacenados...</translation>
+ <translation>Eliminando permisos almacenados…</translation>
</message>
<message>
<source>Abort</source>
@@ -1377,11 +1475,11 @@ Los permisos para acceder a los apuntes serán revocados.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Eliminados con éxito permisos de %n apunte.</numerusform><numerusform>Eliminados con éxito permisos de %n apuntes.</numerusform></translation>
+ <translation><numerusform>Permisos eliminados correctamente desde %n apunte.</numerusform><numerusform>Permisos eliminados correctamente desde %n apuntes.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC: ¡no se encontró ningún apunte con permisos!</translation>
+ <translation>KeePassXC: ¡No se encontró ninguna entrada con permisos!</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
@@ -1394,8 +1492,8 @@ Los permisos para acceder a los apuntes serán revocados.</translation>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>¿Desea mover todos los datos de integración del explorador heredado al último estándar?
-Esto es necesario para mantener la compatibilidad con el complemento del explorador.</translation>
+ <translation>¿Desea mover todos los datos de integración del navegador heredado al último estándar?
+Esto es necesario para mantener la compatibilidad con el complemento del navegador.</translation>
</message>
<message>
<source>Stored browser keys</source>
@@ -1405,6 +1503,66 @@ Esto es necesario para mantener la compatibilidad con el complemento del explora
<source>Remove selected key</source>
<translation>Eliminar clave seleccionada</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creado</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Agregar protección adicional…</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Contraseña no establecida</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>¡ADVERTENCIA! No ha establecido una contraseña. Se desaconseja el uso de una base de datos sin contraseña.
+
+¿Desea continuar sin contraseña?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continuar sin contraseña</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>No se agregó clave de cifrado</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>¡Debe añadir al menos una clave de cifrado para proteger su base de datos!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Error desconocido</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1587,6 @@ Esto es necesario para mantener la compatibilidad con el complemento del explora
<translation>Rondas de transformación:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Medición de retraso de un segundo</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Memoria utilizada:</translation>
</message>
@@ -1442,7 +1596,7 @@ Esto es necesario para mantener la compatibilidad con el complemento del explora
</message>
<message>
<source>Decryption Time:</source>
- <translation>Tiempo de descifrado:</translation>
+ <translation>Tiempo de Descifrado:</translation>
</message>
<message>
<source>?? s</source>
@@ -1453,14 +1607,6 @@ Esto es necesario para mantener la compatibilidad con el complemento del explora
<translation>Cambiar</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Los valores más altos ofrecen más protección, pero la apertura de la base de datos llevará más tiempo.</translation>
</message>
@@ -1488,7 +1634,7 @@ Esto es necesario para mantener la compatibilidad con el complemento del explora
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Número de rondas demasiado altas</translation>
+ <translation>Número de rondas demasiado alto</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
@@ -1509,7 +1655,7 @@ Si conserva este número, ¡su base de datos puede tardar horas o días (o inclu
<message>
<source>Number of rounds too low</source>
<comment>Key transformation rounds</comment>
- <translation>Número de rondas demasiado bajas</translation>
+ <translation>Número de rondas demasiado bajo</translation>
</message>
<message>
<source>You are using a very low number of key transform rounds with AES-KDF.
@@ -1537,16 +1683,6 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!<
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>hilo</numerusform><numerusform>hilos</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Cambiar el tiempo de descifrado</translation>
@@ -1579,6 +1715,14 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!<
<source>Parallelism</source>
<translation>Paralelismo</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1731,16 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!<
<translation>Exponer entradas</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>No e&amp;xponer esta base de datos</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>No exponga esta base de datos</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Exponer entradas &amp;bajo este grupo:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Exponga las entradas bajo este grupo:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Habilitar servicio de secretos fd.o para acceder a esta configuración.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Habilite el servicio secreto para acceder a esta configuración.</translation>
</message>
</context>
<context>
@@ -1619,7 +1763,7 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!<
</message>
<message>
<source>History Settings</source>
- <translation>Configuración del historial</translation>
+ <translation>Configuración del Historial</translation>
</message>
<message>
<source>Max. history items:</source>
@@ -1631,21 +1775,17 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!<
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation>MiB</translation>
</message>
<message>
<source>Use recycle bin</source>
- <translation>Utilizar papelera de reciclaje</translation>
+ <translation>Usar papelera de reciclaje</translation>
</message>
<message>
<source>Additional Database Settings</source>
<translation>Configuraciones adicionales de la base de datos</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Habilitar &amp;compresión (recomendado)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Campo nombre de base de datos</translation>
</message>
@@ -1679,6 +1819,10 @@ Esta acción no es reversible.</translation>
<source> (old)</source>
<translation>(viejo)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Habilitar compresión (recomendado)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1857,6 @@ Esta acción no es reversible.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Añadir protección adicional...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>No se añadió clave de cifrado</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>¡Debe añadir al menos una clave de cifrado para proteger su base de datos!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Contraseña no establecida</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>¡ADVERTENCIA! No ha establecido una contraseña. Se desaconseja el uso de una base de datos sin contraseña.
-
-¿Desea continuar sin contraseña?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Error desconocido</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Error al cambiar la clave maestra</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continuar sin contraseña</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1876,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Estadísticas</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Ratón sobre líneas con iconos de error para información adicional.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nombre</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valor</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nombre de la base de datos</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Descripción</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Localización</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Última guardada</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Cambios no guardados</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>sí</translation>
- </message>
- <message>
- <source>no</source>
- <translation>no</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>La base de datos fue modificada pero los cambios no han sido guardados a disco todavía.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Número de grupos</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Número de entradas</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Número de entradas expiradas</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>La base de datos contiene entradas que han expirado.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Contraseñas únicas</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Contraseñas no únicas</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Más del 10% de las contraseñas son reusadas. Use contraseñas únicas si es posible.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Reuso máximo de contraseña</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Algunas contraseñas son usadas más de tres veces. Use contraseñas únicas si es posible.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Número de contraseñas cortas</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>La longitud mínima recomendada de contraseña es de al menos 8 caracteres.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Número de contraseñas débiles</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Se recomienda usar largas contraseñas aleatorias con una calificación de «buena» o «excelente».</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Longitud media de contraseña</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caracteres</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>La longitud media de contraseña es menos de diez caracteres. Las contraseñas más largas proporcionan más seguridad.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Espere, calculando las estadísticas de la base de datos...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1897,7 +1883,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>All files</source>
- <translation>Todos los archivos</translation>
+ <translation>Todos los ficheros</translation>
</message>
<message>
<source>Open database</source>
@@ -1905,7 +1891,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>CSV file</source>
- <translation>Archivo CSV</translation>
+ <translation>Fichero CSV</translation>
</message>
<message>
<source>Merge database</source>
@@ -1925,25 +1911,25 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>La escritura del archivo CSV falló.</translation>
+ <translation>Ha fallado la escritura del fichero CSV.</translation>
</message>
<message>
<source>Database creation error</source>
- <translation>Error en creación de la base de datos.</translation>
+ <translation>Error de creación de la base de datos</translation>
</message>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
<translation>La base de datos creada no tiene clave o KDF, negándose a guardarla.
-Esto es definitivamente un defecto, por favor infórmelo a los desarrolladores.</translation>
+Esto es definitivamente un error, por favor repórtelo a los desarrolladores.</translation>
</message>
<message>
<source>Select CSV file</source>
- <translation>Seleccionar archivo CSV</translation>
+ <translation>Seleccionar fichero CSV</translation>
</message>
<message>
<source>New Database</source>
- <translation>Nueva base de datos</translation>
+ <translation>Crear base de datos</translation>
</message>
<message>
<source>%1 [New Database]</source>
@@ -1984,24 +1970,28 @@ Esto es definitivamente un defecto, por favor infórmelo a los desarrolladores.<
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Está a punto de exportar su base de datos a un archivo sin cifrar. Esto dejará sus contraseñas e información sensible vulnerable. ¿Desea continuar?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Abrir OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>Buscando...</translation>
+ <translation>Buscando…</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>¿Desea eliminar el apunte «%1» de forma definitiva?</translation>
+ <translation>¿Desea eliminar la entrada «%1» de forma definitiva?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>¿Desea mover el apunte «%1» a la papelera de reciclaje?</translation>
+ <translation>¿Desea mover la entrada «%1» a la papelera de reciclaje?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>¿Desea mover %n entrada a la papelera de reciclaje?</numerusform><numerusform>¿Desea mover %n apuntes a la papelera de reciclaje?</numerusform></translation>
+ <translation><numerusform>¿Desea mover %n apunte a la papelera?</numerusform><numerusform>¿Desea mover %n apuntes a la papelera?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2021,7 +2011,7 @@ Esto es definitivamente un defecto, por favor infórmelo a los desarrolladores.<
</message>
<message>
<source>No current database.</source>
- <translation>No hay una base de datos actualmente.</translation>
+ <translation>No hay una base de datos actual.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
@@ -2029,7 +2019,7 @@ Esto es definitivamente un defecto, por favor infórmelo a los desarrolladores.<
</message>
<message>
<source>Search Results (%1)</source>
- <translation>Resultados de búsqueda (%1)</translation>
+ <translation>Resultado de búsqueda (%1)</translation>
</message>
<message>
<source>No Results</source>
@@ -2037,20 +2027,20 @@ Esto es definitivamente un defecto, por favor infórmelo a los desarrolladores.<
</message>
<message>
<source>File has changed</source>
- <translation>El archivo ha cambiado</translation>
+ <translation>El fichero ha cambiado</translation>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation>El archivo de la base de datos ha cambiado. ¿Desea cargar los cambios?</translation>
+ <translation>El fichero de la base de datos ha cambiado. ¿Desea cargar los cambios?</translation>
</message>
<message>
<source>Merge Request</source>
- <translation>Solicitud de combinación</translation>
+ <translation>Solicitud de Unión</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>El archivo de la base de datos ha cambiado y usted tiene modificaciones sin guardar. ¿Desea combinar sus modificaciones?</translation>
+ <translation>El fichero de la base de datos ha cambiado y tiene modificaciones sin guardar. ¿Desea combinar sus modificaciones?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2058,19 +2048,19 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>¿Desea eliminar permanentemente todo de su papelera de reciclaje?</translation>
+ <translation>¿Desea eliminar permanentemente todo de su papelera?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>¿Desea eliminar %n entrada para siempre?</numerusform><numerusform>¿Desea eliminar %n apuntes para siempre?</numerusform></translation>
+ <translation><numerusform>¿Desea borrar %n apunte de forma definitiva?</numerusform><numerusform>¿Desea borrar %n apuntes de forma definitiva?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>¿Eliminar entrada?</numerusform><numerusform>¿Eliminar apuntes?</numerusform></translation>
+ <translation><numerusform>¿Borrar apunte?</numerusform><numerusform>¿Borrar apuntes?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>¿Mover entrada a la papelera de reciclaje?</numerusform><numerusform>¿Mover apuntes a la papelera de reciclaje?</numerusform></translation>
+ <translation><numerusform>¿Mover entrada a la papelera?</numerusform><numerusform>¿Mover entradas a la papelera?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2078,39 +2068,39 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Estás editando un apunte. ¿Descartar los cambios y bloquear de todos modos?</translation>
+ <translation>Está editando una entrada. ¿Descartar modificaciones y bloquear a pesar de todo?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>«%1» ha sido modificado.
+ <translation>&quot;%1&quot; ha sido modificado.
¿Guardar cambios?</translation>
</message>
<message>
<source>Database was modified.
Save changes?</source>
<translation>Se modificó la base de datos.
-¿Guardar cambios?</translation>
+¿Desea guardar las modificaciones?</translation>
</message>
<message>
<source>Save changes?</source>
- <translation>¿Guardar cambios?</translation>
+ <translation>¿Guardar modificaciones?</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>No se pudo abrir el nuevo archivo de base de datos al intentar cargar automáticamente.
+ <translation>No se pudo abrir el nuevo fichero de base de datos al intentar cargar automáticamente.
Error: %1</translation>
</message>
<message>
<source>Disable safe saves?</source>
- <translation>¿Deshabilitar guardados seguros?</translation>
+ <translation>¿Desactivar almacenajes seguros?</translation>
</message>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>KeePassXC no ha podido guardar la base de datos varias veces. Esto es probablemente causado por los servicios de sincronización de archivos manteniendo un bloqueo en el archivo.
-¿Desactivar el guardado seguro y volver a intentarlo?</translation>
+ <translation>KeePassXC no ha podido guardar la base de datos varias veces. Esto es probablemente causado por los servicios de sincronización de ficheros manteniendo un bloqueo del fichero.
+¿Desactivar almacenaje seguro y volver a intentarlo?</translation>
</message>
<message>
<source>Passwords</source>
@@ -2126,11 +2116,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Replace references to entry?</source>
- <translation>¿Reemplazar las referencias al apunte?</translation>
+ <translation>¿Reemplazar las referencias a la entrada?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>La entrada «%1» tiene %2 referencia. ¿Desea sobrescribir la referencia con el valor, omitir esta entrada o eliminarla de todos modos?</numerusform><numerusform>El apunte «%1» tiene %2 referencias. ¿Desea sobrescribir las referencias con los valores, omitir este apunte o eliminarlo de todos modos?</numerusform></translation>
+ <translation><numerusform>El apunte «%1» tiene %2 referencia. ¿Desea sobrescribir la referencia con los valores, descartar este apunte o borrarlo de todos modos?</numerusform><numerusform>La entrada «%1» tiene %2 referencias. ¿Desea sobrescribir la referencias con los valores, descartar este apunte o borrarlo de todos modos?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2138,23 +2128,23 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Move group to recycle bin?</source>
- <translation>¿Mover grupo a la papelera de reciclaje?</translation>
+ <translation>¿Mover grupo a la papelera?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>¿Desea mover el grupo «%1» a la papelera de reciclaje?</translation>
+ <translation>¿Desea mover el grupo «%1» a la papelera?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>Combinados correctamente los archivos de base de datos</translation>
+ <translation>Ficheros de base de datos correctamente combinados.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>La base de datos no fue modificada por la operación de combinar.</translation>
+ <translation>La base de datos no fue modificada por la operación de combinación</translation>
</message>
<message>
<source>Shared group...</source>
- <translation>Grupo compartido...</translation>
+ <translation>Grupo compartido…</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
@@ -2164,12 +2154,20 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Esta base de datos está abierta en modo solo lectura. El autoguardado está deshabilitado.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
<message>
<source>Entry</source>
- <translation>Apunte</translation>
+ <translation>Entrada</translation>
</message>
<message>
<source>Advanced</source>
@@ -2197,7 +2195,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>n/a</source>
- <translation>n/a</translation>
+ <translation>n/d</translation>
</message>
<message>
<source>(encrypted)</source>
@@ -2208,36 +2206,24 @@ Disable safe saves and try again?</source>
<translation>Seleccione la llave privada</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Archivo demasiado grande para ser una clave privada</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Error al abrir la llave privada</translation>
- </message>
- <message>
<source>Entry history</source>
- <translation>Historial de apuntes</translation>
+ <translation>Historial de entradas</translation>
</message>
<message>
<source>Add entry</source>
- <translation>Añadir apunte</translation>
+ <translation>Añadir entrada</translation>
</message>
<message>
<source>Edit entry</source>
- <translation>Editar apunte</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Las contraseñas proporcionadas son diferentes.</translation>
+ <translation>Editar entrada</translation>
</message>
<message>
<source>New attribute</source>
- <translation>Nuevo atributo</translation>
+ <translation>Crear atributo</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>¿Desea eliminar este atributo?</translation>
+ <translation>¿Seguro que desea borrar este atributo?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2252,28 +2238,12 @@ Disable safe saves and try again?</source>
<translation><numerusform>%n mes</numerusform><numerusform>%n meses</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>¿Aplicar contraseña generada?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>¿Desea aplicar la contraseña generada en este apunte?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
- <translation>Apunte actualizado.</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>El apunte tiene cambios sin guardar</translation>
+ <translation>Apunte actualizado correctamente.</translation>
</message>
<message>
<source>New attribute %1</source>
- <translation>Nuevo atributo %1</translation>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTEGIDO] Presione revelar para ver o editar</translation>
+ <translation>Crear atributo %1</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
@@ -2281,11 +2251,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Confirm Removal</source>
- <translation>Confirmar la eliminación</translation>
+ <translation>Confirmar eliminación</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integración con exploradores</translation>
+ <translation>Integración con navegador</translation>
</message>
<message>
<source>&lt;empty URL&gt;</source>
@@ -2295,6 +2265,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation>¿Desea eliminar esta URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Revelar</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2304,15 +2294,15 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add</source>
- <translation>Añadir</translation>
+ <translation>Agregar</translation>
</message>
<message>
<source>Remove</source>
- <translation>Eliminar</translation>
+ <translation>Retirar</translation>
</message>
<message>
<source>Edit Name</source>
- <translation>Editar nombre</translation>
+ <translation>Editar Nombre</translation>
</message>
<message>
<source>Protect</source>
@@ -2370,24 +2360,24 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>Selección de color de fondo</translation>
</message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
<message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Activar autoescritura para este apunte</translation>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Heredar la secuencia de autoescritura por defecto del &amp;grupo</translation>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>EditEntryWidgetAutoType</name>
<message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Utilizar secuencia de autoescritura personalizada:</translation>
+ <source>Enable Auto-Type for this entry</source>
+ <translation>Activar autoescritura para esta entrada</translation>
</message>
<message>
<source>Window Associations</source>
- <translation>Ventanas asociadas</translation>
+ <translation>Ventanas Asociadas</translation>
</message>
<message>
<source>+</source>
@@ -2395,7 +2385,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>-</source>
- <translation>-</translation>
+ <translation>–</translation>
</message>
<message>
<source>Window title:</source>
@@ -2441,6 +2431,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation>Secuencia personalizada de autoescritura para esta ventana</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Heredar Auto-Escritura por defecto del grupo</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Utilizar secuencia de Auto-Escritura personalizada:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2466,7 +2464,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add</source>
- <translation>Añadir</translation>
+ <translation>Agregar</translation>
</message>
<message>
<source>Remove</source>
@@ -2476,6 +2474,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>Editar</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2485,15 +2491,15 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Restore</source>
- <translation>Recuperar</translation>
+ <translation>Restaurar</translation>
</message>
<message>
<source>Delete</source>
- <translation>Eliminar</translation>
+ <translation>Borrar</translation>
</message>
<message>
<source>Delete all</source>
- <translation>Eliminar todo</translation>
+ <translation>Borrar todo</translation>
</message>
<message>
<source>Entry history selection</source>
@@ -2527,34 +2533,22 @@ Disable safe saves and try again?</source>
<translation>Contraseña:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repetir:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Título:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Programar</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Intercambiar la casilla de verificación para mostrar la sección de notas.</translation>
+ <translation>Cambie la casilla de verificación para mostrar la sección de notas.</translation>
</message>
<message>
<source>Username:</source>
<translation>Usuario:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expira</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Campo URL</translation>
</message>
@@ -2563,22 +2557,10 @@ Disable safe saves and try again?</source>
<translation>Descargar icono para la URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Campo repetir contraseña</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Intercambiar generador de contraseñas</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo de contraseña</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Intercambiar visibilidad de contraseña</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Intercambiar notas visibles</translation>
</message>
@@ -2610,6 +2592,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>Intercambiar expiración</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notas:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2619,15 +2613,15 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>Retirar la llave del agente después</translation>
+ <translation>Quitar llave del agente tras</translation>
</message>
<message>
<source> seconds</source>
- <translation>segundos</translation>
+ <translation> segundos</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Huella dactilar</translation>
+ <translation>Huella</translation>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
@@ -2635,7 +2629,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Public key</source>
- <translation>Llave pública</translation>
+ <translation>Clave pública</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
@@ -2651,7 +2645,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>n/a</source>
- <translation>n/a</translation>
+ <translation>n/d</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -2659,16 +2653,16 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Private key</source>
- <translation>Llave privada</translation>
+ <translation>Llave Privada</translation>
</message>
<message>
<source>External file</source>
- <translation>Archivo externo</translation>
+ <translation>Fichero externo</translation>
</message>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>Explorar...</translation>
+ <translation>Explorar…</translation>
</message>
<message>
<source>Attachment</source>
@@ -2676,11 +2670,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add to agent</source>
- <translation>Añadir a agente</translation>
+ <translation>Agregar a agente</translation>
</message>
<message>
<source>Remove from agent</source>
- <translation>Eliminar del agente</translation>
+ <translation>Quitar del agente</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
@@ -2719,7 +2713,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add group</source>
- <translation>Añadir grupo</translation>
+ <translation>Agregar grupo</translation>
</message>
<message>
<source>Edit group</source>
@@ -2727,15 +2721,15 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Enable</source>
- <translation>Habilitar</translation>
+ <translation>Activar</translation>
</message>
<message>
<source>Disable</source>
- <translation>Deshabilitar</translation>
+ <translation>Desactivar</translation>
</message>
<message>
<source>Inherit from parent group (%1)</source>
- <translation>Heredar del grupo padre (%1)</translation>
+ <translation>Heredar del grupo anterior (%1)</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
@@ -2745,10 +2739,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Forma</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipo:</translation>
</message>
@@ -2757,10 +2747,6 @@ Disable safe saves and try again?</source>
<translation>Ruta:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Contraseña:</translation>
</message>
@@ -2844,57 +2830,25 @@ Las extensiones soportadas son: %1.</translation>
<translation>Ruta para campo de archivo compartir</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Explorar para un archivo compartir</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo de contraseña</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Intercambiar visibilidad de contraseña</translation>
+ <source>Clear fields</source>
+ <translation>Vaciar campos</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Intercambiar generador de contraseñas</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation>Vaciar campos</translation>
+ <source>Browse...</source>
+ <translation>Explorar…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nombre</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Expira</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Buscar</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Autoescritura</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Utilizar por defecto la secuencia de autoescritura del grupo padre</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Seleccionar se&amp;cuencia de autoescritura por defecto</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Campo nombre</translation>
</message>
@@ -2912,7 +2866,7 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message>
<source>Expiration field</source>
- <translation>Campo de expiración</translation>
+ <translation>Campo expiración</translation>
</message>
<message>
<source>Search toggle for this and sub groups</source>
@@ -2922,20 +2876,40 @@ Las extensiones soportadas son: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Campo por defecto de secuencia de autoescritura</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Utilizar icono por defecto</translation>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Utilizar icono &amp;personalizado</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
</message>
<message>
+ <source>Auto-Type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notas:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
- <translation>Añadir icono personalizado</translation>
+ <translation>Agregar icono personalizado</translation>
</message>
<message>
<source>Delete custom icon</source>
@@ -2943,11 +2917,11 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message>
<source>Download favicon</source>
- <translation>Descargar icono</translation>
+ <translation>Descargar favicon</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>No se pudo descargar el icono.</translation>
+ <translation>No se pudo descargar el favicon.</translation>
</message>
<message>
<source>Images</source>
@@ -2955,11 +2929,11 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos los archivos</translation>
+ <translation>Todos los ficheros</translation>
</message>
<message>
<source>Confirm Delete</source>
- <translation>Confirmar eliminación</translation>
+ <translation>Confirmar Borrado</translation>
</message>
<message>
<source>Select Image(s)</source>
@@ -2967,7 +2941,7 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Cargado %1 de %n icono correctamente</numerusform><numerusform>Cargados %1 de %n iconos correctamente</numerusform></translation>
+ <translation><numerusform>Cargado %1 de %n icono correctamente</numerusform><numerusform>Cargado %1 de %n iconos correctamente</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2975,7 +2949,7 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n icono ya existe en la base de datos</numerusform><numerusform>%n iconos ya existen en la base de datos</numerusform></translation>
+ <translation><numerusform>El icono %n ya existe en la base de datos</numerusform><numerusform>Los %n iconos ya existen en la base de datos</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2983,7 +2957,7 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Este icono se utiliza en %n entrada, y será remplazado por el icono por defecto. ¿Desea eliminarlo?</numerusform><numerusform>Este icono se utiliza en %n apuntes, y será remplazado por el icono por defecto. ¿Desea eliminarlo?</numerusform></translation>
+ <translation><numerusform>Este icono es usado en %1 apunte, y será remplazado por el icono por defecto. ¿Está seguro que desea borrarlo?</numerusform><numerusform>Este icono es usado en %1 apuntes, y será remplazado por el icono por defecto. ¿Está seguro que desea borrarlo?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2998,14 +2972,6 @@ Las extensiones soportadas son: %1.</translation>
<translation>Aplicar icono seleccionado a subgrupos y entradas</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Aplicar icono &amp;a...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Aplicar solo a esta</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Aplicar a los grupos descendientes</translation>
</message>
@@ -3021,6 +2987,22 @@ Las extensiones soportadas son: %1.</translation>
<source>Existing icon selected.</source>
<translation>Icono existente seleccionado.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Usar icono por defecto</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Usar icono personalizado</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3038,7 +3020,7 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message>
<source>Uuid:</source>
- <translation>Uuid:</translation>
+ <translation>UUID:</translation>
</message>
<message>
<source>Plugin Data</source>
@@ -3046,16 +3028,16 @@ Las extensiones soportadas son: %1.</translation>
</message>
<message>
<source>Remove</source>
- <translation>Eliminar</translation>
+ <translation>Quitar</translation>
</message>
<message>
<source>Delete plugin data?</source>
- <translation>¿Eliminar los datos del complemento?</translation>
+ <translation>¿Borrar los datos del complemento?</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>¿Desea eliminar los datos del complemento seleccionado?
+ <translation>¿Desea borrar los datos del complemento seleccionado?
Esto puede causar un mal funcionamiento de los complementos afectados.</translation>
</message>
<message>
@@ -3095,7 +3077,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>%1 - Clonar</translation>
+ <translation>%1 - Clonado</translation>
</message>
</context>
<context>
@@ -3113,11 +3095,11 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation>Forma</translation>
+ <translation>Formato</translation>
</message>
<message>
<source>Add</source>
- <translation>Añadir</translation>
+ <translation>Agregar</translation>
</message>
<message>
<source>Remove</source>
@@ -3133,11 +3115,11 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Select files</source>
- <translation>Seleccionar archivos</translation>
+ <translation>Seleccionar ficheros</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>¿Desea eliminar %n adjunto?</numerusform><numerusform>¿Desea eliminar %n adjuntos?</numerusform></translation>
+ <translation><numerusform>¿Desea quitar %n dato adjunto?</numerusform><numerusform>¿Desea quitar %n datos adjuntos?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3151,22 +3133,22 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>¿Desea sobrescribir el archivo existente «%1» con el archivo adjunto?</translation>
+ <translation>¿Desea sobrescribir el fichero existente «%1» con el adjunto?</translation>
</message>
<message>
<source>Confirm overwrite</source>
- <translation>Confirmar sobrescritura</translation>
+ <translation>Confirmar sobreescritura</translation>
</message>
<message>
<source>Unable to save attachments:
%1</source>
- <translation>Incapaz de guardar datos adjuntos:
+ <translation>No se pueden guardar los adjuntos:
%1</translation>
</message>
<message>
<source>Unable to open attachment:
%1</source>
- <translation>No se puede abrir el fichero adjunto:
+ <translation>No se puede abrir el adjunto:
%1</translation>
</message>
<message>
@@ -3177,13 +3159,13 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Confirm remove</source>
- <translation>Confirmar eliminación</translation>
+ <translation>Confirmar retirada</translation>
</message>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Incapaz de abrir el fichero:
-%1</numerusform><numerusform>Incapaz de abrir los archivos:
+ <translation><numerusform>No se puede abrir el fichero:
+%1</numerusform><numerusform>No se pueden abrir los ficheros:
%1</numerusform></translation>
</message>
<message>
@@ -3206,6 +3188,20 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
<source>Save selected attachment to disk</source>
<translation>Guardar adjunto seleccionado a disco</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 es un fichero grande (%2 MB).
+Tu base de datos puede vovlerse muy grande y reducir el rendimiento.
+
+¿Estás seguro de añadir este fichero?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3266,11 +3262,11 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Notes</source>
- <translation>Notas</translation>
+ <translation>Anotaciones</translation>
</message>
<message>
<source>Expires</source>
- <translation>Expira</translation>
+ <translation>Caducidad</translation>
</message>
<message>
<source>Created</source>
@@ -3289,12 +3285,52 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
<translation>Adjuntos</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Sí</translation>
+ <source>Size</source>
+ <translation>Tamaño</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nombre del Grupo</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Título de la entrada</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Notas de la entrada</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Entrada expira el</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Fecha de creación</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Fecha de la última modificación</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Fecha del último acceso</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Ficheros adjuntos</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Tamaño de la entrada</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Tiene ficheros adjuntos</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Tiene TOTP contraseña de uso único</translation>
</message>
</context>
<context>
@@ -3317,7 +3353,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Expiration</source>
- <translation>Expiración</translation>
+ <translation>Caducidad</translation>
</message>
<message>
<source>URL</source>
@@ -3337,7 +3373,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Autotype</source>
- <translation>Autotecleo</translation>
+ <translation>Autoescritura</translation>
</message>
<message>
<source>Window</source>
@@ -3349,7 +3385,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Searching</source>
- <translation>Buscar</translation>
+ <translation>Buscando…</translation>
</message>
<message>
<source>Search</source>
@@ -3374,15 +3410,15 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Enabled</source>
- <translation>Habilitado</translation>
+ <translation>Activado</translation>
</message>
<message>
<source>Disabled</source>
- <translation>Deshabilitado</translation>
+ <translation>Desactivado</translation>
</message>
<message>
<source>Share</source>
- <translation>Compartir</translation>
+ <translation>Compartido</translation>
</message>
<message>
<source>Display current TOTP value</source>
@@ -3394,14 +3430,21 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL invalida</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
- <translation>Personalizar vista</translation>
+ <translation>Personalizar Vista</translation>
</message>
<message>
<source>Hide Usernames</source>
- <translation>Ocultar usuario</translation>
+ <translation>Ocultar usuarios</translation>
</message>
<message>
<source>Hide Passwords</source>
@@ -3417,11 +3460,17 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
<message>
<source>Reset to defaults</source>
- <translation>Restaurar ajustes por defecto</translation>
+ <translation>Restablecer ajustes por defecto</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Tiene ficheros adjuntos</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Adjuntos (icono)</translation>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3433,21 +3482,74 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Fallo al registrar el servicio DBus en %1: otro servicio de secretos está corriendo.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n apunte fue usado por %1</numerusform><numerusform>%n apuntes fueron usados por %1</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gestionar</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Desbloquear para mostrar</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Ninguno</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplicación</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gestionar</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Servicio de secretos Fdo: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Desconocido</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Desconocido</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3459,14 +3561,10 @@ Esto puede causar un mal funcionamiento de los complementos afectados.</translat
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: ¡no se puede guardar el archivo!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>No se puede guardar el archivo de script de mensajería nativo.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3536,14 +3634,6 @@ Puede habilitar el servicio de iconos del sitio web DuckDuckGo en la sección se
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>No se puede calcular la clave maestra</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>No se pudo hacer el desafío/respuesta:</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>faltan las cabeceras de la base de datos</translation>
</message>
@@ -3569,16 +3659,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Se han proporcionado credenciales inválidas, inténtelo de nuevo.
Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>No se pudo hacer el desafío/respuesta:</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No se puede calcular la clave maestra</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3588,10 +3686,6 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
<translation>faltan las cabeceras de la base de datos</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No se puede calcular la clave maestra</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Suma de verificación incorrecta de la cabecera</translation>
</message>
@@ -3621,11 +3715,11 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation>Función de derivación de llave no mantenida (KDF) o parámetros no válidos</translation>
+ <translation>Función de derivación de cerradura no admitida (KDF) o parámetros no válidos</translation>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
- <translation>Los campos heredados de la cabecera se encuentran en el archivo KDBX4.</translation>
+ <translation>Los campos heredados de la cabecera se encuentran en el fichero KDBX4.</translation>
</message>
<message>
<source>Invalid inner header id size</source>
@@ -3642,62 +3736,62 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Versión de mapa de variante de KeePass no mantenida.</translation>
+ <translation>Versión de asociación de variante de KeePass no admitida.</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longitud del nombre del apunte del mapa de variante inválida</translation>
+ <translation>Longitud del nombre de la entrada de asociación variante inválida</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Datos del nombre del apunte de mapa de variante inválida</translation>
+ <translation>Datos del nombre del apunte asociado variante inválido</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longitud del valor del apunte del mapa de variante inválida</translation>
+ <translation>Longitud del valor del apunte asociado variante inválido</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Datos del valor del apunte de mapa de variante inválida</translation>
+ <translation>Datos del valor de apunte asociado variante inválido</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longitud del valor del apunte del mapa booleano de variante inválida</translation>
+ <translation>Longitud del valor del apunte asociado booleano de variante inválida</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Largo inválido en valor de apunte Int32 de mapeo de variante</translation>
+ <translation>Longitud del valor del apunte asociado Int32 de variante inválida</translation>
</message>
<message>
<source>Invalid variant map UInt32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Largo inválido en valor de apunte UInt32 de mapeo de variante</translation>
+ <translation>Longitud del valor de la entrada asociada UInt32 de variante inválida</translation>
</message>
<message>
<source>Invalid variant map Int64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Largo inválido en valor de apunte Int64 de mapeo de variante</translation>
+ <translation>Longitud del valor de la entrada asociada Int64 de variante inválida</translation>
</message>
<message>
<source>Invalid variant map UInt64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Largo inválido en valor de apunte UInt64 de mapeo de variante</translation>
+ <translation>Longitud del valor de la entrada asociada UInt64 de variante inválida</translation>
</message>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Tipo de apunte inválido de mapeo de variante</translation>
+ <translation>Tipo de apunte asociado variante inválido</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Mapa de variante inválido en campo de tipo tamaño</translation>
+ <translation>Tamaño de tipo de campo asociado variante inválido</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -3709,26 +3803,30 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
<source>(HMAC mismatch)</source>
<translation>(HMAC no coincidente)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>Algoritmo de cifrado simétrico inválido</translation>
+ <translation>Algoritmo de cifrado simétrico inválido.</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Tamaño de IV inválido en cifrado simétrico</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>No se puede calcular la clave maestra</translation>
+ <translation>Tamaño de cifrado simétrico IV inválido</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Falló serialización de parámetros KDF en mapeo de variante</translation>
+ <translation>Ha fallado al serializar parámetros KDF en variante asociada</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3739,35 +3837,35 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
</message>
<message>
<source>Invalid compression flags length</source>
- <translation>Tamaño de flags de compresión inválido</translation>
+ <translation>Tamaño opcional de compresión inválido</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
- <translation>Algoritmo de compresión no soportado</translation>
+ <translation>Algoritmo de compresión no admitido</translation>
</message>
<message>
<source>Invalid master seed size</source>
- <translation>Tamaño de semilla maestra inválido</translation>
+ <translation>Tamaño inválido de semilla maestra</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Tamaño de semilla de transformación inválido</translation>
+ <translation>Tamaño inválido de semilla de transformación</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation>Tamaño de rondas de transformación inválido</translation>
+ <translation>Tamaño inválido de rondas de transformación</translation>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation>Tamaño de bytes de inicio no válido</translation>
+ <translation>Tamaño no válido de bytes de inicio</translation>
</message>
<message>
<source>Invalid random stream id size</source>
- <translation>Tamaño de id de flujo inváldo</translation>
+ <translation>Tamaño no válido de id de flujo</translation>
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>Flujo de cifrado interno inválido</translation>
+ <translation>Cifrador del flujo interno no válido</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3778,18 +3876,18 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>El fichero seleccionado es una vieja base de datos de KeePass 1 (.kdb).
+ <translation>El fichero seleccionado es una antigua base de datos de KeePass 1 (.kdb).
-Puede importarla haciendo clic en base de datos &gt; «Importar base de datos KeePass 1...».
-Esta migración es en único sentido. No podrá abrir la base de datos importada con la vieja versión 0.4 de KeePassX.</translation>
+Puede importarla pulsando sobre «Base de datos → Importar base de datos KeePass 1…».
+Esta migración es de sentido único. No podrá abrir la base de datos importada con la versión antigua de KeePassX 0.4.</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
- <translation>Versión de la base de datos de KeePass 2 no soportada.</translation>
+ <translation>Versión no admitida de la base de datos de KeePass 2.</translation>
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Longitud de uuid de cifrado no válida: %1 (longitud =%2)</translation>
+ <translation>Longitud de UUID de cifrado no válida: %1 (longitud =%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
@@ -3797,14 +3895,14 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada
</message>
<message>
<source>Failed to read database file.</source>
- <translation>Error al leer el archivo de base de datos.</translation>
+ <translation>Error al leer el fichero de base de datos.</translation>
</message>
</context>
<context>
<name>KdbxXmlReader</name>
<message>
<source>XML parsing failure: %1</source>
- <translation>Error de procesado XML: %1</translation>
+ <translation>Error de parsing XML: %1</translation>
</message>
<message>
<source>No root group</source>
@@ -3812,7 +3910,7 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Datos o uuid del ícono faltantes</translation>
+ <translation>Falta icono uuid o datos</translation>
</message>
<message>
<source>Missing custom data key or value</source>
@@ -3852,19 +3950,19 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada
</message>
<message>
<source>Null entry uuid</source>
- <translation>Uuid de apunte nulo</translation>
+ <translation>Uuid de entrada nulo</translation>
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Número de ícono de apunte inválido</translation>
+ <translation>Número de icono de entrada no válida</translation>
</message>
<message>
<source>History element in history entry</source>
- <translation>Elemento del historial en el apunte del historial</translation>
+ <translation>Elemento del historial en la entrada del historial</translation>
</message>
<message>
<source>No entry uuid found</source>
- <translation>No se ha encontrado uuid del apunte</translation>
+ <translation>uuid de entrada no encontrado</translation>
</message>
<message>
<source>History element with different uuid</source>
@@ -3876,19 +3974,15 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Falta clave del apunte de texto o valor</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Encontrado dato adjunto duplicado</translation>
+ <translation>Falta clave de entrada de texto o valor</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Falta clave del apunte binario o valor</translation>
+ <translation>Falta clave de entrada binaria o valor</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>Falta de secuencia o ventana de Asociación de autoescritura</translation>
+ <translation>Falta de secuencia o ventana de asociación de autoescritura</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3925,7 +4019,30 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada
Line %2, column %3</source>
<translation>Error XML:
%1
-Línea %2, columna %3</translation>
+Linea %2, columna %3</translation>
+ </message>
+</context>
+<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Archivo demasiado grande para ser una clave privada</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Error al abrir la llave privada</translation>
</message>
</context>
<context>
@@ -3943,7 +4060,7 @@ Línea %2, columna %3</translation>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation>Incapaz de leer el fichero clave</translation>
+ <translation>Incapaz de leer el archivo</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3955,7 +4072,7 @@ Línea %2, columna %3</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
- <translation>Versión de la base de datos KeePass no mantenida.</translation>
+ <translation>Versión de la base de datos KeePass no soportada.</translation>
</message>
<message>
<source>Unable to read encryption IV</source>
@@ -3980,7 +4097,7 @@ Línea %2, columna %3</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>Número de rondas de transformación no válido</translation>
+ <translation>Número de turnos de transformación no válido </translation>
</message>
<message>
<source>Unable to construct group tree</source>
@@ -3991,10 +4108,6 @@ Línea %2, columna %3</translation>
<translation>Raíz</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>No se puede calcular la clave maestra</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Error en la transformación de la llave</translation>
</message>
@@ -4048,43 +4161,43 @@ Línea %2, columna %3</translation>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>Apunte de tipo número en campo faltante</translation>
+ <translation>Entrada de tipo número en campo faltante</translation>
</message>
<message>
<source>Invalid entry field size</source>
- <translation>Tamaño del apunte para el campo inválido</translation>
+ <translation>Tamaño de la entrada para el campo inválido</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>Datos de campo de apunte no coinciden en tamaño</translation>
+ <translation>Datos de campo de entrada no coinciden en tamaño</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Tamaño del apunte para el campo uuid inválido</translation>
+ <translation>Tamaño de la entrada para el campo uuid inválido</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>Tamaño del apunte para el campo identificador de grupo inválido</translation>
+ <translation>Tamaño de la entrada para el campo identificador de grupo inválido</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation>Tamaño del apunte para el campo icono inválido</translation>
+ <translation>Tamaño de la entrada para el campo icono inválido</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
- <translation>Tamaño del apunte para el campo tiempo de creación inválido</translation>
+ <translation>Tamaño de la entrada para el campo tiempo de creación inválido</translation>
</message>
<message>
<source>Invalid entry modification time field size</source>
- <translation>Tamaño del apunte para el campo tiempo de modificación inválido</translation>
+ <translation>Tamaño de la entrada para el campo tiempo de modificación inválido</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Tamaño del apunte para el campo tiempo de expiración inválido</translation>
+ <translation>Tamaño de la entrada para el campo tiempo de expiración inválido</translation>
</message>
<message>
<source>Invalid entry field type</source>
- <translation>Tipo de apunte para el campo inválido</translation>
+ <translation>Tipo de la entrada para el campo inválido</translation>
</message>
<message>
<source>unable to seek to content position</source>
@@ -4096,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Se han proporcionado credenciales inválidas, inténtelo de nuevo.
Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4148,7 +4265,7 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
<name>KeyComponentWidget</name>
<message>
<source>Key Component</source>
- <translation>Componente de la clave</translation>
+ <translation>Componente de la Clave</translation>
</message>
<message>
<source>Key Component Description</source>
@@ -4191,35 +4308,25 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.<
</message>
<message>
<source>Key File</source>
- <translation>Fichero clave</translation>
+ <translation>Fichero de claves</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Puede añadir un fichero clave que contiene bytes aleatorios para seguridad adicional.&lt;/p&gt;&lt;p&gt;¡Debes mantenerlo en secreto y nunca perderlo o te bloquearán!&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Puede añadir un fichero de claves que contiene bytes aleatorios para seguridad adicional.&lt;/p&gt;&lt;p&gt;¡Debes mantenerlo en secreto y nunca perderlo o te bloquearán!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Formato de fichero clave heredado</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Está utilizando un formato de fichero clave heredado que puede convertirse
-sin soporte en el futuro.
-
-Vaya a la configuración de la clave maestra y genere un nuevo fichero clave.</translation>
+ <translation>Formato de archivo llave heredado</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>Error al cargar el fichero clave «%1»
+ <translation>Error al cargar el fichero de claves &apos;%1&apos;
Mensaje: %2</translation>
</message>
<message>
<source>Key files</source>
- <translation>Ficheros clave</translation>
+ <translation>Archivos llave</translation>
</message>
<message>
<source>All files</source>
@@ -4227,19 +4334,19 @@ Mensaje: %2</translation>
</message>
<message>
<source>Create Key File...</source>
- <translation>Crear un fichero clave...</translation>
+ <translation>Crear un fichero de claves...</translation>
</message>
<message>
<source>Error creating key file</source>
- <translation>Error al crear el fichero clave</translation>
+ <translation>Error al crear el fichero de claves</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>No se puede crear el fichero clave: %1</translation>
+ <translation>No se puede crear el fichero de claves: %1</translation>
</message>
<message>
<source>Select a key file</source>
- <translation>Seleccione un fichero clave</translation>
+ <translation>Seleccione un archivo llave</translation>
</message>
<message>
<source>Key file selection</source>
@@ -4251,7 +4358,7 @@ Mensaje: %2</translation>
</message>
<message>
<source>Browse...</source>
- <translation>Explorar...</translation>
+ <translation>Explorar…</translation>
</message>
<message>
<source>Generate a new key file</source>
@@ -4279,26 +4386,25 @@ Are you sure you want to continue with this file?</source>
<translation>El fichero clave seleccionado parece una base de datos de contraseñas. Un fichero clave debe ser un fichero estático que nunca cambie o perderá el acceso a su base de datos para siempre.
¿Desea continuar con este archivo?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
<message>
<source>&amp;Database</source>
- <translation>&amp;Base de datos</translation>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation>Bases de datos &amp;recientes</translation>
+ <translation>Base de &amp;Datos</translation>
</message>
<message>
<source>&amp;Help</source>
<translation>Ay&amp;uda</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Apuntes</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupos</translation>
</message>
@@ -4315,44 +4421,8 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Acerca de</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Abrir base de datos...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Guardar base de datos</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Cerrar base de datos</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Eliminar apunte</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Editar grupo</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Eliminar grupo</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>&amp;Guardar base de datos como...</translation>
- </message>
- <message>
<source>Database settings</source>
- <translation>Configuración de la base de datos.</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clonar apunte</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copiar &amp;usuario</translation>
+ <translation>Configuración de la base de datos</translation>
</message>
<message>
<source>Copy username to clipboard</source>
@@ -4367,10 +4437,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Configuración</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Bloquear las bases de datos</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Título</translation>
</message>
@@ -4395,14 +4461,6 @@ Are you sure you want to continue with this file?</source>
<translation>Copiar notas al portapapeles</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportar a un archivo CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configurar TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copiar &amp;TOTP</translation>
</message>
@@ -4412,7 +4470,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Clear history</source>
- <translation>Vaciar historial</translation>
+ <translation>Limpiar historial</translation>
</message>
<message>
<source>Access error for config file %1</source>
@@ -4438,7 +4496,7 @@ Are you sure you want to continue with this file?</source>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>ADVERTENCIA: está utilizando una versión inestable de KeePassXC!
+ <translation>ADVERTENCIA: Usted está utilizando una versión inestable de KeePassXC!
Hay un alto riesgo de corrupción, mantenga una copia de seguridad de sus bases de datos.
Esta versión no es para uso de producción.</translation>
</message>
@@ -4447,10 +4505,6 @@ Esta versión no es para uso de producción.</translation>
<translation>&amp;Donar</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>&amp;Informar de un defecto</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>ADVERTENCIA: ¡Su versión de Qt puede hacer que KeePassXC se bloquee con un teclado virtual!
@@ -4461,182 +4515,360 @@ Le recomendamos que utilice la AppImage disponible en nuestra página de descarg
<translation>&amp;Importar</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copiar &amp;atributo...</translation>
+ <source>Create a new database</source>
+ <translation>Crear una base de datos nueva</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
+ <source>Merge from another KDBX database</source>
+ <translation>Unir desde otra base de datos KDBX</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>&amp;Nueva base de datos...</translation>
+ <source>Add a new entry</source>
+ <translation>Añadir una nueva entrada</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Crear una base de datos nueva</translation>
+ <source>View or edit entry</source>
+ <translation>Ver o editar entrada</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Combinar desde la base de datos...</translation>
+ <source>Add a new group</source>
+ <translation>Añadir un nuevo grupo</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Combinar desde otra base de datos KDBX</translation>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>Realizar &amp;autoescritura</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nuevo apunte</translation>
+ <source>Open &amp;URL</source>
+ <translation>Abrir &amp;URL</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Añadir un nuevo apunte</translation>
+ <source>Import a KeePass 1 database</source>
+ <translation>Importar una base de datos KeePass 1</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Editar apunte</translation>
+ <source>Import a CSV file</source>
+ <translation>Importar un archivo CSV</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Ver o editar apunte</translation>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>NOTA: ¡Está utilizando una versión preliminar de KeePassXC!
+Espere algunos errores y problemas menores, esta versión no está destinada para uso de producción.</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nuevo grupo</translation>
+ <source>Check for updates on startup?</source>
+ <translation>¿Buscar actualizaciones en el inicio?</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Añadir un nuevo grupo</translation>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>¿Quieres KeePassXC para comprobar las actualizaciones en el arranque?</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Cambiar la clave &amp;maestra...</translation>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Siempre se puede comprobar si hay actualizaciones manualmente desde el menú de la aplicación.</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>Con&amp;figuración de la base de datos</translation>
+ <source>&amp;Export</source>
+ <translation>&amp;Exportar</translation>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation>Copiar &amp;contraseña</translation>
+ <source>Sort &amp;A-Z</source>
+ <translation>Ordenar &amp;A-Z</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>Realizar au&amp;toescritura</translation>
+ <source>Sort &amp;Z-A</source>
+ <translation>Ordenar &amp;Z-A</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Abrir &amp;URL</translation>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Generador de contraseñas</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Base de datos KeePass 1...</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importar un 1Password Vault</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Importar una base de datos KeePass 1</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Guía de inicio</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Archivo CSV...</translation>
+ <source>&amp;User Guide</source>
+ <translation>Guía de &amp;usuario</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Importar un archivo CSV</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>Atajos de &amp;teclado</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Mostrar TOTP...</translation>
+ <source>&amp;Recent Databases</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Mostrar código QR TOTP...</translation>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>NOTA: ¡Está utilizando una versión preliminar de KeePassXC!
-Espere algunos defectos y problemas menores, esta versión no está destinada para uso de producción.</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>¿Buscar actualizaciones en el inicio?</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>¿Desea que KeePassXC compruebe actualizaciones en el inicio?</translation>
+ <source>View</source>
+ <translation>Ver</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Siempre se puede comprobar si hay actualizaciones manualmente desde el menú de la aplicación.</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Exportar</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Comprobar actualizaciones...</translation>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>&amp;Descargar todos los iconos</translation>
+ <source>&amp;Save Database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Ordenar &amp;A-Z</translation>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Ordenar &amp;Z-A</translation>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Generador de contraseñas</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>Descargar icono</translation>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportar a archivo HTML...</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Vault...</translation>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importar un 1Password Vault</translation>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Guía de inicio</translation>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Abrir la guía de inicio PDF</translation>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Ayuda en &amp;línea...</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Ir a la documentación en línea (abre el explorador)</translation>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Guía de &amp;usuario</translation>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Abrir la guía de usuario PDF</translation>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>Atajos de &amp;teclado</translation>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Mostrar TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Claro</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Oscuro</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Clásico (Plataforma-nativo)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Configuración de la base de datos</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Editar configuración de base de datos</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Desbloquear base de datos</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Desbloquear para mostrar más información</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Bloquear base de datos</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Desconectar</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4655,7 +4887,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>el apunte más antiguo se combinó a la base de datos «%1»</translation>
+ <translation>la entrada más antigua se fusionó a la base de datos &quot;%1&quot;</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4663,27 +4895,27 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Adding backup for older source %1 [%2]</source>
- <translation>Agregando copia de seguridad para la tipografía anterior %1 [%2]</translation>
+ <translation>Agregando copia de seguridad para la fuente anterior %1 [%2]</translation>
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>Volver a aplicar un apunte de destino más antiguo sobre la tipografía más nueva %1 [%2]</translation>
+ <translation>Volver a aplicar una entrada de destino más antigua sobre la fuente más nueva %1 [%2]</translation>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>Volver a aplicar un apunte de origen anterior sobre el objetivo más nuevo %1 [%2]</translation>
+ <translation>Volver a aplicar una entrada de origen anterior sobre el objetivo más nuevo %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
- <translation>Sincronización desde una tipografía más nueva %1 [%2]</translation>
+ <translation>Sincronización desde una fuente más nueva %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from older source %1 [%2]</source>
- <translation>Sincronización desde una tipografía anterior %1 [%2]</translation>
+ <translation>Sincronización desde una fuente anterior %1 [%2]</translation>
</message>
<message>
<source>Deleting child %1 [%2]</source>
- <translation>Eliminando descendiente %1 [%2]</translation>
+ <translation>Borrando hijo %1[%2]</translation>
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
@@ -4691,7 +4923,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Changed deleted objects</source>
- <translation>Cambiados objetos eliminados</translation>
+ <translation>cambiado objetos eliminados</translation>
</message>
<message>
<source>Adding missing icon %1</source>
@@ -4722,15 +4954,11 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<name>NewDatabaseWizardPage</name>
<message>
<source>WizardPage</source>
- <translation>Asistente</translation>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation>Configuraciones de &amp;cifrado</translation>
+ <translation>PáginaAsistente</translation>
</message>
<message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlo más adelante en la configuración de la base de datos.</translation>
+ <translation>Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos.</translation>
</message>
<message>
<source>Advanced Settings</source>
@@ -4740,27 +4968,31 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<source>Simple Settings</source>
<translation>Ajustes simples</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Configuraciones de cifrado</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarla más adelante en la configuración de la base de datos.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Clave maestra de la base de datos</translation>
+ <source>Encryption Settings</source>
+ <translation>Configuraciones de Cifrado</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Una clave maestra, conocida únicamente por usted, protege su base de datos.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos.</translation>
</message>
</context>
<context>
@@ -4771,7 +5003,14 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>Rellene el nombre y añada una descripción opcional para su nueva base de datos:</translation>
+ <translation>Por favor complete el nombre, y agregue una descripción opcional, para su nueva base de datos:</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4845,7 +5084,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Fichero clave no válido, esperando una llave de OpenSSH</translation>
+ <translation>Archivo llave no válido, esperando una llave de OpenSSH</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
@@ -4873,11 +5112,11 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>Fichero clave corrupto, no se pudo leer la clave privada</translation>
+ <translation>Fichero de claves corrupto, no se pudo leer la clave privada</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
- <translation>Sin contenido a descifrar en llave privada</translation>
+ <translation>Sin contenido a desencriptar en llave privada</translation>
</message>
<message>
<source>Trying to run KDF without cipher</source>
@@ -4885,23 +5124,23 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Contraseña necesaria para descifrar esta clave</translation>
+ <translation>Frase de contraseña necesaria para descrifrar esta clave</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>La derivación de la clave falló, ¿fichero clave dañado?</translation>
+ <translation>La derivación de la clave falló, ¿archivo de claves dañado?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Fallo de descifrado, ¿contraseña incorrecta?</translation>
+ <translation>¿Error de descifrado, frase de contraseña incorrecta?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>Final de fichero inesperado al leer la clave pública</translation>
+ <translation>EOF inesperado al leer la clave pública</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>FDF inesperado al leer la clave privada</translation>
+ <translation>EOF inesperado al leer la clave privada</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
@@ -4909,19 +5148,19 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>FDF inesperado al escribir la clave pública</translation>
+ <translation>EOF inesperado al escribir la clave pública</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>No se puede escribir la clave privada ya que es vacía</translation>
+ <translation>No se puede escribir la clave privada ya que está vacía</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>FDF inesperado al escribir la clave privada</translation>
+ <translation>EOF inesperado al escribir la clave privada</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation>Tipo de clave no mantenida: %1</translation>
+ <translation>Tipo de clave no soportada: %1</translation>
</message>
<message>
<source>Unknown cipher: %1</source>
@@ -4950,16 +5189,28 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<source>Passwords match so far</source>
<translation>Contraseñas coincidentes hasta el momento</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>Introduzca la contraseña</translation>
+ <translation>Ingrese la contraseña</translation>
</message>
<message>
<source>Confirm password:</source>
- <translation>Confirme la contraseña</translation>
+ <translation>Confirmar la contraseña</translation>
</message>
<message>
<source>Password</source>
@@ -4967,32 +5218,20 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation>&lt;p&gt;La contraseña es el método principal para asegurar su base de datos.&lt;/p&gt;&lt;p&gt;Las contraseñas buenas son largas y únicas. KeePassXC puede generar una para usted.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;La contraseña es el método principal para asegurar su base de datos.&lt;p&gt;&lt;p&gt;Las contraseñas buenas son largas y únicas. KeePassXC puede generar una para usted.&lt;p&gt;</translation>
</message>
<message>
<source>Passwords do not match.</source>
<translation>Las contraseñas no coinciden.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Generar clave maestra</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo de contraseña</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Intercambiar visibilidad de contraseña</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Campo repetir contraseña</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Intercambiar generador de contraseñas</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5001,10 +5240,6 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Contraseña:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>seguridad</translation>
@@ -5027,7 +5262,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Extended ASCII</source>
- <translation>ASCII extendido</translation>
+ <translation>ASCII Extendido</translation>
</message>
<message>
<source>Exclude look-alike characters</source>
@@ -5035,7 +5270,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Pick characters from every group</source>
- <translation>Seleccionar caracteres de todos los grupos</translation>
+ <translation>Elegir caracteres de todos los grupos</translation>
</message>
<message>
<source>&amp;Length:</source>
@@ -5047,19 +5282,11 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Wordlist:</source>
- <translation>Listado de palabras:</translation>
+ <translation>Lista de palabras:</translation>
</message>
<message>
<source>Word Separator:</source>
- <translation>Separador de palabras:</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>Copiar</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Aceptar</translation>
+ <translation>Separador de Palabras:</translation>
</message>
<message>
<source>Close</source>
@@ -5158,14 +5385,6 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Cambiar a modo sencillo</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Sencillo</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres a excluir de la contraseña generada</translation>
</message>
@@ -5175,7 +5394,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation>Añadir letras no-hexadecimales al listado de «no incluir»</translation>
+ <translation>Añadir letras no-hexadecimales a la lista de &quot;no incluir&quot;</translation>
</message>
<message>
<source>Hex</source>
@@ -5183,15 +5402,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation>Caracteres excluidos: «0», «1», «l», «I», «O», «|», « . »</translation>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Número de palabras:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regenerar</translation>
+ <translation>Caracteres excluidos: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
<source>Generated password</source>
@@ -5242,10 +5453,6 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<translation>Copiar contraseña</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Aceptar contraseña</translation>
- </message>
- <message>
<source>lower case</source>
<translation>Minúsculas</translation>
</message>
@@ -5258,8 +5465,44 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<translation>Capitalización de título</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Intercambiar visibilidad de contraseña</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Cantidad de Palabras:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Vaciar</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5272,6 +5515,58 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
<source>Statistics</source>
<translation>Estadísticas</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5305,7 +5600,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Merge</source>
- <translation>Combinar</translation>
+ <translation>Unir</translation>
</message>
<message>
<source>Continue</source>
@@ -5356,7 +5651,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>No logins found</source>
- <translation>No se encontraron inicios de sesión</translation>
+ <translation>No se encontraron logins</translation>
</message>
<message>
<source>Unknown error</source>
@@ -5364,15 +5659,15 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Add a new entry to a database.</source>
- <translation>Añadir un nuevo apunte a una base de datos.</translation>
+ <translation>Añadir una nueva entrada a una base de datos.</translation>
</message>
<message>
<source>Path of the database.</source>
- <translation>Ruta a la base de datos</translation>
+ <translation>Ruta a la base de datos.</translation>
</message>
<message>
<source>Key file of the database.</source>
- <translation>Fichero clave de la base de datos.</translation>
+ <translation>Archivo de llave de la base de datos</translation>
</message>
<message>
<source>path</source>
@@ -5380,7 +5675,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Username for the entry.</source>
- <translation>Usuario para el apunte.</translation>
+ <translation>Usuario para la entrada.</translation>
</message>
<message>
<source>username</source>
@@ -5388,7 +5683,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>URL for the entry.</source>
- <translation>URL del apunte.</translation>
+ <translation>URL de la entrada.</translation>
</message>
<message>
<source>URL</source>
@@ -5396,40 +5691,36 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Solicitar contraseña del apunte.</translation>
+ <translation>Solicitar contraseña de la entrada.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
- <translation>Generar una contraseña para el apunte.</translation>
+ <translation>Generar una contraseña para la entrada.</translation>
</message>
<message>
<source>length</source>
- <translation>tamaño</translation>
+ <translation>Tamaño</translation>
</message>
<message>
<source>Path of the entry to add.</source>
- <translation>Ruta del apunte para añadir.</translation>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copiar la contraseña de un apunte en el portapapeles.</translation>
+ <translation>Ruta de la entrada para añadir.</translation>
</message>
<message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
- <translation>Ruta del apunte a copiar.</translation>
+ <translation>Ruta de la entrada para copiar.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Tiempo de espera en segundos antes de limpiar el portapapeles.</translation>
+ <translation>Tiempo de espera en segundos antes de eliminar el portapapeles.</translation>
</message>
<message>
<source>Edit an entry.</source>
- <translation>Editar un apunte</translation>
+ <translation>Editar una entrada</translation>
</message>
<message>
<source>Title for the entry.</source>
- <translation>Título para el apunte</translation>
+ <translation>Título para la entrada</translation>
</message>
<message>
<source>title</source>
@@ -5437,7 +5728,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Path of the entry to edit.</source>
- <translation>Ruta del apunte a editar.</translation>
+ <translation>Ruta de la entrada para editar.</translation>
</message>
<message>
<source>Estimate the entropy of a password.</source>
@@ -5445,7 +5736,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
</message>
<message>
<source>Password for which to estimate the entropy.</source>
- <translation>Contraseña para el que desea calcular la entropía.</translation>
+ <translation>Contraseña para la que desea calcular la entropía.</translation>
</message>
<message>
<source>Perform advanced analysis on the password.</source>
@@ -5456,7 +5747,7 @@ Espere algunos defectos y problemas menores, esta versión no está destinada pa
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>ADVERTENCIA: Está usando un fichero clave con un formato antiguo que puede ser
+ <translation>ADVERTENCIA: Está usando un fichero de claves con un formato antiguo que puede ser
incompatible en el futuro.
Por favor, considere generar un nuevo fichero.</translation>
@@ -5473,11 +5764,11 @@ Comandos disponibles:
</message>
<message>
<source>Name of the command to execute.</source>
- <translation>Nombre del mandato a ejecutar.</translation>
+ <translation>Nombre del comando a ejecutar.</translation>
</message>
<message>
<source>List database entries.</source>
- <translation>Listar las entrada de la base de datos.</translation>
+ <translation>Listar las entradas de la base de datos.</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
@@ -5497,7 +5788,7 @@ Comandos disponibles:
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>Ruta de la base de datos de inicio de la combinación.</translation>
+ <translation>Ruta de la base de datos de inicio de la mezcla.</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
@@ -5505,11 +5796,11 @@ Comandos disponibles:
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation>Fichero clave de la base de datos desde la cual desea combinar.</translation>
+ <translation>Archivo llave de la base de datos desde la cual desea combinar.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
- <translation>Muestra información de un apunte.</translation>
+ <translation>Muestra información de una entrada.</translation>
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
@@ -5521,11 +5812,11 @@ Comandos disponibles:
</message>
<message>
<source>Name of the entry to show.</source>
- <translation>Nombre del apunte para mostrar.</translation>
+ <translation>Nombre de la entrada para mostrar.</translation>
</message>
<message>
<source>NULL device</source>
- <translation>Dispositivo NULO</translation>
+ <translation>Dispositivo NULL</translation>
</message>
<message>
<source>error reading from device</source>
@@ -5549,7 +5840,7 @@ Comandos disponibles:
</message>
<message>
<source>Username</source>
- <translation>Usuario</translation>
+ <translation>Usuario:</translation>
</message>
<message>
<source>Password</source>
@@ -5569,15 +5860,7 @@ Comandos disponibles:
</message>
<message>
<source>Browser Integration</source>
- <translation>Integración con exploradores</translation>
- </message>
- <message>
- <source>Press</source>
- <translation>Presione</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasivo</translation>
+ <translation>Integración con Navegadores</translation>
</message>
<message>
<source>SSH Agent</source>
@@ -5585,11 +5868,11 @@ Comandos disponibles:
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
- <translation>Generar una nueva contraseña aleatoria diceware.</translation>
+ <translation>Generar una nueva frase de contraseña aleatoria diceware.</translation>
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>Número de palabras para la contraseña de diceware.</translation>
+ <translation>Número de palabras para la frase de contraseña de diceware.</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
@@ -5603,11 +5886,11 @@ Comandos disponibles:
</message>
<message>
<source>Could not create entry with path %1.</source>
- <translation>No pudo crearse el apunte con ruta %1.</translation>
+ <translation>No pudo crearse la entrada con ruta %1.</translation>
</message>
<message>
<source>Enter password for new entry: </source>
- <translation>Introduzca la contraseña para el nuevo apunte:</translation>
+ <translation>Ingrese la contraseña para la nueva entrada:</translation>
</message>
<message>
<source>Writing the database failed %1.</source>
@@ -5615,35 +5898,23 @@ Comandos disponibles:
</message>
<message>
<source>Successfully added entry %1.</source>
- <translation>El apunte %1 se añadió correctamente.</translation>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copiar el TOTP actual al portapapeles.</translation>
+ <translation>La entrada se agregó exitosamente %1.</translation>
</message>
<message>
<source>Invalid timeout value %1.</source>
- <translation>Valor inválido para el «timeout» %1.</translation>
+ <translation>Valor inválido para el &quot;timeout&quot; %1.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
- <translation>No se encontró el apunte %1.</translation>
+ <translation>No se encontró la entrada %1.</translation>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
- <translation>El apunte con ruta %1 no tiene un TOTP configurado.</translation>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>¡El TOTP del apunte actual se ha copiado al portapapeles!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>¡La contraseña del apunte actual se ha copiado al portapapeles!</translation>
+ <translation>La entrada con ruta %1 no tiene un TOTP configurado.</translation>
</message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Vaciar el portapapeles en %1 segundo...</numerusform><numerusform>Vaciar el portapapeles en %1 segundos...</numerusform></translation>
+ <translation><numerusform>Limpiar el portapapeles en %1 segundo(s)...</numerusform><numerusform>Limpiar el portapapeles en %1 segundo(s)...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5660,15 +5931,15 @@ Comandos disponibles:
</message>
<message>
<source>Could not find entry with path %1.</source>
- <translation>No se pudo encontrar el apunte con la ruta %1.</translation>
+ <translation>No se pudo encontrar la entrada con la ruta %1.</translation>
</message>
<message>
<source>Not changing any field for entry %1.</source>
- <translation>No cambiar cualquier campo del apunte 1%.</translation>
+ <translation>No cambiar cualquier campo de entrada de 1%.</translation>
</message>
<message>
<source>Enter new password for entry: </source>
- <translation>Introduzca una nueva contraseña para el apunte:</translation>
+ <translation>Introduzca una nueva contraseña para la entrada:</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
@@ -5676,7 +5947,7 @@ Comandos disponibles:
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation>Apunte %1 editado correctamente.</translation>
+ <translation>Entrada %1 editada exitosamente.</translation>
</message>
<message>
<source>Length %1</source>
@@ -5692,11 +5963,11 @@ Comandos disponibles:
</message>
<message>
<source>Multi-word extra bits %1</source>
- <translation>Multipalabra extra bits %1</translation>
+ <translation>Multi-palabra extra bits %1</translation>
</message>
<message>
<source>Type: Bruteforce</source>
- <translation>Tipo: Fuerza bruta</translation>
+ <translation>Tipo: Fuerza Bruta</translation>
</message>
<message>
<source>Type: Dictionary</source>
@@ -5708,7 +5979,7 @@ Comandos disponibles:
</message>
<message>
<source>Type: User Words</source>
- <translation>Tipo: Palabras de usuario</translation>
+ <translation>Tipo: Usuario Palabras</translation>
</message>
<message>
<source>Type: User+Leet</source>
@@ -5744,7 +6015,7 @@ Comandos disponibles:
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>Tipo: Palabras de usuario (Rep)</translation>
+ <translation>Tipo: Usuario Palabras(Rep)</translation>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
@@ -5776,11 +6047,11 @@ Comandos disponibles:
</message>
<message>
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation>*** Longitud de la contraseña (%1) != suma de la longitud de las partes (%2) ***</translation>
+ <translation>*** Longitud de la contraseña (%1) != Suma de la longitud de las partes (%2) ***</translation>
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation>Error al cargar el fichero clave %1: %2</translation>
+ <translation>Error al cargar el fichero de claves %1: %2</translation>
</message>
<message>
<source>Length of the generated password</source>
@@ -5788,19 +6059,19 @@ Comandos disponibles:
</message>
<message>
<source>Use lowercase characters</source>
- <translation>Utilizar caracteres en minúscula</translation>
+ <translation>Usar caracteres en minúscula</translation>
</message>
<message>
<source>Use uppercase characters</source>
- <translation>Utilizar caracteres en mayúscula</translation>
+ <translation>Usar caracteres en mayúscula</translation>
</message>
<message>
<source>Use special characters</source>
- <translation>Utilizar caracteres especiales</translation>
+ <translation>Usar caracteres especiales</translation>
</message>
<message>
<source>Use extended ASCII</source>
- <translation>Utilizar ASCII extendido</translation>
+ <translation>Usar ASCII extendido</translation>
</message>
<message>
<source>Exclude character set</source>
@@ -5829,7 +6100,7 @@ Comandos disponibles:
<message>
<source>Error reading merge file:
%1</source>
- <translation>Error al leer el archivo a combinar:
+ <translation>Error al leer el archivo a unir:
%1</translation>
</message>
<message>
@@ -5842,15 +6113,15 @@ Comandos disponibles:
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation>Apunte %1 reciclado correctamente.</translation>
+ <translation>Entrada %1 reciclada exitosamente.</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation>Apunte %1 eliminado correctamente.</translation>
+ <translation>Se eliminó correctamente la entrada %1.</translation>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation>Muestra el apunte actual del TOTP.</translation>
+ <translation>Muestra la entrada actual del TOTP.</translation>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
@@ -5861,10 +6132,6 @@ Comandos disponibles:
<translation>Ningún programa definido para la manipulación del portapapeles.</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>No se puede iniciar el programa %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>archivo vacío</translation>
</message>
@@ -5873,18 +6140,6 @@ Comandos disponibles:
<translation>%1: (fila, col) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recomendado)</translation>
</message>
@@ -5904,7 +6159,7 @@ Comandos disponibles:
<message>
<source>Invalid Key</source>
<comment>TOTP</comment>
- <translation>Clave inválida</translation>
+ <translation>Clave Inválida</translation>
</message>
<message>
<source>Message encryption failed.</source>
@@ -5924,7 +6179,7 @@ Comandos disponibles:
</message>
<message>
<source>Loading the key file failed</source>
- <translation>La carga del fichero clave falló</translation>
+ <translation>La carga del fichero de claves falló</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
@@ -5936,19 +6191,19 @@ Comandos disponibles:
</message>
<message>
<source>Successfully created new database.</source>
- <translation>Creación correcta de nueva base de datos.</translation>
+ <translation>Creación exitosa de nueva base de datos.</translation>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation>Error al crear el fichero clave %1: %2</translation>
+ <translation>Error al crear el archivo de clave %1: %2</translation>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>Error al cargar el fichero clave %1: %2</translation>
+ <translation>Error al cargar el archivo de claves %1: %2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
- <translation>Ruta del apunte a eliminar.</translation>
+ <translation>Ruta de la entrada a eliminar.</translation>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
@@ -5964,7 +6219,7 @@ Comandos disponibles:
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
- <translation>nombre de archivo de la base de datos de contraseñas a abrir (*.kdbx)</translation>
+ <translation>nombre de archivo de las bases de datos de contraseñas a abrir (*.kdbx)</translation>
</message>
<message>
<source>path to a custom config file</source>
@@ -5972,7 +6227,7 @@ Comandos disponibles:
</message>
<message>
<source>key file of the database</source>
- <translation>fichero clave de la base de datos</translation>
+ <translation>archivo llave de la base de datos</translation>
</message>
<message>
<source>read password of the database from stdin</source>
@@ -6135,10 +6390,6 @@ Núcleo: %3 %4</translation>
<translation>Representar esta ayuda.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>La ranura de YubiKey usada para cifrar la base de datos.</translation>
- </message>
- <message>
<source>slot</source>
<translation>ranura</translation>
</message>
@@ -6155,10 +6406,6 @@ Núcleo: %3 %4</translation>
<translation>Salir de modo interactivo.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formato a usar al exportar. Las opciones disponibles son xml o csv. Por defecto xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exporta el contenido de la base de datos en la salida estándar en el formato especificado.</translation>
</message>
@@ -6199,10 +6446,6 @@ Núcleo: %3 %4</translation>
<translation>Ruta de la nueva base de datos.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>No se puede importar la base de datos XML de la exportación %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Base de datos importada correctamente.</translation>
</message>
@@ -6228,7 +6471,7 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>La base de datos no fue modificada por la operación de combinar</translation>
+ <translation>La base de datos no fue modificada por la operación de combinación</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6295,10 +6538,6 @@ Núcleo: %3 %4</translation>
<translation>Ranura %1 de YubiKey inválida</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Pulse el botón de su YubiKey para desbloquear %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Introduzca la contraseña para cifrar la base de datos (opcional):</translation>
</message>
@@ -6314,13 +6553,9 @@ Núcleo: %3 %4</translation>
<source>User name</source>
<translation>Usuario</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Respuesta de desafío - Ranura %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>¡Contraseña para «%1» se ha filtrado %2 vez!</numerusform><numerusform>¡Contraseña para «%1» se ha filtrado %2 veces!</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6330,6 +6565,193 @@ Núcleo: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Mostrar los atributos protegidos en texto legible</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6366,6 +6788,290 @@ Núcleo: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Pobre</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Débil</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Ruta</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Ruta</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Ratón sobre líneas con iconos de error para información adicional.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nombre</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Espere, calculando las estadísticas de la base de datos...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nombre de la base de datos</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descripción</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Localización</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Última guardada</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Cambios no guardados</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>sí</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>no</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>La base de datos fue modificada pero los cambios no han sido guardados a disco todavía.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Número de grupos</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Número de entradas</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Número de entradas expiradas</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>La base de datos contiene entradas que han expirado.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Contraseñas únicas</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Contraseñas no únicas</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Más del 10% de las contraseñas son reusadas. Use contraseñas únicas si es posible.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Reuso máximo de contraseña</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Algunas contraseñas son usadas más de tres veces. Use contraseñas únicas si es posible.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Número de contraseñas cortas</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>La longitud mínima recomendada de contraseña es de al menos 8 caracteres.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Número de contraseñas débiles</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Se recomienda usar largas contraseñas aleatorias con una calificación de «buena» o «excelente».</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Longitud media de contraseña</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caracteres</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>La longitud media de contraseña es menos de diez caracteres. Las contraseñas más largas proporcionan más seguridad.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6393,18 +7099,26 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation>La vida útil limitada no es mantenida por el agente (verifique opciones).</translation>
+ <translation>La vida útil limitada no es soportada por el agente (verifique opciones).</translation>
</message>
<message>
<source>A confirmation request is not supported by the agent (check options).</source>
- <translation>La solicitud de confirmación no es mantenida por el agente (verifique opciones).</translation>
+ <translation>La solicitud de confirmación no es soportada por el agente (verifique opciones).</translation>
+ </message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>SearchHelpWidget</name>
<message>
<source>Search Help</source>
- <translation>Buscar ayuda</translation>
+ <translation>Buscar Ayuda</translation>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
@@ -6440,7 +7154,7 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>match anything</source>
- <translation>coincidir cualquiera</translation>
+ <translation>coincidir cualquier cosa</translation>
</message>
<message>
<source>match one</source>
@@ -6463,24 +7177,24 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Clear</source>
- <translation>Vaciar</translation>
+ <translation>Limpiar</translation>
</message>
<message>
<source>Limit search to selected group</source>
- <translation>Limitar la búsqueda al grupo seleccionado</translation>
+ <translation>Limitar la búsqueda al grupo selecionado</translation>
</message>
<message>
<source>Search Help</source>
- <translation>Buscar ayuda</translation>
+ <translation>Buscar Ayuda</translation>
</message>
<message>
<source>Search (%1)...</source>
<comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation>Buscar (%1)...</translation>
+ <translation>Buscar (%1) ...</translation>
</message>
<message>
<source>Case sensitive</source>
- <translation>Distinguir MAYÚS/minús</translation>
+ <translation>Distinguir mayúsculas/minúsculas</translation>
</message>
</context>
<context>
@@ -6506,26 +7220,10 @@ Núcleo: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Si la papelera de reciclaje está habilitada para la base de datos, las entradas serán movidas a la papelera directamente. Sino serán eliminadas sin confirmación.&lt;/p&gt;&lt;p&gt;Aún así se le solicitará si alguna entrada es referenciada por otras.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>No confirmar cuando las entrada son eliminadas por los clientes.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Exponer grupos de base de datos:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupo</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Gestionar</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorización</translation>
</message>
@@ -6534,40 +7232,20 @@ Núcleo: %3 %4</translation>
<translation>Estas aplicaciones están actualmente conectadas:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplicación</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Desconectar</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Configuración de la base de datos</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Editar configuración de base de datos</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Desbloquear base de datos</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock database to show more information</source>
- <translation>Desbloquear para mostrar más información</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Bloquear base de datos</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>Desbloquear para mostrar</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Ninguno</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6590,7 +7268,7 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Fingerprint:</source>
- <translation>Huella:</translation>
+ <translation>Huella dactilar:</translation>
</message>
<message>
<source>Certificate:</source>
@@ -6622,15 +7300,15 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Trust</source>
- <translation>Confiar</translation>
+ <translation>Confianza</translation>
</message>
<message>
<source>Ask</source>
- <translation>Solicitar</translation>
+ <translation>Preguntar</translation>
</message>
<message>
<source>Untrust</source>
- <translation>Desconfiar</translation>
+ <translation>Desconfianza</translation>
</message>
<message>
<source>Remove</source>
@@ -6671,11 +7349,11 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>KeeShare key file</source>
- <translation>Fichero clave de KeeShare</translation>
+ <translation>Archivo de clave de KeeShare</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos los archivo</translation>
+ <translation>Todos los archivos</translation>
</message>
<message>
<source>Select path</source>
@@ -6793,7 +7471,7 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation>No podemos verificar la tipografía del contenedor compartido porque no está firmado. ¿Desea importar desde %1?</translation>
+ <translation>No podemos verificar la fuente del contenedor compartido porque no está firmado. ¿Desea importar desde %1?</translation>
</message>
<message>
<source>Import from container with certificate</source>
@@ -6840,10 +7518,6 @@ Núcleo: %3 %4</translation>
<translation>Importación firmada correcta</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Error inesperado</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>No se soportan contenedores compartidos sin firmar - Importación prevenida</translation>
</message>
@@ -6868,7 +7542,7 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Import from %1 successful (%2)</source>
- <translation>Importación de %1 correcta (%2)</translation>
+ <translation>Importación de %1 exitosa (%2)</translation>
</message>
<message>
<source>Imported from %1</source>
@@ -6911,7 +7585,7 @@ Núcleo: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Caduca en &lt;b&gt;%n&lt;/b&gt; segundo</numerusform><numerusform>Caduca en &lt;b&gt;%n&lt;/b&gt; segundos</numerusform></translation>
+ <translation><numerusform>Caduca en &lt;b&gt;%n&lt;/b&gt; segundo(s)</numerusform><numerusform>Caduca en &lt;b&gt;%n&lt;/b&gt; segundo (s)</numerusform></translation>
</message>
</context>
<context>
@@ -6946,11 +7620,11 @@ Núcleo: %3 %4</translation>
</message>
<message>
<source>Steam token settings</source>
- <translation>Confiuración de token de Steam</translation>
+ <translation>Opciones de token de Steam</translation>
</message>
<message>
<source>Use custom settings</source>
- <translation>Utilizar configuración personalizada</translation>
+ <translation>Usar configuración personalizada</translation>
</message>
<message>
<source>Custom Settings</source>
@@ -6963,7 +7637,7 @@ Núcleo: %3 %4</translation>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> seg</translation>
+ <translation> segundos</translation>
</message>
<message>
<source>Code size:</source>
@@ -7013,6 +7687,13 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL invalida</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7028,7 +7709,7 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Update Error!</source>
- <translation>¡Error al acualizar!</translation>
+ <translation>¡Error al Acualizar!</translation>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
@@ -7036,7 +7717,7 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Please try again later.</source>
- <translation>Por favor inténtelo más tarde.</translation>
+ <translation>Por favor Inténtalo más tarde.</translation>
</message>
<message>
<source>Software Update</source>
@@ -7052,11 +7733,11 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation>Descárguela en keepassxc.org</translation>
+ <translation>Descargala en keepassxc.org</translation>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation>¡Está actualizado!</translation>
+ <translation>¡Estás al día!</translation>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
@@ -7103,6 +7784,53 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Presione</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasivo</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7110,21 +7838,13 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>YubiKey Challenge-Response</source>
- <translation>Desafío/respuesta YubiKey</translation>
+ <translation>Desafío/respuesta Yubikey</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
<translation>&lt;p&gt;Si posee una &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, puede usarla para seguridad adicional.&lt;/p&gt;&lt;p&gt; La YubiKey requiere que una de sus ranuras esté programada como &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;Desafío/respuesta HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>No se ha detectado YubiKey, asegúrese de que esté conectado.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>No hay YubiKey insertado.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Actualizar «tokens» hardware</translation>
</message>
@@ -7132,5 +7852,21 @@ Ejemplo: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Selección de ranura de clave hardware</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detectando llaves por hardware...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>No se detectaron llaves por hardware</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_et.ts b/share/translations/keepassx_et.ts
index 8038e2af1..4cfcfd9a8 100644
--- a/share/translations/keepassx_et.ts
+++ b/share/translations/keepassx_et.ts
@@ -49,12 +49,32 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH agendi lubamine (jõustub pärast programmi taaskäivitamist)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation>Pageanti asemel Windowsi OpenSSH kasutamine</translation>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
+ <source>Enable SSH Agent integration</source>
+ <translation>SSH agendi lõimingu lubamine</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK-i väärtus:</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK-i alistus:</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(tühi)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Ühtki SSH agendi pesa pole saadaval. Vaata, et keskkonnamuutuja &quot;SSH_AUTH_SOCK&quot; oleks määratud või sisesta allpool alistusväärtus.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH agendi ühendus toimib!</translation>
</message>
</context>
<context>
@@ -73,7 +93,7 @@
</message>
<message>
<source>Access error for config file %1</source>
- <translation type="unfinished"/>
+ <translation>Juurdepääsuviga seadistusfailil &quot;%1&quot;</translation>
</message>
<message>
<source>Icon only</source>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Kas oled kindel, et tahad kõik üld- ja turvaseaded lähtestada?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>mustvalge (hele)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>mustvalge (tume)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>värviline</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Failihaldus</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Andmebaasifailid salvestatakse turvaliselt (ei pruugi ühilduda Dropboxi jms-ga)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Enne salvestamist tehakse andmebaasifailist varukoopia</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Automaatne salvestamine programmi sulgemisel</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Andmeid mittepuudutavaid muudatusi (nt gruppide laiendamist) ei loeta andmebaasi muutmiseks</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Andmebaas laaditakse automaatselt uuesti, kui seda väljastpoolt (nt teise programmiga) muudetakse</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Kirjete loomisel määratakse neile grupi ikoon</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Kirjete eelvaatepaneel peidetud</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Üldine</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Tööriistariba (ikoonid) peidetud</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Sulgemise asemel minimeeritakse</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Ikoon süsteemisalves</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Tume ikoon</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Minimeerimisel peidetakse aken süsteemisalve</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Enne automaatsisestuse sooritamist küsitakse alati kinnitust</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Automaatsisestuse globaalne kiirklahv:</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Viivitus enne automaatsisestust:</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Viivitus automaatsisestuse klahvivajutuste vahel:</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Teisaldatav tööriistariba</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Sobivad ka beetaversioonid</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Nupustiil:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Keel:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Tööriistariba nuppude stiil</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Märkmete jaoks kasutatakse fikseeritud laiusega fonti</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Keelevalik</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Taasta vaikeseaded</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Automaatsisestuse globaalne kiirklahv</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Viivitus millisekundites enne automaatsisestuse alustamist</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>KeePassXC käivitatakse sisselogimisel automaatselt</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Ka andmeid mittepuudutavaid muudatusi (nt gruppide laiendamist) loetakse andmebaasi muutmiseks</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Andmebaasifailid salvestatakse turvaliselt (probleemide korral Dropboxi vms-ga tasub välja lülitada)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Kasutajaliides</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Tööriistariba nuppude stiil:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Märkmete jaoks kasutatakse fikseeritud laiusega fonti</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Süsteemisalve ikooni tüüp:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Taasta vaikeseaded…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Viivitus enne automaatsisestust:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Automaatsisestuse globaalne kiirklahv:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Viivitus automaatsisestuse klahvivajutuste vahel:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -342,7 +370,7 @@
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
+ <translation>TouchID unustatakse, kui andmebaase pole kasutatud kauem kui</translation>
</message>
<message>
<source>Convenience</source>
@@ -365,18 +393,6 @@
<translation>Pärast automaatsisestuse sooritamist lukustatakse eelnevalt lukus olnud andmebaas uuesti</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Nähtava paroolivälja korral ei nõuta parooli kordamist</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Paroolid on muutmise ajal nähtavad</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Tühje paroole ei varjata täppidega</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Kirjete eelvaatepaneelil varjatakse paroolid täppidega</translation>
</message>
@@ -398,7 +414,7 @@
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation type="unfinished"/>
+ <translation>TouchID unustamise viivitus</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Otsinguväli puhastatakse pärast</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Ka nähtava paroolivälja korral nõutakse parooli kordamist</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Paroolid on muutmise ajal peidetud</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Ka tühjad paroolid varjatakse täppidega</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -422,7 +450,7 @@
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Automaatsisestus – KeePassXC</translation>
+ <translation>Automaatsisestus - KeePassXC</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -513,7 +541,7 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Automaatsisestus – KeePassXC</translation>
+ <translation>Automaatsisestus - KeePassXC</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browseri ligipääsukinnitus</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Otsus jäetakse meelde</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Luba</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Keela</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 soovib ligipääsu alltoodud kirje(te) paroolile.
-Kas lubada ligipääs?</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>Luba ligipääs</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
- <translation>Keela ligipääs</translation>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -579,199 +609,255 @@ Vali, millisesse neist tunnused salvestada tuleks.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialoog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>Uus ühendumistaotlus – KeePassXC</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>See on vajalik andmebaasidele KeePassXC-Browseri abil ligipääsemiseks.</translation>
+ <source>Save and allow access</source>
+ <translation>Salvesta ja luba ligipääs</translation>
</message>
<message>
- <source>General</source>
- <translation>Üldine</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>Kirje ülekirjutamise kinnitus – KeePassXC</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Lubatakse lõimimine järgmiste brauseritega:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>Kirje uuendamine – KeePassXC</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Katkesta</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Tunnuste taotlemisel kuvatakse märguanne</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Kui an&amp;dmebaas on lukus, küsitakse luku avamist</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Kui see ruut on märgitud, tagastatakse ainult kirjed, mille URL-il on sama skeem (http, https, ...) nagu aktiivsel veebilehel.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Nõutakse &amp;URL-i skeemi vastavust (nt https://... vs. http://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Märkimisel tagastatakse ainult konkreetse URL-i kohta käivad vasted, mitte kõik kirjed, mille URL-i domeeniosa klapib.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Tagastatakse vaid kõige paremini &amp;sobivad tunnused</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>Uue grupi loomine – KeePassXC</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sobivad tunnused sorditakse &amp;pealkirja järgi</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sobivad tunnused sorditakse &amp;kasutajanime järgi</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Advanced</source>
- <translation>Lisaseaded</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Seda hoiatust rohkem ei näidata</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Tunnuste &amp;kasutamisel ei küsita kinnitust</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Saadi taotlus ühenduda järgmise andmebaasiga:
+%1
+
+Määra palun sellele ühendusele ainukordne nimi või ID, näiteks:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Tunnuste &amp;uuendamisel ei küsita kinnitust</translation>
+ <source>Dialog</source>
+ <translation>Dialoog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Tunnuseid otsitakse kõigist avatud andme&amp;baasidest</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>See on vajalik andmebaasidele KeePassXC-Browseri abil ligipääsemiseks.</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Stringiväljade automaatne loomine või uuendamine pole toetatud.</translation>
+ <source>Enable browser integration</source>
+ <translation>Brauserilõimingu lubamine</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Tagastatakse ka lisa&amp;stringiväljad, mille alguses on &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Üldine</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Märkimisel uuendatakse käivitusel programmiomase teatevahetuse skriptides automaatselt KeePassXC või keepassxc-proxy binaarfaili asukohta.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>&lt;i&gt;Snap&lt;/i&gt;&apos;ina paigaldatud brausereid praegu ei toetata.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Käivitusel uuendatakse programmiomase teatevahetuse &amp;manifestifaile</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Lubatakse lõimimine järgmiste brauseritega:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Märkimisel lubatakse KeePassXC ja brauserilaienduse vahelise puhverrakenduse tugi.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>KeePassXC ja brauserilaienduse vahel kasutatakse &amp;puhverrakendust</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Kui paigaldasid puhverrakenduse käsitsi, saab siin määrata selle asukoha.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Kasutatakse kohandatud puhver&amp;rakenduse asukohta:</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Sirvi...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Hoiatus:&lt;/b&gt; nende seadete muutmine võib olla ohtlik!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Kohandatud puhverrakenduse valimine</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Tunnuste taotlemisel kuvatakse märguanne</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Rakendusfailid</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Kui andmebaas on lukus, küsitakse luku avamist</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Kõik failid</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Kui see ruut on märgitud, tagastatakse ainult kirjed, mille URL-il on sama skeem (http, https, ...) nagu aktiivsel veebilehel.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>&amp;HTTP lihtautentimiseks luba ei küsita</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Nõutakse URL-i skeemi vastavust (nt https://... vs. http://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation type="unfinished"/>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Märkimisel tagastatakse ainult konkreetse URL-i kohta käivad vasted, mitte kõik kirjed, mille URL-i domeeniosa klapib.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Vaata allpool brauserilaienduse kasutamise erijuhiseid.</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Tagastatakse vaid kõige paremini sobivad tunnused</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Lõimingu toimimiseks peab brauserile olema paigaldatud laiendus KeePassXC-Browser. &lt;br /&gt;See on saadaval %1i ja %2&apos;i jaoks. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Märkimisel tagastatakse ka aegunud tunnused. Nende pealkirja ette lisatakse [aegunud].</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Lubatakse aegunud tunnuste tagastamine</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Märkimisel tagastatakse ka aegunud tunnused. Nende pealkirja ette lisatakse [aegunud].</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Märkimisel tagastatakse sobivad tunnused kõigist laiendusega ühendatud andmebaasidest.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>Lubatakse &amp;aegunud tunnuste tagastamine</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Tunnuseid otsitakse kõigist avatud andmebaasidest</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Brauserilõimingu lubamine</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sobivad tunnused sorditakse pealkirja järgi</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>&lt;i&gt;Snap&lt;/i&gt;&apos;ina paigaldatud brausereid praegu ei toetata.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sobivad tunnused sorditakse kasutajanime järgi</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Märkimisel tagastatakse sobivad tunnused kõigist laiendusega ühendatud andmebaasidest.</translation>
+ <source>Advanced</source>
+ <translation>Lisaseaded</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Tunnuste kasutamisel ei küsita kinnitust</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Tunnuste uuendamisel ei küsita kinnitust</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>HTTP lihtautentimiseks luba ei küsita</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Stringiväljade automaatne loomine või uuendamine pole toetatud.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Tagastatakse ka lisastringiväljad, mille alguses on &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Märkimisel ei näidata hüpikakent, mis pakub KeePassHTTP pärandseadistuse migreerimist.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Ei pakuta KeePassHTTP seadistuse ülekolimist</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Ei pakuta KeePassHTTP seadistuse ülekolimist</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Märkimisel uuendatakse käivitusel programmiomase teatevahetuse skriptides automaatselt KeePassXC või keepassxc-proxy binaarfaili asukohta.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Käivitusel uuendatakse programmiomase teatevahetuse manifestifaile</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Kui paigaldasid puhverrakenduse käsitsi, saab siin määrata selle asukoha.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Kasutatakse kohandatud puhverrakenduse asukohta:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -779,104 +865,84 @@ Vali, millisesse neist tunnused salvestada tuleks.</translation>
</message>
<message>
<source>Browser for custom proxy file</source>
- <translation type="unfinished"/>
+ <translation>Vali kohandatud puhverrakenduse fail</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Sirvi...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>Uus ühendumistaotlus – KeePassXC</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Kasutatakse kohandatud brauseriseadistuse asukohta:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Salvesta ja luba ligipääs</translation>
+ <source>Browser type:</source>
+ <translation>Brauseritüüp:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>Kirje ülekirjutamise kinnitus – KeePassXC</translation>
+ <source>Toolbar button style</source>
+ <translation>Tööriistariba nuppude stiil</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
+ <source>Config Location:</source>
+ <translation>Seadete asukoht:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>Kirje uuendamine – KeePassXC</translation>
+ <source>Custom browser location field</source>
+ <translation>Kohandatud brauseriseadistuse asukoha väli</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Katkesta</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Vali kohandatud brauseriseadistuse asukoht</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
+ <source>Custom extension ID:</source>
+ <translation>Kohandatud laienduse-ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
+ <source>Custom extension ID</source>
+ <translation>Kohandatud laienduse-ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>&lt;i&gt;Snap&lt;/i&gt;&apos;ide isoleerituse tõttu tuleb brauserilõimingu võimaldamiseks esmalt teatud skript käivitada.&lt;br /&gt;Vajaliku skripti saab aadressilt %1.</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>Lõimingu toimimiseks peab brauserile olema paigaldatud laiendus KeePassXC-Browser. &lt;br /&gt;See on saadaval %1i, %2&apos;i ja %3&apos;i jaoks. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Vaata allpool brauserilaienduse kasutamise erijuhiseid.</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Viga:&lt;/b&gt; kohandatud puhverrakenduse asukohta ei leitud!&lt;br/&gt;Ilma puhverrakenduseta brauserilõiming EI TÖÖTA.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>Uue grupi loomine – KeePassXC</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Hoiatus:&lt;/b&gt; nende seadete muutmine võib olla ohtlik!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation type="unfinished"/>
+ <source>Executable Files</source>
+ <translation>Rakendusfailid</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation type="unfinished"/>
+ <source>All Files</source>
+ <translation>Kõik failid</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
+ <source>Select custom proxy location</source>
+ <translation>Kohandatud puhverrakenduse valimine</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Saadi taotlus ühenduda järgmise andmebaasiga:
-%1
-
-Määra palun sellele ühendusele ainukordne nimi või ID, näiteks:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Programmiomase teatevahetuse hosti kausta valimine</translation>
</message>
</context>
<context>
@@ -933,10 +999,6 @@ chrome-laptop.</translation>
<translation>Kommentaaride tähis:</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Esimesel real on väljade nimed</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Längkriipsu &quot;\&quot; tuleb käsitleda paomärgina</translation>
</message>
@@ -945,14 +1007,6 @@ chrome-laptop.</translation>
<translation>Eelvaade</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Veergude paigutus</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>ei esine CSV-failis</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Imporditud CSV-failist</translation>
</message>
@@ -965,14 +1019,6 @@ chrome-laptop.</translation>
<translation>Viga</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>tühi välja nimi %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>%1. veerg</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>CSV-failis leiti vigu:</translation>
</message>
@@ -983,11 +1029,12 @@ chrome-laptop.</translation>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation type="unfinished"/>
+ <translation>CSV importimine: kirjutamisel ilmnes vigu:
+%1</translation>
</message>
<message>
<source>Text qualification</source>
- <translation type="unfinished"/>
+ <translation>Teksti eraldaja</translation>
</message>
<message>
<source>Field separation</source>
@@ -1001,6 +1048,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>CSV importimise eelvaade</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Veergude vastendamine</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Muutmisaeg:</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Parool:</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Loomisaeg:</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Märkmed:</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Pealkiri:</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupp:</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL:</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Kasutajanimi:</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Eiratavate päiseridade arv:</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Esimesel real on väljade nimed</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>puudub</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>%1. veerg</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1025,13 +1124,8 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Juur</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
- <translation type="unfinished"/>
+ <translation>Faili &quot;%1&quot; pole olemas.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
@@ -1043,39 +1137,53 @@ chrome-laptop.</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
+ <translation>Faili kirjutamine pole võimalik, kuna see on avatud kirjutuskaitstud režiimis.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation type="unfinished"/>
+ <translation>Võti jäi teisendamata. See on programmiviga – palun anna sellest arendajatele teada!</translation>
</message>
<message>
<source>%1
Backup database located at %2</source>
- <translation type="unfinished"/>
+ <translation>%1
+Varuandmebaasi asukoht: %2</translation>
</message>
<message>
<source>Could not save, database does not point to a valid file.</source>
- <translation type="unfinished"/>
+ <translation>Salvestamine pole võimalik, andmebaas ei osuta sobivale failile.</translation>
</message>
<message>
<source>Could not save, database file is read-only.</source>
- <translation type="unfinished"/>
+ <translation>Salvestamine pole võimalik, andmebaasifail on kirjutuskaitstud.</translation>
</message>
<message>
<source>Database file has unmerged changes.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasifailis on mestimata muudatusi.</translation>
</message>
<message>
<source>Recycle Bin</source>
<translation>Prügikast</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Paroolid</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Andmebaasi salvestamine juba käib.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Salvestamine pole võimalik, andmebaas on initsialiseerimata!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Andmebaasi luku avamine – KeePassXC</translation>
+ <translation>Andmebaasi luku avamine - KeePassXC</translation>
</message>
</context>
<context>
@@ -1090,18 +1198,21 @@ Backup database located at %2</source>
</message>
<message>
<source>Legacy key file format</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili pärandvorming</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation type="unfinished"/>
+ <translation>Kasutad pärandvormingus võtmefaili, mis ei pruugi
+programmi järgmistes versioonides enam toetatud olla.
+
+Kaalu uue võtmefaili genereerimist.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
+ <translation>Seda hoiatust rohkem ei näidata</translation>
</message>
<message>
<source>All files</source>
@@ -1117,11 +1228,7 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Failed to open key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select slot...</source>
- <translation>Vali pesa...</translation>
+ <translation>Võtmefaili avamine ebaõnnestus: %1</translation>
</message>
<message>
<source>Unlock KeePassXC Database</source>
@@ -1136,14 +1243,6 @@ Please consider generating a new key file.</source>
<translation>Parooli väli</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Lülita parooli nähtavust</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Võtmefaili valimine</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Riistvaralise võtme pesa valimine</translation>
</message>
@@ -1165,11 +1264,11 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Hardware key help</source>
- <translation type="unfinished"/>
+ <translation>Riistvaralise võtme abi</translation>
</message>
<message>
<source>TouchID for Quick Unlock</source>
- <translation type="unfinished"/>
+ <translation>TouchID kasutamine kiiresti luku avamiseks</translation>
</message>
<message>
<source>Clear</source>
@@ -1208,10 +1307,6 @@ Selle veateate ilmumise vältimiseks peaksid avama andmebaasi seadetes turvalisu
&lt;p&gt;Lisateabe saamiseks klõpsa.&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Key file help</source>
<translation>Abi võtmefailide kohta</translation>
</message>
@@ -1220,10 +1315,6 @@ Selle veateate ilmumise vältimiseks peaksid avama andmebaasi seadetes turvalisu
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Vali võtmefail...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Andmebaasifail ei sobi võtmefailiks</translation>
</message>
@@ -1233,6 +1324,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Andmebaasifaili ennast ei saa võtmefailina kasutada.
Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Lisaks paroolile saab andmebaasi turvalisuse suurendamiseks kasutada võtmefaili. Selle saab genereerida andmebaasi turvaseadetes.&lt;/p&gt;&lt;p&gt;See &lt;strong&gt;ei ole&lt;/strong&gt; sinu *.kdbx andmebaasifail!&lt;br&gt;Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.&lt;/p&gt;&lt;p&gt;Lisateabe saamiseks klõpsa.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Võtmefail andmebaasi luku avamiseks</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Puuduta YubiKey nuppu!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>riistvaraliste võtmete tuvastamine…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>riistvaralisi võtmeid ei tuvastatud</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>vali riistvaraline võti…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1256,10 +1371,6 @@ Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</trans
<translation>Turvalisus</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Ülemvõti</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Krüptimisseaded</translation>
</message>
@@ -1267,6 +1378,10 @@ Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</trans
<source>Browser Integration</source>
<translation>Brauserilõiming</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Andmebaasi tunnused</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1275,18 +1390,6 @@ Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</trans
<translation>KeePassXC-Browseri seaded</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Katkesta ühendus kõigi brauseritega</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>&amp;Unusta kirjete saidiomased seaded</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>&amp;Teisalda KeePassHTTP atribuudid KeePassXC-Browseri kohandatud andmetesse</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Salvestatud võtmed</translation>
</message>
@@ -1344,7 +1447,7 @@ See võib tõkestada ühendumise brauseripluginaga.</translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
+ <translation>Unusta kirjete kõik saidiomased seaded</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
@@ -1392,6 +1495,66 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>Eemalda valitud võti</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Teisalda KeePassHTTP atribuudid KeePassXC-Browseri kohandatud andmetesse</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Värskenda andmebaasi juurgrupi ID-d</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Loodud</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Andmebaasi ID värskendamine</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Lisa täiendav kaitse...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Parooli pole määratud</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>HOIATUS! Sa ei määranud parooli. Andmebaasi kasutamine ilma paroolita on äärmiselt ebasoovitatav!
+
+Kas oled kindel, et soovid jätkata ilma paroolita?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Jätka ilma paroolita</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Ühtki krüptimisvõtit pole lisatud</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Andmebaasi kaitsmiseks tuleb lisada vähemalt üks krüptimisvõti.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Tundmatu viga</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Andmebaasi tunnuste vahetamine ebaõnnestus.</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1416,10 +1579,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Teisendusraundide arv:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Mälukasutus:</translation>
</message>
@@ -1440,14 +1599,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Muuda</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Mida suurem väärtus, seda kaitstum on andmebaas, kuid seda kauem võtab ka selle avamine.</translation>
</message>
@@ -1508,11 +1659,11 @@ Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda!</
</message>
<message>
<source>KDF unchanged</source>
- <translation type="unfinished"/>
+ <translation>KDF jäeti muutmata</translation>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
+ <translation>Võtme teisendamine uute KDF-parameetrite abil ebaõnnestus, nii et KDF jäeti muutmata.</translation>
</message>
<message numerus="yes">
<source> MiB</source>
@@ -1524,23 +1675,13 @@ Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda!</
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> lõim</numerusform><numerusform> lõime</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
- <translation type="unfinished"/>
+ <translation>Muuda juba määratud lahtikrüptimise aega</translation>
</message>
<message>
<source>Decryption time in seconds</source>
- <translation type="unfinished"/>
+ <translation>Lahtikrüptimise aeg sekundites</translation>
</message>
<message>
<source>Database format</source>
@@ -1566,6 +1707,14 @@ Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda!</
<source>Parallelism</source>
<translation>Rööpsus</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1574,16 +1723,16 @@ Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda!</
<translation>Nähtavad kirjed</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Seda andmebaasi &amp;ei tehta nähtavaks</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Seda andmebaasi ei tehta nähtavaks</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>&amp;Nähtavaks tehakse määratud grupi all olevad kirjed:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Nähtavaks tehakse määratud grupi all olevad kirjed:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Nende seadete määramiseks luba süsteemis Freedesktop.org-i saladuste teenus.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Nende seadete määramiseks luba programmi seadetes saladuste teenuse lõiming.</translation>
</message>
</context>
<context>
@@ -1629,10 +1778,6 @@ Kui jätad selle suuremaks muutmata, võib andmebaasi olla lihtne lahti murda!</
<translation>Andmebaasi lisaseaded</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Andmebaasi tihendamine (soovituslik)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Andmebaasi nime väli</translation>
</message>
@@ -1666,6 +1811,10 @@ Seda toimingut ei saa tagasi võtta.</translation>
<source> (old)</source>
<translation> (vana)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Andmebaasi tihendamine (soovituslik)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1700,45 +1849,6 @@ Seda toimingut ei saa tagasi võtta.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Lisa täiendav kaitse...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Ühtki krüptimisvõtit pole lisatud</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Andmebaasi kaitsmiseks tuleb lisada vähemalt üks krüptimisvõti.</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Parooli pole määratud</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>HOIATUS! Sa ei määranud parooli. Andmebaasi kasutamine ilma paroolita on äärmiselt ebasoovitatav!
-
-Kas oled kindel, et soovid jätkata ilma paroolita?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Tundmatu viga</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Jätka ilma paroolita</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1758,125 +1868,6 @@ Kas oled kindel, et soovid jätkata ilma paroolita?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistika</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Veaikooniga ridade kohta täpsema teabe saamiseks hoia hiirekursorit vastaval real.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nimi</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Väärtus</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Andmebaasi nimi</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Kirjeldus</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Asukoht</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Viimati salvestanud</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Salvestamata muudatusi</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>on</translation>
- </message>
- <message>
- <source>no</source>
- <translation>pole</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Andmebaasi on muudetud, kuid muudatused pole veel kettale salvestatud.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Gruppide arv</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Kirjete arv</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Aegunud kirjete arv</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Andmebaas sisaldab aegunud kirjeid.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Unikaalsete paroolide arv</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Korduvate paroolide arv</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Rohkem kui 10% paroolidest on kasutatud korduvalt. Kui vähegi võimalik, kasuta ainukordseid paroole.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Sagedasima parooli kasutuskordade arv</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Mõnda parooli on kasutatud enam kui kolm korda. Kui vähegi võimalik, kasuta ainukordseid paroole.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Lühikeste paroolide arv</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Paroolide soovituslik pikkus on vähemalt 8 märki.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Nõrkade paroolide arv</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Soovitatav on kasutada pikki juhuslikest märkidest koosnevaid paroole, mille tugevushinnang on &quot;hea&quot; või &quot;suurepärane&quot;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Paroolide keskmine pikkus</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 märki</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Paroolide keskmine pikkus on alla kümne märgi. Pikemad paroolid on turvalisemad.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Palun oota, andmebaasi statistikat arvutatakse...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1912,16 +1903,17 @@ Kas oled kindel, et soovid jätkata ilma paroolita?</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation type="unfinished"/>
+ <translation>CSV-faili kirjutamine ebaõnnestus.</translation>
</message>
<message>
<source>Database creation error</source>
- <translation type="unfinished"/>
+ <translation>Viga andmebaasi loomisel</translation>
</message>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
+ <translation>Loodud andmebaasil pole ei võtit ega KDF-i, nii et selle salvestamisest keelduti.
+See on kahtlemata programmiviga – palun anna sellest arendajatele teada!</translation>
</message>
<message>
<source>Select CSV file</source>
@@ -1960,7 +1952,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation type="unfinished"/>
+ <translation>HTML-faili kirjutamine ebaõnnestus.</translation>
</message>
<message>
<source>Export Confirmation</source>
@@ -1970,12 +1962,16 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Asusid andmebaasi eksportima krüptimata failivormingusse. See jätab su paroolid jm tundliku teabe kaitseta! Kas oled kindel, et soovid jätkata?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>OPVaulti avamine</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation type="unfinished"/>
+ <translation>Otsimine...</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
@@ -1991,11 +1987,11 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Execute command?</source>
- <translation type="unfinished"/>
+ <translation>Käsu käivitamise kinnitus</translation>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
+ <translation>Kas oled kindel, et tahad käivitada järgmise käsu?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
@@ -2007,11 +2003,11 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>No current database.</source>
- <translation type="unfinished"/>
+ <translation>Aktiivne andmebaas puudub.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
+ <translation>Lähteandmebaas puudub, midagi pole teha.</translation>
</message>
<message>
<source>Search Results (%1)</source>
@@ -2023,20 +2019,21 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>File has changed</source>
- <translation type="unfinished"/>
+ <translation>Faili on muudetud</translation>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasifaili on muudetud. Kas tahad selle uuesti avada?</translation>
</message>
<message>
<source>Merge Request</source>
- <translation type="unfinished"/>
+ <translation>Mestimistaotlus</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasifaili on muudetud, aga sinul on salvestamata muudatusi.
+Kas tahad oma muudatused mestida?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2085,16 +2082,18 @@ Kas salvestada muudatused?</translation>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation type="unfinished"/>
+ <translation>Automaatse taaslaadimise käigus polnud uut andmebaasifaili võimalik avada.
+Veateade: %1</translation>
</message>
<message>
<source>Disable safe saves?</source>
- <translation type="unfinished"/>
+ <translation>Turvalise salvestamise keelamine</translation>
</message>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC-l on ebaõnnestunud mitu katset andmebaasi salvestada. Tõenäoliselt põhjustab seda mõni failisünkimisteenus, mis salvestatavat faili lukus hoiab.
+Kas keelata turvaline salvestamine ja proovida seejärel uuesti?</translation>
</message>
<message>
<source>Passwords</source>
@@ -2110,11 +2109,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Replace references to entry?</source>
- <translation type="unfinished"/>
+ <translation>Kirje viidete asendamise kinnitus</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Kirjele &quot;%1&quot; leidub %2 viide. Kas kirjutada viide vastava väärtusega üle, jätta see kirje vahele või see ikkagi kustutada?</numerusform><numerusform>Kirjele &quot;%1&quot; leidub %2 viidet. Kas kirjutada viited vastavate väärtustega üle, jätta see kirje vahele või see ikkagi kustutada?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2134,19 +2133,27 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
+ <translation>Mestimise käigus andmebaasi ei muudetud.</translation>
</message>
<message>
<source>Shared group...</source>
- <translation type="unfinished"/>
+ <translation>Jagatud grupp…</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi kirjutamine ebaõnnestus: %1</translation>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaas on avatud kirjutuskaitstud režiimis. Automaatne salvestamine on välja lülitatud.</translation>
+ </message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Andmebaasi varukoopia salvestamine</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Andmebaasifaili ei leitud: %1</translation>
</message>
</context>
<context>
@@ -2157,7 +2164,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Advanced</source>
- <translation>Lisaomadused</translation>
+ <translation>Lisaseaded</translation>
</message>
<message>
<source>Icon</source>
@@ -2181,7 +2188,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>n/a</source>
- <translation type="unfinished"/>
+ <translation>–</translation>
</message>
<message>
<source>(encrypted)</source>
@@ -2192,14 +2199,6 @@ Disable safe saves and try again?</source>
<translation>Privaatvõtme valimine</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Entry history</source>
<translation>Kirje ajalugu</translation>
</message>
@@ -2212,10 +2211,6 @@ Disable safe saves and try again?</source>
<translation>Kirje muutmine</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>New attribute</source>
<translation>Uus atribuut</translation>
</message>
@@ -2236,29 +2231,13 @@ Disable safe saves and try again?</source>
<translation><numerusform>%n kuu pärast</numerusform><numerusform>%n kuu pärast</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>Kas salvestada kirjesse tehtud muudatused?</translation>
+ <translation>Kirje kenasti uuendatud.</translation>
</message>
<message>
<source>New attribute %1</source>
<translation>Uus atribuut %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[KAITSTUD] Vaatamiseks või muutmiseks klõpsa &quot;Paljasta&quot;</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n aasta pärast</numerusform><numerusform>%n aasta pärast</numerusform></translation>
@@ -2279,6 +2258,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation>Kas oled kindel, et soovid selle URL-i eemaldada?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Paljasta</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Peida</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Salvestamata muudatused</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Kas salvestada selles kirjes tehtud muudatused?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[KAITSTUD] Vaatamiseks või muutmiseks klõpsa &quot;Paljasta&quot;</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2320,39 +2319,47 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Attribute selection</source>
- <translation type="unfinished"/>
+ <translation>Atribuudi valik</translation>
</message>
<message>
<source>Attribute value</source>
- <translation type="unfinished"/>
+ <translation>Atribuudi väärtus</translation>
</message>
<message>
<source>Add a new attribute</source>
- <translation type="unfinished"/>
+ <translation>Lisa uus atribuut</translation>
</message>
<message>
<source>Remove selected attribute</source>
- <translation type="unfinished"/>
+ <translation>Eemalda valitud atribuut</translation>
</message>
<message>
<source>Edit attribute name</source>
- <translation type="unfinished"/>
+ <translation>Muuda valitud atribuudi nime</translation>
</message>
<message>
<source>Toggle attribute protection</source>
- <translation type="unfinished"/>
+ <translation>Lülita atribuudi kaitset</translation>
</message>
<message>
<source>Show a protected attribute</source>
- <translation type="unfinished"/>
+ <translation>Näita kaitstud atribuuti</translation>
</message>
<message>
<source>Foreground color selection</source>
- <translation type="unfinished"/>
+ <translation>Vali esiplaani värv</translation>
</message>
<message>
<source>Background color selection</source>
- <translation type="unfinished"/>
+ <translation>Vali taustavärv</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Märkimisel ei kaasata seda kirjet andmebaasi tervisekontrolli ega HIBP aruannetesse, isegi kui see ei vasta kvaliteedinõuetele (nt parooli vähese entroopia või korduva kasutamise tõttu). Märgi see ruut, kui parooli keerukus ei allu sinu kontrollile (nt kui see peab olema neljakohaline PIN) ja soovid, et see ei risustaks andmebaasi aruandeid.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Kirje jäetakse andmebaasi aruannetest välja</translation>
</message>
</context>
<context>
@@ -2362,14 +2369,6 @@ Disable safe saves and try again?</source>
<translation>Automaatsisestuse lubamine selle kirje puhul</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>&amp;Grupilt päritud automaatsisestuse jada</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Omamääratud automaatsisestuse jada:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Aknaseosed</translation>
</message>
@@ -2425,6 +2424,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation>Omamääratud automaatsisestuse jada selle akna jaoks</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Grupilt päritud automaatsisestuse jada</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Omamääratud automaatsisestuse jada:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2460,6 +2467,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>Muuda</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Märkimisel saadetakse see kirje brauserile ainult HTTP autentimisdialoogide puhul ning tavaliste sisselogimisvormide korral seda kirjet valida ei saa.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Seda kirjet kasutatakse vaid HTTP lihtautentimisel</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2511,34 +2526,22 @@ Disable safe saves and try again?</source>
<translation>Parool:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Kordus:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Pealkiri:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Märkmed</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Valmisseaded</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
+ <translation>Märkmete nägemiseks või muutmiseks märgi kõrvalolev ruut.</translation>
</message>
<message>
<source>Username:</source>
<translation>Kasutajanimi:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Aegub</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL-i väli</translation>
</message>
@@ -2547,22 +2550,10 @@ Disable safe saves and try again?</source>
<translation>Laadi alla saidiikoon selle URL-i jaoks</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Parooli korduse väli</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Lülita parooligeneraatori nähtavust</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Parooli väli</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Lülita parooli nähtavust</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Lülita märkmete nähtavust</translation>
</message>
@@ -2594,12 +2585,24 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>Lülita aegumist</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Märkmed:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://näide.ee</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Aegub:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
<message>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Vorm</translation>
</message>
<message>
<source>Remove key from agent after</source>
@@ -2635,7 +2638,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>n/a</source>
- <translation type="unfinished"/>
+ <translation>–</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -2672,19 +2675,19 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
- <translation type="unfinished"/>
+ <translation>Võtme agendilt eemaldamise viivitus sekundites</translation>
</message>
<message>
<source>Browser for key file</source>
- <translation type="unfinished"/>
+ <translation>Vali võtmefail</translation>
</message>
<message>
<source>External key file</source>
- <translation type="unfinished"/>
+ <translation>Väline võtmefail</translation>
</message>
<message>
<source>Select attachment file</source>
- <translation type="unfinished"/>
+ <translation>Kaasatud faili valimine</translation>
</message>
</context>
<context>
@@ -2723,16 +2726,12 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>Kas salvestada grupile tehtud muudatused?</translation>
+ <translation>Kas salvestada kirjesse tehtud muudatused?</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Type:</source>
<translation>Tüüp:</translation>
</message>
@@ -2741,10 +2740,6 @@ Disable safe saves and try again?</source>
<translation>Asukoht:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Parool:</translation>
</message>
@@ -2762,11 +2757,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Select import source</source>
- <translation type="unfinished"/>
+ <translation>Imporditava lähtefaili valimine</translation>
</message>
<message>
<source>Select export target</source>
- <translation type="unfinished"/>
+ <translation>Eksporditava sihtfaili valimine</translation>
</message>
<message>
<source>Select import/export file</source>
@@ -2778,7 +2773,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Import</source>
- <translation>importimine</translation>
+ <translation>Impordi</translation>
</message>
<message>
<source>Export</source>
@@ -2827,96 +2822,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation>Parooli väli</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Lülita parooli nähtavust</translation>
+ <source>Clear fields</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Lülita parooligeneraatori nähtavust</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Sirvi...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nimi</translation>
+ <source>Name field</source>
+ <translation>Nime väli</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Märkmed</translation>
+ <source>Notes field</source>
+ <translation>Märkmete väli</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Aegub</translation>
+ <source>Toggle expiration</source>
+ <translation>Lülita aegumist</translation>
</message>
<message>
- <source>Search</source>
- <translation>Otsimine</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation>Automaatsisestusfunktsiooni lülitamine selle grupi ja alamgruppide jaoks</translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Automaatsisestus</translation>
+ <source>Expiration field</source>
+ <translation>Aegumise väli</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Kasutatakse ülemgrupi vaikimisi automaatsisestuse jada</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation>Otsingufunktsiooni lülitamine selle grupi ja alamgruppide jaoks</translation>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Grupile määratakse oma vaikimisi automaatsisestuse jada</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>Vaikimisi automaatsisestuse jada väli</translation>
</message>
<message>
- <source>Name field</source>
- <translation>Nime väli</translation>
+ <source>Expires:</source>
+ <translation>Aegub:</translation>
</message>
<message>
- <source>Notes field</source>
- <translation>Märkmete väli</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Kasutatakse ülemgrupi vaikimisi automaatsisestuse jada</translation>
</message>
<message>
- <source>Toggle expiration</source>
- <translation>Lülita aegumist</translation>
+ <source>Auto-Type:</source>
+ <translation>Automaatsisestus:</translation>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
- <translation type="unfinished"/>
+ <source>Search:</source>
+ <translation>Otsing:</translation>
</message>
<message>
- <source>Expiration field</source>
- <translation>Aegumise väli</translation>
+ <source>Notes:</source>
+ <translation>Märkmed:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
- <translation type="unfinished"/>
+ <source>Name:</source>
+ <translation>Nimi:</translation>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation>Vaikimisi automaatsisestuse jada väli</translation>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Grupile määratakse oma vaikimisi automaatsisestuse jada</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Vaikeikoon</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>&amp;Kohandatud ikoon</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Lisa kohandatud ikoon</translation>
</message>
@@ -2926,11 +2909,11 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Download favicon</source>
- <translation>Laadi alla saidiikoon</translation>
+ <translation>Laadi alla saidi&amp;ikoon</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
+ <translation>Saidiikooni allalaadimine polnud võimalik.</translation>
</message>
<message>
<source>Images</source>
@@ -2950,19 +2933,19 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%1 ikoon %n-st kenasti laaditud</numerusform><numerusform>%1 ikooni %n-st kenasti laaditud</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
- <translation type="unfinished"/>
+ <translation>Ühtki ikooni ei laaditud</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n ikoon on juba andmebaasis olemas</numerusform><numerusform>%n ikooni on juba andmebaasis olemas</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Järgmise ikooni laadimine ebaõnnestus:</numerusform><numerusform>Järgmiste ikoonide laadimine ebaõnnestus:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
@@ -2970,7 +2953,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
- <translation type="unfinished"/>
+ <translation>Võid sisse lülitada DuckDuckGo veebisaidiikoonide teenuse, valides menüüst Tööriistad &gt; Seaded &gt; Turvalisus.</translation>
</message>
<message>
<source>Download favicon for URL</source>
@@ -2981,14 +2964,6 @@ Supported extensions are: %1.</source>
<translation>Vali, kas rakendada valitud ikoon ainult grupile endale või ka selle alamkirjetele</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Rakendatakse ainult grupile endale</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Rakendatakse ka alamgruppidele</translation>
</message>
@@ -3002,7 +2977,23 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Existing icon selected.</source>
- <translation type="unfinished"/>
+ <translation>Valiti olemasolev ikoon.</translation>
+ </message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Vaikeikoon</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Kohandatud ikoon</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Ikoon rakendatakse…</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Rakendatakse ainult grupile endale</translation>
</message>
</context>
<context>
@@ -3033,12 +3024,13 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Delete plugin data?</source>
- <translation type="unfinished"/>
+ <translation>Plugina andmete kustutamise kinnitus</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
+ <translation>Kas oled kindel, et soovid valitud plugina andmed kustutada?
+See võib põhjustada asjaomaste pluginate töös tõrkeid.</translation>
</message>
<message>
<source>Key</source>
@@ -3050,27 +3042,27 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Datetime created</source>
- <translation type="unfinished"/>
+ <translation>Loomisaeg</translation>
</message>
<message>
<source>Datetime modified</source>
- <translation type="unfinished"/>
+ <translation>Muutmisaeg</translation>
</message>
<message>
<source>Datetime accessed</source>
- <translation type="unfinished"/>
+ <translation>Vaatamisaeg</translation>
</message>
<message>
<source>Unique ID</source>
- <translation type="unfinished"/>
+ <translation>Unikaalne ID</translation>
</message>
<message>
<source>Plugin data</source>
- <translation type="unfinished"/>
+ <translation>Pluginate andmed</translation>
</message>
<message>
<source>Remove selected plugin data</source>
- <translation type="unfinished"/>
+ <translation>Eemalda valitud plugina andmed</translation>
</message>
</context>
<context>
@@ -3095,7 +3087,7 @@ This may cause the affected plugins to malfunction.</source>
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Vorm</translation>
</message>
<message>
<source>Add</source>
@@ -3128,7 +3120,8 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Unable to create directory:
%1</source>
- <translation type="unfinished"/>
+ <translation>Kataloogi loomine pole võimalik:
+%1</translation>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
@@ -3163,7 +3156,9 @@ This may cause the affected plugins to malfunction.</source>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Faili avamine pole võimalik:
+%1</numerusform><numerusform>Failide avamine pole võimalik:
+%1</numerusform></translation>
</message>
<message>
<source>Attachments</source>
@@ -3171,19 +3166,33 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Add new attachment</source>
- <translation type="unfinished"/>
+ <translation>Lisa uus kaasatud fail</translation>
</message>
<message>
<source>Remove selected attachment</source>
- <translation type="unfinished"/>
+ <translation>Eemalda valitud kaasatud fail</translation>
</message>
<message>
<source>Open selected attachment</source>
- <translation type="unfinished"/>
+ <translation>Ava valitud kaasatud fail</translation>
</message>
<message>
<source>Save selected attachment to disk</source>
- <translation type="unfinished"/>
+ <translation>Salvesta valitud kaasatud fail kettale</translation>
+ </message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>&quot;%1&quot; on suur fail (%2 MB).
+See võib andmebaasi väga suureks ajada ja jõudlust vähendada.
+
+Kas oled kindel, et tahad selle faili lisada?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Faili kaasamise kinnitus</translation>
</message>
</context>
<context>
@@ -3217,7 +3226,7 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Ref: </source>
<comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
+ <translation>Viide: </translation>
</message>
<message>
<source>Group</source>
@@ -3268,12 +3277,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>Kaasatud failid</translation>
</message>
<message>
- <source>Yes</source>
- <translation type="unfinished"/>
+ <source>Size</source>
+ <translation>Maht</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Grupi nimi</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Kirje pealkiri</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Kirje märkmed</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Kirje aegub</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Loomisaeg</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Viimase muutmise aeg</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Viimase vaatamise aeg</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Kaasatud failid</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Kirje maht</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Kaasatud failide olemasolu</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>TOTP ühekordse parooli olemasolu</translation>
</message>
</context>
<context>
@@ -3296,7 +3345,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Expiration</source>
- <translation>Aegumine</translation>
+ <translation>Aegub</translation>
</message>
<message>
<source>URL</source>
@@ -3328,7 +3377,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Searching</source>
- <translation>Otsimine</translation>
+ <translation>Otsing</translation>
</message>
<message>
<source>Search</source>
@@ -3365,11 +3414,18 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Display current TOTP value</source>
- <translation type="unfinished"/>
+ <translation>Praeguse TOTP väärtuse kuvamine</translation>
</message>
<message>
<source>Advanced</source>
- <translation>Lisaomadused</translation>
+ <translation>Lisaseaded</translation>
+ </message>
+</context>
+<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Sobimatu URL</translation>
</message>
</context>
<context>
@@ -3380,11 +3436,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Hide Usernames</source>
- <translation>Kasutajanimede varjamine</translation>
+ <translation>Kasutajanimed peidetud</translation>
</message>
<message>
<source>Hide Passwords</source>
- <translation>Paroolide varjamine</translation>
+ <translation>Paroolid peidetud</translation>
</message>
<message>
<source>Fit to window</source>
@@ -3399,34 +3455,93 @@ This may cause the affected plugins to malfunction.</source>
<translation>Taasta vaikeväärtused</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Kaasatud failid (ikoon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Kaasatud failide olemasolu</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>TOTP olemasolu</translation>
</message>
</context>
<context>
<name>FdoSecrets::Item</name>
<message>
<source>Entry &quot;%1&quot; from database &quot;%2&quot; was used by %3</source>
- <translation type="unfinished"/>
+ <translation>%3 kasutas andmebaasi &quot;%2&quot; kirjet &quot;%1&quot;</translation>
</message>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%1 kasutas %n kirjet</numerusform><numerusform>%1 kasutas %n kirjet</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>DBus&apos;i teenuse registreerimine asukohas %1 ebaõnnestus.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Faili nimi</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupp</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Haldamine</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Nägemiseks ava lukk</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Puudub</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Rakendus</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Haldamine</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation type="unfinished"/>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fd.o saladuste teenus:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>teadmata</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>teadmata</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, käitusfail: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Muu saladuste teenus juba töötab (%1).&lt;br/&gt;See tuleb peatada või eemaldada, enne kui saladuste teenuse lõimingu uuesti sisse lülitada saab.</translation>
</message>
</context>
<context>
@@ -3434,18 +3549,14 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>[empty]</source>
<comment>group has no children</comment>
- <translation type="unfinished"/>
+ <translation>[tühi]</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
+ <source>Online password validation failed</source>
+ <translation>Paroolide võrgus valideerimine ebaõnnestus</translation>
</message>
</context>
<context>
@@ -3461,7 +3572,7 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Having trouble downloading icons?
You can enable the DuckDuckGo website icon service in the security section of the application settings.</source>
- <translation type="unfinished"/>
+ <translation>Kui ikoonide allalaadimisega on probleeme, võid KeePassXC seadete turvalisuse jaotises sisse lülitada DuckDuckGo veebisaidiikoonide teenuse.</translation>
</message>
<message>
<source>Close</source>
@@ -3514,14 +3625,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>ülemvõtme arvutamine pole võimalik.</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>pretensiooni ja vastuse väljastamine pole võimalik.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>andmebaasipäised on puudu.</translation>
</message>
@@ -3547,16 +3650,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>sisestatud tunnused ei sobinud, proovi palun uuesti.
Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>andmebaasivõtme arvutamine pole võimalik</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>pretensiooni ja vastuse väljastamine pole võimalik: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>pretensiooni ja vastuse väljastamine pole võimalik.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>pretensiooni ja vastuse väljastamine pole võimalik: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ülemvõtme arvutamine pole võimalik.</translation>
+ <source>Unable to calculate database key</source>
+ <translation>andmebaasivõtme arvutamine pole võimalik</translation>
</message>
</context>
<context>
@@ -3566,10 +3677,6 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
<translation>andmebaasipäised on puudu.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ülemvõtme arvutamine pole võimalik.</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>sobimatu päise kontrollsumma suurus</translation>
</message>
@@ -3595,11 +3702,11 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
+ <translation>päises olevate KDF-parameetrite jaoks puhvri avamine ebaõnnestus</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
+ <translation>toetamata võtmetuletusfunktsioon (KDF) või sobimatud parameetrid</translation>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
@@ -3607,75 +3714,75 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Invalid inner header id size</source>
- <translation>sobimatu sisemine päise-ID suurus</translation>
+ <translation>sobimatu sisemise päise ID maht</translation>
</message>
<message>
<source>Invalid inner header field length</source>
- <translation>sobimatu sisemine päisevälja suurus</translation>
+ <translation>sobimatu sisemise päise väljapikkus</translation>
</message>
<message>
<source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu sisemise päise binaarmaht</translation>
</message>
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>toetamata KeePassi metaandmete salvestusstruktuuri versioon</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu kirjenime pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatud kirjenime andmed metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu kirjeväärtuse pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatud kirjeväärtuse andmed metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu Bool-kirjeväärtuse pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu Int32-kirjeväärtuse pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map UInt32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu UInt32-kirjeväärtuse pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map Int64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu Int64-kirjeväärtuse pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map UInt64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu UInt64-kirjeväärtuse pikkus metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu kirjetüüp metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>sobimatu väljatüübi maht metaandmete salvestusstruktuuris</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -3685,28 +3792,32 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>(HMAC mismatch)</source>
- <translation type="unfinished"/>
+ <translation>(HMAC-i mittevastavus)</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>andmebaasivõtme arvutamine pole võimalik: %1</translation>
</message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
+ <translation>sobimatu sümmeetrilise šifri algoritm</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>ülemvõtme arvutamine pole võimalik.</translation>
+ <translation>sobimatu sümmeetrilise šifri initsialisatsioonivektori maht</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
+ <translation>metaandmete salvestusstruktuuri KDF-parameetrite järjestamine ebaõnnestus</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>andmebaasivõtme arvutamine pole võimalik: %1</translation>
</message>
</context>
<context>
@@ -3717,7 +3828,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Invalid compression flags length</source>
- <translation type="unfinished"/>
+ <translation>sobimatu tihenduslippude pikkus</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
@@ -3733,7 +3844,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu teisendusraundide arvu maht</translation>
</message>
<message>
<source>Invalid start bytes size</source>
@@ -3756,7 +3867,10 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
+ <translation>valitud fail on vana KeePass 1 andmebaas (.kdb).
+
+Selle saab importida, valides menüüst Andmebaas &gt; Impordi &gt; KeePass 1 andmebaas.
+Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 versiooniga avada.</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
@@ -3764,22 +3878,22 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
+ <translation>sobimatu šifri UUID pikkus: %1 (pikkus = %2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
+ <translation>UUID parsimine pole võimalik: %1</translation>
</message>
<message>
<source>Failed to read database file.</source>
- <translation type="unfinished"/>
+ <translation>andmebaasifaili lugemine ebaõnnestus.</translation>
</message>
</context>
<context>
<name>KdbxXmlReader</name>
<message>
<source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
+ <translation>XML-i parsimine ebaõnnestus: %1</translation>
</message>
<message>
<source>No root group</source>
@@ -3815,7 +3929,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>No group uuid found</source>
- <translation type="unfinished"/>
+ <translation>ei leitud ühtki grupi-UUID-d</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
@@ -3835,29 +3949,25 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>History element in history entry</source>
- <translation type="unfinished"/>
+ <translation>ajalooelement ajalookirjes</translation>
</message>
<message>
<source>No entry uuid found</source>
- <translation type="unfinished"/>
+ <translation>ei leitud ühtki kirje-UUID-d</translation>
</message>
<message>
<source>History element with different uuid</source>
- <translation type="unfinished"/>
+ <translation>leiti erineva UUID-ga ajalooelement</translation>
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
+ <translation>leiti duplitseeritud kohandatud atribuut</translation>
</message>
<message>
<source>Entry string key or value missing</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation type="unfinished"/>
</message>
@@ -3892,7 +4002,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<message>
<source>Unable to decompress binary</source>
<extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
+ <translation>binaarandmete lahtipakkimine pole võimalik</translation>
</message>
<message>
<source>XML error:
@@ -3904,21 +4014,44 @@ Rida %2, veerg %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi avamine pole võimalik.</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
- <translation type="unfinished"/>
+ <translation>KeePass 1 andmebaasi importimine</translation>
</message>
</context>
<context>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
+ <translation>võtmefaili lugemine pole võimalik.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3955,7 +4088,7 @@ Rida %2, veerg %3</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
+ <translation>sobimatu teisendusraundide arv</translation>
</message>
<message>
<source>Unable to construct group tree</source>
@@ -3966,10 +4099,6 @@ Rida %2, veerg %3</translation>
<translation>Juur</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ülemvõtme arvutamine pole võimalik.</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation type="unfinished"/>
</message>
@@ -4071,6 +4200,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>sisestatud tunnused ei sobinud, proovi palun uuesti.
Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>andmebaasivõtme arvutamine pole võimalik</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4084,15 +4217,15 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Imported from %1</source>
- <translation type="unfinished"/>
+ <translation>Imporditud asukohast &quot;%1&quot;</translation>
</message>
<message>
<source>Exported to %1</source>
- <translation type="unfinished"/>
+ <translation>Eksporditud asukohta %1</translation>
</message>
<message>
<source>Synchronized with %1</source>
- <translation type="unfinished"/>
+ <translation>Sünkroonitud asukohaga %1</translation>
</message>
<message>
<source>Import is disabled in settings</source>
@@ -4108,15 +4241,15 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Imported from</source>
- <translation type="unfinished"/>
+ <translation>Imporditud asukohast</translation>
</message>
<message>
<source>Exported to</source>
- <translation type="unfinished"/>
+ <translation>Eksporditud asukohta</translation>
</message>
<message>
<source>Synchronized with</source>
- <translation type="unfinished"/>
+ <translation>Sünkroonitud asukohaga</translation>
</message>
</context>
<context>
@@ -4127,7 +4260,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Key Component Description</source>
- <translation type="unfinished"/>
+ <translation>Võtmekomponendi kirjeldus</translation>
</message>
<message>
<source>Cancel</source>
@@ -4174,14 +4307,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili pärandvorming</translation>
</message>
<message>
<source>Error loading the key file '%1'
@@ -4251,6 +4377,16 @@ Are you sure you want to continue with this file?</source>
<translation>Valitud võtmefail näeb välja nagu parooliandmebaasifail. Võtmefail ei tohi kunagi muutuda, sest muidu kaotad igaveseks oma andmebaasile ligipääsu.
Kas oled kindel, et soovid selle failiga jätkata?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Kasutad pärandvormingus võtmefaili, mis ei pruugi
+programmi järgmistes versioonides enam toetatud olla.
+
+Genereeri andmebaasi turvaseadete all uus võtmefail.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4259,18 +4395,10 @@ Kas oled kindel, et soovid selle failiga jätkata?</translation>
<translation>&amp;Andmebaas</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>Viimatised andme&amp;baasid</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>A&amp;bi</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Kirjed</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupid</translation>
</message>
@@ -4287,44 +4415,8 @@ Kas oled kindel, et soovid selle failiga jätkata?</translation>
<translation>&amp;Teave</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Ava andmebaas...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Salvesta andmebaas</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>S&amp;ulge andmebaas</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>K&amp;ustuta kirje</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Muuda gruppi...</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>K&amp;ustuta grupp</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Salvesta andmebaas &amp;kui...</translation>
- </message>
- <message>
<source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>K&amp;looni kirje</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopeeri &amp;kasutajanimi</translation>
+ <translation>Andmebaasi seaded</translation>
</message>
<message>
<source>Copy username to clipboard</source>
@@ -4339,10 +4431,6 @@ Kas oled kindel, et soovid selle failiga jätkata?</translation>
<translation>&amp;Seaded</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lukusta andmebaasid</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Pealkiri</translation>
</message>
@@ -4367,14 +4455,6 @@ Kas oled kindel, et soovid selle failiga jätkata?</translation>
<translation>Kopeeri märkmed lõikepuhvrisse</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;CSV-failiks...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Seadista TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopeeri &amp;TOTP</translation>
</message>
@@ -4388,7 +4468,7 @@ Kas oled kindel, et soovid selle failiga jätkata?</translation>
</message>
<message>
<source>Access error for config file %1</source>
- <translation type="unfinished"/>
+ <translation>Juurdepääsuviga seadistusfailil &quot;%1&quot;</translation>
</message>
<message>
<source>Settings</source>
@@ -4400,211 +4480,389 @@ Kas oled kindel, et soovid selle failiga jätkata?</translation>
</message>
<message>
<source>Quit KeePassXC</source>
- <translation type="unfinished"/>
+ <translation>Välju KeePassXC-st</translation>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
+ <translation>Puuduta YubiKey nuppu!</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation type="unfinished"/>
+ <translation>HOIATUS: kasutad KeePassXC ebastabiilset versiooni!
+Selle kasutamisega kaasneb suur risk oma parooliandmebaasid ära rikkuda, nii et vaata, et sul oleks neist varukoopiad.
+See versioon ei ole mõeldud töökeskkonnas kasutamiseks.</translation>
</message>
<message>
<source>&amp;Donate</source>
- <translation>A&amp;nneta...</translation>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation>T&amp;eata veast...</translation>
+ <translation>A&amp;nneta…</translation>
</message>
<message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
+ <translation>HOIATUS: sinu Qt versioon võib põhjustada KeePassXC kokkujooksmist ekraaniklaviatuuri kasutamisel.
+Võiksid kaaluda KeePassXC allalaadimislehel oleva AppImage&apos;i kasutamist.</translation>
</message>
<message>
<source>&amp;Import</source>
<translation>&amp;Impordi</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopeeri at&amp;ribuut...</translation>
+ <source>Create a new database</source>
+ <translation>Loo uus andmebaas</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>&amp;TOTP...</translation>
+ <source>Merge from another KDBX database</source>
+ <translation>Mesti mõne teise KDBX-andmebaasiga</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>&amp;Uus andmebaas...</translation>
+ <source>Add a new entry</source>
+ <translation>Lisa uus kirje</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Loo uus andmebaas</translation>
+ <source>View or edit entry</source>
+ <translation>Vaata või muuda kirjet</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Mesti andmebaas...</translation>
+ <source>Add a new group</source>
+ <translation>Lisa uus grupp</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>Soorita &amp;automaatsisestus</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Uus kirje</translation>
+ <source>Open &amp;URL</source>
+ <translation>Ava &amp;URL</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Lisa uus kirje</translation>
+ <source>Import a KeePass 1 database</source>
+ <translation>Impordi KeePass 1 andmebaas</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Muuda kirjet</translation>
+ <source>Import a CSV file</source>
+ <translation>Impordi CSV-fail</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Vaata või muuda kirjet</translation>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>NB: kasutad KeePassXC testversiooni!
+Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see versioon ei ole mõeldud töökeskkonnas kasutamiseks.</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Uus grupp</translation>
+ <source>Check for updates on startup?</source>
+ <translation>Käivitamisel uuenduste otsimine</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Kas soovid, et KeePassXC käivitumisel uuenduste olemasolu kontrolliks?</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Muuda &amp;ülemvõtit...</translation>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Rakenduse menüü kaudu saab neid alati ka käsitsi otsida.</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>An&amp;dmebaasi seaded...</translation>
+ <source>&amp;Export</source>
+ <translation>&amp;Ekspordi</translation>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation>Kopeeri &amp;parool</translation>
+ <source>Sort &amp;A-Z</source>
+ <translation>Sordi &amp;A-st Y-ni</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>Soorita &amp;automaatsisestus</translation>
+ <source>Sort &amp;Z-A</source>
+ <translation>Sordi &amp;Y-st A-ni</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Ava &amp;URL</translation>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Parooligeneraator</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 andmebaas...</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Impordi 1Passwordi turvalaegas</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Alustusjuhend...</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV-fail...</translation>
+ <source>&amp;User Guide</source>
+ <translation>Käsi&amp;raamat...</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Kiirklahvid</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Kuva TOTP...</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>Viimatised andme&amp;baasid</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Kuva TOTP QR-kood...</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Kirjed</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Kopeeri at&amp;ribuut</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
+ <source>View</source>
+ <translation>&amp;Vaade</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
+ <source>Theme</source>
+ <translation>&amp;Kujundus</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Ekspordi</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Otsi uuendusi</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>Kontrolli &amp;uuendusi...</translation>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Ava andmebaas…</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Laadi alla kõigi saitide &amp;ikoonid</translation>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Salvesta andmebaas</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Sordi &amp;A-st Y-ni</translation>
+ <source>&amp;Close Database</source>
+ <translation>S&amp;ulge andmebaas</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Sordi &amp;Y-st A-ni</translation>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Uus andmebaas…</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Parooligeneraator</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Mesti andmebaas…</translation>
</message>
<message>
- <source>Download favicon</source>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Uus kirje…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Muuda kirjet…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Kustuta kirje…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Uus grupp…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Muuda gruppi…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>K&amp;ustuta grupp…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Laadi alla kõigi saitide &amp;ikoonid…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Salvesta andmebaas &amp;kui…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>Andmebaasi &amp;turvalisus…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>A&amp;ndmebaasi aruanded…</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistika, tervisekontroll jm</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>An&amp;dmebaasi seaded…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>K&amp;looni kirje…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Lii&amp;guta ülespoole</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Liiguta kirje sammu võrra ülespoole</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Liiguta allap&amp;oole</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Liiguta kirje sammu võrra allapoole</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Kopeeri &amp;kasutajanimi</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Kopeeri &amp;parool</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
<translation>Laadi alla saidi&amp;ikoon</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;HTML-failiks...</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Lukusta andmebaasid</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Passwordi turvalaegas...</translation>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV-failiks…</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation type="unfinished"/>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML-failiks…</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Alustusjuhend...</translation>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 andmebaas…</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation type="unfinished"/>
+ <source>1Password Vault…</source>
+ <translation>1Passwordi turvalaegas…</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Abi &amp;võrgus...</translation>
+ <source>CSV File…</source>
+ <translation>CSV-fail…</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation type="unfinished"/>
+ <source>Show TOTP</source>
+ <translation>Kuva TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Käsi&amp;raamat...</translation>
+ <source>Show QR Code</source>
+ <translation>Kuva QR-kood</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Seadista TOTP…</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Report a &amp;Bug</source>
+ <translation>T&amp;eata veast...</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>Ava alustusjuhend</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>Abi &amp;võrgus</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Ava dokumentatsioon võrgus</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Ava käsiraamat</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Sa&amp;lvesta andmebaasi varukoopia…</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Lisa võti SSH agendile</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Eemalda võti SSH agendilt</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Kompaktne režiim</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automaatne</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Hele</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Tume</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klassikaline (platvormiomane)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>&amp;Tööriistariba nähtaval</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>&amp;Eelvaatluse paneel nähtaval</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Ära selle versiooni puhul rohkem näita</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Uuesti käivitamise kinnitus</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Selle muudatuse rakendamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Andmebaasi seaded</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Muuda andmebaasi seadeid</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Ava andmebaasi lukk</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Lisateabe nägemiseks ava andmebaasi lukk</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Lukusta andmebaas</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Kiirklahvid</translation>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4690,11 +4948,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>NewDatabaseWizardPage</name>
<message>
<source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasinõustaja</translation>
</message>
<message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
@@ -4708,27 +4962,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Lihtsad seaded</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Krüptimisseaded</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Andmebaasi tunnused</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Kaitse andmebaasi tunnustega, mida ainult sina tead.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Andmebaasi ülemvõti</translation>
+ <source>Encryption Settings</source>
+ <translation>Krüptimisseaded</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Kaitse andmebaasi ülemvõtmega, mida ainult sina tead.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes.</translation>
</message>
</context>
<context>
@@ -4743,6 +5001,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Paroolihaldur</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4812,110 +5077,122 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu võtmefail – oodati OpenSSH võtit</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
+ <translation>PEM-i perimeetri mittevastavus</translation>
</message>
<message>
<source>Base64 decoding failed</source>
- <translation type="unfinished"/>
+ <translation>Base64 dekodeerimine ebaõnnestus</translation>
</message>
<message>
<source>Key file way too small.</source>
- <translation type="unfinished"/>
+ <translation>Võtmefail on kaugelt liiga väike.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili maagilise päise ID on sobimatu</translation>
</message>
<message>
<source>Found zero keys</source>
- <translation type="unfinished"/>
+ <translation>Võtmeid ei leitud</translation>
</message>
<message>
<source>Failed to read public key.</source>
- <translation type="unfinished"/>
+ <translation>Avaliku võtme lugemine ebaõnnestus.</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
+ <translation>Rikutud võtmefail, privaatvõtme lugemine ebaõnnestus</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
+ <translation>Privaatvõtmel pole lasti, mida lahti krüptida</translation>
</message>
<message>
<source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
+ <translation>Ilma šifrita KDF-i käitamise üritamine</translation>
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
+ <translation>Selle võtme lahtikrüptimiseks on vaja paroolifraasi</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
+ <translation>Võtmetuletus ebaõnnestus – rikutud võtmefail?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
+ <translation>Lahtikrüptimine ebaõnnestus – vale paroolifraas?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
+ <translation>Ootamatu faililõpp avaliku võtme lugemisel</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
+ <translation>Ootamatu faililõpp privaatvõtme lugemisel</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
+ <translation>Avalikku võtit ei saa kirjutada, kuna see on tühi</translation>
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
+ <translation>Ootamatu faililõpp avaliku võtme kirjutamisel</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
+ <translation>Privaatvõtit ei saa kirjutada, kuna see on tühi</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
+ <translation>Ootamatu faililõpp privaatvõtme kirjutamisel</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
+ <translation>Toetamata võtmetüüp: %1</translation>
</message>
<message>
<source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
+ <translation>Tundmatu šiffer: %1</translation>
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
+ <translation>Šifri IV on MD5-KDF-i jaoks liiga lühike</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
+ <translation>Tundmatu KDF: %1</translation>
</message>
<message>
<source>Unknown key type: %1</source>
- <translation type="unfinished"/>
+ <translation>Tundmatu võtmetüüp: %1</translation>
</message>
</context>
<context>
<name>PasswordEdit</name>
<message>
<source>Passwords do not match</source>
- <translation type="unfinished"/>
+ <translation>Paroolid ei kattu</translation>
</message>
<message>
<source>Passwords match so far</source>
- <translation type="unfinished"/>
+ <translation>Paroolid kattuvad</translation>
+ </message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Lülita parooli nähtavust (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Genereeri parool (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Hoiatus: suurtähelukk on sisse lülitatud!</translation>
</message>
</context>
<context>
@@ -4941,25 +5218,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Paroolid ei kattu.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Ülemparooli genereerimine</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Parooli väli</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Lülita parooli nähtavust</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Parooli korduse väli</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Lülita parooligeneraatori nähtavust</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4968,10 +5233,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Parool:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>tugevus</translation>
@@ -5021,14 +5282,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Sõnade eraldaja:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopeeri</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Sobib</translation>
- </message>
- <message>
<source>Close</source>
<translation>Sulge</translation>
</message>
@@ -5070,7 +5323,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Advanced</source>
- <translation>Täpsemalt</translation>
+ <translation>Lisaseaded</translation>
</message>
<message>
<source>A-Z</source>
@@ -5125,14 +5378,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Lülita lihtsasse režiimi</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Lihtne</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Märgid, mida genereeritavas paroolis esineda ei tohi</translation>
</message>
@@ -5153,14 +5398,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Määrab, kas välistada märgid nagu &quot;0&quot;, &quot;O&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Sõnade arv:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Genereeri uus</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Genereeritud parool</translation>
</message>
@@ -5190,7 +5427,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Hex Passwords</source>
- <translation type="unfinished"/>
+ <translation>16nd-paroolid</translation>
</message>
<message>
<source>Password length</source>
@@ -5209,10 +5446,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Kopeeri parool</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Kasuta seda parooli</translation>
- </message>
- <message>
<source>lower case</source>
<translation>väiketähed</translation>
</message>
@@ -5225,8 +5458,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Suured Esitähed</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Lülita parooli nähtavust</translation>
+ <source>Generate Password</source>
+ <translation>Parooli genereerimine</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Lisamärgid:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Lisamägid, mille hulgast parooli genereerimisel valida</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Lisamärgid</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Sõnade arv:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Kasuta seda parooli</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Puhasta</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Genereeri uus parool (%1)</translation>
</message>
</context>
<context>
@@ -5239,6 +5508,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>Statistika</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Väga nõrk parool</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Parooli entroopia on %1 bitti</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Nõrk parool</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Kasutuskoht: %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Parooli on kasutatud %1 korda</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Parool on aegunud</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Parool aegus %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Parool aegub lähipäevil</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Parool aegub %1 päeva pärast</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Parool aegub varsti</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Parool aegub %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Tervisekontroll</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5264,15 +5585,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Skip</source>
- <translation type="unfinished"/>
+ <translation>Jäta vahele</translation>
</message>
<message>
<source>Disable</source>
- <translation>keelatud</translation>
+ <translation>Keela</translation>
</message>
<message>
<source>Merge</source>
- <translation type="unfinished"/>
+ <translation>Mesti</translation>
</message>
<message>
<source>Continue</source>
@@ -5378,10 +5699,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation type="unfinished"/>
@@ -5536,14 +5853,6 @@ Võimalikud käsud:
<translation>Brauserilõiming</translation>
</message>
<message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH agent</translation>
</message>
@@ -5581,10 +5890,6 @@ Võimalikud käsud:
<translation type="unfinished"/>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5596,14 +5901,6 @@ Võimalikud käsud:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -5635,7 +5932,7 @@ Võimalikud käsud:
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi kirjutamine ebaõnnestus: %1</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
@@ -5823,10 +6120,6 @@ Võimalikud käsud:
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>file empty</source>
<translation type="unfinished"/>
</message>
@@ -5835,18 +6128,6 @@ Võimalikud käsud:
<translation type="unfinished"/>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bitine</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bitine</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bitine</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – soovituslik)</translation>
</message>
@@ -5922,7 +6203,7 @@ Võimalikud käsud:
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
- <translation>KeePassXC – mitmeplatvormne paroolihaldur</translation>
+ <translation>KeePassXC - mitmeplatvormne paroolihaldur</translation>
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
@@ -5954,11 +6235,11 @@ Võimalikud käsud:
</message>
<message>
<source>KeePassXC - Error</source>
- <translation>Viga – KeePassXC</translation>
+ <translation>Viga - KeePassXC</translation>
</message>
<message>
<source>Database password: </source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi parool: </translation>
</message>
<message>
<source>Cannot create new group</source>
@@ -6074,7 +6355,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>FILENAME</source>
- <translation type="unfinished"/>
+ <translation>FAILINIMI</translation>
</message>
<message>
<source>Analyze passwords for weaknesses and problems.</source>
@@ -6097,10 +6378,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6117,10 +6394,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6130,7 +6403,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Unsupported format %1</source>
- <translation type="unfinished"/>
+ <translation>Toetamata vorming %1</translation>
</message>
<message>
<source>Use numbers</source>
@@ -6146,7 +6419,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Available commands:</source>
- <translation type="unfinished"/>
+ <translation>Võimalikud käsud:</translation>
</message>
<message>
<source>Import the contents of an XML database.</source>
@@ -6161,10 +6434,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6190,7 +6459,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
+ <translation>Mestimise käigus andmebaasi ei muudetud.</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6257,10 +6526,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6276,10 +6541,6 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6292,6 +6553,193 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nimi: </translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Kirjeldus: </translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Šiffer: </translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6328,6 +6776,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Kuvatakse ka muidu aruannetest välja jäetavad kirjed</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Põhjuse kohta täpsema teabe saamiseks hoia hiirekursorit selle kohal. Kirje muutmiseks tee topeltklõps.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Kohutav</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Kohutav – palun muuda parooli</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Kehv</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Kehv – parooli tuleks muuta</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Nõrk</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Nõrk – kaalu parooli muutmist</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (välja jäetud)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>See kirje on aruannetest välja jäetud</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Palun oota, tervisehinnangute arvutamine käib…</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Kõik on kõige paremas korras. Palju õnne!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Pealkiri</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Asukoht</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Hinne</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Põhjus</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Muuda kirjet…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Jäetakse aruannetest välja</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>HOIATUS: selle aruande käigus saadetakse teavet Have I Been Pwned&apos;i võrguteenusele (https://haveibeenpwned.com). Kui jätkad, luuakse sinu andmebaasi paroolidest krüptograafilised räsid, mille viis esimest märki seejärel turvaliselt sellele teenusele edastatakse. Sinu andmebaasi turvalisust see ei vähenda ja paroole räsi põhjal taastada ei saa. Küll aga on teenusele näha saadetud paroolide arv ja sinu IP-aadress.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Soorita interneti-analüüs</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Kuvatakse ka muidu aruannetest välja jäetavad kirjed</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>KeePassXC on kompiilitud ilma võrgufunktsioonideta, aga paroolide võrdlemiseks Have I Been Pwned&apos;i andmebaasidega on vaja võrgujuurdepääsu.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Ühtegi lekkinud parooli ei leitud. Palju õnne!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Pealkiri</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Asukoht</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Parool lekkinud…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (välja jäetud)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>See kirje on aruannetest välja jäetud</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>üks kord</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>kuni 10 korda</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>kuni 100 korda</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>kuni 1000 korda</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>kuni 10 000 korda</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>kuni 100 000 korda</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>kuni miljon korda</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>miljoneid kordi</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Muuda kirjet…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Jäetakse aruannetest välja</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Veaikooniga ridade kohta täpsema teabe saamiseks hoia hiirekursorit vastaval real.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nimi</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Väärtus</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Palun oota, andmebaasi statistikat arvutatakse...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Andmebaasi nimi</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Kirjeldus</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Asukoht</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Viimati salvestanud</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Salvestamata muudatusi</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>on</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>pole</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Andmebaasi on muudetud, kuid muudatused pole veel kettale salvestatud.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Gruppide arv</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Kirjete arv</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Aegunud kirjete arv</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Andmebaas sisaldab aegunud kirjeid.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Unikaalsete paroolide arv</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Korduvate paroolide arv</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Rohkem kui 10% paroolidest on kasutatud korduvalt. Kui vähegi võimalik, kasuta ainukordseid paroole.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Sagedasima parooli kasutuskordade arv</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Mõnda parooli on kasutatud enam kui kolm korda. Kui vähegi võimalik, kasuta ainukordseid paroole.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Lühikeste paroolide arv</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Paroolide soovituslik pikkus on vähemalt 8 märki.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Nõrkade paroolide arv</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Soovitatav on kasutada pikki juhuslikest märkidest koosnevaid paroole, mille tugevushinnang on &quot;hea&quot; või &quot;suurepärane&quot;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Aruannetest väljajäetavate kirjete arv</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Kirjete aruannetest väljajätmine (nt kuna neil on teadaolevalt kehv parool) pole tingimata probleem, kuid neil tasuks silm peal hoida.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Paroolide keskmine pikkus</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 märki</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Paroolide keskmine pikkus on alla kümne märgi. Pikemad paroolid on turvalisemad.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6361,6 +7093,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6370,7 +7110,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation>Otsingusõnade süntaks on järgmine: [modifikaatorid][väli:][&quot;]otsitav[&quot;]</translation>
+ <translation>Otsingusõnade süntaks on järgmine: [modifikaator][väli:][&quot;]otsitav[&quot;]</translation>
</message>
<message>
<source>Every search term must match (ie, logical AND)</source>
@@ -6421,7 +7161,7 @@ Kernel: %3 %4</translation>
<name>SearchWidget</name>
<message>
<source>Search</source>
- <translation>Otsinguseaded</translation>
+ <translation>Otsimine</translation>
</message>
<message>
<source>Clear</source>
@@ -6449,7 +7189,7 @@ Kernel: %3 %4</translation>
<name>SettingsWidgetFdoSecrets</name>
<message>
<source>Options</source>
- <translation type="unfinished"/>
+ <translation>Seaded</translation>
</message>
<message>
<source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
@@ -6468,26 +7208,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Kui andmebaasi prügikast on sisse lülitatud, teisaldatakse kirjed sinna, muul juhul kustutatakse kohe lõplikult.&lt;/p&gt;&lt;p&gt;Kui kustutatavale kirjele viitab mõni teine kirje, küsitakse siiski kinnitust ka siis, kui see märkeruut on märgitud.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Klientidel lubatakse kirjeid kinnituseta kustutada</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Nähtavaks tehtud grupid andmebaasides:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Faili nimi</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupp</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Haldamine</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autentimine</translation>
</message>
@@ -6496,40 +7220,20 @@ Kernel: %3 %4</translation>
<translation>Need rakendused on praegu ühendatud:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Rakendus</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Muuda andmebaasi seadeid</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation type="unfinished"/>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Klientidel lubatakse kirjeid kinnituseta kustutada</translation>
</message>
<message>
- <source>Unlock database to show more information</source>
- <translation>Lisateabe nägemiseks ava andmebaasi lukk</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Viga:&lt;/b&gt; DBus&apos;iga ühendumine ebaõnnestus. Palun kontrolli oma DBus&apos;i seadistust.</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Lukusta andmebaas</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Hoiatus:&lt;/b&gt; </translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Nägemiseks ava lukk</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Puudub</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Plugina aktiveerimiseks ja selle jaotise muutmise võimaldamiseks salvesta esmalt tehtud muudatused.</translation>
</message>
</context>
<context>
@@ -6572,11 +7276,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Import</source>
- <translation>Impordi</translation>
+ <translation>importimine</translation>
</message>
<message>
<source>Export</source>
- <translation>Ekspordi</translation>
+ <translation>eksportimine</translation>
</message>
<message>
<source>Imported certificates</source>
@@ -6608,7 +7312,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Sõrmejälg</translation>
+ <translation>Sõrmejälg:</translation>
</message>
<message>
<source>Certificate</source>
@@ -6771,7 +7475,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Never</source>
- <translation>Mitte kunagi</translation>
+ <translation>mitte kunagi</translation>
</message>
<message>
<source>Always</source>
@@ -6787,7 +7491,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>File is not readable</source>
- <translation type="unfinished"/>
+ <translation>Fail ei ole loetav</translation>
</message>
<message>
<source>Invalid sharing container</source>
@@ -6802,10 +7506,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6815,7 +7515,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>File does not exist</source>
- <translation type="unfinished"/>
+ <translation>Faili ei ole olemas</translation>
</message>
<message>
<source>Unknown share container type</source>
@@ -6834,7 +7534,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Imported from %1</source>
- <translation type="unfinished"/>
+ <translation>Imporditud asukohast &quot;%1&quot;</translation>
</message>
<message>
<source>Export to %1 failed (%2)</source>
@@ -6861,7 +7561,7 @@ Kernel: %3 %4</translation>
<name>TotpDialog</name>
<message>
<source>Timed Password</source>
- <translation type="unfinished"/>
+ <translation>Ajastatud parool</translation>
</message>
<message>
<source>000000</source>
@@ -6873,7 +7573,7 @@ Kernel: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Aegub &lt;b&gt;%n&lt;/b&gt; sekundi pärast</numerusform><numerusform>Aegub &lt;b&gt;%n&lt;/b&gt; sekundi pärast</numerusform></translation>
</message>
</context>
<context>
@@ -6885,15 +7585,15 @@ Kernel: %3 %4</translation>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
+ <translation>NB: need kohandatud TOTP-seaded ei pruugi muude autentikaatoritega toimida.</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
+ <translation>QR-koodi loomisel ilmnes tõrge.</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
+ <translation>Aken sulgub %1 sekundi pärast.</translation>
</message>
</context>
<context>
@@ -6904,11 +7604,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
+ <translation>Vaikimisi RFC 6238 volitustõendi seaded</translation>
</message>
<message>
<source>Steam token settings</source>
- <translation type="unfinished"/>
+ <translation>Steami volitustõendi seaded</translation>
</message>
<message>
<source>Use custom settings</source>
@@ -6937,7 +7637,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Secret key must be in Base32 format</source>
- <translation type="unfinished"/>
+ <translation>Salajane võti peab olema Base32-vormingus</translation>
</message>
<message>
<source>Secret key field</source>
@@ -6957,16 +7657,17 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Invalid TOTP Secret</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu TOTP salavõti</translation>
</message>
<message>
<source>You have entered an invalid secret key. The key must be in Base32 format.
Example: JBSWY3DPEHPK3PXP</source>
- <translation type="unfinished"/>
+ <translation>Sisestasid sobimatu salajase võtme. Võti peab olema Base32-vormingus.
+Näide: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Confirm Remove TOTP Settings</source>
- <translation type="unfinished"/>
+ <translation>TOTP seadete eemaldamise kinnitus</translation>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
@@ -6974,6 +7675,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Sobimatu URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7064,6 +7772,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7078,14 +7833,6 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Kui sul on &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, võid lisaturvalisuse nimel seda kasutada.&lt;/p&gt;&lt;p&gt;Ühe YubiKey pesa peab programmeerima &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 pretensiooni ja vastusena&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKey&apos;d ei tuvastatud. Vaata, et see oleks ühendatud.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey&apos;d pole sisestatud.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Värskenda riistvaraliste võtmete loendit</translation>
</message>
@@ -7093,5 +7840,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>Riistvaralise võtme pesa valimine</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Riistvaralisi võtmeid ei leitud.</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Valitud riistvaralise võtme pesa ei toeta pretensiooni-vastust.</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>riistvaraliste võtmete tuvastamine…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>riistvaralisi võtmeid ei tuvastatud</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_eu.ts b/share/translations/keepassx_eu.ts
deleted file mode 100644
index a556f17d5..000000000
--- a/share/translations/keepassx_eu.ts
+++ /dev/null
@@ -1,5424 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="eu" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation>KeePassXC-i buruz</translation>
- </message>
- <message>
- <source>About</source>
- <translation>Honi buruz</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Akatsen berri eman hemen: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation>Lankideak</translation>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Ikusi ekarpenak GitHub-en&lt;/a&gt;</translation>
- </message>
- <message>
- <source>Debug Info</source>
- <translation>Arazketa informazioa</translation>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Kopiatu arbelera</translation>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation>Aplikazioaren ezarpenak</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Orokorra</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Segurtasuna</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation>Ikonoa bakarrik</translation>
- </message>
- <message>
- <source>Text only</source>
- <translation>Testua bakarrik</translation>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation>Testua ikonoaren ondoan</translation>
- </message>
- <message>
- <source>Text under icon</source>
- <translation>Testua ikonoaren azpian</translation>
- </message>
- <message>
- <source>Follow style</source>
- <translation>Eutsi estiloari</translation>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation>Oinarrizko ezarpenak</translation>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation>Gogoratu azken datu-baseak</translation>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation>Automatikoki gorde aldaketa oro eta gero</translation>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation>Automatikoki gorde irtetean</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation>Erabili taldearen ikonoa sarrera sortzean</translation>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation>Minimizatu arbelera kopiatzean</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Orokorra</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation>Erakutsi ikonoa sistema-erretiluan</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation>Hizkuntza</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation> ms</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation>Pribatasuna</translation>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Leihoa</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sekuentzia</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>Lehenetsitako sekuentzia</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Taldea</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Izenburua</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Erabiltzaile-izena</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sekuentzia</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation>Gogoratu erabaki hau</translation>
- </message>
- <message>
- <source>Allow</source>
- <translation>Onartu</translation>
- </message>
- <message>
- <source>Deny</source>
- <translation>Debekatu</translation>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Utzi</translation>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation>Elkarrizketa</translation>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Orokorra</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Aurreratua</translation>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Arakatu...</translation>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please see special instructions for browser extension use below</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Gainidatzi aurreko gakoa?</translation>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Eguneratu sarrera</translation>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Create a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation>Klonatu aukerak</translation>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation>Kopiatu historia</translation>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation>Inportatu CSV eremuak</translation>
- </message>
- <message>
- <source>filename</source>
- <translation>fitxategi izena</translation>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation>tamaina, errenkadak, zutabeak</translation>
- </message>
- <message>
- <source>Encoding</source>
- <translation>Kodetzea</translation>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation>Aurrebista</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation>Jatorrizko datuak:</translation>
- </message>
- <message>
- <source>Error</source>
- <translation>Errorea</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation><numerusform>zutabe %n</numerusform><numerusform>%n zutabe</numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation>%1, %2, %3</translation>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation><numerusform>byte %n</numerusform><numerusform>%n byte</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation><numerusform>lerro %n</numerusform><numerusform>%n lerro</numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Erroa</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation>%1 fitxategia ez da existitzen.</translation>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation>Ezin izan da %1 fitxategia ireki.</translation>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation>Errorea gertatu da datu-basea irakurtzean: %1</translation>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation>Ezin da gorde, datu-baseak ez dauka izenik.</translation>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation>Ezin da fitxategian idatzi, irakurtzeko moduan ireki baita.</translation>
- </message>
- <message>
- <source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Eraldatu gabeko gakoa. Hau akats bat da, mesedez jakinarazi garatzaileei!</translation>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation>Desblokeatu datu-basea - KeePassXC</translation>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation>Sartu gako nagusia</translation>
- </message>
- <message>
- <source>Key File:</source>
- <translation>Gako-fitxategia:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Pasahitza:</translation>
- </message>
- <message>
- <source>Browse</source>
- <translation>Arakatu</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation>Freskatu</translation>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Fitxategi guztiak</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>Gako fitxategiak</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>Aukeratu gako-fitxategia</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation>Pasahitzak</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation>Aukera aurreratuak</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Orokorra</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Segurtasuna</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation>Gako nagusia</translation>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation>Zifraketa ezarpenak</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Integrazioa nabigatzaileekin</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation>Gordetako gakoak</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Kendu</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation>Ezabatu aukeratutako gakoa?</translation>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation>Gakoa</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Balioa</translation>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation>KeePassXC: Ez da gakorik aurkitu</translation>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation>Gordetako baimenak kentzen...</translation>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: Kendutako baimenak</translation>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation>Zifraketa algoritmoa</translation>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation>AES: 256 Bit (lehenetsia)</translation>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 Bit</translation>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation>Memoria erabilera:</translation>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation>Paralelismoa:</translation>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Utzi</translation>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation>Datu-basearen meta-datuak</translation>
- </message>
- <message>
- <source>Database name:</source>
- <translation>Datu-basearen izena:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>Datu-basearen deskribapena:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>Lehenetsitako erabiltzaile-izena:</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation>Historiaren ezarpenak</translation>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>Historiaren gehienezko sarrerak:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>Historiaren gehienezko tamaina:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation> MiB</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation>Erabili zakarrontzia</translation>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation>Datu-basearen ezarpen gehigarriak</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Erabili &amp;konpresioa (gomendatua)</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation>Partekatu</translation>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation>Laguntza</translation>
- </message>
- <message>
- <source>Type</source>
- <translation>Mota</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation>Azken sinatzailea</translation>
- </message>
- <message>
- <source>Certificates</source>
- <translation>Ziurtagiriak</translation>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation> &gt; </translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Gehitu babes gehigarria...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Ez da zifraketa gakorik gehitu</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Gutxienez zifraketa gako bat gehitu behar duzu datu-basea babesteko!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Pasahitza ezarri gabe</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>KONTUZ! Ez duzu pasahitzik ezarri. Pasahitzik gabeko datu-basea erabiltzea ez da batere gomendagarria!
-
-Ziur zaude pasahitzik gabe jarraitu nahi duzula?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Errore ezezaguna</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Ezin izan da gako nagusia aldatu</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation>Datu-basearen izena:</translation>
- </message>
- <message>
- <source>Description:</source>
- <translation>Deskribapena:</translation>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 datu-basea</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Fitxategi guztiak</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>Ireki datu-basea</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>CSV fitxategia</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation>Bateratu datu-basea</translation>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>Ireki KeePass 1 datu-basea</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>KeePass 1 datu-basea</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation>Esportatu datu-basea CSV fitxategira</translation>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation>Ezin izan da CSV fitxategia idatzi.</translation>
- </message>
- <message>
- <source>Database creation error</source>
- <translation>Ezin izan da datu-basea sortu</translation>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation>Datu-basea ez da existitzen edo ez dago eskuragarri</translation>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation>Aukeratu CSV fitxategia</translation>
- </message>
- <message>
- <source>New Database</source>
- <translation>Datu-base berria</translation>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation>%1 [Datu-base berria]</translation>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation>%1 [Blokeatuta]</translation>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation>%1 [Irakurtzeko soilik]</translation>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation>Bilatzen...</translation>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Ziur zaude &quot;%1&quot; sarrera betirako ezabatu nahi duzula?</translation>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Ziur zaude &quot;%1&quot; sarrera zaborrontzira mugitu nahi duzula?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Ziur zaude sarrera %n zakarrontzira mugitu nahi duzula?</numerusform><numerusform>Ziur zaude %n sarrera zakarrontzira mugitu nahi dituzula?</numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation>Exekutatu komandoa?</translation>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Ziur zaude ondorengo agindua exekutatu nahi duzula?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation>Gogoratu nire aukera</translation>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Ziur zaude &quot;%1&quot; taldea betirako ezabatu nahi duzula?</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation>Une honetan ez dago datu-baserik.</translation>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation>Bilaketa emaitzak (%1)</translation>
- </message>
- <message>
- <source>No Results</source>
- <translation>Emaitzarik ez</translation>
- </message>
- <message>
- <source>File has changed</source>
- <translation>Fitxategia aldatu da</translation>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation>Datu-basea aldatu da. Aldaketak kargatu nahi dituzu?</translation>
- </message>
- <message>
- <source>Merge Request</source>
- <translation>Bateratze eskaera</translation>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation>Datu-basearen fitxategia aldatu da, eta gorde gabeko aldaketak dituzu.
-Aldaketak bateratu nahi dituzu?</translation>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation>Zakarrontzia hustu nahi duzu?</translation>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Ziur zaude zakarrontzia betiko hustu nahi duzula?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Ziur zaude %n sarrera betiko ezabatu nahi dituzula?</numerusform><numerusform>Ziur zaude %n sarrera betiko ezabatu nahi dituzula?</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation><numerusform>Sarrera ezabatu nahi duzu?</numerusform><numerusform>Sarrerak ezabatu nahi dituzu?</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Mugitu nahi dituzu sarrerak zakarrontzira?</numerusform><numerusform>Mugitu nahi dituzu sarrerak zakarrontzira?</numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation>Fitxategia irakurtzeko bakarrik ireki da.</translation>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation>Blokeatu nahi duzu datu-basea?</translation>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Sarrera bat editatzen ari zara. Aldaketak baztertu, eta datu-basea blokeatu nahi duzu?</translation>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation>&quot;%1&quot; aldatu da.
-Aldaketak gorde nahi dituzu?</translation>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation>Datu-basea aldatu da.
-Aldaketak gorde nahi dituzu?</translation>
- </message>
- <message>
- <source>Save changes?</source>
- <translation>Aldaketak gorde?</translation>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation>Ezin izan da datu-basean idatzi. %1</translation>
- </message>
- <message>
- <source>Passwords</source>
- <translation>Pasahitzak</translation>
- </message>
- <message>
- <source>Save database as</source>
- <translation>Gorde datu-basea honela</translation>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 datu-basea</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation>Ezabatu taldea</translation>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation>Mugitu taldea zakarrontzira?</translation>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Ziur zaude &quot;%1&quot; taldea zakarrontzira mugitu nahi duzula?</translation>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Shared group...</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>Sarrera</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Aurreratua</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Ikonoa</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation>Propietateak</translation>
- </message>
- <message>
- <source>History</source>
- <translation>Historia</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation>(zifratua)</translation>
- </message>
- <message>
- <source>Select private key</source>
- <translation>Aukeratu gako pribatua</translation>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation>Fitxategia handiegia da gako pribatua izateko</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Ezin izan da gako pribatua ireki</translation>
- </message>
- <message>
- <source>Entry history</source>
- <translation>Sarrera historia</translation>
- </message>
- <message>
- <source>Add entry</source>
- <translation>Gehitu sarrera</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>Editatu sarrera</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Pasahitz desberdinak paratu dira.</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>Gehitu ezaugarria</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation>Ziur zaude ezaugarri hau ezabatu nahi duzula?</translation>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>Bihar</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>aste %n</numerusform><numerusform>%n aste</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation><numerusform>hilabete %n</numerusform><numerusform>%n hilabete</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Sortutako pasahitza erabili nahi duzu?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Sortutako pasahitza sarrera honetan erabili nahi duzu?</translation>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation>Sarrera behar bezala eguneratu da.</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>Sarrerak gorde gabeko aldaketak ditu</translation>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n urte</numerusform><numerusform>%n urte</numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation>Berretsi ezabatzea</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation>Ezaugarri gehigarriak</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>Gehitu</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Kendu</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation>Izena editatu</translation>
- </message>
- <message>
- <source>Protect</source>
- <translation>Babestu</translation>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Eranskinak</translation>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation>Lehen planoaren kolorea:</translation>
- </message>
- <message>
- <source>Background Color:</source>
- <translation>Atzeko planoaren kolorea:</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>Leihoaren izenburua:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>Erakutsi</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>Berrezarri</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>Ezabatu</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>Ezabatu guztiak</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>URL:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Pasahitza:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Errepikatu:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>Izenburua:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Oharrak</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation>Erabitzaile-izena:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Iraungitzea</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation>segundu</translation>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation>Hatz-marka</translation>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation>Gako publikoa</translation>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation>Iruzkina</translation>
- </message>
- <message>
- <source>Decrypt</source>
- <translation>Deszifratu</translation>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Kopiatu arbelera</translation>
- </message>
- <message>
- <source>Private key</source>
- <translation>Gako pribatua</translation>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Arakatu...</translation>
- </message>
- <message>
- <source>Attachment</source>
- <translation>Eranskina</translation>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Taldea</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Ikonoa</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Propietateak</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>Gehitu taldea</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>Editatu taldea</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>Gaitu</translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>Ezgaitu</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation>Mota:</translation>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Pasahitza:</translation>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation>Garbitu</translation>
- </message>
- <message>
- <source>The export container %1 is already referenced.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The import container %1 is already imported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The container %1 imported and export by different groups.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>Izena</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Oharrak</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Iraungitzea</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Bilatu</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation>%Erabili lehenetsitako ikonoa</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Erabili ikono pertsonalizatua</translation>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>Gehitu ikono pertsonalizatua</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation>Ezabatu ikono pertsonalizatua</translation>
- </message>
- <message>
- <source>Download favicon</source>
- <translation>Deskargatu favicon-a</translation>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation>Ezin izan da favicon-a atzitu.</translation>
- </message>
- <message>
- <source>Images</source>
- <translation>Irudiak</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Fitxategi guztiak</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation>Dagoeneko badago pertsonalizatutako ikonoa</translation>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation>Baieztatu ezabaketa</translation>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation>Pertsonalizatutako ikonoa behar bezala deskargatu da</translation>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation>Aukeratu irudia(k)</translation>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation>Ez da ikonorik kargatu</translation>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n ikonoa(k) dagoeneko badago/badaude datu-basean</numerusform><numerusform>%n ikonoa(k) dagoeneko badago/badaude datu-basean</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation><numerusform>Ikono hauek huts egin dute:</numerusform><numerusform>Ikono hauek huts egin dute:</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>Noiz sortua:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>Noiz aldatua:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>Noiz eskuratua:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>Uuid:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation>Gehigarrien datuak</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Kendu</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation>Ezabatu gehigarrien datuak?</translation>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation>Ziur zaude aukeratutako gehigarriaren datuak ezabatu nahi dituzula?
-Honek gehigarriek behar bezala ez funtzionatzea eragin dezake.</translation>
- </message>
- <message>
- <source>Key</source>
- <translation>Gakoa</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Balioa</translation>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation>%1 - Klonatu</translation>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>Izena</translation>
- </message>
- <message>
- <source>Size</source>
- <translation>Tamainua</translation>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation>Gehitu</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Kendu</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>Ireki</translation>
- </message>
- <message>
- <source>Save</source>
- <translation>Gorde</translation>
- </message>
- <message>
- <source>Select files</source>
- <translation>Aukeratu fitxategiak</translation>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Ziur zaude eranskin %n kendu nahi duzula?</numerusform><numerusform>Ziur zaude %n eranskin kendu nahi dituzula?</numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation>Gorde eranskinak</translation>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation>Ezin izan da honako direktorioa sortu: %1</translation>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation>Berretsi gainidaztea</translation>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation>Ezin izan dira eranskin hauek gorde: %1</translation>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation>Ezin izan dira eranskin hauek ireki: %1</translation>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation>Ezin izan dira eranskin hauek ireki: %1</translation>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation>Berretsi ezabatzea</translation>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation><numerusform>Ezin izan dira fitxategi hauek ireki: %1</numerusform><numerusform>Ezin izan dira fitxategi hauek ireki: %1</numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>Izena</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>Azken aldaketa</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Izenburua</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Erabiltzaile-izena</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Taldea</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Izenburua</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Erabiltzaile-izena</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation>Inoiz</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Pasahitza</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Oharrak</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Iraungitzea</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Eranskinak</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>Itxi</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Orokorra</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Erabiltzaile-izena</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Pasahitza</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation>Iraungitzea</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation>Ezaugarriak</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Eranskinak</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Oharrak</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation>Leihoa</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sekuentzia</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation>Bilatzen</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Bilatu</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation>Garbitu</translation>
- </message>
- <message>
- <source>Never</source>
- <translation>Inoiz</translation>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation>[BABESTUA]</translation>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation>Gaitua</translation>
- </message>
- <message>
- <source>Disabled</source>
- <translation>Ezgaitua</translation>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation>Pertsonalizatu bista</translation>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation>Ezkutatu erabiltzaile-izenak</translation>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation>Ezkutatu pasahitzak</translation>
- </message>
- <message>
- <source>Fit to window</source>
- <translation>Egokitu leihora</translation>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation>Egokitu edukira</translation>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation>Berrezarri lehenetsitako ezarpenak</translation>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation>Eranskinak (ikonoa)</translation>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation>Zakarrontzia</translation>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation>[hutsik]</translation>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Ezin izan da fitxategia gorde!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation>&amp;Itxi</translation>
- </message>
- <message>
- <source>Close message</source>
- <translation>Itxi mezua</translation>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Ezin izan da gako nagusia kalkulatu</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Ezin izan da gako nagusia kalkulatu</translation>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Ezin izan da gako nagusia kalkulatu</translation>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Ezin izan da gako nagusia kalkulatu</translation>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Ez da KeePass datu-basea.</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation>Inportatu Keepass1 datu-basea</translation>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation>Ezin izan da datu-basea ireki.</translation>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Ez da KeePass datu-basea.</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>Erroa</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Ezin izan da gako nagusia kalkulatu</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled share %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from share %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to share %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with share %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Utzi</translation>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>Arakatu</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation>Sortu</translation>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>Gako fitxategiak</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Fitxategi guztiak</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>Sortu gako fitxategia...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>Aukeratu gako fitxategia</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation>&amp;Datu-basea</translation>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Azken datu-baseak</translation>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation>&amp;Laguntza</translation>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation>Sa&amp;rrerak</translation>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation>&amp;Taldeak</translation>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation>&amp;Tresnak</translation>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation>&amp;Irten</translation>
- </message>
- <message>
- <source>&amp;About</source>
- <translation>&amp;Honi buruz</translation>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation>&amp;Ireki datu-basea...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Gorde datubasea</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Itxi datubasea</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Ezabatu sarrera</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Editatu taldea</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Ezabatu taldea</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Go&amp;rde datu-basea honela...</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Datu-basearen ezarpenak</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Klonatu sarrera</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopiatu &amp;erabiltzailea</translation>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation>Kopiatu erabiltzaile-izena arbelera</translation>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation>Kopiatu pasahitza arbelera</translation>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation>&amp;Ezarpenak</translation>
- </message>
- <message>
- <source>Password Generator</source>
- <translation>Pasahitz sortzailea</translation>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Blokeatu datu-baseak</translation>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation>&amp;Izenburua</translation>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation>Kopiatu izenburua arbelera</translation>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation>&amp;URL</translation>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation>Kopiatu URL-a arbelera</translation>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation>&amp;Oharrak</translation>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation>Kopiatu oharrak arbelera</translation>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Esportatu CSV fitxategira...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation>Garbitu historia</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation>Ezarpenak</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation>Irten KeePassXC-tik</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation>&amp;Inportatu</translation>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopiatu eza&amp;ugarria...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Datu-base berria...</translation>
- </message>
- <message>
- <source>Create a new database</source>
- <translation>Sortu datu-base berria</translation>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation>&amp;Sarrera berria</translation>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation>Gehitu sarrera berria</translation>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Editatu sarrera</translation>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation>Ikusi edo editatu sarrera</translation>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation>&amp;Talde berria</translation>
- </message>
- <message>
- <source>Add a new group</source>
- <translation>Gehitu talde berria</translation>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation>Aldatu &amp;gako nagusia...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Datu-basearen ezarpenak...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Kopiatu &amp;pasahitza</translation>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation>Ireki &amp;URLa</translation>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 datu-basea...</translation>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation>Inportatu KeePass 1 datu-basea</translation>
- </message>
- <message>
- <source>CSV file...</source>
- <translation>CSV fitxategia...</translation>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation>Inportatu CSV fittxategia</translation>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation>Egiaztatu eguneraketarik dagoen</translation>
- </message>
- <message>
- <source>Share entry</source>
- <translation>Partekatu sarrera</translation>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation>Sortu KeePassXC datu-basea...</translation>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>Erroa</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation>Zi&amp;fraketa ezarpenak</translation>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Hemen datu-basearen zifraketa ezarpenak aldatu ditzakezu. Ez kezkatu, geroago ere aldatu ditzakezu datu-basearen ezarpenetan.</translation>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation>Ezarpen aurreratuak</translation>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation>Oinarrizko ezarpenak</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation>Zifraketa ezarpenak</translation>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Hemen datu-basearen zifraketa ezarpenak aldatu ditzakezu. Ez kezkatu, ondoren ere aldatu ditzakezu datu-basearen ezarpenetan.</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation>Datu-basearen gako nagusia</translation>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation>Zuk bakarrik ezagutzen duzun gako nagusiak zure datu-basea babesten du.</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation>Datu-basearen informazio orokorra</translation>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation>Mesedez jarri izena eta deskribapena (aukeran) datu-base berrirako:</translation>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>Sartu pasahitza:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation>Berretsi pasahitza:</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Pasahitza</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Pasahitza da datu-basea babesteko metodo nagusia.&lt;/p&gt;&lt;p&gt;Pasahitz onak luzeak eta bakarrak dira. KeePassXC-ek bat sor dezake zuretzat.&lt;/p&gt;</translation>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation>Pasahitzak ez datoz bat.</translation>
- </message>
- <message>
- <source>Generate master password</source>
- <translation>Sortu pasahitz nagusia</translation>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Pasahitza:</translation>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation>sendotasuna</translation>
- </message>
- <message>
- <source>entropy</source>
- <translation>entropia</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Pasahitza</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>Karaktere motak</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>Letra larriak</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>Letra xeheak</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>Zenbakiak</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>Karaktere bereziak</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation>&amp;Luzeera:</translation>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation>Hitz zerrenda:</translation>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation>Hitz banatzailea:</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>Kopiatu</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Onartu</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>Itxi</translation>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation>Entropia: %1 bit</translation>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation>Pasahitzaren kalitatea: %1</translation>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation>Txarra</translation>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation>Ahula</translation>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation>Ona</translation>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation>Bikaina</translation>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Aurreratua</translation>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation>A-Z</translation>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation>a-z</translation>
- </message>
- <message>
- <source>0-9</source>
- <translation>0-9</translation>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation>Aukeratu</translation>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation>Gainditzi</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>Ezabatu</translation>
- </message>
- <message>
- <source>Move</source>
- <translation>Mugitu</translation>
- </message>
- <message>
- <source>Empty</source>
- <translation>Hutsik</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Kendu</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>Ezgaitu</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation>Bateratu</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation>Datubasea ez dago irekita</translation>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Errore ezezaguna</translation>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation>erabiltzaile-izena</translation>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation>luzeera</translation>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation>Editatu sarrera bat.</translation>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation>Sarreraren izenburua.</translation>
- </message>
- <message>
- <source>title</source>
- <translation>Izenburua</translation>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation>Zerrendatu datu-baseko sarrerak.</translation>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation>Bateratu bi datu-base.</translation>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation>ezaugarria</translation>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation>Erakutsiko den sarreraren izena.</translation>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Taldea</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Izenburua</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Erabiltzaile-izena</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Pasahitza</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Oharrak</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation>Azken aldaketa</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Integrazioa nabigatzaileekin</translation>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation>Sakatu</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation>%1 fitxategia ez da existitzen.</translation>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation>Ezin izan da %1 fitxategia ireki.</translation>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation>Argon2 (KDBX 4 – gomendatua)</translation>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation>AES-KDF (KDBX 4)</translation>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation>AES-KDF (KDBX 3.1)</translation>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation>KeePassXC - plataforma anitzeko pasahitz kudeatzailea</translation>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation>datu-basearen gako-fitxategia</translation>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation>KeePassXC - Errorea</translation>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot create new group</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>Bilatu</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation>Garbitu</translation>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation>Martxan</translation>
- </message>
- <message>
- <source>Allow export</source>
- <translation>Baimendu esportatzea</translation>
- </message>
- <message>
- <source>Allow import</source>
- <translation>Baimendu inportatzea</translation>
- </message>
- <message>
- <source>Own certificate</source>
- <translation>Ziurtagari propioa</translation>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation>Hatz-marka:</translation>
- </message>
- <message>
- <source>Certificate:</source>
- <translation>Ziurtagiria:</translation>
- </message>
- <message>
- <source>Signer</source>
- <translation>Sinatzailea</translation>
- </message>
- <message>
- <source>Key:</source>
- <translation>Gakoa:</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation>Sortu</translation>
- </message>
- <message>
- <source>Import</source>
- <translation>Inportatu</translation>
- </message>
- <message>
- <source>Export</source>
- <translation>Esportatu</translation>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation>Inportatutako ziurtagariak</translation>
- </message>
- <message>
- <source>Trust</source>
- <translation>Fidatu</translation>
- </message>
- <message>
- <source>Ask</source>
- <translation>Galdetu</translation>
- </message>
- <message>
- <source>Untrust</source>
- <translation>Mesfidatu</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Kendu</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation>Egoera</translation>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation>Hatz-marka</translation>
- </message>
- <message>
- <source>Certificate</source>
- <translation>Ziurtagiria</translation>
- </message>
- <message>
- <source>Trusted</source>
- <translation>Fidagarria</translation>
- </message>
- <message>
- <source>Untrusted</source>
- <translation>Ez-fidagarria</translation>
- </message>
- <message>
- <source>Unknown</source>
- <translation>Ezezaguna</translation>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Fitxategi guztiak</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation>Aldatutako ziurtagiria esportatzen</translation>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer:</source>
- <translation>Sinatzailea:</translation>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation>Inoiz</translation>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple import source path to %1 in %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Conflicting export target path %1 in %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature: Could not open file to write (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature: Could not write file (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database: Could not open file to write (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database: Could not write file (%1)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation>000000</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>Kopiatu</translation>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation>Kopiatu</translation>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation>Gakoa:</translation>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation>6 zifra</translation>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation>8 zifra</translation>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation>Eguneraketak bilatzen</translation>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation>Eguneraketak bilatzen...</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>Itxi</translation>
- </message>
- <message>
- <source>Update Error!</source>
- <translation>Eguneraketa errorea!</translation>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation>Errore bat gertatu da eguneraketa informazioa eskuratzean.</translation>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation>Mesedez, saiatu berriro geroago.</translation>
- </message>
- <message>
- <source>Software Update</source>
- <translation>Software eguneraketa</translation>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation>KeePassXC-ren bertsio berri bat dago eskuragarri!</translation>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation>KeePassXC %1 eskuragarri dago — orain %2 daukazu.</translation>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation>Deskargatu keepassxc.org webgunetik</translation>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation>Egunean zaude!</translation>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation>KeePassXC %1 eskuragarri dagoen azken bertsioa da</translation>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation>Sortu datu-base berria</translation>
- </message>
- <message>
- <source>Open existing database</source>
- <translation>Ireki datu-basea</translation>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation>Inportatu KeePass 1-etik</translation>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation>Inportatu CSV-tik</translation>
- </message>
- <message>
- <source>Recent databases</source>
- <translation>Azken datu-baseak</translation>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation>Ongi etorri KeePassXC %1 -era</translation>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation>Freskatu</translation>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_fi.ts b/share/translations/keepassx_fi.ts
index 9fe8e130b..60cb2901a 100644
--- a/share/translations/keepassx_fi.ts
+++ b/share/translations/keepassx_fi.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Käytä SSH-agenttia (vaatii uudelleenkäynnistyksen)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Käytä Windowsissa OpenSSH:ta Pageant:in sijasta</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Ota SSH Agentti käyttöön</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK-arvo</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK-ylikirjoitus</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(tyhjä)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>SSH Agentin socketia ei ole. Varmista, että SSH_AUTH_SOCK-ympäristömuuttuja on olemassa, tai aseta sille ylikirjoitus</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH Agent -yhteys toimii!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Haluatko varmasti palauttaa kaikki yleiset ja turvallisuusasetukset oletuksiin?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Mustavalkoinen (vaalea)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Mustavalkoinen (tumma)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Värikäs</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Tiedostohallinta</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Tallenna tietokannat turvallisesti (voi olla epäyhteensopiva Dropboxin tmv. kanssa)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Ota tietokannasta varmuuskopio ennen tallentamista</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Tallenna automaattisesti suljettaessa</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Älä merkitse tietokantaa muokatuksi mikäli tietueet eivät muutu (esim. ryhmien laajentamisen yhteydessä)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Käytä ryhmän kuvaketta tietuetta luodessa</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Piilota tietueen esikatselupaneeli</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Yleistä</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Piilota työkalurivi (ikonit)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimoi ohjelma sulkemisen sijasta</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Näytä ilmoitusalueen kuvake</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Tumma ilmoitusalueen kuvake</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Piiloita pienennetty ikkuna ilmoitusalueelle</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Kysy aina ennen automaattisyötön käyttämistä</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Yleisen automaattisyötön pikanäppäin</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Automaattisyötön kirjoituksen viive</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Automaattisyötön aloitusviive</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Siirrettävä työkalupalkki</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Sisällytä betajulkaisut päivityksiä tarkistaessa</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Painiketyyli:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Kieli:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Työkalupalkin painiketyyli</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Käytä tasalevyistä (monospace) fonttia muistiinpanoihin</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Kielivalinta</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Palauta oletusasetukset</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Yleisen automaattisyötön pikanäppäin</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Automaattisyötön aloitusviive millisekunneissa</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Käynnistä KeePassXC automaattisesti järjestelmän käynnistyksessä</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Merkitse tietokanta muokatuksi dataa sisältämättömistä muokkauksista (esim. ryhmien laajentaminen)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Tallenna tietokannat turvallisesti (ota pois käytöstä, jos tämä aiheuttaa ongelmia Dropboxin ym. kanssa)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Käyttöliittymä</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Työkalupalkin nappien tyyli:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Käytä tasalevyistä fonttia muistiinpanoille</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Ilmoitusalueen ikonin tyyppi:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Palauta oletusasetukset...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Automaattisyötön kirjoituksen viive:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Yleisen automaattisyötön pikanäppäin:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Automaattisyötön aloitusviive:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Uudelleenlukitse aikaisemmin lukittu tietokanta automaattisyötön jälkeen</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Älä vaadi salasanan toistoa jos salasana on näkyvillä</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Älä piilota salasanoja muokkauksen aikana</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Älä näytä paikkamerkkiä tyhjissä salasanakentissä</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Piilota salasanat tietueiden esikatselupaneelissa</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Tyhjennä hakukentän sisältö kun on kulunut</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Vaadi salasanan toistamista, mikäli se on näkyvillä</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Piilota salasanat muokkauksen aikana</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Käytä paikkamerkkiä tyhjissä salasanakentissä</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser - Vahvista pääsy</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Selaimen pääsypyyntö</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Muista tämä valinta</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 pyytää pääsylupaa seuraaviin tietueisiin:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Salli</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Muista pääsylupa merkatuille tietueille</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Estä</translation>
+ <source>Remember</source>
+ <translation>Muista</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 pyytää pääsyä seuraavien tietueiden salasanoihin.
-Ole hyvä ja valitse sallitaanko pääsy.</translation>
+ <source>Allow access to entries</source>
+ <translation>Salli pääsy tietueisiin</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Salli pääsy</translation>
+ <source>Allow Selected</source>
+ <translation>Salli valitut</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Estä pääsy</translation>
+ <source>Deny All</source>
+ <translation>Estä kaikilta</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Ota pois käytöstä tällä sivustolla</translation>
</message>
</context>
<context>
@@ -579,199 +609,260 @@ Valitse oikea tietokanta tietueen tallentamiseksi</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialogi</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Uusi avaimenliittämispyyntö</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Tämä vaaditaan, jotta tietokantoja voidaan käyttää KeePassXC-Browser -selainlaajennuksella</translation>
+ <source>Save and allow access</source>
+ <translation>Tallenna ja salli pääsy</translation>
</message>
<message>
- <source>General</source>
- <translation>Yleistä</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Korvataanko olemassa oleva avain?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Käytä integraatiota seuraaville selaimille:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Jaettu salausavain samalla nimellä &quot;%1&quot; on jo olemassa.
+Haluatko korvata sen?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Päivitä tietue</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Haluatko päivittää tiedot osoitteesta %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Keskeytä</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Muutetaan attribuutteja mukautetuiksi tiedoiksi...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Näytä &amp;ilmoitus, kun tilitietoja pyydetään</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Muutetut KeePassHTTP-attribuutit</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Pyyd&amp;ä tietokannan lukituksen avaamista, jos se on lukittu</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Mukautettiin attribuutit onnistuneesti %1 tietueesta.
+Siirrettiin %2 avainta mukautettuihin tietoihin.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.</numerusform><numerusform>Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Vain tietueet samalla skeemalla (http://, https://, ...) palautetaan.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Sovita verkko-osoitteen kaavaan (esim. https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Vanhoja selainintegraatioasetuksia havaittu</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Palauta vain parhaiten vastaavat tilitiedot</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Luo uusi ryhmä</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Järjestä &amp;vastaavat tilitiedot nimen mukaan</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Vastaanotettiin pyyntö luoda uusi ryhmä &quot;%1&quot;.
+Haluatko varmasti luoda tämän ryhmän?</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Jä&amp;rjestä vastaavat tilitiedot käyttäjätunnuksen mukaan</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>KeePassXC-Browser:in asetukset täytyy siirtää tietokannan asetuksiin.
+Tämä on välttämätöntä, jotta yhteys selainlaajennukseen säilyy muuttumattomana.
+Haluat siirtää asetukset nyt?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Lisäasetukset</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Älä näytä tätä varoitusta uudelleen</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Älä koskaan kysy ennen pääsyä tilitietoihin</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Olet saanut avainliittämispyynnön seuraavalle tietokannalle:
+%1
+
+Anna yhteydelle yksilöllinen nimi tai tunniste, esimerkiksi:
+chrome-läppäri.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Älä koskaan k&amp;ysy ennen tilitietojen päivittämistä</translation>
+ <source>Dialog</source>
+ <translation>Dialogi</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>%Etsi kaikista avoinna olevista tietokannoista vastaavia tilitietoja</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Tämä vaaditaan, jotta tietokantoja voidaan käyttää KeePassXC-Browser -selainlaajennuksella</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automaattinen lisäjonokenttien luonti tai päivittäminen ei ole tuettu</translation>
+ <source>Enable browser integration</source>
+ <translation>Käytä selainintegraatiota</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Palauta lisämerkkijonokentät jotka alkavat &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Yleistä</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Päivittää KeePassXC:n tai välitysohjelman polun automaattisesti native messaging -rajapinnan skripteihin käynnistyksen yhteydessä</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Snapin kautta asennetut selaimet eivät ole tällä hetkellä tuettuja.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Päivitä native messaging -rajapinnan skriptit automaattisesti ohjelman käynnistyessä</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Käytä integraatiota seuraaville selaimille:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Käytä välitysohjelmaa KeePassXC:n ja selainlaajennuksen välillä</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Käytä välitysohjelmaa KeePassXC:n ja selainlaajennuksen välillä</translation>
+ <source>&amp;Edge</source>
+ <translation>Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Käytä mukautettua välitysohjelmaa mikäli olet asentanut sellaisen manuaalisesti</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Valitse mukautettu välitysohjelma</translation>
+ <source>Tor Browser</source>
+ <translation>Tor-selain</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Selaa...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Varoitus:&lt;/b&gt; Seuraavat valinnat voivat olla vaarallisia!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Valitse mukautettu välitysohjelma</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor-selain</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Näytä ilmoitus, kun tietueita pyydetään tietokannasta</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Suoritettavat tiedostot</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Pyydä tietokannan avaamista, jos se on lukittu</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Kaikki tiedostot</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Vain tietueet samalla skeemalla (http://, https://, ...) palautetaan.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Älä kysy lupaa HTTP-autentikointiin</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>URL-skeeman on sovittava yhteen (esim. https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Snap:in hiekkalaatikon takia sinun täytyy suorittaa komentosarja jotta voit aktivoida selainintegraation.&lt;br /&gt;Voit ladata komentosarjan osoitteesta %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Katso yksityiskohtaisemmat ohjeet selainlaajennuksen käyttöön alta</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser tarvitaan selainintegraation toimimista varten.&lt;br /&gt;Lataa se seuraaville selaimille: %1 ja %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Salli vanhentuneiden tietueiden noutaminen. Teksti [vanhentunut] lisätään tietueen otsikkoon. </translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Salli vanhentuneiden tietueiden noutaminen</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Salli vanhentuneiden tietueiden noutaminen. Teksti [vanhentunut] lisätään tietueen otsikkoon. </translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Sallitaan tietueiden nouto kaikista tietokannoista jotka ovat yhdistetty selainlaajennukseen.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Salli vanhentuneiden tietueiden noutaminen.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Etsi osumia kaikista avoimista tietokannoista</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Käytä selainintegraatiota</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Järjestä vastaavat tietueet nimen mukaan</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Snapin kautta asennetut selaimet eivät ole tällä hetkellä tuettuja.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Järjestä vastaavat tietueet käyttäjänimen mukaan</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Sallitaan tietueiden nouto kaikista tietokannoista jotka ovat yhdistetty selainlaajennukseen.</translation>
+ <source>Advanced</source>
+ <translation>Lisäasetukset</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Älä koskaan varmista pääsyä tietueisiin</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Älä koskaan varmista tietueiden päivitystä</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Älä kysy lupaa HTTP Basic -autentikaatioon</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automaattinen lisäjonokenttien luonti tai päivittäminen ei ole tuettu</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Palauta lisämerkkijonot jotka alkavat &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Älä näytä ponnahdusikkunaa, joka ehdottaa vanhojen KeePassHTTP-asetuksien muuttamista uuteen muotoon.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Älä näytä ponnahdusikkunaa KeePassHTTP-asetusten muuttamiselle</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Älä näytä ponnahdusikkunaa, joka ehdottaa vanhojen KeePassHTTP-asetuksien muuttamista uuteen muotoon.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Päivittää KeePassXC:n tai välitysohjelman polun automaattisesti native messaging -rajapinnan skripteihin käynnistyksen yhteydessä</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Päivitä native messaging -rajapinnan skriptit automaattisesti ohjelman käynnistyessä</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Käytä mukautettua välitysohjelmaa mikäli olet asentanut sellaisen manuaalisesti</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Valitse mukautettu välitysohjelma:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,106 +873,81 @@ Valitse oikea tietokanta tietueen tallentamiseksi</translation>
<translation>Selaa mukautettua välitysohjelman tiedostoa</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Varoitus&lt;/b&gt;, keepassxc-proxy -ohjelmaa ei löydy!&lt;br /&gt;Ole hyvä ja tarkista KeePassXC:n asennushakemisto tai varmista mukautettu polku lisäasetuksista.&lt;br /&gt;Selainintegraatio ei toimi ilman välitysohjelmaa.&lt;br /&gt;Odotettu polku: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Selaa...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Uusi avaimenliittämispyyntö</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Mukautetun välitusohjelman sijainti:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Tallenna ja salli pääsy</translation>
+ <source>Browser type:</source>
+ <translation>Selaimen tyyppi:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Korvataanko olemassa oleva avain?</translation>
+ <source>Toolbar button style</source>
+ <translation>Työkalupalkin painiketyyli</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Jaettu salausavain samalla nimellä &quot;%1&quot; on jo olemassa.
-Haluatko korvata sen?</translation>
+ <source>Config Location:</source>
+ <translation>Asetustiedoston sijainti:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Päivitä tietue</translation>
+ <source>Custom browser location field</source>
+ <translation>Mukautetun selaimen sijaintikenttä</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Haluatko päivittää tiedot osoitteesta %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Keskeytä</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Selaa mukautetun selaimen polkua</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Muutetaan attribuutteja mukautetuiksi tiedoiksi...</translation>
+ <source>Custom extension ID:</source>
+ <translation>Mukautetun selainlaajennuksen ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Muutetut KeePassHTTP-attribuutit</translation>
+ <source>Custom extension ID</source>
+ <translation>Mukautetun selainlaajennuksen ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Mukautettiin attribuutit onnistuneesti %1 tietueesta.
-Siirrettiin %2 avainta mukautettuihin tietoihin.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Siirettiin onnistuneesti %n avain mukautettuihin tietoihin.</numerusform><numerusform>Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Snap:in hiekkalaatikon takia sinun täytyy suorittaa komentosarja jotta voit aktivoida selainintegraation.&lt;br /&gt;Voit ladata komentosarjan osoitteesta %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser tarvitaan selainintegraation toimimista varten.&lt;br /&gt;Lataa se seuraaville selaimille: %1, %2 ja %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Katso yksityiskohtaisemmat ohjeet selainlaajennuksen käyttöön alta</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Vanhoja selainintegraatioasetuksia havaittu</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Virhe:&lt;/b&gt; Mukautetun välitysohjelman sijaintia ei löydy!&lt;br/&gt;Selainintegraatio EI TOIMI ilman välitysohjelmaa.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Luo uusi ryhmä</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Varoitus:&lt;/b&gt; Seuraavat valinnat voivat olla vaarallisia!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Vastaanotettiin pyyntö luoda uusi ryhmä &quot;%1&quot;.
-Haluatko varmasti luoda tämän ryhmän?</translation>
+ <source>Executable Files</source>
+ <translation>Suoritettavat tiedostot</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>KeePassXC-Browser:in asetukset täytyy siirtää tietokannan asetuksiin.
-Tämä on välttämätöntä, jotta yhteys selainlaajennukseen säilyy muuttumattomana.
-Haluat siirtää asetukset nyt?</translation>
+ <source>All Files</source>
+ <translation>Kaikki tiedostot</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Älä näytä tätä varoitusta uudelleen</translation>
+ <source>Select custom proxy location</source>
+ <translation>Valitse mukautettu välitysohjelma</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Olet saanut avainliittämispyynnön seuraavalle tietokannalle:
-%1
-
-Anna yhteydelle yksilöllinen nimi tai tunniste, esimerkiksi:
-chrome-läppäri.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Valitse native messaging -isännän hakemiston sijainti</translation>
</message>
</context>
<context>
@@ -938,10 +1004,6 @@ chrome-läppäri.</translation>
<translation>Kommentit alkavat</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Ensimmäinen tietue sisältää kenttien nimet</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Käsittele merkkiä &apos;\&apos; escape-merkkinä</translation>
</message>
@@ -950,14 +1012,6 @@ chrome-läppäri.</translation>
<translation>Esikatselu</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Sarakeasettelu</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Ei mukana CSV-tiedostossa</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Tuotu CSV-tiedostosta</translation>
</message>
@@ -970,20 +1024,12 @@ chrome-läppäri.</translation>
<translation>Virhe</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Tyhjä kentän nimi %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>sarake %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>CSV-tiedostossa havaittiin virhe/virheitä!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n kappaletta viestejä ohitettiin]</numerusform><numerusform>[%n kappaletta viestejä ohitettiin]</numerusform></translation>
+ <translation><numerusform>[%n more message(s) skipped]</numerusform><numerusform>[%n kappaletta viestejä ohitettiin]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1007,12 +1053,64 @@ chrome-läppäri.</translation>
<source>CSV import preview</source>
<translation>CSV-tuonnin esikatselu</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Sarakkeen liitos</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Viimeksi muokattu</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Salasana</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Luotu</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Muistiinpanot</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Otsikko</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Ryhmä</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Käyttäjätunnus</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Otsakerivejä ohitettu</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Ensimmäinen rivi sisältää kentän nimet</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Ei löydy</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Sarake %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n sarake</numerusform><numerusform>%n saraketta</numerusform></translation>
+ <translation><numerusform>%n sarake.</numerusform><numerusform>%n saraketta</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1021,7 +1119,7 @@ chrome-läppäri.</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n tavu</numerusform><numerusform>% tavua</numerusform></translation>
+ <translation><numerusform>%n tavu</numerusform><numerusform>%n tavua</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
@@ -1031,11 +1129,6 @@ chrome-läppäri.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Juuri</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Tiedostoa %1 ei ole.</translation>
</message>
@@ -1077,6 +1170,19 @@ Tietokannan varmuuskopio paikannettu: %2</translation>
<source>Recycle Bin</source>
<translation>Roskakori</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Salasanat</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Tietokannan tallennus on jo käynnissä.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Tallennus ei onnistu, tietokantaa ei ole alustettu!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1130,10 +1236,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista.</translation>
<translation>Avaintiedoston avaus epäonnistui: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Valitse paikka...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Avaa KeePassXC-tietokannan lukitus</translation>
</message>
@@ -1146,14 +1248,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista.</translation>
<translation>Salasanakenttä</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Vaihda salasanan näkyvyyttä</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Avaintiedoston valinta</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Laiteavaimen paikan valinta</translation>
</message>
@@ -1218,10 +1312,6 @@ Jos et halua nähdä tätä virhettä uudestaan, mene &quot;Tietokannan asetukse
&lt;p&gt;Lisätietoja tästä...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.&lt;/p&gt;&lt;p&gt;Tämä salainen tiedosto &lt;strong&gt;ei&lt;/strong&gt; ole *.kdbx -tietokantatiedosto!&lt;br&gt;Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.&lt;/p&gt;&lt;p&gt;Lisätietoja tästä...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Avaintiedoston ohje</translation>
</message>
@@ -1230,10 +1320,6 @@ Jos et halua nähdä tätä virhettä uudestaan, mene &quot;Tietokannan asetukse
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Valitse avaintiedosto...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Tietokantaa ei voida käyttää avaintiedostona</translation>
</message>
@@ -1243,6 +1329,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Et voi käyttää tietokantaasi avaintiedostona.
Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.&lt;/p&gt;&lt;p&gt;Tämä salainen tiedosto &lt;strong&gt;ei&lt;/strong&gt; ole *.kdbx -tietokantatiedosto!&lt;br&gt;Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.&lt;/p&gt;&lt;p&gt;Lisätietoja tästä...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Avaintiedosto tietokannan avaukseen</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Kosketa YubiKeyssa olevaa painiketta!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Etsitään laiteavaimia...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Laiteavaimia ei havaittu</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Valitse laiteavain...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1266,10 +1376,6 @@ Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</translation>
<translation>Turvallisuus</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Pääsalasana</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Salausasetukset</translation>
</message>
@@ -1277,6 +1383,10 @@ Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</translation>
<source>Browser Integration</source>
<translation>Selainintegraatio</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Tietokannan tietueet</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1285,18 +1395,6 @@ Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</translation>
<translation>KeePassXC-Browser -asetukset</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Katkaise yhteys kaikkiin selaimiin</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>&amp;Unohda kaikki tietueiden sivustokohtaiset asetukset</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Siirrä KeePassHTTP-attribuutit KeePassXC-Browser:in &amp;mukautettuihin tietoihin</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Tallennetut avaimet</translation>
</message>
@@ -1350,7 +1448,7 @@ Tämä voi estää yhteyden selainlaajennukseen.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Poistettiin %n salausavain KeePassXC:n asetuksista.</numerusform><numerusform>Poistettiin %n salausavainta KeePassXC:n asetuksista.</numerusform></translation>
+ <translation><numerusform>%n salausavain poistettiin onnistuneesti KeePassXC:n asetuksista.</numerusform><numerusform>%n salausavainta poistettiin onnistuneesti KeePassXC:n asetuksista.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1376,7 +1474,7 @@ Pääsy tietueisiin evätään.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Poistettiin käyttöoikeudet %n:n tietueen tiedoista.</numerusform><numerusform>Poistettiin käyttöoikeudet %n:n tietueen tiedoista.</numerusform></translation>
+ <translation><numerusform>Poistettiin lupa %n tietueelta.</numerusform><numerusform>Poistettiin lupa %n tietueelta.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1404,6 +1502,67 @@ Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi.</
<source>Remove selected key</source>
<translation>Poista valittu avain</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Siirrä KeePassHTTP-attribuutit KeePassXC-Browser:in mukautettuihin tietoihin</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Uudista tietokannan juuriryhmän ID</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Luotu</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Uudista tietokannan ID</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Haluatko todella uudistaa tietokannan ID:n?
+Tämä on tarpeellista vain, jos tietokantasi on kloonattu toisesta ja selainintegraatio ei pysty yhdistämään siihen.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Lisäsuoja...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Salasanaa ei ole asetettu</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>VAROITUS! Et ole asettanut salasanaa. Tietokannan käyttöä ilman salasanaa ei suositella!
+
+Oletko varma, että haluat jatkaa ilman salasanaa?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Jatka ilman salasanaa</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Salausavainta ei ole lisätty</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Ainakin yksi salausavain täytyy lisätä, jotta tietokanta pysyy suojassa!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Tuntematon virhe</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Tietokannan tietueiden muuttaminen ei onnistu</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1428,10 +1587,6 @@ Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi.</
<translation>Muunnositeraatioita:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Laske parametrit 1:n sekunnin viivästykselle</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Muistin käyttö:</translation>
</message>
@@ -1441,7 +1596,7 @@ Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi.</
</message>
<message>
<source>Decryption Time:</source>
- <translation>Salauksen purkuun vaadittava aika:</translation>
+ <translation>Salauksen purkuun kulunut aika:</translation>
</message>
<message>
<source>?? s</source>
@@ -1452,14 +1607,6 @@ Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi.</
<translation>Muuta</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Korkeat arvot lupaavat parempaa suojaa, mutta tietokannan avaus voi kestää pidempään.</translation>
</message>
@@ -1469,7 +1616,7 @@ Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi.</
</message>
<message>
<source>This is only important if you need to use your database with other programs.</source>
- <translation>Tämä asetus on tärkeä vain, jos käytät tietokantaa muissa ohjelmissa.</translation>
+ <translation>Tämä on tärkeää vain, jos käytät tietokantaa muissa ohjelmissa.</translation>
</message>
<message>
<source>KDBX 4.0 (recommended)</source>
@@ -1482,7 +1629,7 @@ Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi.</
<message>
<source>unchanged</source>
<comment>Database decryption time is unchanged</comment>
- <translation>ei muutettu</translation>
+ <translation>muuttamaton</translation>
</message>
<message>
<source>Number of rounds too high</source>
@@ -1536,16 +1683,6 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa!</translation>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>säie</numerusform><numerusform>säiettä</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Muuta olemassa olevaa salauksen purkuun vaadittavaa aikaa</translation>
@@ -1578,6 +1715,14 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa!</translation>
<source>Parallelism</source>
<translation>Rinnakkaisuus</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1586,16 +1731,16 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa!</translation>
<translation>Avoimia tietueita</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Älä &amp;muuta tätä tietokantaa avoimeksi</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Älä näytä tätä tietokantaa</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Muuta tietueet avoimeksi tämän &amp;ryhmän alta:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Näytä tietueet vain tästä ryhmästä:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Käytä fd.o:n Secret Serviceä päästäksesi näihin asetuksiin.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Ota Secret Service käyttöön päästäksesi näihin asetuksiin.</translation>
</message>
</context>
<context>
@@ -1622,7 +1767,7 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa!</translation>
</message>
<message>
<source>Max. history items:</source>
- <translation>Maks. historiamerkintöjen lukumäärä:</translation>
+ <translation>Maks. historia-kohteiden lukumäärä:</translation>
</message>
<message>
<source>Max. history size:</source>
@@ -1630,7 +1775,7 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa!</translation>
</message>
<message>
<source> MiB</source>
- <translation>MiB</translation>
+ <translation> Mt</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1641,10 +1786,6 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa!</translation>
<translation>Tietokannan lisäasetukset</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Ota käyttöön &amp;pakkaus (suositeltava)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Tietokannan nimikenttä</translation>
</message>
@@ -1677,6 +1818,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation>(vanha)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Ota pakkaus käyttöön (suositeltu)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1711,45 +1856,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Lisäsuoja...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Salausavainta ei ole lisätty</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Ainakin yksi salausavain täytyy lisätä, jotta tietokanta pysyy suojassa!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Salasanaa ei ole asetettu</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>VAROITUS! Et ole asettanut salasanaa. Tietokannan käyttöä ilman salasanaa ei suositella!
-
-Oletko varma, että haluat jatkaa ilman salasanaa?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Tuntematon virhe</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Pääsalasanan muuttaminen ei onnistunut</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Jatka ilman salasanaa</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1769,125 +1875,6 @@ Oletko varma, että haluat jatkaa ilman salasanaa?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Tilastot</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Liiku virheikonin sisältävän rivin päälle saadaksesi lisätietoa.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nimi</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Arvo</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Tietokannan nimi</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Kuvaus</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Sijainti</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Viimeksi tallennettu</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Tallentamattomia muutoksia</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>kyllä</translation>
- </message>
- <message>
- <source>no</source>
- <translation>ei</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Tietokantaa muokattiin, mutta muutoksia ei ole tallennettu levylle.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Ryhmien määrä</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Tietueiden lukumäärä</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Vanhentuneiden tietueiden lukumäärä</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Tietokanta sisältää tietueita jotka ovat vanhentuneet.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Yksilöllisiä salasanoja</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Ei-yksilöllisiä salasanoja</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Salasanoista enemmän kuin 10% ovat samoja. Käytä yksilöllisiä salasanoja aina kun mahdollista.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maksimimäärä samoja salasanoja</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Salasanoista osa on käytössä useammassa kuin kolmessa tietueessa. Käytä yksilöllisiä salasanoja aina kun mahdollista.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Lyhyiden salasanojen määrä</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Salasanan suositeltu minimipituus on vähintään 8 merkkiä.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Heikkojen salasanojen määrä</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>On suositeltavaa käyttää salasanoja joiden luokitus on &apos;hyvä&apos; tai &apos;erinomainen&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Salasanan keskimääräinen pituus</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 merkkiä</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Salasanojen keskimääräinen pituus on vähemmän kuin kymmenen merkkiä. Pidemmät salasanat ovat turvallisempia.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Odota hetki, lasketaan tietokannan statistiikkaa...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1982,6 +1969,10 @@ Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Olet viemässä tietokantaasi salaamattomaan tiedostoon. Tämä jättää salasanasi ja minkä tahansa arkaluontoisen tiedon haavoittuvaksi! Oletko varma, että haluat jatkaa?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Avaa OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2061,7 +2052,7 @@ Haluatko yhdistää muutoksesi?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Haluatko varmasti poistaa %1 tietueen lopullisesti?</numerusform><numerusform>Haluatko varmasti poistaa %1 tietuetta lopullisesti?</numerusform></translation>
+ <translation><numerusform>Haluatko todella poistaa %n tietueen pysyvästi?</numerusform><numerusform>Haluatko todella poistaa %n tietuetta pysyvästi?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2129,7 +2120,7 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>Tietueella &quot;%1&quot; on %2 viittaus. Haluatko ylikirjoittaa viittauksen arvolla, ohittaa tietueen käsittelyn vai poistaa tietueen viittauksesta huolimatta?</numerusform><numerusform>Tietueella &quot;%1&quot; on %2 viittausta. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen käsittelyn vai poistaa tietueen viittauksista huolimatta?</numerusform></translation>
+ <translation><numerusform>Tietueella &quot;%1&quot; on %2 viittaus. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen?</numerusform><numerusform>Tietueella &quot;%1&quot; on %2 viittausta. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2163,6 +2154,14 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Tietokanta on avattu vain-luku -moodissa. Automaattinen tallennus on otettu pois päältä.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Tallenna tietokannan varmuuskopio</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Tietokantatiedostoa ei löydy: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2207,14 +2206,6 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation>Valitse yksityinen avain</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Tiedosto on liian suuri ollakseen yksityinen avain</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Yksityisen avaimen avaaminen epäonnistui</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Tietueiden historia</translation>
</message>
@@ -2227,10 +2218,6 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation>Muokkaa tietuetta</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Annetut salasanat eivät täsmää.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Uusi attribuutti</translation>
</message>
@@ -2251,29 +2238,13 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation><numerusform>%n kuukausi</numerusform><numerusform>%n kuukautta</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Käytä luotua salasanaa?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Haluatko ottaa käyttöön luodun salasanan tälle tietueelle?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Tietue päivitetty onnistuneesti.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Tietueella on tallentamattomia muutoksia</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Uusi attribuutti %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[SUOJATTU] Paina paljasta nähdäksesi tai muokataksesi</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n vuosi</numerusform><numerusform>%n vuotta</numerusform></translation>
@@ -2294,6 +2265,26 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Haluatko varmasti poistaa tämän URL:n?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Paljasta</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Piilota</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Tallentamattomia muutoksia</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Haluatko tallentaa muutokset tähän tietueeseen?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[SUOJATTU] Klikkaa Paljasta näyttääksesi tai muokataksesi</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2369,6 +2360,14 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<source>Background color selection</source>
<translation>Taustavärin valinta</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jos valittu, tietue ei näy Diagnostiikassa tai HIBP:ssä vaikkei se läpäisisikään laatuvaatimuksia (esim. salasanan entropia tai uudelleenkäyttö). Voit käyttää asetusta, jos salasana on sellainen mitä et voi hallita (jos sen täytyy olla esim. nelinumeroinen PIN-koodi), jolloin se ei väärennä raportin tuloksia.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Jätä tietokantaraporttien ulkopuolelle</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2377,14 +2376,6 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation>Salli automaattisyöttö tälle tietueelle</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Peri automaattisyötön oletussekvenssi &amp;ryhmältä</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Käytä mukautettua automaattisyötön sekvenssiä:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Ikkunoiden liitokset</translation>
</message>
@@ -2440,6 +2431,14 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Mukautettu automaattisyötön sekvenssi tälle ikkunalle</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Peri automaattisyötön oletussekvenssi ryhmältä</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Käytä mukautettua automaattisyötön sekvenssiä:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2475,6 +2474,14 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<source>Edit</source>
<translation>Muokkaa</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Lähetä tämä tietue vain HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tavalliset kirjautumiskentät eivät näytä tätä tietuetta listassa.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Käytä tietuetta vain HTTP Basic -autentikaatioon</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2523,21 +2530,13 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
</message>
<message>
<source>Password:</source>
- <translation>Salasana:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Toista:</translation>
+ <translation>Salasana</translation>
</message>
<message>
<source>Title:</source>
<translation>Otsikko:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Muistiinpanot</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Esiasetukset</translation>
</message>
@@ -2550,10 +2549,6 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation>Käyttäjänimi</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Erääntyy</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Osoitekenttä</translation>
</message>
@@ -2562,22 +2557,10 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation>Lataa favicon tälle URL:lle</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Toista salasana -kenttä</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Näytä salasanageneraattori</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Salasanakenttä</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Vaihda salasanan näkyvyyttä</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Vaihda muistiinpanojen näkyvyyttä</translation>
</message>
@@ -2609,6 +2592,18 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<source>Toggle expiration</source>
<translation>Ota vanhentumisaika käyttöön</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Muistiinpanot:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Vanhentuu:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2744,10 +2739,6 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Lomake</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tyyppi:</translation>
</message>
@@ -2756,10 +2747,6 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
<translation>Polku:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Salasana:</translation>
</message>
@@ -2843,57 +2830,25 @@ Tuetut tyypit ovat: %1.</translation>
<translation>Jakotiedoston sijainnin kenttä</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Selaa jakotiedostoa</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Salasanakenttä</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Vaihda salasanan näkyvyyttä</translation>
+ <source>Clear fields</source>
+ <translation>Tyhjennä kentät</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Näytä salasanageneraattori</translation>
+ <source>Browse for share file</source>
+ <translation>Selaa jakotiedostoa</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Tyhjennä kentät</translation>
+ <source>Browse...</source>
+ <translation>Selaa...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nimi</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Muistiinpanot</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Erääntyy</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Etsi</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Automaattisyöttö</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Peri automaattisyötön sekvenssi emoryhmältä</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Aseta automaattisyötön &amp;oletussekvenssi</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Nimikenttä</translation>
</message>
@@ -2921,18 +2876,38 @@ Tuetut tyypit ovat: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Automaattisyötön sekvenssin oletuksen kenttä</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Käytä oletuskuvaketta</translation>
+ <source>Expires:</source>
+ <translation>Vanhentuu:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Peri automaattisyötön sekvenssi emoryhmältä</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Automaattisyöttö:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Kä&amp;ytä mukautettua kuvaketta</translation>
+ <source>Search:</source>
+ <translation>Etsi:</translation>
</message>
<message>
+ <source>Notes:</source>
+ <translation>Muistiinpanot:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Nimi:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Aseta automaattisyötön oletussekvenssi</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Lisää mukautettu kuvake</translation>
</message>
@@ -2966,7 +2941,7 @@ Tuetut tyypit ovat: %1.</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Ladattiin onnistuneesti %1 / %n ikoni.</numerusform><numerusform>Ladattiin onnistuneesti %1 / %n ikonia.</numerusform></translation>
+ <translation><numerusform>%1 ikoni kaikista (%n) ladattiin onnistuneesti</numerusform><numerusform>%1 ikonia kaikista (%n) ladattiin onnistuneesti</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2974,15 +2949,15 @@ Tuetut tyypit ovat: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n ikoni on jo tietokannassa.</numerusform><numerusform>%n ikonia on jo tietokannassa.</numerusform></translation>
+ <translation><numerusform>%n ikoni on jo tietokannassa</numerusform><numerusform>%n ikonia on jo tietokannassa</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>Seuraavat ikoni epäonnistui:</numerusform><numerusform>Seuraavat ikonit epäonnistuivat:</numerusform></translation>
+ <translation><numerusform>Seuraava ikoni epäonnistui:</numerusform><numerusform>Seuraavat ikonit epäonnistuivat:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Tätä ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?</numerusform><numerusform>Tätä ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?</numerusform></translation>
+ <translation><numerusform>Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?</numerusform><numerusform>Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2997,14 +2972,6 @@ Tuetut tyypit ovat: %1.</translation>
<translation>Lisää valittu ikoni aliryhmille ja sen tietueille</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>&amp;Lisää ikoni ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Lisää vain tälle</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Lisää myös aliryhmille</translation>
</message>
@@ -3020,6 +2987,22 @@ Tuetut tyypit ovat: %1.</translation>
<source>Existing icon selected.</source>
<translation>Jo olemassa oleva ikoni valittu.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Käytä oletusikonia</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Käytä mukautettua ikonia</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Käytä ikonia...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Käytä vain tässä ryhmässä</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3136,7 +3119,7 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Haluatko varmasti poistaa %n liitteen?</numerusform><numerusform>Haluatko varmasti poistaa %n liitettä?</numerusform></translation>
+ <translation><numerusform>Haluatko varmasti poistaa &amp;n liitettä?</numerusform><numerusform>Haluatko varmasti poistaa %n liitettä?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3181,8 +3164,8 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Seuraavan tiedoston avaus epäonnistui:
-%1</numerusform><numerusform>Seuraavien tiedostojen avaus epäonnistui:
+ <translation><numerusform>Tiedostoa ei voitu avata:
+%1</numerusform><numerusform>Tiedostoja ei voitu avata:
%1</numerusform></translation>
</message>
<message>
@@ -3205,6 +3188,20 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
<source>Save selected attachment to disk</source>
<translation>Tallenna valittu liite levylle</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 on suurikokoinen tiedosto (%2 MB)
+Tietokantasi voi kasvaa liian suureksi ja hidastua.
+
+Oletko varma, että haluat lisätä tämän tiedoston?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Varmista liitetiedosto</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3288,12 +3285,52 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
<translation>Liitteet</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Kyllä</translation>
+ <source>Size</source>
+ <translation>Koko</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Ryhmän nimi</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Tietueen nimi</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Tietueen muistiinpanot</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Tietue vanhentuu</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Luomispäivämäärä</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Edellisen muokkauksen päivämäärä</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Edellisen pääsyn päivämäärä</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Liitetiedostot</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Tietueen koko</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Sisältää liitetiedostoja</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Sisältää TOTP-salasanan</translation>
</message>
</context>
<context>
@@ -3393,6 +3430,13 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Virheellinen URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3419,8 +3463,14 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
<translation>Palauta oletusasetukset</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Liitteet (kuvake)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Sisältää liitetiedostoja</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Sisältää TOTP:n</translation>
</message>
</context>
<context>
@@ -3432,21 +3482,74 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>DBus-palvelun rekisteröinti epäonnistui: %1. Toinen salauspalvelu on jo käynnissä.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%1 tietue käytettiin %1:n toimesta</numerusform><numerusform>%1 tietuetta käytettiin %1:n toimesta</numerusform></translation>
+ <translation><numerusform>%n tietue käytetiin %1</numerusform><numerusform>%n tietuetta käytettiin %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>DBus-palvelun rekisteröinti epäonnistui %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Tiedostonimi</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Ryhmä</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Hallitse</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Avaa lukitus näyttääksesi</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Ei mitään</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Sovellus</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Hallitse</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Tuntematon</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Tuntematon</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID %1, Suoritettava tiedosto: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Toinen Secret Service -palvelu on jo käynnissä (%1).&lt;br/&gt;Ole hyvä ja pysäytä/poista se ennen kuin otat Secret Service -integraation käyttöön.</translation>
</message>
</context>
<context>
@@ -3458,14 +3561,10 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Tiedostoa ei voi tallentaa!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Native messaging -skriptiä ei voitu tallentaa.</translation>
+ <source>Online password validation failed</source>
+ <translation>Salasanan varmistus netissä epäonnistui</translation>
</message>
</context>
<context>
@@ -3535,14 +3634,6 @@ Voit käyttää DuckDuckGo:ta ikonien lataukseen ohjelmiston turvallisuusasetuks
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Pääavaimen laskeminen ei onnistu</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Haaste-vastauksen tekeminen epäonnistui.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>tietokannan otsaketiedot puuttuvat</translation>
</message>
@@ -3568,16 +3659,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Väärät tilitiedot, ole hyvä ja koita uudestaan.
Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Tietokannan avaimen laskenta epäonnistui</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Haaste-vastauksen tekeminen epäonnistui: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Haaste-vastauksen tekeminen epäonnistui.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Haaste-vastauksen tekeminen epäonnistui: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Pääavaimen laskeminen ei onnistu</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Tietokannan avaimen laskenta epäonnistui</translation>
</message>
</context>
<context>
@@ -3587,10 +3686,6 @@ Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
<translation>tietokannan otsaketiedot puuttuvat</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Pääavaimen laskeminen ei onnistu</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Virheellinen otsaketietojen tarkistussumman koko</translation>
</message>
@@ -3708,6 +3803,10 @@ Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
<source>(HMAC mismatch)</source>
<translation>(HMAC on yhteensopimaton)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Tietokannan avaimen laskenta epäonnistui: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3721,14 +3820,14 @@ Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
<translation>Virheellinen symmetrisen salauksen alustussektorin (IV) koko.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Pääavaimen laskeminen ei onnistu</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>KDF-parametrien serialisointi variant-karttaan epäonnistui</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Tietokannan avaimen laskenta epäonnistui: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3807,7 +3906,7 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant
</message>
<message>
<source>No root group</source>
- <translation>Ei juuriryhmää</translation>
+ <translation>Ei isäntäryhmää</translation>
</message>
<message>
<source>Missing icon uuid or data</source>
@@ -3878,10 +3977,6 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant
<translation>Tietueen merkkijonoavain tai -arvo puuttuu</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Liite on jo olemassa</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Tietueen binääriavain tai -arvo puuttuu</translation>
</message>
@@ -3928,6 +4023,29 @@ Rivi %2, sarake %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Virheellinen KeeAgentin asetustiedoston rakenne</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Yksityinen avain on liitetiedosto, mutta liitetiedostoja ei ole annettu.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Yksityinen avainen on tyhjä</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Tiedosto on liian suuri ollakseen yksityinen avain</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Yksityisen avaimen avaaminen epäonnistui</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3990,10 +4108,6 @@ Rivi %2, sarake %3</translation>
<translation>Juuri</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Pääavaimen laskeminen ei onnistu</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Avaimen muuttaminen epäonnistui</translation>
</message>
@@ -4095,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Väärät tilitiedot, ole hyvä ja koita uudestaan.
Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Tietokannan avaimen laskenta epäonnistui</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4164,12 +4282,12 @@ Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
<message>
<source>Add %1</source>
<comment>Add a key component</comment>
- <translation>Lisää %1</translation>
+ <translation>Lisätty %1</translation>
</message>
<message>
<source>Change %1</source>
<comment>Change a key component</comment>
- <translation>Muuta %1</translation>
+ <translation>Muutettu %1</translation>
</message>
<message>
<source>Remove %1</source>
@@ -4194,22 +4312,13 @@ Jos tämä toistuu, tietokantasi voi olla viallinen.</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Turvallisutta voidaan lisätä avaintiedostolla, joka sisältää sattumanvaraista dataa.&lt;/p&gt;&lt;p&gt;Avaintiedosto on pidettävä salassa ja sen säilytyksestä tulee huolehtia. Salasanatietokantaa ei voida avata mikäli avaintiedosto hävitetään! &lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Lisäturvaksi voit lisätä avaintiedoston, joka sisältää sattumanvaraista dataa.&lt;/p&gt;&lt;p&gt;Tämä tiedosto täytyy pitää salassa eikä sitä saa koskaan hävittää!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
<translation>Vanha avaintiedostomuoto</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Käytät vanhaa avaintiedoston muotoa joka ei ole välttämättä tuettu tulevaisuudessa.
-
-Ole hyvä ja mene pääsalasanan asetuksiin ja luo uusi avaintiedosto.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Avaintiedostoa &apos;%1&apos; ei voitu avata
@@ -4277,6 +4386,16 @@ Are you sure you want to continue with this file?</source>
<translation>Valittu avaintiedosto näyttää tietokannalta. Avaintiedoston täytyy olla staattinen tiedosto jonka sisältö ei koskaan muutu. Muussa tapauksessa saatat menettää pääsyn tietokantaasi lopullisesti.
Haluatko jatkaa käyttämällä tätä tiedostoa?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Käytät vanhaa avaintiedostomuotoa joka ei ole
+välttämättä tuettu tulevaisuudessa.
+
+Ole hyvä ja harkitse uuden avaintiedoston luomista.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4285,20 +4404,12 @@ Haluatko jatkaa käyttämällä tätä tiedostoa?</translation>
<translation>&amp;Tietokanta</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Viimeisimmät tietokannat</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Ohje</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>Ti&amp;etueet</translation>
- </message>
- <message>
<source>&amp;Groups</source>
- <translation>&amp;Ryhmät</translation>
+ <translation>Ryhmät</translation>
</message>
<message>
<source>&amp;Tools</source>
@@ -4313,46 +4424,10 @@ Haluatko jatkaa käyttämällä tätä tiedostoa?</translation>
<translation>T&amp;ietoja</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Avaa tietokanta...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Tallenna tietokanta</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Sulje tietokanta</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Poista tietue</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Muokkaa r&amp;yhmää</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Poista ry&amp;hmä</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Ta&amp;llenna tietokanta nimellä...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Tietokannan asetukset</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Kloonaa tietue</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopioi käyttäjä&amp;tunnus</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Kopioi käyttäjätunnus leikepöydälle</translation>
</message>
@@ -4365,10 +4440,6 @@ Haluatko jatkaa käyttämällä tätä tiedostoa?</translation>
<translation>&amp;Asetukset</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lukitse tietokannat</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Otsikko</translation>
</message>
@@ -4393,14 +4464,6 @@ Haluatko jatkaa käyttämällä tätä tiedostoa?</translation>
<translation>Kopioi muistiinpanot leikepöydälle</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Vie CSV-tiedostoon...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Aseta TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopioi &amp;TOTP</translation>
</message>
@@ -4445,10 +4508,6 @@ Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön.</translation>
<translation>&amp;Lahjoita</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Ilmoita &amp;virheestä</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>VAROITUS: Qt-versiosi voi aiheuttaa KeePassXC:n kaatumisen näytön näppäimistöllä!
@@ -4459,66 +4518,26 @@ Suosittelemme, että käytät AppImagea, jonka voit hakea lataussivustoltamme.</
<translation>&amp;Tuo</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopioi att&amp;ribuutti...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Uusi tietokanta</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Luo uusi tietokanta</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Yhdistä tietokannasta...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Yhdistä toisesta KDBX-tietokannasta</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>Uusi &amp;tietue</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Lisää uusi tietue</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Muokkaa tietuetta</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Katso tai muokkaa tietuetta</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>Uusi &amp;ryhmä</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Lisää uusi ryhmä</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Muuta &amp;pääsalasanaa</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Tietokannan asetukset</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Kopioi &amp;salasana</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Suorita &amp;automaattitäydennys</translation>
</message>
@@ -4527,30 +4546,14 @@ Suosittelemme, että käytät AppImagea, jonka voit hakea lataussivustoltamme.</
<translation>&amp;Avaa URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 -tietokanta...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Tuo KeePass 1 -tietokanta</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV-tiedosto...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Tuo CSV-tiedosto</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Näytä TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Näytä TOTP QR-koodi...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>HUOM: Käytät KeePassXC:n esiversiota!
@@ -4573,14 +4576,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>&amp;Vie</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Tarkista päivitykset...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Lataa kaikki &amp;faviconit</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Järjestä &amp;A-Ö</translation>
</message>
@@ -4593,48 +4588,290 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>&amp;Salasanageneraattori</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Lataa favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Tuo 1Password-holvi</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Vie HTML-tiedostoon...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Alkuun pääsy</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password-holvi...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Käyttäjäopas</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Tuo 1Password-holvi</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Pikanäppäimet</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Alkuun pääsy</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Viimeisimmät tietokannat</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Avaa alkuun pääsyyn tarkoitettu käyttäjäopas -PDF</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Tietueet</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Verkko-ohje...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Kopioi att&amp;ribuutti</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Siirry verkkodokumentaatioon (avaa selaimen)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Käyttäjäopas</translation>
+ <source>View</source>
+ <translation>Näytä</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Avaa käyttäjäopas PDF-muodossa</translation>
+ <source>Theme</source>
+ <translation>Teema</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Pikanäppäimet</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>Tarkista &amp;päivitykset</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Avaa tietokanta…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Tallenna tietokanta</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Sulje tietokanta</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Uusi tietokanta…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Yhdistä tietokannasta…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Uusi tietue…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Muokkaa tietuetta…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Poista tietue…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Uusi ryhmä…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Muokkaa ryhmää…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Poista ryhmä…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Lataa kaikki &amp;faviconit…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Ta&amp;llenna tietokanta nimellä…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>Tietokannan &amp;turvallisuus…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>Tietokannan &amp;raportit...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Tilastot, kelvollisuuden tarkastus jne.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Tietokannan asetukset…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Kloonaa tietue…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Siirrä &amp;ylös</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Siirrä tietue yksi rivi ylemmäs</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Siirrä &amp;alas</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Siirrä tietue yksi rivi alemmas</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Kopioi &amp;käyttäjätunnus</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Kopioi &amp;salasana</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Lataa &amp;favicon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Lukitse tietokannat</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV-tiedosto…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML-tiedosto…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 -tietokanta</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>!Password-holvi...</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV-tiedosto...</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Näytä TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Näytä QR-koodi</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Aseta TOTP...</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Ilmoita &amp;virheestä</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>Avaa alkuun pääsyyn tarkoitettu opas</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Verkko-ohje</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Siirry online-dokumentaatioon</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Avaa käyttöopas</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Tallenna tietokannan varmuuskopio...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Lisää avain SSH-agenttiin</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Poista avain SSH-agentista</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Kompakti tila</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automaattinen</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Vaalea</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Tumma</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klassinen (käyttöjärjestelmän oma)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Näytä työkalupalkki</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Näytä esikatselupaneeli</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Älä näytä uudestaan tälle versiolle</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Käynnistä ohjelma uudelleen?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Ohjelma täytyy käynnistää uudelleen, jotta asetus voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Tietokannan asetukset</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Muokkaa tietokannan asetuksia</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Avaa tietokannan lukitus</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Avaa tietokannan lukitus näyttääksesi enemmän tietoja</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Lukitse tietokanta</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Katkaise yhteys</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Katkaise yhteys tältä ohjelmalta</translation>
</message>
</context>
<context>
@@ -4723,10 +4960,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Ohjattu sivu</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>&amp;Salausasetukset</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen.</translation>
</message>
@@ -4738,27 +4971,31 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<source>Simple Settings</source>
<translation>Yksinkertaiset asetukset</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Salausasetukset</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen.</translation>
+ <source>Database Credentials</source>
+ <translation>Tietokannan tietueet</translation>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Tietokannan suojelemiseksi tarkoitettu tietueiden ryhmä</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Tietokannan pääsalasana</translation>
+ <source>Encryption Settings</source>
+ <translation>Salausasetukset</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Pääsalasana jonka vain sinä tiedät suojaa tietokantaasi.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen.</translation>
</message>
</context>
<context>
@@ -4773,6 +5010,13 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Salasanamanageri</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4863,7 +5107,7 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
</message>
<message>
<source>Found zero keys</source>
- <translation>Yhtään avainta ei löytynyt</translation>
+ <translation>Löytyi nolla avainta</translation>
</message>
<message>
<source>Failed to read public key.</source>
@@ -4948,6 +5192,18 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<source>Passwords match so far</source>
<translation>Salasanat jotka ovat tähän mennessä samoja</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Ota salasana käyttöön (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Luo salasana (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Varoitus: Caps Lock on päällä!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4972,25 +5228,13 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Salasanat eivät ole samoja.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Luo pääsalasana</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Salasanakenttä</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Vaihda salasanan näkyvyyttä</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Toista salasana -kenttä</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Näytä salasanageneraattori</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4999,10 +5243,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Salasana:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>vahvuus</translation>
@@ -5052,14 +5292,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Sanaerotin:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopioi</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Hyväksy</translation>
- </message>
- <message>
<source>Close</source>
<translation>Sulje</translation>
</message>
@@ -5156,14 +5388,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Vaihda yksinkertaiseen tilaan</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Yksinkertainen</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Kirjaimet joita ei käytetä salasanan muodostukseen</translation>
</message>
@@ -5184,14 +5408,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Poissuljetut kirjaimet: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Sanojen &amp;lukumäärä:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Luo uudelleen</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Luotu salasana</translation>
</message>
@@ -5240,10 +5456,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Kopioi salasana</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Hyväksy salasana</translation>
- </message>
- <message>
<source>lower case</source>
<translation>pienaakkoset</translation>
</message>
@@ -5256,8 +5468,44 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Otsikon aakkoslaji</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Vaihda salasanan näkyvyyttä</translation>
+ <source>Generate Password</source>
+ <translation>Luo salasana</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Valitse myös:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Lisäkirjaimet joita käytetään salasanan luomisessa</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Lisäkirjaimet</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Sanamäärä:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Käytä salasanaa</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Tyhjennä</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Luo salasana uudelleen (%1)</translation>
</message>
</context>
<context>
@@ -5270,6 +5518,58 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<source>Statistics</source>
<translation>Tilastot</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Erittäin heikko salasana</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Salasanan entropia on %1 bittiä</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Heikko salasana</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Käytetty %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Salasanaa on käytetty %1 kertaa</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Salasana on vanhentunut</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Salasana vanhentui %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Salasana on vanhentumassa</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Salasana vanhentuu %1 päivässä</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Salasana vanhenee pian</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Salasana vanhentuu %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Diagnostiikka</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5287,7 +5587,7 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
</message>
<message>
<source>Empty</source>
- <translation>Tyhjennä</translation>
+ <translation>Tyhjä</translation>
</message>
<message>
<source>Remove</source>
@@ -5362,7 +5662,7 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
</message>
<message>
<source>Add a new entry to a database.</source>
- <translation>Lisää uusi tietue tietokantaan</translation>
+ <translation>Lisää uusi tietue tietokantaan.</translation>
</message>
<message>
<source>Path of the database.</source>
@@ -5378,7 +5678,7 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
</message>
<message>
<source>Username for the entry.</source>
- <translation>Tietueen käyttäjänimi</translation>
+ <translation>Tietueen käyttäjänimi.</translation>
</message>
<message>
<source>username</source>
@@ -5409,10 +5709,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<translation>Lisättävän tietueen polku.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Kopioi salasana leikepöydälle.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Kopioitavan tietueen polku.</translation>
@@ -5427,7 +5723,7 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
</message>
<message>
<source>Title for the entry.</source>
- <translation>Tietueen otsikko.</translation>
+ <translation>Tietueen nimi</translation>
</message>
<message>
<source>title</source>
@@ -5570,14 +5866,6 @@ Käytettävissä olevat komennot:
<translation>Selainintegraatio</translation>
</message>
<message>
- <source>Press</source>
- <translation>Paina</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiivi</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-agentti</translation>
</message>
@@ -5616,10 +5904,6 @@ Käytettävissä olevat komennot:
<translation>Tietueen %1 lisäys onnistui.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Kopioi nykyinen TOTP leikepöydälle.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Virheellinen aikakatkaisun arvo %1.</translation>
</message>
@@ -5631,17 +5915,9 @@ Käytettävissä olevat komennot:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Tietueella joka käyttää polkua %1 ei ole TOTP:ia asetettuna.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Tietueen tämän hetkinen TOTP on kopioitu leikepöydälle!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Tietueen salasana on kopioitu leikepöydälle!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Leikepöytä tyhjennetään %1 sekunnin kuluttua...</numerusform><numerusform>Leikepöytä tyhjennetään %1 sekunnin kuluttua...</numerusform></translation>
+ <translation><numerusform>Tyhjennetään leikepöytä %1 sekunnissa...</numerusform><numerusform>Tyhjennetään leikepöytä %1 sekunnissa...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5859,10 +6135,6 @@ Käytettävissä olevat komennot:
<translation>Ohjelmaa leikepöydän hallintaan ei ole määritelty.</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Ohjelmaa %1 ei voitu käynnistää</translation>
- </message>
- <message>
<source>file empty</source>
<translation>tyhjä tiedosto</translation>
</message>
@@ -5871,18 +6143,6 @@ Käytettävissä olevat komennot:
<translation>%1: (rivi, sarake) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – suositeltu)</translation>
</message>
@@ -6133,10 +6393,6 @@ Ydin: %3 %4</translation>
<translation>Näytä tämä ohje.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Yubikey-paikkaa käytetty tietokannan salaukseen.</translation>
- </message>
- <message>
<source>slot</source>
<translation>paikka</translation>
</message>
@@ -6153,10 +6409,6 @@ Ydin: %3 %4</translation>
<translation>Poistu interaktiivisesta tilasta.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formaatti jota viennissä käytetään. Saatavilla olevat vaihtoehdot ovat XML tai CSV. Oletuksena käytetään XML:ää.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Vie tietokannan sisällön standardiin tulosteeseen (stdout) halutussa formaatissa.</translation>
</message>
@@ -6197,10 +6449,6 @@ Ydin: %3 %4</translation>
<translation>Uuden tietokannan polku.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Vietyä XML-tietokantaa ei voitu tuoda %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Tietokanta tuotiin onnistuneesti.</translation>
</message>
@@ -6293,10 +6541,6 @@ Ydin: %3 %4</translation>
<translation>Virheellinen Yubikey-paikka %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Kosketa Yubikey:ssä olevaa painiketta avataksesi kohteen %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Syötä salasana salataksesi tietokannan (valinnainen): </translation>
</message>
@@ -6312,13 +6556,9 @@ Ydin: %3 %4</translation>
<source>User name</source>
<translation>Käyttäjätunnus</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1 [%2] Haaste-vastaus - Paikka %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Salasana tietueelle &apos;%1&apos; on vuotanut %2 kertaa!</numerusform><numerusform>Salasana tietueelle &apos;%1&apos; on vuotanut %2 kertaa!</numerusform></translation>
+ <translation><numerusform>Salasana palveluun &apos;%1&apos; on vuotanut %1 kerran!</numerusform><numerusform>Salasana palveluun &apos;%1&apos; on vuotanut %2 kertaa!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6328,6 +6568,194 @@ Ydin: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Näytä suojatut attribuutit selkotekstinä.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Selainliitännän virhe</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Native messaging -skriptatiedostoa ei voitu tallentaa %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Kopioi annettu attribuutti leikepöydälle. Asetetaan oletukseen &quot;password&quot;, mikäli tätä ei ole asetettu.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Kopioi tämän hetkinen TOTP leikepöydälle (sama kuin &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Kopioi tietueen attribuutti leikepöydälle</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>VIRHE: Määritä joko --attribute tai --totp, mutta älä molempia.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>VIRHE: attribuutti %1 on epäselvä, se sopii yhteen %2 kanssa.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Attribuuttia &quot;%1&quot; ei löydy.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Tietueen &quot;%1&quot; attribuutti on kopioitu leikepöydälle!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Yubikeyn paikka ja valinnainen serial tietokannan pääsyyn (esim. 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>paikka[:serial]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Kohteen salauksen purkuun kuluva aika millisekunneissa tietokannalle.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>aika</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Syötä tietokannan avaintiedosto.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Syötä tietokannan salasana.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Virheellinen salauksen purun aika %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Kohteen salauksen purkuun kuluva aika täytyy olla välillä %1 ja %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Tietokannan salasanan asettaminen ei onnistunut.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Verrataan avainmuunnosfunktiota %1 ms:n viiveelle.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Asetetaan %1 kierrosta avainmuunnosfunktiolle.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>Virhe asetettaessa tietokannan avainmuunnosfunktion asetuksia.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Viennissä käytettävä formaatti. Mahdolliset vaihtoehdot ovat &apos;xml&apos; tai &apos;csv&apos;. Oletus on &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>XML-muodossa olevaa tietokantaa ei voitu tuoda: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Näytä tietokannan tiedot.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID:</translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nimi:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Kuvaus:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Salaus:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Roskakori on otettu käyttöön.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Roskakori ei ole käytössä.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Virheellinen komento %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Virheellinen Yubikeyn serial %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Ole hyvä ja paina Yubikeyssä olevaa painiketta jatkaaksesi...</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Haluatko luoda tietokannan tyhjällä salasanalla? [k/E]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Toista salasana:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Virhe: Salasanat eivät ole samoja.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Kaikki leikkaavat ohjelmat epäonnistuivat. Kokeiltiin %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 kierrosta)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 kierrosta, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Mittaa %1 viive</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6364,6 +6792,290 @@ Ydin: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Näytä myös ne tietueet jotka on poissuljettu raporteista</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Siirrä kursori syyn päälle nähdäksesi lisätietoja. Tuplaklikkaa tietueita muokataksesi niitä.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Paha</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Paha - salasana on vaihdettava</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Huono</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Heikko - salasana on vaihdettava</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Heikko</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Heikohko - salasana on vaihdettava</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Poissuljettu)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Tämä tietue on poissuljettu raporteista</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Odota hetki, diagnostiikkaa lasketaan...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Onneksi olkoon, kaikki on kunnossa!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Otsikko</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Polku</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Pisteytys</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Syy</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Muokkaa tietuetta...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Poissulje raporteista</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>HUOMIO: Tämä raportti lähettää tietoa Have I Been Pwned -palveluun (https://haveibeenpwned.com). Jos jatkat, tietokantasi salasanat tiivistetään ja viisi ensimmäistä kirjainta tästä tiivisteestä lähetetään turvallisesti palvelimelle. Tietokantasi pysyy turvassa, eikä sen tietoja voida kerätä tätä informaatiota käyttäen. Salasanojesi määrä ja IP-osoitteesi tosin lähetetään palvelimelle.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Suorita online-analyysi</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Näytä myös ne tietueet jotka on otettu pois raporteista</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Tässä KeePassXC:n build-versiossa ei ole verkkotoiminnallisuuksia. Verkkotoiminnallisuus vaaditaan, jotta voit tarkistaa salasanojasi Have I Been Pwned -tietokannasta.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Onneksi olkoon, salasanojasi ei ole vuotanut!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Otsikko</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Polku</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Salasana vuotanut...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Poissuljettu)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Tämä tietue on poissuljettu raporteista</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>kerran</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>jopa kymmenen kertaa</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>jopa sata kertaa</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>jopa tuhat kertaa</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>jopa 10 000 kertaa</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>jopa 100 000 kertaa</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>jopa miljoona kertaa</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>miljoonia kertoja</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Muokkaa tietuetta...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Poissulje raporteista</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Liiku virheikonin sisältävän rivin päälle saadaksesi lisätietoa.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nimi</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Arvo</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Odota hetki, lasketaan tietokannan statistiikkaa...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Tietokannan nimi</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Kuvaus</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Sijainti</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Viimeksi tallennettu</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Tallentamattomia muutoksia</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>kyllä</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>ei</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Tietokantaa muokattiin, mutta muutoksia ei ole tallennettu levylle.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Ryhmien määrä</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Tietueiden lukumäärä</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Vanhentuneiden tietueiden lukumäärä</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Tietokanta sisältää tietueita jotka ovat vanhentuneet.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Yksilöllisiä salasanoja</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Ei-yksilöllisiä salasanoja</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Salasanoista enemmän kuin 10% ovat samoja. Käytä yksilöllisiä salasanoja aina kun mahdollista.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maksimimäärä samoja salasanoja</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Salasanoista osa on käytössä useammassa kuin kolmessa tietueessa. Käytä yksilöllisiä salasanoja aina kun mahdollista.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Lyhyiden salasanojen määrä</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Salasanan suositeltu minimipituus on vähintään 8 merkkiä.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Heikkojen salasanojen määrä</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>On suositeltavaa käyttää salasanoja joiden luokitus on &apos;hyvä&apos; tai &apos;erinomainen&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Tietueet jotka on poissuljettu raporteista</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Poissuljetut tietueet raporteista, esim. joissa tiedetään olevan heikko salasana, eivät välttämättä ole ongelma, mutta niitä kannattaa pitää silmällä.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Salasanan keskimääräinen pituus</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 merkkiä</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Salasanojen keskimääräinen pituus on vähemmän kuin kymmenen merkkiä. Pidemmät salasanat ovat turvallisempia.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6397,6 +7109,14 @@ Ydin: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Agentti ei tue vahvistuspyyntöä (tarkista asetukset).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Avaimen tunnisteen omistajaristiriita. Lisäystä ei tehdä.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Agentti ei ole päällä, tunnisteita ei voi listata.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6504,26 +7224,10 @@ Ydin: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jos tietokannassa on roskakori, tietueet siirretään suoraan sinne. Muussa tapauksessa ne poistetaan ilman vahvistusta.&lt;/p&gt;&lt;p&gt;Huomautus näytetään, mikäli tietue viittaa johonkin toiseen tietueeseen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Älä näytä vahvistusta asiakkaan kautta tapahtuville tietueiden poistolle.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Avoimet tietokannan ryhmät:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Tiedostonimi</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Ryhmä</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Hallitse</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Valtuutus</translation>
</message>
@@ -6532,40 +7236,20 @@ Ydin: %3 %4</translation>
<translation>Nämä sovellukset ovat parhaillaan yhdistetty:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Sovellus</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Katkaise yhteys</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Tietokannan asetukset</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Muokkaa tietokannan asetuksia</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Avaa tietokannan lukitus</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Avaa tietokannan lukitus näyttääksesi enemmän tietoja</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Älä varmista, kun tietueita tuhotaan asiakkaan kautta</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Lukitse tietokanta</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Virhe:&lt;/b&gt; DBus:iin ei voitu yhdistää. Tarkista DBus-asetuksesi.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Avaa lukitus näyttääksesi</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Varoitus:&lt;/b&gt;</translation>
</message>
<message>
- <source>None</source>
- <translation>Ei mitään</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Tallenna tämän hetkiset muutokset aktivoidaksesi laajennus ja salliaksesi tämä osa-alueen muokkaamisen.</translation>
</message>
</context>
<context>
@@ -6838,10 +7522,6 @@ Ydin: %3 %4</translation>
<translation>Onnistunut allekirjoitettu tuonti</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Odottamaton virhe</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Allekirjoittamattoman jaetut säiliöt eivät ole tuettu - tuonti estettiin</translation>
</message>
@@ -6909,7 +7589,7 @@ Ydin: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Vanhenee &lt;b&gt;%n&lt;/b&gt; sekunnin kuluttua</numerusform><numerusform>Vanhenee &lt;b&gt;%n&lt;/b&gt; sekunnin kuluttua</numerusform></translation>
+ <translation><numerusform>Umpeutuu &lt;b&gt;%n&lt;/b&gt; sekunnin kuluttua</numerusform><numerusform>Umpeutuu &lt;b&gt;%n&lt;/b&gt; sekunnin kuluttua</numerusform></translation>
</message>
</context>
<context>
@@ -7011,6 +7691,13 @@ Esimerkiksi: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Virheellinen URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7101,6 +7788,53 @@ Esimerkiksi: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Asetettu paikka - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Haaste-vastaus - Paikka %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Paina</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiivi</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Virheellinen paikka määritetty - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>Yubikeyn käyttöliittymää ei ole alustettu.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Laiteavain on käytössä.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Laiteavainta sarjanumerolla %1 ei löydetty. Ole hyvä ja liitä se jatkaaksesi.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Laiteavain aikakatkaistu käyttäjän toimia odottaessa.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Tapahtui USB-virhe laiteavaimeen yhdistäessä: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Haaste-vastauksen valmistuminen epäonnistui virheellä: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7115,14 +7849,6 @@ Esimerkiksi: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Jos omistat &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey:n&lt;/a&gt;, voit käyttää sitä lisäturvakeinona.&lt;/p&gt;&lt;p&gt;YubiKey vaatii yhden paikan asettamista &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Responseksi&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKeyta ei ole valittu, varmista että se on liitetty.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey ei ole kiinni laittessa.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Uudista laitetunnisteet</translation>
</message>
@@ -7130,5 +7856,21 @@ Esimerkiksi: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Laiteavaimen paikan valinta</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Laiteavaimia ei löytynyt!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Valittu laitepaikka ei tue haaste-vastausta!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Etsitään laiteavaimia...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Laiteavaimia ei havaittu</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_fr.ts b/share/translations/keepassx_fr.ts
index 89d148f0a..68b3a53ba 100644
--- a/share/translations/keepassx_fr.ts
+++ b/share/translations/keepassx_fr.ts
@@ -3,7 +3,7 @@
<name>AboutDialog</name>
<message>
<source>About KeePassXC</source>
- <translation>À propos de KeePassXC</translation>
+ <translation>À propos de KeePassXC</translation>
</message>
<message>
<source>About</source>
@@ -15,7 +15,7 @@
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC est distribué suivant les conditions de la licence publique générale GNU (GNU GPL) version 2 ou version 3 de la licence (facultativement).</translation>
+ <translation>KeePassXC est distribué suivant les conditions de la licence publique générale GNU (GNU GPL) version 2 ou version 3 de la licence (à votre gré).</translation>
</message>
<message>
<source>Contributors</source>
@@ -27,11 +27,11 @@
</message>
<message>
<source>Debug Info</source>
- <translation>Informations de débogage</translation>
+ <translation>Renseignements de débogage</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>Inclure les informations suivantes à chaque fois que vous signalez un bogue :</translation>
+ <translation>Incluez les renseignements suivants chaque fois que vous signalez un bogue :</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -39,7 +39,7 @@
</message>
<message>
<source>Project Maintainers:</source>
- <translation>Développeurs du projet :</translation>
+ <translation>Mainteneurs du projet :</translation>
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Activer l’agent SSH (redémarrage nécessaire)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Utiliser OpenSSH pour Windows au lieu de Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Activer l’intégration de l’agent SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Valeur de SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>remplacer SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(vide)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Aucun emplacement d’agent SSH n’est disponible. Assurez-vous que la variable d’environnement SSH_AUTH_SOCK existe ou définissez une valeur de remplacement.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>La connexion de l’agent SSH fonctionne.</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -73,23 +93,23 @@
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Erreur d’accès au fichier de configuration %1</translation>
+ <translation>Erreur d’accès pour le fichier de configuration %1</translation>
</message>
<message>
<source>Icon only</source>
- <translation>Icône uniquement</translation>
+ <translation>Icône seulement</translation>
</message>
<message>
<source>Text only</source>
- <translation>Texte uniquement</translation>
+ <translation>Texte seulement</translation>
</message>
<message>
<source>Text beside icon</source>
- <translation>Texte à côté de l&apos;icône</translation>
+ <translation>Texte à côté de l’icône</translation>
</message>
<message>
<source>Text under icon</source>
- <translation>Texte sous l&apos;icône</translation>
+ <translation>Texte sous l’icône</translation>
</message>
<message>
<source>Follow style</source>
@@ -97,11 +117,23 @@
</message>
<message>
<source>Reset Settings?</source>
- <translation>Réinitialiser les paramètres ?</translation>
+ <translation>Réinitialiser les paramètres ?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
- <translation>Voulez-vous réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut ?</translation>
+ <translation>Voulez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut ?</translation>
+ </message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochrome (clair)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochrome (sombre)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Multicolore</translation>
</message>
</context>
<context>
@@ -116,19 +148,15 @@
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>Exécuter une seule instance de KeePassXC</translation>
+ <translation>Ne démarrer qu’une seule instance de KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Minimiser la fenêtre lors du démarrage de l’application</translation>
+ <translation>Réduire la fenêtre lors du démarrage de l’application</translation>
</message>
<message>
<source>File Management</source>
- <translation>Gestion de fichiers</translation>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Enregistrer en toute sécurité les fichiers de base de données (peut être incompatible avec Dropbox, etc.)</translation>
+ <translation>Gestion des fichiers</translation>
</message>
<message>
<source>Backup database file before saving</source>
@@ -136,19 +164,15 @@
</message>
<message>
<source>Automatically save after every change</source>
- <translation>Enregistrer automatiquement après chaque modification</translation>
+ <translation>Enregistrer automatiquement après chaque changement</translation>
</message>
<message>
<source>Automatically save on exit</source>
- <translation>Enregistrer automatiquement en quittant</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Ne pas indiquer la base de données comme modifiée pour les changements hors-données (par exemple : groupes développés)</translation>
+ <translation>Enregistrer automatiquement en sortant</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
- <translation>Recharger automatiquement la base de données quand celle-ci est modifiée depuis l’extérieur</translation>
+ <translation>Recharger automatiquement la base de données quand elle est modifiée de l’extérieur</translation>
</message>
<message>
<source>Entry Management</source>
@@ -156,33 +180,17 @@
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>Utiliser l’icône de groupe à la création d’une entrée</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>Masquer le panneau de prévisualisation de l&apos;entrée</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Général</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Cacher la barre d&apos;outils (icônes)</translation>
+ <translation>Utiliser l’icône de groupe lors de la création d’une entrée</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
- <translation>Réduire au lieu de quitter l&apos;application</translation>
+ <translation>Réduire au lieu de quitter l’appli</translation>
</message>
<message>
<source>Show a system tray icon</source>
<translation>Afficher une icône dans la zone de notification</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Icône sombre dans la zone de notification</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Cacher la fenêtre dans la zone de notification une fois minimisée</translation>
</message>
@@ -200,52 +208,36 @@
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Toujours demander avant de procéder à une saisie automatique</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Raccourci de la saisie automatique</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Vitesse de remplissage de la saisie automatique</translation>
+ <translation>Toujours demander avant de saisir automatiquement</translation>
</message>
<message>
<source> ms</source>
<comment>Milliseconds</comment>
- <translation>ms</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation>Délai de démarrage de la saisie automatique</translation>
+ <translation> ms</translation>
</message>
<message>
<source>Movable toolbar</source>
- <translation>Barre d’outils déplaçable</translation>
+ <translation>Barre d’outils mobile</translation>
</message>
<message>
<source>Remember previously used databases</source>
- <translation>Mémoriser les bases de données précédentes utilisées</translation>
+ <translation>Mémoriser les bases de données utilisées précédemment</translation>
</message>
<message>
<source>Load previously open databases on startup</source>
- <translation>Charger les bases de données précédemment ouvertes au démarrage</translation>
+ <translation>Lors du démarrage, charger les bases de données ouvertes précédemment</translation>
</message>
<message>
<source>Remember database key files and security dongles</source>
- <translation>Mémoriser les fichiers-clé de base de données et les clés de sécurité</translation>
+ <translation>Mémoriser les fichiers clés de base de données et les clés électroniques de sécurité</translation>
</message>
<message>
<source>Check for updates at application startup once per week</source>
- <translation>Vérifier les mises à jour au démarrage de l&apos;application une fois par semaine</translation>
+ <translation>Vérifier une fois par semaine la présence de mises à jour au démarrage de l’application</translation>
</message>
<message>
<source>Include beta releases when checking for updates</source>
- <translation>Inclure les versions bêta lors de la vérification des mises à jour.</translation>
- </message>
- <message>
- <source>Button style:</source>
- <translation>Style de bouton :</translation>
+ <translation>Inclure les versions bêta lors de la vérification de la présence de mises à jour</translation>
</message>
<message>
<source>Language:</source>
@@ -261,11 +253,11 @@
</message>
<message>
<source>Minimize when opening a URL</source>
- <translation>Réduire lors de l&apos;ouverture d&apos;une URL</translation>
+ <translation>Réduire lors de l’ouverture d’une URL</translation>
</message>
<message>
<source>Hide window when copying to clipboard</source>
- <translation>Masquer la fenêtre après copie dans le presse-papiers</translation>
+ <translation>Cacher la fenêtre lors de la copie dans le presse-papiers</translation>
</message>
<message>
<source>Minimize</source>
@@ -273,15 +265,15 @@
</message>
<message>
<source>Drop to background</source>
- <translation>Mettre en arrière-plan</translation>
+ <translation>Passer en arrière-plan</translation>
</message>
<message>
<source>Favicon download timeout:</source>
- <translation>Temps imparti au chargement de la favicon :</translation>
+ <translation>Temps imparti au téléchargement de la favoricône :</translation>
</message>
<message>
<source>Website icon download timeout in seconds</source>
- <translation>Temps imparti au chargement de l&apos;icône du site Web en secondes</translation>
+ <translation>Temps imparti au chargement de l’icône du site Web en secondes</translation>
</message>
<message>
<source> sec</source>
@@ -290,38 +282,74 @@
</message>
<message>
<source>Toolbar button style</source>
- <translation>Style de bouton de barre d&apos;outils</translation>
- </message>
- <message>
- <source>Use monospaced font for Notes</source>
- <translation>Utiliser une police non proportionnelle pour les notes</translation>
+ <translation>Style de bouton de la barre d’outils</translation>
</message>
<message>
<source>Language selection</source>
<translation>Sélection de la langue</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Réinitialiser les paramètres à leur valeur par défaut</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
- <translation>Raccourci global de la saisie automatique</translation>
+ <translation>Raccourci global de saisie automatique</translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
- <translation>Vitesse de remplissage de la saisie automatique en millisecondes</translation>
+ <translation>Délai de frappe des caractères, en millisecondes, de la saisie automatique</translation>
</message>
<message>
<source>Auto-type start delay milliseconds</source>
- <translation>Délai de démarrage de la saisie automatique en millisecondes</translation>
+ <translation>Délai de démarrage, en millisecondes, de la saisie automatique</translation>
+ </message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Lance automatiquement KeepaxxXC au démarrage du système.</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Indiquer la base de données comme modifiée pour les changements hors-données (par exemple : groupes développés)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Enregistrer en toute sécurité les fichiers de base de données (désactiver en cas de problèmes avec Dropbox, etc.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Interface utilisateur</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Style des boutons de la barre d’outils :</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Utiliser une police à espacement constant pour les notes</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Type d’icône de la zone de notification :</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Réinitialiser les paramètres à leur valeur par défaut…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Vitesse de remplissage de la saisie automatique :</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Raccourci de la saisie automatique :</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Délai de démarrage de la saisie automatique :</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
<message>
<source>Timeouts</source>
- <translation>Temps impartis</translation>
+ <translation>Délais d’attente</translation>
</message>
<message>
<source>Clear clipboard after</source>
@@ -338,15 +366,15 @@
</message>
<message>
<source> min</source>
- <translation>min</translation>
+ <translation> min</translation>
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation>Oublier TouchID après inactivité</translation>
+ <translation>Oublier le TouchID après une inactivité de</translation>
</message>
<message>
<source>Convenience</source>
- <translation>Commodités</translation>
+ <translation>Commodité</translation>
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
@@ -354,35 +382,23 @@
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Oublier TouchID lorsque la session est verrouillée ou l&apos;écran rabattu</translation>
+ <translation>Oublier le TouchID quand la session est verrouillée ou le couvercle fermé</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>Verrouiller les bases de données lorsque la fenêtre est réduite</translation>
+ <translation>Verrouiller les bases de données après avoir réduit la fenêtre</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Verrouiller à nouveau la base de données précédemment verrouillée après avoir effectué la saisie automatique</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Ne pas demander de confirmer le mot de passe lorsque celui-ci est visible</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Ne pas cacher les mots de passe pendant leur modification</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Ne pas utiliser d’élément de substitution pour des champs de mot de passe vides&lt;br&gt;&lt;br&gt;</translation>
+ <translation>Après avoir effectué la saisie automatique, reverrouiller la base de données qui était verrouillée précédemment</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Masquer les mots de passe dans le panneau de prévisualisation</translation>
+ <translation>Cacher les mots de passe dans le panneau de prévisualisation des entrées</translation>
</message>
<message>
<source>Hide entry notes by default</source>
- <translation>Masquer les notes des entrées par défaut</translation>
+ <translation>Par défaut, cacher les notes des entrées </translation>
</message>
<message>
<source>Privacy</source>
@@ -390,7 +406,7 @@
</message>
<message>
<source>Use DuckDuckGo service to download website icons</source>
- <translation>Utiliser le service DuckDuckGo pour télécharger les icônes des sites Web</translation>
+ <translation>Utiliser le service DuckDuckGo pour télécharger les icônes de sites Web</translation>
</message>
<message>
<source>Clipboard clear seconds</source>
@@ -398,21 +414,33 @@
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation>Réinitialiser TouchID après inactivité</translation>
+ <translation>Réinitialisation de TouchID après inactivité</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
- <translation>Temps imparti au verrouillage de la base de données en secondes</translation>
+ <translation>Délai, en secondes, avant verrouillage de la base de données</translation>
</message>
<message>
<source> min</source>
<comment>Minutes</comment>
- <translation>min</translation>
+ <translation> min</translation>
</message>
<message>
<source>Clear search query after</source>
<translation>Effacer la requête de recherche après</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Demander de confirmer le mot de passe lorsque celui-ci est visible</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Cacher les mots de passe pendant leur modification</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Utiliser un espace réservé pour les champs de mots de passe vides</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -430,27 +458,27 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>La syntaxe de votre instruction de saisie automatique est incorrecte !</translation>
+ <translation>La syntaxe de votre instruction de saisie automatique est incorrecte.</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>Cette commande de saisie automatique contient un délai très long. Voulez-vous vraiment continuer  ?</translation>
+ <translation>Cette commande de saisie automatique contient un délai très long. Voulez-vous vraiment continuer ?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Cette commande de saisie automatique contient une séquence de touches très lentes. Voulez-vous vraiment continuer ?</translation>
+ <translation>Cette commande de saisie automatique contient des touches très lentes. Voulez-vous vraiment continuer ?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Cette commande de saisie automatique contient des arguments répétés très souvent. Voulez-vous vraiment continuer ?</translation>
+ <translation>Cette commande de saisie automatique contient des arguments répétés très souvent. Voulez-vous vraiment continuer ?</translation>
</message>
<message>
<source>Permission Required</source>
- <translation>Autorisation nécessaire</translation>
+ <translation>Une autorisation est requise</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC nécessite la permission Accessiblité afin de pouvoir effectuer la saisie automatique sur les entrées. SI vous avez déjà donné l&apos;autorisation, vous devriez relancer KeePassXC.</translation>
+ <translation>KeePassXC exige la permission Accessibilité pour la saisie automatique des entrées. SI vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC.</translation>
</message>
</context>
<context>
@@ -491,7 +519,7 @@
<name>AutoTypeMatchView</name>
<message>
<source>Copy &amp;username</source>
- <translation>Copier le nom d’utilisateur</translation>
+ <translation>Copier le nom d’&amp;utilisateur</translation>
</message>
<message>
<source>Copy &amp;password</source>
@@ -502,11 +530,11 @@
<name>AutoTypePlatformMac</name>
<message>
<source>Permission Required</source>
- <translation>Autorisation nécessaire</translation>
+ <translation>Une autorisation est requise</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC nécessite l&apos;autorisation d&apos;accès Accessibilité et Enregistrement d&apos;écran afin de pouvoir exécuter la saisie automatique globale. L&apos;enregistrement d&apos;écran est requis pour utiliser le titre de fenêtre lors de la recherche des entrées. Si vous avez déjà accordé cette autorisation, vous devriez relancer KeePassXC.</translation>
+ <translation>KeePassXC exige la permission Accessibilité et Enregistreur d’écran pour la saisie automatique globale. L’enregistrement de l’écran est nécessaire afin d’utiliser le titre des fenêtres pour trouver des entrées. SI vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC.</translation>
</message>
</context>
<context>
@@ -527,45 +555,47 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Confirmer l’accès à KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>Requiert l’accès à KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 demande l’accès aux entrées suivantes :</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Mémoriser ce choix</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Mémoriser l’accès aux entrées sélectionnées</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Autoriser</translation>
+ <source>Remember</source>
+ <translation>Mémoriser</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Refuser</translation>
+ <source>Allow access to entries</source>
+ <translation>Autoriser l’accès aux entrées</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 a demandé l’accès aux mots de passe pour les éléments suivants.
-Veuillez sélectionner ceux auxquels vous souhaitez autoriser l’accès.</translation>
+ <source>Allow Selected</source>
+ <translation>Autoriser les sélections</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Autoriser l&apos;accès</translation>
+ <source>Deny All</source>
+ <translation>Tout interdire</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Refuser l&apos;accès</translation>
+ <source>Disable for this site</source>
+ <translation>Désactiver pour ce site</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>Enregistrer l&apos;entrée avec KeePassXC-Browser</translation>
+ <translation>KeePassXC-Browser Enregistrer l’entrée</translation>
</message>
<message>
<source>Ok</source>
- <translation>Ok</translation>
+ <translation>Valider</translation>
</message>
<message>
<source>Cancel</source>
@@ -575,312 +605,350 @@ Veuillez sélectionner ceux auxquels vous souhaitez autoriser l’accès.</trans
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
<translation>Plusieurs bases de données sont ouvertes.
-Veuillez sélectionner la base de donnée souhaitée pour enregistrer les identifiants.</translation>
+Veuillez sélectionner la base de données souhaitée pour enregistrer les identifiants.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialogue</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC : Nouvelle demande d’association de clé</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Ceci est obligatoire pour accéder à vos bases de données à partir de KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Enregistrer et autoriser l’accès</translation>
</message>
<message>
- <source>General</source>
- <translation>Général</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC : Remplacer la clé existante ?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Activer l’intégration pour ces navigateurs :</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Une clé de chiffrement partagée nommée « %1 » existe déjà.
+Voulez-vous la remplacer ?</translation>
+ </message>
+ <message>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC : Mettre l’entrée à jour</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Voulez-vous mettre à jour les renseignements dans %1 - %2 ?</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Abort</source>
+ <translation>Abandonner</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Conversion des attributs en données personnalisées…</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC : Attributs KeePassHTTP convertis</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Afficher une &amp;notification quand les identifiants sont demandés</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Les attributs de %1 entrée(s) ont été convertis avec succès.
+%2 clés ont été déplacées vers les données personnalisées.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n clé a été déplacée avec succès vers les données personnalisées.</numerusform><numerusform>%n clés ont été déplacées avec succès vers les données personnalisées.</numerusform></translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Demander de déverrouiller la base de données lorsque celle-ci est verrouillée</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC : Aucune entrée avec des attributs KeePassHTTP n’a été trouvée !</translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Seules les entrées répondant au même format (http://, https://…) sont retournées.</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>La base de données active ne contient aucune entrée avec des attributs KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>A&amp;dapter au format d’URL (ex. : https://…)</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC : Des paramètres d’intégration au navigateur hérités ont été détectés</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Ne renvoie que les meilleures correspondances pour une URL précise au lieu de toutes les entrées du domaine.</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC : Créer un nouveau groupe</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Ne &amp;retourner que les meilleures correspondances d’identifiants</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Une demande de création d’un nouveau groupe « %1 » a été reçue.
+Voulez-vous créer ce groupe ?
+</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Trier par &amp;titre les identifiants correspondants</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Vos paramètres KeePassXC-Browser doivent être intégrés aux paramètres de la base de données.
+Cela est nécessaire pour conserver les connexions actuelles de votre navigateur.
+Souhaitez-vous migrer vos paramètres maintenant ?</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Trier par nom d’&amp;utilisateur les identifiants correspondants</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Ne plus afficher cet avertissement</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avancé</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Vous avez reçu une demande d’association pour la base de données suivante :
+%1
+
+Attribuez à cette connexion un nom ou un ID unique, par exemple :
+chrome-laptop</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ne jamais demander avant d’a&amp;ccéder aux identifiants</translation>
+ <source>Dialog</source>
+ <translation>Boîte de dialogue</translation>
</message>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ne jamais demander avant de &amp;mettre à jour les identifiants</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Requis pour accéder à vos bases de données avec KeePassXC-Browser</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Chercher les identifiants correspondants dans toutes les bases de données ouvertes</translation>
+ <source>Enable browser integration</source>
+ <translation>Activer l’intégration aux navigateurs</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>La création ou la mise a jour automatique ne sont pas pris en charge pour les champs de chaînes de caractères !</translation>
+ <source>General</source>
+ <translation>Général</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Retourner les champs avancés de chaîne qui commencent par « KPH: »</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Les navigateurs installés en tant que snap ne sont pas pris en charge actuellement.</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Met automatiquement à jour le chemin des exécutables KeePassXC ou keepassxc-proxy vers les scripts de messagerie native lors du démarrage.</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Activer l’intégration pour ces navigateurs :</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Mettre à jour les fichiers de manifeste de la &amp;messagerie native lors du démarrage</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Prend en charge une application proxy entre KeePassXC et l’extension pour navigateur web</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Utiliser une &amp;application proxy entre KeePassXC et l’extension pour navigateur web</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Utiliser un proxy personnalisé si vous avez installé un proxy manuellement.</translation>
+ <source>Tor Browser</source>
+ <translation>Navigateur Tor</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Utiliser un proxy &amp;personnalisé</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Parcourir…</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Avertissement :&lt;/b&gt; Les options suivantes peuvent être dangereuses !</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Sélectionner un proxy personnalisé</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Afficher une notification quand les identifiants sont demandés</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Navigateur Tor</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Demander de &amp;déverrouiller la base de données si elle est verrouillée</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Fichiers exécutables</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Seules les entrées de même format (http://, https://,…) sont retournées.</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Tous les fichiers</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Adapter au format de l’URL (p. ex. : https://….) </translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Ne pas demander d&apos;autorisation pour l&apos;authentification HTTP &amp;Basic</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Ne renvoie que les meilleures correspondances pour une URL précise au lieu de toutes les entrées du domaine entier.</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>À cause du mécanisme de sandboxing Snap, vous devez lancer un script pour activer l&apos;intégration du navigateur.&lt;br /&gt;Vous pouvez obtenir ce script depuis %1</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Retourner seulement les identifiants les plus appropriés</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Veuillez regarder les instructions spéciales pour l&apos;extension pour navigateur web utilisé ci-dessous</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Retourne les identifiants expirés. La chaîne [expiré] est ajoutée au titre.</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser est nécessaire pour que l&apos;intégration au navigateur fonctionne. &lt;br /&gt;Téléchargez-le pour %1 et%2. %3</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Autoriser à retourner les identifiants expirés</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Toutes les bases de données connectées à l’extension retourneront les identifiants correspondants.</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Retourne les identifiants expirés. La chaîne [expiré] est ajoutée au titre.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Rechercher les identifiants correspondants dans toutes les bases de données ouvertes</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Autoriser l&apos;envoi des identifiants expirés.</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Trier les identifiants correspondants par titre</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Activer l&apos;intégration au navigateur</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Trier les identifiants correspondants par nom d&apos;utilisateur</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Les navigateurs installés par snap ne sont pas pris en charge actuellement.</translation>
+ <source>Advanced</source>
+ <translation>Avancé</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Toutes les bases de données connectées à l’extension retourneront les identifiants trouvés.</translation>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ne jamais demander avant d&apos;accéder aux identifiants</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ne jamais demander avant de mettre à jour les identifiants</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Ne jamais demander l&apos;autorisation pour l&apos;authentification HTTP Basic</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Ni la création ni la mise à jour automatique des champs de chaîne ne sont prises en charge.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Retourner les champs de chaînes de caractères commençant par « KPH: »</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
- <translation>Ne pas afficher la fenêtre de suggestion de migration des anciens paramètres de KeePassHTTP.</translation>
+ <translation>Ne pas afficher la fenêtre de suggestion de migration des paramètres de KeePassHTTP hérités.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Ne pas confirmer la migration des paramètres KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Ne pas confirmer la migration des paramètres de KeePassHTTP</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Met automatiquement à jour le chemin des exécutables KeePassXC ou keepassxc-proxy vers les scripts de messagerie native lors du démarrage.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Mettre à jour les fichiers manifest de la messagerie native au lancement</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Utiliser un emplacement de mandataire personnalisé si vous avez installé un mandataire manuellement.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Utiliser un emplacement de proxy personnalisé :</translation>
</message>
<message>
<source>Custom proxy location field</source>
- <translation>Champ d&apos;adresse de proxy personnalisé</translation>
+ <translation>Champ d’emplacement de mandataire personnalisé</translation>
</message>
<message>
<source>Browser for custom proxy file</source>
- <translation>Sélectionner un fichier de proxy personnalisé</translation>
+ <translation>Sélectionner un fichier de mandataire personnalisé</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Attention&lt;/b&gt;, l&apos;application keepassxc-proxy n&apos;a pas été trouvée !&lt;br /&gt;Veuillez vérifier le répertoire d&apos;installation de KeePassXC ou validez le chemin personnalisé dans les options avancées.&lt;br /&gt;L&apos;intégration au navigateur NE FONCTIONNERA PAS sans l&apos;application du proxy.&lt;br /&gt;Chemin requis : %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Parcourir…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC : nouvelle demande d’association de touche</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Utiliser un emplacement de navigateur personnalisé :</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Enregistrer et autoriser l’accès</translation>
+ <source>Browser type:</source>
+ <translation>Type de navigateur :</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC : remplacer la clé existante ?</translation>
+ <source>Toolbar button style</source>
+ <translation>Style des boutons de la barre d’outils</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Une clé de chiffrement partagée portant le nom « %1 » existe déjà.
-Voulez-vous la remplacer ?</translation>
+ <source>Config Location:</source>
+ <translation>Emplacement de configuration :</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC : Mettre l’entrée à jour</translation>
+ <source>Custom browser location field</source>
+ <translation>Champ d&apos;emplacement personnalisé du navigateur</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Voulez-vous mettre à jour l’information dans %1 - %2 ?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abandonner</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Définir le chemin personnalisé du navigateur</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Conversion des attributs en données personnalisées…</translation>
+ <source>Custom extension ID:</source>
+ <translation>ID d&apos;extension personnalisé :</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC : attributs KeePassHTTP convertis</translation>
+ <source>Custom extension ID</source>
+ <translation>ID d&apos;extension personnalisé</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Les attributs de %1 entrées ont été converties avec succès.
-%2 clés ont été déplacées vers les données personnalisées.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Déplacement de %n clés en données personnalisées réussi.</numerusform><numerusform>Déplacement de %n clés en données personnalisées réussi.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>En raison du bac à sable de Snap, vous devez exécuter un script afin d’activer l’intégration aux navigateurs.&lt;br /&gt;Vous pouvez obtenir ce script sur %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC : aucune entrée contenant des attributs KeePassHTTP n&apos;a été trouvée !</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser nécessite une intégration au navigateur pour fonctionner. &lt;br /&gt;Téléchargez-le pour %1, %2 et %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>La base de données active ne contient pas d&apos;entrée avec des attributs KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Veuillez consulter ci-dessous les instructions propres à l’extension pour navigateurs</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC : ancienne intégration au navigateur détectée</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Erreur :&lt;/b&gt; L&apos;emplacement de proxy personnalisé est introuvable !&lt;br/&gt;L&apos;intégration au navigateur NE FONCTIONNERA PAS sans l&apos;application proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC : créer un nouveau groupe</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Avertissement :&lt;/b&gt; Les options suivantes peuvent être dangereuses !</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Une demande de création pour un nouveau groupe « %1 » a été reçue.
-Voulez-vous créer ce groupe ?
-</translation>
+ <source>Executable Files</source>
+ <translation>Fichiers exécutables</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Vos paramètres pour KeePassXC-Browser doivent être déplacés dans ceux de la base de données. Ceci est nécessaire pour conserver l&apos;intégration avec votre navigateur. Voulez-vous effectuer la migration de vos paramètres maintenant ?</translation>
+ <source>All Files</source>
+ <translation>Tous les fichiers</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Ne plus afficher cet avertissement</translation>
+ <source>Select custom proxy location</source>
+ <translation>Sélectionner un emplacement de mandataire personnalisé</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Vous avez reçu une demande d&apos;association pour la base de données suivante :
-%1
-
-Attribuez à cette connexion un nom unique ou un identifiant, par exemple :
-chrome-laptop</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Sélectionner l&apos;emplacement du dossier de l&apos;hôte de messagerie native</translation>
</message>
</context>
<context>
@@ -891,7 +959,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Ajouter « - Clone » au titre</translation>
+ <translation>Ajouter ’ – Clone’ au titre</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -899,14 +967,14 @@ chrome-laptop</translation>
</message>
<message>
<source>Copy history</source>
- <translation>Copie de l’historique</translation>
+ <translation>Copier l’historique</translation>
</message>
</context>
<context>
<name>CsvImportWidget</name>
<message>
<source>Import CSV fields</source>
- <translation>Importer les champs du CSV</translation>
+ <translation>Importer les champs CSV</translation>
</message>
<message>
<source>filename</source>
@@ -926,7 +994,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>Le texte est encadré par</translation>
+ <translation>Le texte est qualifié par</translation>
</message>
<message>
<source>Fields are separated by</source>
@@ -937,28 +1005,16 @@ chrome-laptop</translation>
<translation>Les commentaires commencent par</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Le premier enregistrement contient les noms de champs</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>Utiliser « \ » comme caractère d’échappement</translation>
+ <translation>Considérer « \ » en tant que caractère d’échappement</translation>
</message>
<message>
<source>Preview</source>
<translation>Aperçu</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Disposition des colonnes</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Non présent dans le fichier CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
- <translation>Importé depuis un fichier CSV</translation>
+ <translation>Importé d’un fichier CSV</translation>
</message>
<message>
<source>Original data: </source>
@@ -969,34 +1025,26 @@ chrome-laptop</translation>
<translation>Erreur</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nom de champ %1 vide</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>colonne %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
- <translation>Des erreurs ont été détectées dans le fichier CSV  !</translation>
+ <translation>Des erreurs ont été détectées dans le fichier CSV !</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n autre message ignoré]</numerusform><numerusform>[%n autres messages ignorés]</numerusform></translation>
+ <translation><numerusform>[%n message supplémentaire a été ignoré]</numerusform><numerusform>[%n messages supplémentaires ont été ignorés]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>Importation CSV : l&apos;analyseur a rencontré des erreurs :
+ <translation>Importation CSV : le scripteur comporte des erreurs :
%1</translation>
</message>
<message>
<source>Text qualification</source>
- <translation>Délimitation du texte</translation>
+ <translation>Qualification du texte</translation>
</message>
<message>
<source>Field separation</source>
- <translation>Séparateur de champ</translation>
+ <translation>Séparation des champs</translation>
</message>
<message>
<source>Number of header lines to discard</source>
@@ -1004,7 +1052,59 @@ chrome-laptop</translation>
</message>
<message>
<source>CSV import preview</source>
- <translation>Aperçu de l&apos;importation CSV</translation>
+ <translation>Aperçu de l’importation d’un fichier CSV</translation>
+ </message>
+ <message>
+ <source>Column Association</source>
+ <translation>Associations de colonnes</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Dernière modification</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Mot de passe</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Créée</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notes</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titre</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Groupe</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nom d’utilisateur</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Les lignes d’en-tête ont été ignorées</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>La première ligne comporte des noms de champs</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Les données ne s’y trouvent pas</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Colonne %1</translation>
</message>
</context>
<context>
@@ -1030,65 +1130,73 @@ chrome-laptop</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Racine</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
- <translation>Le fichier %1 n&apos;existe pas.</translation>
+ <translation>Le fichier %1 n’existe pas.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
- <translation>Impossible d&apos;ouvrir le fichier %1.</translation>
+ <translation>Impossible d’ouvrir le fichier %1.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>Erreur lors de la lecture de la base de données : %1</translation>
+ <translation>Erreur de lecture de la base de données : %1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>Le fichier ne peut pas être enregistré car il est ouvert en lecture seule.</translation>
+ <translation>Impossible d’écrire dans le fichier, car il est ouvert en lecture seulement.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>La clé n&apos;a pas été transformée. Ceci est un bogue, veuillez le signaler aux développeurs !</translation>
+ <translation>La clé n’a pas été transformée, ce qui est un bogue. Veuillez le signaler aux développeurs.</translation>
</message>
<message>
<source>%1
Backup database located at %2</source>
<translation>%1
-Copie de sécurité de la base de données située sur %2</translation>
+La base de données de sauvegarde est située sur %2</translation>
</message>
<message>
<source>Could not save, database does not point to a valid file.</source>
- <translation>Impossible d&apos;enregistrer car la base de données ne pointe pas vers un fichier valide.</translation>
+ <translation>Impossible d’enregistrer, car la base de données n’est pas dirigée vers un fichier valide.</translation>
</message>
<message>
<source>Could not save, database file is read-only.</source>
- <translation>Impossible d&apos;enregistrer car la base de données pointe vers un fichier en lecture-seule.</translation>
+ <translation>Impossible d’enregistrer, car le fichier de la base de données est en lecture seule.</translation>
</message>
<message>
<source>Database file has unmerged changes.</source>
- <translation>Le fichier de la base de données contient des modifications non fusionnées.</translation>
+ <translation>Le fichier de la base de données comporte des changements non fusionnés.</translation>
</message>
<message>
<source>Recycle Bin</source>
<translation>Corbeille</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Mots de passe</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Une sauvegarde de la base de données est déjà en cours.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Sauvegarde impossible, la base de données n&apos;a pas été initialisée !</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Déverrouiller la base de données - KeePassXC</translation>
+ <translation>Déverrouiller la base de données – KeePassXC</translation>
</message>
</context>
<context>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>Fichier-clé :</translation>
+ <translation>Fichier clé :</translation>
</message>
<message>
<source>Refresh</source>
@@ -1096,16 +1204,16 @@ Copie de sécurité de la base de données située sur %2</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Ancien format de fichier-clé</translation>
+ <translation>Format de fichier clé hérité</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Vous utilisez un ancien format de fichier-clé qui pourrait ne plus être pris en charge à l’avenir.
+ <translation>Vous utilisez un format de fichier clé hérité qui pourrait ne plus être pris en charge à l’avenir.
-Veuillez envisager de générer un nouveau fichier-clé.</translation>
+Veuillez envisager de générer un nouveau fichier clé.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1117,47 +1225,35 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
</message>
<message>
<source>Key files</source>
- <translation>Fichiers-clé</translation>
+ <translation>Fichiers clés</translation>
</message>
<message>
<source>Select key file</source>
- <translation>Sélectionner un fichier-clé</translation>
+ <translation>Sélectionner un fichier clé</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
- <translation>Impossible d&apos;ouvrir de fichier-clé : %1</translation>
- </message>
- <message>
- <source>Select slot...</source>
- <translation>Sélectionner l&apos;emplacement...</translation>
+ <translation>Échec d’ouverture du fichier clé : %1</translation>
</message>
<message>
<source>Unlock KeePassXC Database</source>
- <translation>Déverrouiller la base de données KeePassXC</translation>
+ <translation>Déverrouiller la base de données KeePassXC</translation>
</message>
<message>
<source>Enter Password:</source>
- <translation>Saisir un mot de passe :</translation>
+ <translation>Saisissez le mot de passe :</translation>
</message>
<message>
<source>Password field</source>
<translation>Champ de mot de passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Basculer l&apos;affichage du mot de passe</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Sélection du fichier-clé</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
- <translation>Sélection de l&apos;emplacement de la clé matérielle</translation>
+ <translation>Sélection de l’emplacement de la clé matérielle</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation>Rechercher un fichier-clé</translation>
+ <translation>Chercher un fichier clé</translation>
</message>
<message>
<source>Browse...</source>
@@ -1165,11 +1261,11 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
- <translation>Actualiser les marqueurs matérielles</translation>
+ <translation>Actualiser les jetons matériels</translation>
</message>
<message>
<source>Hardware Key:</source>
- <translation>Clés matérielles :</translation>
+ <translation>Clé matérielle :</translation>
</message>
<message>
<source>Hardware key help</source>
@@ -1177,7 +1273,7 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
</message>
<message>
<source>TouchID for Quick Unlock</source>
- <translation>TouchID pour déverrouillage rapide</translation>
+ <translation>TouchID pour un déverrouillage rapide</translation>
</message>
<message>
<source>Clear</source>
@@ -1185,61 +1281,77 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
</message>
<message>
<source>Clear Key File</source>
- <translation>Effacer le fichier-clé</translation>
+ <translation>Effacer le fichier clé</translation>
</message>
<message>
<source>Unlock failed and no password given</source>
- <translation>Échec du déverrouillage et aucun mot de passe introduit</translation>
+ <translation>Échec de déverrouillage et aucun mot de passe n’a été saisi</translation>
</message>
<message>
<source>Unlocking the database failed and you did not enter a password.
Do you want to retry with an &quot;empty&quot; password instead?
To prevent this error from appearing, you must go to &quot;Database Settings / Security&quot; and reset your password.</source>
- <translation>Le déverrouillage de la base de données a échoué et vous n&apos;avez pas saisi de mot de passe.
-Voulez-vous essayer sans mot de passe ?
+ <translation>Le déverrouillage de la base de données a échoué et vous n’avez pas saisi de mot de passe.
+Voulez-vous plutôt ressayer sans mot de passe ?
-Afin d&apos;éviter cette erreur, vous devez réinitialiser votre mot de passe dans les « Paramètres de base de données / Sécurité ».</translation>
+Afin d’empêcher que cette erreur survienne, vous devez accéder à « Paramètres de la base de données » et réinitialiser votre mot de passe.</translation>
</message>
<message>
<source>Retry with empty password</source>
- <translation>Essayer à nouveau sans mot de passe</translation>
+ <translation>Ressayer sans mot de passe</translation>
</message>
<message>
<source>Enter Additional Credentials (if any):</source>
- <translation>Saisir d&apos;autres identifiants (si définis) :</translation>
+ <translation>Saisissez des identifiants supplémentaires (si définis) :</translation>
</message>
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Vous pouvez utiliser une clé de sécurité matérielle comme &lt;strong&gt;YubiKey&lt;/strong&gt; ou &lt;strong&gt;OnlyKey&lt;/strong&gt; avec des emplacements pour HMAC-SHA1.&lt;/p&gt;
-&lt;p&gt;Cliquez pour plus d&apos;information...&lt;/p&gt;</translation>
- </message>
- <message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;En plus du mot de passe maître, vous pouvez utiliser un fichier secret pour améliorer la sécurité de votre base de données. Un tel fichier peut être généré depuis les paramètres de sécurité de votre base de données.&lt;/p&gt;&lt;p&gt;Il ne s&apos;agit &lt;strong&gt;pas&lt;/strong&gt; de votre fichier de base de données *.kdbx !&lt;br&gt;Si vous n&apos;avez pas de fichier-clé, laissez le champ vide.&lt;/p&gt;&lt;p&gt;Cliquez ici pour plus d&apos;informations...&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Vous pouvez utiliser une clé de sécurité matérielle telle qu’une &lt;strong&gt;YubiKey&lt;/strong&gt; ou une &lt;strong&gt;OnlyKey&lt;/strong&gt; avec des emplacements configurés pour HMAC-SHA1.&lt;/p&gt;
+&lt;p&gt;Cliquez pour plus de précisions…&lt;/p&gt;</translation>
</message>
<message>
<source>Key file help</source>
- <translation>Aide fichier-clé</translation>
+ <translation>Aide sur les fichiers clé</translation>
</message>
<message>
<source>?</source>
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Sélectionner le fichier-clé...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
- <translation>Impossible d&apos;utiliser une base de données comme fichier-clé</translation>
+ <translation>Impossible d’utiliser un fichier de base de données en tant que fichier clé</translation>
</message>
<message>
<source>You cannot use your database file as a key file.
If you do not have a key file, please leave the field empty.</source>
- <translation>Vous ne pouvez pas utiliser la base de données actuelle comme fichier-clé.
-Si vous n&apos;avez pas de fichier-clé, laissez le champ vide.</translation>
+ <translation>Vous ne pouvez pas utiliser votre fichier de base de données en tant que fichier clé.
+Si vous n’avez pas de fichier clé, veuillez laisser le champ vide.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;En plus d’un mot de passe, vous pouvez utiliser un fichier secret pour améliorer la sécurité de votre base de données. Ce fichier peut être généré dans les paramètres de sécurité de votre base de données.&lt;/p&gt;&lt;p&gt;Il ne s’agit &lt;strong&gt;pas&lt;/strong&gt; de votre fichier de base de données *.kdbx.&lt;br&gt;Si vous n’avez pas de fichier clé, laissez ce champ vide.&lt;/p&gt;&lt;p&gt;Cliquez pour plus de précisions…&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Fichier clé pour déverrouiller la base de données</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Veuillez appuyez sur le bouton de votre YubiKey</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Détection des clés matérielles...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Aucune clé matérielle détectée</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Sélectionner une clé matérielle...</translation>
</message>
</context>
<context>
@@ -1264,10 +1376,6 @@ Si vous n&apos;avez pas de fichier-clé, laissez le champ vide.</translation>
<translation>Sécurité</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Clé maître</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Paramètres de chiffrement</translation>
</message>
@@ -1275,28 +1383,20 @@ Si vous n&apos;avez pas de fichier-clé, laissez le champ vide.</translation>
<source>Browser Integration</source>
<translation>Intégration aux navigateurs</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Identifiants de la base de données</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
<message>
<source>KeePassXC-Browser settings</source>
- <translation>Paramètres KeePassXC-Browser</translation>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Déconnecter tous les navigateurs</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Oubli&amp;er tous les paramètres d&apos;entrée spécifiques aux sites</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Dépla&amp;cer les attributs KeePassHTTP vers les données personnalisées KeePassXC-Browser</translation>
+ <translation>Paramètres de KeePassXC-Browser</translation>
</message>
<message>
<source>Stored keys</source>
- <translation>Clés stockées</translation>
+ <translation>Clés enregistrées</translation>
</message>
<message>
<source>Remove</source>
@@ -1304,13 +1404,13 @@ Si vous n&apos;avez pas de fichier-clé, laissez le champ vide.</translation>
</message>
<message>
<source>Delete the selected key?</source>
- <translation>Supprimer la clé sélectionnée ?</translation>
+ <translation>Supprimer la clé sélectionnée ?</translation>
</message>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>Voulez-vous vraiment supprimer la clé sélectionnée ?
-Cela peut empêcher la connexion avec l&apos;extension de navigateur.</translation>
+ <translation>Voulez-vous vraiment supprimer la clé sélectionnée ?
+Cela pourrait empêcher la connexion l’extension pour navigateurs.</translation>
</message>
<message>
<source>Key</source>
@@ -1322,46 +1422,46 @@ Cela peut empêcher la connexion avec l&apos;extension de navigateur.</translati
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>Activez l&apos;intégration avec le navigateur pour accéder à ces paramètres.</translation>
+ <translation>Activez l’intégration aux navigateurs pour accéder à ces paramètres.</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>Déconnecter tous les navigateurs web</translation>
+ <translation>Déconnecter tous les navigateurs</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>Voulez-vous vraiment déconnecter tous les navigateurs ?
-Cela peut empêcher la connexion avec l&apos;extension de navigateur.</translation>
+ <translation>Voulez-vous vraiment déconnecter tous les navigateurs ?
+Cela pourrait empêcher la connexion avec l’extension pour navigateurs.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
- <translation>KeePassXC : aucune clé n’a été trouvée</translation>
+ <translation>KeePassXC : Aucune clé n’a été trouvée</translation>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>Aucune clé de chiffrement trouvée dans les paramètres de KeePassXC.</translation>
+ <translation>Aucune clé de chiffrement partagée n’a été trouvée dans les paramètres de KeePassXC.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC : les clés ont été supprimées de la base de données</translation>
+ <translation>KeePassXC : Les clés ont été supprimées de la base de données</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>%n clé de cryptage a bien été supprimée des paramètres de KeePassXC.</numerusform><numerusform>%n clés de cryptage ont bien été supprimées des paramètres de KeePassXC.</numerusform></translation>
+ <translation><numerusform>%n clé de chiffrement a été supprimée avec succès des paramètres de KeePassXC.</numerusform><numerusform>%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>Oublier tous les paramètres d&apos;entrée spécifiques aux sites</translation>
+ <translation>Oublier tous les paramètres d’entrée propres aux sites</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>Êtes-vous sûr de vouloir effacer les préférences de site pour toutes les entrées ? Les permissions d&apos;accès aux entrées seront révoquées.</translation>
+ <translation>Voulez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>Suppression des autorisations enregistrées…</translation>
+ <translation>Retrait des autorisations enregistrées…</translation>
</message>
<message>
<source>Abort</source>
@@ -1369,15 +1469,15 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC : les autorisations ont été supprimées</translation>
+ <translation>KeePassXC : Les autorisations ont été retirées</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>%n permission a bien été supprimée.</numerusform><numerusform>%n permissions ont bien été supprimées.</numerusform></translation>
+ <translation><numerusform>Les autorisations d’%n entrée ont été supprimées avec succès.</numerusform><numerusform>Les autorisations de %n entrées ont été supprimées avec succès.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC : aucune entrée avec autorisation n’a été trouvée !</translation>
+ <translation>KeePassXC : Aucune entrée avec autorisation n’a été trouvée !</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
@@ -1390,8 +1490,8 @@ Permissions to access entries will be revoked.</source>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>Voulez-vous convertir toutes les anciennes données d&apos;intégration au navigateur en version plus récente ?
-Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</translation>
+ <translation>Voulez-vous vraiment convertir toutes les données d’intégration au navigateur héritées à la norme la plus récente ?
+Cela est nécessaire pour assurer la compatibilité avec l’extension pour navigateurs.</translation>
</message>
<message>
<source>Stored browser keys</source>
@@ -1401,6 +1501,67 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
<source>Remove selected key</source>
<translation>Supprimer la clé sélectionnée</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Déplacer les attributs de KeePassHTTP vers les données personnalisées de KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Actualiser l&apos;ID du groupe racine de la base de données</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Créée</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Actualiser l&apos;ID de la base de données</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Voulez-vous vraiment actualiser l&apos;ID de la base de données ?
+Ceci est seulement nécessaire si votre base de données est une copie d&apos;une autre et que l&apos;extension du navigateur ne peut se connecter.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Ajouter une protection supplémentaire…</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Aucun mot de passe n’a été défini</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>AVERTISSEMENT : Vous n’avez pas défini de mot de passe. Il est fortement découragé d’utiliser une base de données sans mot de passe.
+
+Voulez-vous vraiment poursuivre sans mot de passe ?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Poursuivre sans mot de passe</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Aucune clé de chiffrement n’a été ajoutée</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Vous devez ajouter au moins une clé de chiffrement afin de sécuriser votre base de données.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erreur inconnue</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Échec de changement des identifiants de la base de données</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1410,11 +1571,11 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES : 256 bits (par défaut)</translation>
+ <translation>AES : 256 bits (par défaut)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
- <translation>Twofish : 256 bits</translation>
+ <translation>Twofish : 256 bits</translation>
</message>
<message>
<source>Key Derivation Function:</source>
@@ -1425,10 +1586,6 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
<translation>Cycles de transformation :</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Mesurer pour un délai d’une seconde</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Utilisation de la mémoire :</translation>
</message>
@@ -1446,19 +1603,11 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
</message>
<message>
<source>Change</source>
- <translation>Modifier</translation>
- </message>
- <message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
+ <translation>Changer</translation>
</message>
<message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation>Une valeur plus élevée offre plus de sécurité mais l&apos;ouverture de la base de données prendra plus de temps.</translation>
+ <translation>Les valeurs plus élevées offrent plus de protection, mais l’ouverture de la base de données prendra plus de temps.</translation>
</message>
<message>
<source>Database format:</source>
@@ -1466,11 +1615,11 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
</message>
<message>
<source>This is only important if you need to use your database with other programs.</source>
- <translation>Ce n&apos;est important que si vous utilisez la base de données avec d&apos;autres programmes.</translation>
+ <translation>Ce paramètre n’est important que si vous devez utiliser votre base de données avec d’autres programmes.</translation>
</message>
<message>
<source>KDBX 4.0 (recommended)</source>
- <translation>KDBX 4.0 (recommandé)</translation>
+ <translation>KDBX 4.0 (recommandée)</translation>
</message>
<message>
<source>KDBX 3.1</source>
@@ -1484,7 +1633,7 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Nombre de cycles trop élevé</translation>
+ <translation>Le nombre de cycles est trop grand</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
@@ -1492,11 +1641,11 @@ Ceci est nécessaire pour assurer la compatibilité de l&apos;extension.</transl
If you keep this number, your database may take hours or days (or even longer) to open!</source>
<translation>Vous utilisez un très grand nombre de cycles de transformation de clé avec Argon2.
-Si vous conservez ce nombre, votre base de données pourrait prendre des heures, voire des jours (ou plus) pour s’ouvrir !</translation>
+Si vous gardez ce nombre, votre base de données pourrait prendre des heures voire des jours (ou plus) pour s’ouvrir.</translation>
</message>
<message>
<source>Understood, keep number</source>
- <translation>Compris, conserver ce nombre</translation>
+ <translation>Compris, garder ce nombre</translation>
</message>
<message>
<source>Cancel</source>
@@ -1505,7 +1654,7 @@ Si vous conservez ce nombre, votre base de données pourrait prendre des heures,
<message>
<source>Number of rounds too low</source>
<comment>Key transformation rounds</comment>
- <translation>Nombre de cycles trop faible</translation>
+ <translation>Le nombre de cycles est trop petit</translation>
</message>
<message>
<source>You are using a very low number of key transform rounds with AES-KDF.
@@ -1513,39 +1662,29 @@ Si vous conservez ce nombre, votre base de données pourrait prendre des heures,
If you keep this number, your database may be too easy to crack!</source>
<translation>Vous utilisez un très petit nombre de cycles de transformation de clé avec AES-KDF.
-Si vous conservez ce nombre, votre base de données pourrait être piratée trop facilement !</translation>
+Si vous gardez ce nombre, votre base de données pourrait être craquée trop facilement.</translation>
</message>
<message>
<source>KDF unchanged</source>
- <translation>KDF inchangé</translation>
+ <translation>KDF est inchangé</translation>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>Échec de la transformation de la clé avec les nouveaux paramètres KDF ; KDF inchangé.</translation>
+ <translation>Échec de transformation de la clé avec les nouveaux paramètres KDF ; KDF est inchangé.</translation>
</message>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>MiO</numerusform><numerusform>MiO</numerusform></translation>
+ <translation><numerusform>Mio</numerusform><numerusform>Mio</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>processus</numerusform><numerusform>processus</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform> fil d’exécution</numerusform><numerusform> fils d’exécution</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
- <translation>Modifier le temps de déchiffrement existant</translation>
+ <translation>Changer le temps de déchiffrement existant</translation>
</message>
<message>
<source>Decryption time in seconds</source>
@@ -1575,6 +1714,14 @@ Si vous conservez ce nombre, votre base de données pourrait être piratée trop
<source>Parallelism</source>
<translation>Parallélisme</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1583,16 +1730,16 @@ Si vous conservez ce nombre, votre base de données pourrait être piratée trop
<translation>Entrées visibles</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Ne pas rendre &amp;visible cette base de données.</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Ne pas montrer cette base de données</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Rendre visible les entrées so&amp;us ce groupe :</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Montrer les entrées de ce groupe :</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Activez fd.o Secret Service pour accéder à ces paramètres.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Activer Secret Service pour accéder à ces paramètres.</translation>
</message>
</context>
<context>
@@ -1627,7 +1774,7 @@ Si vous conservez ce nombre, votre base de données pourrait être piratée trop
</message>
<message>
<source> MiB</source>
- <translation> MiO</translation>
+ <translation> Mio</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1638,28 +1785,24 @@ Si vous conservez ce nombre, votre base de données pourrait être piratée trop
<translation>Paramètres supplémentaires de base de données</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Activer la &amp;compression (recommandé)</translation>
- </message>
- <message>
<source>Database name field</source>
- <translation>Champ du nom de la base de données</translation>
+ <translation>Champ de nom de la base de données</translation>
</message>
<message>
<source>Database description field</source>
- <translation>Champ de la description de la base de données</translation>
+ <translation>Champ de description de la base de données</translation>
</message>
<message>
<source>Default username field</source>
- <translation>Champ du nom d&apos;utilisateur par défaut</translation>
+ <translation>Champ de nom d’utilisateur par défaut</translation>
</message>
<message>
<source>Maximum number of history items per entry</source>
- <translation>Nombre maximal d&apos;éléments d&apos;historique par entrée</translation>
+ <translation>Nombre maximal d’éléments historiques par entrée</translation>
</message>
<message>
<source>Maximum size of history per entry</source>
- <translation>Taille maximale d&apos;historique par entrée</translation>
+ <translation>Taille maximale de l’historique par entrée</translation>
</message>
<message>
<source>Delete Recycle Bin</source>
@@ -1668,12 +1811,16 @@ Si vous conservez ce nombre, votre base de données pourrait être piratée trop
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
- <translation>Voulez-vous supprimer la corbeille actuelle et tout son contenu ?
+ <translation>Voulez-vous supprimer la corbeille actuelle et tout son contenu ?
Cette action est irréversible.</translation>
</message>
<message>
<source> (old)</source>
- <translation>(ancien)</translation>
+ <translation> (ancien)</translation>
+ </message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Activer la compression (recommandé)</translation>
</message>
</context>
<context>
@@ -1684,7 +1831,7 @@ Cette action est irréversible.</translation>
</message>
<message>
<source>Breadcrumb</source>
- <translation>Fil d&apos;Ariane</translation>
+ <translation>Fil d’Ariane</translation>
</message>
<message>
<source>Type</source>
@@ -1709,45 +1856,6 @@ Cette action est irréversible.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Ajouter une protection supplémentaire...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Aucune clé de chiffrement ajoutée</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Vous devez ajouter au moins une clé de chiffrement pour protéger votre base de données !</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Aucun mot de passe défini</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>ATTENTION ! Vous n&apos;avez pas défini de mot de passe. L&apos;utilisation d&apos;une base de données sans mot de passe est fortement déconseillée.
-
-Êtes-vous sûr de vouloir continuer sans mot de passe ?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Erreur inconnue</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Impossible de modifier la clé maître</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continuer sans mot de passe</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1759,137 +1867,18 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Database name field</source>
- <translation>Champ du nom de la base de données</translation>
+ <translation>Champ de nom de la base de données</translation>
</message>
<message>
<source>Database description field</source>
- <translation>Champ de la description de la base de données</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistiques</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Survolez les lignes affichant une icône d&apos;erreur pour plus d&apos;informations.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nom</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valeur</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nom de la base de données</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Description</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Emplacement</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Dernière sauvegarde</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Modifications non enregistrées</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>Oui</translation>
- </message>
- <message>
- <source>no</source>
- <translation>Non</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>La base de données a été modifiée mais les modifications ne sont pas encore été sauvegardées sur le disque.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Nombre de groupes</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Nombre d&apos;entrées</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Nombre d&apos;entrées expirées</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>La base de données contient des données expirées</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Mots de passes uniques</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Mots de passe non-uniques</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Plus de 10 % des mots de passe sont réutilisés. Lorsque cela est possible, utilisez des mots de passe uniques.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Nombre maximal de réutilisation de mot de passe</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Certains mots de passe sont réutilisés plus de trois fois. Lorsque cela est possible, utilisez des mots de passe uniques.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Nombre de mots de passe courts</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>La longueur minimale recommandée pour un mot de passe est au moins 8 caractères.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Nombre de mots de passe faibles</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Il est recommandé d&apos;utiliser des mots de passe longs et aléatoires ayant une qualité de « bonne » à « excellente ».</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Longueur moyenne des mots de passe</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caractères</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>La longueur moyenne des mots de passe est de moins de 10 caractères. Des mots de passe plus longs offrent une meilleure sécurité.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Veuillez patienter pendant que les statistiques de base de données sont calculées...</translation>
+ <translation>Champ de description de la base de données</translation>
</message>
</context>
<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
- <translation>Base de données KeePass 2</translation>
+ <translation>Base de données KeePass 2</translation>
</message>
<message>
<source>All files</source>
@@ -1909,19 +1898,19 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Open KeePass 1 database</source>
- <translation>Ouvrir une base de données KeePass 1</translation>
+ <translation>Ouvrir une base de données KeePass 1</translation>
</message>
<message>
<source>KeePass 1 database</source>
- <translation>Base de données KeePass 1</translation>
+ <translation>Base de données KeePass 1</translation>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>Exporter la base de données au format CSV</translation>
+ <translation>Exporter la base de données vers un fichier CSV</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>Échec de l’écriture du fichier CSV.</translation>
+ <translation>Échec d’écriture du fichier CSV.</translation>
</message>
<message>
<source>Database creation error</source>
@@ -1930,8 +1919,8 @@ Are you sure you want to continue without a password?</source>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation>La base de données créée n&apos;a ni clé, ni KDF et ne peut pas être enregistrée.
-Il s&apos;agit d&apos;un certainement d&apos;un bogue, veuillez le signaler aux développeurs.</translation>
+ <translation>La base de données créée n’a ni clé, ni KDF et ne peut pas être enregistrée.
+C’est très certainement un bogue, veuillez le signaler aux développeurs.</translation>
</message>
<message>
<source>Select CSV file</source>
@@ -1944,25 +1933,25 @@ Il s&apos;agit d&apos;un certainement d&apos;un bogue, veuillez le signaler aux
<message>
<source>%1 [New Database]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Nouvelle base de données]</translation>
+ <translation>%1 [nouvelle base de données]</translation>
</message>
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Verrouillé]</translation>
+ <translation>%1 [verrouillé]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Lecture seule]</translation>
+ <translation>%1 [en lecture seule]</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
- <translation>Impossible d&apos;ouvrir %1. Soit le fichier n&apos;existe pas, soit il n&apos;est pas accessible.</translation>
+ <translation>Échec d’ouverture de %1. Soit le fichier n’existe pas soit il n’est pas accessible.</translation>
</message>
<message>
<source>Export database to HTML file</source>
- <translation>Exporter la base de données au format HTML</translation>
+ <translation>Exporter la base de données vers un fichier HTML</translation>
</message>
<message>
<source>HTML file</source>
@@ -1970,15 +1959,19 @@ Il s&apos;agit d&apos;un certainement d&apos;un bogue, veuillez le signaler aux
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation>Échec de l’écriture du fichier HTML.</translation>
+ <translation>Échec d’écriture du fichier HTML.</translation>
</message>
<message>
<source>Export Confirmation</source>
- <translation>Confirmation d&apos;export</translation>
+ <translation>Confirmation de l’exportation</translation>
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
- <translation>Vous allez exporter votre base de données vers un fichier non chiffré. Cela laisse vos mots de passe et vos informations privées vulnérables ! Êtes-vous sûr de vouloir continuer ?</translation>
+ <translation>Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ?</translation>
+ </message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Ouvrir OPVault</translation>
</message>
</context>
<context>
@@ -1989,35 +1982,35 @@ Il s&apos;agit d&apos;un certainement d&apos;un bogue, veuillez le signaler aux
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Voulez-vous vraiment supprimer définitivement l’entrée « %1 » ?</translation>
+ <translation>Voulez-vous vraiment supprimer définitivement l’entrée « %1 » ?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ?</translation>
+ <translation>Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Voulez-vous vraiment déplacer une entrée dans la corbeille ?</numerusform><numerusform>Voulez-vous vraiment déplacer %n entrées dans la corbeille ?</numerusform></translation>
+ <translation><numerusform>Voulez-vous vraiment déplacer %n entrée vers la corbeille ?</numerusform><numerusform>Voulez-vous vraiment déplacer %n entrées vers la corbeille ?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
- <translation>Exécuter la commande ?</translation>
+ <translation>Exécuter la commande ?</translation>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Voulez-vous vraiment exécuter la commande suivante ?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>Voulez-vous vraiment exécuter la commande suivante ?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
- <translation>Se souvenir de mon choix</translation>
+ <translation>Mémoriser mon choix</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Voulez-vous vraiment supprimer définitivement le groupe « %1 » ?</translation>
+ <translation>Voulez-vous vraiment supprimer définitivement le groupe « %1 » ?</translation>
</message>
<message>
<source>No current database.</source>
- <translation>Aucune base de données.</translation>
+ <translation>Aucune base de données actuelle.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
@@ -2025,19 +2018,19 @@ Il s&apos;agit d&apos;un certainement d&apos;un bogue, veuillez le signaler aux
</message>
<message>
<source>Search Results (%1)</source>
- <translation>Résultats de la recherche (%1)</translation>
+ <translation>Résultats de recherche (%1)</translation>
</message>
<message>
<source>No Results</source>
- <translation>Aucun résultat</translation>
+ <translation>Il n’y a aucun résultat</translation>
</message>
<message>
<source>File has changed</source>
- <translation>Le fichier a été modifié</translation>
+ <translation>Le fichier a changé</translation>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation>Le fichier de la base de données a été modifié. Voulez-vous le recharger ?</translation>
+ <translation>Le fichier de la base de données a été modifiée. Voulez-vous charger les changements ?</translation>
</message>
<message>
<source>Merge Request</source>
@@ -2046,68 +2039,68 @@ Il s&apos;agit d&apos;un certainement d&apos;un bogue, veuillez le signaler aux
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>Le fichier de la base de données a été modifié et vos changements ne sont pas enregistrés.
-Voulez-vous fusionner vos changements ?</translation>
+ <translation>Le fichier de la base de données a été modifiée et vos changements ne sont pas enregistrés.
+Voulez-vous fusionner vos changements ?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
- <translation>Vider la corbeille ?</translation>
+ <translation>Vider la corbeille ?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Êtes-vous certain de vouloir vider définitivement la corbeille ?</translation>
+ <translation>Voulez-vous vraiment vider définitivement la corbeille ?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Voulez-vous supprimer définitivement %n entrée ?</numerusform><numerusform>Voulez-vous supprimer définitivement %n entrées ?</numerusform></translation>
+ <translation><numerusform>Voulez-vous vraiment supprimer %n entrée irrémédiablement ?</numerusform><numerusform>Voulez-vous vraiment supprimer %n entrées irrémédiablement ?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Supprimer l&apos;entrée ?</numerusform><numerusform>Supprimer les entrées ?</numerusform></translation>
+ <translation><numerusform>Supprimer l’entrée ?</numerusform><numerusform>Supprimer les entrées ?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Déplacer l&apos;entrée vers la corbeille ?</numerusform><numerusform>Déplacer les entrées vers la corbeille ?</numerusform></translation>
+ <translation><numerusform>Déplacer l’entrée vers la corbeille ?</numerusform><numerusform>Déplacer les entrées vers la corbeille ?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
- <translation>Verrouiller la base de données ?</translation>
+ <translation>Verrouiller la base de données ?</translation>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Une entrée est cours d&apos;édition. Ignorer les changements et verrouiller quand même ?</translation>
+ <translation>Vous êtes en train de modifier une entrée. Abandonner les changements et la verrouiller quand même ?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
<translation>« %1 » a été modifié.
-Enregistrer les changements ?</translation>
+Enregistrer les changements ?</translation>
</message>
<message>
<source>Database was modified.
Save changes?</source>
<translation>La base de données a été modifiée.
-Enregistrer les changements ?</translation>
+Enregistrer les changements ?</translation>
</message>
<message>
<source>Save changes?</source>
- <translation>Enregistrer les changements ?</translation>
+ <translation>Enregistrer les changements ?</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>Impossible d&apos;ouvrir le nouveau fichier de base de données lors du rafraîchissement automatique.
-Erreur : %1</translation>
+ <translation>Impossible d’ouvrir le nouveau fichier de base de données en tentant de la recharger automatiquement.
+Erreur : % 1</translation>
</message>
<message>
<source>Disable safe saves?</source>
- <translation>Désactiver les enregistrements sécurisés ?</translation>
+ <translation>Désactiver les enregistrements sécurisées ?</translation>
</message>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>KeePassXC n’a pas réussi à plusieurs reprises à enregistrer la base de données. Ceci est probablement dû au verrouillage du fichier enregistré par les services de synchronisation de fichiers.
-Désactiver les enregistrements sécurisés et ressayer ?</translation>
+ <translation>KeePassXC n’a pas réussi, à plusieurs reprises, à enregistrer la base de données. Cela est probablement causé par le maintien d’un verrou sur le fichier enregistré par les services de synchronisation de fichiers.
+Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Passwords</source>
@@ -2119,15 +2112,15 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>KeePass 2 Database</source>
- <translation>Base de données KeePass 2</translation>
+ <translation>Base de données KeePass 2</translation>
</message>
<message>
<source>Replace references to entry?</source>
- <translation>Remplacer les références vers l&apos;entrée ?</translation>
+ <translation>Remplacer les références vers l’entrée ?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>L&apos;entrée « %1 » possède %2 référence. Voulez-vous remplacer la référence par les valeurs, ignorer cette entrée ou la supprimer quand même ?</numerusform><numerusform>L&apos;entrée « %1 » possède %2 références. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou la supprimer quand même ?</numerusform></translation>
+ <translation><numerusform>L’entrée « %1 » à %2 référence. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même ?</numerusform><numerusform>L’entrée « %1 » à %2 références. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même ?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2135,31 +2128,39 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Move group to recycle bin?</source>
- <translation>Déplacer le groupe vers la corbeille ?</translation>
+ <translation>Déplacer le groupe vers la corbeille ?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ?</translation>
+ <translation>Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>Les fichiers de base de données ont bien été fusionnés.</translation>
+ <translation>Les fichiers de base de données ont été fusionnés avec succès.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>La base de données n&apos;a pas été modifiée lors de l&apos;opération de fusion.</translation>
+ <translation>La base de données n’a pas été modifiée par l’opération de fusion.</translation>
</message>
<message>
<source>Shared group...</source>
- <translation>Groupe partagé...</translation>
+ <translation>Groupe partagé…</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Échec lors de l&apos;écriture de la base de données : %1.</translation>
+ <translation>Échec d’écriture de la base de données : %1</translation>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
- <translation>Cette base de données est ouverte en lecture-seule. La sauvegarde automatique est désactivée.</translation>
+ <translation>Cette base de données est ouverte en lecture seule. L’enregistrement automatique est désactivé.</translation>
+ </message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Enregistrer une copie de sécurité de la base de données</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Impossible de trouver le fichier de la base de données : %1</translation>
</message>
</context>
<context>
@@ -2190,27 +2191,19 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>SSH Agent</source>
- <translation>Agent SSH</translation>
+ <translation>Agent SSH</translation>
</message>
<message>
<source>n/a</source>
- <translation>n/a</translation>
+ <translation>s.o.</translation>
</message>
<message>
<source>(encrypted)</source>
- <translation>(chiffré)</translation>
+ <translation>(chiffrée)</translation>
</message>
<message>
<source>Select private key</source>
- <translation>Sélectionner un fichier-clé</translation>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation>Le fichier est trop important pour être un fichier-clé</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Échec lors de l’ouverture de la clé privée</translation>
+ <translation>Sélectionner une clé privée</translation>
</message>
<message>
<source>Entry history</source>
@@ -2225,16 +2218,12 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<translation>Modifier l’entrée</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Les mots de passe saisis sont différents.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nouvel attribut</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Êtes-vous certain de vouloir supprimer cet attribut ?</translation>
+ <translation>Voulez-vous vraiment supprimer cet attribut ?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2249,29 +2238,13 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<translation><numerusform>%n mois</numerusform><numerusform>%n mois</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Appliquer le mot de passe généré ?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Voulez-vous appliquer le mot de passe généré à cette entrée ?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
- <translation>L&apos;entrée a bien été mise à jour.</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>L&apos;entrée contient des modifications non enregistrées</translation>
+ <translation>L’entrée a été mise à jour avec succès.</translation>
</message>
<message>
<source>New attribute %1</source>
<translation>Nouvel attribut %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTÉGÉ] Appuyez pour voir ou modifier</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n an</numerusform><numerusform>%n ans</numerusform></translation>
@@ -2290,14 +2263,34 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
- <translation>Êtes-vous sûr de vouloir supprimer cette URL ?</translation>
+ <translation>Voulez-vous vraiment supprimer cette URL ?</translation>
+ </message>
+ <message>
+ <source>Reveal</source>
+ <translation>Révéler</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Cacher</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Modifications non enregistrées</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Voulez-vous enregistrer les modifications de cette entrée ?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[PROTÉGÉ] Appuyer sur Révéler pour visualiser ou modifier</translation>
</message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
<message>
<source>Additional attributes</source>
- <translation>Autres attributs</translation>
+ <translation>Attributs supplémentaires</translation>
</message>
<message>
<source>Add</source>
@@ -2317,15 +2310,15 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Reveal</source>
- <translation>Voir</translation>
+ <translation>Révéler</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Pièces jointes</translation>
+ <translation>Fichiers joints</translation>
</message>
<message>
<source>Foreground Color:</source>
- <translation>Couleur du texte :</translation>
+ <translation>Couleur de l’avant-plan :</translation>
</message>
<message>
<source>Background Color:</source>
@@ -2333,11 +2326,11 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Attribute selection</source>
- <translation>Sélection d&apos;attribut</translation>
+ <translation>Sélection d’un attribut</translation>
</message>
<message>
<source>Attribute value</source>
- <translation>Valeur d&apos;attribut</translation>
+ <translation>Valeur de l’attribut</translation>
</message>
<message>
<source>Add a new attribute</source>
@@ -2345,15 +2338,15 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Remove selected attribute</source>
- <translation>Supprimer l&apos;attribut sélectionné</translation>
+ <translation>Supprimer l’attribut sélectionné</translation>
</message>
<message>
<source>Edit attribute name</source>
- <translation>Modifier le nom de l&apos;attribut</translation>
+ <translation>Modifier le nom de l’attribut</translation>
</message>
<message>
<source>Toggle attribute protection</source>
- <translation>Basculer l&apos;affichage de la protection de l&apos;attribut</translation>
+ <translation>Activer ou désactiver la protection de l’attribut</translation>
</message>
<message>
<source>Show a protected attribute</source>
@@ -2361,11 +2354,19 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Foreground color selection</source>
- <translation>Sélection de la couleur d&apos;avant-plan</translation>
+ <translation>Sélection de la couleur d’avant-plan</translation>
</message>
<message>
<source>Background color selection</source>
- <translation>Sélection de la couleur d&apos;arrière-plan</translation>
+ <translation>Sélection de la couleur d’arrière-plan</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Si coché, l&apos;entrée n&apos;apparaîtra pas dans les rapports comme le bilan de santé et mots de passe compromis (HIBP), même si elle ne correspond pas aux critères de qualité (ex. : entropie du mot de passe ou réutilisation). Vous pouvez cocher si le mot de passe échappe à votre contrôle (ex. : s&apos;il doit être un code à 4 chiffres) afin d&apos;encombrer les rapports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Exclure des rapports de la base de données</translation>
</message>
</context>
<context>
@@ -2375,16 +2376,8 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<translation>Activer la saisie automatique pour cette entrée</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Utiliser la séquence de saisie automatique par défaut du groupe</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Utiliser une séquence personnalisée de saisie automatique :</translation>
- </message>
- <message>
<source>Window Associations</source>
- <translation>Associations de fenêtre</translation>
+ <translation>Associations de fenêtres</translation>
</message>
<message>
<source>+</source>
@@ -2400,7 +2393,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Utiliser une séquence spécifique pour cette association :</translation>
+ <translation>Utiliser une séquence précise pour cette association :</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2408,11 +2401,11 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Open Auto-Type help webpage</source>
- <translation>Ouvrir la page Web d&apos;aide sur la saisie automatique</translation>
+ <translation>Ouvrir la page Web d’aide de la saisie automatique</translation>
</message>
<message>
<source>Existing window associations</source>
- <translation>Associations de fenêtre existantes</translation>
+ <translation>Associations de fenêtres existantes</translation>
</message>
<message>
<source>Add new window association</source>
@@ -2420,7 +2413,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Remove selected window association</source>
- <translation>Supprimer l&apos;association de fenêtre sélectionnée</translation>
+ <translation>Supprimer l’association de fenêtre sélectionnée</translation>
</message>
<message>
<source>You can use an asterisk (*) to match everything</source>
@@ -2428,7 +2421,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Set the window association title</source>
- <translation>Définir le titre de l&apos;association de fenêtre</translation>
+ <translation>Définir le titre de l’association de fenêtre</translation>
</message>
<message>
<source>You can use an asterisk to match everything</source>
@@ -2438,12 +2431,20 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Séquence de saisie automatique personnalisée pour cette fenêtre</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Hériter du groupe la séquence par défaut de saisie automatique</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Utiliser une séquence personnalisée de saisie automatique :</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
<message>
<source>These settings affect to the entry&apos;s behaviour with the browser extension.</source>
- <translation>Ces paramètres modifieront le fonctionnement de l&apos;entrée avec l&apos;extension du navigateur.</translation>
+ <translation>Ces paramètres affectent le comportement de l’entrée avec l’extension pour navigateurs.</translation>
</message>
<message>
<source>General</source>
@@ -2451,15 +2452,15 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Skip Auto-Submit for this entry</source>
- <translation>Ignorer la validation automatique pour cette entrée</translation>
+ <translation>Ignorer l’envoi automatique pour cette entrée</translation>
</message>
<message>
<source>Hide this entry from the browser extension</source>
- <translation>Masquer cette entrée dans l&apos;extension du navigateur</translation>
+ <translation>Cacher cette entrée aux yeux de l’extension pour navigateurs</translation>
</message>
<message>
<source>Additional URL&apos;s</source>
- <translation>Autres URL</translation>
+ <translation>URL supplémentaires</translation>
</message>
<message>
<source>Add</source>
@@ -2473,6 +2474,14 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<source>Edit</source>
<translation>Modifier</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Envoyer ce paramètre au navigateur seulement pour les boîtes de dialogue d&apos;authentification HTTP. Si activé, les formulaires d&apos;authentification standard n&apos;afficheront pas cette entrée lors de la sélection.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Utiliser cette entrée seulement avec l&apos;authentification HTTP Basic</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2482,7 +2491,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Restore</source>
- <translation>Rétablir</translation>
+ <translation>Restaurer</translation>
</message>
<message>
<source>Delete</source>
@@ -2490,27 +2499,27 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Delete all</source>
- <translation>Supprimer tout</translation>
+ <translation>Tout supprimer</translation>
</message>
<message>
<source>Entry history selection</source>
- <translation>Sélection de l&apos;historique de l&apos;entrée</translation>
+ <translation>Sélection de l’historique de l’entrée</translation>
</message>
<message>
<source>Show entry at selected history state</source>
- <translation>Afficher l&apos;entrée pour l&apos;état d&apos;historique sélectionné</translation>
+ <translation>Afficher l’entrée pour l’état historique sélectionné</translation>
</message>
<message>
<source>Restore entry to selected history state</source>
- <translation>Restaurer l&apos;entrée pour l&apos;état de l&apos;historique sélectionné</translation>
+ <translation>Restaurer l’entrée vers l’état historique sélectionné</translation>
</message>
<message>
<source>Delete selected history state</source>
- <translation>Supprimer l&apos;état de l&apos;historique sélectionné</translation>
+ <translation>Supprimer l’état historique sélectionné</translation>
</message>
<message>
<source>Delete all history</source>
- <translation>Supprimer tout l&apos;historique</translation>
+ <translation>Supprimer tout l’historique</translation>
</message>
</context>
<context>
@@ -2524,72 +2533,48 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<translation>Mot de passe :</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Confirmation :</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titre :</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
- </message>
- <message>
<source>Presets</source>
- <translation>Présélections</translation>
+ <translation>Préréglages</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Cochez la case pour basculer l&apos;affichage de la partie réservée aux notes.</translation>
+ <translation>Cochez la case pour révéler la section des notes.</translation>
</message>
<message>
<source>Username:</source>
<translation>Nom d’utilisateur :</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expiration</translation>
- </message>
- <message>
<source>Url field</source>
- <translation>Champ de l&apos;URL</translation>
+ <translation>Champ d’URL</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation>Télécharger la favicon pour l&apos;URL</translation>
- </message>
- <message>
- <source>Repeat password field</source>
- <translation>Champ de confirmation du mot de passe</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Basculer l&apos;affichage du générateur de mots de passe</translation>
+ <translation>Télécharger une favoricône pour l’URL</translation>
</message>
<message>
<source>Password field</source>
<translation>Champ de mot de passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Basculer l&apos;affichage du mot de passe</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
- <translation>Basculer l&apos;affichage des notes</translation>
+ <translation>Activer ou désactiver la visibilité des notes</translation>
</message>
<message>
<source>Expiration field</source>
- <translation>Champ d&apos;expiration</translation>
+ <translation>Champ d’expiration</translation>
</message>
<message>
<source>Expiration Presets</source>
- <translation>Présélections d&apos;expiration</translation>
+ <translation>Préréglages de l’expiration</translation>
</message>
<message>
<source>Expiration presets</source>
- <translation>Présélections d&apos;expiration</translation>
+ <translation>Préréglages de l’expiration</translation>
</message>
<message>
<source>Notes field</source>
@@ -2597,15 +2582,27 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Title field</source>
- <translation>Champ du titre</translation>
+ <translation>Champ de titre</translation>
</message>
<message>
<source>Username field</source>
- <translation>Champ du nom d&apos;utilisateur</translation>
+ <translation>Champ de nom d’utilisateur</translation>
</message>
<message>
<source>Toggle expiration</source>
- <translation>Basculer l&apos;affichage de l&apos;expiration</translation>
+ <translation>Activer ou désactiver l’expiration</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notes :</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Expire le :</translation>
</message>
</context>
<context>
@@ -2616,11 +2613,11 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>Retirer la clé de l’agent après</translation>
+ <translation>Supprimer la clé de l’agent après</translation>
</message>
<message>
<source> seconds</source>
- <translation> secondes</translation>
+ <translation>secondes</translation>
</message>
<message>
<source>Fingerprint</source>
@@ -2628,7 +2625,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>Retirer la clé de l’agent lorsque la base de données est fermée/verrouillée</translation>
+ <translation>Supprimer la clé de l’agent si la base de données est fermée ou verrouillée</translation>
</message>
<message>
<source>Public key</source>
@@ -2636,7 +2633,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Ajouter la clé à l’agent lorsque la base de données est ouverte/déverrouillée</translation>
+ <translation>Ajouter la clé à l’agent si la base de données est ouverte ou déverrouillée</translation>
</message>
<message>
<source>Comment</source>
@@ -2644,11 +2641,11 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Decrypt</source>
- <translation>Déchiffré</translation>
+ <translation>Déchiffrer</translation>
</message>
<message>
<source>n/a</source>
- <translation>n/a</translation>
+ <translation>s.o.</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -2669,7 +2666,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Attachment</source>
- <translation>Pièce jointe</translation>
+ <translation>Fichiers joints</translation>
</message>
<message>
<source>Add to agent</source>
@@ -2681,23 +2678,23 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
- <translation>Requiert une confirmation de l’utilisateur quand cette clé est utilisée</translation>
+ <translation>Exige une confirmation de l’utilisateur quand cette clé est utilisée</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
- <translation>Retrait de la clé de l’agent après un nombre de secondes spécifié</translation>
+ <translation>Supprimer la clé de l’agent après le nombre de secondes indiqué</translation>
</message>
<message>
<source>Browser for key file</source>
- <translation>Rechercher un fichier-clé</translation>
+ <translation>Rechercher un fichier clé</translation>
</message>
<message>
<source>External key file</source>
- <translation>Fichier-clé externe</translation>
+ <translation>Fichier clé externe</translation>
</message>
<message>
<source>Select attachment file</source>
- <translation>Sélectionner une pièce jointe</translation>
+ <translation>Sélectionner une fichier joint</translation>
</message>
</context>
<context>
@@ -2736,16 +2733,12 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>L&apos;entrée contient des modifications non enregistrées</translation>
+ <translation>L’entrée comporte des changements non enregistrés</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulaire</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Type :</translation>
</message>
@@ -2754,10 +2747,6 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<translation>Chemin :</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Mot de passe :</translation>
</message>
@@ -2767,23 +2756,23 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation>Conteneur KeeShare non signé</translation>
+ <translation>Conteneur KeeShare non signé</translation>
</message>
<message>
<source>KeeShare signed container</source>
- <translation>Conteneur KeeShare signé</translation>
+ <translation>KeeShare conteneur signé</translation>
</message>
<message>
<source>Select import source</source>
- <translation>Sélectionner la source à importer</translation>
+ <translation>Sélectionner la source d’importation</translation>
</message>
<message>
<source>Select export target</source>
- <translation>Sélectionner la cible à exporter</translation>
+ <translation>Sélectionner la cible de l’exportation</translation>
</message>
<message>
<source>Select import/export file</source>
- <translation>Sélectionner le fichier d&apos;import/export</translation>
+ <translation>Sélectionner le fichier d’importation ou d’exportation</translation>
</message>
<message>
<source>Clear</source>
@@ -2804,7 +2793,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
<message>
<source>Your KeePassXC version does not support sharing this container type.
Supported extensions are: %1.</source>
- <translation>Votre version de KeePassXC ne prend pas en charge le partage de ce type de conteneur. Les extensions supportées sont : %1.</translation>
+ <translation>Votre version de KeePassXC ne prend pas en charge le partage de ce type de conteneur. Les extensions prises en charge sont : %1.</translation>
</message>
<message>
<source>%1 is already being exported by this database.</source>
@@ -2816,134 +2805,122 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>%1 is being imported and exported by different groups in this database.</source>
- <translation>%1 est exporté et importé par des groupes différents dans cette base de données.</translation>
+ <translation>%1 est importé et exporté par différents groupes dans cette base de données.</translation>
</message>
<message>
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
<comment>KeeShare is a proper noun</comment>
- <translation>KeeShare est actuellement désactivé. Vous pouvez activer l&apos;import/export dans les paramètres de l&apos;application.</translation>
+ <translation>KeeShare est actuellement désactivé. Vous pouvez activer l’importation et l’exportation dans les paramètres de l’application.</translation>
</message>
<message>
<source>Database export is currently disabled by application settings.</source>
- <translation>L&apos;export de la base de données est désactivé dans les paramètres de l&apos;application.</translation>
+ <translation>L’exportation de la base de données est actuellement désactivée par les paramètres de l’application.</translation>
</message>
<message>
<source>Database import is currently disabled by application settings.</source>
- <translation>L&apos;import de la base de données et actuellement désactivé dans les paramètres de l&apos;application.</translation>
+ <translation>L’importation de la base de données est actuellement désactivée par les paramètres de l’application.</translation>
</message>
<message>
<source>Sharing mode field</source>
- <translation>Champ du mode de partage</translation>
+ <translation>Champ de mode de partage</translation>
</message>
<message>
<source>Path to share file field</source>
- <translation>Champ du chemin de fichier partagé</translation>
- </message>
- <message>
- <source>Browser for share file</source>
- <translation>Rechercher un fichier partagé</translation>
+ <translation>Champ de chemin vers le fichier partagé</translation>
</message>
<message>
<source>Password field</source>
<translation>Champ de mot de passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Basculer l&apos;affichage du mot de passe</translation>
+ <source>Clear fields</source>
+ <translation>Effacer les champs</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Basculer l&apos;affichage du générateur de mot de passe</translation>
+ <source>Browse for share file</source>
+ <translation>Sélectionner un fichier à partager</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Effacer les champs</translation>
+ <source>Browse...</source>
+ <translation>Parcourir…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nom</translation>
+ <source>Name field</source>
+ <translation>Champ de nom</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notes</translation>
+ <source>Notes field</source>
+ <translation>Champs des notes</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expiration</translation>
+ <source>Toggle expiration</source>
+ <translation>Activer ou désactiver l’expiration</translation>
</message>
<message>
- <source>Search</source>
- <translation>Recherche</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation>Activer ou désactiver la saisie automatique pour cela et les sous-groupes</translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Saisie automatique</translation>
+ <source>Expiration field</source>
+ <translation>Champ d’expiration</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Utiliser la séquence de saisie automatique du groupe parent</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation>Activer ou désactiver la recherche pour cela et les sous-groupes</translation>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Définir la sé&amp;quence par défaut de la saisie automatique</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>Champ de séquence par défaut de saisie automatique</translation>
</message>
<message>
- <source>Name field</source>
- <translation>Champ du nom</translation>
+ <source>Expires:</source>
+ <translation>Expire le :</translation>
</message>
<message>
- <source>Notes field</source>
- <translation>Champs des notes</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Utiliser la séquence de saisie automatique du groupe parent par défaut</translation>
</message>
<message>
- <source>Toggle expiration</source>
- <translation>Basculer l&apos;affichage de l&apos;expiration</translation>
+ <source>Auto-Type:</source>
+ <translation>Saisie automatique :</translation>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
- <translation>Basculer la saisie automatique pour ceci et les sous-groupes</translation>
+ <source>Search:</source>
+ <translation>Recherche :</translation>
</message>
<message>
- <source>Expiration field</source>
- <translation>Champ d&apos;expiration</translation>
+ <source>Notes:</source>
+ <translation>Notes :</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
- <translation>Basculer la recherche pour ceci et les sous-groupes</translation>
+ <source>Name:</source>
+ <translation>Nom :</translation>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation>Champ de séquence de saisie automatique</translation>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Définir la séquence de saisie automatique par défaut</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Utiliser l’icône par défaut</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Utiliser une icône personnalisée</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Ajouter une icône personnalisée</translation>
</message>
<message>
<source>Delete custom icon</source>
- <translation>Supprimer une icône personnalisée</translation>
+ <translation>Supprimer l’icône personnalisée</translation>
</message>
<message>
<source>Download favicon</source>
- <translation>Télécharger la favicon</translation>
+ <translation>Télécharger une favoricône</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>Impossible de récupérer la favicon.</translation>
+ <translation>Impossible de récupérer la favoricône</translation>
</message>
<message>
<source>Images</source>
@@ -2963,11 +2940,11 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Chargement de %1 sur %n icône réussi.</numerusform><numerusform>Chargement de %1 sur %n icônes réussi</numerusform></translation>
+ <translation><numerusform>%1 icône sur %n a été chargée avec succès</numerusform><numerusform>%1 icônes sur %n ont été chargées avec succès</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
- <translation>Aucune icône n&apos;a été chargée</translation>
+ <translation>Aucune icône n’a été chargée</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
@@ -2975,47 +2952,55 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>L&apos;icône suivante est défectueuse :</numerusform><numerusform>Les icônes suivantes sont défectueuses :</numerusform></translation>
+ <translation><numerusform>L’icône suivante a échoué :</numerusform><numerusform>Les icônes suivantes ont échoué :</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Cette icône est utilisée par %1 entrée et sera remplacée par l’icône par défaut. Êtes-vous sûr de vouloir la supprimer ?</numerusform><numerusform>Cette icône est utilisée par %1 entrées et sera remplacée par l’icône par défaut. Êtes-vous sûr de vouloir la supprimer ?</numerusform></translation>
+ <translation><numerusform>Cette icône est utilisée par %1 entrée et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ?</numerusform><numerusform>Cette icône est utilisée par %1 entrées et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
- <translation>Vous pouvez activer le service d&apos;icônes de sites Web DuckDuckGo dans Outils &gt; Paramètres &gt; Sécurité</translation>
+ <translation>Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans Outils &gt; Paramètres &gt; Sécurité</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation>Télécharger la favicon pour l&apos;URL</translation>
+ <translation>Télécharger une favoricône pour l’URL</translation>
</message>
<message>
<source>Apply selected icon to subgroups and entries</source>
- <translation>Appliquer l&apos;icône sélectionnée aux sous-groupes et entrées</translation>
- </message>
- <message>
- <source>Apply icon &amp;to ...</source>
- <translation>Appliquer l&apos;icône à ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Appliquer à ceci uniquement</translation>
+ <translation>Appliquer l’icône sélectionnée aux sous-groupes et entrées</translation>
</message>
<message>
<source>Also apply to child groups</source>
- <translation>Appliquer également aux groupes enfants</translation>
+ <translation>Appliquer aussi aux groupes enfant</translation>
</message>
<message>
<source>Also apply to child entries</source>
- <translation>Appliquer également aux entrées enfants</translation>
+ <translation>Appliquer aussi aux entrées enfant</translation>
</message>
<message>
<source>Also apply to all children</source>
- <translation>Appliquer également à tous les enfants</translation>
+ <translation>Appliquer aussi à tous les enfants</translation>
</message>
<message>
<source>Existing icon selected.</source>
- <translation>Icône existante sélectionnée.</translation>
+ <translation>L’icône existante a été sélectionnée.</translation>
+ </message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Utiliser l’icône par défaut</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Utiliser une icône personnalisée</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Appliquer l&apos;icône à...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>N’appliquer qu’à ce groupe</translation>
</message>
</context>
<context>
@@ -3030,11 +3015,11 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Accessed:</source>
- <translation>Dernier accès :</translation>
+ <translation>Consulté :</translation>
</message>
<message>
<source>Uuid:</source>
- <translation>Uuid :</translation>
+ <translation>UUID :</translation>
</message>
<message>
<source>Plugin Data</source>
@@ -3046,12 +3031,12 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Delete plugin data?</source>
- <translation>Supprimer les données de l’extension ?</translation>
+ <translation>Supprimer les données de l’extension ?</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>Voulez-vous vraiment supprimer les données de l’extension sélectionnée ? Cela peut entraîner un dysfonctionnement des extensions.</translation>
+ <translation>Voulez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées.</translation>
</message>
<message>
<source>Key</source>
@@ -3071,26 +3056,26 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Datetime accessed</source>
- <translation>Date et heure d&apos;accès</translation>
+ <translation>Date et heure d’accès</translation>
</message>
<message>
<source>Unique ID</source>
- <translation>Identifiant unique</translation>
+ <translation>ID unique</translation>
</message>
<message>
<source>Plugin data</source>
- <translation>Données de l&apos;extension</translation>
+ <translation>Données de l’extension</translation>
</message>
<message>
<source>Remove selected plugin data</source>
- <translation>Supprimer les données de l&apos;extension sélectionnée</translation>
+ <translation>Supprimer les données d’extension sélectionnée</translation>
</message>
</context>
<context>
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>%1 - Cloner</translation>
+ <translation>%1 – Cloner</translation>
</message>
</context>
<context>
@@ -3124,7 +3109,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Save</source>
- <translation>Enregistrer le fichier</translation>
+ <translation>Enregistrer</translation>
</message>
<message>
<source>Select files</source>
@@ -3132,11 +3117,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Êtes-vous sûr de vouloir supprimer %n pièce jointe ?</numerusform><numerusform>Êtes-vous sûr de vouloir supprimer %n pièces jointes ?</numerusform></translation>
+ <translation><numerusform>Voulez-vous vraiment supprimer %n fichier joint ?</numerusform><numerusform>Voulez-vous vraiment supprimer %n fichiers joints ?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
- <translation>Enregistrer les pièces jointes</translation>
+ <translation>Enregistrer les fichiers joints</translation>
</message>
<message>
<source>Unable to create directory:
@@ -3146,7 +3131,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>Êtes-vous certain de vouloir remplacer le fichier existant « %1 » par la pièce jointe ?</translation>
+ <translation>Voulez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ?</translation>
</message>
<message>
<source>Confirm overwrite</source>
@@ -3155,19 +3140,19 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Unable to save attachments:
%1</source>
- <translation>Impossible d’enregistrer les pièces jointes :
+ <translation>Impossible d’enregistrer les fichiers joints :
%1</translation>
</message>
<message>
<source>Unable to open attachment:
%1</source>
- <translation>Impossible d’ouvrir la pièce jointe :
+ <translation>Impossible d’ouvrir le fichier joint :
%1</translation>
</message>
<message>
<source>Unable to open attachments:
%1</source>
- <translation>Impossible d’ouvrir les pièces jointes :
+ <translation>Impossible d’ouvrir les fichiers joints :
%1</translation>
</message>
<message>
@@ -3177,29 +3162,43 @@ This may cause the affected plugins to malfunction.</source>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Impossible d’ouvrir le fichier :
+ <translation><numerusform>Impossible d’ouvrir le fichier :
%1</numerusform><numerusform>Impossible d’ouvrir les fichiers :
%1</numerusform></translation>
</message>
<message>
<source>Attachments</source>
- <translation>Pièces jointes</translation>
+ <translation>Fichiers joints</translation>
</message>
<message>
<source>Add new attachment</source>
- <translation>Ajouter une nouvelle pièce jointe</translation>
+ <translation>Ajouter une nouveau fichier joint</translation>
</message>
<message>
<source>Remove selected attachment</source>
- <translation>Supprimer la pièce jointe sélectionnée</translation>
+ <translation>Supprimer le fichier joint sélectionné</translation>
</message>
<message>
<source>Open selected attachment</source>
- <translation>Ouvrir la pièce jointe sélectionnée</translation>
+ <translation>Ouvrir le fichier joint sélectionné</translation>
</message>
<message>
<source>Save selected attachment to disk</source>
- <translation>Enregistrer la pièce jointe sélectionnée sur le disque</translation>
+ <translation>Enregistrer sur le disque le fichier joint sélectionné</translation>
+ </message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 est un fichier volumineux (%2 Mo).
+Votre base de données peu devenir importante et ses performances réduites.
+
+Êtes-vous sûr d&apos;ajouter ce fichier ?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Confirmer la pièce jointe</translation>
</message>
</context>
<context>
@@ -3233,7 +3232,7 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Ref: </source>
<comment>Reference abbreviation</comment>
- <translation>Réf : </translation>
+ <translation>Réf. : </translation>
</message>
<message>
<source>Group</source>
@@ -3281,15 +3280,55 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Attachments</source>
- <translation>Pièces jointes</translation>
+ <translation>Fichiers joints</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Oui</translation>
+ <source>Size</source>
+ <translation>Taille</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nom du groupe</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Titre de l&apos;entrée</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Notes de l&apos;entrée</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>L&apos;entrée expire dans</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Date de création</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Date de dernière modification</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Date du dernier accès</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Fichiers joints</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Taille de l&apos;entrée</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Contient des pièces jointes</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Contient un mot de passe à usage unique temporaire</translation>
</message>
</context>
<context>
@@ -3324,7 +3363,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Attachments</source>
- <translation>Pièces jointes</translation>
+ <translation>Fichiers joints</translation>
</message>
<message>
<source>Notes</source>
@@ -3344,7 +3383,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Searching</source>
- <translation>Recherche…</translation>
+ <translation>Recherche</translation>
</message>
<message>
<source>Search</source>
@@ -3389,14 +3428,21 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL invalide</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
- <translation>Personnaliser la vue</translation>
+ <translation>Personnaliser l’affichage</translation>
</message>
<message>
<source>Hide Usernames</source>
- <translation>Cacher les noms d’utilisateurs</translation>
+ <translation>Cacher les noms d’utilisateur</translation>
</message>
<message>
<source>Hide Passwords</source>
@@ -3404,45 +3450,104 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Fit to window</source>
- <translation>Adapter à la fenêtre</translation>
+ <translation>Ajuster à la fenêtre</translation>
</message>
<message>
<source>Fit to contents</source>
- <translation>Adapter au contenu</translation>
+ <translation>Ajuster au contenu</translation>
</message>
<message>
<source>Reset to defaults</source>
- <translation>Remettre les paramètres par défaut</translation>
+ <translation>Réinitialiser aux valeurs par défaut</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Pièces jointes (icône)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Contient des pièces jointes</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Contient un TOTP</translation>
</message>
</context>
<context>
<name>FdoSecrets::Item</name>
<message>
<source>Entry &quot;%1&quot; from database &quot;%2&quot; was used by %3</source>
- <translation>L&apos;entrée « %1 » de la base de données « %2 » a été utilisée par %3</translation>
+ <translation>L’entrée « %1 » de la base de données « %2 » a été utilisée par %3</translation>
</message>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Impossible d&apos;enregistrer le service DBus sur %1 : un autre service de secrets est en cours d&apos;exécution.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n entrée utilisée par %1</numerusform><numerusform>%n entrées utilisées par %1</numerusform></translation>
+ <translation><numerusform>%n entrée(s) ont été utilisées par %1</numerusform><numerusform>%n entrée(s) ont été utilisées par %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Échec lors de l&apos;enregistrement du service DBus à %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Groupe</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gérer</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Déverrouiller pour afficher</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Aucun</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Application</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gérer</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Secret Service : %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service :&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Inconnu</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Inconnu</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID : %1, exécutable : %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Un autre secret service est en cours d&apos;exécution (%1).&lt;br/&gt;Veuillez l&apos;arrêter/le retirer avant de réactiver l&apos;intégration Secret Service.</translation>
</message>
</context>
<context>
@@ -3454,21 +3559,17 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC : impossible d’enregistrer le fichier !</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Impossible d’enregistrer le fichier script de la messagerie native</translation>
+ <source>Online password validation failed</source>
+ <translation>Échec lors de la validation du mot de passe en ligne</translation>
</message>
</context>
<context>
<name>IconDownloaderDialog</name>
<message>
<source>Download Favicons</source>
- <translation>Télécharger les favicons</translation>
+ <translation>Télécharger des favoricônes</translation>
</message>
<message>
<source>Cancel</source>
@@ -3477,8 +3578,8 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Having trouble downloading icons?
You can enable the DuckDuckGo website icon service in the security section of the application settings.</source>
- <translation>Des problèmes pour télécharger les icônes ?
-Vous pouvez activer le service d&apos;icônes de sites Web de DuckDuckGo dans la section sécurité des paramètres de l&apos;application.</translation>
+ <translation>Des problèmes pour télécharger les icônes ?
+Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans la section sécurité des paramètres de l’application.</translation>
</message>
<message>
<source>Close</source>
@@ -3494,27 +3595,27 @@ Vous pouvez activer le service d&apos;icônes de sites Web de DuckDuckGo dans la
</message>
<message>
<source>Please wait, processing entry list...</source>
- <translation>Veuillez patienter durant le traitement de la liste des entrées ...</translation>
+ <translation>Veuillez patienter, traitement de la liste des entrées…</translation>
</message>
<message>
<source>Downloading...</source>
- <translation>Téléchargement...</translation>
+ <translation>Téléchargement…</translation>
</message>
<message>
<source>Ok</source>
- <translation>Ok</translation>
+ <translation>Valider</translation>
</message>
<message>
<source>Already Exists</source>
- <translation>Déjà existant</translation>
+ <translation>Existe déjà</translation>
</message>
<message>
<source>Download Failed</source>
- <translation>Échec du téléchargement</translation>
+ <translation>Échec de téléchargement</translation>
</message>
<message>
<source>Downloading favicons (%1/%2)...</source>
- <translation>Téléchargement des favicons (%1/%2) ...</translation>
+ <translation>Téléchargement des favoricônes (%1/%2)…</translation>
</message>
</context>
<context>
@@ -3531,68 +3632,64 @@ Vous pouvez activer le service d&apos;icônes de sites Web de DuckDuckGo dans la
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossible de calculer la clé maître</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Impossible de lancer une question-réponse.</translation>
- </message>
- <message>
<source>missing database headers</source>
- <translation>en-têtes de la base de données manquantes</translation>
+ <translation>les en-têtes de base de données manquent</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation>L&apos;en-tête ne correspond pas à l&apos;empreinte numérique</translation>
+ <translation>L’en-tête ne correspond pas à l’empreinte numérique</translation>
</message>
<message>
<source>Invalid header id size</source>
- <translation>Taille de l’identifiant d’en-tête invalide</translation>
+ <translation>La taille de l’ID d’en-tête est invalide</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Longueur de champ d’en-tête invalide</translation>
+ <translation>La longueur du champ d’en-tête est invalide</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Longueur des données d’en-tête invalide</translation>
+ <translation>La longueur des données d’en-tête est invalide</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation>Identifiants invalides, veuillez réessayer.
-Si le problème persiste, le fichier de la base de données peut être corrompu.</translation>
+ <translation>Des identifiants invalides ont été fournis, veuillez ressayer.
+Si le problème se reproduit, le fichier de la base de données pourrait être corrompu.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Impossible de calculer la clé de la base de données</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Impossible de lancer une question-réponse : %1</translation>
</message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Impossible de lancer une question-réponse.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Impossible de lancer une question-réponse : %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossible de calculer la clé maître</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Impossible de calculer la clé de la base de données</translation>
</message>
</context>
<context>
<name>Kdbx4Reader</name>
<message>
<source>missing database headers</source>
- <translation>en-têtes de la base de données manquantes</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Impossible de calculer la clé maître</translation>
+ <translation>les en-têtes de la base de données manquent</translation>
</message>
<message>
<source>Invalid header checksum size</source>
- <translation>Taille de la somme de contrôle de d’en-tête invalide</translation>
+ <translation>La taille de la somme de contrôle de l’en-tête est invalide</translation>
</message>
<message>
<source>Header SHA256 mismatch</source>
- <translation>En-tête SHA256 incohérent</translation>
+ <translation>Le SHA256 de l’en-tête ne correspond pas</translation>
</message>
<message>
<source>Unknown cipher</source>
@@ -3600,19 +3697,19 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Invalid header id size</source>
- <translation>Taille de l’identifiant d’en-tête invalide</translation>
+ <translation>La taille de l’ID d’en-tête est invalide</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Longueur du champ d’en-tête invalide</translation>
+ <translation>La longueur du champ d’en-tête est invalide</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Longueur des données d’en-tête invalide</translation>
+ <translation>La longueur des données d’en-tête est invalide</translation>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>Échec lors de l’ouverture d’une mémoire tampon pour les paramètres KDF dans l’en-tête</translation>
+ <translation>Échec d’ouverture d’un tampon pour les paramètres KDF dans l’en-tête</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
@@ -3620,110 +3717,114 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
- <translation>Anciens champs d’en-tête trouvés dans le fichier KDBX4.</translation>
+ <translation>Des champs d’en-tête hérités ont été trouvés dans le fichier KDBX4.</translation>
</message>
<message>
<source>Invalid inner header id size</source>
- <translation>Taille de identifiant d’en-tête interne invalide</translation>
+ <translation>La taille de l’ID d’en-tête interne est invalide</translation>
</message>
<message>
<source>Invalid inner header field length</source>
- <translation>Longueur du champ d’en-tête interne invalide</translation>
+ <translation>La longueur du champ d’en-tête interne est invalide</translation>
</message>
<message>
<source>Invalid inner header binary size</source>
- <translation>Taille binaire d’en-tête interne invalide</translation>
+ <translation>La taille binaire d’en-tête interne est invalide</translation>
</message>
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Version de table des variantes non prise en charge.</translation>
+ <translation>La version de la mappe de variantes KeePass n’est pas prise charge.</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur du nom de table des variantes invalide</translation>
+ <translation>La longueur d’un nom d’entrée de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Données du nom d&apos;entrée de table des variantes invalide</translation>
+ <translation>Les données d’un nom d’entrée de la mappe de variantes sont invalides</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur de la valeur d’entrée de table des variantes invalide</translation>
+ <translation>La longueur d’une valeur d’entrée de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Données de la valeur d’entrée de table des variantes invalide</translation>
+ <translation>Les données d’une valeur d’entrée de la mappe de variantes sont invalides</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur de valeur booléenne d&apos;entrée de table des variantes invalide</translation>
+ <translation>La longueur d’une valeur d’entrée Bool de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur de la valeur entière 32 bits d&apos;entrée de table des variantes invalide</translation>
+ <translation>La longueur d’une valeur d’entrée Int32 de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map UInt32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur de la valeur entière non signée 32 bits d&apos;entrée de table des variantes invalide</translation>
+ <translation>La longueur d’une valeur d’entrée UInt32 de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map Int64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur de la valeur entière 64 bits d&apos;entrée de table des variantes invalide</translation>
+ <translation>La longueur d’une valeur d’entrée Int64 de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map UInt64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Longueur de la valeur entière non signée 64 bits d&apos;entrée de table des variantes invalide</translation>
+ <translation>La longueur d’une valeur d’entrée UInt64 de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Type d’entrée de table des variantes invalide</translation>
+ <translation>Le type d’une entrée de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Taille du type de champ de table des variantes invalide</translation>
+ <translation>La taille du type d’un champ de la mappe de variantes est invalide</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation>Identifiants invalides, veuillez réessayer.
-Si le problème persiste, le fichier de la base de données peut être corrompu.</translation>
+ <translation>Des identifiants invalides ont été fournis, veuillez ressayer.
+Si le problème se reproduit, le fichier de la base de données pourrait être corrompu.</translation>
</message>
<message>
<source>(HMAC mismatch)</source>
- <translation>(HMAC incohérent)</translation>
+ <translation>(HMAC ne correspond pas)</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Impossible de calculer la clé de la base de données : %1</translation>
</message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>Algorithme de chiffrement symétrique invalide.</translation>
+ <translation>L’algorithme de chiffrement symétrique est invalide</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Taille du vecteur d’initialisation du chiffrement symétrique non valide.</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Impossible de calculer la clé maître</translation>
+ <translation>La taille du chiffrement IV symétrique est invalide.</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Échec de sérialisation des paramètres KDF de table des variantes</translation>
+ <translation>Échec de sérialisation des paramètres KDF de la mappe de variantes.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Impossible de calculer la clé de la base de données : %1</translation>
</message>
</context>
<context>
@@ -3734,35 +3835,35 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Invalid compression flags length</source>
- <translation>Longueur des indicateurs de compression invalide</translation>
+ <translation>La longueur des drapeaux de compression est invalide.</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
- <translation>Algorithme de compression non pris en charge</translation>
+ <translation>L’algorithme de compression n’est pas pris en charge</translation>
</message>
<message>
<source>Invalid master seed size</source>
- <translation>Taille du salage initial invalide</translation>
+ <translation>La taille de la graine maîtresse est invalide</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Taille du salage transformé invalide</translation>
+ <translation>La taille de la semence de transformation est invalide</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation>Taille des cycles de transformation invalide</translation>
+ <translation>La taille des cycles de transformation est invalide</translation>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation>Taille des octets de début invalide</translation>
+ <translation>La taille des octets de début est invalide</translation>
</message>
<message>
<source>Invalid random stream id size</source>
- <translation>Taille de l’identifiant de flux aléatoire invalide</translation>
+ <translation>La taille de l’ID de flux aléatoire est invalide.</translation>
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>Taille du chiffrement de flux aléatoire intérieur invalide</translation>
+ <translation>Le chiffrement du flux intérieur aléatoire est invalide</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3773,33 +3874,33 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>Le fichier sélectionné est une ancienne base de données KeePass 1 (.kdb).
+ <translation>Le fichier sélectionné est une ancienne base de données KeePass 1 (.kdb).
-Vous pouvez l’importer en cliquant sur Base de données &gt; « Importer une base de données KeePass 1... »
-Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base de données importée avec l’ancienne version de KeePassX 0.4.</translation>
+Vous pouvez l’importer en cliquant sur Base de données &gt; « Importer une base de données KeePass 1… ».
+Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base de données importée avec l’ancienne version KeePassX 0.4.</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
- <translation>Version de la base de données KeePass 2 non prise en charge.</translation>
+ <translation>Version de base de données KeePass 2 non pris en charge.</translation>
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Longueur de l’UUID du chiffrement invalide : %1 (longueur=%2)</translation>
+ <translation>La longueur de l’UUID de chiffrement est invalide : %1 (longueur = %2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>Impossible de lire l&apos;UUID : %1</translation>
+ <translation>Impossible d’analyser l’UUID : %1</translation>
</message>
<message>
<source>Failed to read database file.</source>
- <translation>Impossible de lire le fichier de base de données.</translation>
+ <translation>Échec de lecture du fichier de base de données.</translation>
</message>
</context>
<context>
<name>KdbxXmlReader</name>
<message>
<source>XML parsing failure: %1</source>
- <translation>Erreur d’analyse XML : %1</translation>
+ <translation>Échec d’analyse XML : %1</translation>
</message>
<message>
<source>No root group</source>
@@ -3807,11 +3908,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Données ou UUID de l’icône manquant</translation>
+ <translation>L’UUID ou les données de l’icône manquent</translation>
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>Valeur ou clé de données personnalisée manquante</translation>
+ <translation>La valeur ou la clé des données personnalisées manque</translation>
</message>
<message>
<source>Multiple group elements</source>
@@ -3819,23 +3920,23 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Null group uuid</source>
- <translation>UUID du groupe nul</translation>
+ <translation>UUID de groupe nul</translation>
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Numéro de l’icône du groupe invalide</translation>
+ <translation>Le numéro de l’icône du groupe est invalide</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
- <translation>Valeur EnableAutoType invalide</translation>
+ <translation>La valeur EnableAutoType est invalide</translation>
</message>
<message>
<source>Invalid EnableSearching value</source>
- <translation>Valeur EnableSearching invalide</translation>
+ <translation>La valeur de EnableSearching est invalide</translation>
</message>
<message>
<source>No group uuid found</source>
- <translation>Aucun UUID de groupe trouvé</translation>
+ <translation>Aucun UUID de groupe n’a été trouvé</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
@@ -3843,7 +3944,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
- <translation>Temps ou UUID de DeletedObject manquant</translation>
+ <translation>L’UUID ou l’heure de DeletedObject manque</translation>
</message>
<message>
<source>Null entry uuid</source>
@@ -3851,7 +3952,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Numéro de l’icône de l’entrée invalide</translation>
+ <translation>Le numéro de l’icône de l’entrée est invalide</translation>
</message>
<message>
<source>History element in history entry</source>
@@ -3867,23 +3968,19 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Dupliquer l’attribut personnalisé trouvé</translation>
+ <translation>Un doublon d’attribut personnalisé a été trouvé</translation>
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Valeur ou clé de la chaîne de caractères de l’entrée manquante</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Un doublon de pièce jointe a été trouvé</translation>
+ <translation>La clé ou la valeur de chaîne de l’entrée manque</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Valeur ou clé du binaire de l’entrée manquante</translation>
+ <translation>La clé ou la valeur binaire de l’entrée manque</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>Association de fenêtre ou séquence de saisie automatique manquante</translation>
+ <translation>La fenêtre d’association ou la séquence de saisie automatique manque</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3891,7 +3988,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Invalid date time value</source>
- <translation>Valeur d’horodatage invalide</translation>
+ <translation>Valeur date/heure invalide</translation>
</message>
<message>
<source>Invalid color value</source>
@@ -3899,7 +3996,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Plage de couleur RVB invalide</translation>
+ <translation>Partie de couleur RVB invalide</translation>
</message>
<message>
<source>Invalid number value</source>
@@ -3907,7 +4004,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base
</message>
<message>
<source>Invalid uuid value</source>
- <translation>Valeur d&apos;UUID invalide</translation>
+ <translation>Valeur UUID invalide</translation>
</message>
<message>
<source>Unable to decompress binary</source>
@@ -3924,6 +4021,29 @@ Ligne %2, colonne %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Structure de fichier de paramètres KeeAgent invalide.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>La clé privée est une pièce jointe mais aucune pièce jointe n&apos;est disponible.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>La clé privée est vide</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Le fichier est trop important pour être un fichier clé</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Échec lors de l’ouverture de la clé privée</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3931,14 +4051,14 @@ Ligne %2, colonne %3</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
- <translation>Importer une base de données au format KeePass 1</translation>
+ <translation>Importer une base de données KeePass 1</translation>
</message>
</context>
<context>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation>Impossible de lire le fichier-clé.</translation>
+ <translation>Impossible de lire le fichier clé.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3950,56 +4070,52 @@ Ligne %2, colonne %3</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
- <translation>Version de base de données KeePass non prise en charge.</translation>
+ <translation>Version de base de données KeePass non prise en charge.</translation>
</message>
<message>
<source>Unable to read encryption IV</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Impossible de lire le vecteur d’initialisation du chiffrement</translation>
+ <translation>Impossible de lire le chiffrement IV</translation>
</message>
<message>
<source>Invalid number of groups</source>
- <translation>Nombre de groupes invalide</translation>
+ <translation>Le nombre de groupes est invalide</translation>
</message>
<message>
<source>Invalid number of entries</source>
- <translation>Nombre d’entrées invalide</translation>
+ <translation>Le nombre d’entrées est invalide</translation>
</message>
<message>
<source>Invalid content hash size</source>
- <translation>Taille de l’empreinte numérique du contenu invalide</translation>
+ <translation>La taille de l’empreinte du contenu est invalide</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Taille du salage transformé invalide</translation>
+ <translation>La taille de la semence de transformation est invalide</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>Nombre de cycles de transformation invalide</translation>
+ <translation>Le nombre de cycles de transformation est invalide</translation>
</message>
<message>
<source>Unable to construct group tree</source>
- <translation>Impossible de créer l’arborescence du groupe</translation>
+ <translation>Impossible de construire l’arborescence du groupe</translation>
</message>
<message>
<source>Root</source>
<translation>Racine</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossible de calculer la clé maître</translation>
- </message>
- <message>
<source>Key transformation failed</source>
- <translation>Échec de la transformation de la clé</translation>
+ <translation>Échec de transformation de la clé</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>Numéro du type de champ groupe invalide</translation>
+ <translation>Le numéro de type du champ de groupe est invalide</translation>
</message>
<message>
<source>Invalid group field size</source>
- <translation>Taille du champ groupe invalide</translation>
+ <translation>La taille du champ de groupe est invalide</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
@@ -4007,89 +4123,93 @@ Ligne %2, colonne %3</translation>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation>Taille du champ d&apos;identifiant de groupe incorrect</translation>
+ <translation>La taille du champ « ID du groupe » est incorrecte</translation>
</message>
<message>
<source>Incorrect group creation time field size</source>
- <translation>Taille du champ de date de création du groupe incorrect</translation>
+ <translation>Taille du champ &quot;date du la création du groupe&quot; incorrect.</translation>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation>Taille du champ d&apos;heure de modification du groupe incorrect</translation>
+ <translation>Taille du champ heure de modification du groupe non correct</translation>
</message>
<message>
<source>Incorrect group access time field size</source>
- <translation>Taille du champ de dernier accès au groupe incorrect</translation>
+ <translation>La taille du champ de date d’accès du groupe est incorrecte.</translation>
</message>
<message>
<source>Incorrect group expiry time field size</source>
- <translation>Taille du champ de date d’expiration du groupe incorrect</translation>
+ <translation>La taille du champ de date d’expiration du groupe est incorrecte.</translation>
</message>
<message>
<source>Incorrect group icon field size</source>
- <translation>Taille du champ d&apos;icône du groupe incorrect</translation>
+ <translation>Taille du champ &quot;icône du groupe&quot; incorrect.</translation>
</message>
<message>
<source>Incorrect group level field size</source>
- <translation>Taille du champ de niveau du groupe incorrecte</translation>
+ <translation>La taille de champ du niveau du groupe est incorrecte</translation>
</message>
<message>
<source>Invalid group field type</source>
- <translation>Type du champ groupe incorrect</translation>
+ <translation>La taille du champ de groupe est invalide</translation>
</message>
<message>
<source>Missing group id or level</source>
- <translation>Niveau ou identifiant du groupe manquant</translation>
+ <translation>L’ID ou le niveau du groupe manque</translation>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>Type de nombre du champ d’entrée manquant</translation>
+ <translation>Le numéro de type du champ d’entrée manque</translation>
</message>
<message>
<source>Invalid entry field size</source>
- <translation>Taille du champ d’entrée invalide</translation>
+ <translation>La taille du champ d’entrée est invalide</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>Les données d’entrée lues ne correspondent pas à la taille</translation>
+ <translation>Les données du champ d’entrée lues ne correspondent pas à la taille.</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Taille du champ UUID de l’entrée invalide</translation>
+ <translation>La taille du champ UUID de l’entrée est invalide</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>Taille du champ identifiant de groupe de l’entrée invalide</translation>
+ <translation>La taille du champ d’ID de groupe de l’entrée est invalide</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation>Taille du champ d&apos;icône de l’entrée invalide</translation>
+ <translation>La taille du champ d’icône de l’entrée est invalide</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
- <translation>Taille du champ de date de création d’entrée invalide</translation>
+ <translation>La taille du champ de date de création de l’entrée est invalide</translation>
</message>
<message>
<source>Invalid entry modification time field size</source>
- <translation>Taille du champ de date de modification d’entrée invalide</translation>
+ <translation>La taille du champ de date de modification de l’entrée est invalide</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Taille du champ de date d&apos;expiration d’entrée invalide</translation>
+ <translation>La taille du champ de date d’expiration de l’entrée est invalide</translation>
</message>
<message>
<source>Invalid entry field type</source>
- <translation>Type de champ d&apos;entrée invalide</translation>
+ <translation>Le type du champ d’entrée est invalide</translation>
</message>
<message>
<source>unable to seek to content position</source>
- <translation>impossible de se déplacer à la position du contenu</translation>
+ <translation>incapable de se déplacer à la position du contenu</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation>Identifiants invalides, veuillez réessayer.
-Si le problème persiste, le fichier de la base de données peut être corrompu.</translation>
+ <translation>Des identifiants invalides ont été fournis, veuillez ressayer.
+Si le problème se reproduit, le fichier de la base de données pourrait être corrompu.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Impossible de calculer la clé de la base de données</translation>
</message>
</context>
<context>
@@ -4104,7 +4224,7 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Imported from %1</source>
- <translation>Importé depuis %1</translation>
+ <translation>Importé de %1</translation>
</message>
<message>
<source>Exported to %1</source>
@@ -4116,11 +4236,11 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Import is disabled in settings</source>
- <translation>L&apos;importation est désactivée dans les paramètres</translation>
+ <translation>L’importation est désactivée dans les paramètres</translation>
</message>
<message>
<source>Export is disabled in settings</source>
- <translation>L&apos;exportation est désactivée dans les paramètres</translation>
+ <translation>L’exportation est désactivée dans les paramètres</translation>
</message>
<message>
<source>Inactive share</source>
@@ -4143,11 +4263,11 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
<name>KeyComponentWidget</name>
<message>
<source>Key Component</source>
- <translation>Composant clé</translation>
+ <translation>Élément clé</translation>
</message>
<message>
<source>Key Component Description</source>
- <translation>Description du composant clé</translation>
+ <translation>Description de l’élément clé</translation>
</message>
<message>
<source>Cancel</source>
@@ -4155,7 +4275,7 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Key Component set, click to change or remove</source>
- <translation>Composant clé définie, cliquez pour le modifier ou le supprimer</translation>
+ <translation>Le composant clé est défini, cliquez pour le changer ou le supprimer</translation>
</message>
<message>
<source>Add %1</source>
@@ -4165,7 +4285,7 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
<message>
<source>Change %1</source>
<comment>Change a key component</comment>
- <translation>Modifier %1</translation>
+ <translation>Changer %1</translation>
</message>
<message>
<source>Remove %1</source>
@@ -4175,7 +4295,7 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
<message>
<source>%1 set, click to change or remove</source>
<comment>Change or remove a key component</comment>
- <translation>%1 défini, cliquer pour modifier ou supprimer</translation>
+ <translation>%1 est défini, cliquez pour le changer ou le supprimer</translation>
</message>
</context>
<context>
@@ -4186,34 +4306,25 @@ Si le problème persiste, le fichier de la base de données peut être corrompu.
</message>
<message>
<source>Key File</source>
- <translation>Fichier-clé</translation>
+ <translation>Fichier clé</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Vous pouvez ajouter un fichier-clé contenant des données aléatoires pour une sécurité accrue.&lt;/p&gt;&lt;p&gt;Vous devez le conserver secrètement et ne jamais le perdre ou vous ne pourrez plus vous connecter !&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Pour une sécurité accrue, vous pouvez ajouter un fichier clé qui comprend des octets aléatoires.&lt;/p&gt;&lt;p&gt;Vous devez le garder secret et ne jamais le perdre ou vous ne pourrez plus vous connecter.&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Ancien format de fichier-clé</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Vous utilisez un ancien format de fichier-clé qui pourrait ne plus être pris en charge à l’avenir.
-
-Veuillez ouvrir les paramètres de clé maître et générer un nouveau fichier-clé.</translation>
+ <translation>Format de fichier clé hérité</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>Erreur durant le chargement du fichier-clé « %1 »
+ <translation>Erreur de chargement du fichier clé ’%1’
Message : %2</translation>
</message>
<message>
<source>Key files</source>
- <translation>Fichiers-clé</translation>
+ <translation>Fichiers clés</translation>
</message>
<message>
<source>All files</source>
@@ -4221,27 +4332,27 @@ Message : %2</translation>
</message>
<message>
<source>Create Key File...</source>
- <translation>Créer un fichier-clé…</translation>
+ <translation>Créer un fichier clé…</translation>
</message>
<message>
<source>Error creating key file</source>
- <translation>Erreur lors de la création du fichier-clé</translation>
+ <translation>Erreur lors de la création du fichier clé</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>Impossible de créer le fichier-clé : %1</translation>
+ <translation>Impossible de créer le fichier clé : %1</translation>
</message>
<message>
<source>Select a key file</source>
- <translation>Sélectionner un fichier-clé</translation>
+ <translation>Sélectionner un fichier clé</translation>
</message>
<message>
<source>Key file selection</source>
- <translation>Sélection du fichier-clé</translation>
+ <translation>Sélection du fichier clé</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation>Rechercher un fichier-clé</translation>
+ <translation>Rechercher un fichier clé</translation>
</message>
<message>
<source>Browse...</source>
@@ -4249,29 +4360,38 @@ Message : %2</translation>
</message>
<message>
<source>Generate a new key file</source>
- <translation>Générer un nouveau fichier-clé</translation>
+ <translation>Générer un nouveau fichier clé</translation>
</message>
<message>
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
- <translation>Note : n&apos;utilisez pas un fichier qui pourrait être modifié au risque de ne pas pouvoir déverrouiller votre base de données !</translation>
+ <translation>Note : N’utilisez pas un fichier qui pourrait changer, car cela pourrait vous empêcher de déverrouiller votre base de données.</translation>
</message>
<message>
<source>Invalid Key File</source>
- <translation>Fichier-clé invalide</translation>
+ <translation>Le fichier clé est invalide</translation>
</message>
<message>
<source>You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file.</source>
- <translation>Vous ne pouvez pas utiliser la base de données actuelle comme son propre fichier-clé. Veuillez choisir un autre fichier ou générer un nouveau fichier-clé.</translation>
+ <translation>Vous ne pouvez pas utiliser la base de données actuelle comme son propre fichier clé. Veuillez choisir un autre fichier ou générer un nouveau fichier clé.</translation>
</message>
<message>
<source>Suspicious Key File</source>
- <translation>Fichier-clé douteux</translation>
+ <translation>Le fichier clé est douteux</translation>
</message>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
- <translation>Le fichier-clé sélectionné semble être une base de données de mots de passe. Un fichier-clé est un fichier statique qui ne doit jamais être modifié au risque de perdre tout accès à votre base de données.
-Êtes-vous sûr de vouloir continuer avec ce fichier ?</translation>
+ <translation>Le fichier clé sélectionné semble être un fichier de base de données de mots de passe. Un fichier clé doit être un fichier statique qui ne change jamais, ou vous perdrez irrémédiablement l’accès à votre base de données.
+Voulez-vous vraiment poursuivre avec ce fichier ?</translation>
+ </message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Vous utilisez un format de fichier clé hérité qui pourrait ne plus être pris en charge à l’avenir.
+
+Vous pouvez générer un nouveau fichier clé dans les paramètres de sécurité de la base de données.</translation>
</message>
</context>
<context>
@@ -4281,18 +4401,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Base de données</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Bases de données récentes</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Aide</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntrées</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Groupes</translation>
</message>
@@ -4302,53 +4414,17 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>&amp;Quit</source>
- <translation>&amp;Quitter</translation>
+ <translation>&amp;Fermer</translation>
</message>
<message>
<source>&amp;About</source>
<translation>&amp;À propos</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Ouvrir une base de données…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Enregistrer la base de données</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Fermer la base de données</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Supprimer l’entrée</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Modifier le groupe</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Supprimer le groupe</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Enre&amp;gistrer la base de données sous…</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Paramètres de la base de données</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Cloner l’entrée</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copier le nom d’utilisateur</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copier le nom d’utilisateur dans le presse-papiers</translation>
</message>
@@ -4361,10 +4437,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Paramètres</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Verrouiller les bases de données</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titre</translation>
</message>
@@ -4389,16 +4461,8 @@ Are you sure you want to continue with this file?</source>
<translation>Copier les notes dans le presse-papiers</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exporter dans un fichier CSV…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configurer TOTP…</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
- <translation>Copier le &amp;TOTP</translation>
+ <translation>Copie &amp;TOTP</translation>
</message>
<message>
<source>E&amp;mpty recycle bin</source>
@@ -4410,7 +4474,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Erreur d’accès au fichier de configuration %1</translation>
+ <translation>Erreur d’accès pour le fichier de configuration %1</translation>
</message>
<message>
<source>Settings</source>
@@ -4418,219 +4482,393 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Toggle window</source>
- <translation>Basculer de fenêtre</translation>
+ <translation>Activer ou désactiver la fenêtre</translation>
</message>
<message>
<source>Quit KeePassXC</source>
- <translation>Quitter KeePassXC</translation>
+ <translation>Fermer KeePassXC</translation>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>Veuillez appuyer sur le bouton de votre YubiKey  !</translation>
+ <translation>Veuillez appuyez sur le bouton de votre YubiKey</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>AVERTISSEMENT : vous utilisez une version instable de KeePassXC  !
+ <translation>AVERTISSEMENT : Vous utilisez une version instable du KeePassXC.
Le risque de corruption est élevé, conservez une sauvegarde de vos bases de données.
Cette version n’est pas destinée à un usage régulier.</translation>
</message>
<message>
<source>&amp;Donate</source>
- <translation>Faire un &amp;don</translation>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation>Signaler un &amp;bogue</translation>
+ <translation>&amp;Faire un don</translation>
</message>
<message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
- <translation>ATTENTION : votre version de Qt pourrait provoquer un crash de KeePassXC avec un clavier virtuel !
-Nous recommandons l&apos;utilisation de l&apos;AppImage, disponible sur notre page de téléchargements.</translation>
+ <translation>AVERTISSEMENT : Votre version de Qt pourrait faire planter KeePassXC avec un clavier virtuel.
+Nous recommandons d’utiliser l’AppImage proposée sur notre page de téléchargement.</translation>
</message>
<message>
<source>&amp;Import</source>
<translation>&amp;Importer</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copier l&apos;att&amp;ribut ...</translation>
+ <source>Create a new database</source>
+ <translation>Créer une nouvelle base de données</translation>
+ </message>
+ <message>
+ <source>Merge from another KDBX database</source>
+ <translation>Fusionner d’une autre base de données KDBX</translation>
+ </message>
+ <message>
+ <source>Add a new entry</source>
+ <translation>Ajouter une entrée</translation>
+ </message>
+ <message>
+ <source>View or edit entry</source>
+ <translation>Voir ou modifier l’entrée</translation>
+ </message>
+ <message>
+ <source>Add a new group</source>
+ <translation>Ajouter un groupe</translation>
+ </message>
+ <message>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>Saisir &amp;automatiquement</translation>
+ </message>
+ <message>
+ <source>Open &amp;URL</source>
+ <translation>Ouvrir l’&amp;URL</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>Importer une base de données KeePass 1</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>Importer un fichier CSV</translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>NOTE : Vous utilisez une préversion de KeePassXC.
+Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas destinée à un usage régulier.</translation>
+ </message>
+ <message>
+ <source>Check for updates on startup?</source>
+ <translation>Vérifier la présence de mises à jour au démarrage ?</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Voulez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ?</translation>
+ </message>
+ <message>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Vous pouvez toujours vérifier manuellement la présence de mises à jour à partir du menu de l’application.</translation>
+ </message>
+ <message>
+ <source>&amp;Export</source>
+ <translation>&amp;Exporter</translation>
+ </message>
+ <message>
+ <source>Sort &amp;A-Z</source>
+ <translation>Tri &amp;A-Z</translation>
+ </message>
+ <message>
+ <source>Sort &amp;Z-A</source>
+ <translation>Tri &amp;Z-A</translation>
+ </message>
+ <message>
+ <source>&amp;Password Generator</source>
+ <translation>Générateur de mot de &amp;passe</translation>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation>Importer un coffre 1Password</translation>
</message>
<message>
- <source>&amp;New database...</source>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Guide de démarrage</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>Guide d’&amp;utilisation</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Raccourcis clavier</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>Bases de données &amp;récentes</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Entrées</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Copier l&apos;att&amp;ribut</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Affichage</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation>Thème</translation>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Vérifier les mises à jour</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Ouvrir une base de données...</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>Enregistrer la base de donnée&amp;s</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Fermer la base de données</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
<translation>&amp;Nouvelle base de données...</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Créer une nouvelle base de données</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation>Fusio&amp;nner à partir d&apos;une base de données...</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Fusionner depuis une base de données...</translation>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nouvelle entrée...</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Fusionner depuis une autre base de données KDBX</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation>Modifi&amp;er l’entrée...</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nouvelle entrée</translation>
+ <source>&amp;Delete Entry…</source>
+ <translation>S&amp;upprimer l&apos;entrée...</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Ajouter une entrée</translation>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Nouveau groupe...</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>Modifier l’entrée</translation>
+ <source>&amp;Edit Group…</source>
+ <translation>Modifi&amp;er le groupe...</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Voir ou modifier l&apos;entrée</translation>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Supprimer le groupe...</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nouveau groupe</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Télécharger toutes les &amp;favoricônes…</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Ajouter un groupe</translation>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Enre&amp;gistrer la base de données sous...</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Changer la clé &amp;maître…</translation>
+ <source>Database &amp;Security…</source>
+ <translation>&amp;Sécurité de la base de données…</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
+ <source>Database &amp;Reports...</source>
+ <translation>&amp;Rapports de la base de données…</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistiques, bilan de santé, etc.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
<translation>Paramètres de la base de &amp;données...</translation>
</message>
<message>
- <source>Copy &amp;password</source>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Dupliquer l&apos;entrée</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>&amp;Monter</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Monter l&apos;entrée d&apos;un cran</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Desce&amp;ndre</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Descendre l&apos;entrée d&apos;un cran</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Copier le nom d&apos;&amp;utilisateur</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
<translation>Copier le mot de &amp;passe</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>Effectuer une saisie &amp;automatique</translation>
+ <source>Download &amp;Favicon</source>
+ <translation>Télécharger une &amp;favoricône</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Ouvrir une &amp;URL</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>Verrouiller &amp;les bases de données</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Base de données KeePass 1...</translation>
+ <source>&amp;CSV File…</source>
+ <translation>Fichier &amp;CSV…</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Importer une base de données KeePass 1</translation>
+ <source>&amp;HTML File…</source>
+ <translation>Fichier &amp;HTML…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>Base de données KeePass 1…</translation>
</message>
<message>
- <source>CSV file...</source>
+ <source>1Password Vault…</source>
+ <translation>Coffre 1Password…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
<translation>Fichier CSV...</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Importer un fichier CSV</translation>
+ <source>Show TOTP</source>
+ <translation>Afficher TOTP</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Afficher le TOTP...</translation>
+ <source>Show QR Code</source>
+ <translation>Afficher le QR code</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Afficher le QR Code du TOTP...</translation>
+ <source>Set up TOTP…</source>
+ <translation>Définir un TOTP...</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>AVERTISSEMENT : vous utilisez une pré-version de KeePassXC  !
-Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas destinée à un usage régulier.</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Signaler un &amp;bogue</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>Vérifier les mises à jour au démarrage ?</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Ouvrir le guide de démarrage</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Voulez-vous que KeePassXC vérifie les mises à jour au démarrage ?</translation>
+ <source>&amp;Online Help</source>
+ <translation>Aide en &amp;ligne</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Vous pouvez en tout temps vérifier les mises à jour manuellement depuis le menu de l&apos;application.</translation>
+ <source>Go to online documentation</source>
+ <translation>Accéder à la documentation en ligne</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Exporter</translation>
+ <source>Open User Guide</source>
+ <translation>Ouvrir le guide d’utilisation</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Vérifier les mises à jour...</translation>
+ <source>Save Database Backup...</source>
+ <translation>Enregistrer une copie de sécurité de la base de données...</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Téléch&amp;arger toutes les favicons</translation>
+ <source>Add key to SSH Agent</source>
+ <translation>Ajouter une clé à l&apos;agent SSH</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Tri &amp;A-Z</translation>
+ <source>Remove key from SSH Agent</source>
+ <translation>Supprimer la clé de l’agent SSH</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Tri &amp;Z-A</translation>
+ <source>Compact Mode</source>
+ <translation>Mode compact</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>Générateur de mot de &amp;passe</translation>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Télécharger la favicon</translation>
+ <source>Light</source>
+ <translation>Clair</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exporter vers un fichier HTML...</translation>
+ <source>Dark</source>
+ <translation>Sombre</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>Gestionnaire 1Password...</translation>
+ <source>Classic (Platform-native)</source>
+ <translation>Classique (de la plateforme)</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importer une base de données 1Password</translation>
+ <source>Show Toolbar</source>
+ <translation>Afficher la barre d’outils</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Guide de démarrage</translation>
+ <source>Show Preview Panel</source>
+ <translation>Afficher le panneau de prévisualisation</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Ouvrir le guide de démarrage au format PDF</translation>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Ne plus afficher pour cette version</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Aide en &amp;ligne...</translation>
+ <source>Restart Application?</source>
+ <translation>Redémarrer l’application ?</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Consulter la documentation en ligne (ouvre le navigateur internet)</translation>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Pour appliquer ce paramètre, vous devez redémarrer l’application. Souhaitez-vous la démarrer maintenant ?</translation>
</message>
+</context>
+<context>
+ <name>ManageDatabase</name>
<message>
- <source>&amp;User Guide</source>
- <translation>Guide &amp;utilisateur</translation>
+ <source>Database settings</source>
+ <translation>Paramètres de la base de données</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Ouvrir le guide utilisateur au format PDF</translation>
+ <source>Edit database settings</source>
+ <translation>Modifier les paramètres de la base de données</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Raccourcis clavier</translation>
+ <source>Unlock database</source>
+ <translation>Déverrouiller la base de données</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Déverrouiller la base de données pour afficher plus d’informations</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Verrouiller la base de données</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Déconnecter</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Déconnecter cette application</translation>
</message>
</context>
<context>
@@ -4645,51 +4883,51 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Overwriting %1 [%2]</source>
- <translation>Remplacement de %1 [%2]</translation>
+ <translation>Écrasement de %1 [%2]</translation>
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>ancienne entrée fusionnée de la base de données « %1 »</translation>
+ <translation>ancienne entrée fusionnée de la base de données &quot;%1&quot;</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
- <translation>Ajout d&apos;une sauvegarde pour l&apos;ancienne cible %1 [%2]</translation>
+ <translation>Ajout d’une sauvegarde pour l’ancienne cible %1 [%2]</translation>
</message>
<message>
<source>Adding backup for older source %1 [%2]</source>
- <translation>Ajout d&apos;une sauvegarde pour l&apos;ancienne source %1 [%2]</translation>
+ <translation>Ajout d’une sauvegarde pour l’ancienne source %1 [%2]</translation>
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>Ré-application de l&apos;ancienne entrée cible sur la nouvelle source %1 [%2]</translation>
+ <translation>Ré-application de l’ancienne entrée cible sur la nouvelle source %1 [%2]</translation>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>Ré-application de l&apos;ancienne entrée source sur la nouvelle cible %1 [%2]</translation>
+ <translation>Ré-application de l’ancienne entrée source sur la nouvelle cible %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
- <translation>Synchronisation depuis une source plus récente %1 [%2]</translation>
+ <translation>Synchronisation avec une source plus récente %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from older source %1 [%2]</source>
- <translation>Synchronisation depuis une source plus ancienne %1 [%2]</translation>
+ <translation>Synchronisation avec une source plus ancienne %1 [%2]</translation>
</message>
<message>
<source>Deleting child %1 [%2]</source>
- <translation>Suppression de l&apos;enfant %1 [%2]</translation>
+ <translation>Suppression de l’enfant %1 [%2]</translation>
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
- <translation>Suppression de l&apos;orphelin %1 [%2]</translation>
+ <translation>Suppression de l’orphelin %1 [%2]</translation>
</message>
<message>
<source>Changed deleted objects</source>
- <translation>Objets supprimés modifiés</translation>
+ <translation>Objets supprimés changés</translation>
</message>
<message>
<source>Adding missing icon %1</source>
- <translation>Ajout de l&apos;icône manquante %1</translation>
+ <translation>Ajout de l’icône %1 manquante</translation>
</message>
<message>
<source>Removed custom data %1 [%2]</source>
@@ -4704,7 +4942,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<name>NewDatabaseWizard</name>
<message>
<source>Create a new KeePassXC database...</source>
- <translation>Créer une nouvelle base de données KeePassXC...</translation>
+ <translation>Créer une nouvelle base de données KeePassXC</translation>
</message>
<message>
<source>Root</source>
@@ -4716,15 +4954,11 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<name>NewDatabaseWizardPage</name>
<message>
<source>WizardPage</source>
- <translation>Page d&apos;assistant de nouvelle base</translation>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation>Paramètres de &amp;chiffrement</translation>
+ <translation>Page d’aide</translation>
</message>
<message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Vous pouvez ajuster ici les paramètres de chiffrement de la base de données. Vous pourrez sans problème les modifier plus tard dans les paramètres de la base de données.</translation>
+ <translation>Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données.</translation>
</message>
<message>
<source>Advanced Settings</source>
@@ -4734,53 +4968,64 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<source>Simple Settings</source>
<translation>Paramètres simplifiés</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Paramètres de chiffrement</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Identifiants de la base de données</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Vous pouvez ajuster ici les paramètres de chiffrement de la base de données. Vous pourrez sans problème les modifier plus tard dans les paramètres de la base de données.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Un jeu d’identifiants connus de vous seul, qui protège votre base de données.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Clé maître de la base de données</translation>
+ <source>Encryption Settings</source>
+ <translation>Paramètres de chiffrement</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Une clé maître connue de vous seul qui protège votre base de données.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données.</translation>
</message>
</context>
<context>
<name>NewDatabaseWizardPageMetaData</name>
<message>
<source>General Database Information</source>
- <translation>Informations générales de base de données</translation>
+ <translation>Renseignements généraux de la base de données</translation>
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>Veuillez indiquer le nom et éventuellement une description pour votre nouvelle base de données :</translation>
+ <translation>Veuillez renseigner le nom et optionnellement une description pour votre nouvelle base de données :</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Gestionnaire de mots de passe</translation>
</message>
</context>
<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
- <translation>OpData01 invalide, ne contient pas d&apos;en-tête</translation>
+ <translation>OpData01 invalide, ne contient pas d’en-tête</translation>
</message>
<message>
<source>Unable to read all IV bytes, wanted 16 but got %1</source>
- <translation>Impossible de lire les octets du vecteur d&apos;initialisation, 16 nécessaires, %1 lus</translation>
+ <translation>Impossible de lire les octets du vecteur d’initialisation, 16 nécessaires, %1 lus</translation>
</message>
<message>
<source>Unable to init cipher for opdata01: %1</source>
- <translation>Impossible d&apos;initialiser le chiffrage pour opdata01 : %1</translation>
+ <translation>Impossible d’initialiser le chiffrage pour opdata01 : %1</translation>
</message>
<message>
<source>Unable to read all HMAC signature bytes</source>
@@ -4792,7 +5037,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Unable to process clearText in place</source>
- <translation>Impossible d&apos;activer le traitement de ClearText</translation>
+ <translation>Impossible d’activer le traitement de ClearText</translation>
</message>
<message>
<source>Expected %1 bytes of clear-text, found %2</source>
@@ -4804,7 +5049,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<message>
<source>Read Database did not produce an instance
%1</source>
- <translation>La base de données lue n&apos;a généré aucune instance
+ <translation>La base de données lue n’a généré aucune instance
%1</translation>
</message>
</context>
@@ -4839,11 +5084,11 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Une clé OpenSSH est requise, mais le fichier-clé est invalide</translation>
+ <translation>Le fichier clé est invalide, une clé OpenSSH est attendue</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
- <translation>Plage PEM incohérente</translation>
+ <translation>La limite PEM ne correspond pas</translation>
</message>
<message>
<source>Base64 decoding failed</source>
@@ -4851,15 +5096,15 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Key file way too small.</source>
- <translation>Le fichier-clé est bien trop petit.</translation>
+ <translation>Le fichier clé est bien trop petit.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>Identifiant d’en-tête magique du fichier-clé invalide</translation>
+ <translation>L’ID de l’en-tête magique du fichier clé est invalide</translation>
</message>
<message>
<source>Found zero keys</source>
- <translation>Acune clé n’a été trouvée</translation>
+ <translation>Zéro clés trouvées</translation>
</message>
<message>
<source>Failed to read public key.</source>
@@ -4867,11 +5112,11 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>Le fichier-clé est corrompu. Échec de lecture de la clé privée.</translation>
+ <translation>Le fichier clé est corrompu, échec de lecture de la clé privée</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
- <translation>Aucune donnée utile de clé privée à décrypter</translation>
+ <translation>Il n’y a pas de données de clé privée à déchiffrer</translation>
</message>
<message>
<source>Trying to run KDF without cipher</source>
@@ -4879,43 +5124,43 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Une phrase secrète est exigée pour déchiffrer cette clé</translation>
+ <translation>Une phrase de passe est exigée pour déchiffrer cette clé</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>Échec de calcul de la clé. Fichier-clé corrompu ?</translation>
+ <translation>Échec de dérivation de clé. Le fichier clé est-il corrompu ?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Échec de déchiffrement. Phrase secrète erronée ?</translation>
+ <translation>Échec de déchiffrement. La phrase de passe est-elle erronée ?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>Fin de fichier inattendue lors de la lecture de la clé publique</translation>
+ <translation>End-of-file inattendu lors de la lecture de la clé publique</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>Fin de fichier inattendue lors de la lecture de la clé privée</translation>
+ <translation>End-of-file inattendu lors de la lecture de la clé privée</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
- <translation>Impossible d’écrire une clé publique car elle est vide</translation>
+ <translation>Impossible d’écrire la clé publique, car elle est vide</translation>
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>Fin de fichier inattendue lors de l’écriture de la clé publique</translation>
+ <translation>End-of-file inattendu lors de l’écriture de la clé publique</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>Impossible d’écrire une clé privée car elle est vide</translation>
+ <translation>Impossible d’écrire la clé privée, car elle est vide</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>Fin de fichier inattendue lors de l’écriture de la clé privée</translation>
+ <translation>End-of-file inattendu lors de l’écriture de la clé privée</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation>Type de clé non pris en charge : %1</translation>
+ <translation>Type de clé non géré : %1</translation>
</message>
<message>
<source>Unknown cipher: %1</source>
@@ -4923,7 +5168,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>Le vecteur d’initialisation du chiffrage est trop court pour la KDF MD5</translation>
+ <translation>Le chiffrement IV est trop court pour le KDF MD5</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
@@ -4942,18 +5187,30 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Passwords match so far</source>
- <translation>Les mots de passe correspondent jusqu&apos;à présent</translation>
+ <translation>Les mots de passe correspondent jusqu’à présent</translation>
+ </message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Activer ou désactiver le mot de passe (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Générer un mot de passe (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Avertissement : verrouillage majuscules activé !</translation>
</message>
</context>
<context>
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>Saisir un mot de passe :</translation>
+ <translation>Saisir le mot de passe :</translation>
</message>
<message>
<source>Confirm password:</source>
- <translation>Confirmer le mot de passe :</translation>
+ <translation>Confirmation du mot de passe :</translation>
</message>
<message>
<source>Password</source>
@@ -4968,25 +5225,13 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<translation>Les mots de passe ne correspondent pas.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Générer un mot de passe maître</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Champ de mot de passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Basculer l&apos;affichage du mot de passe</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Champ de confirmation du mot de passe</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Basculer l&apos;affichage du générateur de mot de passe</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4995,10 +5240,6 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Mot de passe :</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>force</translation>
@@ -5013,7 +5254,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Character Types</source>
- <translation>Types de caractères :</translation>
+ <translation>Types de caractères:</translation>
</message>
<message>
<source>Numbers</source>
@@ -5025,7 +5266,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Exclude look-alike characters</source>
- <translation>Exclure les caractères semblables</translation>
+ <translation>Exclure les caractères qui se ressemblent</translation>
</message>
<message>
<source>Pick characters from every group</source>
@@ -5037,7 +5278,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Passphrase</source>
- <translation>Phrase secrète</translation>
+ <translation>Phrase de passe</translation>
</message>
<message>
<source>Wordlist:</source>
@@ -5048,29 +5289,21 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<translation>Séparateur de mot :</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copier</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accepter</translation>
- </message>
- <message>
<source>Close</source>
<translation>Fermer</translation>
</message>
<message>
<source>Entropy: %1 bit</source>
- <translation>Entropie : %1 bits</translation>
+ <translation>Entropie : %1 bits</translation>
</message>
<message>
<source>Password Quality: %1</source>
- <translation>Qualité du mot de passe : %1</translation>
+ <translation>Qualité du mot de passe : %1</translation>
</message>
<message>
<source>Poor</source>
<comment>Password quality</comment>
- <translation>Mauvais</translation>
+ <translation>Pauvre</translation>
</message>
<message>
<source>Weak</source>
@@ -5133,7 +5366,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>&quot; &apos;</source>
- <translation>&quot; &apos;</translation>
+ <translation>&quot; ’</translation>
</message>
<message>
<source>&lt;*+!?=</source>
@@ -5145,23 +5378,15 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Logograms</source>
- <translation>Logogrammes</translation>
+ <translation>Logogramme</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Basculer vers le mode simplifié</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Simple</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
- <translation>Jeu de caractères à exclure du mot de passe généré</translation>
+ <translation>Ensemble de caractères à exclure du mot de passe généré</translation>
</message>
<message>
<source>Do not include:</source>
@@ -5169,7 +5394,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation>Ajouter les lettres non-hexadécimales à la liste « Ne pas inclure »</translation>
+ <translation>Ajouter les lettres non-hexadécimales à la liste &quot;Ne pas inclure&quot;</translation>
</message>
<message>
<source>Hex</source>
@@ -5177,15 +5402,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation>Caractères exclus : « 0 », « 1 », « l », « I », « O », « | », « . »</translation>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation>No&amp;mbre de mots :</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Régénérer</translation>
+ <translation>Les caractères exclus sont : « 0 », « 1 », « l », « I », « O », « | », « . »</translation>
</message>
<message>
<source>Generated password</source>
@@ -5236,10 +5453,6 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<translation>Copier le mot de passe</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Accepter le mot de passe</translation>
- </message>
- <message>
<source>lower case</source>
<translation>minuscules</translation>
</message>
@@ -5252,8 +5465,44 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<translation>Noms Propres</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Basculer l&apos;affichage du mot de passe</translation>
+ <source>Generate Password</source>
+ <translation>Générer un mot de passe</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Choisir également parmi :</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Autres caractères à utiliser pour le mot de passe généré</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Autres caractères</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Nombre de mots :</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Échap</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Confirmer le mot de passe</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Effacer</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Régénérer le mot de passe (%1)</translation>
</message>
</context>
<context>
@@ -5266,6 +5515,58 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<source>Statistics</source>
<translation>Statistiques</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Mot de passe trop faible</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Entropie du mot de passe : %1 bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Mot de passe faible</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Utilisé dans %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Mot de passe utilisé %1 fois</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Mot de passe expiré</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Mot de passe expirant le %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Mot de passe expirant prochainement</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Mot de passe expirant dans %1 jours</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Mot de passe expirant bientôt</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Mot de passe expirant le %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Bilan de santé</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP - Mot de passe compromis</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5303,14 +5604,14 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Continue</source>
- <translation>Continuer</translation>
+ <translation>Poursuivre</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>Database not opened</source>
- <translation>La base de données n’est pas ouverte </translation>
+ <translation>La base de données n’est pas ouverte</translation>
</message>
<message>
<source>Database hash not available</source>
@@ -5330,7 +5631,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>L’association à KeePassXC a échoué, veuillez réessayer</translation>
+ <translation>L’association à KeePassXC a échoué, veuillez ressayer</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5350,7 +5651,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>No logins found</source>
- <translation>Aucun identifiant trouvé</translation>
+ <translation>Aucuns identifiants trouvés</translation>
</message>
<message>
<source>Unknown error</source>
@@ -5366,7 +5667,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Key file of the database.</source>
- <translation>Fichier-clé de la base de données.</translation>
+ <translation>Fichier clé de la base de données.</translation>
</message>
<message>
<source>path</source>
@@ -5390,7 +5691,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Demande du mot de passe de l’entrée.</translation>
+ <translation>Demander le mot de passe de l’entrée.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
@@ -5405,17 +5706,13 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<translation>Chemin de l’entrée à ajouter.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copier le mot de passe d’une entrée dans le presse-papiers.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Chemin de l’entrée à épingler.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Temps imparti en secondes avant effacement du presse-papiers.</translation>
+ <translation>Délai en secondes avant effacement du presse-papiers.</translation>
</message>
<message>
<source>Edit an entry.</source>
@@ -5450,9 +5747,9 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>AVERTISSEMENT : vous utilisez un ancien format de fichier-clé qui pourrait ne plus être pris en charge à l’avenir.
+ <translation>AVERTISSEMENT : Vous utilisez un format de fichier clé hérité qui pourrait ne plus être pris en charge à l’avenir.
-Veuillez envisager de générer un nouveau fichier-clé.</translation>
+Veuillez envisager de générer un nouveau fichier clé.</translation>
</message>
<message>
<source>
@@ -5461,7 +5758,7 @@ Available commands:
</source>
<translation>
-Commandes disponibles :
+Commandes proposées :
</translation>
</message>
<message>
@@ -5470,7 +5767,7 @@ Commandes disponibles :
</message>
<message>
<source>List database entries.</source>
- <translation>Lister les entrées de la base de données.</translation>
+ <translation>Lister les entrées de la base.</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
@@ -5490,7 +5787,7 @@ Commandes disponibles :
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>Chemin de la base de données source.</translation>
+ <translation>Chemin de la base de données à partir de laquelle fusionner.</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
@@ -5498,11 +5795,11 @@ Commandes disponibles :
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation>Fichier-clé de la base de données à partir de laquelle fusionner.</translation>
+ <translation>Fichier clé de la base de données à partir de laquelle fusionner.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
- <translation>Afficher les informations d’une entrée.</translation>
+ <translation>Afficher les renseignements d’une entrée.</translation>
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
@@ -5522,15 +5819,15 @@ Commandes disponibles :
</message>
<message>
<source>error reading from device</source>
- <translation>erreur de lecture sur le périphérique</translation>
+ <translation>Erreur de lecture sur le périphérique</translation>
</message>
<message>
<source>malformed string</source>
- <translation>chaîne incorrecte</translation>
+ <translation>chaîne de caractères malformée</translation>
</message>
<message>
<source>missing closing quote</source>
- <translation>guillemet fermant manquant</translation>
+ <translation>Le guillemet fermant manque</translation>
</message>
<message>
<source>Group</source>
@@ -5565,14 +5862,6 @@ Commandes disponibles :
<translation>Intégration aux navigateurs</translation>
</message>
<message>
- <source>Press</source>
- <translation>Pressez</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passif</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agent SSH</translation>
</message>
@@ -5582,12 +5871,12 @@ Commandes disponibles :
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>Nombre de mots de la phrase secrète générés avec la méthode du lancer de dés.</translation>
+ <translation>Nombre de mots de la phrase de passe générée avec la méthode du lancer de dés.</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
[Default: EFF English]</source>
- <translation>Liste de mots pour le générateur par lancer de dés.
+ <translation>Liste de mots pour le générateur par méthode du lancer de dés.
[Par défaut : FFÉ anglais]</translation>
</message>
<message>
@@ -5596,7 +5885,7 @@ Commandes disponibles :
</message>
<message>
<source>Could not create entry with path %1.</source>
- <translation>Impossible de créer une entrée avec le chemin %1.</translation>
+ <translation>Impossible de créer l’entrée dont le chemin est %1.</translation>
</message>
<message>
<source>Enter password for new entry: </source>
@@ -5604,19 +5893,15 @@ Commandes disponibles :
</message>
<message>
<source>Writing the database failed %1.</source>
- <translation>Échec de l&apos;écriture de la base de données %1.</translation>
+ <translation>Échec d’écriture de la base de données %1.</translation>
</message>
<message>
<source>Successfully added entry %1.</source>
- <translation>L&apos;entrée %1 a bien été ajoutée.</translation>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copier le TOTP courant dans le presse-papiers.</translation>
+ <translation>Ajouté avec succès l’entrée %1.</translation>
</message>
<message>
<source>Invalid timeout value %1.</source>
- <translation>Valeur de temps imparti %1 invalide.</translation>
+ <translation>La valeur de délai d’attente %1 est invalide.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
@@ -5624,27 +5909,19 @@ Commandes disponibles :
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
- <translation>L&apos;entrée avec le chemin %1 n&apos;a pas de TOTP configuré.</translation>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Le TOTP actuel de l&apos;entrée a été copié dans le presse-papiers !</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Le mot de passe de l&apos;entrée a été copié dans le presse-papiers !</translation>
+ <translation>Aucun TOTP n’est configuré pour l’entrée dont le chemin est %1.</translation>
</message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Nettoyage du presse-papiers dans %1 seconde...</numerusform><numerusform>Nettoyage du presse-papiers dans %1 secondes...</numerusform></translation>
+ <translation><numerusform>Vidage du presse-papiers dans %1 seconde…</numerusform><numerusform>Vidage du presse-papiers dans %1 secondes…</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
- <translation>Presse-papiers vidé !</translation>
+ <translation>Le presse-papiers a été effacé !</translation>
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation>Désactiver des demandes de saisie de mot de passe et des autres champs.</translation>
+ <translation>Faire taire le champs mot de passe et les autres champs secondaires.</translation>
</message>
<message>
<source>count</source>
@@ -5653,23 +5930,23 @@ Commandes disponibles :
</message>
<message>
<source>Could not find entry with path %1.</source>
- <translation>Impossible de trouver une entrée avec le chemin %1.</translation>
+ <translation>Impossible de trouver l’entrée dont le chemin est %1.</translation>
</message>
<message>
<source>Not changing any field for entry %1.</source>
- <translation>Aucun champ modifié dans l&apos;entrée %1.</translation>
+ <translation>Aucun changement effectué dans les champs de l’entrée %1.</translation>
</message>
<message>
<source>Enter new password for entry: </source>
- <translation>Saisir le nouveau mot de passe pour l&apos;entrée :</translation>
+ <translation>Saisir le nouveau mot de passe pour l’entrée :</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Échec de l&apos;écriture de la base de données : %1.</translation>
+ <translation>Échec d’écriture de la base de données : %1.</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation>L&apos;entrée %1 a bien été modifiée.</translation>
+ <translation>L’entrée %1 a été modifiée avec succès.</translation>
</message>
<message>
<source>Length %1</source>
@@ -5689,79 +5966,79 @@ Commandes disponibles :
</message>
<message>
<source>Type: Bruteforce</source>
- <translation>Type : méthode en force</translation>
+ <translation>Type : Force brute</translation>
</message>
<message>
<source>Type: Dictionary</source>
- <translation>Type : dictionnaire</translation>
+ <translation>Type : Dictionnaire</translation>
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>Type : dictionnaire + langage élite</translation>
+ <translation>Type : Dictionnaire + Leet</translation>
</message>
<message>
<source>Type: User Words</source>
- <translation>Type : mots utilisateur</translation>
+ <translation>Type : Mots utilisateur</translation>
</message>
<message>
<source>Type: User+Leet</source>
- <translation>Type : utilisateur + langage élite</translation>
+ <translation>Type : Utilisateur + Leet</translation>
</message>
<message>
<source>Type: Repeated</source>
- <translation>Type : répétition</translation>
+ <translation>Type : Répétition</translation>
</message>
<message>
<source>Type: Sequence</source>
- <translation>Type : séquence</translation>
+ <translation>Type : Séquence</translation>
</message>
<message>
<source>Type: Spatial</source>
- <translation>Type : spatial</translation>
+ <translation>Type : Spatial</translation>
</message>
<message>
<source>Type: Date</source>
- <translation>Type : date</translation>
+ <translation>Type : Date</translation>
</message>
<message>
<source>Type: Bruteforce(Rep)</source>
- <translation>Type : méthode en force (Rep)</translation>
+ <translation>Type : Bruteforce(Rep)</translation>
</message>
<message>
<source>Type: Dictionary(Rep)</source>
- <translation>Type : dictionnaire (Rep)</translation>
+ <translation>Type : Dictionnaire(Rep)</translation>
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>Type : dictionnaire + langage élite (Rep)</translation>
+ <translation>Type : Dictionnaire + Leet (rep)</translation>
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>Type : mots utilisateur (Rep)</translation>
+ <translation>Type : Mots Utilisateur(Rep)</translation>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
- <translation>Type : utilisateur + langage élite (Rep)</translation>
+ <translation>Type : Utilisateur + Leet (rep)</translation>
</message>
<message>
<source>Type: Repeated(Rep)</source>
- <translation>Type : répétition (Rep)</translation>
+ <translation>Type : Répétition(Rep)</translation>
</message>
<message>
<source>Type: Sequence(Rep)</source>
- <translation>Type : séquence (Rep)</translation>
+ <translation>Type : Séquence(Rep)</translation>
</message>
<message>
<source>Type: Spatial(Rep)</source>
- <translation>Type : spatial (Rep)</translation>
+ <translation>Type : Spatial(Rep)</translation>
</message>
<message>
<source>Type: Date(Rep)</source>
- <translation>Type : date (Rep)</translation>
+ <translation>Type : Date(Rep)</translation>
</message>
<message>
<source>Type: Unknown%1</source>
- <translation>Type : inconnu%1</translation>
+ <translation>Type : Inconnu%1</translation>
</message>
<message>
<source>Entropy %1 (%2)</source>
@@ -5769,11 +6046,11 @@ Commandes disponibles :
</message>
<message>
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation>*** Longueur du mot de passe (%1) != somme des longueurs des parties (%2) ***</translation>
+ <translation>*** Longueur du mot de passe (%1) != longueurs additionnées des morceaux (%2) ***</translation>
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation>Échec de chargement du fichier-clé %1 : %2</translation>
+ <translation>Échec de chargement du fichier clé %1 : %2</translation>
</message>
<message>
<source>Length of the generated password</source>
@@ -5793,11 +6070,11 @@ Commandes disponibles :
</message>
<message>
<source>Use extended ASCII</source>
- <translation>Utiliser l&apos;ASCII étendu</translation>
+ <translation>Utiliser l’ASCII étendu</translation>
</message>
<message>
<source>Exclude character set</source>
- <translation>Exclure le jeu de caractères</translation>
+ <translation>Exclure les caractères suivants</translation>
</message>
<message>
<source>chars</source>
@@ -5805,15 +6082,15 @@ Commandes disponibles :
</message>
<message>
<source>Exclude similar looking characters</source>
- <translation>Exclure les caractères semblables</translation>
+ <translation>Exclure les caractères qui se ressemblent</translation>
</message>
<message>
<source>Include characters from every selected group</source>
- <translation>Inclure les caractères de chaque groupe</translation>
+ <translation>Inclure des caractères de chaque groupe</translation>
</message>
<message>
<source>Recursively list the elements of the group.</source>
- <translation>Lister récursivement les éléments du groupe.</translation>
+ <translation>Lister récursivement les éléments du groupe</translation>
</message>
<message>
<source>Cannot find group %1.</source>
@@ -5822,28 +6099,28 @@ Commandes disponibles :
<message>
<source>Error reading merge file:
%1</source>
- <translation>Erreur lors de la lecture du fichier fusionné :
+ <translation>Erreur lors de la lecture du fichier fusionner :
%1</translation>
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation>Impossible d&apos;enregistrer la base de données dans le fichier : %1</translation>
+ <translation>Impossible d’enregistrer la base de données dans le fichier : %1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>Impossible d&apos;enregistrer la base de données dans le fichier : %1</translation>
+ <translation>Impossible d’enregistrer la base de données dans le fichier : %1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation>L&apos;entrée %1 a bien été récupérée.</translation>
+ <translation>Entrée %1 recyclée avec succès.</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation>L&apos;entrée %1 a bien été supprimée.</translation>
+ <translation>Supprimé l’entrée %1 avec succès.</translation>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation>Afficher le TOTP actuel de l&apos;entrée.</translation>
+ <translation>Afficher le TOTP courant pour l’entrée.</translation>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
@@ -5851,11 +6128,7 @@ Commandes disponibles :
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation>Aucun programme configuré pour la gestion du presse-papiers</translation>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation>Impossible de démarrer le programme %1</translation>
+ <translation>Aucun logiciel configuré pour la manipulation du presse-papiers</translation>
</message>
<message>
<source>file empty</source>
@@ -5863,19 +6136,7 @@ Commandes disponibles :
</message>
<message>
<source>%1: (row, col) %2,%3</source>
- <translation>%1 : (ligne, colonne) %2, %3</translation>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation>AES : 256 bits</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish : 256 bits</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20 : 256 bits</translation>
+ <translation>%1: (ligne,colonne) %2,%3</translation>
</message>
<message>
<source>Argon2 (KDBX 4 – recommended)</source>
@@ -5917,7 +6178,7 @@ Commandes disponibles :
</message>
<message>
<source>Loading the key file failed</source>
- <translation>Échec du chargement du fichier-clé</translation>
+ <translation>Échec de chargement du fichier clé</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
@@ -5925,19 +6186,19 @@ Commandes disponibles :
</message>
<message>
<source>Failed to save the database: %1.</source>
- <translation>Impossible d&apos;enregistrer la base de données : %1.</translation>
+ <translation>Échec d’enregistrement de la base de données : %1.</translation>
</message>
<message>
<source>Successfully created new database.</source>
- <translation>La nouvelle base de données a bien été créée.</translation>
+ <translation>Créé avec succès la nouvelle base de données.</translation>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation>Échec lors de la création du fichier clé %1 : %2 </translation>
+ <translation>Creation du fichier clé %1 échoué : %2 </translation>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>Échec lors du chargement du fichier-clé %1 : %2</translation>
+ <translation>Chargement du fichier clé %1 échoué : %2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
@@ -5945,15 +6206,15 @@ Commandes disponibles :
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation>Le fichier de verrouillage de l’instance unique existant n’est pas valide. Lancement d’une nouvelle instance.</translation>
+ <translation>Le fichier de verrouillage de l’instance unique existant est invalide. Lancement d’une nouvelle instance.</translation>
</message>
<message>
<source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation>Le fichier de verrouillage ne peut pas être créé. Le mode d’instance unique est désactivé.</translation>
+ <translation>Impossible de créer le fichier de verrouillage. Le mode d’instance unique est désactivé.</translation>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
- <translation>KeePassXC - Gestionnaire de mots de passe multiplateforme</translation>
+ <translation>KeePassXC – Gestionnaire de mots de passe multiplateforme</translation>
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
@@ -5965,7 +6226,7 @@ Commandes disponibles :
</message>
<message>
<source>key file of the database</source>
- <translation>fichier-clé de la base de données</translation>
+ <translation>fichier clé de la base de données</translation>
</message>
<message>
<source>read password of the database from stdin</source>
@@ -5985,7 +6246,7 @@ Commandes disponibles :
</message>
<message>
<source>KeePassXC - Error</source>
- <translation>KeePassXC - Erreur</translation>
+ <translation>KeePassXC – Erreur</translation>
</message>
<message>
<source>Database password: </source>
@@ -5993,7 +6254,7 @@ Commandes disponibles :
</message>
<message>
<source>Cannot create new group</source>
- <translation>Impossible de créer un nouveau groupe</translation>
+ <translation>Impossible de créer de nouveau groupe</translation>
</message>
<message>
<source>Deactivate password key for the database.</source>
@@ -6036,7 +6297,7 @@ Commandes disponibles :
CPU architecture: %2
Kernel: %3 %4</source>
<translation>Système d’exploitation : %1
-Architecture de l&apos;unité centrale : %2
+Architecture de l’unité centrale : %2
Noyau : %3 %4</translation>
</message>
<message>
@@ -6101,7 +6362,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords.</source>
- <translation>Vérifie si l&apos;un de vos mots de passe a fuité publiquement. NOM_DU_FICHIER doit être le chemin d&apos;une liste d&apos;empreintes SHA-1 de mots de passe fuités au format HIBP, disponible à l&apos;adresse https://haveibeenpwned.com/Passwords.</translation>
+ <translation>Vérifier si un mot de passe a été divulgué publiquement. NOM_DU_FICHIER doit être le chemin d’un fichier qui liste les empreintes SHA-1 de mots de passe divulgués au format HIBP, tel que proposé sur https://haveibeenpwned.com/Passwords (site en anglais).</translation>
</message>
<message>
<source>FILENAME</source>
@@ -6113,11 +6374,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Failed to open HIBP file %1: %2</source>
- <translation>Échec de l&apos;ouverture du fichier HIBP %1 : %2</translation>
+ <translation>Échec de l’ouverture du fichier HIBP %1 : %2</translation>
</message>
<message>
<source>Evaluating database entries against HIBP file, this will take a while...</source>
- <translation>Comparaison des entrées de la base de données avec le fichier HIBP, cette opération prend du temps...</translation>
+ <translation>Comparaison des entrées de la base de données avec le fichier HIBP, cette opération prend du temps…</translation>
</message>
<message>
<source>Close the currently opened database.</source>
@@ -6128,16 +6389,12 @@ Noyau : %3 %4</translation>
<translation>Afficher cette aide.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Emplacement Yubikey utilisé pour chiffrer la base de données.</translation>
- </message>
- <message>
<source>slot</source>
<translation>emplacement</translation>
</message>
<message>
<source>Invalid word count %1</source>
- <translation>Nombre de mots %1 invalide</translation>
+ <translation>Le nombre de mots %1 est invalide</translation>
</message>
<message>
<source>The word list is too small (&lt; 1000 items)</source>
@@ -6148,16 +6405,12 @@ Noyau : %3 %4</translation>
<translation>Quitte le mode interactif.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Format à utiliser lors de l&apos;exportation. Les choix disponibles sont xml et csv. La valeur par défaut est xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exporte le contenu de la base de données vers la sortie standard au format spécifié.</translation>
</message>
<message>
<source>Unable to export database to XML: %1</source>
- <translation>Impossible d&apos;exporter la base de données en XML : %1</translation>
+ <translation>Impossible d’exporter la base de données en XML : %1</translation>
</message>
<message>
<source>Unsupported format %1</source>
@@ -6173,31 +6426,27 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Display command help.</source>
- <translation>Afficher l&apos;aide de la commande.</translation>
+ <translation>Afficher l’aide de la commande.</translation>
</message>
<message>
<source>Available commands:</source>
- <translation>Commandes disponibles :</translation>
+ <translation>Commandes proposées :</translation>
</message>
<message>
<source>Import the contents of an XML database.</source>
- <translation>Importe le contenu d&apos;une base de données XML.</translation>
+ <translation>Importer le contenu d’une base de données XML.</translation>
</message>
<message>
<source>Path of the XML database export.</source>
- <translation>Chemin vers l&apos;exportation de la base de données au format XML.</translation>
+ <translation>Chemin vers l’exportation de la base de données au format XML.</translation>
</message>
<message>
<source>Path of the new database.</source>
<translation>Chemin vers la nouvelle base de données.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Impossible d&apos;importer le fichier base de données au format XML %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
- <translation>La base de données a bien été importée.</translation>
+ <translation>La base de données a été importée avec succès.</translation>
</message>
<message>
<source>Unknown command %1</source>
@@ -6209,7 +6458,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Only print the changes detected by the merge operation.</source>
- <translation>N&apos;afficher que les modifications détectées lors de l&apos;opération de fusion.</translation>
+ <translation>N’imprimer que les changements détectés par l’opération de fusion.</translation>
</message>
<message>
<source>Yubikey slot for the second database.</source>
@@ -6221,7 +6470,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>La base de données n&apos;a pas été modifiée par l&apos;opération de fusion.</translation>
+ <translation>La base de données n’a pas été modifiée par l’opération de fusion.</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6229,7 +6478,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Path of the entry to move.</source>
- <translation>Chemin de l&apos;entrée à déplacer.</translation>
+ <translation>Chemin de l’entrée à déplacer.</translation>
</message>
<message>
<source>Path of the destination group.</source>
@@ -6241,11 +6490,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Entry is already in group %1.</source>
- <translation>L&apos;entrée est déjà dans le groupe %1.</translation>
+ <translation>L’entrée est déjà dans le groupe %1.</translation>
</message>
<message>
<source>Successfully moved entry %1 to group %2.</source>
- <translation>L&apos;entrée %1 a bien été déplacée vers le groupe %2.</translation>
+ <translation>L’entrée %1 a bien été déplacée vers le groupe %2.</translation>
</message>
<message>
<source>Open a database.</source>
@@ -6269,15 +6518,15 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Failed to open database file %1: not found</source>
- <translation>Impossible d&apos;ouvrir la base de données %1 : introuvable</translation>
+ <translation>Échec d’ouverture du fichier de base de données %1 : il est introuvable</translation>
</message>
<message>
<source>Failed to open database file %1: not a plain file</source>
- <translation>Impossible d&apos;ouvrir le fichier de base de données %1 : fichier non standard</translation>
+ <translation>Échec d’ouverture du fichier de base de données %1 : ce n’est pas un fichier brut</translation>
</message>
<message>
<source>Failed to open database file %1: not readable</source>
- <translation>Impossible d&apos;ouvrir la base de données %1 : illisible</translation>
+ <translation>Échec d’ouverture du fichier de base de données %1 : il est illisible</translation>
</message>
<message>
<source>Enter password to unlock %1: </source>
@@ -6288,16 +6537,12 @@ Noyau : %3 %4</translation>
<translation>Emplacement YubiKey %1 invalide</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Veuillez appuyer sur le bouton de votre YubiKey pour déverrouiller %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Saisissez le mot de passe pour chiffrer la base de données (optionnel) :</translation>
</message>
<message>
<source>HIBP file, line %1: parse error</source>
- <translation>Fichier HIBP, ligne %1 : erreur d&apos;analyse</translation>
+ <translation>Fichier HIBP, ligne %1 : erreur d’analyse</translation>
</message>
<message>
<source>Secret Service Integration</source>
@@ -6305,23 +6550,207 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>User name</source>
- <translation>Nom d&apos;utilisateur</translation>
- </message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Question-réponse - Emplacement %3 - %4</translation>
+ <translation>Nom d’utilisateur</translation>
</message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Le mot de passe pour &apos;%1&apos; a fuité %2 fois !</numerusform><numerusform>Le mot de passe pour « %1 » a fuité %2 fois !</numerusform></translation>
+ <translation><numerusform>Le mot de passe pour « %1 » a été compromis %2 fois !</numerusform><numerusform>Le mot de passe pour « %1 » a été compromis %2 fois !</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
- <translation>Générateur de mots de passe invalide après l&apos;application de toutes les options</translation>
+ <translation>Générateur de mots de passe invalide après l’application de toutes les options</translation>
</message>
<message>
<source>Show the protected attributes in clear text.</source>
- <translation>Afficher les attributs protégés en clair.</translation>
+ <translation>Afficher en clair les attributs protégés.</translation>
+ </message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Échec de l’extension pour navigateurs</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Impossible d&apos;enregistrer le fichier script de messagerie native pour %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Copier l&apos;attribut reçu dans le presse-papiers. La valeur par défaut pour « mot de passe » n&apos;est pas spécifiée.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Copier le TOTP actuel dans le presse-papiers (équivalent à « -a totp »).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Copier l&apos;attribut d&apos;entrée dans le presse-papiers.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>ERREUR : veuillez spécifier -attribut ou -totp, mais pas les deux.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>ERREUR : attribut %1 ambigu, il correspond à %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Attribut « %1 » introuvable.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Attribut d&apos;entrée « %1 » copié dans le presse-papiers !</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Emplacement Yubikey et n° de série facultatif pour accéder à la base de données (ex. : 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>emplacement[:n° de série]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Durée de décryptage de la cible en millisecondes pour la base de données.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>durée</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Définir le fichier clé pour la base de données.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Définir le mot de passe pour la base de données.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Durée de décryptage invalide : %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>La durée de décryptage de la cible doit être entre %1 et %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Impossible de définir le mot de passe de la base de données.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>L&apos;analyse de performance pour la fonction de dérivation de la clé indique un retard de %1 ms.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>%1 cycles sont définis pour la fonction de dérivation de la clé.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>erreur lors du paramétrage de la dérivation de clé de la base de données.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Format à utiliser lors de l&apos;exportation. Les choix disponibles sont « xml » ou « csv ». La valeur par défaut est « xml ».</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Impossible d&apos;importer la base de données XML : %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Afficher les informations de la base de données.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID : </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nom :</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Description :</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Chiffrage :</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF :</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>La corbeille est activée.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>La corbeille n&apos;est pas activée.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Commande invalide : %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>N° de série Yubikey invalide : %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Veuillez appuyez sur le bouton de votre YubiKey afin de poursuivre…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Voulez-vous créer une base de données avec un mot de passe vide ? [o/N] :</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Confirmer le mot de passe :</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Erreur : les mots de passe ne correspondent pas.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Échec de tous les programmes de découpage. %1 essayés
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 cycles)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 cycles, %2 Ko)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256 bits</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256 bits</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20 : 256 bits {20 256 à ?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Performance : %1 de retard</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
</message>
</context>
<context>
@@ -6332,15 +6761,15 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Error writing to underlying device: </source>
- <translation>Erreur d’écriture sur le périphérique interne :</translation>
+ <translation>Erreur d’écriture sur le périphérique sous-jacent :</translation>
</message>
<message>
<source>Error opening underlying device: </source>
- <translation>Erreur d’ouverture du périphérique interne :</translation>
+ <translation>Erreur d’ouverture du périphérique sous-jacent :</translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
- <translation>Erreur de lecture sur le périphérique interne :</translation>
+ <translation>Erreur de lecture des données sur le périphérique sous-jacent :</translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
@@ -6359,26 +6788,310 @@ Noyau : %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Afficher également les entrées exclues des rapports</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Survolez la raison pour afficher les détails. Double-cliquer sur les entrées pour les modifier.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Mauvais</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Mauvais — le mot de passe doit être modifié</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Mauvais</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Médiocre — le mot de passe doit être modifié</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Faible</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Faible — le mot de passe devrait être modifié</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(exclue)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Cette entrée a été exclue des rapports</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Veuillez patienter, le bilan de santé est en cours de calcul...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Félicitations, le bilan de santé est parfait !</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titre</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Chemin</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Résultats</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Raison</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Modifier l&apos;entrée...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Exclure des rapports</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>AVERTISSEMENT : ce rapport nécessite l&apos;envoi d&apos;informations au service en ligne Have I Been Pwned (https://haveibeenpwned.com). Si vous confirmez, les mots de passe de la base de données seront hachés de façon cryptographique et les 5 premiers caractères du hachage seront envoyés à ce service de façon sécurisée. Votre base de données reste en sécurité et ne peut être reconstruite à partir de ces informations. Toutefois, le nombre de mots de passe ainsi votre adresse IP seront dévoilés à ce service.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Analyse de performance en ligne</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Afficher également les entrées exclues des rapports</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Cette mouture de KeePassXC ne dispose pas de fonctions réseau. La mise en réseau est nécessaire afin de vérifier vos mots de passe auprès du service Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Félicitations, aucun mot de passe n&apos;est corrompu !</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titre</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Chemin</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Mots de passe corrompus...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(exclue)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Cette entrée a été exclue des rapports</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>une fois</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>plus de 10 fois</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>plus de 100 fois</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>plus de 1 000 fois</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>plus de 10 000 fois</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>plus de 100 000 fois</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>plus d&apos;un million de fois</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>des millions de fois</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Modifier l&apos;entrée...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Exclure des rapports</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Survolez les lignes affichant une icône d’erreur pour plus d’informations.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nom</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valeur</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Veuillez patienter pendant que les statistiques de base de données sont calculées…</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nom de la base de données</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Description</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Emplacement</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Dernier enregistrement</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Changements non enregistrés</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>Oui</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>La base de données a été modifiée, mais les changements n’ont pas encore été enregistrés sur le disque.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Nombre de groupes</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Nombre d’entrées</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Nombre d’entrées expirées</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>La base de données contient des données expirées</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Mots de passes uniques</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Mots de passe non-uniques</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Plus de 10 % des mots de passe sont réutilisés. Si possible, utilisez des mots de passe uniques.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Nombre maximal de réutilisation de mot de passe</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Certains mots de passe sont utilisés plus de trois fois. Si possible, utilisez des mots de passe uniques.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Nombre de mots de passe courts</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>La longueur minimale recommandée pour un mot de passe est au moins 8 caractères.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Nombre de mots de passe faibles</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Il est recommandé d’utiliser des mots de passe longs et aléatoires ayant une qualité de « bonne » à « excellente ».</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Entrées exclues des rapports</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Exclure une entrée des rapports, par exemple parce qu&apos;elle dispose d&apos;un mot de passe faible, n&apos;est pas en soi un problème, mais nécessite toutefois une surveillance particulière. </translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Longueur moyenne des mots de passe</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caractères</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>La longueur moyenne des mots de passe est de moins de 10 caractères. Des mots de passe plus longs offrent une meilleure sécurité.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
- <translation>Connexion à l&apos;agent impossible.</translation>
+ <translation>Connexion à l’agent impossible.</translation>
</message>
<message>
<source>Agent protocol error.</source>
- <translation>Erreur de protocole avec l&apos;agent</translation>
+ <translation>Erreur de protocole avec l’agent</translation>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>Aucun agent en cours d&apos;exécution, impossible d&apos;ajouter l&apos;identité.</translation>
+ <translation>Aucun agent en cours d’exécution, impossible d’ajouter l’identité.</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>Aucun agent en cours d&apos;exécution, impossible de supprimer l&apos;identité.</translation>
+ <translation>Aucun agent en cours d’exécution, impossible de supprimer l’identité.</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
- <translation>L&apos;agent a refusé cette identité. Les raisons possibles sont :</translation>
+ <translation>L’agent a refusé cette identité. Les raisons possibles sont :</translation>
</message>
<message>
<source>The key has already been added.</source>
@@ -6386,26 +7099,34 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation>Une durée de vie limitée n&apos;est pas supporté par l&apos;agent (vérifier les paramètres).</translation>
+ <translation>L’agent ne prend pas en charge une durée de vie limitée (vérifier les options).</translation>
</message>
<message>
<source>A confirmation request is not supported by the agent (check options).</source>
- <translation>Une demande de confirmation n&apos;est pas prise en charge par l&apos;agent (vérifier les paramètres).</translation>
+ <translation>L’agent ne prend pas en charge une demande de confirmation (vérifier les options).</translation>
+ </message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Conflit d&apos;identité de clé. L&apos;ajout a été refusé.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Aucun agent en cours d&apos;exécution, impossible d&apos;énumérer les identités.</translation>
</message>
</context>
<context>
<name>SearchHelpWidget</name>
<message>
<source>Search Help</source>
- <translation>Chercher dans l&apos;aide</translation>
+ <translation>Chercher dans l’aide</translation>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation>Les critères de recherche sont les suivants : [modificateurs][champ:][&quot;]terme[&quot;]</translation>
+ <translation>Les termes de recherche sont construits comme suit : [modificateurs][champ:][&quot;]terme[&quot;]</translation>
</message>
<message>
<source>Every search term must match (ie, logical AND)</source>
- <translation>Tous les mots-clé doivent correspondre (ex. : ET logique)</translation>
+ <translation>Tous les termes doivent correspondre (ET logique)</translation>
</message>
<message>
<source>Modifiers</source>
@@ -6413,7 +7134,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>exclude term from results</source>
- <translation>exclure le critère des résultats</translation>
+ <translation>exclure le terme des résultats</translation>
</message>
<message>
<source>match term exactly</source>
@@ -6421,7 +7142,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>use regex in term</source>
- <translation>utiliser les expressions régulières le critère</translation>
+ <translation>utiliser les expressions régulières dans le terminal</translation>
</message>
<message>
<source>Fields</source>
@@ -6429,11 +7150,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Term Wildcards</source>
- <translation>Jokers de critères</translation>
+ <translation>Caractères spéciaux</translation>
</message>
<message>
<source>match anything</source>
- <translation>correspond à n&apos;importe quel caractère</translation>
+ <translation>correspond à n’importe quel caractère</translation>
</message>
<message>
<source>match one</source>
@@ -6452,7 +7173,7 @@ Noyau : %3 %4</translation>
<name>SearchWidget</name>
<message>
<source>Search</source>
- <translation>Rechercher</translation>
+ <translation>Recherche</translation>
</message>
<message>
<source>Clear</source>
@@ -6464,16 +7185,16 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Search Help</source>
- <translation>Chercher dans l&apos;aide</translation>
+ <translation>Chercher dans l’aide</translation>
</message>
<message>
<source>Search (%1)...</source>
<comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation>Recherche (%1)...</translation>
+ <translation>Recherche (%1)…</translation>
</message>
<message>
<source>Case sensitive</source>
- <translation>Casse différenciée</translation>
+ <translation>Sensible à la casse</translation>
</message>
</context>
<context>
@@ -6496,29 +7217,13 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Si la corbeille est activée pour la base de données, les entrées seront déplacées dans la corbeille directement. Sinon, elles seront supprimées sans confirmation.&lt;/p&gt;&lt;p&gt;Une confirmation sera toujours demandée si l&apos;entrée est référencée par d&apos;autres.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Ne pas confirmer lorsque les entrées sont supprimées par des clients.</translation>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Si la corbeille est activée pour la base de données, les entrées seront déplacées dans la corbeille directement. Sinon, elles seront supprimées sans confirmation.&lt;/p&gt;&lt;p&gt;Une confirmation sera toujours demandée si l’entrée est référencée par d’autres.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Exposed database groups:</source>
<translation>Groupes de la base de données visibles :</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Groupe</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Gérer</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorisation</translation>
</message>
@@ -6527,40 +7232,20 @@ Noyau : %3 %4</translation>
<translation>Ces applications sont actuellement connectées :</translation>
</message>
<message>
- <source>Application</source>
- <translation>Application</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Déconnecter</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Paramètres de la base de données</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Modifier les paramètres de la base de données</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Déverrouiller la base de données</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Déverrouiller la base de données pour afficher plus d&apos;informations</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Ne pas confirmer la suppression d&apos;entrées par les clients</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Verrouiller la base de données</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Erreur :&lt;/b&gt; Échec lors de la connexion à DBus. Veuillez vérifier votre configuration DBus.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Déverrouiller pour afficher</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Avertissement :&lt;/b&gt; </translation>
</message>
<message>
- <source>None</source>
- <translation>Aucun</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Enregistrer les modifications actuelles pour activer le greffon et activer l&apos;édition de cette partie.</translation>
</message>
</context>
<context>
@@ -6571,11 +7256,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Allow export</source>
- <translation>Autoriser l&apos;exportation</translation>
+ <translation>Autoriser l’exportation</translation>
</message>
<message>
<source>Allow import</source>
- <translation>Autoriser l&apos;importation</translation>
+ <translation>Autoriser l’importation</translation>
</message>
<message>
<source>Own certificate</source>
@@ -6595,7 +7280,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Key:</source>
- <translation>Clé :</translation>
+ <translation>Clé :</translation>
</message>
<message>
<source>Generate</source>
@@ -6660,11 +7345,11 @@ Noyau : %3 %4</translation>
<message>
<source>key.share</source>
<comment>Filetype for KeeShare key</comment>
- <translation>key.share</translation>
+ <translation>cle.share</translation>
</message>
<message>
<source>KeeShare key file</source>
- <translation>fichier-clé KeeShare</translation>
+ <translation>fichier clé KeeShare</translation>
</message>
<message>
<source>All files</source>
@@ -6676,11 +7361,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Exporting changed certificate</source>
- <translation>Exportation des certificats modifiés</translation>
+ <translation>Exportation des certificats changés</translation>
</message>
<message>
<source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation>Le certificat exporté est différent de celui en cours d&apos;utilisation. Voulez-vous exporter le certificat actuel ?</translation>
+ <translation>Le certificat exporté est différent de celui en cours d’utilisation. Voulez-vous exporter le certificat actuel ?</translation>
</message>
<message>
<source>Signer:</source>
@@ -6688,11 +7373,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Allow KeeShare imports</source>
- <translation>Autoriser les imports KeeShare</translation>
+ <translation>Autoriser les importations KeeShare</translation>
</message>
<message>
<source>Allow KeeShare exports</source>
- <translation>Autoriser les exports KeeShare</translation>
+ <translation>Autoriser les exportations KeeShare</translation>
</message>
<message>
<source>Only show warnings and errors</source>
@@ -6704,7 +7389,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Signer name field</source>
- <translation>Champ du nom du signataire</translation>
+ <translation>Champ de nom du signataire</translation>
</message>
<message>
<source>Generate new certificate</source>
@@ -6728,7 +7413,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Ask whether to trust the selected certificate every time</source>
- <translation>Demander systématiquement l&apos;approbation du certificat sélectionné</translation>
+ <translation>Demander systématiquement l’approbation du certificat sélectionné</translation>
</message>
<message>
<source>Untrust selected certificate</source>
@@ -6743,58 +7428,58 @@ Noyau : %3 %4</translation>
<name>ShareExport</name>
<message>
<source>Overwriting signed share container is not supported - export prevented</source>
- <translation>Remplacer le conteneur de partage signé s&apos;il n&apos;est pas pris en charge - empêche l&apos;exportation</translation>
+ <translation>Remplacer le conteneur de partage signé s’il n’est pas pris en charge - empêche l’exportation</translation>
</message>
<message>
<source>Could not write export container (%1)</source>
- <translation>Impossible d&apos;exporter le conteneur (%1)</translation>
+ <translation>Impossible d’écrire dans le conteneur d’exportation (%1)</translation>
</message>
<message>
<source>Could not embed signature: Could not open file to write (%1)</source>
- <translation>Impossible d&apos;intégrer la signature : le fichier n&apos;a pas pu être ouvert en écriture (%1)</translation>
+ <translation>Impossible d’intégrer la signature :impossible d’ouvrir le fichier en écriture (%1)</translation>
</message>
<message>
<source>Could not embed signature: Could not write file (%1)</source>
- <translation>Impossible d&apos;intégrer la signature : problème d&apos;écriture dans le fichier (%1)</translation>
+ <translation>Impossible d’intégrer la signature : impossible d’écrire le fichier (%1)</translation>
</message>
<message>
<source>Could not embed database: Could not open file to write (%1)</source>
- <translation>Impossible d&apos;intégrer la base de données : le fichier n&apos;a pas pu être ouvert en écriture (%1)</translation>
+ <translation>Impossible d’intégrer la base de données : impossible d’ouvrir le fichier en écriture (%1)</translation>
</message>
<message>
<source>Could not embed database: Could not write file (%1)</source>
- <translation>Impossible d&apos;intégrer la base de données : problème d&apos;écriture dans le fichier (%1)</translation>
+ <translation>Impossible d’intégrer la base de données : impossible d’écrire le fichier (%1)</translation>
</message>
<message>
<source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation>Remplacer le conteneur de partage non signé s&apos;il n&apos;est pas pris en charge - empêche l&apos;exportation</translation>
+ <translation>Remplacer le conteneur de partage non signé s’il n’est pas pris en charge - empêche l’exportation</translation>
</message>
<message>
<source>Could not write export container</source>
- <translation>Impossible d&apos;exporter le conteneur</translation>
+ <translation>Impossible d’écrire dans le conteneur d’exportation</translation>
</message>
<message>
<source>Unexpected export error occurred</source>
- <translation>Une erreur inattendue est survenue lors de l&apos;exportation</translation>
+ <translation>Une erreur d’exportation inattendue est survenue</translation>
</message>
</context>
<context>
<name>ShareImport</name>
<message>
<source>Import from container without signature</source>
- <translation>Importer depuis le conteneur sans signature</translation>
+ <translation>Importer d’un conteneur sans signature</translation>
</message>
<message>
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation>Impossible de vérifier la source du conteneur partagé car celui-ci n&apos;est pas signé. Êtes-vous sûr de vouloir l&apos;importer depuis %1 ?</translation>
+ <translation>Nous ne pouvons vérifier la source du conteneur partagé, car il n’est pas signé. Voulez-vous vraiment importer de %1 ?</translation>
</message>
<message>
<source>Import from container with certificate</source>
- <translation>Importer depuis le conteneur avec certificat</translation>
+ <translation>Importer d’un conteneur avec certificat</translation>
</message>
<message>
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
- <translation>Voulez-vous approuver %1 avec l&apos;empreinte de %2 à %3 ? {1 ?} {2 ?}</translation>
+ <translation>Voulez-vous autoriser %1 avec l’empreinte de %2 à %3 ? {1 ?} {2 ?}</translation>
</message>
<message>
<source>Not this time</source>
@@ -6810,15 +7495,15 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Just this time</source>
- <translation>Cette fois uniquement</translation>
+ <translation>Cette fois seulement</translation>
</message>
<message>
<source>Signed share container are not supported - import prevented</source>
- <translation>Conteneur de partage signé non pris en charge - empêche l&apos;importation</translation>
+ <translation>Conteneur de partage signé non pris en charge - empêche l’importation</translation>
</message>
<message>
<source>File is not readable</source>
- <translation>Le fichier est illisible</translation>
+ <translation>Le fichier n’est illisible</translation>
</message>
<message>
<source>Invalid sharing container</source>
@@ -6833,12 +7518,8 @@ Noyau : %3 %4</translation>
<translation>Importation signée réussie</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Erreur inattendue</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
- <translation>Conteneur de partage non signé non pris en charge - empêche l&apos;importation</translation>
+ <translation>Conteneur de partage non signé non pris en charge - empêche l’importation</translation>
</message>
<message>
<source>Successful unsigned import</source>
@@ -6846,7 +7527,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>File does not exist</source>
- <translation>Le fichier n&apos;existe pas</translation>
+ <translation>Le fichier n’existe pas</translation>
</message>
<message>
<source>Unknown share container type</source>
@@ -6857,23 +7538,23 @@ Noyau : %3 %4</translation>
<name>ShareObserver</name>
<message>
<source>Import from %1 failed (%2)</source>
- <translation>Échec de l&apos;importation depuis %1 (%2)</translation>
+ <translation>Échec d’importation de %1 (%2)</translation>
</message>
<message>
<source>Import from %1 successful (%2)</source>
- <translation>%1 a bien été importé (%2)</translation>
+ <translation>Importé de %1 avec succès (%2)</translation>
</message>
<message>
<source>Imported from %1</source>
- <translation>Importé depuis %1</translation>
+ <translation>Importé de %1</translation>
</message>
<message>
<source>Export to %1 failed (%2)</source>
- <translation>L&apos;exportation vers %1 a échoué (%2)</translation>
+ <translation>Échec d’exportation vers %1 (%2)</translation>
</message>
<message>
<source>Export to %1 successful (%2)</source>
- <translation>%1 a bien été importé (%2)</translation>
+ <translation>Exporté vers %1 avec succès (%2)</translation>
</message>
<message>
<source>Export to %1</source>
@@ -6881,18 +7562,18 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Multiple import source path to %1 in %2</source>
- <translation>Chemin source d&apos;importation multiple de %1 dans %2</translation>
+ <translation>Chemin source d’importation multiple de %1 dans %2</translation>
</message>
<message>
<source>Conflicting export target path %1 in %2</source>
- <translation>Conflit du chemin cible d&apos;exportation %1 dans %2</translation>
+ <translation>Conflit du chemin cible d’exportation %1 dans %2</translation>
</message>
</context>
<context>
<name>TotpDialog</name>
<message>
<source>Timed Password</source>
- <translation>Mot de passe à usage limité</translation>
+ <translation>Mot de passe programmé</translation>
</message>
<message>
<source>000000</source>
@@ -6900,27 +7581,27 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Copy</source>
- <translation>Copier</translation>
+ <translation>Copie</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Expire dans &lt;b&gt;%n&lt;/b&gt;seconde</numerusform><numerusform>Expire dans &lt;b&gt;%n&lt;/b&gt;secondes</numerusform></translation>
+ <translation><numerusform>Arrive à expiration dans &lt;b&gt;%n&lt;/b&gt; seconde</numerusform><numerusform>Arrive à expiration dans &lt;b&gt;%n&lt;/b&gt; secondes</numerusform></translation>
</message>
</context>
<context>
<name>TotpExportSettingsDialog</name>
<message>
<source>Copy</source>
- <translation>Copier</translation>
+ <translation>Copie</translation>
</message>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation>NOTE : les paramètres TOTP sont personnalisés et peuvent ne pas fonctionner avec d&apos;autres authentificateurs.</translation>
+ <translation>NOTE : Ces paramètres TOTP sont personnalisés et pourraient ne pas fonctionner avec d’autres authentificateurs.</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation>Une erreur est survenue lors de la création du QR code.</translation>
+ <translation>Une erreur est survenue lors de la création du QR Code.</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
@@ -6935,11 +7616,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
- <translation>Paramètres par défaut des jetons RFC 6238</translation>
+ <translation>Paramètres de base des codes RFC 6238</translation>
</message>
<message>
<source>Steam token settings</source>
- <translation>Paramètres du jeton Steam</translation>
+ <translation>Paramètres du code éphémère Steam</translation>
</message>
<message>
<source>Use custom settings</source>
@@ -6951,7 +7632,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Time step:</source>
- <translation>Intervalle :</translation>
+ <translation>Période de temps :</translation>
</message>
<message>
<source> sec</source>
@@ -6976,11 +7657,11 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Algorithm:</source>
- <translation>Algorithme :</translation>
+ <translation>Algorithme :</translation>
</message>
<message>
<source>Time step field</source>
- <translation>Champ de l&apos;intervalle</translation>
+ <translation>Champ de l’intervalle</translation>
</message>
<message>
<source> digits</source>
@@ -7002,18 +7683,25 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
- <translation>Êtes-vous sûr de vouloir supprimer les paramètres TOTP pour cette entrée ?</translation>
+ <translation>Voulez-vous vraiment supprimer les paramètres TOTP pour cette entrée ?</translation>
+ </message>
+</context>
+<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL invalide</translation>
</message>
</context>
<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
- <translation>Vérification des mises à jour</translation>
+ <translation>Vérification de la présence de mises à jour</translation>
</message>
<message>
<source>Checking for updates...</source>
- <translation>Vérification des mises à jour...</translation>
+ <translation>Vérification de la présence de mises à jour…</translation>
</message>
<message>
<source>Close</source>
@@ -7021,11 +7709,11 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Update Error!</source>
- <translation>Erreur de mise à jour !</translation>
+ <translation>Erreur de mise à jour !</translation>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
- <translation>Une erreur est survenue lors de la récupération des informations de mise à jour.</translation>
+ <translation>Une erreur est survenue lors de la récupération des renseignements de mise à jour.</translation>
</message>
<message>
<source>Please try again later.</source>
@@ -7037,30 +7725,30 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
- <translation>Une nouvelle version de KeePassXC est disponible !</translation>
+ <translation>Une nouvelle version de KeePassXC est proposée !</translation>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation>KeePassXC %1 est disponible — vous avez actuellement %2.</translation>
+ <translation>KeePassXC %1 est maintenant proposée – vous avez %2.</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation>Télécharger-la sur keepassxc.org</translation>
+ <translation>Téléchargez-la sur keepassxc.org</translation>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation>Votre version est à jour !</translation>
+ <translation>Votre version est à jour !</translation>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
- <translation>KeePassXC %1 est la dernière version en date</translation>
+ <translation>KeePassXC %1 est actuellement la version la plus récente proposée.</translation>
</message>
</context>
<context>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Conservez vos mots de passe en sécurité dans une base de données KeePassXC</translation>
+ <translation>Commencez à enregistrer vos mots de passe en toute sécurité dans une base de données KeePassXC</translation>
</message>
<message>
<source>Create new database</source>
@@ -7072,11 +7760,11 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Import from KeePass 1</source>
- <translation>Importer depuis KeePass 1</translation>
+ <translation>Importer de KeePass 1</translation>
</message>
<message>
<source>Import from CSV</source>
- <translation>Importer depuis un fichier CSV</translation>
+ <translation>Importer d’un fichier CSV</translation>
</message>
<message>
<source>Recent databases</source>
@@ -7084,11 +7772,11 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Welcome to KeePassXC %1</source>
- <translation>Bienvenue dans KeePassXC %1</translation>
+ <translation>Bienvenue sur KeePassXC %1</translation>
</message>
<message>
<source>Import from 1Password</source>
- <translation>Importer depuis 1Password</translation>
+ <translation>Importer de 1Password</translation>
</message>
<message>
<source>Open a recent database</source>
@@ -7096,6 +7784,53 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Emplacement(s) configuré(s) - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Question-réponse – Emplacement %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Pressez</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passif</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 emplacement(s) spécifié(s) invalide(s) - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>L&apos;interface YubiKey n&apos;a pas été initialisée.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>La clé matérielle est en cours d&apos;utilisation.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Impossible de trouver la clé matérielle dont le numéro de série est %1. Veuillez la connecter afin de poursuivre.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Le temps imparti à l&apos;interaction utilisateur avec la clé matérielle est écoulé.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Une erreur USB est survenue lors de l&apos;accès à la clé matérielle : %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Échec de question-réponse, l’erreur particulière était : %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7107,23 +7842,31 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Si vous possédez une &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, vous pouvez l&apos;utiliser afin d&apos;améliorer la sécurité.&lt;/p&gt;&lt;p&gt;Cela nécessite qu&apos;un emplacement de votre YubiKey soit programmé comme &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;question-réponse HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Si vous possédez une &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, vous pouvez l’utiliser pour une sécurité accrue.&lt;/p&gt;&lt;p&gt;Un des emplacements de la YubiKey doit être programmé en tant que &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;Question-réponse HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Refresh hardware tokens</source>
+ <translation>Actualiser les jetons matériels</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Aucune YubiKey détectée, veuillez vérifier qu&apos;elle soit bien branchée.</translation>
+ <source>Hardware key slot selection</source>
+ <translation>Sélection de l’emplacement de la clé matérielle</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Aucune YubiKey insérée.</translation>
+ <source>Could not find any hardware keys!</source>
+ <translation>Impossible de trouver une clé matérielle !</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>Actualiser les clés matérielles</translation>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>L’emplacement de clé matérielle sélectionné ne prend pas en charge une question-réponse.</translation>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>Sélection de l&apos;emplacement de la clé matérielle</translation>
+ <source>Detecting hardware keys…</source>
+ <translation>Détection des clés matérielles...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Aucune clé matérielle détectée</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_he.ts b/share/translations/keepassx_he.ts
deleted file mode 100644
index 309bf7626..000000000
--- a/share/translations/keepassx_he.ts
+++ /dev/null
@@ -1,5423 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="he" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Debug Info</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Libraries:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deny</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encoding</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database description:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> MiB</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restore</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete all</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Presets</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download favicon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Uuid:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character Types</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Numbers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special Characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>0-9</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_hr_HR.ts b/share/translations/keepassx_hr_HR.ts
deleted file mode 100644
index 4a497ba5c..000000000
--- a/share/translations/keepassx_hr_HR.ts
+++ /dev/null
@@ -1,5423 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="hr_HR" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Debug Info</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Libraries:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deny</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encoding</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database description:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> MiB</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restore</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete all</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Presets</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download favicon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Uuid:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character Types</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Numbers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special Characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>0-9</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_hu.ts b/share/translations/keepassx_hu.ts
index 4d0d76812..43ac73509 100644
--- a/share/translations/keepassx_hu.ts
+++ b/share/translations/keepassx_hu.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH ügynök engedélyezése (újraindítást igényel)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>OpenSSH alkalmazása Windowson a Pageant helyett</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>SSH-ügynök engedélyezése</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK értéke</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK felülírása</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(üres)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Nincs elérhető foglalat az SSH-ügynök számára. Vagy győződjön meg arról, hogy létezik SSH_AUTH_SOCK környezeti változó, vagy állítson be egy felülírást.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Az SSH-ügynök kapcsolat működik!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Biztos, hogy vissza akarja állítani az összes általános és biztonsági beállítást az alapértelmezésre?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monokróm (világos)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monokróm (sötét)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Színes</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -120,17 +152,13 @@
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Indításkor az ablak kicsinyítése</translation>
+ <translation>Az ablak kicsinyítése indításkor</translation>
</message>
<message>
<source>File Management</source>
<translation>Fájlkezelés</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Adatbázisok biztonságos mentése (lehet, hogy inkompatibilis a Dropbox-szal és hasonlókkal)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Készüljön biztonsági mentés az adatbázisról mentés előtt</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Automatikus mentés kilépéskor</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Nem adatjellegű változások (pl. csoport lenyitása) esetén az adatbázis módosított állapotba kerülésének megakadályozása</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Külső módosításkor az adatbázis automatikus újratöltése</translation>
</message>
@@ -159,18 +183,6 @@
<translation>A csoport ikonjának használata a bejegyzés létrehozásakor</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>A bejegyzés előnézeti panel elrejtése</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Általános</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Eszköztár (ikonok) elrejtése</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Kilépés helyett minimalizálás</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Rendszertálca-ikon megjelenítése</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Sötét rendszertálca-ikon</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Az ablak rendszertálcára rejtése kicsinyítéskor</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Mindig kérdezzen az automatikus beírás megkezdése előtt</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globális automatikus beírás gyorsbillentyűje</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Automatikus beírás késleltetése</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Automatikus beírás kezdésének késleltetése</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Mozgatható eszköztár</translation>
</message>
@@ -244,10 +240,6 @@
<translation>A frissítések keresése a béta kiadásokra is terjedjen ki</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Gombstílus:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Nyelv:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Eszköztár gombstílusa</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Jegyzetek rögzített szélességű betűkészlettel</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Nyelvválasztás</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Beállítások visszaállítása az alapértelmezettre </translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Globális automatikus beírás gyorsbillentyűje</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Automatikus beírás indításának késleltetése milliszekundumban</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>KeePassXC automatikus indítása a rendszer indulásakor</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Nem adatjellegű változások (pl. csoport lenyitása) esetén az adatbázis megjelölése módosítottként</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Adatbázisok biztonságos mentése (Dropbox-szal és hasonlókkal való probléma esetén letiltandó)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Felhasználói felület</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Eszköztár gombstílusa:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Jegyzetek rögzített szélességű betűkészlettel</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Tálcaikon stílusa:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Beállítások visszaállítása az alapértelmezettre…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Automatikus beírás késleltetése:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Globális automatikus beírás gyorsbillentyűje:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Automatikus beírás kezdésének késleltetése:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Az előzőleg zárolt adatbázis újbóli zárolása automatikus beírást követően</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Jelszóismétlés elkerülése látható jelszó esetén</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Szerkesztéskor ne rejtse el a jelszavakat</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Na használjon helykitöltőt az üres jelszómezőknél</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Jelszavak elrejtése a bejegyzés előnézeti panelen</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Keresési kifejezés törlése ennyi idő után</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Jelszóismétlés szükséges látható jelszó esetén</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Jelszavak elrejtése szerkesztés alatt</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Üres jelszómezőknél helykitöltő alkalmazása</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-böngésző hozzáférés engedélyezése</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC-böngésző hozzáférési kérés</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Döntés megjegyzése</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 hozzáférést kér az alábbi bejegyzésekhez:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Engedélyezés</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Kijelölt bejegyzések hozzáférési engedélyezésének megjegyzése</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Megtagadás</translation>
+ <source>Remember</source>
+ <translation>Megjegyzés</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>A %1 jelszóengedélyt kér a következő elem(ek) számára.
-Válassza ki, hogy engedélyezi-e a hozzáférést.</translation>
+ <source>Allow access to entries</source>
+ <translation>Engedély megadása a bejegyzésekhez</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Hozzáférés megadása</translation>
+ <source>Allow Selected</source>
+ <translation>Kijelöltek engedélyezése</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Hozzáférés megtiltása</translation>
+ <source>Deny All</source>
+ <translation>Összes megtagadása</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Letiltás ezen az oldalon</translation>
</message>
</context>
<context>
@@ -579,309 +609,346 @@ Válassza ki a helyes adatbázist a hitelesítő adatok mentéséhez.</translati
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Párbeszédablak</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Új kulcstársítási kérés</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Ez szükséges az adatbázis KeePassXC-böngészőből történő eléréséhez</translation>
+ <source>Save and allow access</source>
+ <translation>Engedélyezési hozzáférés mentése</translation>
</message>
<message>
- <source>General</source>
- <translation>Általános</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Felülírja a létező kulcsot?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Böngészőintegráció engedélyezése a következőkhöz:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Létezik már egy megosztott titkosítási kulcs ezzel a névvel: „%1”.
+Valóban felülírható?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Bejegyzés frissítése</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Frissíti az információt ebben: %1 – %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Megszakítás</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Attribútumok átalakítása egyéni adatokká…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>É&amp;rtesítés megjelenítése hitelesítési adatok kérésekor</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Átalakított KeePassHTTP attribútumok</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Adatbázis feloldási &amp;kérelem, ha zárolva van</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Attribútumok sikeresen átalakítva %1 bejegyzésből.
+%2 kulcs áthelyezve az egyéni adatokhoz.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n kulcs sikeresen áthelyezve az egyéni adatokhoz.</numerusform><numerusform>%n kulcs sikeresen áthelyezve az egyéni adatokhoz.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Csak az azonos sémájú (http://, https://, …) bejegyzések visszaadása.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;URL sémákra illeszkedés (pl. https://…)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Az aktív adatbázisban nincs egyetlen KeePassHTTP attribútumokat tartalmazó bejegyzés sem.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Egy konkrét URL-hez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Örökölt böngészőintegrációs beállítások észlelve</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Csak a &amp;legjobb hitelesítési adatok visszaadása</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Új csoport létrehozása</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Illeszkedő hitelesítési adatok rendezése &amp;cím szerint</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Az új „%1” csoport létrehozási kérése fogadva.
+Biztos, hogy létrehozza ezt a csoportot?</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Illeszkedő hitelesítési adatok rendezése &amp;felhasználónév szerint</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>A KeePassXC-Browser beállításait át kell helyezni az adatbázis-beállításokba.
+Ez szükséges a jelenlegi böngészőkapcsolatok fenntartásához.
+Biztos, hogy migrálja most a meglévő beállításokat?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Speciális</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Ne jelenjen meg többé a figyelmeztetés</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Hozzáférési adatok elérése előtt soha ne &amp;kérdezzen</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>A következő adatbázishoz társítási kérelem érkezett:
+%1
+
+A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint amilyen pl. a „chrome-laptop”.
+</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Hozzáférési adatok &amp;frissítése előtt soha ne kérdezzen</translation>
+ <source>Dialog</source>
+ <translation>Párbeszédablak</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Keresés minden megnyitott adatbázis hitelesítési adataiban</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Ez szükséges az adatbázis KeePassXC-böngészőből történő eléréséhez</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>A karakterlánc mezők automatikus létrehozása vagy frissítése nem támogatott.</translation>
+ <source>Enable browser integration</source>
+ <translation>Böngészőintegráció engedélyezése</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>A „KPH:”-val kezdődő fejlett karakterlánc mezők &amp;visszaadása</translation>
+ <source>General</source>
+ <translation>Általános</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Indításkor automatikusan frissíti a KeePassXC vagy a keepassxc-proxy bináris útvonalát a natív üzenetküldő parancsfájlok felé.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>A snappal telepített böngészők jelenleg nem támogatottak. </translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Natív üzenetküldő manifest-fájlok frissítése indításkor</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Böngészőintegráció engedélyezése a következőkhöz:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Támogatást biztosít egy proxy-alkalmazásnak a KeePassXC és a böngésző kiterjesztés között.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Proxy-alkalmazás alkalmazása a KeePassXC és a böngésző kiterjesztés között</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Egyedi proxyhelyet kell beállítani manuálisan telepített proxy esetén.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Egyedi proxyhely alkalmazása</translation>
+ <source>Tor Browser</source>
+ <translation>Tor böngésző</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Tallózás…</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Figyelmeztetés:&lt;/b&gt; A következő beállítások veszélyesek lehetnek!</translation>
+ <source>Google Chrome</source>
+ <translation>&amp;Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Egyedi proxyhely kijelölése</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor böngésző</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Értesítés megjelenítése hitelesítési adatok kérésekor</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Végrehajtható fájlok</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Adatbázis feloldási kérelem, ha zárolva van</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Minden fájl</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Csak az azonos sémájú (http://, https://, …) bejegyzések visszaadása.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Ne kérjen engedélyt a HTTP &amp;Basic Auth számára</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>URL sémákra illeszkedés (pl. https://…)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>A Snap homokozó miatt egy parancsfájlt kell futtatni a böngészőintegráció engedélyezéséhez.&lt;br /&gt;Ezt innen szerezheti be: %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Egy konkrét URL-hez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Olvassa el a böngészőkiegészítő használatáról szóló különleges utasításokat alább</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Csak a legjobb hitelesítési adatok visszaadása</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>A böngészőintegráció működéséhez a KeePassXC-böngészőre van szükség. &lt;br /&gt;Letölthető ezen böngészőkre: %1 és %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>A lejárt hitelesítési adatok visszaadása. A [lejárt] szöveg hozzá lesz adva a címhez.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Lejárt hitelesítési adatok visszaadásának engedélyezése</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>A lejárt hitelesítési adatok visszaadása. A [lejárt] szöveg hozzá lesz adva a címhez.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Minden a kiterjesztéshez csatlakoztatott böngésző visszaadja az illeszkedő hitelesítési adatokat.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Lejárt hitelesítési adatok visszaadásának engedélyezése</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Keresés minden megnyitott adatbázis hitelesítési adataiban</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Böngészőintegráció engedélyezése</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Illeszkedő hitelesítési adatok rendezése cím szerint</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>A snappal telepített böngészők jelenleg nem támogatottak. </translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Illeszkedő hitelesítési adatok rendezése felhasználónév szerint</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Minden a kiterjesztéshez csatlakoztatott böngésző visszaadja az illeszkedő hitelesítési adatokat.</translation>
+ <source>Advanced</source>
+ <translation>Speciális</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Hozzáférési adatok elérése előtt soha ne kérdezzen</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Hozzáférési adatok frissítése előtt soha ne kérdezzen</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Ne kérjen engedélyt a HTTP Basic Auth számára</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>A karakterlánc mezők automatikus létrehozása vagy frissítése nem támogatott.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>A „KPH:”-val kezdődő fejlett karakterlánc mezők visszaadása</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Ne jelenjen meg a felugró ablak a örökölt KeePassHTTP beállításokból való költözésről.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Ne kérdezzen a KeePassHTTP beállításokból való költözésről</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Ne kérdezzen a KeePassHTTP beállításokból való költözésről</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Indításkor automatikusan frissíti a KeePassXC vagy a keepassxc-proxy bináris útvonalát a natív üzenetküldő parancsfájlok felé.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Natív üzenetküldő manifest-fájlok frissítése indításkor</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Egyéni proxyhelyet kell beállítani manuálisan telepített proxy esetén.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Egyéni proxyhely alkalmazása:</translation>
</message>
<message>
<source>Custom proxy location field</source>
- <translation>Egyedi proxyhely mező</translation>
+ <translation>Egyéni proxyhely mező</translation>
</message>
<message>
<source>Browser for custom proxy file</source>
- <translation>Egyedi proxyfájl böngészője</translation>
+ <translation>Egyéni proxyfájl böngészője</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Figyelem&lt;/b&gt;, a keepassxc-proxy alkalmazás nem található!&lt;br /&gt;Ellenőrizze a KeePassXC telepítési könyvtárat, vagy erősítse meg az egyéni útvonalat a speciális beállításokban.&lt;br /&gt;A böngészőintegráció NEM FOG MŰKÖDNI a proxy alkalmazás nélkül.&lt;br /&gt;Várt útvonal: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Tallózás…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Új kulcstársítási kérés</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Egyéni böngészőbeállítási hely alkalmazása:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Engedélyezési hozzáférés mentése</translation>
+ <source>Browser type:</source>
+ <translation>Böngészőtípus:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Felülírja a létező kulcsot?</translation>
+ <source>Toolbar button style</source>
+ <translation>Eszköztár gombstílusa</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Létezik már egy megosztott titkosítási kulcs ezzel a névvel: „%1”.
-Valóban felülírható?</translation>
+ <source>Config Location:</source>
+ <translation>Beállítási hely:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Bejegyzés frissítése</translation>
+ <source>Custom browser location field</source>
+ <translation>Egyéni böngésző helymező</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Frissíti az információt ebben: %1 – %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Megszakítás</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Böngésző egyéni eléri útvonalának tallózása</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Attribútumok átalakítása egyéni adatokká…</translation>
+ <source>Custom extension ID:</source>
+ <translation>Egyéni kiterjesztésazonosító:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Átalakított KeePassHTTP attribútumok</translation>
+ <source>Custom extension ID</source>
+ <translation>Egyéni kiterjesztésazonosító</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Attribútumok sikeresen átalakítva %1 bejegyzésből.
-%2 kulcs áthelyezve az egyéni adatokhoz.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n kulcs sikeresen áthelyezve az egyéni adatokhoz.</numerusform><numerusform>%n kulcs sikeresen áthelyezve az egyéni adatokhoz.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>A Snap homokozó miatt egy parancsfájlt kell futtatni a böngészőintegráció engedélyezéséhez.&lt;br /&gt;Ezt innen szerezheti be: %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>A böngészőintegráció működéséhez a KeePassXC-böngészőre van szükség. &lt;br /&gt;Letölthető ezen böngészőkre: %1, %2, %3, 4%</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Az aktív adatbázisban nincs egyetlen KeePassHTTP attribútumokat tartalmazó bejegyzés sem.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Olvassa el a böngészőkiegészítő használatáról szóló különleges utasításokat alább</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Örökölt böngészőintegrációs beállítások észlelve</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Hiba:&lt;/b&gt; Az egyéni proxyhely nem található!
+&lt;br/&gt;A böngészőintegráció NEM FOG MŰKÖDNI a proxy-alkalmazás nélkül.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Új csoport létrehozása</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Figyelmeztetés:&lt;/b&gt; A következő beállítások veszélyesek lehetnek!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Az új „%1” csoport létrehozási kérése fogadva.
-Biztos, hogy létrehozza ezt a csoportot?</translation>
+ <source>Executable Files</source>
+ <translation>Végrehajtható fájlok</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>A KeePassXC-Browser beállításait át kell helyezni az adatbázis-beállításokba.
-Ez szükséges a jelenlegi böngészőkapcsolatok fenntartásához.
-Biztos, hogy migrálja most a meglévő beállításokat?</translation>
+ <source>All Files</source>
+ <translation>Minden fájl</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Ne jelenjen meg többé a figyelmeztetés</translation>
+ <source>Select custom proxy location</source>
+ <translation>Egyéni proxyhely kijelölése</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>A következő adatbázishoz társítási kérelem érkezett:
-%1
-
-A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint amilyen pl. a „chrome-laptop”.
-</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Jelölje ki a natív üzenetküldési kiszolgálót tartalmazó mappát</translation>
</message>
</context>
<context>
@@ -938,10 +1005,6 @@ A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint am
<translation>Megjegyzések kezdete</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Az első sor fejléc</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>„\” feloldójelnek értelmezve</translation>
</message>
@@ -950,14 +1013,6 @@ A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint am
<translation>Előnézet</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Oszlopelrendezés</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Nincs jelen a CSV-fájlban</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>CSV-fájlból importálva</translation>
</message>
@@ -970,14 +1025,6 @@ A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint am
<translation>Hiba</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Üres mezőnév: %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>%1. oszlop</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Hibák találhatók a CSV-fájlban!</translation>
</message>
@@ -1007,6 +1054,58 @@ A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint am
<source>CSV import preview</source>
<translation>CSV-import előnézete</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Oszloptársítások</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Legutóbb módosítva</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Jelszó</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Létrehozva</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Jegyzetek</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Cím</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Csoport</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Felhasználónév</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Fejlécsor kihagyva</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Az első sor mezőnevek</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Nincs jelen</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>%1. oszlop</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1031,11 +1130,6 @@ A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint am
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Gyökér</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>A(z) %1 fájl nem létezik</translation>
</message>
@@ -1077,6 +1171,19 @@ Az adatbázis biztonsági másolata: %2</translation>
<source>Recycle Bin</source>
<translation>Kuka</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Jelszavak</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Adatbázismentés már folyamatban van.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Nem menthető, az adatbázis nincs előkészítve.</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1129,10 +1236,6 @@ Megfontolandó egy új kulcsfájl készítése.</translation>
<translation>A kulcsfájl megnyitása sikertelen: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Foglalat kijelölése…</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>KeePassXC adatbázis feloldása</translation>
</message>
@@ -1145,14 +1248,6 @@ Megfontolandó egy új kulcsfájl készítése.</translation>
<translation>Jelszó mező</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Jelszó láthatóságának átváltása</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Kulcsfájl kijelölése</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Hardverkulcsfoglalat kijelölése</translation>
</message>
@@ -1217,10 +1312,6 @@ Ezen hiba megjelenése megelőzhető az Adatbázis-beállítások → Biztonság
&lt;p&gt;További információk…&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;A mesterkulcs mellett egy titkos fájlt is használhat, hogy javítsa az adatbázisa biztonságát. Egy ilyen fájl az adatbázis biztonsági beállításaiban állítható elő.&lt;/p&gt;&lt;p&gt;Ez &lt;strong&gt;nem&lt;/strong&gt; a *.kdbx adatbázisfájlja!&lt;br&gt;Ha nincs kulcsfájlja, akkor hagyja üresen a mezőt.&lt;/p&gt;&lt;p&gt;Kattintson a további információkért…&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Kulcsfájlok súgója</translation>
</message>
@@ -1229,10 +1320,6 @@ Ezen hiba megjelenése megelőzhető az Adatbázis-beállítások → Biztonság
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Kulcsfájl kiválasztása…</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Adatbázisfájl nem használható kulcsfájlként</translation>
</message>
@@ -1241,6 +1328,30 @@ Ezen hiba megjelenése megelőzhető az Adatbázis-beállítások → Biztonság
If you do not have a key file, please leave the field empty.</source>
<translation>Nem használhatja az adatbázisfájlt kulcsfájlként. Ha nincs kulcsfájlja, akkor hagyja üresen a mezőt.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;A mesterkulcs mellett egy titkos fájlt is használhat, hogy javítsa az adatbázisa biztonságát. Ez a fájl az adatbázis biztonsági beállításaiban állítható elő.&lt;/p&gt;&lt;p&gt;Ez &lt;strong&gt;nem&lt;/strong&gt; a *.kdbx adatbázisfájlja!&lt;br&gt;Ha nincs kulcsfájlja, akkor hagyja üresen ezt a mezőt.&lt;/p&gt;&lt;p&gt;Kattintson a további információkért…&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Adatbázis feloldására való kulcsfájl</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Meg kell érinteni a gombot a YubiKeyen!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Hardverkulcsok felismerése…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nincsenek felismert hardverkulcsok.</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Hardverkulcs kijelölése…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1264,10 +1375,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Biztonság</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Mesterkulcs</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Titkosítási beállítások</translation>
</message>
@@ -1275,6 +1382,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Böngészőintegráció</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Adatbázis hitelesítési adatai</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1283,18 +1394,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-böngésző beállítások</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>Minden böngésző &amp;leválasztása</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>A bejegyzések összes oldalfüggő beállításának &amp;elfelejtése</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>HTTP attribútumok áthelyezése a KeePassXC-böngésző &amp;egyéni adatokhoz</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Tárolt kulcsok</translation>
</message>
@@ -1402,6 +1501,67 @@ Ez szükséges a böngészőbővítmény kompatibilitásának fenntartásához.<
<source>Remove selected key</source>
<translation>Kijelölt kulcs eltávolítása</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>HTTP attribútumok áthelyezése a KeePassXC-böngésző egyéni adatokhoz</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Adatbázis gyökércsoport-azonosítójának frissítése</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Létrehozva</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Adatbázis-azonosító frissítése</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Valóban frissíthető az adatbázis-azonosító?
+Erre csak akkor lehet szükség, ha az adatbázis egy másik másolata és a böngésző kiterjesztés nem tud kapcsolódni.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>További védelem hozzáadása…</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nincs jelszó megadva</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>FIGYELEM! Nem állított be jelszót! Az adatbázis jelszó nélküli használata erősen ellenjavallt!
+
+Valóban jelszó nélkül folytatja?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Folytatás jelszó nélkül</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nincs titkosítási kulcs hozzáadva</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Legalább egy titkosítási kulcsot hozzá kell adni, hogy megvédje az adatbázisát!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Ismeretlen hiba</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Az adatbázis hitelesítési adatainak módosítása sikertelen</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1419,17 +1579,13 @@ Ez szükséges a böngészőbővítmény kompatibilitásának fenntartásához.<
</message>
<message>
<source>Key Derivation Function:</source>
- <translation>Kulcsszármaztatási függvény:</translation>
+ <translation>Kulcsszármaztató függvény:</translation>
</message>
<message>
<source>Transform rounds:</source>
<translation>Átalakítási fordulók száma:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Egy másodperces késleltetésű teljesítményvizsgálat</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Memóriahasználat:</translation>
</message>
@@ -1450,14 +1606,6 @@ Ez szükséges a böngészőbővítmény kompatibilitásának fenntartásához.<
<translation>Módosítása</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>A magasabb értékek nagyobb védelmet adnak, de az adatbázis megnyitása tovább fog tartani.</translation>
</message>
@@ -1527,23 +1675,13 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.</translati
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>MiB</numerusform><numerusform>MiB</numerusform></translation>
+ <translation><numerusform> MiB</numerusform><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>szál</numerusform><numerusform>szál</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Meglévő visszafejtése idő módosítása</translation>
@@ -1562,7 +1700,7 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.</translati
</message>
<message>
<source>Key derivation function</source>
- <translation>Kulcsszármaztatási függvény</translation>
+ <translation>Kulcsszármaztató függvény</translation>
</message>
<message>
<source>Transform rounds</source>
@@ -1576,6 +1714,14 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.</translati
<source>Parallelism</source>
<translation>Párhuzamosság</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1584,16 +1730,16 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.</translati
<translation>Nyitott bejegyzések</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Ne legyen megnyitva ez az adatbázis</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Ne legyen lenyitva ez az adatbázis</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>A csoport &amp;alatti bejegyzések legyenek megnyitva:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>A csoport alatti bejegyzések legyenek lenyitva:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Az fd.o titkosító szolgáltatás engedélyezésével aktiválhatók ezek a beállítások.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>A titkosító szolgáltatás engedélyezésével aktiválhatók ezek a beállítások.</translation>
</message>
</context>
<context>
@@ -1632,17 +1778,13 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.</translati
</message>
<message>
<source>Use recycle bin</source>
- <translation>Kuka használata</translation>
+ <translation>Kuka alkalmazása</translation>
</message>
<message>
<source>Additional Database Settings</source>
<translation>További adatbázis-beállítások</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>&amp;Tömörítés engedélyezése (ajánlott)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Adatbázisnév mező</translation>
</message>
@@ -1669,13 +1811,17 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.</translati
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
- <translation>Valóban törölhető az aktuállis kuka minden elemével együtt?
-Ez vissza nem vonható!</translation>
+ <translation>Valóban törölhető az aktuális kuka minden elemével együtt?
+Ez nem vonható vissza!</translation>
</message>
<message>
<source> (old)</source>
<translation>(régi)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Tömörítés engedélyezése (ajánlott)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1710,45 +1856,6 @@ Ez vissza nem vonható!</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>További védelem hozzáadása…</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nincs titkosítási kulcs hozzáadva</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Legalább egy titkosítási kulcsot hozzá kell adni, hogy megvédje az adatbázisát!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Nincs jelszó megadva</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>FIGYELEM! Nem állított be jelszót! Az adatbázis jelszó nélküli használata erősen ellenjavallt!
-
-Valóban jelszó nélkül folytatja?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Ismeretlen hiba</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>A mesterkulcs módosítása meghiúsult</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Folytatás jelszó nélkül</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1768,125 +1875,6 @@ Valóban jelszó nélkül folytatja?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statisztika</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>További információk a hibaikonokkal rendelkező vonalak fölé vitt egérrel nyerhetők.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Név</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Érték</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Adatbázisnév</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Leírás</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Hely</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Legutóbb mentve</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Nem mentett módosítsok</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>igen</translation>
- </message>
- <message>
- <source>no</source>
- <translation>nem</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Az adatbázis módosítva lett, de még nem lett lemezre mentve.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Csoportszám</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Bejegyzésszám</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Lejárt bejegyzések száma</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Az adatbázis lejárt bejegyzéseket tartalmaz.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Egyedi jelszavak</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Nem egyedi jelszavak</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>A jelszavak több, mint 10%-a újrahasznosított. Egyedi jelszavakat kellene használni, ahol csak lehetséges.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maximális jelszó-újrahasznosítás</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Néhány jelszó több, mint háromszor lett újrahasznosítva. Egyedi jelszavakat kellene használni, ahol csak lehetséges.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Rövid jelszavak száma</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>A jelszavak javasolt minimális hosszúsága legalább 8 karakter.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Gyenge jelszavak száma</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Olyan hosszú és véletlenszerű jelszavak használata javasolt, melyek besorolása „jó” és „kiváló”.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Átlagos jelszóhossz</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 karakter</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Az átlagos jelszóhossz kevesebb, mint 10 karakter. A hosszabb jelszavak nagyobb biztonságot szavatolnak.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Várjon, az adatbázis statisztikák kiszámításra kerülnek…</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1981,6 +1969,10 @@ Ez határozottan hiba, jelentse a fejlesztőknek.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Az adatbázis nem titkosított fájlba lesz exportálva. Így sebezhetőek lesznek a jelszavak és más érzékeny információk. Valóban folytatható a művelet?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>OPVault megnyitása</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1998,7 +1990,7 @@ Ez határozottan hiba, jelentse a fejlesztőknek.</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Biztos, hogy a kukába dob %n elemet?</numerusform><numerusform>Biztos, hogy a kukába dob %n elemet?</numerusform></translation>
+ <translation><numerusform>Valóban a kukába szeretne dobni %n elemet?</numerusform><numerusform>Valóban a kukába szeretne dobni %n elemet?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2056,11 +2048,11 @@ Egyesíti a módosításokat?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Valóban véglegesen töröl mindent a kukából?</translation>
+ <translation>Valóban minden véglegesen törölhető a kukából?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Biztos, hogy végleg töröl %n elemet?</numerusform><numerusform>Biztos, hogy végleg töröl %n elemet?</numerusform></translation>
+ <translation><numerusform>Valóban végleg szeretné törölni a(z) %n bejegyzést?</numerusform><numerusform>Valóban végleg szeretné törölni a(z) %n bejegyzést?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2124,7 +2116,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
</message>
<message>
<source>Replace references to entry?</source>
- <translation>Lecserélhető a bejegyzésre való hivatkozás?</translation>
+ <translation>Lecseréli a bejegyzésre mutató hivatkozásokat?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
@@ -2136,11 +2128,11 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
</message>
<message>
<source>Move group to recycle bin?</source>
- <translation>Legyen a csoport áthelyezve a kukába?</translation>
+ <translation>Áthelyezi a csoportot a kukába?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Valóban legyen a(z) „%1” csoport áthelyezve a kukába?</translation>
+ <translation>Valóban áthelyezi a(z) „%1” csoportot a kukába?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
@@ -2162,6 +2154,14 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Az adatbázis csak olvasható módban lett megnyitva. Az automatikus mentés le van tiltva.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Biztonsági mentés készítése az adatbázisról</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Az adatbázis-fájl nem található: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2191,7 +2191,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
</message>
<message>
<source>SSH Agent</source>
- <translation>SSH ügynök</translation>
+ <translation>SSH-ügynök</translation>
</message>
<message>
<source>n/a</source>
@@ -2206,14 +2206,6 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>Személyes kulcs kijelölése</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>A fájl túl nagy ahhoz, hogy személyes kulcs legyen</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Személyes kulcs megnyitása meghiúsult</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Előzmény-bejegyzés</translation>
</message>
@@ -2226,10 +2218,6 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>Bejegyzés szerkesztése</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Eltérő jelszavak lettek megadva.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Új attribútum</translation>
</message>
@@ -2250,29 +2238,13 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation><numerusform>%n hónap</numerusform><numerusform>%n hónap</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Alkalmazható az előállított jelszó?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Valóban alkalmazható az előállított jelszó ehhez a bejegyzéshez?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Bejegyzés sikeresen frissítve.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>A bejegyzésnek mentetlen változásai vannak</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Új %1 attribútum</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[VÉDETT] A megjelenítés vagy a szerkesztés a „Felfedés” gombbal érhető el</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n év</numerusform><numerusform>%n év</numerusform></translation>
@@ -2293,6 +2265,26 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<source>Are you sure you want to remove this URL?</source>
<translation>Valóban eltávolítja ezt az URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Felfedés</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Elrejtés</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Nem mentett módosítások</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Valóban menthetőek a bejegyzés módosításai?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[VÉDETT] A megjelenítés vagy a szerkesztés a „Felfedés” gombbal érhető el</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2326,7 +2318,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
</message>
<message>
<source>Foreground Color:</source>
- <translation>Előtérszín:</translation>
+ <translation>Előtérszín</translation>
</message>
<message>
<source>Background Color:</source>
@@ -2368,6 +2360,14 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<source>Background color selection</source>
<translation>Háttérszínválasztás</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Bejelölve, ez a bejegyzés nem fog szerepelni az állapotfelmérési jelentésben vagy HIBP ellenőrzésben, akkor sem, ha nem teljesíti a minőségi követelményeket (pl. jelszóentrópia vagy újrafelhasználás). Ez hasznos akkor, ha a jelszó nem áll az ellenőrzése alatt (pl. egy négyjegyű számból álló PIN kódnak kell lennie), hogy ne rontsa a jelentést.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Kizárás az adatbázis jelentésekből</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2376,14 +2376,6 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>Automatikus beírás engedélyezése ennél a bejegyzésnél</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Az alapértelmezett automatikus beírási sorrend öröklése a &amp;csoporttól</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Egyéni automatikus beírási sorrend használata:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Ablaktársítások</translation>
</message>
@@ -2439,6 +2431,14 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<source>Custom Auto-Type sequence for this window</source>
<translation>Egyéni automatikus beírási sorrend ehhez az ablakhoz</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Az alapértelmezett automatikus beírási sorrend öröklése a csoporttól</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Egyéni automatikus beírási sorrend használata:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2474,6 +2474,14 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<source>Edit</source>
<translation>Szerkesztés</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Ezt a beállítást csak a böngésző HTTP Auth párbeszédablakának küldje. Bejelölve a normál bejelentkezési űrlapokon ez a bejegyzés nem fog kiválaszthatóként feltűnni.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Bejegyzés alkalmazása csak HTTP Basic Auth-tal</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2525,18 +2533,10 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>Jelszó:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Ismétlés:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Cím:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Jegyzetek</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Előbeállítások</translation>
</message>
@@ -2549,10 +2549,6 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>Felhasználónév:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Lejárat</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL mező</translation>
</message>
@@ -2561,22 +2557,10 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>URL faviconjának letöltése</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Jelszómező ismétlése</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Jelszó-előállító átváltása</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Jelszó mező</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Jelszó láthatóságának átváltása</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Jegyzetek láthatóságának átváltása</translation>
</message>
@@ -2608,6 +2592,18 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<source>Toggle expiration</source>
<translation>Lejárat átváltása</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Jegyzetek:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Lejárat:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2743,10 +2739,6 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Űrlap</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Típus:</translation>
</message>
@@ -2755,10 +2747,6 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
<translation>Útvonal:</translation>
</message>
<message>
- <source>...</source>
- <translation>…</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Jelszó:</translation>
</message>
@@ -2842,57 +2830,25 @@ Támogatott kiterjesztések: %1.</translation>
<translation>Megosztási fájl mező útvonala</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Megosztási fájl böngészése</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Jelszó mező</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Jelszó láthatóságának átváltása</translation>
+ <source>Clear fields</source>
+ <translation>Mezők törlése</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Jelszó-előállító átváltása</translation>
+ <source>Browse for share file</source>
+ <translation>Megosztási fájl böngészése</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Mezők törlése</translation>
+ <source>Browse...</source>
+ <translation>Tallózás…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Név</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Jegyzetek</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Lejárat</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Keresés</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Automatikus beírás</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>A szülőcsoport automatikus beírási sorrendjének &amp;használata</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>&amp;Egyéni automatikus beírási sorrend beállítása</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Névmező</translation>
</message>
@@ -2920,18 +2876,38 @@ Támogatott kiterjesztések: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Alapértelmezett automatikus beírási sorrend mező</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Alapértelmezett &amp;ikon használata</translation>
+ <source>Expires:</source>
+ <translation>Lejárat:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>A szülőcsoport automatikus beírási sorrendjének alkalmazása</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Automatikus beírás:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Keresés:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>&amp;Egyéni ikon használata</translation>
+ <source>Notes:</source>
+ <translation>Jegyzetek:</translation>
</message>
<message>
+ <source>Name:</source>
+ <translation>Név:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Egyéni automatikus beírási sorrend beállítása</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Egyéni ikon hozzáadása</translation>
</message>
@@ -2996,14 +2972,6 @@ Támogatott kiterjesztések: %1.</translation>
<translation>Kijelölt ikon alkalmazása az alcsoportokra és bejegyzésekre</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Ikon alkalmazása &amp;ehhez…</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Alkalmazás csak ehhez</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Alkalmazás az alcsoportokra is</translation>
</message>
@@ -3019,6 +2987,22 @@ Támogatott kiterjesztések: %1.</translation>
<source>Existing icon selected.</source>
<translation>Létező ikon kijelölve.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Alapértelmezett ikon alkalmazása</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Egyéni ikon alkalmazása</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Ikon alkalmazása ehhez…</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Alkalmazás csak ehhez a csoporthoz</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3040,7 +3024,7 @@ Támogatott kiterjesztések: %1.</translation>
</message>
<message>
<source>Plugin Data</source>
- <translation>Bővítmény adati</translation>
+ <translation>Beépülő adati</translation>
</message>
<message>
<source>Remove</source>
@@ -3180,8 +3164,8 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>A fájl nem nyitható meg:
-%1</numerusform><numerusform>A fájlok nem nyithatóak meg:
+ <translation><numerusform>A fájl nem megnyitható:
+%1</numerusform><numerusform>A fájlok nem megnyithatóak:
%1</numerusform></translation>
</message>
<message>
@@ -3204,6 +3188,20 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
<source>Save selected attachment to disk</source>
<translation>Kijelölt melléklet lemezre mentése</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 egy nagy fájl (%2 MB).
+Az adatbázis így nagyon nagy lesz és rontani fogja a teljesítményt.
+
+Biztosan hozzáadható ez a fájl?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Melléklet megerősítése</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3287,12 +3285,52 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
<translation>Mellékletek</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Igen</translation>
+ <source>Size</source>
+ <translation>Méret</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Csoportnév</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Bejegyzés címe</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Megjegyzés a bejegyzéshez</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Bejegyzés lejárata</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Létrehozási dátum</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Utolsó módosítás dátuma</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Utolsó elérési dátum</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Mellékelt fájlok</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Bejegyzés mérete</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Van melléklete</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Van időalapú, egyszer használatos jelszava (TOTP)</translation>
</message>
</context>
<context>
@@ -3392,6 +3430,13 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Érvénytelen URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3418,8 +3463,14 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
<translation>Visszaállítás alapértelmezettre</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Mellékletek (ikon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Van melléklete</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Van TOTP-je</translation>
</message>
</context>
<context>
@@ -3431,21 +3482,74 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Nem sikerült regisztrálni a DBus-szolgáltatást, mivel egy másik titkosító szolgáltatás már fut: %1.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%1 használt %n bejegyzést</numerusform><numerusform>%1 használt %n bejegyzést</numerusform></translation>
+ <translation><numerusform>%n bejegyzést használ: %1</numerusform><numerusform>%n bejegyzést használ: %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Nem sikerült regisztrálni a DBus-szolgáltatást: %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Fájlnév</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Csoport</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Kezelés</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Feloldás a megjelenítéshez</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nincs</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Alkalmazás</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Kezelés</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo titkosító szolgáltatás: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo titkosító szolgáltatás:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Ismeretlen</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Ismeretlen</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, futtatható: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Egy másik titkosító szolgáltatás is fut (%1).&lt;br/&gt;Állítsa le vagy távolítsa el, mielőtt újra engedélyezné a titkosító szolgáltatás integrációját.</translation>
</message>
</context>
<context>
@@ -3457,14 +3561,10 @@ Ez a kijelölt bővítmény hibás működését eredményezheti.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: A fájlt nem menthető!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Nem lehet menteni a natív üzenetküldő parancsfájlt.</translation>
+ <source>Online password validation failed</source>
+ <translation>Az online jelszó-érvényesítés sikertelen</translation>
</message>
</context>
<context>
@@ -3534,20 +3634,12 @@ A DuckDuckGo weboldal ikon szolgáltatást az alkalmazás beállításai közöt
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nem lehet kiszámítani a mesterkulcsot</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nem lehet kiutalni a kihívás-választ.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>hiányzó adatbázis fejlécek</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation>A fejléc nem egyezik meg a kivonat értékkel</translation>
+ <translation>A fejléc nem egyezik meg a hasítóértékkel</translation>
</message>
<message>
<source>Invalid header id size</source>
@@ -3567,16 +3659,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Érvénytelenek a hitelesítési adatok, újra kell próbálkozni.
Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Nem lehet kiszámítani az adatbáziskulcsot</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nem lehet kiutalni a kihívás-választ: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nem lehet kiutalni a kihívás-választ.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nem lehet kiutalni a kihívás-választ: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nem lehet kiszámítani a mesterkulcsot</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Nem lehet kiszámítani az adatbáziskulcsot</translation>
</message>
</context>
<context>
@@ -3586,10 +3686,6 @@ Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
<translation>hiányzó adatbázis fejlécek</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nem lehet kiszámítani a mesterkulcsot</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Érvénytelen fejlécellenőrző összeg</translation>
</message>
@@ -3619,7 +3715,7 @@ Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation>Nem támogatott kulcsszármaztatási függvény (KDF) vagy érvénytelen paraméter</translation>
+ <translation>Nem támogatott kulcsszármaztató függvény (KDF) vagy érvénytelen paraméter</translation>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
@@ -3707,6 +3803,10 @@ Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
<source>(HMAC mismatch)</source>
<translation>(HMAC eltérés)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Nem lehet kiszámítani az adatbáziskulcsot: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3720,14 +3820,14 @@ Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
<translation>Érvénytelen szimmetrikus titkosító IV méret.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nem lehet kiszámítani a mesterkulcsot</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>A KDF-változattérkép-paraméterek sorbafejtése sikertelen.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Nem lehet kiszámítani az adatbáziskulcsot: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3877,10 +3977,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a
<translation>Hiányzik a bejegyzés karakterlánckulcsa vagy -értéke </translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Kétszeres melléklet található</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Hiányzik a bejegyzés bináris kulcsa vagy értéke </translation>
</message>
@@ -3927,6 +4023,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>A KeeAgent beállítási fájl felépítése érvénytelen.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>A személyes kulcs egy melléklet lenne, de nincs melléklet.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Üres a személyes kulcs</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>A fájl túl nagy ahhoz, hogy személyes kulcs legyen</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Személyes kulcs megnyitása meghiúsult</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3970,7 +4089,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid content hash size</source>
- <translation>Érvénytelen tartalomkivonat-méret</translation>
+ <translation>Érvénytelen a tartalom hasítóértékének mérete</translation>
</message>
<message>
<source>Invalid transform seed size</source>
@@ -3989,10 +4108,6 @@ Line %2, column %3</source>
<translation>Gyökér</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nem lehet kiszámítani a mesterkulcsot</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Kulcsátalakítás sikertelen</translation>
</message>
@@ -4094,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Érvénytelenek a hitelesítési adatok, újra kell próbálkozni.
Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Nem lehet kiszámítani az adatbáziskulcsot</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4200,15 +4319,6 @@ Ha ez újból előfordul, lehet hogy az adatbázisfájl sérült.</translation>
<translation>Örökölt kulcsfájl formátum</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Egy régi, örökölt kulcsfájl formátumot használ, ami a közeljövőben már nem lesz támogatott.
-
-Ugorjon a mesterkulcs beállításokhoz, és állítson elő egy új kulcsfájlt.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Hiba a(z) „%1” kulcsfájl betöltésekor
@@ -4276,6 +4386,15 @@ Are you sure you want to continue with this file?</source>
<translation>Úgy tűnik, hogy a kijelölt kulcsfájl egy jelszóadatbázis-fájl. A kulcsfájl egy statikus fájl kell legyen, ami sohasem változik, különben örökre el fog veszni az adatbázishoz való hozzáférés.
Valóban folytatható a művelet ezzel a fájllal?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Egy régi, örökölt kulcsfájl formátumot használ, ami a közeljövőben már nem lesz támogatott.
+
+Állítson elő egy új kulcsfájlt az adatbázis biztonsági beállításaiban.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4284,18 +4403,10 @@ Valóban folytatható a művelet ezzel a fájllal?</translation>
<translation>&amp;Adatbázis</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Friss adatbázisok</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Súgó</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Bejegyzések</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Csoportok</translation>
</message>
@@ -4312,46 +4423,10 @@ Valóban folytatható a művelet ezzel a fájllal?</translation>
<translation>&amp;Névjegy</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Adatbázis megnyitása…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Adatbázis &amp;mentése</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Adatbázis &amp;bezárása</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Bejegyzés &amp;törlése</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Csoport sz&amp;erkesztése</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Csoport &amp;törlése</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Adatbázis mentése más &amp;néven…</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Adatbázis-beállítások</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>Bejegyzés &amp;klónozása</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>&amp;Felhasználónév másolása</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Felhasználónév másolása a vágólapra</translation>
</message>
@@ -4364,10 +4439,6 @@ Valóban folytatható a művelet ezzel a fájllal?</translation>
<translation>&amp;Beállítások</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Adatbázisok &amp;zárolása</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Cím</translation>
</message>
@@ -4392,14 +4463,6 @@ Valóban folytatható a művelet ezzel a fájllal?</translation>
<translation>Jegyzetek másolása a vágólapra</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>Exportálás &amp;CSV-fájlba…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>TOTP beállítása…</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>&amp;TOTP másolása</translation>
</message>
@@ -4443,10 +4506,6 @@ Ez a verzió nem felhasználóknak készült.</translation>
<translation>&amp;Támogatás</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>&amp;Hiba jelentése</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>FIGYELMEZTETÉS: A Qt verziója miatt a KeePassXC összeomolhat egy képernyő-billentyűzettel!
@@ -4457,182 +4516,360 @@ Javasoljuk az AppImage alkalmazását, amely elérhető a letöltések oldalon.<
<translation>&amp;Importálás</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Att&amp;ribútum másolása…</translation>
+ <source>Create a new database</source>
+ <translation>Új adatbázis létrehozása</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP…</translation>
+ <source>Merge from another KDBX database</source>
+ <translation>Egyesítés egy másik KeePassX adatbázisból</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>Ú&amp;j adatbázis…</translation>
+ <source>Add a new entry</source>
+ <translation>Új bejegyzés hozzáadása</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Új adatbázis létrehozása</translation>
+ <source>View or edit entry</source>
+ <translation>Bejegyzés megtekintése vagy szerkesztése</translation>
+ </message>
+ <message>
+ <source>Add a new group</source>
+ <translation>Új csoport hozzáadása</translation>
+ </message>
+ <message>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>&amp;Automatikus beírás</translation>
+ </message>
+ <message>
+ <source>Open &amp;URL</source>
+ <translation>&amp;URL megnyitása</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>KeePass 1 adatbázis importálása</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>CSV-fájl importálása</translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>MEGJEGYZÉS: Ez egy előzetes kiadású KeePassXC verzió!
+Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem ajánlott éles használatra.</translation>
+ </message>
+ <message>
+ <source>Check for updates on startup?</source>
+ <translation>Keressen a program induláskor frissítéseket?</translation>
+ </message>
+ <message>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Valóban keressen a program induláskor frissítéseket?</translation>
+ </message>
+ <message>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>A program menüjéből bármikor saját kezűleg is indítható a frissítések keresése.</translation>
+ </message>
+ <message>
+ <source>&amp;Export</source>
+ <translation>&amp;Exportálás</translation>
+ </message>
+ <message>
+ <source>Sort &amp;A-Z</source>
+ <translation>Rendezés: &amp;A–Z</translation>
+ </message>
+ <message>
+ <source>Sort &amp;Z-A</source>
+ <translation>Rendezés: &amp;Z–A</translation>
+ </message>
+ <message>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Jelszó-előállító</translation>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation>1Password Vault importálása</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Kezdő lépések</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>Felhasználói &amp;kézikönyv</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Gyorsbillentyűk</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Friss adatbázisok</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Bejegyzések</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Att&amp;ribútum másolása</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Nézet</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
+ <source>Theme</source>
+ <translation>Téma</translation>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Frissítések keresése</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>Adatbázis &amp;megnyitása…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>Adatbázis &amp;mentése</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>Adatbázis &amp;bezárása</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>Ú&amp;j adatbázis</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
<translation>&amp;Egyesítés adatbázisból…</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Egyesítés egy másik KeePassX adatbázisból</translation>
+ <source>&amp;New Entry…</source>
+ <translation>Új b&amp;ejegyzés…</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>Ú&amp;j bejegyzés</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation>Bejegyzés sze&amp;rkesztése…</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Új bejegyzés hozzáadása</translation>
+ <source>&amp;Delete Entry…</source>
+ <translation>Bejegyzés &amp;törlése…</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>Bejegyzés sz&amp;erkesztése</translation>
+ <source>&amp;New Group…</source>
+ <translation>Ú&amp;j csoport…</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Bejegyzés megtekintése vagy szerkesztése</translation>
+ <source>&amp;Edit Group…</source>
+ <translation>Csoport sz&amp;erkesztése…</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>Ú&amp;j csoport</translation>
+ <source>&amp;Delete Group…</source>
+ <translation>Csoport &amp;törlése…</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Új csoport hozzáadása</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Minden favicon &amp;letöltése…</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>&amp;Mesterkulcs módosítása…</translation>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Adatbázis mentése más &amp;néven…</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Adatbázis-beállítások…</translation>
+ <source>Database &amp;Security…</source>
+ <translation>Adatbázis &amp;biztonság…</translation>
</message>
<message>
- <source>Copy &amp;password</source>
+ <source>Database &amp;Reports...</source>
+ <translation>Adatbázis &amp;jelentések…</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statisztika, állapotfelmérés, stb.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Adatbázis-&amp;beállítások…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>Bejegyzés &amp;klónozása…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Mozgatás &amp;fel</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Bejegyzés mozgatása egy lépéssel feljebb</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Mozgatás &amp;le</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Bejegyzés mozgatása egy lépéssel lejebb</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>&amp;Felhasználónév másolása</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
<translation>&amp;Jelszó másolása</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>&amp;Automatikus beírás</translation>
+ <source>Download &amp;Favicon</source>
+ <translation>&amp;Favicon letöltése</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>&amp;URL megnyitása</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>Adatbázisok &amp;zárolása</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV-fájl…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML-fájl</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
<translation>KeePass 1 adatbázis…</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>KeePass 1 adatbázis importálása</translation>
+ <source>1Password Vault…</source>
+ <translation>1Password Vault…</translation>
</message>
<message>
- <source>CSV file...</source>
+ <source>CSV File…</source>
<translation>CSV-fájl…</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>CSV-fájl importálása</translation>
+ <source>Show TOTP</source>
+ <translation>TOTP megjelenítése</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>TOTP megjelenítése…</translation>
+ <source>Show QR Code</source>
+ <translation>QR-kód megjelenítése</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>TOTP QR-kód megjelenítése…</translation>
+ <source>Set up TOTP…</source>
+ <translation>TOTP beállítása…</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>MEGJEGYZÉS: Ez egy előzetes kiadású KeePassXC verzió!
-Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem ajánlott éles használatra.</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>&amp;Hiba jelentése</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>Keressen az alkalmazás induláskor frissítéseket?</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Kezdő lépések kézikönyv megnyitása</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Valóban keressen az alkalmazás induláskor frissítéseket?</translation>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Online súgó</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Az alkalmazás menüjéből bármikor saját kezűleg is indítható a frissítések keresése.</translation>
+ <source>Go to online documentation</source>
+ <translation>Ugrás az online dokumentációra</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Exportálás</translation>
+ <source>Open User Guide</source>
+ <translation> Felhasználói kézikönyv megnyitása</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Frissítések keresése…</translation>
+ <source>Save Database Backup...</source>
+ <translation>Biztonsági mentés az adatbázisról…</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Minden favicon &amp;letöltése</translation>
+ <source>Add key to SSH Agent</source>
+ <translation>Kulcs hozzáadása az SSH-ügynökhöz</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Rendezés: &amp;A–Z</translation>
+ <source>Remove key from SSH Agent</source>
+ <translation>Kulcs eltávolítása az SSH-ügynökből</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Rendezés: &amp;Z–A</translation>
+ <source>Compact Mode</source>
+ <translation>Kompakt mód</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Jelszó-előállító</translation>
+ <source>Automatic</source>
+ <translation>Automatikus</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Favicon letöltése</translation>
+ <source>Light</source>
+ <translation>Világos</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>Exportálás &amp;HTML-fájlba…</translation>
+ <source>Dark</source>
+ <translation>Sötét</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Vault…</translation>
+ <source>Classic (Platform-native)</source>
+ <translation>Klasszikus (platform natív)</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>1Password Vault importálása</translation>
+ <source>Show Toolbar</source>
+ <translation>Eszköztár megjelenítése</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Kezdő lépések</translation>
+ <source>Show Preview Panel</source>
+ <translation>Előnézet panel megjelenítése</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Kezdő lépések PDF kézikönyv megnyitása</translation>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Ne jelenjen meg többé ehhez a verzióhoz</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Online súgó…</translation>
+ <source>Restart Application?</source>
+ <translation>Alkalmazás újraindítása?</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Ugrás az online dokumentációra (böngészőben nyílik meg)</translation>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Ennek a beállításnak az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva?</translation>
</message>
+</context>
+<context>
+ <name>ManageDatabase</name>
<message>
- <source>&amp;User Guide</source>
- <translation>Felhasználói &amp;kézikönyv</translation>
+ <source>Database settings</source>
+ <translation>Adatbázis-beállítások</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Adatbázis-beállítások szerkesztése</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>PDF felhasználói kézikönyv megnyitása</translation>
+ <source>Unlock database</source>
+ <translation>Adatbázis feloldása</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Gyorsbillentyűk</translation>
+ <source>Unlock database to show more information</source>
+ <translation>Adatbázis feloldása a további információk megjelenítéséhez</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Adatbázis zárolása</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Leválasztás</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Alkalmazás leválasztása</translation>
</message>
</context>
<context>
@@ -4721,10 +4958,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>Varázsló oldal</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>&amp;Titkosítási beállítások</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban.</translation>
</message>
@@ -4736,27 +4969,31 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<source>Simple Settings</source>
<translation>Egyszerű beállítások</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Titkosítási beállítások</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Adatbázis hitelesítési adatai</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Csak Ön által ismert hitelesítési adatkészlet, mely védi az adatbázist.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Adatbázis mesterkulcs</translation>
+ <source>Encryption Settings</source>
+ <translation>Titkosítási beállítások</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>A csak Ön által ismert mesterkulcs védi az adatbázisát.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban.</translation>
</message>
</context>
<context>
@@ -4771,6 +5008,13 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Jelszókezelő</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4885,7 +5129,7 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>A kulcsszármaztatási sikertelen, megsérült a kulcsfájl?</translation>
+ <translation>A kulcsszármaztatás sikertelen, megsérült a kulcsfájl?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
@@ -4946,6 +5190,18 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<source>Passwords match so far</source>
<translation>A jelszavak eddig megegyeznek</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Jelszó átváltása (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Jelszó előállítása (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Figyelem: a Caps Lock be van kapcsolva!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4970,25 +5226,13 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>A jelszavak nem egyeznek</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Mesterjelszó előállítása</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Jelszó mező</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Jelszó láthatóságának átváltása</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Jelszómező ismétlése</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Jelszó-előállító átváltása</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4997,10 +5241,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Jelszó:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>erősség</translation>
@@ -5050,14 +5290,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>Szóelválasztó:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Másolás</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Elfogadás</translation>
- </message>
- <message>
<source>Close</source>
<translation>Bezárás</translation>
</message>
@@ -5154,14 +5386,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Váltás egyszerű módba</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Egyszerű</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>A jelszó előállításnál kihagyandó karakterkészletek</translation>
</message>
@@ -5182,14 +5406,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>Kihagyott karakterek: „0”, „1”, „l”, „I”, „O”, „|”, „﹒”</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Szavak szá&amp;ma:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Újra előállítás</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Előállított jelszó</translation>
</message>
@@ -5238,10 +5454,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>Jelszó másolása</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Jelszó elfogadása</translation>
- </message>
- <message>
<source>lower case</source>
<translation>kisbetű</translation>
</message>
@@ -5254,8 +5466,44 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>Cím</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Jelszó láthatóságának átváltása</translation>
+ <source>Generate Password</source>
+ <translation>Jelszó előállítása</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Tartalmazhat ezekből is:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>További karakterek az előállított jelszó számára</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>További karakterek</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Szavak száma:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Jelszó alkalmazása</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Törlés</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Jelszó újraelőállítása (%1)</translation>
</message>
</context>
<context>
@@ -5268,6 +5516,58 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<source>Statistics</source>
<translation>Statisztika</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Nagy gyenge jelszó</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>A jelszóentrópia %1 bit</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Gyenge jelszó</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Használatban itt: %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>A jelszó már %1 alkalommal használatban van</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>A jelszó lejárt</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>A jelszó lejárt ekkor: %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>A jelszó le fog járni</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>A jelszó lejár %1 nap múlva</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>A jelszó hamarosan lejár</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>A jelszó ekkor jár le: %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Állapotfelmérés</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5316,7 +5616,7 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
</message>
<message>
<source>Database hash not available</source>
- <translation>Az adatbáziskovonat nem elérhető</translation>
+ <translation>Az adatbázis hasítóértéke nem elérhető</translation>
</message>
<message>
<source>Client public key not received</source>
@@ -5407,10 +5707,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<translation>Hozzáadandó bejegyzés útvonala.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Egy bejegyzés jelszavának vágólapra való másolása.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Levágandó bejegyzés útvonala.</translation>
@@ -5567,16 +5863,8 @@ Elérhető parancsok:
<translation>Böngészőintegráció</translation>
</message>
<message>
- <source>Press</source>
- <translation>Lenyomás</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passzív</translation>
- </message>
- <message>
<source>SSH Agent</source>
- <translation>SSH ügynök</translation>
+ <translation>SSH-ügynök</translation>
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
@@ -5613,10 +5901,6 @@ Elérhető parancsok:
<translation>A(z) %1 bejegyzés sikeresen hozzáadva.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>A jelenlegi TOTP másolása a vágólapra.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Érvénytelen időtúllépési érték: %1.</translation>
</message>
@@ -5628,14 +5912,6 @@ Elérhető parancsok:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>A(z) %1 útvonalú bejegyzéshez nincs TOTP beállítva.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>A bejegyzés jelenlegi TOTP értéke a vágólapra másolva!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>A bejegyzés jelszava a vágólapra másolva!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>A vágólap törlése %1 másodperc múlva…</numerusform><numerusform>A vágólap törlése %1 másodperc múlva…</numerusform></translation>
@@ -5856,10 +6132,6 @@ Elérhető parancsok:
<translation>Nincs program megadva a vágólapkezeléshez</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>A(z) %1 program nem indítható el</translation>
- </message>
- <message>
<source>file empty</source>
<translation>a fájl üres</translation>
</message>
@@ -5868,18 +6140,6 @@ Elérhető parancsok:
<translation>%1: (sor, oszlop) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 bites</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 bites</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 bites</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – ajánlott)</translation>
</message>
@@ -6103,7 +6363,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords.</source>
- <translation>Ajánlott ellenőrizni, hogy a jelszavak nem szivárogtak-e nyilvánosan. A(z) FILENAME fájlnak HIBP formátumban – a https://haveibeenpwned.com/Passwords oldalon elérhető formátum szerint – kell tartalmaznia a szivárgott jelszavak SHA-1 kivonatának listáját.</translation>
+ <translation>Ajánlott ellenőrizni, hogy a jelszavak nem szivárogtak-e nyilvánosan. A(z) FILENAME fájlnak HIBP formátumban – a https://haveibeenpwned.com/Passwords oldalon elérhető formátum szerint – kell tartalmaznia a szivárgott jelszavak SHA-1 hasítóértékének listáját.</translation>
</message>
<message>
<source>FILENAME</source>
@@ -6130,10 +6390,6 @@ Kernel: %3 %4</translation>
<translation>Ezen súgó megjelenítése.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>A Yubikey foglalat használatával történik az adatbázis titkosítása.</translation>
- </message>
- <message>
<source>slot</source>
<translation>foglalat</translation>
</message>
@@ -6150,10 +6406,6 @@ Kernel: %3 %4</translation>
<translation>Kilépés az interaktív módból.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Exportálási formátum. Lehetőségek: XML és CSV. Az alapértelmezett az XML.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Szabványos kimenetre exportálja az adatbázis tartalmát a meghatározott formátumban.</translation>
</message>
@@ -6194,10 +6446,6 @@ Kernel: %3 %4</translation>
<translation>Új adatbázis útvonala.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Az XML adatbázis exportja nem importálható: %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Sikeres adatbázis importálás.</translation>
</message>
@@ -6290,10 +6538,6 @@ Kernel: %3 %4</translation>
<translation>Érvénytelen YubiKey foglalat: %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Érintse meg a gombot a YubiKey-en a(z) %1 feloldásához</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Adjon meg egy jelszót az adatbázis titkosításához (válaszható):</translation>
</message>
@@ -6309,13 +6553,9 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation>Felhasználónév</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] kihívás-válasz – foglalat %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Az ehhez tartozó jelszó %1-szer kiszivárgott: „%1”!</numerusform><numerusform>Az ehhez tartozó jelszó %1 alkalommal kiszivárgott: „%1”!</numerusform></translation>
+ <translation><numerusform>Az ehhez tartozó jelszó %2 alkalommal kiszivárgott: „%1”!</numerusform><numerusform>Az ehhez tartozó jelszó %2 alkalommal kiszivárgott: „%1”!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6325,6 +6565,194 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>A védett attribútumok megjelenítése egyszerű szövegként.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Hiba a böngészőbeépülőben</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Nem lehet menteni a natív üzenetküldő parancsfájlt: %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>A megadott attribútum másolása a vágólapra. Ha nincs megadva, akkor a „password” az alapértelmezés.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>A jelenlegi TOTP másolása a vágólapra (a „-a totp”-vel megegyezően).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Egy bejegyzés attribútumának másolása a vágólapra.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>HIBA: Vagy a „--attribute” vagy a „--totp” adható meg egyszerre, mindkettő nem.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>HIBA: a(z) %1 attribútum kétértelmű, megeegyezik ezzel: %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Az attribútum nem található: „%1”.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>A bejegyzés attribútuma a vágólapra másolva: „%1”.</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>A Yubikey foglalattal és egy választható sorozatszámmal lehet az adatbázist elérni (pl. 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>foglalat[:sorozatszám]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Megcélzott visszafejtési idő a ms-ban az adatbázis számára.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>idő</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Adja meg a kulcsfájlt az adatbázis számára.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Adjon meg jelszót az adatbázis számára.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Érvénytelen visszafejtési idő: %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>A megcélzott visszafejtési idő %1 és %2 között kell legyen.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Az adatbázisjelszó beállítása sikertelen.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Kulcsszármaztató függvény teljesítménymérése 1% ms-os késleltetéssel. </translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>%1 forduló beállítása a kulcsszármaztató függvény számára.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>Hiba az adatbázis kulcsszármaztató beállításainak módosítása közben.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Exportálási formátum. Lehetőségek: „xml” vagy „csv”. Az alapértelmezett az „xml”.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Az XML adatbázis nem importálható: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Adatbázis információinak megjelenítése.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID:</translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Név:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Leírás:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Titkosító:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>Kulcsszármaztató függvény (KDF):</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Kuka engedélyezve.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>A kuka nincs engedélyezve.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Érvénytelen parancs: %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Érvénytelen YubiKey sorozatszám: %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>A folytatáshoz érintse meg a gombot a YubiKey-en…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Valóban üres jelszót szeretne megadni az adatbázis számára? [y/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Jelszó ismétlése:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Hiba: A jelszavak nem egyeznek.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Az összes vágóprogram sikertelen. Próbálkozás: %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 forduló)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 forduló, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Teljesítményvizsgálat: %1 késleltetés</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6361,6 +6789,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>A jelentésekből kizárt bejegyzések megjelenítése.</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Vigye az egérmutatót az ok felé a további részletek megjelenítéséhez. Kattintson duplán a bejegyzésekre a szerkesztéshez.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Rossz</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Rossz – a jelszót meg kell változtatni</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Silány</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Silány – a jelszót meg kellene változtatni</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Gyenge</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Gyenge - Megfontolandó a jelszó változtatása</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Kizárva)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Ez a bejegyzés ki van zárva a jelentésekből.</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Türelem, az állapotadatok kiszámítása folyamatban…</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Gratulálunk, az állapotfelmérés mindent rendben talált!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Cím</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Útvonal</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Pontszám</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Bejegyzés szerkesztése…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Kizárás a jelentésekből</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>VIGYÁZAT: Ez a jelentés információkat küld a „Have I Been Pwned” online szolgáltatás számára (https://haveibeenpwned.com). Ha folytatja, az adatbázis jelszavai kriptográfiailag hasítva lesznek és ezen hasítóértékek első öt karaktere biztonságosan továbbítva lesz. Az adatbázis biztonságban marad és nem lehet felépíteni ezekből az információkból. De az elküldött jelszavak száma és a küldésre használt IP cím látható lesz e szolgáltatás számára.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Online vizsgálat vérehajtása</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>A jelentésekből kizárt bejegyzések megjelenítése.</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Ez a KeePassXC build nem tartalmaz hálózati funkciókat. A jelszavak „Have I Been Pwned” szolgáltatással való ellenőrzéshez hálózati funkciókra van szükség.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Gratulálunk, nincsenek felfedett jelszavak!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Cím</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Útvonal</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Felfedett jelszavak…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Kizárva)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Ez a bejegyzés ki van zárva a jelentésekből.</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>egyszer</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>10 alatt</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>100 alatt</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>1000 alatt</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>10.000 alatt</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>100.000 alatt</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>1 millió alatt</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>több millliószor</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Bejegyzés szerkesztése…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Kizárás a jelentésekből</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>További információk a hibaikonokkal rendelkező vonalak fölé vitt egérrel nyerhetők.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Név</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Érték</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Türelem, az adatbázis-statisztikák kiszámítása folyamatban…</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Adatbázisnév</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Leírás</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Hely</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Legutóbb mentve</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Nem mentett módosítsok</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>igen</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>nem</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Az adatbázis módosítva lett, de még nem lett lemezre mentve.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Csoportszám</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Bejegyzésszám</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Lejárt bejegyzések száma</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Az adatbázis lejárt bejegyzéseket tartalmaz.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Egyedi jelszavak</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Nem egyedi jelszavak</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>A jelszavak több, mint 10%-a újrahasznosított. Egyedi jelszavakat kellene használni, ahol csak lehetséges.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maximális jelszó-újrahasznosítás</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Néhány jelszó több, mint háromszor lett újrahasznosítva. Egyedi jelszavakat kellene használni, ahol csak lehetséges.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Rövid jelszavak száma</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>A jelszavak javasolt minimális hosszúsága legalább 8 karakter.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Gyenge jelszavak száma</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Olyan hosszú és véletlenszerű jelszavak használata javasolt, melyek besorolása „jó” és „kiváló”.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Jelentésekből kizárt bejegyzések</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>A bejegyzések jelentésekből való kizárása – mivel ismerten gyenge jelszavakat tartalmaznak – nem feltétlenül jelent problémát, de nem szabad szem elől veszteni őket.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Átlagos jelszóhossz</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 karakter</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Az átlagos jelszóhossz kevesebb, mint 10 karakter. A hosszabb jelszavak nagyobb biztonságot szavatolnak.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6388,12 +7100,20 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation>Az ügynök nem támogatja a korlátozott élettartamot (lásd a lehetőségeket).</translation>
+ <translation>Az ügynök nem támogatja a korlátozott élettartamot (lásd a lehetőségek).</translation>
</message>
<message>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Az ügynök nem támogatja a visszaigazolási kérelmet (lásd a lehetőségeket).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Kulcs-identitás tulajdonosi konfliktus. Hozzáadás visszautasítva.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Nincs működő ügynök, identitások nem listázhatóak.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6501,26 +7221,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ha a kuka engedélyezve van az adatbázis számára, a bejegyzések a kukába lesznek mozgatva. Egyébként pedig megerősítés nélkül törlése kerülnek.&lt;/p&gt;&lt;p&gt;Továbbra is megerősítés szükséges az egymáshoz kapcsoló bejegyzések törléséhez.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Nincs megerősítés a bejegyzések kliensek által végrehajtott törlésekor.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Nyitott adatbáziscsoportok:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Fájlnév</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Csoport</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Kezelés</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Engedélyezés</translation>
</message>
@@ -6529,40 +7233,20 @@ Kernel: %3 %4</translation>
<translation>Ezek az alkalmazások kapcsolódnak jelenleg:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Alkalmazás</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Leválasztás</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Adatbázis-beállítások</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Adatbázis-beállítások szerkesztése</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Adatbázis feloldása</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Adatbázis feloldása a további információk megjelenítéséhez</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Nincs megerősítés a bejegyzések kliensek által végrehajtott törlésekor</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Adatbázis zárolása</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Hiba:&lt;/b&gt; A DBus-hoz csatlakozás sikertelen. Ellenőrizze a DBus beállításokat.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Feloldás a megjelenítéshez</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Figyelem:&lt;/b&gt; </translation>
</message>
<message>
- <source>None</source>
- <translation>Nincs</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Mentse el a módosításokat a beépülő aktiválásához és ezen rész szerkesztésének engedélyezéséhez.</translation>
</message>
</context>
<context>
@@ -6835,10 +7519,6 @@ Kernel: %3 %4</translation>
<translation>Sikeres aláírt importálás</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Váratlan hiba</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>A nem aláírt tárolók nem támogatottak – az importálás megakadályozva</translation>
</message>
@@ -7008,6 +7688,13 @@ Példa: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Érvénytelen URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7015,7 +7702,7 @@ Példa: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Checking for updates...</source>
- <translation>Frissítések keresése…</translation>
+ <translation>Frissítések keresése...</translation>
</message>
<message>
<source>Close</source>
@@ -7082,7 +7769,7 @@ Példa: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Recent databases</source>
- <translation>Friss adatbázisok</translation>
+ <translation>Legutóbb használt adatbázisok</translation>
</message>
<message>
<source>Welcome to KeePassXC %1</source>
@@ -7098,6 +7785,53 @@ Példa: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Beállított foglalat – %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] kihívás-válasz – foglalat %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Lenyomás</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passzív</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Érvénytelen a megadott foglalat – %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>A YubiKey csatolófelület nem lett elindítva.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>A hardverkulcs jelenleg használatban van.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Nem található hardverkulcs ezzel a sorozatszámmal: %1. A folytatáshoz, kérjük, csatlakoztassa.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>A hardverkulcs kifutott az időből a felhasználó interakcióra várva.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>USB-hiba történt a hardverkulcs elérése közben: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>A kihívás-válasz befejezése sikertelen. A pontos hiba: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7112,14 +7846,6 @@ Példa: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Ha van &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt; eszköze, akkor használhatja a további biztonság érdekében.&lt;/p&gt;&lt;p&gt;A YubiKey-hez szükséges, hogy az egyik foglalata &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 kihívás-válaszként&lt;/a&gt; legyen beállítva.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nincs YubiKey észlelve, győződjön meg róla, hogy be van-e dugva.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Nincs YubiKey behelyezve.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Hardveres jelsorok frissítése</translation>
</message>
@@ -7127,5 +7853,21 @@ Példa: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Hardverkulcsfoglalat kijelölése</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Nem található semmilyen hardverkulcs.</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>A kijelölt foglalatban lévő hardverkulcs nem támogatja a kihívás-választ.</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Hardverkulcsok felismerése…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nincsenek felismert hardverkulcsok.</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_id.ts b/share/translations/keepassx_id.ts
index cbe0cc940..65ec054c5 100644
--- a/share/translations/keepassx_id.ts
+++ b/share/translations/keepassx_id.ts
@@ -15,7 +15,7 @@
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC didistribusikan di bawah GNU General Public License (GPL) versi 2 atau (terserah pilihan Anda) versi 3.</translation>
+ <translation>KeePassXC didistribusikan di bawah Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan anda) versi 3.</translation>
</message>
<message>
<source>Contributors</source>
@@ -31,7 +31,7 @@
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>Sertakan informasi berikut setiap Anda melaporkan bug:</translation>
+ <translation>Sertakan informasi berikut setiap anda melaporkan bug:</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Aktifkan SSH Agent (butuh memulai ulang)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Gunakan OpenSSH untuk Windows dari pada Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Aktifkan Integrasi Agen SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Nilai SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>Timpa SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(kosong)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Tidak ada soket Agen SSH yang ditemukan. Pastikan variabel sistem SSH_AUTH_SOCK ada atau atur timpaan.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Koneksi Agen SSH berhasil!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -85,7 +105,7 @@
</message>
<message>
<source>Text beside icon</source>
- <translation>Teks disebelah ikon</translation>
+ <translation>Teks di sebelah ikon</translation>
</message>
<message>
<source>Text under icon</source>
@@ -97,10 +117,22 @@
</message>
<message>
<source>Reset Settings?</source>
- <translation type="unfinished"/>
+ <translation>Atur Ulang Pengaturan?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
+ <translation>Apakah anda yakin ingin mengatur ulang pengaturan umum dan keamanan ke nilai bawaan?</translation>
+ </message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
<translation type="unfinished"/>
</message>
</context>
@@ -127,10 +159,6 @@
<translation>Manajemen Berkas</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Secara aman menyimpan berkas basis data (mungkin tidak kompatibel dengan Dropbox, dll)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Cadangkan basis data sebelum disimpan</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Otomatis simpan ketika keluar</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Jangan tandai basis data telah diubah untuk perubahan non-data (mis. melebarkan grup)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Muat ulang basis data secara otomatis ketika diubah secara eksternal</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Gunakan ikon grup pada pembuatan entri</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Sembunyikan panel pratinjau entri</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Umum</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Sembunyikan bilah perkakas (ikon)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>sembunyikan jendela ke baki sistem</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Tampilkan ikon baki sistem</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Ikon baki sistem gelap</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Sembunyikan jendela ke baki sistem ketika diminimalkan</translation>
</message>
@@ -203,85 +211,69 @@
<translation>Selalu bertanya sebelum menjalankan Ketik-Otomatis</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Pintasan global Ketik-Otomatis</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Tundaan pengetikan Ketik-Otomatis</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>md</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Tundaan mulai Ketik-Otomatis</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Bilah perkakas dapat dipindah</translation>
</message>
<message>
<source>Remember previously used databases</source>
- <translation type="unfinished"/>
+ <translation>Ingat basis data yang sebelumnya digunakan</translation>
</message>
<message>
<source>Load previously open databases on startup</source>
- <translation type="unfinished"/>
+ <translation>Muat basis data yang sebelumnya terbuka saat memulai</translation>
</message>
<message>
<source>Remember database key files and security dongles</source>
- <translation type="unfinished"/>
+ <translation>Ingat berkas kunci dan dongle kemanan</translation>
</message>
<message>
<source>Check for updates at application startup once per week</source>
- <translation type="unfinished"/>
+ <translation>Periksa pembaruan saat memulai aplikasi sekali seminggu</translation>
</message>
<message>
<source>Include beta releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style:</source>
- <translation type="unfinished"/>
+ <translation>Termasuk rilis beta saat memeriksa pembaruan</translation>
</message>
<message>
<source>Language:</source>
- <translation type="unfinished"/>
+ <translation>Bahasa:</translation>
</message>
<message>
<source>(restart program to activate)</source>
- <translation type="unfinished"/>
+ <translation>(mulai ulang program untuk mengaktifkan)</translation>
</message>
<message>
<source>Minimize window after unlocking database</source>
- <translation type="unfinished"/>
+ <translation>Minimalkan jendela setelah membuka basis data</translation>
</message>
<message>
<source>Minimize when opening a URL</source>
- <translation type="unfinished"/>
+ <translation>Minimalkan saat membuka URL</translation>
</message>
<message>
<source>Hide window when copying to clipboard</source>
- <translation type="unfinished"/>
+ <translation>Sembunyikan jendela saat menyalin ke papan klip</translation>
</message>
<message>
<source>Minimize</source>
- <translation type="unfinished"/>
+ <translation>Minimalkan</translation>
</message>
<message>
<source>Drop to background</source>
- <translation type="unfinished"/>
+ <translation>Beralih ke latar belakang</translation>
</message>
<message>
<source>Favicon download timeout:</source>
- <translation type="unfinished"/>
+ <translation>Batas waktu mengunduh favicon:</translation>
</message>
<message>
<source>Website icon download timeout in seconds</source>
- <translation type="unfinished"/>
+ <translation>Batas waktu mengunduh ikon situs web dalam detik</translation>
</message>
<message>
<source> sec</source>
@@ -290,32 +282,68 @@
</message>
<message>
<source>Toolbar button style</source>
- <translation type="unfinished"/>
+ <translation>Gaya tombol bilah perkakas</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation type="unfinished"/>
+ <source>Language selection</source>
+ <translation>Pemilihan bahasa</translation>
</message>
<message>
- <source>Language selection</source>
+ <source>Global auto-type shortcut</source>
+ <translation>Pintasan ketik-otomatis global</translation>
+ </message>
+ <message>
+ <source>Auto-type character typing delay milliseconds</source>
+ <translation>Tundaan pengetikan karakter ketik-otomatis dalam milidetik</translation>
+ </message>
+ <message>
+ <source>Auto-type start delay milliseconds</source>
+ <translation>Tundaan mulai ketik-otomatis dalam milidetik</translation>
+ </message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Otomatis jalankan KeePassXC pada saat perangkat dinyalakan</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Tandai basis data telah diubah untuk perubahan non-data (mis. melebarkan grup)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Reset Settings to Default</source>
+ <source>User Interface</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Toolbar button style:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Use monospaced font for notes</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>Tray icon type:</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Mengatur ulang pengaturan ke bawaan…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Tundaan pengetikan Ketik-Otomatis:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Pintasan Ketik-Otomatis global:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Tundaan mulai Ketik-Otomatis:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Kunci ulang basis data yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Tidak membutuhkan pengulangan sandi ketika ruas bisa dilihat</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Jangan sembunyikan sandi saat penyuntingan</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Jangan gunakan placeholder untuk ruas sandi yang kosong</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Sembunyikan sandi di panel pratinjau entri</translation>
</message>
@@ -390,15 +406,15 @@
</message>
<message>
<source>Use DuckDuckGo service to download website icons</source>
- <translation type="unfinished"/>
+ <translation>Gunakan layanan DuckDuckGo untuk mengunduh ikon situs web</translation>
</message>
<message>
<source>Clipboard clear seconds</source>
- <translation type="unfinished"/>
+ <translation>Detik menghapus papan klip</translation>
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation type="unfinished"/>
+ <translation>Atur ulang Touch ID setelah tidak aktif</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
@@ -411,7 +427,19 @@
</message>
<message>
<source>Clear search query after</source>
- <translation type="unfinished"/>
+ <translation>Hapus kueri pencarian setelah</translation>
+ </message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Membutuhkan pengulangan sandi ketika ruas bisa dilihat</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Sembunyikan sandi saat penyuntingan</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Gunakan placeholder untuk ruas sandi yang kosong</translation>
</message>
</context>
<context>
@@ -430,27 +458,27 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>Sintaksis perintah Ketik-Otomatis Anda salah!</translation>
+ <translation>Sintaksis perintah Ketik-Otomatis anda salah!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>Perintah Ketik-Otomatis ini berisi tundaan yang sangat lama. Apakah Anda benar-benar ingin melanjutkan?</translation>
+ <translation>Perintah Ketik-Otomatis ini berisi waktu tunda yang sangat lama. Apakah anda yakin ingin melanjutkan?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Perintah Ktik-Otomatis ini berisi tindakan tekan tombol berdurasi sangat lambat. Apakah Anda benar-benar ingin melanjutkan?</translation>
+ <translation>Perintah Ktik-Otomatis ini berisi tindakan tekan tombol dengan durasi yang sangat lambat. Apakah anda yakin ingin melanjutkan?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Perintah Ketik-Otomatis ini berisi argumen yang diulang berkali-kali. Apakah Anda benar-benar ingin melanjutkan?</translation>
+ <translation>Perintah Ketik-Otomatis ini berisi argumen yang diulang berkali-kali. Apakah anda yakin ingin melanjutkan?</translation>
</message>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Membutuhkan Izin</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC membutuhkan izin Aksesibilitas untuk menjalankan Ketik-Otomatis entri. Jika anda sudah memberikan izin, anda perlu memulai ulang KeePassXC.</translation>
</message>
</context>
<context>
@@ -502,11 +530,11 @@
<name>AutoTypePlatformMac</name>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Membutuhkan Izin</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC membutuhkan izin Aksesibilitas dan Perekaman Layar untuk menjalankan Ketik-Otomatis secara global. Perekaman Layar dibutuhkan untuk mengakses judul jendela dari entri terkait. Jika anda sudah memberikan izin, anda perlu memulai ulang KeePassXC.</translation>
</message>
</context>
<context>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Konfirmasi Akses KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Permintaan Akses Peramban</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Ingat tindakan ini</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 meminta akses ke entri berikut ini:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Izinkan</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Ingat akses ke entri yang dipilih</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Tolak</translation>
+ <source>Remember</source>
+ <translation>Ingat</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 telah meminta akses sandi untuk item berikut.
-Silakan pilih apakah Anda ingin mengizinkannya.</translation>
+ <source>Allow access to entries</source>
+ <translation>Izinkan akses ke entri</translation>
</message>
<message>
- <source>Allow access</source>
- <translation type="unfinished"/>
+ <source>Allow Selected</source>
+ <translation>Izinkan Yang Dipilih</translation>
</message>
<message>
- <source>Deny access</source>
- <translation type="unfinished"/>
+ <source>Deny All</source>
+ <translation>Tolak Semua</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Nonaktifkan untuk situs ini</translation>
</message>
</context>
<context>
@@ -579,306 +609,346 @@ Silakan pilih basis data yang digunakan untuk menyimpan kredensial.</translation
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Permintaan asosiasi kunci baru</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Ini dibutuhkan untuk mengakses basis data Anda menggunakan KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Simpan dan izinkan akses</translation>
</message>
<message>
- <source>General</source>
- <translation>Umum</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Timpa kunci yang ada?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Aktifkan integrasi untuk peramban ini:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Kunci enkripsi bersama dengan nama &quot;%1&quot; sudah ada.
+Apakah anda ingin menimpanya ulang?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Perbarui Entri</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Apakah anda ingin memperbarui informasi di dalam %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Batal</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Mengkonversi atribut ke data khusus...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Tampilkan &amp;notifikasi saat permintaan kredensial</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Konversi atribut KeePassHTTP</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>&amp;Minta untuk membuka basis data jika terkunci</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Berhasil mengonversi atribut dari %1 entri.
+Memindahkan %2 ke data khusus.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Berhasil memindahkan %n kunci ke data khusus.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Hanya entri dengan skema yang sama (http://, https://, ...).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Tidak ada entri dengan atribut KeePassHTTP yang ditemukan!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Cocok skema URL (mis., https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Basis data yang aktif tidak berisi entri dengan atribut KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Hanya tampilkan kecocokan terbaik untuk URL tertentu bukan semua entri untuk keseluruhan domain.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Mendeteksi pengaturan integrasi peramban lama</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Hanya &amp;tampilkan kredensial dengan kecocokan terbaik</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Buat grup baru</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Urutkan kredensial yang &amp;cocok berdasarkan judul</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Permintaan untuk membuat grup &quot;%1&quot; telah diterima.
+Apakah anda ingin membuat grup ini?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Urutkan kredensial yang cocok berdasarkan &amp;nama pengguna</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Pengaturan KeePassXC-Browser anda perlu dipindahkan ke dalam pengaturan basis data.
+Hal ini diperlukan untuk mempertahankan koneksi peramban anda saat ini.
+Apakah anda ingin memindahkan pengaturan yang ada sekarang?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Tingkat Lanjut</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Jangan tampilkan peringatan ini lagi</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Jangan pernah ber&amp;tanya sebelum mengakses kredensial</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Anda telah menerima permintaan asosiasi untuk basis data berikut:
+%1
+
+Berikan koneksi nama yang unik atau ID, sebagai contoh:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Jangan pernah bertanya sebelum memper&amp;barui kredensial</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Cari kredensial yang cocok di semua basis data yang terbuka</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Ini dibutuhkan untuk mengakses basis data anda menggunakan KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Membuat atau memperbarui ruas lema secara otomatis tidak didukung.</translation>
+ <source>Enable browser integration</source>
+ <translation>Aktifkan integrasi peramban</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Tampilkan ruas lema tingkat lanjut yang dimulai dengan &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Umum</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Otomatis perbarui jalur binari KeePassXC atau keepassxc-proxy ke skrip perpesanan native saat memulai.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Peramban yang dipasang sebagai snap saat ini tidak didukung.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Perbarui berkas manifest perpesanan &amp;native saat memulai</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Aktifkan integrasi untuk peramban ini:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Dukung aplikasi proksi antara KeePassXC dan ekstensi peramban.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Gunakan aplikasi &amp;proksi antara KeePassXC dan ekstensi peramban</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Gunakan lokasi proksi khusus jika Anda memasangnya secara manual.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Gunakan lokasi proksi &amp;khusus</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Telusuri...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Peringatan:&lt;/b&gt; Opsi berikut bisa berbahaya!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Pilih lokasi proksi khusus</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Peramban &amp;Tor</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Tampilkan notifikasi saat permintaan kredensial</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Berkas Executable</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Minta untuk membuka basis data jika terkunci</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Semua Berkas</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Hanya entri dengan skema yang sama (http://, https://, ...).</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Jangan minta izin untuk HTTP &amp;Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Cocok skema URL (mis., https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Karena adanya sandbox Snap, anda harus menjalankan skrip untuk mengaktifkan integrasi peramban.&lt;br /&gt;Anda bisa mendapatkan skrip ini dari %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Hanya tampilkan kecocokan terbaik untuk URL tertentu bukan semua entri untuk keseluruhan domain.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Lihat instruksi untuk penggunaan browser extension</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Hanya tampilkan kredensial dengan kecocokan terbaik</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Memerlukan KeePassXC-Browser agar integrasi peramban bisa bekerja. &lt;br /&gt;Unduh %1 dan %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Mengembalikan kredensial yang kedaluwarsa. Karakter [kedaluwarsa] ditambahkan ke judul.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation type="unfinished"/>
+ <source>Allow returning expired credentials</source>
+ <translation>Izinkan pengembalian kredensial kedaluwarsa</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation type="unfinished"/>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Semua basis data yang terhubung ke ekstensi akan mengembalikan kredensial yang cocok.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation type="unfinished"/>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Cari kredensial yang cocok di semua basis data yang terbuka</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation type="unfinished"/>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Urutkan kredensial yang cocok berdasarkan judul</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation type="unfinished"/>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Urutkan kredensial yang cocok berdasarkan nama pengguna</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation type="unfinished"/>
+ <source>Advanced</source>
+ <translation>Tingkat Lanjut</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Jangan pernah bertanya sebelum mengakses kredensial</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Jangan pernah bertanya sebelum memperbarui kredensial</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Jangan minta izin untuk Otentikasi Dasar HTTP</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Membuat atau memperbarui ruas lema secara otomatis tidak didukung.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Tampilkan ruas lema tingkat lanjut yang dimulai dengan &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
- <translation type="unfinished"/>
+ <translation>Jangan pernah tampilkan popup yang menyarankan migrasi pengaturan KeePassHTTP versi lama.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation type="unfinished"/>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Jangan ingatkan untuk migrasi pengaturan KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Otomatis perbarui jalur binari KeePassXC atau keepassxc-proxy ke skrip perpesanan native saat memulai.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Perbarui berkas manifest perpesanan bawaan saat memulai</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Gunakan lokasi proksi khusus jika anda memasang proksi secara manual.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Gunakan lokasi proksi khusus:</translation>
</message>
<message>
<source>Custom proxy location field</source>
- <translation type="unfinished"/>
+ <translation>Ruas lokasi proksi khusus</translation>
</message>
<message>
<source>Browser for custom proxy file</source>
- <translation type="unfinished"/>
+ <translation>Peramban untuk berkas proksi khusus</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Telusuri...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Permintaan asosiasi kunci baru</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Gunakan lokasi konfigurasi peramban khusus:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Simpan dan izinkan akses</translation>
+ <source>Browser type:</source>
+ <translation>Tipe peramban:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Timpa kunci yang ada?</translation>
+ <source>Toolbar button style</source>
+ <translation>Gaya tombol bilah perkakas</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Kunci enkripsi bersama dengan nama &quot;%1&quot; sudah ada.
-Apakah Anda ingin menimpanya ulang?</translation>
+ <source>Config Location:</source>
+ <translation>Lokasi Konfigurasi:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Perbarui Entri</translation>
+ <source>Custom browser location field</source>
+ <translation>Ruas lokasi peramban khusus</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Apakah Anda ingin memperbarui informasi dalam %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Batal</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Jelajahi jalur peramban khusus</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Mengkonversi atribut ke data khusus...</translation>
+ <source>Custom extension ID:</source>
+ <translation>ID ekstensi khusus:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Konversi atribut KeePassHTTP</translation>
+ <source>Custom extension ID</source>
+ <translation>ID ekstensi khusus</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Berhasil mengonversi atribut dari %1 entri.
-Memindahkan %2 ke data khusus.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Karena adanya sandbox Snap, anda harus menjalankan skrip untuk mengaktifkan integrasi peramban.&lt;br /&gt;Anda bisa mendapatkan skrip ini dari %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Tidak ada entri dengan atribut KeePassHTTP yang ditemukan!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>Membutuhkan KeePassXC-Browser agar integrasi peramban bisa bekerja. &lt;br /&gt;Silakan unduh untuk %1 dan %2 dan %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Basis data yang aktif tidak berisi entri dengan atribut KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Lihat instruksi untuk penggunaan browser extension</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Mendeteksi pengaturan integrasi peramban lama</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Error:&lt;/b&gt;Lokasi proxy khusus tidak dapat ditemukan!&lt;br/&gt;Integrasi browser TIDAK DAPAT BEKERJA tanpa aplikasi proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Buat grup baru</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Peringatan:&lt;/b&gt; Opsi berikut bisa berbahaya!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Permintaan untuk membuat grup &quot;%1&quot; telah diterima.
-Apakah anda ingin membuat grup ini?
-</translation>
+ <source>Executable Files</source>
+ <translation>Berkas Executable</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Pengaturan KeePassXC-Browser anda perlu dipindahkan ke dalam pengaturan basis data.
-Hal ini diperlukan untuk mempertahankan koneksi peramban anda saat ini.
-Apakah anda ingin memindahkan pengaturan yang ada sekarang?</translation>
+ <source>All Files</source>
+ <translation>Semua Berkas</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Jangan tampilkan peringatan ini lagi</translation>
+ <source>Select custom proxy location</source>
+ <translation>Pilih lokasi proksi khusus</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation type="unfinished"/>
+ <source>Select native messaging host folder location</source>
+ <translation>Pilih lokasi folder hos perpesanan bawaan</translation>
</message>
</context>
<context>
@@ -935,10 +1005,6 @@ chrome-laptop.</source>
<translation>Komentar dimulai dengan</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Rekam pertama memiliki nama ruas</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Anggap &apos;\&apos; sebagai karakter escape</translation>
</message>
@@ -947,14 +1013,6 @@ chrome-laptop.</source>
<translation>Pratinjau</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Tata letak kolom</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Tidak ada di dalam berkas CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Diimpor dari berkas CSV</translation>
</message>
@@ -967,40 +1025,85 @@ chrome-laptop.</source>
<translation>Galat</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Ruas nama %1 kosong</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>kolom %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Mendeteksi kesalahan di dalam berkas CSV!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>[%n pesan dilewati]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation type="unfinished"/>
+ <translation>Impor CSV: galat penulis:
+%1</translation>
</message>
<message>
<source>Text qualification</source>
- <translation type="unfinished"/>
+ <translation>Kualifikasi teks</translation>
</message>
<message>
<source>Field separation</source>
- <translation type="unfinished"/>
+ <translation>Pemisahan ruas</translation>
</message>
<message>
<source>Number of header lines to discard</source>
- <translation type="unfinished"/>
+ <translation>Jumlah baris tajuk untuk dibuang</translation>
</message>
<message>
<source>CSV import preview</source>
+ <translation>Pratinjau impor CSV</translation>
+ </message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Terakhir Diubah</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Sandi</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Dibuat</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Catatan</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Judul</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grup</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nama pengguna</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1008,7 +1111,7 @@ chrome-laptop.</source>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n kolom</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1017,21 +1120,16 @@ chrome-laptop.</source>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n byte</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n baris</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Root</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Berkas %1 tidak ada.</translation>
</message>
@@ -1045,32 +1143,46 @@ chrome-laptop.</source>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>Berkas tidak bisa disimpan karena terbuka dalam mode baca-saja.</translation>
+ <translation>Berkas tidak bisa disimpan karena dibuka dalam mode baca-saja.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation type="unfinished"/>
+ <translation>Kunci tidak ditransformasikan. Ini adalah bug, harap laporkan ke pengembang!</translation>
</message>
<message>
<source>%1
Backup database located at %2</source>
- <translation type="unfinished"/>
+ <translation>%1
+Lokasi cadangan basis data ada di %2</translation>
</message>
<message>
<source>Could not save, database does not point to a valid file.</source>
- <translation type="unfinished"/>
+ <translation>Tidak bisa menyimpan, basis data tidak merujuk ke berkas yang valid.</translation>
</message>
<message>
<source>Could not save, database file is read-only.</source>
- <translation type="unfinished"/>
+ <translation>Tidak bisa menyimpan, basis data memiliki atribut hanya-baca.</translation>
</message>
<message>
<source>Database file has unmerged changes.</source>
- <translation type="unfinished"/>
+ <translation>Berkas basis data memiliki perubahan yang belum digabung.</translation>
</message>
<message>
<source>Recycle Bin</source>
- <translation>Tong Sampah</translation>
+ <translation>Keranjang Sampah</translation>
+ </message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Sandi</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Proses menyimpan basis data sedang berjalan.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Tidak bisa menyimpan, basis data belum aktif!</translation>
</message>
</context>
<context>
@@ -1099,10 +1211,10 @@ Backup database located at %2</source>
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Anda menggunakan format berkas kunci legacy yang
+ <translation>Anda menggunakan format berkas kunci lama yang
tidak akan lagi didukung di masa depan.
-Harap pertimbangkan membuat berkas kunci baru.</translation>
+Harap pertimbangkan untuk membuat berkas kunci baru.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1122,39 +1234,27 @@ Harap pertimbangkan membuat berkas kunci baru.</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
+ <translation>Gagal untuk membuka berkas kunci: %1</translation>
</message>
<message>
<source>Unlock KeePassXC Database</source>
- <translation type="unfinished"/>
+ <translation>Buka Kunci Basis Data KeePassXC</translation>
</message>
<message>
<source>Enter Password:</source>
- <translation type="unfinished"/>
+ <translation>Masukkan Sandi:</translation>
</message>
<message>
<source>Password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
+ <translation>Ruas sandi</translation>
</message>
<message>
<source>Hardware key slot selection</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan slot kunci perangkat keras</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation type="unfinished"/>
+ <translation>Telusuri berkas kunci</translation>
</message>
<message>
<source>Browse...</source>
@@ -1162,19 +1262,19 @@ Harap pertimbangkan membuat berkas kunci baru.</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
- <translation type="unfinished"/>
+ <translation>Segarkan token perangkat keras</translation>
</message>
<message>
<source>Hardware Key:</source>
- <translation type="unfinished"/>
+ <translation>Kunci Perangkat Keras:</translation>
</message>
<message>
<source>Hardware key help</source>
- <translation type="unfinished"/>
+ <translation>Bantuan kunci perangkat keras</translation>
</message>
<message>
<source>TouchID for Quick Unlock</source>
- <translation type="unfinished"/>
+ <translation>TouchID untuk Buka Cepat</translation>
</message>
<message>
<source>Clear</source>
@@ -1182,57 +1282,77 @@ Harap pertimbangkan membuat berkas kunci baru.</translation>
</message>
<message>
<source>Clear Key File</source>
- <translation type="unfinished"/>
+ <translation>Kosongkan Berkas Kunci</translation>
</message>
<message>
<source>Unlock failed and no password given</source>
- <translation type="unfinished"/>
+ <translation>Gagal membuka dan sandi tidak tersedia</translation>
</message>
<message>
<source>Unlocking the database failed and you did not enter a password.
Do you want to retry with an &quot;empty&quot; password instead?
To prevent this error from appearing, you must go to &quot;Database Settings / Security&quot; and reset your password.</source>
- <translation type="unfinished"/>
+ <translation>Membuka kunci basis data gagal dan anda tidak memasukkan kata sandi.
+Apakah anda ingin mencoba kembali dengan kata sandi &quot;kosong&quot;?
+Untuk mencegah munculnya kesalahan ini, anda harus ke &quot;Pengaturan Basis Data / Keamanan&quot; dan mengatur ulang kata sandi anda.</translation>
</message>
<message>
<source>Retry with empty password</source>
- <translation type="unfinished"/>
+ <translation>Ulangi dengan sandi kosong</translation>
</message>
<message>
<source>Enter Additional Credentials (if any):</source>
- <translation type="unfinished"/>
+ <translation>Masukkan Kredensial Tambahan (jika ada):</translation>
</message>
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;p&gt;Anda dapat menggunakan perangkat kunci keamanan seperti &lt;strong&gt;YubiKey&lt;/strong&gt;atau&lt;strong&gt;OnlyKey&lt;/strong&gt;dengan slot yang dikonfigurasi untuk HMAC-SHA1.&lt;/p&gt;
+&lt;p&gt;Klik untuk informasi lebih lanjut...&lt;/p&gt;</translation>
</message>
<message>
<source>Key file help</source>
- <translation type="unfinished"/>
+ <translation>Bantuan berkas kunci</translation>
</message>
<message>
<source>?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select key file...</source>
- <translation type="unfinished"/>
+ <translation>?</translation>
</message>
<message>
<source>Cannot use database file as key file</source>
- <translation type="unfinished"/>
+ <translation>Tidak bisa menggunakan berkas basis data sebagai berkas kunci</translation>
</message>
<message>
<source>You cannot use your database file as a key file.
If you do not have a key file, please leave the field empty.</source>
+ <translation>Anda tidak bisa menggunakan berkas basis data anda sebagai berkas kunci,
+Jika anda tidak memiliki berkas kunci, biarkan ruas tetap kosong.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Silakan sentuh tombol pada YubiKey anda!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Mendeteksi kunci perangkat keras…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Tidak mendeteksi kunci perangkat keras</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Pilih kunci perangkat keras…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1256,10 +1376,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Keamanan</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Kunci Master</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Pengaturan Enkripsi</translation>
</message>
@@ -1267,6 +1383,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Integrasi Peramban</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1275,18 +1395,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Pengaturan KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Putuskan koneksi semua peramban</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Lu&amp;pakan semua pengaturan spesifik situs pada entri</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Pindahkan atribut KeePassHTTP ke data &amp;khusus KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Kunci tersimpan</translation>
</message>
@@ -1301,8 +1409,8 @@ If you do not have a key file, please leave the field empty.</source>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>Apakah anda ingin menghapus kunci yang dipilih?
-Hal ini mungkin dapat mencegah koneksi ke plugin peramban.</translation>
+ <translation>Apakah anda yakin ingin menghapus kunci yang dipilih?
+Tindakan ini akan memutus koneksi ke pengaya peramban.</translation>
</message>
<message>
<source>Key</source>
@@ -1324,7 +1432,7 @@ Hal ini mungkin dapat mencegah koneksi ke plugin peramban.</translation>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
<translation>Apakah anda ingin memutus koneksi semua peramban?
-Tindakan ini akan memutus koneksi ke plugin peramban.</translation>
+Tindakan ini akan memutus koneksi ke pengaya peramban.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
@@ -1340,7 +1448,7 @@ Tindakan ini akan memutus koneksi ke plugin peramban.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Berhasil membuang %n kunci enkripsi dari pengaturan KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1366,7 +1474,7 @@ Izin untuk mengakses entri akan dicabut.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Berhasil membuang perizinan dari %n entri.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1384,14 +1492,75 @@ Izin untuk mengakses entri akan dicabut.</translation>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Apakah anda ingin memindahkan semua data integrasi peramban lama ke standar baru?
-Hal ini diperlukan untuk mempertahankan kompatibilitas dengan plugin peramban.</translation>
+Hal ini diperlukan untuk mempertahankan kompatibilitas dengan pengaya peramban.</translation>
</message>
<message>
<source>Stored browser keys</source>
- <translation type="unfinished"/>
+ <translation>Simpan kunci peramban</translation>
</message>
<message>
<source>Remove selected key</source>
+ <translation>Buang kunci yang dipilih</translation>
+ </message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Pindahkan atribut KeePassHTTP ke data khusus KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Segarkan ID grup root basis data</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Dibuat</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Segarkan ID basis data</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Apakah anda yakin ingin menyegarkan ID basis data?
+Ini hanya diperlukan jika basis data anda adalah salinan dari basis data yang lain dan ekstensi peramban tidak bisa tersambung.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Tambah proteksi tambahan...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Sandi belum di atur</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>PERINGATAN! Anda belum mengatur sandi. Menggunakan basis data tanpa sandi amat sangat tidak disarankan!
+
+Apakah anda tetap ingin melanjutkan tanpa mengatur sandi?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Lanjutkan tanpa sandi</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Tidak ada kunci enkripsi yang ditambahkan</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Anda harus menambahkan paling tidak satu kunci enkripsi untuk mengamankan basis data anda!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Galat tidak diketahui</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1418,10 +1587,6 @@ Hal ini diperlukan untuk mempertahankan kompatibilitas dengan plugin peramban.</
<translation>Jumlah transformasi:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Tunda benchmark 1-detik</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Penggunaan Memori:</translation>
</message>
@@ -1442,14 +1607,6 @@ Hal ini diperlukan untuk mempertahankan kompatibilitas dengan plugin peramban.</
<translation>Ubah</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 md</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 d</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Nilai yang lebih tinggi memberikan perlindungan lebih, tetapi membuka basis data akan menjadi lebih lama.</translation>
</message>
@@ -1459,7 +1616,7 @@ Hal ini diperlukan untuk mempertahankan kompatibilitas dengan plugin peramban.</
</message>
<message>
<source>This is only important if you need to use your database with other programs.</source>
- <translation>Hal ini penting jika Anda ingin menggunakan basis data menggunakan program lain.</translation>
+ <translation>Hal ini penting jika anda ingin memuat basis data menggunakan program lain.</translation>
</message>
<message>
<source>KDBX 4.0 (recommended)</source>
@@ -1477,7 +1634,7 @@ Hal ini diperlukan untuk mempertahankan kompatibilitas dengan plugin peramban.</
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Nilai transformasi terlalu tinggi</translation>
+ <translation>Jumlah transformasi terlalu tinggi</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
@@ -1506,7 +1663,7 @@ Jika anda tetap mempertahankan jumlah setinggi ini, basis data mungkin akan memb
If you keep this number, your database may be too easy to crack!</source>
<translation>Jumlah transformasi kunci yang anda gunakan dengan AES-KDF terlalu rendah.
-Jika anda tetap mempertahankan jumlah serendah ini, basis data anda mungkin akan menjadi terlalu mudah untuk di retas!</translation>
+Jika anda tetap mempertahankan jumlah serendah ini, basis data anda mungkin akan menjadi terlalu mudah untuk diretas!</translation>
</message>
<message>
<source>KDF unchanged</source>
@@ -1519,42 +1676,32 @@ Jika anda tetap mempertahankan jumlah serendah ini, basis data anda mungkin akan
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation type="unfinished"><numerusform></numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
- <translation type="unfinished"/>
+ <translation>Ubah waktu dekripsi yang ada</translation>
</message>
<message>
<source>Decryption time in seconds</source>
- <translation type="unfinished"/>
+ <translation>Waktu dekripsi dalam detik</translation>
</message>
<message>
<source>Database format</source>
- <translation type="unfinished"/>
+ <translation>Format basis data</translation>
</message>
<message>
<source>Encryption algorithm</source>
- <translation type="unfinished"/>
+ <translation>Algoritma enkripsi</translation>
</message>
<message>
<source>Key derivation function</source>
- <translation type="unfinished"/>
+ <translation>Fungi derivasi kunci</translation>
</message>
<message>
<source>Transform rounds</source>
@@ -1562,30 +1709,38 @@ Jika anda tetap mempertahankan jumlah serendah ini, basis data anda mungkin akan
</message>
<message>
<source>Memory usage</source>
- <translation type="unfinished"/>
+ <translation>Penggunaan memori</translation>
</message>
<message>
<source>Parallelism</source>
- <translation type="unfinished"/>
+ <translation>Paralelisme</translation>
+ </message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? md</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? d</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
<message>
<source>Exposed Entries</source>
- <translation type="unfinished"/>
+ <translation>Entri Yang Diekspos</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation type="unfinished"/>
+ <source>Don&apos;t expose this database</source>
+ <translation>Jangan ekspos basis data ini</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation type="unfinished"/>
+ <source>Expose entries under this group:</source>
+ <translation>Ekspos entri di bawah grup ini:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation type="unfinished"/>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Aktifkan Layanan Rahasia utnuk mengakses pengaturan ini.</translation>
</message>
</context>
<context>
@@ -1631,41 +1786,42 @@ Jika anda tetap mempertahankan jumlah serendah ini, basis data anda mungkin akan
<translation>Pengaturan Basis Data Tambahan</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Aktifkan &amp;kompresi (direkomendasikan)</translation>
- </message>
- <message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>Ruas nama basis data</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
+ <translation>Ruas deskripsi basis data</translation>
</message>
<message>
<source>Default username field</source>
- <translation type="unfinished"/>
+ <translation>Ruas nama pengguna baku</translation>
</message>
<message>
<source>Maximum number of history items per entry</source>
- <translation type="unfinished"/>
+ <translation>Jumlah maksimum item riwayat per entri</translation>
</message>
<message>
<source>Maximum size of history per entry</source>
- <translation type="unfinished"/>
+ <translation>Ukuran maksimum riwayat per entri</translation>
</message>
<message>
<source>Delete Recycle Bin</source>
- <translation type="unfinished"/>
+ <translation>Hapus Keranjang Sampah</translation>
</message>
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
- <translation type="unfinished"/>
+ <translation>Apakah anda yakin ingin menghapus keranjang sampah dan semua isinya?
+Tidakan ini tidak bisa diurungkan.</translation>
</message>
<message>
<source> (old)</source>
- <translation type="unfinished"/>
+ <translation>(lama)</translation>
+ </message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Aktifkan kompresi (direkomendasikan)</translation>
</message>
</context>
<context>
@@ -1688,7 +1844,7 @@ This action is not reversible.</source>
</message>
<message>
<source>Last Signer</source>
- <translation type="unfinished"/>
+ <translation>Penanda Tangan Terakhir</translation>
</message>
<message>
<source>Certificates</source>
@@ -1701,45 +1857,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Tambah proteksi tambahan...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Tidak ada kunci enkripsi yang ditambahkan</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Anda harus menambahkan paling tidak satu kunci enkripsi untuk mengamankan basis data anda!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Sandi belum di atur</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>PERINGATAN! Anda belum mengatur sandi. Menggunakan basis data tanpa sandi amat sangat tidak disarankan!
-
-Apakah anda tetap ingin melanjutkan tanpa mengatur sandi?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Galat tidak diketahui</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Gagal mengubah kunci master</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1751,130 +1868,11 @@ Apakah anda tetap ingin melanjutkan tanpa mengatur sandi?</translation>
</message>
<message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>Ruas nama basis data</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Nama</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Nilai</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
+ <translation>Ruas deskripsi basis data</translation>
</message>
</context>
<context>
@@ -1950,27 +1948,31 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang.</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
- <translation type="unfinished"/>
+ <translation>Gagal untuk membuka %1. Mungkin tidak ada atau tidak bisa diakses.</translation>
</message>
<message>
<source>Export database to HTML file</source>
- <translation type="unfinished"/>
+ <translation>Ekspor basis data ke berkas HTML</translation>
</message>
<message>
<source>HTML file</source>
- <translation type="unfinished"/>
+ <translation>Berkas HTML</translation>
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation type="unfinished"/>
+ <translation>Gagal menyimpan ke berkas HTML.</translation>
</message>
<message>
<source>Export Confirmation</source>
- <translation type="unfinished"/>
+ <translation>Konfirmasi Ekspor</translation>
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
- <translation type="unfinished"/>
+ <translation>Anda akan mengekspor basis data anda ke berkas tanpa enkripsi. Ini akan membuat sandi dan informasi sensitif lainnya menjadi sangat rentan. Apakah anda yakin ingin melanjutkan?</translation>
+ </message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Buka OPVault</translation>
</message>
</context>
<context>
@@ -1981,15 +1983,15 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang.</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Apakah Anda benar-benar ingin menghapus entri &quot;%1&quot; untuk selamanya?</translation>
+ <translation>Apakah anda yakin ingin menghapus entri &quot;%1&quot; untuk selamanya?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Apakah Anda benar-benar ingin memindahkan &quot;%1&quot; ke keranjang sampah?</translation>
+ <translation>Apakah anda yakin ingin memindahkan &quot;%1&quot; ke keranjang sampah?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Apakah anda yakin ingin memindahkan %n entri ke keranjang sampah?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -1997,7 +1999,7 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang.</translation>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Apakah Anda benar-benar ingin menjalankan perintah berikut?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>Apakah anda yakin ingin menjalankan perintah berikut?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
@@ -2005,7 +2007,7 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang.</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Apakah Anda benar-benar ingin menghapus grup &quot;%1&quot; untuk selamanya?</translation>
+ <translation>Apakah anda yakin ingin menghapus grup &quot;%1&quot; untuk selamanya?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2038,8 +2040,8 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang.</translation>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>Berkas basis data telah berubah dan Anda memiliki ubahan yang belum disimpan.
-Apakah Anda ingin menggabungkan ubahan Anda?</translation>
+ <translation>Berkas basis data telah berubah dan anda memiliki ubahan yang belum disimpan.
+Apakah anda ingin menggabungkan ubahan anda?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2047,19 +2049,19 @@ Apakah Anda ingin menggabungkan ubahan Anda?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Apakah Anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah?</translation>
+ <translation>Apakah anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Apakah anda yakin ingin menghapus %n entri selamanya?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Hapus entri?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Pindahkan entri ke keranjang sampah?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2119,7 +2121,7 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Entri &quot;%1&quot; memiliki %2 referensi. Apakah anda ingin mengganti referensi dengan data baru, mengabaikan entri ini, atau mungkin menghapusnya?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2131,7 +2133,7 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Apakah anda ingin memindahkan grup &quot;%1&quot; ke keranjang sampah?</translation>
+ <translation>Apakah anda yakin ingin memindahkan grup &quot;%1&quot; ke keranjang sampah?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
@@ -2139,7 +2141,7 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>Basis data tidak diubah oleh proses penggabungan.</translation>
+ <translation>Basis data tidak ada perubahan yang diakibatkan oleh proses penggabungan.</translation>
</message>
<message>
<source>Shared group...</source>
@@ -2151,6 +2153,14 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
+ <translation>Basis data ini dibuka dalam mode baca-saja. Simpan otomatis dinonaktifkan.</translation>
+ </message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Simpan cadangan basis data</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
<translation type="unfinished"/>
</message>
</context>
@@ -2197,14 +2207,6 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<translation>Pilih kunci privat</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Berkas terlalu besar untuk jadi kunci privat</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Gagal membuka kunci privat</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Riwayat entri</translation>
</message>
@@ -2217,16 +2219,12 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<translation>Sunting entri</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Sandi berbeda.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Atribut baru</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Apakah Anda yakin ingin membuang atribut ini?</translation>
+ <translation>Apakah anda yakin ingin membuang atribut ini?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2234,39 +2232,23 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n minggu</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Gunakan sandi yang dibuat?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Apakah Anda ingin menggunakan sandi yang dibuat untuk entri ini?</translation>
+ <translation><numerusform>%n bulan</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Entri berhasil diperbarui.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Entri memiliki perubahan yang belum disimpan</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Atribut baru %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[DILINDUNGI] Tekan tampilkan untuk meninjau atau mnyunting</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n tahun</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
@@ -2278,11 +2260,31 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>&lt;empty URL&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;empty URL&gt;</translation>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
- <translation type="unfinished"/>
+ <translation>Apakah anda yakin ingin membuang URL ini?</translation>
+ </message>
+ <message>
+ <source>Reveal</source>
+ <translation>Tampilkan</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Sembunyikan</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Perubahan Belum Disimpan</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Apakah anda yakin ingin menyimpan perubahan ke entri ini?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[DILINDUNGI] Tekan Tampilkan untuk melihat atau menyunting</translation>
</message>
</context>
<context>
@@ -2325,39 +2327,47 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Attribute selection</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan atribut</translation>
</message>
<message>
<source>Attribute value</source>
- <translation type="unfinished"/>
+ <translation>Nilai atribut</translation>
</message>
<message>
<source>Add a new attribute</source>
- <translation type="unfinished"/>
+ <translation>Tambah atribut baru</translation>
</message>
<message>
<source>Remove selected attribute</source>
- <translation type="unfinished"/>
+ <translation>Buang atribut yang dipilih</translation>
</message>
<message>
<source>Edit attribute name</source>
- <translation type="unfinished"/>
+ <translation>Sunting nama atribut</translation>
</message>
<message>
<source>Toggle attribute protection</source>
- <translation type="unfinished"/>
+ <translation>Aktif/Nonaktifkan proteksi atribut</translation>
</message>
<message>
<source>Show a protected attribute</source>
- <translation type="unfinished"/>
+ <translation>Tampilkan atribut yang dilindungi</translation>
</message>
<message>
<source>Foreground color selection</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan warna latar depan</translation>
</message>
<message>
<source>Background color selection</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan warna latar belakang</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jika dicentang, entri tidak akan muncul di laporan seperti Pemeriksaan Kesehatan (Health Check) dan HIBP walau jika tidak sesuai dengan persyaratan kualitas (mis. entropi kata sandi atau penggunaan kembali). Anda dapat menetapkan tanda centang jika kata sandi di luar kendali anda (mis. jika perlu PIN empat digit) untuk mencegahnya mengacaukan laporan.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Kecualikan dari laporan basis data</translation>
</message>
</context>
<context>
@@ -2367,14 +2377,6 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<translation>Aktifkan Ketik-Otomatis untuk entri ini</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Ikuti urutan Ketik-Otomatis bawaan &amp;grup</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Gunakan &amp;urutan Ketik-Otomatis khusus:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Asosiasi Jendela</translation>
</message>
@@ -2396,46 +2398,54 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
- <translation type="unfinished"/>
+ <translation>Urutan Ketik-Otomatis khusus</translation>
</message>
<message>
<source>Open Auto-Type help webpage</source>
- <translation type="unfinished"/>
+ <translation>Buka laman bantuan Ketik-Otomatis</translation>
</message>
<message>
<source>Existing window associations</source>
- <translation type="unfinished"/>
+ <translation>Asosiasi jendela yang ada</translation>
</message>
<message>
<source>Add new window association</source>
- <translation type="unfinished"/>
+ <translation>Tambah asosiasi jendela baru</translation>
</message>
<message>
<source>Remove selected window association</source>
- <translation type="unfinished"/>
+ <translation>Buang asosiasi jendela yang dipilih</translation>
</message>
<message>
<source>You can use an asterisk (*) to match everything</source>
- <translation type="unfinished"/>
+ <translation>Anda bisa menggunakan asterik (*) untuk mencocokkan semuanya</translation>
</message>
<message>
<source>Set the window association title</source>
- <translation type="unfinished"/>
+ <translation>Atur judul asosiasi jendela</translation>
</message>
<message>
<source>You can use an asterisk to match everything</source>
- <translation type="unfinished"/>
+ <translation>Anda bisa menggunakan asterik untuk mencocokkan semuanya</translation>
</message>
<message>
<source>Custom Auto-Type sequence for this window</source>
- <translation type="unfinished"/>
+ <translation>Urutan Ketik-Otomatis khusus untuk jendela ini</translation>
+ </message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Mengikuti urutan Ketik-Otomatis baku grup</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Gunakan urutan Ketik-Otomatis ubahsuai:</translation>
</message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
<message>
<source>These settings affect to the entry&apos;s behaviour with the browser extension.</source>
- <translation type="unfinished"/>
+ <translation>Pengaturan ini mempengaruhi perilaku entri dengan ekstensi peramban.</translation>
</message>
<message>
<source>General</source>
@@ -2443,15 +2453,15 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Skip Auto-Submit for this entry</source>
- <translation type="unfinished"/>
+ <translation>Lewati Kirim-Otomatis untuk entri ini</translation>
</message>
<message>
<source>Hide this entry from the browser extension</source>
- <translation type="unfinished"/>
+ <translation>Sembunyikan entri ini dari ekstensi peramban</translation>
</message>
<message>
<source>Additional URL&apos;s</source>
- <translation type="unfinished"/>
+ <translation>URL tambahan</translation>
</message>
<message>
<source>Add</source>
@@ -2465,6 +2475,14 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<source>Edit</source>
<translation>Sunting</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Hanya kirim pengaturan ini ke peramban untuk dialog Otentikasi HTTP. Jika diaktifkan, formulir masuk yang normal tidak akan menampilkan entri ini untuk dipilih.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Hanya gunakan entri ini dengan Otentikasi Dasar HTTP</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2486,23 +2504,23 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Entry history selection</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan riwayat entri</translation>
</message>
<message>
<source>Show entry at selected history state</source>
- <translation type="unfinished"/>
+ <translation>Tampilkan entri pada status riwayat yang dipilih</translation>
</message>
<message>
<source>Restore entry to selected history state</source>
- <translation type="unfinished"/>
+ <translation>Pulihkan entri ke status riwayat yang dipilih</translation>
</message>
<message>
<source>Delete selected history state</source>
- <translation type="unfinished"/>
+ <translation>Hapus status riwayat yang dipilih</translation>
</message>
<message>
<source>Delete all history</source>
- <translation type="unfinished"/>
+ <translation>Hapus semua riwayat</translation>
</message>
</context>
<context>
@@ -2516,18 +2534,10 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<translation>Sandi:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Ulangi:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Judul:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Catatan</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Prasetel</translation>
</message>
@@ -2540,40 +2550,24 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<translation>Nama pengguna:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Kedaluwarsa</translation>
- </message>
- <message>
<source>Url field</source>
- <translation type="unfinished"/>
+ <translation>Ruas url</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
+ <translation>Untuk favicon untuk URL</translation>
</message>
<message>
<source>Password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
+ <translation>Ruas sandi</translation>
</message>
<message>
<source>Toggle notes visible</source>
- <translation type="unfinished"/>
+ <translation>Aktif/Nonaktifkan visibilitas cacatan</translation>
</message>
<message>
<source>Expiration field</source>
- <translation type="unfinished"/>
+ <translation>Ruas kedaluwarsa</translation>
</message>
<message>
<source>Expiration Presets</source>
@@ -2585,18 +2579,30 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Notes field</source>
- <translation type="unfinished"/>
+ <translation>Ruas catatan</translation>
</message>
<message>
<source>Title field</source>
- <translation type="unfinished"/>
+ <translation>Ruas judul</translation>
</message>
<message>
<source>Username field</source>
- <translation type="unfinished"/>
+ <translation>Ruas nama pengguna</translation>
</message>
<message>
<source>Toggle expiration</source>
+ <translation>Aktif/Nonaktifkan kedaluwarsa</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Catatan:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
</context>
@@ -2604,7 +2610,7 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<name>EditEntryWidgetSSHAgent</name>
<message>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulir</translation>
</message>
<message>
<source>Remove key from agent after</source>
@@ -2677,19 +2683,19 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
- <translation type="unfinished"/>
+ <translation>Hapus kunci dari agen setelah detik yang ditentukan</translation>
</message>
<message>
<source>Browser for key file</source>
- <translation type="unfinished"/>
+ <translation>Peramban untuk berkas kunci</translation>
</message>
<message>
<source>External key file</source>
- <translation type="unfinished"/>
+ <translation>Berkas kunci eksternal</translation>
</message>
<message>
<source>Select attachment file</source>
- <translation type="unfinished"/>
+ <translation>Pilih berkas lampiran</translation>
</message>
</context>
<context>
@@ -2734,10 +2740,6 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Type:</source>
<translation>Tipe:</translation>
</message>
@@ -2746,10 +2748,6 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
<translation>Jalur:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Sandi:</translation>
</message>
@@ -2759,11 +2757,11 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
+ <translation>Kontainer KeeShare tak bertanda tangan</translation>
</message>
<message>
<source>KeeShare signed container</source>
- <translation type="unfinished"/>
+ <translation>Kontainer KeeShare bertanda tangan</translation>
</message>
<message>
<source>Select import source</source>
@@ -2791,137 +2789,126 @@ Nonaktifkan penyimpanan aman dan coba lagi?</translation>
</message>
<message>
<source>Synchronize</source>
- <translation type="unfinished"/>
+ <translation>Sinkronkan</translation>
</message>
<message>
<source>Your KeePassXC version does not support sharing this container type.
Supported extensions are: %1.</source>
- <translation type="unfinished"/>
+ <translation>Versi KeePassXC anda tidak mendukung fitur berbagi untuk tipe kontainer ini.
+Ekstensi yang didukung adalah: %1.</translation>
</message>
<message>
<source>%1 is already being exported by this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 telah diekspor oleh basis data ini.</translation>
</message>
<message>
<source>%1 is already being imported by this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 telah diimpor oleh basis data ini.</translation>
</message>
<message>
<source>%1 is being imported and exported by different groups in this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 sedang diimpor dan diekspor oleh berbagai grup dalam basis data ini.</translation>
</message>
<message>
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
<comment>KeeShare is a proper noun</comment>
- <translation type="unfinished"/>
+ <translation>Saat ini KeeShare dinonaktifkan. Anda dapat mengaktifkan impor/ekspor di pengaturan aplikasi.</translation>
</message>
<message>
<source>Database export is currently disabled by application settings.</source>
- <translation type="unfinished"/>
+ <translation>Ekspor basis data saat ini dinonaktifkan oleh pengaturan aplikasi.</translation>
</message>
<message>
<source>Database import is currently disabled by application settings.</source>
- <translation type="unfinished"/>
+ <translation>Impor basis data saat ini dinonaktifkan oleh pengaturan aplikasi.</translation>
</message>
<message>
<source>Sharing mode field</source>
- <translation type="unfinished"/>
+ <translation>Ruas mode berbagi</translation>
</message>
<message>
<source>Path to share file field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
+ <translation>Ruas jalur ke berkas yang dibagikan</translation>
</message>
<message>
<source>Password field</source>
- <translation type="unfinished"/>
+ <translation>Ruas sandi</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
+ <source>Clear fields</source>
+ <translation>Kosongkan ruas</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
+ <source>Browse for share file</source>
+ <translation>Telusuri berkas berbagi</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Telusuri...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nama</translation>
+ <source>Name field</source>
+ <translation>Ruas nama</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Catatan</translation>
+ <source>Notes field</source>
+ <translation>Ruas catatan</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Kedaluwarsa</translation>
+ <source>Toggle expiration</source>
+ <translation>Aktif/Nonaktifkan kedaluwarsa</translation>
</message>
<message>
- <source>Search</source>
- <translation>Cari</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation>Aktif/Nonaktifkan Ketik-Otomatis untuk ini dan sub grup</translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Ketik-Otomatis</translation>
+ <source>Expiration field</source>
+ <translation>Ruas kedaluwarsa</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Gunakan &amp;urutan Ketik-Otomatis bawaan grup induk</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation>Aktif/Nonaktifkan pencarian untuk ini dan sub grup</translation>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Tetapkan uru&amp;tan baku Ketik-Otomatis</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>Ruas urutan ketik-otomatis baku</translation>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
- <translation type="unfinished"/>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Gunakan urutan Ketik-Otomatis bawaan dari grup induk</translation>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>Catatan:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation type="unfinished"/>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Tetapkan urutan Ketik-Otomatis yang baku</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>G&amp;unakan ikon bawaan</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Gunakan ikon &amp;khusus</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Tambah ikon khusus</translation>
</message>
@@ -2955,7 +2942,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Berhasil memuat %1 dari %n ikon</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2963,35 +2950,27 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n ikon sudah ada didalam basis data</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Ikon berikut gagal:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Ikon ini digunakan oleh %n entri, dan akan diganti dengan ikon bawaan. Apakah anda yakin ingin menghapusnya?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
- <translation type="unfinished"/>
+ <translation>Anda bisa mengaktifkan layanan ikon situs web oleh DuckDuckGo di Perkakas &gt; Pengaturan &gt; Keamanan</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation type="unfinished"/>
+ <translation>Untuk favicon untuk URL</translation>
</message>
<message>
<source>Apply selected icon to subgroups and entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Apply icon &amp;to ...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation type="unfinished"/>
+ <translation>Terapkan ikon yang dipilih ke subgrup dan entri</translation>
</message>
<message>
<source>Also apply to child groups</source>
@@ -3007,6 +2986,22 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Existing icon selected.</source>
+ <translation>Ikon yang sudah ada dipilih.</translation>
+ </message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Gunakan ikon baku</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Gunakan ikon ubahsuai</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Terapkan ikon ke...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3030,7 +3025,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Plugin Data</source>
- <translation>Data Plugin</translation>
+ <translation>Data Pengaya</translation>
</message>
<message>
<source>Remove</source>
@@ -3038,13 +3033,13 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Delete plugin data?</source>
- <translation>Hapus data plugin?</translation>
+ <translation>Hapus data pengaya?</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>Apakah Anda benar-benar ingin menghapus data plugin?
-Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
+ <translation>Apakah anda yakin ingin menghapus data pengaya?
+Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi.</translation>
</message>
<message>
<source>Key</source>
@@ -3056,27 +3051,27 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
<message>
<source>Datetime created</source>
- <translation type="unfinished"/>
+ <translation>Tanggal waktu dibuat</translation>
</message>
<message>
<source>Datetime modified</source>
- <translation type="unfinished"/>
+ <translation>Tanggal waktu dimodifikasi</translation>
</message>
<message>
<source>Datetime accessed</source>
- <translation type="unfinished"/>
+ <translation>Tanggal waktu diakses</translation>
</message>
<message>
<source>Unique ID</source>
- <translation type="unfinished"/>
+ <translation>ID Unik</translation>
</message>
<message>
<source>Plugin data</source>
- <translation type="unfinished"/>
+ <translation>Data pengaya</translation>
</message>
<message>
<source>Remove selected plugin data</source>
- <translation type="unfinished"/>
+ <translation>Buang data pengaya yang dipilih</translation>
</message>
</context>
<context>
@@ -3101,7 +3096,7 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulir</translation>
</message>
<message>
<source>Add</source>
@@ -3125,7 +3120,7 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Apakah anda yakin ingin membuang %n lampiran?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3139,7 +3134,7 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>Apakah Anda yakin ingin menimpa ulang berkas &quot;%1&quot; yang ada dengan berkas lampiran?</translation>
+ <translation>Apakah anda yakin ingin menimpa ulang berkas &quot;%1&quot; yang ada dengan berkas lampiran?</translation>
</message>
<message>
<source>Confirm overwrite</source>
@@ -3170,7 +3165,8 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Tidak bisa membuka berkas:
+%1</numerusform></translation>
</message>
<message>
<source>Attachments</source>
@@ -3178,19 +3174,33 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
<message>
<source>Add new attachment</source>
- <translation type="unfinished"/>
+ <translation>Tambah lampiran baru</translation>
</message>
<message>
<source>Remove selected attachment</source>
- <translation type="unfinished"/>
+ <translation>Buang lampiran yang dipilih</translation>
</message>
<message>
<source>Open selected attachment</source>
- <translation type="unfinished"/>
+ <translation>Buka lampiran yang dipilih</translation>
</message>
<message>
<source>Save selected attachment to disk</source>
- <translation type="unfinished"/>
+ <translation>Simpan lampiran yang dipilih ke diska</translation>
+ </message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 adalah berkas yang sangat besar (%2 MB).
+Basis data anda akan menjadi sangat besar dan akan mengurangi performa kinerja.
+
+Apakah anda yakin ingin menambahkan berkas ini?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Konfirmasi Lampiran</translation>
</message>
</context>
<context>
@@ -3275,12 +3285,52 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
<translation>Lampiran</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ya</translation>
+ <source>Size</source>
+ <translation>Ukuran</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nama grup</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Judul entri</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Catatan entri</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Entri kedaluwarsa pada</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Tanggal dibuat</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Tanggal diubah terakhir</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Tanggal terakhir diakses</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Berkas terlampir</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Ukuran entri</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Memiliki lampiran</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Memiliki sandi sekali TOTP</translation>
</message>
</context>
<context>
@@ -3372,7 +3422,7 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
<message>
<source>Display current TOTP value</source>
- <translation type="unfinished"/>
+ <translation>Tampilkan nilai TOTP saat ini</translation>
</message>
<message>
<source>Advanced</source>
@@ -3380,6 +3430,13 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL tidak valid</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3406,35 +3463,94 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
<translation>Kembalikan ke setelan bawaan</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Lampiran (ikon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Memiliki lampiran</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Memiliki TOTP</translation>
</message>
</context>
<context>
<name>FdoSecrets::Item</name>
<message>
<source>Entry &quot;%1&quot; from database &quot;%2&quot; was used by %3</source>
- <translation type="unfinished"/>
+ <translation>Entri &quot;%1&quot; dari basis data &quot;%2&quot; telah digunakan oleh %3</translation>
</message>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n Entri telah digunakan oleh %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Gagal mendaftarkan layanan DBus pada %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nama Berkas</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grup</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Kelola</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Buka kunci untuk menampilkan</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nihil</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplikasi</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Kelola</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Layanan Rahasia Fdo:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Tidak diketahui</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Tidak diketahui</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Layanan rahasia lain sedang berjalan (%1).&lt;br/&gt;Harap hentikan/hapus sebelum mengaktifkan kembali Integrasi Layanan Rahasia.</translation>
+ </message>
</context>
<context>
<name>Group</name>
@@ -3445,21 +3561,17 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Tidak bisa menyimpan berkas!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Tidak bisa menyimpan berkas perpesanan native.</translation>
+ <source>Online password validation failed</source>
+ <translation>Validasi sandi daring gagal</translation>
</message>
</context>
<context>
<name>IconDownloaderDialog</name>
<message>
<source>Download Favicons</source>
- <translation type="unfinished"/>
+ <translation>Unduh Favicon</translation>
</message>
<message>
<source>Cancel</source>
@@ -3468,7 +3580,8 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi.</translation>
<message>
<source>Having trouble downloading icons?
You can enable the DuckDuckGo website icon service in the security section of the application settings.</source>
- <translation type="unfinished"/>
+ <translation>Mengalami masalah ketika mengunduh ikon?
+Anda dapat mengaktifkan layanan ikon situs web DuckDuckGo di bagian keamanan dalam pengaturan aplikasi.</translation>
</message>
<message>
<source>Close</source>
@@ -3484,11 +3597,11 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Please wait, processing entry list...</source>
- <translation type="unfinished"/>
+ <translation>Silakan tunggu, sedang memproses daftar entri...</translation>
</message>
<message>
<source>Downloading...</source>
- <translation type="unfinished"/>
+ <translation>Mengunduh...</translation>
</message>
<message>
<source>Ok</source>
@@ -3496,15 +3609,15 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Already Exists</source>
- <translation type="unfinished"/>
+ <translation>Sudah Ada</translation>
</message>
<message>
<source>Download Failed</source>
- <translation type="unfinished"/>
+ <translation>Gagal Mengunduh</translation>
</message>
<message>
<source>Downloading favicons (%1/%2)...</source>
- <translation type="unfinished"/>
+ <translation>Mengunduh favicon (%1/%2)...</translation>
</message>
</context>
<context>
@@ -3521,20 +3634,12 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Tidak bisa mengkalkulasi kunci utama</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>missing database headers</source>
<translation>kehilangan tajuk basis data</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
+ <translation>Header tidak cocok dengan hash</translation>
</message>
<message>
<source>Invalid header id size</source>
@@ -3551,18 +3656,27 @@ You can enable the DuckDuckGo website icon service in the security section of th
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
+ <translation>Kredensial yang diberikan tidak valid, silakan coba lagi.
+Jika terus berulang, maka basis data anda mungkin rusak.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
+ <source>Unable to issue challenge-response: %1</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Tidak bisa mengkalkulasi kunci utama</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3572,10 +3686,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>kehilangan tajuk basis data</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Tidak bisa mengkalkulasi kunci utama</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Ukuran checksum tajuk tidak valid</translation>
</message>
@@ -3686,10 +3796,15 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation type="unfinished"/>
+ <translation>Kredensial yang diberikan tidak valid, silakan coba lagi.
+Jika terus berulang, maka basis data anda mungkin rusak.</translation>
</message>
<message>
<source>(HMAC mismatch)</source>
+ <translation>(HMAC tidak cocok)</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3705,14 +3820,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ukuran cipher IV simetrik tidak valid.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Tidak bisa mengkalkulasi kunci utama</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Gagal menserialisasi map variasi parameter KDF</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3862,10 +3977,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp
<translation>Kehilangan nilai atau kunci lema entri</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Ditemukan lampiran ganda</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Kehilangan nilai atau kunci binari entri</translation>
</message>
@@ -3912,6 +4023,29 @@ Baris %2, kolom %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Kunci privat adalah lampiran tetapi tidak ada lampiran yang tersedia.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Kunci privat kosong</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Berkas terlalu besar untuk jadi kunci privat</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Gagal membuka kunci privat</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3919,7 +4053,7 @@ Baris %2, kolom %3</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
- <translation type="unfinished"/>
+ <translation>Impor Basis Data KeePass1</translation>
</message>
</context>
<context>
@@ -3974,10 +4108,6 @@ Baris %2, kolom %3</translation>
<translation>Root</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Tidak bisa mengkalkulasi kunci utama</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Transformasi kunci gagal</translation>
</message>
@@ -4076,6 +4206,11 @@ Baris %2, kolom %3</translation>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
+ <translation>Kredensial yang diberikan tidak valid, silakan coba lagi.
+Jika terus berulang, maka basis data anda mungkin rusak.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4095,19 +4230,19 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Exported to %1</source>
- <translation type="unfinished"/>
+ <translation>Diekspor ke %1</translation>
</message>
<message>
<source>Synchronized with %1</source>
- <translation type="unfinished"/>
+ <translation>Disinkronkan dengan %1</translation>
</message>
<message>
<source>Import is disabled in settings</source>
- <translation type="unfinished"/>
+ <translation>Impor dinonaktifkan di dalam pengaturan</translation>
</message>
<message>
<source>Export is disabled in settings</source>
- <translation type="unfinished"/>
+ <translation>Ekspor dinonaktifkan di dalam pengaturan</translation>
</message>
<message>
<source>Inactive share</source>
@@ -4115,15 +4250,15 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Imported from</source>
- <translation type="unfinished"/>
+ <translation>Diimpor dari</translation>
</message>
<message>
<source>Exported to</source>
- <translation type="unfinished"/>
+ <translation>Diekspor dari</translation>
</message>
<message>
<source>Synchronized with</source>
- <translation type="unfinished"/>
+ <translation>Disinkronkan dengan</translation>
</message>
</context>
<context>
@@ -4162,7 +4297,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>%1 set, click to change or remove</source>
<comment>Change or remove a key component</comment>
- <translation>%1 telah diatur, klik untuk mengganti atau menghapus</translation>
+ <translation>%1 telah diatur, klik untuk ganti atau hapus</translation>
</message>
</context>
<context>
@@ -4184,16 +4319,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Format berkas kunci legacy</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Anda menggunakan format berkas kunci lama yang mungkin
-tidak akan lagi didukung di masa depan.
-
-Kunjungi pengaturan kunci utama dan buat berkas kunci baru.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Galat memuat berkas kunci &apos;%1&apos;
@@ -4225,11 +4350,11 @@ Pesan: %2</translation>
</message>
<message>
<source>Key file selection</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan berkas kunci</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation type="unfinished"/>
+ <translation>Telusuri berkas kunci</translation>
</message>
<message>
<source>Browse...</source>
@@ -4237,27 +4362,35 @@ Pesan: %2</translation>
</message>
<message>
<source>Generate a new key file</source>
- <translation type="unfinished"/>
+ <translation>Buat berkas kunci baru</translation>
</message>
<message>
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
- <translation type="unfinished"/>
+ <translation>Catatan: Jangan gunakan berkas yang dapat berubah karena itu akan mencegah anda membuka kunci basis data anda!</translation>
</message>
<message>
<source>Invalid Key File</source>
- <translation type="unfinished"/>
+ <translation>Berkas Kunci Tidak Valid</translation>
</message>
<message>
<source>You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file.</source>
- <translation type="unfinished"/>
+ <translation>Anda tidak dapat menggunakan basis data sekarang sebagai kunci berkasnya sendiri. Harap pilih berkas berbeda atau hasilkan kunci berkas baru.</translation>
</message>
<message>
<source>Suspicious Key File</source>
- <translation type="unfinished"/>
+ <translation>Berkas Kunci Mencurigakan</translation>
</message>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
+ <translation>Kunci berkas yang dipilih terlihat seperti kata sandi basis data. Kunci berkas harus berkas statis yang tidak pernah berubah atau anda akan kehilangan akses ke basis data anda selamanya.
+Apakah anda yakin ingin melanjutkan dengan berkas ini?</translation>
+ </message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4268,18 +4401,10 @@ Are you sure you want to continue with this file?</source>
<translation>Basis &amp;data</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>Basis data ba&amp;ru-baru ini</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Bantuan</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntri</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grup</translation>
</message>
@@ -4296,46 +4421,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Tentang</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Buka basis data...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Simpan basis data</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Tutup basis data</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Hapus entri</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Sunting grup</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Hapus grup</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>&amp;Simpan basis data sebagai...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Pengaturan basis data</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Gandakan entri</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Salin &amp;nama pengguna</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Salin nama pengguna ke papan klip</translation>
</message>
@@ -4348,10 +4437,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Pengaturan</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Kunci basis data</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Judul</translation>
</message>
@@ -4376,14 +4461,6 @@ Are you sure you want to continue with this file?</source>
<translation>Salin catatan ke papan klip</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Ekspor ke berkas CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Siapkan TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Salin &amp;TOTP</translation>
</message>
@@ -4413,7 +4490,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>Silakan sentuh tombol pada YubiKey Anda!</translation>
+ <translation>Silakan sentuh tombol pada YubiKey anda!</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
@@ -4428,79 +4505,36 @@ Versi ini tidak dimaksudkan untuk penggunaan sehari-hari.</translation>
<translation>&amp;Donasi</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Laporkan &amp;bug</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
+ <translation>PERINGATAN: Versi Qt anda dapat menyebabkan KeePassXC mogok/tidak merespon dengan adanya On-Screen Keyboard!
+Kami sarankan anda menggunakan AppImage yang tersedia di halaman unduhan kami.</translation>
</message>
<message>
<source>&amp;Import</source>
<translation>&amp;Impor</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Salin at&amp;ribut...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>Basis data bar&amp;u...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Buat basis data baru</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Gabung dari basis data...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Gabung dari basis data KDBX lainnya</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>E&amp;ntri baru</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Tambahkan entri baru</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Sunting entri</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Lihat atau sunting entri</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Grup baru</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Tambahkan grup baru</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Ganti &amp;kunci master...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>Pengaturan basis &amp;data...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Salin &amp;sandi</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Jalankan &amp;Ketik-Otomatis</translation>
</message>
@@ -4509,30 +4543,14 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>Buka &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Basis data KeePass 1...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Impor basis data KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Berkas CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Impor berkas CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Tampilkan TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Tampilkan Kode QR TOTP...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>CATATAN: Anda menggunakan versi pra-rilis KeePassXC!
@@ -4553,74 +4571,308 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>&amp;Export</source>
- <translation type="unfinished"/>
+ <translation>&amp;Ekspor</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation type="unfinished"/>
+ <source>Sort &amp;A-Z</source>
+ <translation>Urutkan &amp;A-Z</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation type="unfinished"/>
+ <source>Sort &amp;Z-A</source>
+ <translation>Urutkan &amp;Z-A</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Pembuat Sandi</translation>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation>Impor Brankas 1Password</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Memulai</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>Pand&amp;uan Pengguna</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>Pintasan &amp;Kibor</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>Basis Data Ba&amp;ru-baru Ini</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Entri</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Salin At&amp;ribut</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Lihat</translation>
+ </message>
+ <message>
+ <source>Theme</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>&amp;Check for Updates</source>
+ <translation>Periksa &amp;Pembaruan</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Buka Basis Data…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Simpan Basis Data</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Tutup Basis Data</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>Basis Data &amp;Baru…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Gabung Dari Basis Data…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>Entri &amp;Baru…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Sunting Entri…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Hapus Entri…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>Grup &amp;Baru…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Sunting Grup…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Hapus Grup…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Unduh Semua &amp;Favicon…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Sim&amp;pan Basis Data Sebagai…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>Database &amp;Reports...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>Unduh favicon</translation>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistik, cek kesehatan, dll.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Pengaturan Basis&amp;data…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Gandakan Entri…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Pindah ke &amp;atas</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Pindah entri 1 level ke atas</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Pindah ke &amp;bawah</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Pindah entri 1 level ke bawah</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Salin &amp;Nama Pengguna</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Salin &amp;Sandi</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Unduh &amp;Favicon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Kunci Basis Data</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>&amp;CSV File…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;HTML File…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>KeePass 1 Database…</source>
+ <translation>Basis Data KeePass 1…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>Brankas 1Password…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>Berkas CSV…</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Tampilkan TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Tampilkan Kode QR</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Siapkan TOTP…</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Laporkan &amp;Bug</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Bantuan Daring</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>Open User Guide</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Save Database Backup...</source>
+ <translation>Simpan Cadangan Basis Data...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Tambahkan kunci ke Agen SSH</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Buang kunci dari Agen SSH</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>Automatic</source>
+ <translation>Otomatis</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Terang</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Gelap</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klasik (Native-platform)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>Show Preview Panel</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Jangan tampilkan lagu untuk versi ini</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Pengaturan basis data</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Sunting pengaturan basis data</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Buka kunci basis data</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Buka kunci basis data untuk menampilkan lebih banyak informasi</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Kunci basis data</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Putuskan koneksi</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Putuskan koneksi aplikasi ini</translation>
+ </message>
+</context>
+<context>
<name>Merger</name>
<message>
<source>Creating missing %1 [%2]</source>
@@ -4672,7 +4924,7 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Changed deleted objects</source>
- <translation type="unfinished"/>
+ <translation>Mengubah objek yang telah dihapus</translation>
</message>
<message>
<source>Adding missing icon %1</source>
@@ -4680,11 +4932,11 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Removed custom data %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation> Data khusus yang dihapus %1[%2]</translation>
</message>
<message>
<source>Adding custom data %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Menambahkan data khusus %1[%2]</translation>
</message>
</context>
<context>
@@ -4706,10 +4958,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<translation>LamanPemandu</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Pengaturan En&amp;kripsi</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Di sini anda bisa menyesuaikan pengaturan enkripsi basis data. Jangan khawatir, anda bisa mengubahnya lagi nanti di pengaturan basis data.</translation>
</message>
@@ -4721,27 +4969,31 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<source>Simple Settings</source>
<translation>Pengaturan Dasar</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Pengaturan Enkripsi</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Di sini anda bisa menyesuaikan pengaturan enkripsi basis data. Jangan khawatir, anda bisa mengubahnya lagi nanti di pengaturan basis data.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Kunci Master Basis Data</translation>
+ <source>Encryption Settings</source>
+ <translation>Pengaturan Enkripsi</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Di sini anda bisa menyesuaikan pengaturan enkripsi basis data. Jangan khawatir, anda bisa mengubahnya lagi nanti di pengaturan basis data.</translation>
</message>
</context>
<context>
@@ -4756,6 +5008,13 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Pengelola Sandi</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4763,7 +5022,7 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Unable to read all IV bytes, wanted 16 but got %1</source>
- <translation type="unfinished"/>
+ <translation>Tidak dapat membaca semua IV bytes, seharusnya 16 tetapi mendapat %1</translation>
</message>
<message>
<source>Unable to init cipher for opdata01: %1</source>
@@ -4771,7 +5030,7 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Unable to read all HMAC signature bytes</source>
- <translation type="unfinished"/>
+ <translation>Tidak dapat membaca semua HMAC signature bytes</translation>
</message>
<message>
<source>Malformed OpData01 due to a failed HMAC</source>
@@ -4814,7 +5073,7 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Unable to decode masterKey: %1</source>
- <translation type="unfinished"/>
+ <translation>Tidak dapat mendekodekan kuncimaster: %1</translation>
</message>
<message>
<source>Unable to derive master key: %1</source>
@@ -4924,11 +5183,23 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<name>PasswordEdit</name>
<message>
<source>Passwords do not match</source>
- <translation type="unfinished"/>
+ <translation>Sandi tidak sama</translation>
</message>
<message>
<source>Passwords match so far</source>
- <translation type="unfinished"/>
+ <translation>Kata sandi cocok sejauh ini</translation>
+ </message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Aktif/Nonaktifkan Sandi (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Buat Sandi (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Peringatan: Caps Lock aktif!</translation>
</message>
</context>
<context>
@@ -4947,31 +5218,19 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;p&gt;Kata sandi adalah metode utama untuk mengamankan basis data anda.&lt;/p&gt;&lt;p&gt;Kata sandi yang bagus adalah unik dan panjang. KeePassXC dapat menghasilkan satu untuk anda.&lt;/p&gt; </translation>
</message>
<message>
<source>Passwords do not match.</source>
<translation>Sandi tidak sama.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Buat sandi master</translation>
- </message>
- <message>
<source>Password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
+ <translation>Ruas sandi</translation>
</message>
<message>
<source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
+ <translation>Ruas pengulangan sandi</translation>
</message>
</context>
<context>
@@ -4981,10 +5240,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Sandi:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>kekuatan</translation>
@@ -5034,14 +5289,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<translation>Pemisah Kata:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Salin</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Terima</translation>
- </message>
- <message>
<source>Close</source>
<translation>Tutup</translation>
</message>
@@ -5138,14 +5385,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Beralih ke mode dasar</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Dasar</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Karakter yang dikecualikan dari sandi yang dibuat</translation>
</message>
@@ -5166,48 +5405,40 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<translation>Karakter yang dikecualikan: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Jumlah Kata:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Buat ulang</translation>
- </message>
- <message>
<source>Generated password</source>
- <translation type="unfinished"/>
+ <translation>Sandi yang dibuat</translation>
</message>
<message>
<source>Upper-case letters</source>
- <translation type="unfinished"/>
+ <translation>Huruf besar</translation>
</message>
<message>
<source>Lower-case letters</source>
- <translation type="unfinished"/>
+ <translation>Huruf kecil</translation>
</message>
<message>
<source>Special characters</source>
- <translation type="unfinished"/>
+ <translation>Karakter spesial</translation>
</message>
<message>
<source>Math Symbols</source>
- <translation type="unfinished"/>
+ <translation>Simbol Matematika</translation>
</message>
<message>
<source>Dashes and Slashes</source>
- <translation type="unfinished"/>
+ <translation>Garis Tengah dan Miring</translation>
</message>
<message>
<source>Excluded characters</source>
- <translation type="unfinished"/>
+ <translation>Karakter yang dikecualikan</translation>
</message>
<message>
<source>Hex Passwords</source>
- <translation type="unfinished"/>
+ <translation>Sandi Hex</translation>
</message>
<message>
<source>Password length</source>
- <translation type="unfinished"/>
+ <translation>Panjang sandi</translation>
</message>
<message>
<source>Word Case:</source>
@@ -5215,32 +5446,64 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Regenerate password</source>
- <translation type="unfinished"/>
+ <translation>Buat ulang sandi</translation>
</message>
<message>
<source>Copy password</source>
<translation>Salin sandi</translation>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
- <translation type="unfinished"/>
+ <translation>huruf kecil</translation>
</message>
<message>
<source>UPPER CASE</source>
- <translation type="unfinished"/>
+ <translation>HURUF BESAR</translation>
</message>
<message>
<source>Title Case</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation>Buat Sandi</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Juga pilih dari:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Karakter tambahan yang digunakan untuk membuat sandi</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Karakter tambahan</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Jumlah Kata:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Terapkan kata sandi</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Clear</source>
+ <translation>Bersihkan</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Buat ulang sandi (%1)</translation>
+ </message>
</context>
<context>
<name>QApplication</name>
@@ -5250,14 +5513,66 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Statistics</source>
- <translation type="unfinished"/>
+ <translation>Statistik</translation>
+ </message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Kata sandi sangat lemah</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Entropi sandi adalah %1 bit</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Kata sandi lemah</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Digunakan di %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Kata sandi sudah digunakan sebanyak %1 kali</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Kata sandi kedaluwarsa</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Sandi kedaluwarsa pada %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Kata sandi akan kedaluwarsa</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Kata sandi akan kedaluwarsa dalam %1 hari</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Kata sandi akan segera kedaluwarsa</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Kata sandi kedaluwarsa pada %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Pemeriksaan Kesehatan</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
</message>
</context>
<context>
<name>QMessageBox</name>
<message>
<source>Overwrite</source>
- <translation type="unfinished"/>
+ <translation>Timpa</translation>
</message>
<message>
<source>Delete</source>
@@ -5289,7 +5604,7 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Continue</source>
- <translation type="unfinished"/>
+ <translation>Lanjutkan</translation>
</message>
</context>
<context>
@@ -5304,7 +5619,7 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
</message>
<message>
<source>Client public key not received</source>
- <translation type="unfinished"/>
+ <translation>Kunci publik klien tidak diterima</translation>
</message>
<message>
<source>Cannot decrypt message</source>
@@ -5391,10 +5706,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<translation>Jalur entri yang akan ditambahkan.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Salin sandi entri ke papan klip.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Jalur entri yang akan di salin.</translation>
@@ -5439,7 +5750,7 @@ Please consider generating a new key file.</source>
<translation>PERINGATAN: Anda menggunakan format berkas kunci legacy
yang mungkin tidak akan lagi didukung di masa depan.
-Harap pertimbangkan membuat berkas kunci baru.</translation>
+Harap pertimbangkan untuk membuat berkas kunci baru.</translation>
</message>
<message>
<source>
@@ -5552,14 +5863,6 @@ Perintah yang tersedia:
<translation>Integrasi Peramban</translation>
</message>
<message>
- <source>Press</source>
- <translation>Tekan</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasif</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH Agent</translation>
</message>
@@ -5598,10 +5901,6 @@ Perintah yang tersedia:
<translation>Berhasil menambahkan entri %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Salin TOTP ke papan klip.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5613,17 +5912,9 @@ Perintah yang tersedia:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP entri telah disalin ke papan klip.</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Sandi entri telah disalin ke papan klip!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Menghapus entri papan klip dalam %1 detik...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5668,7 +5959,7 @@ Perintah yang tersedia:
</message>
<message>
<source>Log10 %1</source>
- <translation type="unfinished"/>
+ <translation>Log10 %1</translation>
</message>
<message>
<source>Multi-word extra bits %1</source>
@@ -5676,35 +5967,35 @@ Perintah yang tersedia:
</message>
<message>
<source>Type: Bruteforce</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Bruteforce</translation>
</message>
<message>
<source>Type: Dictionary</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Dictionary</translation>
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Dict+Leet</translation>
</message>
<message>
<source>Type: User Words</source>
- <translation type="unfinished"/>
+ <translation>Tipe: User Words</translation>
</message>
<message>
<source>Type: User+Leet</source>
- <translation type="unfinished"/>
+ <translation>Tipe: User+Leet</translation>
</message>
<message>
<source>Type: Repeated</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Repeated</translation>
</message>
<message>
<source>Type: Sequence</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Sequence</translation>
</message>
<message>
<source>Type: Spatial</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Spatial</translation>
</message>
<message>
<source>Type: Date</source>
@@ -5748,7 +6039,7 @@ Perintah yang tersedia:
</message>
<message>
<source>Type: Unknown%1</source>
- <translation type="unfinished"/>
+ <translation>Tipe: Tidak diketahui%1</translation>
</message>
<message>
<source>Entropy %1 (%2)</source>
@@ -5756,7 +6047,7 @@ Perintah yang tersedia:
</message>
<message>
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
+ <translation>*** Panjang kata sandi (%1) != jumlah panjang bagian (%2) ***</translation>
</message>
<message>
<source>Failed to load key file %1: %2</source>
@@ -5841,10 +6132,6 @@ Perintah yang tersedia:
<translation>Tidak ada program yang bisa digunakan untuk manipulasi papan klip</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Tidak bisa memulai program %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>berkas kosong</translation>
</message>
@@ -5853,18 +6140,6 @@ Perintah yang tersedia:
<translation>%1: (baris, kolom) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – direkomendasikan)</translation>
</message>
@@ -5908,7 +6183,7 @@ Perintah yang tersedia:
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation>Tidak ada kunci yang diatur. Membatalkan pembuatan basis data</translation>
+ <translation>Tidak ada kunci yang diatur. Membatalkan pembuatan basis data.</translation>
</message>
<message>
<source>Failed to save the database: %1.</source>
@@ -5984,15 +6259,15 @@ Perintah yang tersedia:
</message>
<message>
<source>Deactivate password key for the database.</source>
- <translation type="unfinished"/>
+ <translation>Nonaktifkan kunci kata sandi untuk basis data.</translation>
</message>
<message>
<source>Displays debugging information.</source>
- <translation type="unfinished"/>
+ <translation>Tampilkan informasi pengawakutuan.</translation>
</message>
<message>
<source>Deactivate password key for the database to merge from.</source>
- <translation type="unfinished"/>
+ <translation>Nonaktifkan kunci kata sandi untuk menggabungkan basis data.</translation>
</message>
<message>
<source>Version %1</source>
@@ -6012,11 +6287,11 @@ Perintah yang tersedia:
</message>
<message>
<source>Debugging mode is disabled.</source>
- <translation type="unfinished"/>
+ <translation>Mode debugging dinonaktifkan.</translation>
</message>
<message>
<source>Debugging mode is enabled.</source>
- <translation type="unfinished"/>
+ <translation>Mode debugging diaktifkan.</translation>
</message>
<message>
<source>Operating system: %1
@@ -6068,55 +6343,51 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Adds a new group to a database.</source>
- <translation type="unfinished"/>
+ <translation>Menambahkan grup baru ke basis data.</translation>
</message>
<message>
<source>Path of the group to add.</source>
- <translation type="unfinished"/>
+ <translation>Jalur dari grup yang ingin ditambahkan.</translation>
</message>
<message>
<source>Group %1 already exists!</source>
- <translation type="unfinished"/>
+ <translation>Grup %1 sudah ada!</translation>
</message>
<message>
<source>Group %1 not found.</source>
- <translation type="unfinished"/>
+ <translation>Grup %1 tidak ditemukan.</translation>
</message>
<message>
<source>Successfully added group %1.</source>
- <translation type="unfinished"/>
+ <translation>Berhasil menambahkan grup %1.</translation>
</message>
<message>
<source>Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords.</source>
- <translation type="unfinished"/>
+ <translation>Periksa apakah ada kata sandi yang dibocorkan secara publik. NAMABERKAS harus menjadi jalur dari daftar berkas kata sandi hash SHA-1 yang bocor dalam format HIBP, sebagaimana tersedia dari https://haveibeenpwned.com/Passwords.</translation>
</message>
<message>
<source>FILENAME</source>
- <translation type="unfinished"/>
+ <translation>NAMABERKAS</translation>
</message>
<message>
<source>Analyze passwords for weaknesses and problems.</source>
- <translation type="unfinished"/>
+ <translation>Menganalisa kata sandi untuk kelemahan dan masalah.</translation>
</message>
<message>
<source>Failed to open HIBP file %1: %2</source>
- <translation type="unfinished"/>
+ <translation>Gagal membuka berkas HIBP %1: %2</translation>
</message>
<message>
<source>Evaluating database entries against HIBP file, this will take a while...</source>
- <translation type="unfinished"/>
+ <translation>Mengevaluasi entri basis data terhadap berkas HIBP, ini akan memakan waktu cukup lama...</translation>
</message>
<message>
<source>Close the currently opened database.</source>
- <translation type="unfinished"/>
+ <translation>Tutup basis data yang saat ini dibuka.</translation>
</message>
<message>
<source>Display this help.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
+ <translation>Tampilkan bantuan ini.</translation>
</message>
<message>
<source>slot</source>
@@ -6128,47 +6399,43 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>The word list is too small (&lt; 1000 items)</source>
- <translation type="unfinished"/>
+ <translation>Daftar kata terlalu kecil (&lt;1000 item)</translation>
</message>
<message>
<source>Exit interactive mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
+ <translation>Keluar dari mode interaktif.</translation>
</message>
<message>
<source>Exports the content of a database to standard output in the specified format.</source>
- <translation type="unfinished"/>
+ <translation>Ekspor konten dari basis data ke keluaran standar dalam format yang ditentukan.</translation>
</message>
<message>
<source>Unable to export database to XML: %1</source>
- <translation type="unfinished"/>
+ <translation>Tidak bisa mengekspor basis data ke XML: %1</translation>
</message>
<message>
<source>Unsupported format %1</source>
- <translation type="unfinished"/>
+ <translation>Format tidak didukung %1</translation>
</message>
<message>
<source>Use numbers</source>
- <translation type="unfinished"/>
+ <translation>Gunakan angka</translation>
</message>
<message>
<source>Invalid password length %1</source>
- <translation type="unfinished"/>
+ <translation>Panjang sandi tidak valid %1</translation>
</message>
<message>
<source>Display command help.</source>
- <translation type="unfinished"/>
+ <translation>Tampilkan bantuan perintah.</translation>
</message>
<message>
<source>Available commands:</source>
- <translation type="unfinished"/>
+ <translation>Perintah yang tersedia:</translation>
</message>
<message>
<source>Import the contents of an XML database.</source>
- <translation type="unfinished"/>
+ <translation>Impor konten dari basis data XML.</translation>
</message>
<message>
<source>Path of the XML database export.</source>
@@ -6176,35 +6443,31 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Path of the new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
+ <translation>Jalur dari basis data baru.</translation>
</message>
<message>
<source>Successfully imported database.</source>
- <translation type="unfinished"/>
+ <translation>Berhasil mengimpor basis data.</translation>
</message>
<message>
<source>Unknown command %1</source>
- <translation type="unfinished"/>
+ <translation>Perintah tidak diketahui %1</translation>
</message>
<message>
<source>Flattens the output to single lines.</source>
- <translation type="unfinished"/>
+ <translation>Ratakan keluaran menjadi satu baris.</translation>
</message>
<message>
<source>Only print the changes detected by the merge operation.</source>
- <translation type="unfinished"/>
+ <translation>Hanya cetak perubahan yang terdeteksi oleh operasi gabungan.</translation>
</message>
<message>
<source>Yubikey slot for the second database.</source>
- <translation type="unfinished"/>
+ <translation>Slot Yubikey untuk basis data kedua.</translation>
</message>
<message>
<source>Successfully merged %1 into %2.</source>
- <translation type="unfinished"/>
+ <translation>Berhasil menggabungkan %1 ke %2.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
@@ -6212,51 +6475,51 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
- <translation type="unfinished"/>
+ <translation>Pindah entri ke grup baru</translation>
</message>
<message>
<source>Path of the entry to move.</source>
- <translation type="unfinished"/>
+ <translation>Jalur dari entri yang ingin dipindahkan</translation>
</message>
<message>
<source>Path of the destination group.</source>
- <translation type="unfinished"/>
+ <translation>Jalur dari destinasi grup.</translation>
</message>
<message>
<source>Could not find group with path %1.</source>
- <translation type="unfinished"/>
+ <translation>Tidak bisa menemukan grup dengan jalur %1.</translation>
</message>
<message>
<source>Entry is already in group %1.</source>
- <translation type="unfinished"/>
+ <translation>Entri sudah ada di dalam grup %1.</translation>
</message>
<message>
<source>Successfully moved entry %1 to group %2.</source>
- <translation type="unfinished"/>
+ <translation>Berhasil memindahkan entri %1 ke grup %2</translation>
</message>
<message>
<source>Open a database.</source>
- <translation type="unfinished"/>
+ <translation>Buka basis data.</translation>
</message>
<message>
<source>Path of the group to remove.</source>
- <translation type="unfinished"/>
+ <translation>Jalur dari grup yang ingin dihapus.</translation>
</message>
<message>
<source>Cannot remove root group from database.</source>
- <translation type="unfinished"/>
+ <translation>Tidak dapat menghapus grup root dari basis data.</translation>
</message>
<message>
<source>Successfully recycled group %1.</source>
- <translation type="unfinished"/>
+ <translation>Berhasil memulihkan grup %1.</translation>
</message>
<message>
<source>Successfully deleted group %1.</source>
- <translation type="unfinished"/>
+ <translation>Berhasil menghapus grup %1.</translation>
</message>
<message>
<source>Failed to open database file %1: not found</source>
- <translation type="unfinished"/>
+ <translation>Gagal membuka berkas basis data %1: tidak ditemukan</translation>
</message>
<message>
<source>Failed to open database file %1: not a plain file</source>
@@ -6264,52 +6527,231 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Failed to open database file %1: not readable</source>
- <translation type="unfinished"/>
+ <translation>Gagal membuka berkas basis data %1: tidak terbaca</translation>
</message>
<message>
<source>Enter password to unlock %1: </source>
- <translation type="unfinished"/>
+ <translation>Masukkan sandi untuk membuka %1:</translation>
</message>
<message>
<source>Invalid YubiKey slot %1</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
+ <source>Enter password to encrypt database (optional): </source>
+ <translation>Masukkan sandi untuk mengenkripsi basis data (opsional):</translation>
+ </message>
+ <message>
+ <source>HIBP file, line %1: parse error</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enter password to encrypt database (optional): </source>
+ <source>Secret Service Integration</source>
+ <translation>Integrasi Layanan Rahasia</translation>
+ </message>
+ <message>
+ <source>User name</source>
+ <translation>Nama pengguna</translation>
+ </message>
+ <message numerus="yes">
+ <source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
+ <translation><numerusform>Kata sandi untuk &apos;%1&apos; telah bocor %2 kali!</numerusform></translation>
+ </message>
+ <message>
+ <source>Invalid password generator after applying all options</source>
<translation type="unfinished"/>
</message>
<message>
- <source>HIBP file, line %1: parse error</source>
+ <source>Show the protected attributes in clear text.</source>
+ <translation>Tampilkan atribut yang dilindungi dalam teks yang jelas.</translation>
+ </message>
+ <message>
+ <source>Browser Plugin Failure</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Secret Service Integration</source>
+ <source>Could not save the native messaging script file for %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>User name</source>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
<translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Invalid password generator after applying all options</source>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>ERROR: Harap tentukan salah satu dari --attribute atau -totp, bukan keduanya.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Show the protected attributes in clear text.</source>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Atribut &quot;%1&quot; tidak ditemukan.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>waktu</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Atur berkas kunci untuk basis data.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Atur kata sandi untuk basis data.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Waktu dekripsi tidak valid %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Waktu dekripsi target harus antara %1 dan %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Gagal mengatur kata sandi basis data.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Format yang digunakan ketika mengekspor. Pilihan yang tersedia adalah &apos;xml&apos; atau &apos;csv&apos;. Standarnya adalah &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Tidak bisa mengimpor basis data XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Tampilkan informasi basis data.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID:</translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nama:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Deskripsi:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Sandi Cipher:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Keranjang sampah diaktifkan.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Keranjang sampah tidak diaktifkan.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Perintah tidak valid %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Serial YubiKey tidak valid %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Silakan sentuh tombol pada YubiKey anda untuk melanjutkan...</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Apakah anda ingin membuat basis data dengan kata sandi kosong? [y/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Ulangi kata sandi:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Error: kata sandi tidak sesuai.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 mili detik</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 detik</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6346,6 +6788,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Tampilkan juga entri yang telah dikecualikan dari laporan</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Buruk</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Buruk — kata sandi harus diubah</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Buruk</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Kurang baik — kata sandi harus diubah</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Lemah</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Lemah — pertimbangkan untuk mengubah kata sandi</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Dikecualikan)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Entri ini sedang dikecualikan dari laporan</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Harap tunggu, data kesehatan sedang dikalkulasi...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Selamat, semuanya sehat!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Judul</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Jalur</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Skor</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Alasan</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Sunting Entri...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Kecualikan dari laporan</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>PERHATIAN: Laporan ini membutuhkan pengiriman informasi ke layanan online Have I Been Pwned (https://haveibeenpwned.com). Jika Anda melanjutkan, kata sandi basis data Anda akan diacak secara kriptografis dan lima karakter pertama dari hash tersebut akan dikirim dengan aman ke layanan ini. Basis data Anda tetap aman dan tidak dapat dibangun kembali dari informasi ini. Namun, jumlah kata sandi yang Anda kirim dan alamat IP Anda akan terpapar ke layanan ini.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Lakukan Analisis Online</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Tampilkan juga entri yang telah dikecualikan dari laporan</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Versi KeePassXC ini tidak memiliki fungsi konektivitas jaringan. Konektivitas jaringan diperlukan untuk memeriksa kata sandi Anda terhadap basis data Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Judul</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Jalur</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Dikecualikan)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Entri ini sedang dikecualikan dari laporan</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>sekali</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>hingga 10 kali</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>hingga 100 kali</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>hingga 1000 kali</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>hingga 10,000 kali</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>hingga 100,000 kali</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>hingga 1 juta kali</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>jutaan kali</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Sunting Entri...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Kecualikan dari laporan</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nama</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Nilai</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Harap tunggu, statistik basis data sedang dikalkulasi...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nama basis data</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Deskripsi</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Lokasi</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Terakhir disimpan</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Berubahan belum disimpan</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>ya</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>tidak</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Basis data telah dimodifikasi, tetapi perubahan belum disimpan ke penyimpanan.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Jumlah grup</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Jumlah entri</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Jumlah entri yang kedaluwarsa</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Basis data berisi entri yang sudah kedaluwarsa.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Kata sandi unik</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Kata sandi tidak unik</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Lebih dari 10% kata sandi digunakan kembali. Gunakan kata sandi unik jika memungkinkan.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Beberapa kata sandi digunakan lebih dari tiga kali. Gunakan kata sandi unik jika memungkinkan.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Jumlah kata sandi singkat</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Panjang kata sandi minimum yang disarankan minimal 8 karakter.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Jumlah kata sandi yang lemah</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Panjang rata-rata kata sandi</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 karakter</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Panjang rata-rata kata sandi kurang dari sepuluh karakter. Kata sandi yang lebih panjang memberikan keamanan yang lebih.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6357,15 +7083,15 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
+ <translation>Tidak ada agen yang berjalan, tidak dapat menambahkan identitas.</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
+ <translation>Tidak ada agen yang berjalan, tidak dapat menghapus identitas.</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
+ <translation>Agen menolak identitas ini. Alasan yang mungkin meliputi:</translation>
</message>
<message>
<source>The key has already been added.</source>
@@ -6379,6 +7105,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6467,11 +7201,11 @@ Kernel: %3 %4</translation>
<name>SettingsWidgetFdoSecrets</name>
<message>
<source>Options</source>
- <translation type="unfinished"/>
+ <translation>Pilihan</translation>
</message>
<message>
<source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
- <translation type="unfinished"/>
+ <translation>Aktifkan KeepassXC Freedesktop.org Integrasi Layanan Rahasia</translation>
</message>
<message>
<source>General</source>
@@ -6486,69 +7220,33 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Grup</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
- <translation type="unfinished"/>
+ <translation>Otorisasi</translation>
</message>
<message>
<source>These applications are currently connected:</source>
- <translation type="unfinished"/>
+ <translation>Aplikasi ini sedang terhubung:</translation>
</message>
<message>
- <source>Application</source>
- <translation type="unfinished"/>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Jangan konfirmasi ketika entri dihapus oleh klien</translation>
</message>
<message>
- <source>Disconnect</source>
- <translation type="unfinished"/>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Error:&lt;/b&gt;Gagal terhubung ke DBus. Harap periksa pengaturan DBus anda.</translation>
</message>
<message>
- <source>Database settings</source>
- <translation>Pengaturan basis data</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Buka kunci basis data</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Peringatan:&lt;/b&gt;</translation>
</message>
<message>
- <source>Unlock database to show more information</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Lock database</source>
- <translation>Kunci basis data</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation>Nihil</translation>
- </message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
@@ -6675,15 +7373,15 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Allow KeeShare imports</source>
- <translation type="unfinished"/>
+ <translation>Izinkan impor KeeShare</translation>
</message>
<message>
<source>Allow KeeShare exports</source>
- <translation type="unfinished"/>
+ <translation>Izinkan ekspor KeeShare</translation>
</message>
<message>
<source>Only show warnings and errors</source>
- <translation type="unfinished"/>
+ <translation>Hanya tampilkan peringatan dan error</translation>
</message>
<message>
<source>Key</source>
@@ -6695,15 +7393,15 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Generate new certificate</source>
- <translation type="unfinished"/>
+ <translation>Hasilkan sertifikat baru</translation>
</message>
<message>
<source>Import existing certificate</source>
- <translation type="unfinished"/>
+ <translation>Impor sertifikat yang sudah ada</translation>
</message>
<message>
<source>Export own certificate</source>
- <translation type="unfinished"/>
+ <translation>Ekspor sertifikat pribadi</translation>
</message>
<message>
<source>Known shares</source>
@@ -6711,7 +7409,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Trust selected certificate</source>
- <translation type="unfinished"/>
+ <translation>Percayakan sertifikat terpilih</translation>
</message>
<message>
<source>Ask whether to trust the selected certificate every time</source>
@@ -6723,7 +7421,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Remove selected certificate</source>
- <translation type="unfinished"/>
+ <translation>Hapus sertifikat yang dipilih</translation>
</message>
</context>
<context>
@@ -6820,10 +7518,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6891,7 +7585,7 @@ Kernel: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>Kedaluwarsa dalam &lt;b&gt;%n&lt;/b&gt; detik</numerusform></translation>
</message>
</context>
<context>
@@ -6951,11 +7645,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Secret Key:</source>
- <translation type="unfinished"/>
+ <translation>Kunci Rahasia:</translation>
</message>
<message>
<source>Secret key must be in Base32 format</source>
- <translation type="unfinished"/>
+ <translation>Kunci rahasia harus dalam format Base32</translation>
</message>
<message>
<source>Secret key field</source>
@@ -6975,20 +7669,28 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Invalid TOTP Secret</source>
- <translation type="unfinished"/>
+ <translation>TOTP Secret tidak valid</translation>
</message>
<message>
<source>You have entered an invalid secret key. The key must be in Base32 format.
Example: JBSWY3DPEHPK3PXP</source>
- <translation type="unfinished"/>
+ <translation>Anda telah memasukkan kunci rahasia yang tidak valid. Kuncinya harus dalam format Base32.
+Contoh: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Confirm Remove TOTP Settings</source>
- <translation type="unfinished"/>
+ <translation>Konfirmasi Penghapusan Pengaturan TOTP</translation>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
- <translation type="unfinished"/>
+ <translation>Apakah anda yakin ingin menghapus pengaturan TOTP untuk entri ini?</translation>
+ </message>
+</context>
+<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL tidak valid</translation>
</message>
</context>
<context>
@@ -7046,7 +7748,7 @@ Example: JBSWY3DPEHPK3PXP</source>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Mulai menyimpan sandi Anda dengan aman di dalam basis data KeePassXC</translation>
+ <translation>Mulai menyimpan sandi anda dengan aman di dalam basis data KeePassXC</translation>
</message>
<message>
<source>Create new database</source>
@@ -7074,10 +7776,57 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Import from 1Password</source>
- <translation type="unfinished"/>
+ <translation>Impor dari 1Password</translation>
</message>
<message>
<source>Open a recent database</source>
+ <translation>Buka basis data terbaru</translation>
+ </message>
+</context>
+<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Tekan</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasif</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
<translation type="unfinished"/>
</message>
</context>
@@ -7089,27 +7838,35 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
+ <translation>YubiKey Challenge-Response</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;p&gt;Jika anda memiliki &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, anda dapat menggunakannya sebagai keamanan tambahan.&lt;/p&gt;&lt;p&gt;YubiKey membutuhkan salah satu slotnya untuk diprogram sebagai &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
+ <source>Refresh hardware tokens</source>
+ <translation>Segarkan token perangkat keras</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
+ <source>Hardware key slot selection</source>
+ <translation>Pemilihan slot kunci perangkat keras</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Mendeteksi kunci perangkat keras…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Tidak mendeteksi kunci perangkat keras</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_is_IS.ts b/share/translations/keepassx_is_IS.ts
deleted file mode 100644
index eba0192ad..000000000
--- a/share/translations/keepassx_is_IS.ts
+++ /dev/null
@@ -1,5423 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="is_IS" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation>Um KeePassXC</translation>
- </message>
- <message>
- <source>About</source>
- <translation>Um</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Debug Info</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Vista í minni</translation>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Libraries:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Virkja SSH miðil (krefst endurræsunar)</translation>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Gluggi</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Grúppa</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titill</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Notandanafn</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow</source>
- <translation>Leyfa</translation>
- </message>
- <message>
- <source>Deny</source>
- <translation>Neita</translation>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation>&amp;Vivaldi</translation>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encoding</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database description:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> MiB</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restore</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete all</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Presets</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Vista í minni</translation>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Grúppa</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download favicon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Uuid:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation>Titill</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Notandanafn</translation>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Grúppa</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titill</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Notandanafn</translation>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation>Notandanafn</translation>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation>Gluggi</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character Types</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Numbers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special Characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>0-9</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Grúppa</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titill</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Notandanafn</translation>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_it.ts b/share/translations/keepassx_it.ts
index b284aa6e6..1f64727f3 100644
--- a/share/translations/keepassx_it.ts
+++ b/share/translations/keepassx_it.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Abilita agente SSH (richiede un riavvio)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Usa OpenSSH per Windows al posto di Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Abilitare l&apos;integrazione dell&apos;agente SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>valore SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>sostituire SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(vuoto)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Nessun collegamento SSH disponibile. Verificare che la variabile d&apos;ambiente SSH_AUTH_SOCK esista oppure sovrascriverne il contenuto.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>La connessione dell&apos;agente SSH sta funzionando!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Sei sicuro di voler ripristinare tutte le impostazioni generali e di sicurezza predefinite?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monocromatico (chiaro)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monocromatico (scuro)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Colorato</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Gestione dei file</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Salvataggio sicuro dei file di database (potrebbe essere incompatibile con Dropbox, ecc)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Effettua una copia di sicurezza del database prima di salvarlo</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Salva automaticamente all&apos;uscita</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Non contrassegnare il database come modificato per modifiche non riguardanti i dati (ad es. espansione dei gruppi)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Ricarica automaticamente il database quando ci sono modifiche esterne</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Usa icona del gruppo alla creazione di una voce</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Nascondere il pannello di anteprima della voce</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Generale</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Nascondere la barra degli strumenti (icone)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimizzare invece di uscire dall&apos;app</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Visualizza un&apos;icona nell&apos;area di notifica di sistema</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Icona scura per l&apos;area di notifica di sistema</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Nascondi la finestra nell&apos;area di notifica di sistema quando viene minimizzata</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Chiedi sempre prima di effettuare il completamento automatico</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Scorciatoia globale per l&apos;auto-completamento</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Ritardo per la compilazione automatica</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Ritardo di avvio della compilazione automatica</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Barra degli strumenti spostabile</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Includi versioni beta durante il controllo della disponibilità di aggiornamenti</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Stile pulsante:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Lingua:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Stile pulsante della barra degli strumenti</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Utilizzare il tipo di carattere monospazio per le note</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Selezione della lingua</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Ripristina impostazioni predefinite</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Scorciatoia globale di tipo automatico</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Ritardo di avvio in millisecondi della digitazione automatica</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Avvia automaticamente KeePassXC all&apos;avvio del sistema</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Contrassegnare il database come modificato per modifiche non riguardanti i dati (ad es. espansione dei gruppi)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Salva in modo sicuro i file di database (disabilita se riscontra problemi con Dropbox, ecc.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Interfaccia utente</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Stile pulsanti della barra degli strumenti:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Utilizzare un tipo di carattere monospazio per le note</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Tipo di icona vassoio:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Ripristina impostazioni predefinite...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Ritardo di digitazione automatica:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Scorciatoia globale per l&apos;auto-completamento</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Ritardo avvio auto-completamento:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Blocca nuovamente un database precedentemente bloccato dopo aver completato l&apos;Auto-Type</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Non richiedere di ripetere la password quando è visibile</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Non nascondere le password quando vengono modificate</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Non usare segnaposti per campi password vuoti</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Nascondi la password nel pannello di anteprima della voce</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Cancella query di ricerca dopo</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Richiedi ripetizione password quando è visibile</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Nascondi la password quando viene modificata</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation> Usa segnaposti per campi password vuoti</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser confermare l&apos;accesso</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Browser accesso richiesto</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Ricorda questa scelta</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 sta chiedendo l&apos;accesso alle seguenti voci:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Consenti</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Ricorda le impostazioni di accesso per le voci selezionate</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Nega</translation>
+ <source>Remember</source>
+ <translation>Ricorda </translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 ha richiesto accesso alle password per il seguente elemento/i.
-Seleziona se vuoi consentire l&apos;accesso.</translation>
+ <source>Allow access to entries</source>
+ <translation>Permetti di accedere alle voci</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Consenti accesso</translation>
+ <source>Allow Selected</source>
+ <translation>Consenti selezionati</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Nega accesso</translation>
+ <source>Deny All</source>
+ <translation>Nega tutto</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Disabilita per questo sito</translation>
</message>
</context>
<context>
@@ -579,199 +609,260 @@ Selezionare il database corretto dove salvare le credenziali</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Finestra</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: nuova richiesta di associazione chiave</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Questo è necessario per accedere al tuo database con KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Salva e permetti l&apos;accesso</translation>
</message>
<message>
- <source>General</source>
- <translation>Generale</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Vuoi sovrascrivere la chiave esistente?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Abilita l&apos;integrazione per i seguenti browser:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Esiste già una chiave crittografica condivisa con il nome &quot;%1&quot;- Vuoi sovrascriverla?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: aggiorna voce</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Vuoi aggiornare le informazioni in %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Interrompi</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Conversione di attributi in dati personalizzati in corso...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Visualizza una &amp;notifica quando sono richieste le credenziali</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: attributi KeePassHTTP convertiti</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Ri&amp;chiedi di sbloccare il database se bloccato</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Attributi convertiti correttamente da %1 voce(i).
+Sono stati spostati %2 chiavi nei dati personalizzati.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Sono stati spostati %n chiavi in dati personalizzati.</numerusform><numerusform>Sono state spostate %n chiavi in dati personalizzati.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Vengono restituiti solo voci con lo stesso schema (http://, https://, ...)</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nessuna voce trovata con gli attributi KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Schema di corrispondenza URL (ad esempio, https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Il database attivo non contiene una voce con attributi KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Restituisci solo le corrispondenze migliori per un&apos;URL specifica invece di tutte le voci per l&apos;intero dominio.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: rilevate le impostazioni di integrazione del browser legacy</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Restituisci solo le credenziali che corrispondono maggiormente</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Creare un nuovo gruppo</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordina le credenziali &amp;corrispondenti per titolo</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>È stata ricevuta una richiesta di creazione di un nuovo gruppo &quot;%1&quot;.
+Si desidera creare questo gruppo?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordina le credenziali corrispondenti per nome &amp;utente</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Le impostazioni di KeePassXC-Browser devono essere spostate nelle impostazioni del database.
+Ciò è necessario per mantenere le connessioni del browser corrente.
+Si desidera eseguire ora la migrazione delle impostazioni esistenti?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avanzate</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Non mostrare nuovamente questo avviso</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Non &amp;chiedere conferma prima di accedere alle credenziali</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Hai ricevuto una richiesta di associazione per il segguente database:
+%1
+
+Assegnagli un nome univoco o un ID, per esempio:
+laptop-chrome</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Non &amp;chiedere conferma prima di &amp;aggiornare le credenziali</translation>
+ <source>Dialog</source>
+ <translation>Finestra</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Cerca le credenziali corrispondenti in tutti i database aperti</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Questo è necessario per accedere al tuo database con KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>La creazione o l&apos;aggiornamento automatico dei campi stringa non è supportato.</translation>
+ <source>Enable browser integration</source>
+ <translation>Abilitare l&apos;integrazione del browser</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Seleziona i campi stringa avanzati che iniziano con &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Generale</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Aggiorna automaticamente all&apos;avvio il percorso dei binari di KeePassXC o keepassxc-proxy per gli script di messaggistica nativa</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>I browser installati come snap non sono attualmente supportati.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Aggiorna all&apos;avvio i file di manifest della messaggeria &amp;nativa</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Abilita l&apos;integrazione per i seguenti browser:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Supporta un&apos;applicazione proxy tra KeePassXC e l&apos;estensione del browser</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Utilizza un&apos;applicazione &amp;proxy tra KeePassXC e l&apos;estensione del browser</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Usa un indirizzo proxy personalizzato se hai installato manualmente un proxy</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Utilizzare una posizione &amp;personalizzata per il proxy</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Sfoglia...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Avviso:&lt;/b&gt; le seguenti opzioni possono essere pericolose.</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Selezionare una posizione personalizzata per il proxy</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Mostra una notifica quando le credenziali sono richieste</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>File eseguibili</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Richiedi di sbloccare il database se è bloccato</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Tutti i file</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Vengono restituiti solo voci con lo stesso schema (http://, https://, ...)</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Non chiedere l&apos;autorizzazione per l&apos;autenticazione HTTP e basic</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Schema di corrispondenza URL (ad esempio, https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>A causa del sandboxing di Snap, è necessario eseguire uno script per abilitare l&apos;integrazione del browser. &lt;br /&gt;È possibile ottenere questo script da %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Restituisci solo le corrispondenze migliori per un&apos;URL specifica invece di tutte le voci per l&apos;intero dominio.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Si prega di consultare le istruzioni speciali per l&apos;uso dell&apos;estensione del browser di seguito</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Restituisci solo le credenziali che corrispondono maggiormente</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser è necessario per far funzionare l&apos;integrazione del browser. &lt;br /&gt;Scaricarlo per %1 e %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Restituisce le credenziali scadute. La stringa [scaduto] viene aggiunta al titolo.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Restituisci le credenziali scadute</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Restituisce le credenziali scadute. La stringa [scaduto] viene aggiunta al titolo.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Tutti i database connessi all&apos;estensione restituiranno le credenziali corrispondenti.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Consenti la restituzione delle credenziali scadute.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Cerca le credenziali corrispondenti in tutti i database aperti</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Abilitare l&apos;integrazione del browser</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordina le credenziali corrispondenti per titolo</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>I browser installati come snap non sono attualmente supportati.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordina le credenziali corrispondenti per nome utente</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Tutti i database connessi all&apos;estensione restituiranno le credenziali corrispondenti.</translation>
+ <source>Advanced</source>
+ <translation>Avanzate</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Non chiedere conferma prima di accedere alle credenziali</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Non chiedere conferma prima di aggiornare le credenziali</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Non chiedere l&apos;autorizzazione per l&apos;autenticazione HTTP e basic</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>La creazione o l&apos;aggiornamento automatico dei campi stringa non è supportato.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Restituisci campi di stringa avanzati che iniziano per &quot;KPH:&quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Non visualizzare il popup che suggerisce la migrazione delle impostazioni KeePassHTTP legacy.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Non richiedere la migrazione delle impostazioni KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Non richiedere la migrazione delle impostazioni KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Aggiorna automaticamente all&apos;avvio il percorso dei binari di KeePassXC o keepassxc-proxy per gli script di messaggistica nativa</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Aggiorna all&apos;avvio il manifesto della messaggeria nativa</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Usa un indirizzo proxy personalizzato se hai installato manualmente un proxy</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Utilizza un proxy personalizzato</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,106 +873,81 @@ Selezionare il database corretto dove salvare le credenziali</translation>
<translation>Browser per file proxy personalizzato</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Avvertenza&lt;/b&gt;, l&apos;applicazione keepassxc-proxy non è stata trovata!&lt;br /&gt;Si prega di controllare la directory di installazione di KeePassXC o confermare il percorso personalizzato nelle opzioni avanzate.&lt;br /&gt;L&apos;integrazione del browser NON funzionerà senza l&apos;applicazione proxy.&lt;br /&gt;Percorso previsto: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Sfoglia...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: nuova richiesta di associazione chiave</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Usare un percorso personalizzato per la configurazione del browser:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Salva e permetti l&apos;accesso</translation>
+ <source>Browser type:</source>
+ <translation>Tipologia di browser:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Vuoi sovrascrivere la chiave esistente?</translation>
+ <source>Toolbar button style</source>
+ <translation>Stile pulsante della barra degli strumenti</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Esiste già una chiave crittografica condivisa con il nome &quot;%1&quot;- Vuoi sovrascriverla?</translation>
+ <source>Config Location:</source>
+ <translation>Percorso di configurazione:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: aggiorna voce</translation>
+ <source>Custom browser location field</source>
+ <translation>Campo percorso browser personalizzato</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Vuoi aggiornare le informazioni in %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Interrompi</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Cerca un percorso personalizzato per il browser </translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Conversione di attributi in dati personalizzati in corso...</translation>
+ <source>Custom extension ID:</source>
+ <translation>ID estensione personalizzata:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: attributi KeePassHTTP convertiti</translation>
+ <source>Custom extension ID</source>
+ <translation>ID estensione personalizzata</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Attributi convertiti correttamente da %1 voce(i).
-Sono stati spostati %2 chiavi nei dati personalizzati.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Sono stati spostati %n chiavi in dati personalizzati.</numerusform><numerusform>Sono state spostate %n chiavi nei dati personalizzati.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>A causa del sandboxing di Snap, è necessario eseguire uno script per abilitare l&apos;integrazione del browser. &lt;br /&gt;È possibile ottenere questo script da %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nessuna voce trovata con gli attributi KeePassHTTP!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser è necessario per far funzionare l&apos;integrazione del browser. &lt;br /&gt;Scaricarlo per %1, %2 e %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Il database attivo non contiene una voce con attributi KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Si prega di consultare le istruzioni speciali per l&apos;uso dell&apos;estensione del browser di seguito</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: rilevate le impostazioni di integrazione del browser legacy</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Errore:&lt;/b&gt; Il percorso personalizzato per il proxy non può essere trovato!&lt;br/&gt;L&apos;estensione del browser NON PUO&apos; LAVORARE senza l&apos;utilizzo di un proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Creare un nuovo gruppo</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Avviso:&lt;/b&gt; le seguenti opzioni possono essere pericolose.</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>È stata ricevuta una richiesta di creazione di un nuovo gruppo &quot;%1&quot;.
-Si desidera creare questo gruppo?
-</translation>
+ <source>Executable Files</source>
+ <translation>File eseguibili</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Le impostazioni di KeePassXC-Browser devono essere spostate nelle impostazioni del database.
-Ciò è necessario per mantenere le connessioni del browser corrente.
-Si desidera eseguire ora la migrazione delle impostazioni esistenti?</translation>
+ <source>All Files</source>
+ <translation>Tutti i file</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Non mostrare nuovamente questo avviso</translation>
+ <source>Select custom proxy location</source>
+ <translation>Selezionare una posizione personalizzata per il proxy</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Hai ricevuto una richiesta di associazione per il segguente database:
-%1
-
-Assegnagli un nome univoco o un ID, per esempio:
-laptop-chrome</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Selezionare il percorso per la cartella principale della messaggistica</translation>
</message>
</context>
<context>
@@ -938,10 +1004,6 @@ laptop-chrome</translation>
<translation>I commenti iniziano con</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Il primo record contiene i nomi dei campi</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Considera &apos;\&apos; un carattere escape</translation>
</message>
@@ -950,14 +1012,6 @@ laptop-chrome</translation>
<translation>Anteprima</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Disposizione colonne</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Non presente nel file CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importati da file CSV</translation>
</message>
@@ -970,20 +1024,12 @@ laptop-chrome</translation>
<translation>Errore</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nome di campo vuoto %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>colonna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Errore(i) rilevati nel file CSV!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n più messaggi ignorati]</numerusform><numerusform>[%n più messaggi ignorati]</numerusform></translation>
+ <translation><numerusform>[%n altro messaggio saltato]</numerusform><numerusform>[altri %n messaggi saltati]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1007,12 +1053,64 @@ laptop-chrome</translation>
<source>CSV import preview</source>
<translation>Anteprima importazione CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Associazione colonne</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Ultima modifica</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Password</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creazione</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Note</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titolo</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppo</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nome utente</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Righe di intestazione ignorate</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>La prima riga ha nomi di campo</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Non presente</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Colonna %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n colonne</numerusform><numerusform>%n colonne</numerusform></translation>
+ <translation><numerusform>%n colonna</numerusform><numerusform>%n colonne</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1021,21 +1119,16 @@ laptop-chrome</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n byte</numerusform><numerusform>%n byte</numerusform></translation>
+ <translation><numerusform>%n byte (s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n righe</numerusform><numerusform>%n righe</numerusform></translation>
+ <translation><numerusform>righe: %n</numerusform><numerusform>%n riga(e)</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Radice</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>File %1 non esiste.</translation>
</message>
@@ -1077,6 +1170,19 @@ Database di backup che si trova in %2</translation>
<source>Recycle Bin</source>
<translation>Cestino</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Password</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Salvataggio del database già avviato</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Impossibile salvare, il database non è stato inizializzato!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1130,10 +1236,6 @@ Considera l&apos;opzione di generarne uno nuovo</translation>
<translation>Impossibile aprire il file di chiave: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Seleziona slot...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Sblocca il database KeePassXC</translation>
</message>
@@ -1143,15 +1245,7 @@ Considera l&apos;opzione di generarne uno nuovo</translation>
</message>
<message>
<source>Password field</source>
- <translation>Campo Password</translation>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation>Attiva/disattiva la visibilità della password</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Selezione del file di chiave</translation>
+ <translation>Campo password</translation>
</message>
<message>
<source>Hardware key slot selection</source>
@@ -1159,7 +1253,7 @@ Considera l&apos;opzione di generarne uno nuovo</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation>Cercare il file di chiave</translation>
+ <translation>Cercare il file chiave</translation>
</message>
<message>
<source>Browse...</source>
@@ -1218,10 +1312,6 @@ Per evitare che questo errore venga visualizzato, è necessario andare alle &quo
&lt;p&gt;Clicca per ulteriori informazioni...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Oltre alla tua password principale, puoi usare un file segreto per aumentare la sicurezza del tuo database. Un file di questo genere può essere generato nelle impostazioni di sicurezza del tuo database.&lt;/p&gt;&lt;p&gt;Questo &lt;strong&gt;non è&lt;/strong&gt; il tuo file database *.kdbx! &lt;br&gt;Se non hai un file chiave, lascia vuoto questo campo.&lt;/p&gt; &lt;p&gt;Clicca per ulteriori informazioni...&lt;/p&gt; </translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Aiuto relativo al file chiave</translation>
</message>
@@ -1230,10 +1320,6 @@ Per evitare che questo errore venga visualizzato, è necessario andare alle &quo
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Seleziona il file chiave...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Impossibile usare il file database come file chiave</translation>
</message>
@@ -1243,6 +1329,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Non puoi usare il tuo file database come file chiave.
Se non possiedi un file chiave, lascia vuoto questo campo.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Oltre a una password, è possibile utilizzare un file segreto per migliorare la sicurezza del database. Questo file può essere generato nelle impostazioni di sicurezza del database.&lt;/p&gt;&lt;p&gt;Questo &lt;strong&gt;non&lt;/strong&gt; è il tuo file *.kdbx!&lt;br&gt;Se non si dispone di un file chiave, lasciare vuoto questo campo.&lt;/p&gt;&lt;p&gt;Clicca per maggiori informazioni...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>File chiave per sbloccare il database</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Premi il pulsante della YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Rilevamento delle chiavi hardware in corso...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nessuna chiave hardware rilevata</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Seleziona chiave hardware...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1266,10 +1376,6 @@ Se non possiedi un file chiave, lascia vuoto questo campo.</translation>
<translation>Sicurezza</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Chiave principale</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Impostazioni di crittografia</translation>
</message>
@@ -1277,6 +1383,10 @@ Se non possiedi un file chiave, lascia vuoto questo campo.</translation>
<source>Browser Integration</source>
<translation>Integrazione con i browser</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Credenziali database</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1285,18 +1395,6 @@ Se non possiedi un file chiave, lascia vuoto questo campo.</translation>
<translation>Impostazioni di KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Disconnetti tutti i browser</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Dimenti&amp;ca tutte le impostazioni specifiche del sito sulle voci</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Spostare gli attributi KeePassHTTP in KeePassXC-Browser &amp;personalizzato</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Chiavi memorizzate</translation>
</message>
@@ -1350,7 +1448,7 @@ Ciò potrebbe impedire la connessione al plug-in del browser.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Le %n chiavi di crittografia sono state rimosse correttamente dalle impostazioni KeePassXC.</numerusform><numerusform>Le %n chiavi di crittografia sono state rimosse correttamente dalle impostazioni KeePassXC.</numerusform></translation>
+ <translation><numerusform> Rimossa con successo %n chiave di cifratura dalle impostazioni di KeePassXC. </numerusform><numerusform> Rimosse con successo %n chiavi di cifratura dalle impostazioni di KeePassXC. </numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1376,7 +1474,7 @@ Le autorizzazioni per accedere alle voci verranno revocate.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Le autorizzazioni sono state rimosse correttamente da %n voci.</numerusform><numerusform>Le autorizzazioni sono state rimosse correttamente da %n voci.</numerusform></translation>
+ <translation><numerusform>Permessi rimossi con successo da %n voce.</numerusform><numerusform>Permessi rimossi con successo da %n voci.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1404,6 +1502,67 @@ Questo è necessario per mantenere la compatibilità con il plugin del browser.<
<source>Remove selected key</source>
<translation>Rimuovere la chiave selezionata</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Spostare gli attributi KeePassHTTP ai dati personalizzati di KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Aggiornare l&apos;ID gruppo radice del database</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creazione</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Aggiorna ID database</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Si vuole davvero aggiornare l&apos;ID del database?
+Questo è necessario solo se il database è una copia e l&apos;estensione del browser non riesce a connettersi. </translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Aggiungere ulteriore protezione...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nessuna password impostata</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>ATTENZIONE! Non è stata impostata una password. Utilizzare un database senza password è fortemente sconsigliato!
+
+Siete sicuri di voler continuare senza password?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continua senza password</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nessuna chiave di crittografia aggiunta</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Bisogna aggiungere almeno un&apos;altra chiave di cifratura per rendere sicuro il database.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Errore sconosciuto</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Impossibile modificare le credenziali del database</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1428,10 +1587,6 @@ Questo è necessario per mantenere la compatibilità con il plugin del browser.<
<translation>Arrotondamenti trasformazione:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Ritardo di 1 secondo di benchmark</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Uso della memoria:</translation>
</message>
@@ -1452,14 +1607,6 @@ Questo è necessario per mantenere la compatibilità con il plugin del browser.<
<translation>Modifica</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>I valori più elevati offrono una maggiore protezione, ma l&apos;apertura del database richiederà più tempo.</translation>
</message>
@@ -1529,22 +1676,12 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>Mib</numerusform><numerusform>Mib</numerusform></translation>
+ <translation><numerusform> MiB</numerusform><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>thread/i</numerusform><numerusform>thread</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform> iscritto (i)</numerusform><numerusform>thread(s)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1578,6 +1715,14 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f
<source>Parallelism</source>
<translation>Parallelismo</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1586,16 +1731,16 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f
<translation>Voci esposte</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Non e&amp;sporre questo database</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Non esporre questo database</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Esporre le voci &amp;sotto questo gruppo:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Esporre le voci in questo gruppo:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Abilitare fd.o dei servizi segreti per accedere a queste impostazioni.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Consentire ai Servizi Segreti di accedere a queste impostazioni.</translation>
</message>
</context>
<context>
@@ -1630,7 +1775,7 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation> MB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1641,10 +1786,6 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f
<translation>Ulteriori impostazioni del database</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Abilita &amp;compressione (consigliata)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Campo nome database</translation>
</message>
@@ -1678,6 +1819,10 @@ Questa azione non è reversibile.</translation>
<source> (old)</source>
<translation>(vecchio)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Abilita compressione (consigliato)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1712,45 +1857,6 @@ Questa azione non è reversibile.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Aggiungere ulteriore protezione...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nessuna chiave di crittografia aggiunta</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Bisogna aggiungere almeno un&apos;altra chiave di cifratura per rendere sicuro il database.</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Nessuna password impostata</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>ATTENZIONE! Non è stata impostata una password. Utilizzare un database senza password è fortemente sconsigliato!
-
-Siete sicuri di voler continuare senza password?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Errore sconosciuto</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Modifica della chiave master fallita</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continua senza password</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1770,125 +1876,6 @@ Siete sicuri di voler continuare senza password?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>statistiche</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Passare il mouse sulle righe con icone di errore per ulteriori informazioni.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valore</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nome del database</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>descrizione</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Posizione</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Ultimo salvataggio</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Modifiche non salvate</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>sì</translation>
- </message>
- <message>
- <source>no</source>
- <translation>No</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Il database è stato modificato, ma le modifiche non sono ancora state salvate su disco.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Numero di gruppi</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Numero di voci</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Numero di voci scadute</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Il database contiene voci scadute.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Password univoche</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Password non univoche</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Più del 10% delle password vengono riutilizzate. Utilizzare password univoche quando possibile.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Massimo riutilizzo della password</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Alcune password vengono utilizzate più di tre volte. Utilizzare password univoche quando possibile.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Numero di password brevi</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>La lunghezza minima consigliata per la password è di almeno 8 caratteri.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Numero di password deboli</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Consiglia di utilizzare password lunghe e randomizzate con una valutazione &quot;buona&quot; o &quot;eccellente&quot;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Lunghezza media password</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caratteri</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>La lunghezza media della password è inferiore a dieci caratteri. Le password più lunghe offrono maggiore sicurezza.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Attendere, calcolo statistiche del database...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1983,6 +1970,10 @@ Questo è sicuramente un bug, si prega di segnalarlo agli sviluppatori.</transla
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Si sta per esportare il database in un file non crittografato. Questo lascerà le password e le informazioni sensibili vulnerabili! Sei sicuro di voler continuare?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Apri OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2000,7 +1991,7 @@ Questo è sicuramente un bug, si prega di segnalarlo agli sviluppatori.</transla
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Vuoi davvero spostare %n voci nel cestino?</numerusform><numerusform>Vuoi davvero spostare %n voci nel cestino?</numerusform></translation>
+ <translation><numerusform>Vuoi veramente cestinare %n voce?</numerusform><numerusform>Vuoi veramente cestinare %n voci?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2062,15 +2053,15 @@ Vuoi fondere i cambiamenti?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Vuoi davvero eliminare %n voci per sempre?</numerusform><numerusform>Vuoi davvero eliminare %n voci per sempre?</numerusform></translation>
+ <translation><numerusform>Vuoi davvero eliminare %n voci per sempre?</numerusform><numerusform>Vuoi davvero eliminare %n voce(i) per sempre?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Eliminare le voci?</numerusform><numerusform>Eliminare le voci?</numerusform></translation>
+ <translation><numerusform>Elimina ha?</numerusform><numerusform>Cancellare la voce(i)?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Spostare le voci nel cestino?</numerusform><numerusform>Spostare le voci nel cestino?</numerusform></translation>
+ <translation><numerusform>Spostare la creazione nel cestino?</numerusform><numerusform>Spostare la voce(i) nel cestino?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2164,6 +2155,14 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Questo database viene aperto in modalità di sola lettura. Il salvataggio automatico è disabilitato.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Salva il backup del database </translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Impossibile trovare il file di database: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2208,14 +2207,6 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Seleziona chiave privata</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>File troppo grande per essere una chiave privata</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Impossibile aprire la chiave privata</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Cronologia voce</translation>
</message>
@@ -2228,10 +2219,6 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Modifica voce</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Sono state inserite password differenti.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nuovo attributo</translation>
</message>
@@ -2245,39 +2232,23 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>%n settimana/e</numerusform><numerusform>%n settimana/e</numerusform></translation>
+ <translation><numerusform>%n settimana</numerusform><numerusform>%n settimane</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n mese/i</numerusform><numerusform>%n mese/i</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Applicare la password generata?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Desideri applicare la password generata a questa voce?</translation>
+ <translation><numerusform>%n mese</numerusform><numerusform>%n mesi</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Voce aggiornata correttamente.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>La voce contiene modifiche non salvate</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Nuovo attributo %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTETTO] Seleziona &apos;Rivela&apos; per visualizzare o modificare</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation><numerusform>%n anno/i</numerusform><numerusform>%n anno/i</numerusform></translation>
+ <translation><numerusform>anno (i) %n</numerusform><numerusform>%n anno(i)</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
@@ -2295,6 +2266,26 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Sei sicuro di voler rimuovere questo URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Rivela</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Nascondi</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Modifiche non salvate</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Salvare le modifiche a questa voce?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[PROTETTO] Premere Mostra per visualizzare o modificare</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2370,6 +2361,14 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<source>Background color selection</source>
<translation>Selezione del colore di sfondo</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se abilitata, questa voce non apparirà nei rapporti di integrità e HIBP anche se non soddisfa le condizioni richieste(es. entropia della password o riutilizzo). È possibile includere la password se essa si trova al di là del vostro controllo (es. se è necessario inserire un PIN a quattro cifre) per evitare che essa vada a ingombrare i rapporti.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Escludere dal rapporto del database</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2378,14 +2377,6 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Abilita completamento automatico per questa voce</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Eredita la sequenza per il completamento automatico dal &amp;gruppo</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Usa sequenza di completamento automatico personalizzata:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Associazioni finestra</translation>
</message>
@@ -2441,6 +2432,14 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Sequenza di tipo automatico personalizzata per questa finestra</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Eredita la sequenza predefinita di Auto-Type dal gruppo</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Usa sequenza personalizzata di Auto-Type:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2476,6 +2475,14 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<source>Edit</source>
<translation>Modifica</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Manda queste impostazioni al browser solo solo per l&apos;autenticazione HTTP. Se abilitata, la pagina di login non mostrerà questa voce disponibile per la selezione.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Utilizza questa voce solo con l&apos;autenticazione HTTP Basic </translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2527,18 +2534,10 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Password:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Ripeti:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titolo:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Note</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Preimpostazioni</translation>
</message>
@@ -2551,10 +2550,6 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Nome utente:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Scade</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Campo Url</translation>
</message>
@@ -2563,22 +2558,10 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Scarica favicon per URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Campo ripeti password</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Attiva/disattiva generatore di password</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo password</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Attiva/disattiva la visibilità della password</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Attiva/disattiva visibilità delle note</translation>
</message>
@@ -2610,6 +2593,18 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<source>Toggle expiration</source>
<translation>Attiva/disattiva scadenza</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Note:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Scade:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2745,10 +2740,6 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Modulo</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipo:</translation>
</message>
@@ -2757,10 +2748,6 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
<translation>Percorso:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Password:</translation>
</message>
@@ -2798,7 +2785,7 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
</message>
<message>
<source>Export</source>
- <translation>Esportare</translation>
+ <translation>Esporta</translation>
</message>
<message>
<source>Synchronize</source>
@@ -2844,57 +2831,25 @@ Le estensioni supportate sono: %1.</translation>
<translation>Campo percorso per condividere il file</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Ricerca del file di condivisione</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo password</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Attiva/disattiva la visibilità della password</translation>
+ <source>Clear fields</source>
+ <translation>Cancellare i campi</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Attiva/disattiva generatore di password</translation>
+ <source>Browse for share file</source>
+ <translation>Cerca file per condivisione</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Cancellare i campi</translation>
+ <source>Browse...</source>
+ <translation>Sfoglia...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Note</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Scade</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Cerca</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Completamento automatico</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Usa la sequenza di completamento automatico predefinita del gruppo genitore</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Imposta se&amp;quenza predefinita di completamento automatico</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Campo nome</translation>
</message>
@@ -2922,18 +2877,38 @@ Le estensioni supportate sono: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Campo di sequenza di tipo automatico predefinito</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Usa icona predefinita</translation>
+ <source>Expires:</source>
+ <translation>Scade:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Usa la sequenza di completamento automatico predefinita del gruppo genitore</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Digitazione automatica:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Ricerca:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Note:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Usa &amp;icona personalizzata</translation>
+ <source>Name:</source>
+ <translation>Nome:</translation>
</message>
<message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Impostare la sequenza di tipo automatico predefinita</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Aggiungi icona personalizzata</translation>
</message>
@@ -2967,7 +2942,7 @@ Le estensioni supportate sono: %1.</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Caricamento riuscito %1 dell&apos;icona/ia/e %n</numerusform><numerusform>Caricamento riuscito di %1 di %n icone</numerusform></translation>
+ <translation><numerusform>Caricate con successo %1 di %n icona.</numerusform><numerusform>Caricate con successo %1 di %n icone.</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2975,15 +2950,15 @@ Le estensioni supportate sono: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n icona/e già esistente nel database</numerusform><numerusform>%n icona/e già esistente nel database</numerusform></translation>
+ <translation><numerusform>%n icona esiste già nel database</numerusform><numerusform>%n icone esistono già nel database</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>Le seguenti icone non sono riuscite:</numerusform><numerusform>Le seguenti icone non sono riuscite:</numerusform></translation>
+ <translation><numerusform>La seguente icona presenta degli errori:</numerusform><numerusform>Le seguenti icone presentano degli errori:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Questa icona viene utilizzata da %n voci e verrà sostituita dall&apos;icona predefinita. Sei sicuro di volerlo eliminare?</numerusform><numerusform>Questa icona viene utilizzata da %n voci e verrà sostituita dall&apos;icona predefinita. Sei sicuro di volerla eliminare?</numerusform></translation>
+ <translation><numerusform>Questa icona viene utilizzata da %n voci e verrà sostituita dall&apos;icona predefinita. Sei sicuro di volerlo eliminare?</numerusform><numerusform>Questa icona viene utilizzata da %n voce(i) e verrà sostituita dall&apos;icona predefinita. Sei sicuro di volerla eliminare?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2998,14 +2973,6 @@ Le estensioni supportate sono: %1.</translation>
<translation>Applicare l&apos;icona selezionata a sottogruppi e voci</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Applicare icona &amp;a ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Applica solo a questo</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Applica anche ai gruppi figli</translation>
</message>
@@ -3021,6 +2988,22 @@ Le estensioni supportate sono: %1.</translation>
<source>Existing icon selected.</source>
<translation>Icona esistente selezionata.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Usa icona predefinita</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Usa icona personalizzata</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Applicare l&apos;icona a...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Applica solo a questo gruppo</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3137,7 +3120,7 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Sei sicuro di voler rimuovere %n allegati?</numerusform><numerusform>Sei sicuro di voler rimuovere %n allegati?</numerusform></translation>
+ <translation><numerusform>Sei sicuro di voler rimuovere %n allegato?</numerusform><numerusform>Sei sicuro di voler rimuovere %n allegati?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3182,7 +3165,7 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Impossibile aprire i file:
+ <translation><numerusform>Impossibile aprire il file:
%1</numerusform><numerusform>Impossibile aprire i file:
%1</numerusform></translation>
</message>
@@ -3206,6 +3189,20 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
<source>Save selected attachment to disk</source>
<translation>Salva l&apos;allegato selezionato su disco</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 Ha dimensioni elevate (%2 MB).
+Il database potrebbe occupare più spazio e ridurre le sue performance.
+
+Siete sicuri di voler aggiungere questo file?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Conferma l&apos;allegato </translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3289,12 +3286,52 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
<translation>Allegati</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Sì</translation>
+ <source>Size</source>
+ <translation>Dimensione</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nome del gruppo</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Titolo della voce</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Note della voce</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>La voce scade il</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Data di creazione</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Ultima modifica</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Ultimo accesso</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Allegati</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Dimensioni della voce</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Ha allegati</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Ha una password monouso TOTP</translation>
</message>
</context>
<context>
@@ -3394,6 +3431,13 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL non corretto</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3420,8 +3464,14 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
<translation>Ripristina valori predefiniti</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Allegati (icona)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Ha allegati</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Ha TOTP</translation>
</message>
</context>
<context>
@@ -3433,21 +3483,74 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Impossibile registrare il servizio DBus in %1: è in esecuzione un altro servizio segreto.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n Voci utilizzate da %1</numerusform><numerusform>%n voci utilizzate da %1</numerusform></translation>
+ <translation><numerusform>%n Voce utilizzata da %1</numerusform><numerusform>%n Voci utilizzate da %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Impossibile registrare il servizio DBus a %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nome file</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppo</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gestire</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Sblocca per mostrare</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nessuno</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Applicazione</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gestire</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Servizio segreto Fdo: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Sconosciuto</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Sconosciuto</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Eseguibile: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Un altro servizio segreto è già in esecuzione (%1).&lt;br/&gt;Fermarlo o rimuoverlo prima di abilitare l&apos;integrazione dei servizi segreti.</translation>
</message>
</context>
<context>
@@ -3459,14 +3562,10 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: impossibile salvare il file.</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Impossibile salvare il file di script nativo di messaggistica.</translation>
+ <source>Online password validation failed</source>
+ <translation>Validazione online della password fallita</translation>
</message>
</context>
<context>
@@ -3536,14 +3635,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossibile calcolare la chiave principale</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Non in grado dare la risposta di verifica.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>intestazioni del database mancanti</translation>
</message>
@@ -3569,16 +3660,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Sono state fornite credenziali non valide, riprovare.
Se ciò si ripresenta, il file di database potrebbe essere danneggiato.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Impossibile calcolare la chiave del database</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Impossibile stabilire un collegamento challenge-response: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Non in grado dare la risposta di verifica.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Impossibile stabilire un collegamento challenge-response: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossibile calcolare la chiave principale</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Impossibile calcolare la chiave del database</translation>
</message>
</context>
<context>
@@ -3588,10 +3687,6 @@ Se ciò si ripresenta, il file di database potrebbe essere danneggiato.</transla
<translation>intestazioni del database mancanti</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossibile calcolare la chiave principale</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Dimensione di checksum dell&apos;intestazione non valida</translation>
</message>
@@ -3709,6 +3804,10 @@ Se ciò si ripresenta, il file di database potrebbe essere danneggiato.</transla
<source>(HMAC mismatch)</source>
<translation>(mancata corrispondenza HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Impossibile calcolare la chiave del database: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3722,14 +3821,14 @@ Se ciò si ripresenta, il file di database potrebbe essere danneggiato.</transla
<translation>Dimensione non valida del vettore di inizializzazione dell&apos;algoritmo di cifratura simmetrica.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossibile calcolare la chiave principale</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Fallita serializzazione della mappa di variazione dei parametri per la funzione di derivazione della chiave di cifratura (KDF)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Impossibile calcolare la chiave del database: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3879,10 +3978,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa
<translation>Chiave alfanumerica o valore mancante per la voce</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Trovato allegato duplicato</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Chiave binaria o valore mancante per la voce</translation>
</message>
@@ -3929,6 +4024,29 @@ Riga %2, colonna %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>KeeAgent non valido nel file.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>La chiave privata è un allegato ma nessun allegato è stato inserito.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>La chiave privata è vuota</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>File troppo grande per essere una chiave privata</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Impossibile aprire la chiave privata</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3991,10 +4109,6 @@ Riga %2, colonna %3</translation>
<translation>Radice</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Impossibile calcolare la chiave principale</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Trasformazione della chiave non riuscita</translation>
</message>
@@ -4096,6 +4210,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Sono state fornite credenziali non valide, riprovare.
Se ciò si ripresenta, il file di database potrebbe essere danneggiato.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Impossibile calcolare la chiave del database</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4202,16 +4320,6 @@ Se ciò si ripresenta, il file di database potrebbe essere danneggiato.</transla
<translation>Formato di file chiave legacy</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Si sta utilizzando un formato di file chiave legacy che può diventare
-non supportato in futuro.
-
-Passare alle impostazioni della chiave master e generare un nuovo file di chiave.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Errore nel caricamento del file chiave &apos;%1&apos;
@@ -4279,6 +4387,16 @@ Are you sure you want to continue with this file?</source>
<translation>Il file chiave scelto ha l&apos;aspetto di un file database delle password. Un file chiave deve essere un file statico che non cambia mai o si perderà l&apos;accesso al database per sempre.
Sei sicuro di voler continuare con questo file?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Si sta utilizzando un formato di file di chiave legacy che può diventare
+non supportato in futuro.
+
+Generare un nuovo file di chiave nelle impostazioni di sicurezza del database.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4287,18 +4405,10 @@ Sei sicuro di voler continuare con questo file?</translation>
<translation>&amp;Database</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Database recenti</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Aiuto</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Voci</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Gruppi</translation>
</message>
@@ -4315,46 +4425,10 @@ Sei sicuro di voler continuare con questo file?</translation>
<translation>&amp;Informazioni</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Apri &amp;database...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Salva database</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Chiudi database</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Elimina voce</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Modifica gruppo</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Elimina gruppo</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Sal&amp;va database come...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Impostazioni database</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clona voce</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copia &amp;nome utente</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copia nome utente negli appunti</translation>
</message>
@@ -4367,10 +4441,6 @@ Sei sicuro di voler continuare con questo file?</translation>
<translation>&amp;Impostazioni</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Blocca database</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titolo</translation>
</message>
@@ -4395,14 +4465,6 @@ Sei sicuro di voler continuare con questo file?</translation>
<translation>Copia note negli appunti</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Esporta in file CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Imposta TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copia &amp;TOTP</translation>
</message>
@@ -4447,10 +4509,6 @@ Questa versione non è pensata per essere utilizzata in ambito di produzione.</t
<translation>&amp;Donare</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Segnala un &amp;bug</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>AVVISO: la tua versione di Qt può causare dei crash di KeePassXC con una tastiera sullo schermo!
@@ -4461,66 +4519,26 @@ Si consiglia di utilizzare l&apos;AppImage disponibile sulla nostra pagina di do
<translation>&amp;Importare</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copia att&amp;ributo...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Nuovo database...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Creare un nuovo database</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Unire dal database...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Unire da un altro database KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nuova voce</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Aggiungere una nuova voce</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Modificare voce</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Visualizzare o modificare voce</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nuovo gruppo</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Aggiungere un nuovo gruppo</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Cambiare la &amp;chiave principale...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>Impostazioni del &amp;Database...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copia &amp;password</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Eseguire compilazione &amp;automatica</translation>
</message>
@@ -4529,30 +4547,14 @@ Si consiglia di utilizzare l&apos;AppImage disponibile sulla nostra pagina di do
<translation>Aprire &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 database...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importare un database KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>File CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importare un file CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Visualizza TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Mostra codice QR TOTP...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOTA: si sta utilizzando una versione non definitiva di KeePassXC!
@@ -4575,14 +4577,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>&amp;Esporta</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Controlla aggiornamenti...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Scari&amp;ca tutte le favicons</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Ordina &amp;A-Z</translation>
</message>
@@ -4595,48 +4589,290 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Generatore di &amp;password</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Scarica favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importare un 1Password Vault</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Esporta in file HTML...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Guida introduttiva</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Vault...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Guida per l&apos;utente</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importare un 1Password Vault</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Tasti di scelta rapida</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Guida introduttiva</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Database recenti</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Apri guida introduttiva PDF</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Voci</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Guida in linea...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Copia att&amp;ributo</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Vai alla documentazione online (apre il browser)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Guida per l&apos;utente</translation>
+ <source>View</source>
+ <translation>Visualizza</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Apri guida per l&apos;utente PDF</translation>
+ <source>Theme</source>
+ <translation>Tema</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Tasti di scelta rapida</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Controlla aggiornamenti</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Apri database…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Salva database</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Chiudi database</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Nuovo database</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Unire dal database...</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nuova voce</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Modifica voce</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Elimina voce</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Nuovo gruppo</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Modifica gruppo</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Elimina gruppo</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Scarica tutte le &amp;Favicons</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Sal&amp;va database come</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>Database &amp;Sicurezza...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>Database &amp;Report...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistiche, controllo dello stato, ecc.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Impostazioni &amp;database</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Clona voce</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Sposta in s&amp;ù</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Sposta la voce una posizione in alto</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Sposta in gi&amp;ù</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Sposta la voce una posizione in basso</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Copia &amp;nome utente</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Copia &amp;password</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Scarica &amp;Favicon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Blocca database</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;File CSV...</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>File &amp;HTML...</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>Database KeePass 1</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password Vault</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>File CSV</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Visualizza TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Mostra codice QR</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Configura TOTP...</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Segnala un &amp;bug</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>Apri la guida introduttiva</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Guida in linea</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Vai alla documentazione online</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Apri il manuale dell&apos;utente</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Salva il backup del database </translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Aggiungi chiave all&apos;agente SSH</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Rimuovi chiave dall&apos;agente SSH</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Modalità compatta</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automatico</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Chiaro</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Scuro</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Classico (nativo della piattaforma)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Mostra barra degli strumenti</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Mostra pannello anteprima</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Non mostrare più per questa versione</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Riavviare l&apos;applicazione?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>È necessario riavviare l&apos;applicazione per applicare questa impostazione. Vuoi riavviare ora?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Impostazioni database</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Modificare le impostazioni del database</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Sblocca database</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Sblocca il database per mostrare ulteriori informazioni</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Blocca database</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Scollegare</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Scollega questa applicazione</translation>
</message>
</context>
<context>
@@ -4725,10 +4961,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Pagina della procedura guidata</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Impostazioni di &amp;crittografia</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database.</translation>
</message>
@@ -4740,27 +4972,31 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<source>Simple Settings</source>
<translation>Impostazioni semplici</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Impostazioni di crittografia</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Credenziali database</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Un set di credenziali note solo a te che protegge il database.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Chiave principale del database</translation>
+ <source>Encryption Settings</source>
+ <translation>Impostazioni di crittografia</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Una password principale segreta protegge il vostro database.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Qui è possibile modificare le impostazioni di crittaggio del database. È sempre possibile modificarli dopo nelle impostazioni del database.</translation>
</message>
</context>
<context>
@@ -4775,6 +5011,13 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Gestione password</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4950,6 +5193,18 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<source>Passwords match so far</source>
<translation>Le password corrispondono finora</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Attiva/disattiva password (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Genera password (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Attenzione: Caps Lock abilitato!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4974,25 +5229,13 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Le password non corrispondono.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Generare la password principale</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo password</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Attiva/disattiva la visibilità della password</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Campo ripeti password</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Attiva/disattiva generatore di password</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5001,10 +5244,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Password:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>affidabilità</translation>
@@ -5054,14 +5293,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Separatore parole:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copia</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accetta</translation>
- </message>
- <message>
<source>Close</source>
<translation>Chiudi</translation>
</message>
@@ -5158,14 +5389,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Passare alla modalità semplice</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Semplice</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Set di caratteri da escludere dalla password generata</translation>
</message>
@@ -5186,14 +5409,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Escludere i caratteri: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Conte&amp;ggio delle parole:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Rigenerare</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Password generata</translation>
</message>
@@ -5242,10 +5457,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Copia password</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Accetta password</translation>
- </message>
- <message>
<source>lower case</source>
<translation>carattere minuscolo</translation>
</message>
@@ -5258,8 +5469,44 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Titolo maiuscolo/minuscolo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Attiva/disattiva la visibilità della password</translation>
+ <source>Generate Password</source>
+ <translation>Genera password</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Scegli anche tra:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Caratteri aggiuntivi da utilizzare nella generazione delle password</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Caratteri aggiuntivi </translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Conteggio parole:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Applica password</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Azzera</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Rigenera password (%1)</translation>
</message>
</context>
<context>
@@ -5272,6 +5519,58 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<source>Statistics</source>
<translation>Statistiche</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Password molto debole</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>L&apos;entropia della password è %1 bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Password debole</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Utilizzato in %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>La password è stata utilizzata %1 volte</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>La password è scaduta</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>La password è scaduta il %1 </translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>La password è in scadenza</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>La password scade tra %1 giorni</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>La password scadrà presto</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>La password scade il %1 </translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Controllo dell&apos;integrità</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5411,10 +5710,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<translation>Percorso della voce da aggiungere.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copia la password di una voce negli appunti.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Percorso della voce da tagliare.</translation>
@@ -5572,14 +5867,6 @@ Comandi disponibili:
<translation>Integrazione con i browser</translation>
</message>
<message>
- <source>Press</source>
- <translation>Premi</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiva</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agente SSH</translation>
</message>
@@ -5618,10 +5905,6 @@ Comandi disponibili:
<translation>Aggiunta con successo la voce %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copiare il TOTP corrente negli appunti.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Valore di timeout %1 non valido.</translation>
</message>
@@ -5633,17 +5916,9 @@ Comandi disponibili:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>La voce con percorso %1 non ha impostato TOTP.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP corrente della voce copiata negli appunti!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>La password della voce copiata negli appunti!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Cancellazione degli Appunti in %1 secondi...</numerusform><numerusform>Cancellazione degli appunti in %1 secondi...</numerusform></translation>
+ <translation><numerusform>Cancellazione degli Appunti in %1 secondi...</numerusform><numerusform>Cancellazione degli appunti in %1 secondo(i)...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5861,10 +6136,6 @@ Comandi disponibili:
<translation>Nessun programma definito per la manipolazione degli appunti</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Impossibile avviare il programma %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>file vuoto</translation>
</message>
@@ -5873,18 +6144,6 @@ Comandi disponibili:
<translation>%1: (riga, col) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – raccomandato)</translation>
</message>
@@ -6135,10 +6394,6 @@ Kernel: %3 %4</translation>
<translation>Visualizza questa guida.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Slot Yubikey utilizzato per crittografare il database.</translation>
- </message>
- <message>
<source>slot</source>
<translation>slot</translation>
</message>
@@ -6155,10 +6410,6 @@ Kernel: %3 %4</translation>
<translation>Uscire dalla modalità interattiva.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formato da utilizzare durante l&apos;esportazione. Le opzioni disponibili sono xml o csv. Il valore predefinito è xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Esporta il contenuto di un database nell&apos;output standard nel formato specificato.</translation>
</message>
@@ -6199,10 +6450,6 @@ Kernel: %3 %4</translation>
<translation>Percorso del nuovo database.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Impossibile importare l&apos;esportazione del database XML %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Database importato correttamente.</translation>
</message>
@@ -6295,10 +6542,6 @@ Kernel: %3 %4</translation>
<translation>Slot YubiKey non valido %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Tocca il pulsante sul tuo YubiKey per sbloccare %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Immettere la password per crittografare il database (facoltativo):</translation>
</message>
@@ -6314,13 +6557,9 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation>Nome utente</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Risposta di verifica - Slot %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>La password per &apos;%1&apos; è stata persa %2 time(s)!</numerusform><numerusform>La password per &apos;%1&apos; è trapelata %2 volte!</numerusform></translation>
+ <translation><numerusform>La password per &apos;%1&apos; è trapelata %2 volta!</numerusform><numerusform>La password per &apos;%1&apos; è trapelata %2 volte!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6330,6 +6569,194 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Mostra in chiaro gli attributi protetti</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Errore del plug-in del browser</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Impossibile salvare il file di script nativo di messaggistica per %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Copia l&apos;attributo negli appunti. L&apos;impostazione predefinita è &quot;password&quot; se non specificato.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Copiare il TOTP negli appunti. (analogo a &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Copia l&apos;attributo della voce negli appunti.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>ERRORE: Specificare uno solo tra attributo o TOTOP, non entrambi.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>ERRORE: l&apos;attributo %1 è ambiguo, corrisponde con %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Attributo &quot;%1&quot; non trovato.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Attributo della voce &quot;%1&quot; copiato negli appunti!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Slot Yubikey e porta seriale opzionale utilizzata per l&apos;accesso al database (es. 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>slot[:serial]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Il tempo di decrittazione del database in MS.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>orario</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Imposta un file chiave per il database</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Imposta una password per il database</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Tempo di decrittazione non valido %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Il tempo di decrittazione deve essere compreso tra %1 e %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Impossibile salvare la password del database.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Test delle prestazioni della chiave di derivazione per %1ms di ritardo.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Impostare %1 iterazioni per la funzione di derivazione della chiave.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>Errore durante il salvataggio delle impostazioni della chiave di derivazione.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Formati utilizzabile per l&apos;esportazione. E&apos; possibile scegliere tra &apos;xml&apos; e &apos;csv&apos;. L&apos;impostazione predefinita è &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Impossibile importare il database XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Mostra le informazioni di un database.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID:</translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Descrizione:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Cifrario:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>Kdf:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Il cestino è abilitato </translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Il cestino non è abilitato </translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Comando non valido %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Seriale YubiKey %1 non valido</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Premere il pulsante della YubiKey per continuare</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Si vuole davvero creare un database senza una password? [y/N]: </translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Ripeti password:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Errore: le password non corrispondono </translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Tutti i programmi di ritaglio hanno riscontrato errori. Provati %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 turni)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 iterazioni, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Test delle prestazioni %1 ritardo</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6366,6 +6793,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Mostra anche le voci escluse dai rapporti</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Spostare il cursore sulla notifica per vedere dettagli aggiuntivi. Doppio-click per modificare la voce.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Scadente</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Scadente: la password deve essere modificata</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Debole</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Inefficace — la password dovrebbe essere cambiata</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Intermedia</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Debole — considera di cambiare password</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Esclusa)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Questa voce è stata esclusa dai rapporti </translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Attendere, controllo di integrità in corso</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Congratulazioni, nessun problema rilevato!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titolo</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Percorso</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Punteggio</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Motivo</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Modifica voce</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Escludere dal rapporto</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>ATTENZIONE: Questo rapporto richiede l&apos;invio di informazioni al servizio online Have I Been Pwned (https://haveibeenpwned.com). Se si procede le password verranno crittografate e i primi cinque caratteri verranno inviati in modo sicuro al servizio. Il tuo database rimane sicuro e non può essere ricostruito da queste informazioni. Tuttavia il numero di password inviate sarà esposto a questo servizio.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Esegui un&apos;analisi online</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Mostra anche le voci escluse dai rapporti</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Questa versione di KeePassXC non possiede funzionalità di rete. La funzionalità di rete è richiesta per verificare la tua password con i database di Have I Been Pwned</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Congratulazioni, nessuna password esposta!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titolo</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Percorso</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Password esposta </translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Esclusa)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Questa voce è stata esclusa dai rapporti </translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>una volta </translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>fino a 10 volte</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>fino a 100 volte</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>fino a 1000 volte</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>fino a 10,000 volte</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>fino a 100,000 volte</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>fino ad un milione di volte</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>milioni di volte</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Modifica voce</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Escludere dal rapporto</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Passare il mouse sulle righe con icone di errore per ulteriori informazioni.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valore</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Attendere, calcolo statistiche del database...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nome del database</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>descrizione</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Posizione</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Ultimo salvataggio</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Modifiche non salvate</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>sì</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>No</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Il database è stato modificato, ma le modifiche non sono ancora state salvate su disco.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Numero di gruppi</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Numero di voci</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Numero di voci scadute</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Il database contiene voci scadute.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Password univoche</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Password non univoche</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Più del 10% delle password vengono riutilizzate. Utilizzare password univoche quando possibile.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Massimo riutilizzo della password</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Alcune password vengono utilizzate più di tre volte. Utilizzare password univoche quando possibile.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Numero di password brevi</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>La lunghezza minima consigliata per la password è di almeno 8 caratteri.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Numero di password deboli</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Consiglia di utilizzare password lunghe e randomizzate con una valutazione &quot;buona&quot; o &quot;eccellente&quot;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Voci escluse dal rapporto </translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Escludere voci dal rapporto, ad esempio perché possiedono una password scadente, non è necessariamente un problema ma dovrebbero essere tenute sotto controllo.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Lunghezza media password</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caratteri</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>La lunghezza media della password è inferiore a dieci caratteri. Le password più lunghe offrono maggiore sicurezza.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6399,6 +7110,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Una richiesta di conferma non è supportata dall&apos;agente (controllare le opzioni).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Identificativo del proprietario della chiave in conflitto. Aggiunta negata.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Nessun agente in esecuzione non può elencare le identità.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6506,26 +7225,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se il cestino è abilitato per il database, le voci verranno spostate direttamente nel cestino. In caso contrario, verranno eliminati senza conferma.&lt;/p&gt;&lt;p&gt;Continuerai a essere interpellato se qualsiasi voce fa riferimento ad altre.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Non confermare quando le voci vengono eliminate dai client.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Gruppi di database esposti:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Gruppo</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Gestire</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorizzazione</translation>
</message>
@@ -6534,40 +7237,20 @@ Kernel: %3 %4</translation>
<translation>Queste applicazioni sono attualmente connesse:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Applicazione</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Scollegare</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Impostazioni database</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Modificare le impostazioni del database</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Sblocca database</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Sblocca il database per mostrare ulteriori informazioni</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Non confermare quando le voci vengono eliminate dai client</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Blocca database</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Errore:&lt;/b&gt; Impossibile connettersi a DBus. Verificare le impostazioni di DBus.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Sblocca per mostrare</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Attenzione:&lt;/b&gt;</translation>
</message>
<message>
- <source>None</source>
- <translation>Nessuno</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Salvare i cambiamenti per attivare il plugin e modificare questa sezione.</translation>
</message>
</context>
<context>
@@ -6614,7 +7297,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Export</source>
- <translation>Esporta</translation>
+ <translation>Esportare</translation>
</message>
<message>
<source>Imported certificates</source>
@@ -6840,10 +7523,6 @@ Kernel: %3 %4</translation>
<translation>Importazione firmata correttamente</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Errore imprevisto</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Contenitori di condivisione non firmati non sono supportati - importazione non consentita</translation>
</message>
@@ -7013,6 +7692,13 @@ Esempio: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL non corretto</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7103,6 +7789,53 @@ Esempio: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Configurazione Slot - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Challenge Response - Slot %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Premi</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiva</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Slot specificato non valido - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>L&apos;interfaccia YubiKey non è stata inizializzata.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>La chiave hardware è già in uso.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Non è stato possibile trovare una chiave hardware nello slot numero %1. Per favore collegarne una per procedere.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Sessione della chiave hardware scaduta aspettando un interazione da parte dell&apos;utente.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Si è verificato un errore USB durante l&apos;accesso alla chiave hardware: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Impossibile completare challenge-response, l&apos;errore specifico è: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7117,20 +7850,28 @@ Esempio: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Se si possiede un &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, è possibile utilizzarlo per una maggiore sicurezza.&lt;/p&gt;&lt;p&gt;YubiKey richiede che uno dei suoi slot sia programmato come &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;Risposta di verifica HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nessun YubiKey rilevato, si prega di assicurarsi che sia collegato.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation>Aggiornare i token hardware</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Nessun YubiKey inserito.</translation>
+ <source>Hardware key slot selection</source>
+ <translation>Selezione degli slot dei tasti hardware</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>Aggiornare i token hardware</translation>
+ <source>Could not find any hardware keys!</source>
+ <translation>Impossibile trovare le chiavi hardware!</translation>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>Selezione degli slot delle chiavi hardware</translation>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>La porta USB selezionata non supporta il protocollo challenge-response!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Rilevamento delle chiavi hardware in corso...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nessuna chiave hardware rilevata</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_ja.ts b/share/translations/keepassx_ja.ts
index 0737f1c5d..9066b9575 100644
--- a/share/translations/keepassx_ja.ts
+++ b/share/translations/keepassx_ja.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH エージェントを有効にする (再起動が必要)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Pageant の代わりに OpenSSH for Windows を使用する</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>SSH エージェント統合を有効にする</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK 値</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK のオーバーライド</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(空)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>SSH エージェントソケットが利用できません。SSH_AUTH_SOCK の存在を確認するか、オーバーライドしてください。</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH エージェント接続が動作中です!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -101,7 +121,19 @@
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
- <translation>全ての一般設定とセキュリティ設定をデフォルトにリセットしてもよろしいですか?</translation>
+ <translation>全ての一般設定とセキュリティ設定を初期設定に戻してもよろしいですか?</translation>
+ </message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>モノクロ (ライト)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>モノクロ (ダーク)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>カラフル</translation>
</message>
</context>
<context>
@@ -127,10 +159,6 @@
<translation>ファイル管理</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>安全にデータベースファイルを保存する (Dropbox などのサービスでは動作しない可能性があります)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>保存する前にデータベースファイルをバックアップする</translation>
</message>
@@ -143,12 +171,8 @@
<translation>終了時に自動的に保存する</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>データ以外の変更 (例えばグループの展開) に対して、データベースを修正済みとしてマークしないようにする</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
- <translation>外部から編集された際に自動でデータベースを再読み込みする</translation>
+ <translation>編集された際に自動でデータベースを再読み込みする</translation>
</message>
<message>
<source>Entry Management</source>
@@ -159,18 +183,6 @@
<translation>エントリー作成時にグループのアイコンを使用する</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>エントリーのプレビューパネルを非表示にする</translation>
- </message>
- <message>
- <source>General</source>
- <translation>一般</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>ツールバー (アイコン) を非表示にする</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>アプリケーション終了ではなく最小化する</translation>
</message>
@@ -179,12 +191,8 @@
<translation>システムトレイアイコンを表示する</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>ダークシステムトレイアイコン</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
- <translation>最小化した際にシステムトレイへ格納する</translation>
+ <translation>最小化された際にシステムトレイへ格納する</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -203,23 +211,11 @@
<translation>自動入力を行う前に毎回確認する</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>グローバル自動入力のショートカット</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>自動入力の入力時の遅延</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ミリ秒</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>自動入力開始までの遅延</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>ツールバーを移動可能にする</translation>
</message>
@@ -244,10 +240,6 @@
<translation>ベータ版も確認対象にする</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>ボタンのスタイル:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>言語:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>ツールバーボタンのスタイル</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>メモに等幅フォントを使用する</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>言語選択</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>設定をデフォルトにリセット</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>グローバル自動入力のショートカット</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>自動入力開始までの遅延 (ミリ秒)</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>システム起動時に KeePassXC を自動的に起動する</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>データ以外の変更 (例えばグループの展開) に対して、データベースを修正済みとしてマークする</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>データベースファイルを安全に保存する (Dropbox などで問題が発生した場合は無効にしてください)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>ユーザーインターフェース</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>ツールバーボタンのスタイル:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>メモに等幅フォントを使用する</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>トレイアイコンの種類:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>設定を初期値に戻す…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>自動入力の入力時の遅延:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>グローバル自動入力のショートカット:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>自動入力開始までの遅延:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -325,7 +353,7 @@
</message>
<message>
<source>Clear clipboard after</source>
- <translation>指定時間経過後にクリップボードを消去する</translation>
+ <translation>次の時間が過ぎたらクリップボードを消去する</translation>
</message>
<message>
<source> sec</source>
@@ -350,11 +378,11 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>セッションをロックしたりラップトップを閉じた際にデータベースをロックする</translation>
+ <translation>セッションがロックされたりラップトップが閉じられた際にデータベースをロックする</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>セッションをロックしたりラップトップを閉じた際に TouchID を消去する</translation>
+ <translation>セッションがロックされたりラップトップが閉じられた際に TouchID を消去する</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
@@ -362,19 +390,7 @@
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>自動入力実行後に以前ロックしたデータベースを再ロックする</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>パスワードが表示されている場合は、パスワードの再入力を必要としないようにする</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>編集時にパスワードを非表示にしない</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>空のパスワードフィールドでプレースホルダーを使用しない</translation>
+ <translation>自動入力実行後に以前ロックされたデータベースを再ロックする</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>指定時間経過後に検索クエリを消去する</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>パスワードが表示されていても再入力を要求する</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>編集時にパスワードを非表示にする</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>空のパスワードフィールドでプレースホルダーを使用する</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser アクセス確認</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - ブラウザーのアクセス要求</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 が次のエントリーへのアクセスを要求しています:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>この決定を記憶する</translation>
+ <source>Remember access to checked entries</source>
+ <translation>チェックしたエントリーへのアクセスを記憶する</translation>
</message>
<message>
- <source>Allow</source>
- <translation>許可</translation>
+ <source>Remember</source>
+ <translation>記憶する</translation>
</message>
<message>
- <source>Deny</source>
- <translation>拒否</translation>
+ <source>Allow access to entries</source>
+ <translation>エントリーへのアクセスを許可する</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 が以下の項目のパスワードへのアクセスを要求しました。
-アクセスを許可するかどうかを選択してください。</translation>
+ <source>Allow Selected</source>
+ <translation>選択したものを許可</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>アクセスを許可</translation>
+ <source>Deny All</source>
+ <translation>全て拒否</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>アクセスを拒否</translation>
+ <source>Disable for this site</source>
+ <translation>このサイトを無効化</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Please select the correct database for saving credentials.</source>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>ダイアログ</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: 新しいキーのアソシエーション要求</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>このオプションは KeePassXC-Browser からデータベースにアクセスするために必要です</translation>
+ <source>Save and allow access</source>
+ <translation>アクセスを許可して保存</translation>
</message>
<message>
- <source>General</source>
- <translation>一般</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: 既存のキーを上書きしますか?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>これらのブラウザーの統合を有効にする:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>共有暗号化キー &quot;%1&quot; は既に存在します。
+上書きしますか?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>Google Chrome(&amp;G)</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: エントリーを更新</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>Firefox(&amp;F)</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>%1 - %2 の情報を更新しますか?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>Chromium(&amp;C)</translation>
+ <source>Abort</source>
+ <translation>中止</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>Vivaldi(&amp;V)</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>属性をカスタムデータに変換しています…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>資格情報を要求された際に通知を表示する(&amp;N)</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: KeePassHTTP の属性を変換しました</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>データベースがロックされている場合はロックの解除を要求する(&amp;Q)</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>%1 個のエントリーから属性を正常に変換しました。
+%2 個のキーをカスタムデータに移動しました。</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n 個のキーを正常にカスタムデータに移動しました。</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>同じスキーム (http://, https://, ...) を持つエントリーのみが返されます。</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: KeePassHTTP の属性があるエントリーは見つかりません</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>URL スキーム (例えば https://...) の一致(&amp;M)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>アクティブなデータベースには KeePassHTTP の属性があるエントリーは含まれていません。</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>ドメイン全体に一致する全てのエントリーの代わりに、特定の URL に最も一致するエントリーのみが返されます。</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: レガシーなブラウザー統合の設定が検出されました</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>最も一致する資格情報のみを返す(&amp;R)</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: 新しいグループを作成</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>一致する資格情報をタイトルで並べ替える(&amp;M)</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>新しいグループ &quot;%1&quot; の作成要求を受け取りました。
+このグループを作成しますか?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>一致する資格情報をユーザー名で並べ替える(&amp;U)</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>KeePassXC-Browser の設定をデータベース設定内に移動する必要があります。
+これはブラウザーとの接続を維持するのに必要です。
+既存の設定を移動しますか?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>詳細設定</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>今後この警告を表示しない</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>資格情報にアクセスする前に確認しない(&amp;A)</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>次のデータベースのアソシエーション要求を受け取りました:
+%1
+
+次のような、接続用の一意な名前または ID を付けてください:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>資格情報を更新する前に確認しない(&amp;U)</translation>
+ <source>Dialog</source>
+ <translation>ダイアログ</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>開いた全てのデータベースから一致する資格情報を検索する(&amp;H)</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>このオプションは KeePassXC-Browser からデータベースにアクセスするために必要です</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>文字列フィールドの自動作成や自動更新はサポートしていません。</translation>
+ <source>Enable browser integration</source>
+ <translation>ブラウザー統合を有効にする</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&quot;KPH: &quot; から始まる拡張された文字列フィールドを返す(&amp;R)</translation>
+ <source>General</source>
+ <translation>一般</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>起動時に、KeePassXC または keepassxc-proxy のバイナリーパスを自動的に Native messaging スクリプトに更新します。</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Snap 形式のブラウザーは現在サポートしていません。</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>起動時に Native messaging のマニフェストファイルを更新する(&amp;N)</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>これらのブラウザーの統合を有効にする:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>KeePassXC とブラウザーの拡張機能との間でプロキシアプリケーションをサポートします。</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>KeePassXC とブラウザーの拡張機能との間でプロキシアプリケーションを使用する(&amp;P)</translation>
+ <source>&amp;Edge</source>
+ <translation>Edge(&amp;E)</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>手動でプロキシをインストールした場合は、カスタムプロキシを使用します。</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>カスタムプロキシを使用する(&amp;C)</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>参照...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;警告:&lt;/b&gt; 以下は危険なオプションです。</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>カスタムプロキシを選択する</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Tor Browser(&amp;T)</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>資格情報を要求された際に通知を表示する</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>実行ファイル</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>データベースがロックされている場合はロックの解除を要求する</translation>
</message>
<message>
- <source>All Files</source>
- <translation>全てのファイル</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>同じスキーム (http://, https://, ...) を持つエントリーのみが返されます。</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>HTTP ベーシック認証でアクセス許可を確認しない(&amp;B)</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>URL スキーム (例えば https://...) の一致</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Snap によってサンドボックス化されているため、&lt;br /&gt;ブラウザー統合を有効にするにはスクリプトを実行する必要があります。&lt;br /&gt;スクリプトは次の場所から入手できます: %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>ドメイン全体に一致する全てのエントリーの代わりに、特定の URL に最も一致するエントリーのみが返されます。</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>ブラウザー拡張機能を使用するには以下の手順を参照してください</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>最も一致する資格情報のみを返す</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>ブラウザー統合の動作には KeePassXC-Browser が必要です。&lt;br /&gt;KeePassXC-Browser は %1 用と %2 用の2種類あります。%3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>期限切れの資格情報を返します。タイトルに [期限切れ] という文字列が追加されます。</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>Brave(&amp;B)</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>期限切れの資格情報を返すことを許可する</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>期限切れの資格情報を返します。タイトルに [期限切れ] という文字列が追加されます。</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>拡張機能に接続された全てのデータベースが一致する資格情報を返します。</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>期限切れの資格情報を返すことを許可する(&amp;A)</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>開いている全てのデータベースから一致する資格情報を検索する</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>ブラウザー統合を有効にする</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>一致する資格情報をタイトルで並べ替える</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Snap 形式のブラウザーは現在サポートしていません。</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>一致する資格情報をユーザー名で並べ替える</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>拡張機能に接続された全てのデータベースが一致する資格情報を返します。</translation>
+ <source>Advanced</source>
+ <translation>詳細設定</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>資格情報にアクセスする前に確認しない</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>資格情報を更新する前に確認しない</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>HTTP ベーシック認証でアクセス許可を確認しない</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>文字列フィールドの自動作成や自動更新はサポートしていません。</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>&quot;KPH: &quot; から始まる拡張された文字列フィールドを返す</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>レガシーな KeePassHTTP の設定を移行するためのポップアップを表示しないようにします。</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>KeePassHTTP の設定移行を確認しない(&amp;D)</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>KeePassHTTP の設定移行を確認しない</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>起動時に、KeePassXC または keepassxc-proxy のバイナリーパスを自動的に Native messaging スクリプトに更新します。</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>起動時に Native messaging のマニフェストファイルを更新する</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>手動でプロキシをインストールした場合は、カスタムプロキシを使用します。</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>カスタムプロキシを使用する:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Please select the correct database for saving credentials.</source>
<translation>カスタムプロキシファイルブラウザー</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;[警告]&lt;/b&gt; keepassxc-proxy アプリケーションが見つかりませんでした。&lt;br /&gt;KeePassXC のインストールディレクトリや、詳細設定でカスタムパスを確認してください。&lt;br /&gt;ブラウザー統合はプロキシアプリケーションが無いと動作しません。&lt;br /&gt;期待されるパス: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>参照...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: 新しいキーのアソシエーション要求</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>ブラウザーの設定の場所を変更する:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>アクセスを許可して保存</translation>
+ <source>Browser type:</source>
+ <translation>ブラウザーの種類:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: 既存のキーを上書きしますか?</translation>
+ <source>Toolbar button style</source>
+ <translation>ツールバーボタンのスタイル</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>共有暗号化キー &quot;%1&quot; は既に存在します。
-上書きしますか?</translation>
+ <source>Config Location:</source>
+ <translation>設定の場所:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: エントリーを更新</translation>
+ <source>Custom browser location field</source>
+ <translation>ブラウザーの場所指定フィールド</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>%1 - %2 の情報を更新しますか?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>中止</translation>
+ <source>Browse for custom browser path</source>
+ <translation>指定するブラウザーパスを参照する</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>属性をカスタムデータに変換しています…</translation>
+ <source>Custom extension ID:</source>
+ <translation>カスタム拡張機能 ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: KeePassHTTP の属性を変換しました</translation>
+ <source>Custom extension ID</source>
+ <translation>カスタム拡張機能 ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>%1 個のエントリーから属性を正常に変換しました。
-%2 個のキーをカスタムデータに移動しました。</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n 個のキーを正常にカスタムデータに移動しました。</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Snap によってサンドボックス化されているため、&lt;br /&gt;ブラウザー統合を有効にするにはスクリプトを実行する必要があります。&lt;br /&gt;スクリプトは次の場所から入手できます: %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: KeePassHTTP の属性があるエントリーは見つかりません</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>ブラウザー統合の動作には KeePassXC-Browser が必要です。&lt;br /&gt;KeePassXC-Browser は %1 用、%2 用、%3 用の 3 種類あります。%4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>アクティブなデータベースには KeePassHTTP の属性があるエントリーは含まれていません。</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>ブラウザー拡張機能を使用するには以下の手順を参照してください</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: レガシーなブラウザー統合の設定を検出しました</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;エラー:&lt;/b&gt; カスタムプロキシの場所が見つかりませんでした。&lt;br/&gt;ブラウザー統合はプロキシアプリケーション無しでは動作しません。</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: 新しいグループを作成</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;警告:&lt;/b&gt; 以下は危険なオプションです。</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>新しいグループ &quot;%1&quot; の作成要求を受け取りました。
-このグループを作成しますか?
-</translation>
+ <source>Executable Files</source>
+ <translation>実行ファイル</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>KeePassXC-Browser の設定をデータベース設定内に移動する必要があります。
-これはブラウザーとの接続を維持するのに必要です。
-既存の設定を移動しますか?</translation>
+ <source>All Files</source>
+ <translation>全てのファイル</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>今後この警告を表示しない</translation>
+ <source>Select custom proxy location</source>
+ <translation>カスタムプロキシを選択する</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>次のデータベースのアソシエーション要求を受け取りました:
-%1
-
-次のような、接続用の一意な名前または ID を付けてください:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Native messaging のホストフォルダーの場所を選択</translation>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-laptop.</translation>
<translation>コメントの行頭</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>最初のレコードがフィールド名</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>エスケープ文字 &apos;\&apos; を考慮する</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>プレビュー</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>列のレイアウト</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>CSV ファイルには存在しません</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>CSV ファイルからインポート</translation>
</message>
@@ -971,20 +1025,12 @@ chrome-laptop.</translation>
<translation>エラー</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>空のフィールド名 %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>列 %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
- <translation>CSV ファイルでエラーを検出しました!</translation>
+ <translation>CSV ファイルでエラーが検出されました</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n 個のメッセージをスキップしました]</numerusform></translation>
+ <translation><numerusform>[%n 個のメッセージがスキップされました]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1008,6 +1054,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>CSV インポートプレビュー</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>列の関連付け</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>最終更新日時</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>パスワード</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>作成日時</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>メモ</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>タイトル</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>グループ</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>ユーザー名</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>ヘッダー行をスキップしました</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>先頭行に複数のフィールド名があります</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>存在しません</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>列 %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>ルート</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>ファイル %1 は存在しません。</translation>
</message>
@@ -1050,7 +1143,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>読み取り専用モードでファイルを開いているため書き込むことはできません。</translation>
+ <translation>ファイルは読み取り専用モードで開かれているため書き込むことはできません。</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
@@ -1078,6 +1171,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>ゴミ箱</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>パスワード</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>データベースの保存は既に進行中です。</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>データベースが初期化されていないため保存できませんでした。</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1106,7 +1212,7 @@ unsupported in the future.
Please consider generating a new key file.</source>
<translation>レガシーなキーファイル形式は将来的に、
-サポートしなくなる可能性があります。
+サポートされなくなる可能性があります。
新しいキーファイルの生成を検討してください。</translation>
</message>
@@ -1131,10 +1237,6 @@ Please consider generating a new key file.</source>
<translation>キーファイルを開くのに失敗しました: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>スロットを選択...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>KeePassXC データベースのロック解除</translation>
</message>
@@ -1147,14 +1249,6 @@ Please consider generating a new key file.</source>
<translation>パスワードフィールド</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>パスワードの表示/非表示を切り替え</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>キーファイルを選択</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>ハードウェアキースロットを選択</translation>
</message>
@@ -1218,10 +1312,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
&lt;p&gt;詳しくはクリックしてください...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;マスターパスワードだけでなく、シークレットファイルを使用することでデータベースのセキュリティを強固にすることができます。ファイルはデータベースのセキュリティ設定で生成できます。&lt;/p&gt;&lt;p&gt;このファイルは *.kdbx データベースファイル&lt;strong&gt;ではない&lt;/strong&gt;ものにしてください。&lt;br&gt;キーファイルが無い場合は、フィールドを空のままにしてください。&lt;/p&gt;&lt;p&gt;詳しくはクリックしてください...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>キーファイルのヘルプ</translation>
</message>
@@ -1230,10 +1320,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>キーファイルを選択...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>データベースファイルをキーファイルとして使用することはできません</translation>
</message>
@@ -1243,6 +1329,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>データベースファイルをキーファイルとして使用することはできません。
キーファイルが無い場合は、フィールドを空のままにしてください。</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;パスワードだけでなくシークレットファイルを使用することで、データベースのセキュリティを向上させることができます。シークレットファイルはデータベースのセキュリティ設定で生成できます。&lt;/p&gt;&lt;p&gt;*.kdbx データベースファイルはシークレットファイル&lt;strong&gt;ではありません&lt;/strong&gt;!&lt;br&gt;キーファイルがない場合、このフィールドは空のままにしてください。&lt;/p&gt;&lt;p&gt;詳細についてはクリックしてください...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>データベースのロックを解除するキーファイル</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>YubiKey のボタンにタッチしてください</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>ハードウェアキーを検出中…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>検出したハードウェアキーはありません</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>ハードウェアキーを選択…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1266,17 +1376,17 @@ If you do not have a key file, please leave the field empty.</source>
<translation>セキュリティ</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>マスターキー</translation>
- </message>
- <message>
<source>Encryption Settings</source>
- <translation>暗号化の設定</translation>
+ <translation>暗号化設定</translation>
</message>
<message>
<source>Browser Integration</source>
<translation>ブラウザー統合</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>データベースの資格情報</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1285,18 +1395,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-Browser 設定</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>全てのブラウザーの接続を断つ(&amp;D)</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>エントリーのサイト固有の設定を全て消去する(&amp;E)</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移動する(&amp;C)</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>保存されたキー</translation>
</message>
@@ -1346,11 +1444,11 @@ This may prevent connection to the browser plugin.</source>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC: データベースからキーを削除しました</translation>
+ <translation>KeePassXC: データベースからキーが削除されました</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>KeePassXC の設定から %n 個の暗号化キーを正常に削除しました。</numerusform></translation>
+ <translation><numerusform>KeePassXC の設定から %n 個の暗号化キーが正常に削除されました。</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1364,7 +1462,7 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>保存したアクセス許可を削除しています…</translation>
+ <translation>保存されたアクセス許可を削除しています…</translation>
</message>
<message>
<source>Abort</source>
@@ -1372,11 +1470,11 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: アクセス許可を削除しました</translation>
+ <translation>KeePassXC: アクセス許可が削除されました</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>%n 個のエントリーからアクセス許可を正常に削除しました。</numerusform></translation>
+ <translation><numerusform>%n 個のエントリーからアクセス許可が正常に削除されました。</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1404,6 +1502,67 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>選択したキーを削除</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移動する</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>データベースのルートグループ ID を更新</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>作成日時</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>データベース ID を更新</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>本当にデータベース ID を更新しますか?
+これはデータベースが別のデータベースのコピーで、ブラウザー拡張機能が接続できない場合にのみ必要です。</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>保護を追加...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>パスワードを設定していません</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>[警告] パスワードを設定していません。パスワード無しでのデータベースの使用は極力避けるべきです。
+
+パスワード無しで続行してもよろしいですか?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>パスワード無しで続行</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>追加した暗号化キーはありません</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>データベースをセキュアにするには、暗号化キーを少なくとも1つ追加する必要があります。</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>不明なエラーです</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>データベースの資格情報の変更に失敗しました</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1428,10 +1587,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>変換回数:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>ベンチマーク 1秒遅延</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>メモリ使用量:</translation>
</message>
@@ -1452,14 +1607,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>変更</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ミリ秒</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 秒</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>値が大きいほど保護力が増しますが、データベースを開くのに時間がかかるようになります。</translation>
</message>
@@ -1520,32 +1667,22 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>KDF unchanged</source>
- <translation>KDF は変更しません</translation>
+ <translation>KDF は変更されません</translation>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>新しい KDF のパラメーターでのキー変換に失敗しました。KDF を変更しません。</translation>
+ <translation>新しい KDF のパラメーターでのキー変換に失敗しました。KDF は変更されません。</translation>
</message>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>MiB</numerusform></translation>
+ <translation><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> スレッド</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ミリ秒</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 秒</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>既存の復号化時間を変更</translation>
@@ -1578,6 +1715,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation>並列処理</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ミリ秒</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? 秒</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1586,16 +1731,16 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>公開するエントリー</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>このデータベースを公開しない(&amp;X)</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>このデータベースを公開しない</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>このグループ下のエントリーを公開する(&amp;U):</translation>
+ <source>Expose entries under this group:</source>
+ <translation>このグループ下のエントリーを公開する:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>これらの設定にアクセスするには、fd.o シークレットサービスを有効にしてください。</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>これらの設定にアクセスするには、シークレットサービスを有効にしてください。</translation>
</message>
</context>
<context>
@@ -1641,10 +1786,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>追加のデータベース設定</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>圧縮を有効にする (推奨)(&amp;C)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>データベース名フィールド</translation>
</message>
@@ -1678,6 +1819,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation> (旧)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>圧縮を有効にする (推奨)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1712,45 +1857,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>保護を追加...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>追加した暗号化キーはありません</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>データベースをセキュアにするには、暗号化キーを少なくとも1つ追加する必要があります。</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>パスワードを設定していません</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>[警告] パスワードを設定していません。パスワード無しでのデータベースの使用は極力避けるべきです。
-
-パスワード無しで続行してもよろしいですか?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>不明なエラーです</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>マスターキーの変更に失敗しました</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>パスワード無しで続行</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1770,125 +1876,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>統計</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>エラーアイコンがある行にマウスオーバーすると詳細を表示します。</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>名前</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>値</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>データベース名</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>概要</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>場所</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>最終更新日時</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>未保存の変更</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>はい</translation>
- </message>
- <message>
- <source>no</source>
- <translation>いいえ</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>データベースは変更済みですが、まだディスクに保存していません。</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>グループ数</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>エントリー数</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>期限切れエントリー数</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>データベースに期限切れのエントリーが含まれています。</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>固有パスワード</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>非固有パスワード</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>10% 以上のパスワードが使い回されています。可能な限り、それ専用のパスワードを使用してください。</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>パスワード使い回しの最大数</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>一部のパスワードが3回以上使い回されています。可能な限り、それ専用のパスワードを使用してください。</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>短いパスワードの数</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>推奨最小パスワード長は最低8文字です。</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>脆弱なパスワードの数</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>「良い」または「すばらしい」評価の長くてランダムなパスワードの使用を推奨します。</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>平均パスワード長</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1文字</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>パスワード長の平均値が10文字以下です。パスワードは長いほどセキュリティが向上します。</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>データベースの統計を算出しているため、しばらくお待ちください...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1920,7 +1907,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>データベースを CSV ファイルへエクスポート</translation>
+ <translation>データベースを CSV ファイルにエクスポートする</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
@@ -1933,7 +1920,7 @@ Are you sure you want to continue without a password?</source>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation>作成したデータベースはキーや KDF が無いため保存しません。
+ <translation>作成されたデータベースはキーや KDF が無いため保存しません。
これは確実にバグなので、開発者への報告をお願いします。</translation>
</message>
<message>
@@ -1983,6 +1970,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>データベースを暗号化せずにファイルへエクスポートしようとしています。これはパスワードや機密情報が脆弱な状態に置かれることを意味します。続行してもよろしいですか?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>OPVault を開く</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2083,13 +2074,13 @@ Do you want to merge your changes?</source>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>&quot;%1&quot; が更新されました。
+ <translation>&quot;%1&quot; は更新されています。
変更を保存しますか?</translation>
</message>
<message>
<source>Database was modified.
Save changes?</source>
- <translation>データベースが更新されました。
+ <translation>データベースは更新されています。
変更を保存しますか?</translation>
</message>
<message>
@@ -2146,7 +2137,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>データベースファイルを正常にマージしました。</translation>
+ <translation>データベースファイルは正常にマージされました。</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
@@ -2164,6 +2155,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>このデータベースは読み取り専用モードで開いています。自動保存は無効です。</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>データベースのバックアップを保存</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>データベースファイルが見つかりませんでした: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2208,14 +2207,6 @@ Disable safe saves and try again?</source>
<translation>秘密鍵を選択</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>ファイルが大きすぎるため秘密鍵にできません</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>秘密鍵を開くのに失敗しました</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>エントリーの履歴</translation>
</message>
@@ -2228,10 +2219,6 @@ Disable safe saves and try again?</source>
<translation>エントリーを編集</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>異なるパスワードが入力されました。</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>新しい属性</translation>
</message>
@@ -2252,29 +2239,13 @@ Disable safe saves and try again?</source>
<translation><numerusform>%n ヶ月</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>生成されたパスワードを適用しますか?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>生成されたパスワードをこのエントリーに適用しますか?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
- <translation>エントリーを正常に更新しました。</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>エントリーに未保存の変更があります</translation>
+ <translation>エントリーは正常に更新されました。</translation>
</message>
<message>
<source>New attribute %1</source>
<translation>新しい属性 %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[保護] 表示または編集する場合は開示をクリックしてください</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n 年</numerusform></translation>
@@ -2295,6 +2266,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation>この URL を削除してもよろしいですか?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>開示</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>隠す</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>未保存の変更</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>このエントリーの変更を保存しますか?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[保護] 表示または編集する場合は開示をクリックしてください</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2370,6 +2361,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>背景色選択</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;チェックを入れると、エントリーが品質要件 (例えばパスワードのエントロピーや使い回し) に一致しなかったとしても、安全性の確認や HIBP のレポートにエントリーを表示しません。チェックマークを設定することで、パスワードの決定権が自身に無い (例えば必要なパスワードが四桁の PIN である) 場合などに、レポートのノイズになるのを防ぐことができます。&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>データベースのレポートから除外する</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2378,14 +2377,6 @@ Disable safe saves and try again?</source>
<translation>このエントリーの自動入力を有効にする</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>自動入力シーケンスをグループから引き継ぐ(&amp;G)</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>カスタムした自動入力シーケンスを使用する(&amp;U):</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>ウィンドウの関連付け</translation>
</message>
@@ -2441,6 +2432,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation>このウィンドウのカスタム自動入力シーケンス</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>自動入力手順をグループから引き継ぐ</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>カスタムの自動入力手順を使う:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2476,6 +2475,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>編集</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>この設定をブラウザーの HTTP 認証ダイアログにのみ送信します。有効になっている場合、このエントリーは通常のログインフォームには表示されません。</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>このエントリーは HTTP ベーシック認証でのみ使用する</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2527,18 +2534,10 @@ Disable safe saves and try again?</source>
<translation>パスワード:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>パスワード確認:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>タイトル:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>メモ</translation>
- </message>
- <message>
<source>Presets</source>
<translation>プリセット</translation>
</message>
@@ -2551,10 +2550,6 @@ Disable safe saves and try again?</source>
<translation>ユーザー名:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>期限</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL フィールド</translation>
</message>
@@ -2563,22 +2558,10 @@ Disable safe saves and try again?</source>
<translation>URL 用のファビコンをダウンロード</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>パスワード再入力フィールド</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>パスワード生成を切り替え</translation>
- </message>
- <message>
<source>Password field</source>
<translation>パスワードフィールド</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>パスワードの表示/非表示を切り替え</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>メモの表示を切り替え</translation>
</message>
@@ -2610,6 +2593,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>有効期限を切り替え</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>メモ:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>期限:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2631,7 +2626,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>データベースを閉じたりロックした際にエージェントからキーを削除する</translation>
+ <translation>データベースが閉じられたりロックされた際にエージェントからキーを削除する</translation>
</message>
<message>
<source>Public key</source>
@@ -2639,7 +2634,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>データベースを開いたりロックを解除した際にエージェントにキーを追加する</translation>
+ <translation>データベースが開かれたりロックが解除された際にエージェントにキーを追加する</translation>
</message>
<message>
<source>Comment</source>
@@ -2684,7 +2679,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Require user confirmation when this key is used</source>
- <translation>このキーを使用する際に必ずユーザーに確認する</translation>
+ <translation>このキーが使用される際にユーザーの確認を必要とする</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
@@ -2745,10 +2740,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>フォーム</translation>
- </message>
- <message>
<source>Type:</source>
<translation>種類:</translation>
</message>
@@ -2757,10 +2748,6 @@ Disable safe saves and try again?</source>
<translation>パス:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>パスワード:</translation>
</message>
@@ -2844,57 +2831,25 @@ Supported extensions are: %1.</source>
<translation>共有ファイルパスフィールド</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>共有ファイルブラウザー</translation>
- </message>
- <message>
<source>Password field</source>
<translation>パスワードフィールド</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>パスワードの表示/非表示を切り替え</translation>
+ <source>Clear fields</source>
+ <translation>フィールドを消去</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>パスワード生成を切り替え</translation>
+ <source>Browse for share file</source>
+ <translation>共有ファイルを探す</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>フィールドを消去</translation>
+ <source>Browse...</source>
+ <translation>参照...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>名前</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>メモ</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>期限</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>検索</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>自動入力</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>親グループのデフォルトの自動入力シーケンスを使用する(&amp;U)</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>デフォルトの自動入力シーケンスを設定する(&amp;Q)</translation>
- </message>
- <message>
<source>Name field</source>
<translation>名前フィールド</translation>
</message>
@@ -2922,18 +2877,38 @@ Supported extensions are: %1.</source>
<source>Default auto-type sequence field</source>
<translation>デフォルトの自動入力シーケンスフィールド</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>デフォルトアイコンから選択(&amp;U)</translation>
+ <source>Expires:</source>
+ <translation>期限:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>親グループのデフォルトの自動入力シーケンスを使用する</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>自動入力:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>検索:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>カスタムアイコンから選択(&amp;M)</translation>
+ <source>Notes:</source>
+ <translation>メモ:</translation>
</message>
<message>
+ <source>Name:</source>
+ <translation>名前: </translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>デフォルトの自動入力シーケンスを設定する</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>カスタムアイコンを追加</translation>
</message>
@@ -2998,14 +2973,6 @@ Supported extensions are: %1.</source>
<translation>選択したアイコンをサブグループとエントリーに適用</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>アイコンを適用(&amp;T)...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>これにのみ適用</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>子グループにも適用</translation>
</message>
@@ -3021,6 +2988,22 @@ Supported extensions are: %1.</source>
<source>Existing icon selected.</source>
<translation>選択したアイコンは既存です。</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>デフォルトアイコンから選択</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>カスタムアイコンから選択</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>アイコンを適用...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>このグループにのみ適用</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3205,6 +3188,20 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation>選択した添付ファイルをディスクに保存</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 は大きいファイル (%2 MB) です。
+データベースが非常に大きくなりパフォーマンスが低下する可能性があります。
+
+このファイルを追加しますか?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>添付の確認</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3288,12 +3285,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>添付ファイル</translation>
</message>
<message>
- <source>Yes</source>
- <translation>はい</translation>
+ <source>Size</source>
+ <translation>サイズ</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>グループ名</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>エントリーのタイトル</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>エントリーのメモ</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>エントリーの期限</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>作成日時</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>最終更新日時</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>最終アクセス日時</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>添付ファイル</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>エントリーのサイズ</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>添付ファイル有り</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>TOTP ワンタイムパスワード有り</translation>
</message>
</context>
<context>
@@ -3393,6 +3430,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>無効な URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3419,8 +3463,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>デフォルトにリセット</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>添付ファイル (アイコン)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>添付ファイル有り</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>TOTP 有り</translation>
</message>
</context>
<context>
@@ -3432,21 +3482,74 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>%1 で DBus サービスの登録に失敗しました: 他のシークレットサービスが実行中です。</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n 個のエントリーが %1 に使用されました</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>%1 で DBus サービスの登録に失敗しました。&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>ファイル名</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>グループ</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>管理</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>ロックを解除して表示</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>なし</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>アプリケーション</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>管理</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo シークレットサービス: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo シークレットサービス:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>不明</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>不明</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, 実行可能: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>別のシークレットサービスが実行中です (%1)。&lt;br/&gt;シークレットサービス統合を再有効化する前に実行中のものを停止/削除してください。</translation>
</message>
</context>
<context>
@@ -3458,14 +3561,10 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: ファイルを保存できません</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Native messaging スクリプトファイルを保存できません。</translation>
+ <source>Online password validation failed</source>
+ <translation>オンラインパスワード検証に失敗しました</translation>
</message>
</context>
<context>
@@ -3535,14 +3634,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>マスターキーを計算できません</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>チャレンジレスポンスを発行することができません。</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>データベースのヘッダーがありません</translation>
</message>
@@ -3568,16 +3659,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>不正な資格情報です。再試行してください。
これが再発した場合は、データベースファイルが破損している可能性があります。</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>データベースキーを計算できません</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>チャレンジレスポンスを発行できません: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>チャレンジレスポンスを発行することができません。</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>チャレンジレスポンスを発行できません: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>マスターキーを計算できません</translation>
+ <source>Unable to calculate database key</source>
+ <translation>データベースキーを計算できません</translation>
</message>
</context>
<context>
@@ -3587,10 +3686,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>データベースのヘッダーがありません</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>マスターキーを計算できません</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>ヘッダーのチェックサムサイズが不正です</translation>
</message>
@@ -3708,6 +3803,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation>(HMAC が一致しません)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>データベースキーを計算できません: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3721,14 +3820,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>対称暗号の初期化ベクトルのサイズが不正です。</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>マスターキーを計算できません</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>KDF パラメーター VariantMap のシリアル化に失敗しました</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>データベースキーを計算できません: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3777,10 +3876,10 @@ If this reoccurs, then your database file may be corrupt.</source>
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>選択したファイルは古い KeePass 1 のデータベース (.kdb) です。
+ <translation>選択されたファイルは古い KeePass 1 のデータベース (.kdb) です。
データベース &gt; &apos;KeePass 1 データベースをインポート...&apos; をクリックすることでインポートできます。
-これは一方向の移行操作であり、インポートしたデータベースは古いバージョンである KeePassX 0.4 では開くことはできません。</translation>
+これは一方向の移行操作であり、インポートされたデータベースは古い KeePassX 0.4 のバージョンでは開くことはできません。</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
@@ -3878,10 +3977,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<translation>エントリーの文字列 Key または Value がありません</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>重複した添付ファイルが見つかりました</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>エントリーのバイナリー Key または Value がありません</translation>
</message>
@@ -3928,6 +4023,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>KeeAgent の設定ファイル構造が不正です。</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>秘密鍵は添付ファイルですが、添付ファイルは提供されていません。</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>秘密鍵が空です</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>ファイルが大きすぎるため秘密鍵にできません</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>秘密鍵を開くのに失敗しました</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3990,10 +4108,6 @@ Line %2, column %3</source>
<translation>ルート</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>マスターキーを計算できません</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>キー変換に失敗しました</translation>
</message>
@@ -4095,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>不正な資格情報です。再試行してください。
これが再発した場合は、データベースファイルが破損している可能性があります。</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>データベースキーを計算できません</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4194,23 +4312,13 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;セキュリティ対策でランダムバイトを含むキーファイルを追加できます。&lt;/p&gt;&lt;p&gt;キーファイルは誰にも知られず、絶対に無くさないよう注意してください。&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;セキュリティ対策でランダムバイトを含むキーファイルを追加できます。&lt;/p&gt;&lt;p&gt;キーファイルは誰にも知られず、無くさないようにしてください。そうしないとロックアウトされることになりかねません。&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
<translation>レガシーなキーファイル形式</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>レガシーなキーファイル形式は将来的に、
-サポートしなくなる可能性があります。
-
-マスターキーの設定で新しいキーファイルを生成してください。</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>キーファイル &apos;%1&apos; の読み込み時にエラーが発生しました
@@ -4275,9 +4383,19 @@ Message: %2</source>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
- <translation>選択したキーファイルはパスワードデータベースファイルだと思われます。キーファイルは絶対に変更されることがない、静的なファイルである必要があります。変更される可能性があるファイルでは、データベースに永久にアクセスできなくなる恐れがあります。
+ <translation>選択したキーファイルはパスワードデータベースファイルだと思われます。キーファイルは絶対に変更されることが無い、静的なファイルである必要があります。変更される可能性があるファイルでは、データベースに永久にアクセスできなくなる恐れがあります。
このファイルで続行してもよろしいですか?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>レガシーなキーファイル形式は将来的に、
+サポートされなくなる可能性があります。
+
+データベースのセキュリティ設定で新しいキーファイルを生成してください。</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4286,18 +4404,10 @@ Are you sure you want to continue with this file?</source>
<translation>データベース(&amp;D)</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>最近使用したデータベース(&amp;R)</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>ヘルプ(&amp;H)</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>エントリー(&amp;N)</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>グループ(&amp;G)</translation>
</message>
@@ -4314,46 +4424,10 @@ Are you sure you want to continue with this file?</source>
<translation>このソフトウェアについて(&amp;A)</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>データベースを開く(&amp;O)...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>データベースを保存(&amp;S)</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>データベースを閉じる(&amp;C)</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>エントリーを削除(&amp;D)</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>グループを編集(&amp;E)</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>グループを削除(&amp;D)</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>データベースを別名で保存(&amp;V)...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>データベースの設定</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>エントリーを複製(&amp;C)</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>ユーザー名をコピー(&amp;U)</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>ユーザー名をクリップボードにコピー</translation>
</message>
@@ -4366,10 +4440,6 @@ Are you sure you want to continue with this file?</source>
<translation>設定(&amp;S)</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>データベースをロック(&amp;L)</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>タイトル(&amp;T)</translation>
</message>
@@ -4394,14 +4464,6 @@ Are you sure you want to continue with this file?</source>
<translation>メモをクリップボードにコピー</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>CSV ファイルへエクスポート(&amp;E)...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>TOTP の設定...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>TOTP をコピー(&amp;T)</translation>
</message>
@@ -4446,10 +4508,6 @@ This version is not meant for production use.</source>
<translation>寄付(&amp;D)</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>バグを報告(&amp;B)</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>警告: オンスクリーンキーボード使用時に、Qt のバージョンが原因で KeePassXC がクラッシュする可能性があります。
@@ -4460,66 +4518,26 @@ KeePassXC の配布ページから AppImage をダウンロードして使用す
<translation>インポート(&amp;I)</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>属性をコピー(&amp;R)...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>新しいデータベース(&amp;N)...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>新しいデータベースを作成</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>データベースからマージ(&amp;M)...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>別の KDBX データベースからマージ</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>新しいエントリー(&amp;N)</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>新しいエントリーを追加</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>エントリーを編集(&amp;E)</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>エントリーを編集または表示</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>新しいグループ(&amp;N)</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>新しいグループを追加</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>マスターキーを変更(&amp;K)...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>データベースの設定(&amp;D)...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>パスワードをコピー(&amp;P)</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>自動入力を実行(&amp;A)</translation>
</message>
@@ -4528,33 +4546,17 @@ KeePassXC の配布ページから AppImage をダウンロードして使用す
<translation>URL を開く(&amp;U)</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 データベース...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>KeePass 1 データベースをインポート</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV ファイル...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>CSV ファイルをインポート</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>TOTP を表示...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>TOTP QR コードを表示...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>備考: KeePassXC のプレリリース版を使用しています。
+ <translation>メモ: KeePassXC のプレリリース版を使用しています。
複数のバグや小さな問題点が残っている可能性があるため、このバージョンは実用的ではありません。</translation>
</message>
<message>
@@ -4574,14 +4576,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>エクスポート(&amp;E)</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>更新を確認(&amp;C)...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>全てのファビコンをダウンロード(&amp;A)</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>並べ替え (A-Z)(&amp;A)</translation>
</message>
@@ -4594,48 +4588,290 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>パスワード生成(&amp;P)</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>ファビコンをダウンロード</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>1Password 保管庫をインポート</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>HTML ファイルへエクスポート(&amp;E)...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>スタートガイド(&amp;G)</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password 保管庫...</translation>
+ <source>&amp;User Guide</source>
+ <translation>ユーザーガイド(&amp;U)</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>1Password 保管庫をインポート</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>キーボードショートカット(&amp;K)</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>スタートガイド(&amp;G)</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>最近使用したデータベース(&amp;R)</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>スタートガイド PDF を開く</translation>
+ <source>&amp;Entries</source>
+ <translation>エントリー(&amp;E)</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>オンラインヘルプ(&amp;O)...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>属性をコピー(&amp;R)</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>ブラウザーでオンラインドキュメントを開く</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>ユーザーガイド(&amp;U)</translation>
+ <source>View</source>
+ <translation>表示</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>ユーザーガイド PDF を開く</translation>
+ <source>Theme</source>
+ <translation>テーマ</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>キーボードショートカット(&amp;K)</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>更新を確認(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>データベースを開く(&amp;O)…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>データベースを保存(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>データベースを閉じる(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>新しいデータベース(&amp;N)…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>データベースからマージ(&amp;M)…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>新しいエントリー(&amp;N)…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>エントリーを編集(&amp;E)…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>エントリーを削除(&amp;D)…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>新しいグループ(&amp;N)…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>グループを編集(&amp;E)…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>グループを削除(&amp;D)…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>全てのファビコンをダウンロード(&amp;F)…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>データベースを別名で保存(&amp;V)…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>データベースのセキュリティ(&amp;S)…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>データベースのレポート(&amp;R)...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>統計や健全性の確認など。</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>データベースの設定(&amp;D)…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>エントリーを複製(&amp;C)…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>上に移動(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>エントリーを一つ上に移動する</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>下に移動(&amp;W)</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>エントリーを一つ下に移動する</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>ユーザー名をコピー(&amp;U)</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>パスワードをコピー(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>ファビコンをダウンロード(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>データベースをロック(&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>CSV ファイル(&amp;C)…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>HTML ファイル(&amp;H)…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 データベース…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password 保管庫…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV ファイル…</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>TOTP を表示</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>QR コードを表示</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>TOTP の設定…</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>バグを報告(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>スタートガイドを開く</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>オンラインヘルプ(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>オンラインドキュメントを開く</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>ユーザーガイドを開く</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>データベースのバックアップを保存...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>鍵を SSH エージェントに追加</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>SSH エージェントから鍵を削除</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>コンパクトモード</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>自動</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>ライト</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>ダーク</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>クラシック (プラットフォームネイティブ)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>ツールバーを表示する</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>プレビューパネルを表示する</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>今後このバージョンは表示しない</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>アプリケーションを再起動しますか?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>この設定を適用するにはアプリケーションを再起動する必要があります。今すぐ再起動しますか?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>データベースの設定</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>データベースの設定を編集</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>データベースのロックを解除</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>データベースのロックを解除してより詳しい情報を表示</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>データベースをロックする</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>切断</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>このアプリケーションを切断</translation>
</message>
</context>
<context>
@@ -4654,7 +4890,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>データベース &quot;%1&quot; からマージした古いエントリー</translation>
+ <translation>データベース &quot;%1&quot; からマージされた古いエントリー</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4690,7 +4926,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Changed deleted objects</source>
- <translation>削除したオブジェクトを変更</translation>
+ <translation>削除されたオブジェクトを変更</translation>
</message>
<message>
<source>Adding missing icon %1</source>
@@ -4724,10 +4960,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>ウィザードページ</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>暗号化の設定(&amp;C)</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。</translation>
</message>
@@ -4739,27 +4971,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>簡易設定</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>暗号化の設定</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。</translation>
+ <source>Database Credentials</source>
+ <translation>データベースの資格情報</translation>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>あなただけが知る資格情報がデータベースを保護します。</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>データベースのマスターキー</translation>
+ <source>Encryption Settings</source>
+ <translation>暗号化の設定</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>あなただけが知るマスターキーがデータベースを保護します。</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。</translation>
</message>
</context>
<context>
@@ -4774,10 +5010,17 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>パスワードマネージャー</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
- <translation>ヘッダーがない不正な OpData01 です</translation>
+ <translation>ヘッダーが無い不正な OpData01 です</translation>
</message>
<message>
<source>Unable to read all IV bytes, wanted 16 but got %1</source>
@@ -4949,12 +5192,24 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>今の所パスワードは一致しています</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>パスワードを切り替え (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>パスワードを生成 (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>警告: Caps Lock が有効になっています!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>パスワードを入力してください:</translation>
+ <translation>パスワードを入力:</translation>
</message>
<message>
<source>Confirm password:</source>
@@ -4973,25 +5228,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>パスワードが一致しません。</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>マスターパスワードを生成</translation>
- </message>
- <message>
<source>Password field</source>
<translation>パスワードフィールド</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>パスワードの表示/非表示を切り替え</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>パスワード再入力フィールド</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>パスワード生成を切り替え</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5000,10 +5243,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>パスワード:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>強度</translation>
@@ -5053,14 +5292,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>単語の区切り文字:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>コピー</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>適用</translation>
- </message>
- <message>
<source>Close</source>
<translation>閉じる</translation>
</message>
@@ -5157,14 +5388,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>簡易モードに切り替え</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>簡易設定</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>生成されたパスワードから文字集合を除外する</translation>
</message>
@@ -5185,14 +5408,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>除外される文字: &quot;0&quot;、&quot;1&quot;、&quot;l&quot;、&quot;I&quot;、&quot;O&quot;、&quot;|&quot;、&quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>単語数(&amp;U):</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>再生成</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>生成されたパスワード</translation>
</message>
@@ -5241,10 +5456,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>パスワードをコピー</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>パスワードを受容</translation>
- </message>
- <message>
<source>lower case</source>
<translation>小文字</translation>
</message>
@@ -5257,8 +5468,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>先頭文字のみ大文字</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>パスワードの表示/非表示を切り替え</translation>
+ <source>Generate Password</source>
+ <translation>パスワードを生成</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>次からも選択:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>パスワード生成に使用する追加の文字</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>追加の文字</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>単語数:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>パスワードを適用</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>消去</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>パスワードを再生成 (%1)</translation>
</message>
</context>
<context>
@@ -5271,6 +5518,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>統計</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>非常に弱いパスワード</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>パスワードのエントロピーは %1 ビットです</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>弱いパスワード</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>%1/%2 で使用</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>パスワードは %1 回使用されています</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>パスワードの有効期限が切れています</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>パスワードの有効期限は %1 でした</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>パスワードの有効期限が切れそうです</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>パスワードの有効期限は %1 日後です</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>パスワードは間もなく期限切れになります</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>パスワードの有効期限は %1 です</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>健全性の確認</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5315,7 +5614,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>QObject</name>
<message>
<source>Database not opened</source>
- <translation>データベースを開いていません</translation>
+ <translation>データベースが開かれていません</translation>
</message>
<message>
<source>Database hash not available</source>
@@ -5410,10 +5709,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>追加するエントリーのパス。</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>クリップボードにエントリーのパスワードをコピーする。</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>クリップボードにコピーするエントリーのパス。</translation>
@@ -5456,7 +5751,7 @@ unsupported in the future.
Please consider generating a new key file.</source>
<translation>警告: レガシーなキーファイル形式は将来的に、
-サポートしなくなる可能性があります。
+サポートされなくなる可能性があります。
新しいキーファイルの生成を検討してください。</translation>
</message>
@@ -5512,7 +5807,7 @@ Available commands:
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>表示する属性の名前。このオプションはいくつでも指定することができ、各属性は指定した順に1行に1つずつ表示されます。属性の指定がない場合は、デフォルトの属性の概要が表示されます。</translation>
+ <translation>表示する属性の名前。このオプションはいくつでも指定することができ、各属性は指定した順に1行に1つずつ表示されます。属性の指定が無い場合は、デフォルトの属性の概要が表示されます。</translation>
</message>
<message>
<source>attribute</source>
@@ -5571,14 +5866,6 @@ Available commands:
<translation>ブラウザー統合</translation>
</message>
<message>
- <source>Press</source>
- <translation>Press</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passive</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH エージェント</translation>
</message>
@@ -5614,11 +5901,7 @@ Available commands:
</message>
<message>
<source>Successfully added entry %1.</source>
- <translation>エントリー %1 を正常に追加しました。</translation>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>現在の TOTP をクリップボードにコピーする。</translation>
+ <translation>エントリー %1 は正常に追加されました。</translation>
</message>
<message>
<source>Invalid timeout value %1.</source>
@@ -5632,21 +5915,13 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>パス %1 のエントリーには TOTP の設定がありません。</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>エントリーの現在の TOTP をクリップボードにコピーしました。</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>エントリーのパスワードをクリップボードにコピーしました。</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>%1 秒後にクリップボードを消去します...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
- <translation>クリップボードを消去しました。</translation>
+ <translation>クリップボードは消去されました。</translation>
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
@@ -5675,7 +5950,7 @@ Available commands:
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation>エントリー %1 を正常に編集しました。</translation>
+ <translation>エントリー %1 は正常に編集されました。</translation>
</message>
<message>
<source>Length %1</source>
@@ -5815,7 +6090,7 @@ Available commands:
</message>
<message>
<source>Include characters from every selected group</source>
- <translation>選択した各グループの文字を含む</translation>
+ <translation>選択された各グループの文字を含む</translation>
</message>
<message>
<source>Recursively list the elements of the group.</source>
@@ -5841,11 +6116,11 @@ Available commands:
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation>エントリー %1 を正常にゴミ箱へ移動しました。</translation>
+ <translation>エントリー %1 は正常にリサイクルされました。</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation>エントリー %1 を正常に削除しました。</translation>
+ <translation>エントリー %1 は正常に削除されました。</translation>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
@@ -5857,11 +6132,7 @@ Available commands:
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation>クリップボード操作用プログラムとして定義していません</translation>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation>プログラム %1 を起動できません</translation>
+ <translation>クリップボード操作用プログラムとして定義されていません</translation>
</message>
<message>
<source>file empty</source>
@@ -5872,18 +6143,6 @@ Available commands:
<translation>%1: (行, 列) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 ビット</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 ビット</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 ビット</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – 推奨)</translation>
</message>
@@ -5927,7 +6186,7 @@ Available commands:
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation>キーを設定していません。データベースの作成を中止します。</translation>
+ <translation>キーが設定されていません。データベースの作成を中止します。</translation>
</message>
<message>
<source>Failed to save the database: %1.</source>
@@ -5935,7 +6194,7 @@ Available commands:
</message>
<message>
<source>Successfully created new database.</source>
- <translation>新しいデータベースを正常に作成しました。</translation>
+ <translation>新しいデータベースは正常に作成されました。</translation>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
@@ -6134,10 +6393,6 @@ CPU アーキテクチャー: %2
<translation>このヘルプを表示する。</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>データベース暗号化に使用する Yubikey のスロット。</translation>
- </message>
- <message>
<source>slot</source>
<translation>スロット</translation>
</message>
@@ -6154,10 +6409,6 @@ CPU アーキテクチャー: %2
<translation>対話モードを終了する。</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>エクスポート時に使用するフォーマット。デフォルトは xml で、csv も選択可能です。</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>データベースの内容を指定した形式で標準出力にエクスポートする。</translation>
</message>
@@ -6198,10 +6449,6 @@ CPU アーキテクチャー: %2
<translation>新しいデータベースのパス。</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>XMLデータベース %1 をインポートできません</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>データベースを正常にインポートしました。</translation>
</message>
@@ -6294,10 +6541,6 @@ CPU アーキテクチャー: %2
<translation>YubiKey のスロット %1 は不正です</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>YubiKey のボタンにタッチして %1 のロックを解除してください</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>データベースを暗号化するためのパスワードを入力してください (オプション): </translation>
</message>
@@ -6313,10 +6556,6 @@ CPU アーキテクチャー: %2
<source>User name</source>
<translation>ユーザー名</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] チャレンジレスポンス - スロット %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation><numerusform>&apos;%1&apos; のパスワードは %2 回流出しています!</numerusform></translation>
@@ -6329,6 +6568,194 @@ CPU アーキテクチャー: %2
<source>Show the protected attributes in clear text.</source>
<translation>クリアテキストの保護された属性を表示する。</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>ブラウザープラグインエラー</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>%1 用の Native messaging スクリプトファイルを保存できませんでした。</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>指定した属性をクリップボードにコピーする。指定しない場合、デフォルトは &quot;パスワード&quot; です。</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>現在の TOTP をクリップボードにコピーする (&quot;-a totp&quot; と同じ)。</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>エントリーの属性をクリップボードにコピーする。</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>エラー: --attribute または --totp を一つ指定してください (両方は不可)。</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>エラー: 属性 %1 は不明瞭です。%2 と一致します。</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>属性 &quot;%1&quot; が見つかりません。</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>エントリーの &quot;%1&quot; 属性をクリップボードにコピーしました。</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>データベースへのアクセスに使用する Yubikey のスロット番号とオプションのシリアル番号 (例: 1:7370001)。</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>スロット[:シリアル]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>データベースの目標復号時間 (ミリ秒単位)。</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>時間</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>データベースの鍵ファイルを設定する。</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>データベースのパスワードを設定する。</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>%1 は復号時間として不適切です。</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>目標復号時間の範囲は %1 から %2 である必要があります。</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>データベースパスワードの設定に失敗しました。</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>鍵導出関数を %1ms の遅延でベンチマーク中。</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>鍵導出関数を %1 回設定中。</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>データベースの鍵導出設定中にエラーが発生しました。</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>エクスポート時に使用するフォーマット。デフォルトは &apos;xml&apos; で、&apos;csv&apos; も選択可能です。</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>XML データベースをインポートできません: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>データベースの情報を表示する。</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>名前: </translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>概要: </translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>暗号: </translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>ゴミ箱が有効です。</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>ゴミ箱は有効になっていません。</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>%1 は無効なコマンドです。</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>YubiKey のシリアル %1 は不正です</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>続行するために YubiKey のボタンにタッチしてください…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>空のパスワードでデータベースを作成しますか?[y/N]: </translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>パスワードを再入力: </translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>エラー: パスワードが一致しません。</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>全てのクリッピングプログラムが失敗しました。試行: %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 回)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 回, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256 ビット</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256 ビット</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256 ビット {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>ベンチマーク (遅延: %1)</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ミリ秒</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 秒</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6365,6 +6792,290 @@ CPU アーキテクチャー: %2
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>レポートから除外されているエントリーも表示する</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>理由にマウスオーバーすると追加の詳細が表示されます。エントリーをダブルクリックすると編集できます。</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>悪い</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>悪い — パスワードを変更する必要があります</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>貧弱</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>貧弱 — パスワードを変更する必要があります</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>弱い</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>弱い — パスワードの変更を検討してください</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (除外)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>このエントリーはレポートから除外されています</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>健全性データを計算中です、お待ちください...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>全て健全です。おめでとうございます!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>タイトル</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>パス</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>スコア</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>理由</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>エントリーを編集...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>レポートから除外</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>注意: このレポートはオンラインサービスの Have I Been Pwned (https://haveibeenpwned.com) に情報を送信する必要があります。続行した場合、データベースのパスワードは暗号学的ハッシュ化が施され、それらのハッシュの最初の5文字が、このサービスへ安全に送信されます。この情報からデータベースが再構成されることはなく、データベースが安全であることに変わりはありません。しかしながら、あなたの IP アドレスや送信するパスワードの数は、このサービスに公開されます。</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>オンライン分析を実行</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>レポートから除外されたエントリーも表示する</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>このビルドの KeePassXC はネットワーク機能がありません。パスワードを Have I Been Pwned のデータベースで照合するにはネットワーク機能が必要です。</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>パスワードは公開されていません。おめでとうございます!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>タイトル</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>パス</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>パスワードは公開されています…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (除外)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>このエントリーはレポートから除外されています</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>一回</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>10 回まで</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>100 回まで</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>1000 回まで</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>10,000 回まで</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>100,000 回まで</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>1,000,000 回まで</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>数百万回</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>エントリーを編集...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>レポートから除外</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>エラーアイコンがある行にマウスオーバーすると詳細を表示します。</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>値</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>データベースの統計を算出しているため、しばらくお待ちください...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>データベース名</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>概要</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>場所</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>最終更新日時</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>未保存の変更</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>はい</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>いいえ</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>データベースは変更済みですが、まだディスクに保存していません。</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>グループ数</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>エントリー数</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>期限切れエントリー数</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>データベースに期限切れのエントリーが含まれています。</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>固有パスワード</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>非固有パスワード</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>10% 以上のパスワードが使い回されています。可能な限り、それ専用のパスワードを使用してください。</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>パスワード使い回しの最大数</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>一部のパスワードが3回以上使い回されています。可能な限り、それ専用のパスワードを使用してください。</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>短いパスワードの数</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>推奨最小パスワード長は最低8文字です。</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>脆弱なパスワードの数</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>「良い」または「すばらしい」評価の長くてランダムなパスワードの使用を推奨します。</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>レポートから除外されたエントリー</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>レポートから除外されたエントリー。パスワードに問題があることが分かっているため、必ずしも問題ではありませんが、それらのエントリーのことを忘れないようにしておく必要はあるかもしれません。</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>平均パスワード長</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1文字</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>パスワード長の平均値が10文字以下です。パスワードは長いほどセキュリティが向上します。</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6376,19 +7087,19 @@ CPU アーキテクチャー: %2
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>エージェントが実行中でないため、Identity を追加できません。</translation>
+ <translation>エージェントが実行されていないため、ID を追加できません。</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>エージェントが実行中でないため、Identity を削除できません。</translation>
+ <translation>エージェントが実行されていないため、ID を削除できません。</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
- <translation>エージェントがこの Identity を拒否しました。次の理由が考えられます:</translation>
+ <translation>エージェントがこの ID を拒否しました。次の理由が考えられます:</translation>
</message>
<message>
<source>The key has already been added.</source>
- <translation>キーは既に追加済みです。</translation>
+ <translation>キーが既に追加されている。</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
@@ -6398,6 +7109,14 @@ CPU アーキテクチャー: %2
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>エージェントが確認要求をサポートしていない (オプションを確認)。</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>鍵の ID の所有権が競合しているため追加を拒否しています。</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>エージェントが実行されていないため、ID の一覧を取得できません。</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6505,26 +7224,10 @@ CPU アーキテクチャー: %2
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;データベースのゴミ箱が有効になっている場合は、エントリーをゴミ箱に直接移動し、そうでない場合は確認無しで削除します。&lt;/p&gt;&lt;p&gt;エントリーが他から参照されている場合はプロンプトを表示します。&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>クライアントによってエントリーが削除される際に確認しない</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>公開するデータベースのグループ:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>ファイル名</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>グループ</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>管理</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>認証</translation>
</message>
@@ -6533,40 +7236,20 @@ CPU アーキテクチャー: %2
<translation>これらのアプリケーションが現在接続済みです:</translation>
</message>
<message>
- <source>Application</source>
- <translation>アプリケーション</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>切断</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>データベースの設定</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>クライアントによってエントリーが削除される際に確認しない</translation>
</message>
<message>
- <source>Edit database settings</source>
- <translation>データベースの設定を編集</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;エラー:&lt;/b&gt; DBus への接続に失敗しました。DBus の設定を確認してください。</translation>
</message>
<message>
- <source>Unlock database</source>
- <translation>データベースのロックを解除</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;警告:&lt;/b&gt; </translation>
</message>
<message>
- <source>Unlock database to show more information</source>
- <translation>データベースのロックを解除してより詳しい情報を表示</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>データベースをロックする</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>ロックを解除して表示</translation>
- </message>
- <message>
- <source>None</source>
- <translation>なし</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>プラグインをアクティブにするために現在の変更を保存し、このセクションの編集を有効にしてください。</translation>
</message>
</context>
<context>
@@ -6617,7 +7300,7 @@ CPU アーキテクチャー: %2
</message>
<message>
<source>Imported certificates</source>
- <translation>インポートした証明書</translation>
+ <translation>インポートされた証明書</translation>
</message>
<message>
<source>Trust</source>
@@ -6682,11 +7365,11 @@ CPU アーキテクチャー: %2
</message>
<message>
<source>Exporting changed certificate</source>
- <translation>変更した証明書をエクスポートしています</translation>
+ <translation>変更された証明書をエクスポートしています</translation>
</message>
<message>
<source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation>エクスポートする証明書は使用中の証明書と同一ではありません。現在の証明書をエクスポートしますか?</translation>
+ <translation>エクスポートされる証明書は使用中の証明書と同一ではありません。現在の証明書をエクスポートしますか?</translation>
</message>
<message>
<source>Signer:</source>
@@ -6839,10 +7522,6 @@ CPU アーキテクチャー: %2
<translation>署名付きのもののインポートに成功しました</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>予期しないエラーです</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>未署名共有コンテナはサポートしていません - インポートを阻害しました</translation>
</message>
@@ -6871,7 +7550,7 @@ CPU アーキテクチャー: %2
</message>
<message>
<source>Imported from %1</source>
- <translation>%1 からインポートしました</translation>
+ <translation>%1 からインポートされました</translation>
</message>
<message>
<source>Export to %1 failed (%2)</source>
@@ -6922,7 +7601,7 @@ CPU アーキテクチャー: %2
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation>備考: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。</translation>
+ <translation>メモ: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
@@ -7012,6 +7691,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>無効な URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7102,6 +7788,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] 設定済みスロット - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] チャレンジレスポンス - スロット %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Press</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passive</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>不正なスロットが指定されました: %1 - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>YubiKey のインスタンスが初期化されていません。</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>ハードウェアキーは現在使用中です。</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>シリアルナンバー %1 のハードウェアキーが見つかりませんでした。続行するにはハードウェアキーを接続してください。</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>ユーザーとの対話の待機中にハードウェアキーがタイムアウトしました。</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>ハードウェアキーへのアクセス時に USB のエラーが発生しました: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>チャレンジレスポンスでエラーが発生しました: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7116,14 +7849,6 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;セキュリティ対策として &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt; を使用できます。&lt;/p&gt;&lt;p&gt;YubiKey のスロットの1つを &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 チャレンジレスポンス&lt;/a&gt; に設定する必要があります。&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKey を検出できませんでした。挿入しているかどうか確認してください。</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey が挿入されていません。</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>ハードウェアトークンを更新</translation>
</message>
@@ -7131,5 +7856,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>ハードウェアキースロットを選択</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>ハードウェアキーが見つかりませんでした。</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>選択したハードウェアキーのスロットはチャレンジレスポンスをサポートしていません。</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>ハードウェアキーを検出中…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>検出したハードウェアキーはありません</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_kk.ts b/share/translations/keepassx_kk.ts
deleted file mode 100644
index 059c683da..000000000
--- a/share/translations/keepassx_kk.ts
+++ /dev/null
@@ -1,5424 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="kk" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Debug Info</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Libraries:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автотеру</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation>Қолданба баптаулары</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Жалпы</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Қауіпсіздік</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation>Соңғы дерекқорларды есте сақтау:</translation>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation>Әр өзгерістен кейін автосақтау</translation>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation>Шығу кезінде автосақтау</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation>Жазбаны жасау кезінде топ таңбашасын қолдану</translation>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation>Алмасу буферіне көшіру кезінде қолданбаны қайыру</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Жалпы</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation>Жүйелік трей таңбашасын қолдану</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation>Қолданба қайырылған кезде терезені жүйелік трейге жасыру</translation>
- </message>
- <message>
- <source>Language</source>
- <translation>Тіл</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автотеру</translation>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Глобалды автотеру жарлығы</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation>Алмасу буферін тазалау алдындағы кідіріс</translation>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>сек</translation>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation>Дерекқорларды белсенділік жоқ кезде блоктау алдындағы кідіріс</translation>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Терезе атауына сай келетін жазбаны табу мүмкін емес:</translation>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автотеру</translation>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Терезе</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Тізбек</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>Үнсіз келісім тізбегі</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Топ</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Атауы</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Пайдаланушы аты</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Тізбек</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation>Автотеру үшін жазбаны таңдаңыз:</translation>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deny</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Жалпы</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Кеңейтілген</translation>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encoding</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error</source>
- <translation>Қате</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Түбір</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation>Басты парольді енгізіңіз:</translation>
- </message>
- <message>
- <source>Key File:</source>
- <translation>Кілттер файлы:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Пароль:</translation>
- </message>
- <message>
- <source>Browse</source>
- <translation>Шолу</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Барлық файлдар</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>Кілттер файлдары</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>Кілттер файлын таңдаңыз</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Жалпы</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Қауіпсіздік</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation>Түрлендірулер саны:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation>Дерекқор аты:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>Дерекқор сипаттамасы:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>Үнсіз келісім пайдаланушы аты:</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>Макс. тарих саны:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>Макс. тарих өлшемі:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation>МиБ</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 дерекқоры</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Барлық файлдар</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>Дерекқорды ашу</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>CSV файлы</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>KeePass 1 дерекқорын ашу</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>KeePass 1 дерекқоры</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation>Дерекқорды CSV файлына экспорттау</translation>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation>CSV файлына жазу сәтсіз аяқталды.</translation>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>&quot;%1&quot; жазбасын өшіруді шынымен қалайсыз ба?</translation>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>&quot;%1&quot; жазбасын қоқыс шелегіне тастауды шынымен қалайсыз ба?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>&quot;%1&quot; тобын өшіруді шынымен қалайсыз ба?</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation>&quot;%1&quot; өзгертілген.
-Өзгерістерді сақтау керек пе?</translation>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation>Өзгерістерді сақтау керек пе?</translation>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation>Дерекқорды қалайша сақтау</translation>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 дерекқоры</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>Жазба</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Кеңейтілген</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Таңбаша</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автотеру</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Қасиеттері</translation>
- </message>
- <message>
- <source>History</source>
- <translation>Тарихы</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation>Жазба тарихы</translation>
- </message>
- <message>
- <source>Add entry</source>
- <translation>Жазбаны қосу</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>Жазбаны түзету</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Әр түрлі парольдер көрсетілді.</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>Жаңа атрибут</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>Ертең</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation>Қосымша атрибуттар</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>Қосу</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Салынымдар</translation>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Бұл жазба үшін автотеруді іске қосу</translation>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>Терезе атауы:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>Көрсету</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>Қалпына келтіру</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>Барлығын өшіру</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>URL:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Пароль:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Қайталау:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>Атауы:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Естеліктер</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation>Сақталған баптаулар</translation>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation>Пайдаланушы аты:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Мерзімі аяқталады</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Топ</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Таңбаша</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Қасиеттері</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>Топты қосу</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>Топты түзету</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>Іске қосу</translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>Сөндіру</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation>Аталық топтан мұралау (%1)</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Пароль:</translation>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>Аты</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Естеліктер</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Мерзімі аяқталады</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Іздеу</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автотеру</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>Таңдауыңызша таңбашаны қосу</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation>Таңдауыңызша таңбашаны өшіру</translation>
- </message>
- <message>
- <source>Download favicon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation>Суреттер</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Барлық файлдар</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>Жасалған:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>Өзгертілген:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>Қатынаған:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>Uuid:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>Аты</translation>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation>Қосу</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>Ашу</translation>
- </message>
- <message>
- <source>Save</source>
- <translation>Сақтау</translation>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>Аты</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>Соңғы өзгертілген</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Атауы</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Пайдаланушы аты</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Топ</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Атауы</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Пайдаланушы аты</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Естеліктер</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Мерзімі аяқталады</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Салынымдар</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Жалпы</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Пайдаланушы аты</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Салынымдар</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Естеліктер</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation>Терезе</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Тізбек</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation>Іздеу</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation>Қоқыс шелегі</translation>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Басты парольді есептеу мүмкін емес</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Пароль қате, немесе дерекқор файлы зақымдалған.</translation>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Басты парольді есептеу мүмкін емес</translation>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Басты парольді есептеу мүмкін емес</translation>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Басты парольді есептеу мүмкін емес</translation>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>KeePass дерекқоры емес.</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation>KeePass1 дерекқорын импорттау</translation>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation>Дерекқорды ашу мүмкін емес.</translation>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation>Кілттер файлын оқу мүмкін емес.</translation>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>KeePass дерекқоры емес.</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation>Шифрлеу алгоритміне қолдау жоқ.</translation>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation>KeePass дерекқоры нұсқасына қолдау жоқ.</translation>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>Түбір</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Басты парольді есептеу мүмкін емес</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Пароль қате, немесе дерекқор файлы зақымдалған.</translation>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>Шолу</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>Кілттер файлдары</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Барлық файлдар</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>Кілттер файлын жасау...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>Кілттер файлын таңдаңыз</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Дерекқор баптаулары</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation>Пайдаланушы атын алмасу буферіне көшіріп алу</translation>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation>Парольді алмасу буферіне көшіріп алу</translation>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation>Баптаулар</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation>Терезені көрсету/жасыру</translation>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>Түбір</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>Парольді енгізіңіз:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Пароль:</translation>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>Таңбалар түрлері</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>Бас әріптер</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>Кіші әріптер</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>Сандар</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>Арнайы таңбалар</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation>Ұқсайтын таңбаларға жол бермеу</translation>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation>Қабылдау</translation>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Кеңейтілген</translation>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>0-9</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>Сөндіру</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Топ</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Атауы</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Пайдаланушы аты</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Естеліктер</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation>таңдауыңызша баптаулар файлына дейінгі жол</translation>
- </message>
- <message>
- <source>key file of the database</source>
- <translation>дерекқордың кілттер файлы</translation>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation>Криптографиялық функцияларды сынау кезіндегі қатаң қате орын алды.</translation>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation>Сығу кезінде zlib ішкі қатесі орын алған:</translation>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation>Астындағы құрылғыға жазу қатесі:</translation>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation>Астындағы құрылғыны ашу қатесі:</translation>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation>Астындағы құрылғыдан деректерді оқу қатесі:</translation>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation>Тарқату кезінде zlib ішкі қатесі орын алған:</translation>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation>zlib-тің бұл нұсқасы gzip пішімін қолдамайды.</translation>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation>Ішкі zlib қатесі:</translation>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>Іздеу</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Өшіру</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Барлық файлдар</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>сек</translation>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_ko.ts b/share/translations/keepassx_ko.ts
index 29a0c725f..8d23b67c4 100644
--- a/share/translations/keepassx_ko.ts
+++ b/share/translations/keepassx_ko.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH 에이전트 사용(다시 시작 필요)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Pageant 대신 OpenSSH for Windows 사용</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>모든 일반 설정과 보안 설정을 초기화하시겠습니까?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>파일 관리</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>데이터베이스 파일 안전 저장(Dropbox 등과 호환되지 않을 수 있음)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>저장하기 전에 데이터베이스 파일 백업</translation>
</message>
@@ -143,10 +171,6 @@
<translation>끝낼 때 자동 저장</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>데이터가 변경되지 않았을 때 데이터베이스를 수정된 것으로 표시하지 않음(예: 그룹 확장)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>외부에서 데이터베이스를 수정했을 때 자동으로 새로 고침</translation>
</message>
@@ -159,18 +183,6 @@
<translation>항목을 만들 때 그룹 아이콘 사용</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>항목 미리 보기 패널 숨기기</translation>
- </message>
- <message>
- <source>General</source>
- <translation>일반</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>도구 모음(아이콘) 숨기기</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>프로그램을 끝내지 않고 최소화</translation>
</message>
@@ -179,10 +191,6 @@
<translation>시스템 트레이 아이콘 표시</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>어두운 시스템 트레이 아이콘</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>시스템 트레이로 최소화</translation>
</message>
@@ -203,23 +211,11 @@
<translation>자동 입력 시 항상 묻기</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>전역 자동 입력 단축키</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>자동 입력 지연 시간</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>자동 입력 시작 지연 시간</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>이동 가능한 도구 모음</translation>
</message>
@@ -244,10 +240,6 @@
<translation>업데이트를 확인할 때 베타 릴리스 포함</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>단추 스타일:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>언어:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>도구 모음 단추 스타일</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>메모에 고정폭 글꼴 사용</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>언어 선택</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>기본값으로 설정 복원</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>전역 자동 입력 단축키</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>자동 입력 시작 지연 시간(밀리초 단위)</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>자동 입력 이후 이전에 잠긴 데이터베이스 다시 잠그기</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>암호가 보일 때 반복하지 않음</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>암호를 편집할 때 숨기지 않기</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>빈 암호 필드에 자리 비움자 사용하지 않기</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>항목 미리 보기 패널에서 암호 숨기기</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>다음 시간 이후 검색어 비우기</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -461,11 +489,11 @@
</message>
<message>
<source>Sequence</source>
- <translation>순서</translation>
+ <translation>시퀀스</translation>
</message>
<message>
<source>Default sequence</source>
- <translation>기본 순서</translation>
+ <translation>기본 시퀀스</translation>
</message>
</context>
<context>
@@ -484,7 +512,7 @@
</message>
<message>
<source>Sequence</source>
- <translation>순서</translation>
+ <translation>시퀀스</translation>
</message>
</context>
<context>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-브라우저 접근 확인</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>이 선택 기억하기</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>허용</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>거부</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1에서 다음 항목의 암호를 요청했습니다.
-접근을 허용할 지 여부를 선택하십시오.</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>접근 허용</translation>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
- <translation>접근 거부</translation>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Please select the correct database for saving credentials.</source>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>대화 상자</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: 새 키 연결 요청</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>KeePassXC-브라우저에서 데이터베이스에 접근하려면 필요합니다</translation>
+ <source>Save and allow access</source>
+ <translation>저장하고 접근 허용</translation>
</message>
<message>
- <source>General</source>
- <translation>일반</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: 기존 키를 덮어쓰시겠습니까?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>다음 브라우저에 통합:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>이름이 &quot;%1&quot;인 공유 암호화 키가 이미 있습니다.
+덮어쓰시겠습니까?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>Google 크롬(&amp;G)</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: 항목 업데이트</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>Firefox(&amp;F)</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>%1 - %2의 정보를 업데이트하시겠습니까?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>Chromium(&amp;C)</translation>
+ <source>Abort</source>
+ <translation>중지</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>Vivaldi(&amp;V)</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>속성을 사용자 정의 데이터로 변환 중…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>인증 정보가 필요할 때 알림 표시(&amp;N)</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: KeePassHTTP 속성 변환됨</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>데이터베이스가 잠겼을 때 잠금 해제 요청(&amp;Q)</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>%1개 항목의 속성을 변환했습니다.
+키 %2개를 사용자 정의 데이터로 이동했습니다.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>키 %n개를 사용자 정의 데이터로 이동했습니다.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>같은 스키마(http://, https://, ftp://)를 사용하는 항목만 반환합니다.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: KeePassHTTP 속성이 있는 항목을 찾을 수 없습니다!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>URL 스키마 일치(예: https://...)(&amp;M)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>현재 활성화된 데이터베이스에 KeePassHTTP 속성이 있는 항목이 없습니다.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>도메인이 일치하는 모든 항목 대신 지정한 URL과 일치하는 항목만 반환합니다.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: 레거시 브라우저 통합 설정 감지됨</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>가장 잘 일치하는 항목만 반환(&amp;R)</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: 새 그룹 생성</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>제목 순으로 일치하는 항목 정렬(&amp;M)</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>새 그룹 &quot;%1&quot;을(를) 생성하는 요청을 받았습니다.
+이 그룹을 생성하시겠습니까?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>사용자 이름 순으로 일치하는 항목 정렬(&amp;U)</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>KeePassXC-브라우저 설정을 데이터베이스 설정으로 이동해야 합니다.
+현재 브라우저 연결을 유지하려면 이 작업이 필요합니다.
+존재하는 설정을 이전하시겠습니까?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>고급</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>더 이상 이 경고 표시하지 않기</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>저장된 암호에 접근하기 전에 묻지 않기(&amp;A)</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>다음 데이터베이스 연결 요청을 받았습니다:
+%1
+
+데이터베이스 연결을 식별할 수 있는 이름이나 ID를 입력하십시오. 예:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>저장된 암호를 업데이트하기 전에 묻지 않기(&amp;U)</translation>
+ <source>Dialog</source>
+ <translation>대화 상자</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>모든 열린 데이터베이스에서 저장된 암호 검색(&amp;H)</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>KeePassXC-브라우저에서 데이터베이스에 접근하려면 필요합니다</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>문자열 필드를 자동으로 만들거나 업데이트하는 것은 지원되지 않습니다.</translation>
+ <source>Enable browser integration</source>
+ <translation>브라우저 통합 활성화</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&quot;KPH: &quot;로 시작하는 고급 문자열 필드 반환(&amp;R)</translation>
+ <source>General</source>
+ <translation>일반</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>네이티브 메시징 스크립트에서 사용하는 KeePassXC 및 keepassxc-proxy 실행 파일 경로를 시작할 때 자동으로 업데이트합니다.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Snap으로 설치한 브라우저는 지원하지 않습니다.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>시작할 때 네이티브 메시징 선언 파일 업데이트(&amp;N)</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>다음 브라우저에 통합:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>KeePassXC와 브라우저 확장 간 프록시 프로그램을 지원합니다.</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>KeePassXC와 브라우저 확장 간 프록시 프로그램 사용(&amp;P)</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>프록시를 직접 설치했으면 사용자 정의 프록시 위치를 지정하십시오.</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>사용자 정의 프록시 위치 사용(&amp;C)</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>찾아보기...</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;경고:&lt;/b&gt; 다음 옵션은 신중하게 사용하십시오!</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>사용자 정의 프록시 위치 지정</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Tor 브라우저(&amp;T)</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>실행 파일</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>모든 파일</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>같은 스키마(http://, https://, ftp://)를 사용하는 항목만 반환합니다.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>HTTP 기본 인증 묻지 않기(&amp;B)</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Snap 샌드박스로 인하여 브라우저 확장 기능을 사용하려면 스크립트를 실행해야 합니다.&lt;br /&gt;%1에서 스크립트를 확인할 수 있습니다</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>도메인이 일치하는 모든 항목 대신 지정한 URL과 일치하는 항목만 반환합니다.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>브라우저 확장 기능을 위한 추가 절차를 참조하십시오</translation>
+ <source>Return only best-matching credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>브라우저 통합을 사용하려면 KeePassXC-브라우저가 필요합니다.&lt;br /&gt; %1 및 %2용으로 다운로드할 수 있습니다. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>만료된 인증 정보도 반환합니다. 제목에 [만료됨] 문자열이 추가됩니다.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>Brave(&amp;B)</translation>
+ <source>Allow returning expired credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>만료된 인증 정보도 반환합니다. 제목에 [만료됨] 문자열이 추가됩니다.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>확장 기능에 연결된 모든 데이터베이스에서 일치하는 인증 정보를 반환합니다.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>만료된 인증 정보 반환 허용(&amp;A)</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>브라우저 통합 활성화</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Snap으로 설치한 브라우저는 지원하지 않습니다.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>확장 기능에 연결된 모든 데이터베이스에서 일치하는 인증 정보를 반환합니다.</translation>
+ <source>Advanced</source>
+ <translation>고급</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>문자열 필드를 자동으로 만들거나 업데이트하는 것은 지원되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation type="unfinished"/>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>레거시 KeePassHTTP 설정을 이전하는 대화 상자를 표시하지 않습니다.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>KeePassHTTP 설정 이전 묻지 않기(&amp;D)</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>네이티브 메시징 스크립트에서 사용하는 KeePassXC 및 keepassxc-proxy 실행 파일 경로를 시작할 때 자동으로 업데이트합니다.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>프록시를 직접 설치했으면 사용자 정의 프록시 위치를 지정하십시오.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Please select the correct database for saving credentials.</source>
<translation>사용자 정의 프록시 파일 찾아보기</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;경고&lt;/b&gt;, keepassxc-proxy 프로그램을 찾을 수 없습니다!&lt;br /&gt;KeePassXC 설치 디렉터리를 확인하거나 고급 설정의 사용자 경로를 확인하십시오.&lt;br /&gt;프록시 프로그램이 없으면 브라우저 통합 기능을 사용할 수 없습니다.&lt;br /&gt;예상하는 경로: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>찾아보기...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: 새 키 연결 요청</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>저장하고 접근 허용</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: 기존 키를 덮어쓰시겠습니까?</translation>
+ <source>Toolbar button style</source>
+ <translation>도구 모음 단추 스타일</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>이름이 &quot;%1&quot;인 공유 암호화 키가 이미 있습니다.
-덮어쓰시겠습니까?</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: 항목 업데이트</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>%1 - %2의 정보를 업데이트하시겠습니까?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>중지</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>속성을 사용자 정의 데이터로 변환 중…</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: KeePassHTTP 속성 변환됨</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>%1개 항목의 속성을 변환했습니다.
-키 %2개를 사용자 정의 데이터로 이동했습니다.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>키 %n개를 사용자 정의 데이터로 이동했습니다.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Snap 샌드박스로 인하여 브라우저 확장 기능을 사용하려면 스크립트를 실행해야 합니다.&lt;br /&gt;%1에서 스크립트를 확인할 수 있습니다</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: KeePassHTTP 속성이 있는 항목을 찾을 수 없습니다!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>현재 활성화된 데이터베이스에 KeePassHTTP 속성이 있는 항목이 없습니다.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>브라우저 확장 기능을 위한 추가 절차를 참조하십시오</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: 레거시 브라우저 통합 설정 감지됨</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: 새 그룹 생성</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;경고:&lt;/b&gt; 다음 옵션은 신중하게 사용하십시오!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>새 그룹 &quot;%1&quot;을(를) 생성하는 요청을 받았습니다.
-이 그룹을 생성하시겠습니까?
-</translation>
+ <source>Executable Files</source>
+ <translation>실행 파일</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>KeePassXC-브라우저 설정을 데이터베이스 설정으로 이동해야 합니다.
-현재 브라우저 연결을 유지하려면 이 작업이 필요합니다.
-존재하는 설정을 이전하시겠습니까?</translation>
+ <source>All Files</source>
+ <translation>모든 파일</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>더 이상 이 경고 표시하지 않기</translation>
+ <source>Select custom proxy location</source>
+ <translation>사용자 정의 프록시 위치 지정</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>다음 데이터베이스 연결 요청을 받았습니다:
-%1
-
-데이터베이스 연결을 식별할 수 있는 이름이나 ID를 입력하십시오. 예:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-laptop.</translation>
<translation>주석 시작 글자</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>첫 레코드에 필드 이름 포함</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>&apos;\&apos; 글자를 탈출 문자로 간주</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>미리 보기</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>칸 레이아웃</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>CSV 파일에 없음</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>CSV 파일에서 가져옴</translation>
</message>
@@ -971,14 +1025,6 @@ chrome-laptop.</translation>
<translation>오류</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>빈 필드 이름 %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>칸 %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>CSV 파일에 오류가 있습니다!</translation>
</message>
@@ -1008,6 +1054,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>CSV 가져오기 미리 보기</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>마지막 수정</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>암호</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>생성</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>메모</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>제목</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>그룹</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>사용자 이름</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>루트</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>파일 %1이(가) 존재하지 않습니다.</translation>
</message>
@@ -1078,6 +1171,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>휴지통</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>암호</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1131,10 +1237,6 @@ Please consider generating a new key file.</source>
<translation>키 파일을 열 수 없음: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>슬롯 선택...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>KeePassXC 데이터베이스 잠금 해제</translation>
</message>
@@ -1147,14 +1249,6 @@ Please consider generating a new key file.</source>
<translation>암호 필드</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>암호 표시 여부 전환</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>키 파일 선택</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>하드웨어 키 슬롯 선택</translation>
</message>
@@ -1219,10 +1313,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
&lt;p&gt;더 많은 정보를 보려면 누르십시오...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;데이터베이스 보안 향상을 위하여 마스터 암호 외에도 비밀 파일을 사용할 수 있습니다. 데이터베이스 보안 설정에서 비밀 파일을 생성할 수 있습니다.&lt;/p&gt;&lt;p&gt;이 파일은 *.kdbx 데이터베이스 파일이 &lt;strong&gt;아닙니다!&lt;/strong&gt;&lt;br&gt;만약 키 파일이 없다면 이 필드를 비워 두십시오.&lt;/p&gt;&lt;p&gt;더 많은 정보를 보려면 누르십시오...&lt;/p&gt; </translation>
- </message>
- <message>
<source>Key file help</source>
<translation>키 파일 도움말</translation>
</message>
@@ -1231,10 +1321,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>키 파일 선택...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>데이터베이스 파일은 키 파일로 사용할 수 없습니다.</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>데이터베이스 파일을 자기 자신의 키 파일로 사용할 수 없습니다.
키 파일이 없는 경우, 해당 필드를 비워두십시오.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>YubiKey의 단추를 누르십시오!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,10 +1377,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>보안</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>마스터 키</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>암호화 설정</translation>
</message>
@@ -1278,6 +1384,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>브라우저 통합</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-브라우저 설정</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>모든 브라우저 연결 해제(&amp;D)</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>항목의 모든 사이트별 설정 삭제(&amp;E)</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>KeePassHTTP 속성을 KeePassXC-브라우저 사용자 정의 데이터로 이동(&amp;C)</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>저장된 키</translation>
</message>
@@ -1405,6 +1503,66 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>선택한 키 삭제</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>생성</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>추가 보호 추가...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>암호가 설정되지 않았음</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>경고! 암호를 설정하지 않았습니다. 데이터베이스 암호를 설정하지 않는 것은 추천하지 않습니다!
+
+암호를 지정하지 않고 계속 진행하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>암호 없이 계속</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>암호화 키가 추가되지 않았음</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>데이터베이스를 보호할 암호화 키를 최소 하나 추가해야 합니다!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1587,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>변환 횟수:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>1초 지연 벤치마크</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>메모리 사용량:</translation>
</message>
@@ -1453,14 +1607,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>변경</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5초</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>시간을 더 늘리면 보호 정도를 높일 수 있지만 데이터베이스를 여는 데 더 오랜 시간이 걸릴 것입니다.</translation>
</message>
@@ -1530,23 +1676,13 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform> MiB</numerusform></translation>
+ <translation><numerusform>MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>개 스레드</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1초</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>기존 복호화 시간 변경</translation>
@@ -1579,6 +1715,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation>병렬화</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1731,16 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>내보낼 항목</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>이 데이터베이스 내보내지 않기(&amp;X)</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>다음 그룹의 항목 내보내기(&amp;U):</translation>
+ <source>Expose entries under this group:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>이 설정을 변경하려면 fd.o 비밀 서비스를 활성화하십시오.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1642,10 +1786,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>추가 데이터베이스 설정</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>압축 사용(추천)(&amp;C)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>데이터베이스 이름 필드</translation>
</message>
@@ -1679,6 +1819,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation>(이전)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1857,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>추가 보호 추가...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>암호화 키가 추가되지 않았음</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>데이터베이스를 보호할 암호화 키를 최소 하나 추가해야 합니다!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>암호가 설정되지 않았음</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>경고! 암호를 설정하지 않았습니다. 데이터베이스 암호를 설정하지 않는 것은 추천하지 않습니다!
-
-암호를 지정하지 않고 계속 진행하시겠습니까?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>알 수 없는 오류</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>마스터 키를 변경할 수 없음</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>암호 없이 계속</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1876,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>통계</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>오류 아이콘이 표시된 항목 위에 마우스를 올려 놓으면 자세한 정보를 표시합니다.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>이름</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>값</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>데이터베이스 이름</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>설명</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>위치</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>마지막 저장</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>저장하지 않은 변경 사항</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>예</translation>
- </message>
- <message>
- <source>no</source>
- <translation>아니요</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>데이터베이스가 수정되었지만 변경 사항을 디스크에 저장하지 않았습니다.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>그룹 개수</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>항목 개수</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>내보낸 항목 개수</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>데이터베이스에 만료된 항목이 포함되어 있습니다.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>중복되지 않는 암호</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>중복된 암호</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>전체 암호 중 10% 이상을 재사용하고 있습니다. 가능하다면 유일한 암호를 사용하십시오.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>최대 암호 재사용</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>일부 암호가 3곳 이상에서 재사용되고 있습니다. 가능하다면 유일한 암호를 사용하십시오.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>짧은 암호 개수</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>최소 8자 이상의 암호를 사용하십시오.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>약한 암호 개수</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>암호 강도가 &apos;좋음&apos;이나 &apos;매우 좋음&apos; 등급으로 분류된 긴 무작위 암호를 사용하는 것을 추천합니다.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>평균 암호 길이</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1자</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>평균 암호 길이가 10자 이하입니다. 긴 암호를 사용할수록 더 안전합니다.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>데이터베이스 통계를 계산하는 동안 잠시 기다려 주십시오...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1984,6 +1970,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>데이터베이스를 암호화되지 않은 파일로 내보냅니다. 암호와 기타 민감 정보를 노출시킬 수 있습니다! 계속 진행하시겠습니까?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1993,7 +1983,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>항목 &quot;%1&quot;을(를) 삭제하시겠습니까?</translation>
+ <translation>정말 항목 &quot;%1&quot;을(를) 삭제하시겠습니까?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
@@ -2017,7 +2007,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>그룹 &quot;%1&quot;을(를) 삭제하시겠습니까?</translation>
+ <translation>정말 그룹 &quot;%1&quot;을(를) 삭제하시겠습니까?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2164,6 +2154,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>데이터베이스가 읽기 전용 모드로 열렸습니다. 자동 저장을 비활성화합니다.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2208,14 +2206,6 @@ Disable safe saves and try again?</source>
<translation>비밀 키 선택</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>비밀 키로 사용하기에 파일이 너무 큼</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>비밀 키를 열 수 없음</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>항목 과거 기록</translation>
</message>
@@ -2228,10 +2218,6 @@ Disable safe saves and try again?</source>
<translation>항목 편집</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>다른 암호를 입력하였습니다.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>새 속성</translation>
</message>
@@ -2252,29 +2238,13 @@ Disable safe saves and try again?</source>
<translation><numerusform>%n개월</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>생성된 암호를 적용하시겠습니까?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>이 항목에 생성된 암호를 적용하시겠습니까?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>항목을 업데이트했습니다.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>항목에 저장되지 않은 변경 사항이 있음</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>새 속성 %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[보호됨] 보거나 편집하려면 누르십시오</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n년</numerusform></translation>
@@ -2295,6 +2265,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation>이 URL을 삭제하시겠습니까?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>보이기</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2370,6 +2360,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>배경색 선택</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2378,14 +2376,6 @@ Disable safe saves and try again?</source>
<translation>이 항목 자동 입력 사용</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>그룹의 기본 자동 입력 순서 사용(&amp;G)</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>사용자 정의 자동 입력 순서 사용(&amp;U):</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>창 연결</translation>
</message>
@@ -2403,7 +2393,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>이 조합에 지정된 순서 사용:</translation>
+ <translation>이 조합에 지정된 시퀀스 사용:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2441,6 +2431,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation>이 창의 사용자 정의 자동 입력 순서</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>그룹의 기본 자동 입력 시퀀스 사용</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>사용자 정의 자동 입력 시퀀스 사용:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2476,6 +2474,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>편집</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2527,18 +2533,10 @@ Disable safe saves and try again?</source>
<translation>암호:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>암호 확인:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>제목:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>메모</translation>
- </message>
- <message>
<source>Presets</source>
<translation>사전 설정</translation>
</message>
@@ -2551,10 +2549,6 @@ Disable safe saves and try again?</source>
<translation>사용자 이름:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>만료 기간</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL 필드</translation>
</message>
@@ -2563,22 +2557,10 @@ Disable safe saves and try again?</source>
<translation>URL의 파비콘 다운로드</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>암호 확인 필드</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>암호 생성기 전환</translation>
- </message>
- <message>
<source>Password field</source>
<translation>암호 필드</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>암호 표시 여부 전환</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>메모 표시 여부 전환</translation>
</message>
@@ -2610,6 +2592,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>만료 여부 전환</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>메모:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2745,10 +2739,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>폼</translation>
- </message>
- <message>
<source>Type:</source>
<translation>형식:</translation>
</message>
@@ -2757,10 +2747,6 @@ Disable safe saves and try again?</source>
<translation>경로:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>암호:</translation>
</message>
@@ -2844,57 +2830,25 @@ Supported extensions are: %1.</source>
<translation>공유할 파일 경로 필드</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>공유할 파일 찾아보기</translation>
- </message>
- <message>
<source>Password field</source>
<translation>암호 필드</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>암호 표시 여부 전환</translation>
+ <source>Clear fields</source>
+ <translation>필드 비우기</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>암호 생성기 전환</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation>필드 비우기</translation>
+ <source>Browse...</source>
+ <translation>찾아보기...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>이름</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>메모</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>만료 기간</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>찾기</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>자동 입력</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>그룹의 기본 자동 입력 순서 사용(&amp;G)</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>기본 자동 입력 시퀀스 설정(&amp;Q)</translation>
- </message>
- <message>
<source>Name field</source>
<translation>이름 필드</translation>
</message>
@@ -2922,18 +2876,38 @@ Supported extensions are: %1.</source>
<source>Default auto-type sequence field</source>
<translation>기본 자동 입력 순서 필드</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>기본 아이콘 사용(&amp;U)</translation>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>사용자 정의 아이콘 사용(&amp;M)</translation>
+ <source>Search:</source>
+ <translation type="unfinished"/>
</message>
<message>
+ <source>Notes:</source>
+ <translation>메모:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>사용자 정의 아이콘 추가</translation>
</message>
@@ -2998,14 +2972,6 @@ Supported extensions are: %1.</source>
<translation>선택한 아이콘을 하위 그룹과 항목에 적용</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>다음에 아이콘 적용(&amp;T)...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>이 항목에만 적용</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>하위 그룹에도 적용</translation>
</message>
@@ -3021,6 +2987,22 @@ Supported extensions are: %1.</source>
<source>Existing icon selected.</source>
<translation>기존 아이콘을 선택했습니다.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>기본 아이콘 사용</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>사용자 정의 아이콘 사용</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3205,6 +3187,17 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation>선택한 첨부 파일 저장</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3288,12 +3281,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>첨부</translation>
</message>
<message>
- <source>Yes</source>
- <translation>예</translation>
+ <source>Size</source>
+ <translation>크기</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3344,7 +3377,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Sequence</source>
- <translation>순서</translation>
+ <translation>시퀀스</translation>
</message>
<message>
<source>Searching</source>
@@ -3393,6 +3426,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3419,8 +3459,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>기본값으로 복원</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>첨부(아이콘)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3432,21 +3478,74 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>%1의 DBus 서비스를 등록할 수 없음: 다른 비밀 서비스가 실행 중입니다.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%1에서 항목 %n개를 사용함</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>그룹</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>관리</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>잠금 해제해서 보기</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>프로그램</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>관리</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>fd.o 비밀 서비스: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>알 수 없음</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>알 수 없음</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3458,14 +3557,10 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: 파일을 저장할 수 없음!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>네이티브 메시징 스크립트 파일을 저장할 수 없습니다.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3535,14 +3630,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>마스터 키를 계산할 수 없습니다</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>질의 응답을 실행할 수 없습니다.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>데이터베이스 헤더 없음</translation>
</message>
@@ -3568,16 +3655,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>인증 정보가 잘못되었습니다. 다시 시도하십시오.
같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>질의 응답을 실행할 수 없습니다.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>마스터 키를 계산할 수 없습니다</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3587,10 +3682,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>데이터베이스 헤더 없음</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>마스터 키를 계산할 수 없습니다</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>잘못된 헤더 체크섬 크기</translation>
</message>
@@ -3708,6 +3799,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation>(HMAC 일치하지 않음)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3721,14 +3816,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>잘못된 대칭 키 암호화 IV 크기입니다.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>마스터 키를 계산할 수 없습니다</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>키 유도 함수 인자 메타데이터 저장소를 직렬화할 수 없음</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3878,16 +3973,12 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<translation>항목 문자열 키나 값이 없음</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>중복된 첨부 항목이 있음</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>항목 바이너리 키나 값이 없음</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>자동 입력 연결 창이나 순서가 없음</translation>
+ <translation>자동 입력 연결 창이나 시퀀스가 없음</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3928,6 +4019,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>비밀 키로 사용하기에 파일이 너무 큼</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>비밀 키를 열 수 없음</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3990,10 +4104,6 @@ Line %2, column %3</source>
<translation>루트</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>마스터 키를 계산할 수 없습니다</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>키 변형 실패</translation>
</message>
@@ -4095,6 +4205,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>인증 정보가 잘못되었습니다. 다시 시도하십시오.
같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4201,16 +4315,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>레거시 키 파일 형식</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>차후 버전에서 지원이 중단될 예정인 레거시 키 파일
-형식을 사용하고 있습니다.
-
-마스터 키 설정으로 이동하여 새 키 파일을 생성하십시오.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>키 파일 &apos;%1&apos;을(를) 불러올 수 없음
@@ -4278,6 +4382,13 @@ Are you sure you want to continue with this file?</source>
<translation>선택한 키 파일이 암호 데이터베이스 파일 같습니다. 키 파일은 변경되지 않을 파일이어야 하며 파일이 변경되면 데이터베이스에 더 이상 접근할 수 없습니다.
이 파일을 그래도 사용하시겠습니까?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4286,18 +4397,10 @@ Are you sure you want to continue with this file?</source>
<translation>데이터베이스(&amp;D)</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>최근 데이터베이스(&amp;R)</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>도움말(&amp;H)</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>항목(&amp;N)</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>그룹(&amp;G)</translation>
</message>
@@ -4314,46 +4417,10 @@ Are you sure you want to continue with this file?</source>
<translation>정보(&amp;A)</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>데이터베이스 열기(&amp;O)...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>데이터베이스 저장(&amp;S)</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>데이터베이스 닫기(&amp;C)</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>항목 삭제(&amp;D)</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>그룹 편집(&amp;E)</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>그룹 삭제(&amp;D)</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>다른 이름으로 데이터베이스 저장(&amp;V)...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>데이터베이스 설정</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>항목 복제(&amp;C)</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>사용자 이름 복사(&amp;U)</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>클립보드에 사용자 이름 복사</translation>
</message>
@@ -4366,10 +4433,6 @@ Are you sure you want to continue with this file?</source>
<translation>설정(&amp;S)</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>데이터베이스 잠금(&amp;L)</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>제목(&amp;T)</translation>
</message>
@@ -4394,14 +4457,6 @@ Are you sure you want to continue with this file?</source>
<translation>클립보드에 메모 복사</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>CSV 파일로 내보내기(&amp;E)...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>TOTP 설정...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>TOTP 복사(&amp;T)</translation>
</message>
@@ -4446,10 +4501,6 @@ This version is not meant for production use.</source>
<translation>기부(&amp;D)</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>버그 보고(&amp;B)</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>경고: 사용 중인 Qt 버전에서 KeePassXC를 화상 키보드와 사용했을 때 충돌할 수 있습니다!
@@ -4460,66 +4511,26 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>가져오기(&amp;I)</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>속성 복사(&amp;R)...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>새 데이터베이스(&amp;N)...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>새 데이터베이스 만들기</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>데이터베이스에서 합치기(&amp;M)...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>다른 KDBX 데이터베이스에서 합치기</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>새 항목(&amp;N)</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>새 항목 추가하기</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>항목 편집(&amp;E)</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>항목을 보거나 편집하기</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>새 그룹(&amp;N)</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>새 그룹 추가하기</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>마스터 키 변경(&amp;K)...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>데이터베이스 설정(&amp;D)...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>암호 복사(&amp;P)</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>자동 입력 실행(&amp;A)</translation>
</message>
@@ -4528,30 +4539,14 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>URL 열기(&amp;U)</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 데이터베이스...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>KeePass 1 데이터베이스 가져오기</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV 파일...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>CSV 파일 가져오기</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>TOTP 보이기...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>TOTP QR 코드 보이기...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>알림: KeePassXC의 미리 보기 버전을 사용하고 있습니다!
@@ -4574,14 +4569,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>내보내기(&amp;E)</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>업데이트 확인(&amp;C)...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>모든 파비콘 다운로드(&amp;A)</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>가나다순 정렬(&amp;A)</translation>
</message>
@@ -4594,48 +4581,290 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>암호 생성기(&amp;P)</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>파비콘 다운로드</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>1Password Vault 가져오기</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>HTML 파일로 내보내기(&amp;E)...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>시작하기(&amp;G)</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Vault...</translation>
+ <source>&amp;User Guide</source>
+ <translation>사용자 가이드(&amp;U)</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>1Password Vault 가져오기</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>키보드 단축키(&amp;K)</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>시작하기(&amp;G)</translation>
+ <source>&amp;Recent Databases</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>시작하기 가이드 PDF 열기</translation>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>온라인 도움말(&amp;O)...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>온라인 문서 열기(웹 브라우저로)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>사용자 가이드(&amp;U)</translation>
+ <source>View</source>
+ <translation>보기</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>사용자 가이드 PDF 열기</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>키보드 단축키(&amp;K)</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>TOTP 보이기</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>데이터베이스 설정</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>데이터베이스 설정 편집</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>데이터베이스 잠금 해제</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>더 많은 정보를 보려면 데이터베이스 잠금을 해제하십시오</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>데이터베이스 잠금</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>연결 해제</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4724,10 +4953,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>마법사페이지</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>암호화 설정(&amp;C)</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>데이터베이스 암호화 설정을 변경할 수 있습니다. 나중에 데이터베이스 설정에서도 변경할 수 있습니다.</translation>
</message>
@@ -4739,27 +4964,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>간단한 설정</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>암호화 설정</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>데이터베이스 암호화 설정을 변경할 수 있습니다. 나중에 데이터베이스 설정에서도 변경할 수 있습니다.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>데이터베이스 마스터 키</translation>
+ <source>Encryption Settings</source>
+ <translation>암호화 설정</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>나만 알고 있는 마스터 키로 데이터베이스를 보호하십시오.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>데이터베이스 암호화 설정을 변경할 수 있습니다. 나중에 데이터베이스 설정에서도 변경할 수 있습니다.</translation>
</message>
</context>
<context>
@@ -4774,6 +5003,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4949,6 +5185,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>암호가 일치함</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4973,25 +5221,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>암호가 일치하지 않습니다.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>마스터 암호 생성</translation>
- </message>
- <message>
<source>Password field</source>
<translation>암호 필드</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>암호 표시 여부 전환</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>암호 확인 필드</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>암호 생성기 전환</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5000,10 +5236,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>암호:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>강도</translation>
@@ -5053,14 +5285,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>단어 구분자:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>복사</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>사용</translation>
- </message>
- <message>
<source>Close</source>
<translation>닫기</translation>
</message>
@@ -5157,14 +5381,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>간단한 모드로 전환</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>간단히</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>생성된 암호에서 제외할 문자 집합</translation>
</message>
@@ -5185,14 +5401,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>제외할 글자: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>단어 개수(&amp;U):</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>다시 생성</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>생성된 암호</translation>
</message>
@@ -5241,10 +5449,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>암호 복사</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>암호 수락</translation>
- </message>
- <message>
<source>lower case</source>
<translation>소문자</translation>
</message>
@@ -5257,8 +5461,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>제목 대문자(Title Case)</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>암호 표시 여부 전환</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>단어 개수:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>비우기</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5271,6 +5511,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>통계</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5410,10 +5702,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>추가할 항목의 경로입니다.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>항목 암호를 클립보드에 복사합니다.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>클립보드에 복사할 항목의 경로입니다.</translation>
@@ -5571,14 +5859,6 @@ Available commands:
<translation>브라우저 통합</translation>
</message>
<message>
- <source>Press</source>
- <translation>누르기</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>수동적</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH 에이전트</translation>
</message>
@@ -5617,10 +5897,6 @@ Available commands:
<translation>항목 %1을(를) 추가했습니다.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>현재 TOTP를 클립보드에 복사합니다.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>시간 제한 값 %1이(가) 잘못되었습니다.</translation>
</message>
@@ -5632,14 +5908,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>경로 %1에 있는 항목에 TOTP가 설정되지 않았습니다.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>항목의 현재 TOTP를 클립보드에 복사했습니다!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>항목의 암호를 클립보드에 복사했습니다!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>%1초 후 클립보드를 지웁니다...</numerusform></translation>
@@ -5719,7 +5987,7 @@ Available commands:
</message>
<message>
<source>Type: Sequence</source>
- <translation>형식: 순서</translation>
+ <translation>형식: 시퀀스</translation>
</message>
<message>
<source>Type: Spatial</source>
@@ -5755,7 +6023,7 @@ Available commands:
</message>
<message>
<source>Type: Sequence(Rep)</source>
- <translation>형식: 순서(반복)</translation>
+ <translation>형식: 시퀀스(반복)</translation>
</message>
<message>
<source>Type: Spatial(Rep)</source>
@@ -5860,10 +6128,6 @@ Available commands:
<translation>클립보드 변경 프로그램이 지정되지 않았음</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>프로그램 %1을(를) 시작할 수 없음</translation>
- </message>
- <message>
<source>file empty</source>
<translation>파일이 비어 있음</translation>
</message>
@@ -5872,18 +6136,6 @@ Available commands:
<translation>%1: (줄, 칸) %2, %3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256비트</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256비트</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256비트</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2(KDBX 4 – 추천)</translation>
</message>
@@ -6134,10 +6386,6 @@ CPU 아키텍처: %2
<translation>이 도움말을 표시합니다.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>데이터베이스를 암호화할 때 사용할 YubiKey 슬롯입니다.</translation>
- </message>
- <message>
<source>slot</source>
<translation>슬롯</translation>
</message>
@@ -6154,10 +6402,6 @@ CPU 아키텍처: %2
<translation>대화형 모드를 종료합니다.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>내보낼 때 사용할 형식입니다. xml과 csv 형식을 사용할 수 있으며 기본값은 xml입니다.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>데이터베이스 내용을 지정한 형식으로 표준 출력으로 내보냅니다.</translation>
</message>
@@ -6198,10 +6442,6 @@ CPU 아키텍처: %2
<translation>새 데이터베이스의 경로입니다.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>XML 데이터베이스 내보내기 파일 %1을(를) 가져올 수 없음</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>데이터베이스를 가져왔습니다.</translation>
</message>
@@ -6294,10 +6534,6 @@ CPU 아키텍처: %2
<translation>잘못된 YubiKey 슬롯 %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>%1의 잠금을 해제하려면 YubiKey의 단추를 누르십시오</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>데이터베이스를 암호화할 암호 입력(선택 사항):</translation>
</message>
@@ -6313,13 +6549,9 @@ CPU 아키텍처: %2
<source>User name</source>
<translation>사용자 이름</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] 질의 응답 - 슬롯 %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>&apos;%1&apos;의 암호가 %2회 유출되었습니다!</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6329,6 +6561,193 @@ CPU 아키텍처: %2
<source>Show the protected attributes in clear text.</source>
<translation>보호된 속성을 평문으로 표시합니다.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6365,6 +6784,290 @@ CPU 아키텍처: %2
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>매우 약함</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>약함</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>제목</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>경로</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>제목</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>경로</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>오류 아이콘이 표시된 항목 위에 마우스를 올려 놓으면 자세한 정보를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>값</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>데이터베이스 통계를 계산하는 동안 잠시 기다려 주십시오...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>데이터베이스 이름</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>설명</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>위치</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>마지막 저장</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>저장하지 않은 변경 사항</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>예</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>아니요</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>데이터베이스가 수정되었지만 변경 사항을 디스크에 저장하지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>그룹 개수</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>항목 개수</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>내보낸 항목 개수</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>데이터베이스에 만료된 항목이 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>중복되지 않는 암호</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>중복된 암호</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>전체 암호 중 10% 이상을 재사용하고 있습니다. 가능하다면 유일한 암호를 사용하십시오.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>최대 암호 재사용</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>일부 암호가 3곳 이상에서 재사용되고 있습니다. 가능하다면 유일한 암호를 사용하십시오.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>짧은 암호 개수</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>최소 8자 이상의 암호를 사용하십시오.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>약한 암호 개수</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>암호 강도가 &apos;좋음&apos;이나 &apos;매우 좋음&apos; 등급으로 분류된 긴 무작위 암호를 사용하는 것을 추천합니다.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>평균 암호 길이</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1자</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>평균 암호 길이가 10자 이하입니다. 긴 암호를 사용할수록 더 안전합니다.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6398,6 +7101,14 @@ CPU 아키텍처: %2
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>에이전트에서 확인 요청을 지원하지 않습니다(옵션을 확인하십시오).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6505,26 +7216,10 @@ CPU 아키텍처: %2
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;데이터베이스의 휴지통을 활성화하면 항목을 휴지통으로 이동합니다. 그렇지 않으면 확인하지 않고 삭제합니다.&lt;/p&gt;&lt;p&gt;다른 항목에서 삭제할 항목을 참조할 때에는 계속 확인 대화상자를 표시합니다.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>클라이언트에서 항목을 삭제할 때 확인하지 않습니다.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>내보낼 데이터베이스 그룹:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>그룹</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>관리</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>인증</translation>
</message>
@@ -6533,40 +7228,20 @@ CPU 아키텍처: %2
<translation>다음 프로그램이 연결되어 있습니다:</translation>
</message>
<message>
- <source>Application</source>
- <translation>프로그램</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>연결 해제</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>데이터베이스 설정</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>데이터베이스 설정 편집</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>데이터베이스 잠금 해제</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock database to show more information</source>
- <translation>더 많은 정보를 보려면 데이터베이스 잠금을 해제하십시오</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>데이터베이스 잠금</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>잠금 해제해서 보기</translation>
- </message>
- <message>
- <source>None</source>
- <translation>없음</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6839,10 +7514,6 @@ CPU 아키텍처: %2
<translation>서명된 가져오기 성공</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>예상하지 못한 오류</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>서명되지 않은 공유 컨테이너는 지원하지 않음 - 가져오기 중단됨</translation>
</message>
@@ -7012,6 +7683,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7102,6 +7780,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>누르기</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>수동적</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7116,14 +7841,6 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;&lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;를 가지고 있다면 추가 보안에 사용할 수 있습니다.&lt;/p&gt;&lt;p&gt;YubiKey 슬롯 중 하나를 &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt; 모드로 프로그래밍해야 합니다.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKey를 찾을 수 없습니다. 연결 상태를 확인하십시오.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey가 연결되지 않았습니다.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>하드웨어 토큰 새로 고침</translation>
</message>
@@ -7131,5 +7848,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>하드웨어 키 슬롯 선택</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_la.ts b/share/translations/keepassx_la.ts
deleted file mode 100644
index cf9c711bb..000000000
--- a/share/translations/keepassx_la.ts
+++ /dev/null
@@ -1,5427 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="la" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation>De KeePassXC</translation>
- </message>
- <message>
- <source>About</source>
- <translation>De</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Nuntia errores ad: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeepPassXC distributum est secundum GNU Generalem Publicam Licentiam (GPL) vel versionem 2 vel (ad libitum) versionem 3.</translation>
- </message>
- <message>
- <source>Contributors</source>
- <translation>Contributores</translation>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Vide Contributiones in GitHub&lt;/a&gt;</translation>
- </message>
- <message>
- <source>Debug Info</source>
- <translation>Depurationis Informatio</translation>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation>Includa informationem sequentem quandoque errorem nuntias:</translation>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Exscribe ad aream transferendi</translation>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation>Revisio: %1</translation>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation>Distributio: %1</translation>
- </message>
- <message>
- <source>Libraries:</source>
- <translation>Bibliotechae:</translation>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation>Systema operationis: %1
-CPU architectura: %2
-Nucleus: %3 %4</translation>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation>Extensiones habilitatae:</translation>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation>Manutentores Projecti:</translation>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>Egregias gratias ab KeePassXC Manus agunt ad debfx quod origniale KeepasX creavit.</translation>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Scribe</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Integratio cum Navigatore</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Habilita SSH Agentem (reinitium postulat)</translation>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation>Applicationis optiones</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Generale</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Securitas</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation>Optiones simplices</translation>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation>Memento ultimas datorum bases </translation>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation>Memento ultima archiva claviaria et donglia securitatis</translation>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Generale</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation>Lingua</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Scribe</translation>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation> ms</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation> sec</translation>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Noli tesseram iterum intrandam postulare cum visibilis est</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Non potest invenire nomen quod cum titulo fenestrae congruit.</translation>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>Auto-Scribe - KeePassXC</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Scribe</translation>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>Syntaxis Auto-Type sententiae est mendosa!</translation>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>Hic Auto-Type iussus habet moram nimis longam. Num procedere vis?</translation>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Hic Auto-Type iussus habet clavium pressus nimis tardos. Num procedere vis?</translation>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Hic Auto-Type iussus habet argumenta quae nimis saepe repetuntur. Num procedere vis?</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Fenestra</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sequentia</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>Sequentia defalta</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Classis</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titulus</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Nomen usuari</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sequentia</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>Auto-Scribe - KeePassXC</translation>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation>Selige nomen ad Auto-Type:</translation>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Navigator Confirme Accessus</translation>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation>Memento hanc decisionem</translation>
- </message>
- <message>
- <source>Allow</source>
- <translation>Permitte</translation>
- </message>
- <message>
- <source>Deny</source>
- <translation>Nega</translation>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation>Dialogus</translation>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Necesse est hoc ut datorum bases KeePassXC-Navigatore accediantur.</translation>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation>Habilita Integrationem cum KeePassXC Navigatore</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Generale</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation>Habilita integrationem pro his navigatoribus:</translation>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Clavis cryptographica communa nomine &quot;%1&quot; iam existit.
-Visne eam suprascribere?</translation>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation>archivo nomen</translation>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation>dimensio, ordines, columnae</translation>
- </message>
- <message>
- <source>Encoding</source>
- <translation>Codificatio</translation>
- </message>
- <message>
- <source>Codec</source>
- <translation>Codec</translation>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation>Imputa &apos;\&apos; characterem effugiendi</translation>
- </message>
- <message>
- <source>Preview</source>
- <translation>Praevisum</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Columnarum dispositio</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation>Originalia data:</translation>
- </message>
- <message>
- <source>Error</source>
- <translation>Error</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Radix</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File:</source>
- <translation>Archivum Claviare:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse</source>
- <translation>Naviga</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Archiva omnia</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>Archiva claviaria</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>Selige archivum claviare</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Generale</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Securitas</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Integratio cum Navigatore</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Dejuga omnes navigatores</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Remove</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation>Algorithmus cryptographicus</translation>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation>AES: 256 Bit (defalta)</translation>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 Bit</translation>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation>Nomen datorum basi:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>Descriptio datorum basi:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>Nomen usuari pro defalta</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>Max. historica elementa:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>Max. historiae magnitudo:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation>MiB</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 Datorum basem</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Archiva omnia</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>Aperi datorum basem</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>CSV archivum</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>Aperi KeePass 1 datorum basem</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>KeePass 1 datorum basis</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation>Quaerens...</translation>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Visne classem &quot;%1&quot; sempiterne delere?</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation>Visne secure servare debilitare?</translation>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation>KeePassXC datorum basis servare aliquoties defecit. Causa probabiliter consistit in servitiis archiva synchronizandi tenentibus clausuram super archivum servatum.
-Visne secure servare debilitare et rursum conari?</translation>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 Datorum basem</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>Nomen</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation>Icon</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Scribe</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Proprietates</translation>
- </message>
- <message>
- <source>History</source>
- <translation>Historia</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add entry</source>
- <translation>Adde nomen</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>Muta nomen</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Varia passwords data.</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>Novum attributum</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>Cras</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTECTUM] Pressa &amp;apos;revela&amp;apos; ut videas aut mutes</translation>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation>Adde</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Remove</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>Fenestrae titulus:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>Monstra</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>Dele</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>Dele omnia</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>URL:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Itera:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>Titulus</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notae</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation>Nomen usuari:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Exspirat</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Exscribe ad aream transferendi</translation>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Classis</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Icon</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Proprietates</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>Adde classem</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>Muta classem</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>Habilito</translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>Dishabilito</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation>Heredita de classe parentali (%1)</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>Nomen</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notae</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Exspirat</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Quaere</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Scribe</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>Adde iconem personalizatam</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download favicon</source>
- <translation>Discarrica faviconem</translation>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation>Imagines</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Archiva omnia</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation>Icon personalizata iam existit</translation>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation>Confirma Deletionem</translation>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>Creatum:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>Mutatum:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>Accessum:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>Uuid:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Remove</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>Nomen</translation>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation>Adde</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Remove</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>Aperi</translation>
- </message>
- <message>
- <source>Save</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>Nomen</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>Ultima modificatio</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titulus</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Nomen usuari</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation>Ref:</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Classis</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titulus</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Nomen usuari</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Tessera</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notae</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Exspirat</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>Claude</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Generale</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Nomen usuari</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Tessera</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notae</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation>Fenestra</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sequentia</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation>Quaere</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation>Debilitatum</translation>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation>&amp;Claude</translation>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Aut archivum est falsum vel datorum basis est corrupta.</translation>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation>Irritus algorithmus symmetrice cifrandi.</translation>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation>Irritus algorithmus comprimendi.</translation>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Istud non est KeePass datorum basis.</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation>Archivum claviare legi non potest.</translation>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Istud non est KeePass datorum basis.</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation>Irritus algorithmus cifrandi.</translation>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>Radix</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Aut archivum est falsum vel datorum basis est corrupta.</translation>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>Naviga</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>Archiva claviaria</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Archiva omnia</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>Crea Archivum Claviare...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>Selige archivum claviare</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation>&amp;Datorum basis</translation>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation>&amp;Adjutorium</translation>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation>N&amp;omina</translation>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation>&amp;Classes</translation>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation>&amp;Exi</translation>
- </message>
- <message>
- <source>&amp;About</source>
- <translation>&amp;De</translation>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation>&amp;Aperi datorum basem</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Claude datorum basem</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Muta classem</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Dele classem</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Datorum basis optiones</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clona nomen</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation>&amp;Optiones</translation>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation>&amp;Titulus</translation>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation>&amp;URL</translation>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation>&amp;Notae</translation>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation>Optiones</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation>Exi KeePassXC</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>Radix</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>Intra tesseram:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Tessera</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation>%p%</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Tessera</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>Characterum Typi</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>Litterae Maiusculae</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>Litterae minusculae</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>Numeri</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>Characteres speciales</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation>&amp;Longitudo:</translation>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accipe</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>Claude</translation>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation>A-Z</translation>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation>a-z</translation>
- </message>
- <message>
- <source>0-9</source>
- <translation>0-9</translation>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>Dele</translation>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Remove</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>Debilita</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation>Semita datorum basis</translation>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Classis</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Titulus</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Nomen usuari</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Tessera</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notae</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Integratio cum Navigatore</translation>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation>Pressa</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passivum</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation>Archivum clausurarium est irritum. Incipiens instantiam novam.</translation>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation>Archivum clausurarium creari non potuit. Modus singulae instantiae debilitatus est.</translation>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation>Archivum claviare pro datorum basi</translation>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation>KeePassXC - Error</translation>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>Quaere</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation>Clavis:</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Remove</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Archiva omnia</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation>000000</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation>Clavis:</translation>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation>Solitae RFC 6238 symboli optiones</translation>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation>Steam symboli optiones</translation>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation>Optiones propriae</translation>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation> sec</translation>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation>6 digiti</translation>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation>8 digiti</translation>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>Claude</translation>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_lt.ts b/share/translations/keepassx_lt.ts
index 6f22bd656..f841a5284 100644
--- a/share/translations/keepassx_lt.ts
+++ b/share/translations/keepassx_lt.ts
@@ -49,11 +49,31 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Įjungti SSH agentą (reikalauja paleidimo iš naujo)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
<translation type="unfinished"/>
</message>
</context>
@@ -97,12 +117,24 @@
</message>
<message>
<source>Reset Settings?</source>
- <translation type="unfinished"/>
+ <translation>Atstatyti nustatymus?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Failų tvarkymas</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Saugiai įrašyti duomenų bazės failus (gali būti nesuderinama su Dropbox ir t.t.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Išsaugoti duomenų bazę prieš išsaugant</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Išeinant, automatiškai įrašyti</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Nežymėti duomenų bazė kaip pakeistą, jei buvo keičiami ne duomenys, o kita (pvz., išskleidžiamos grupės)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Kuriant įrašus, naudoti grupės piktogramą</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Slėpti įrašo peržiūros skydelį</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Bendra</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Slėpti įrankių juostą (piktogramas)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation type="unfinished"/>
</message>
@@ -179,10 +191,6 @@
<translation>Rodyti sistemos dėklo piktogramą</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Tamsi sistemos dėklo piktograma</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Suskleidus langą, slėpti jį į sistemos dėklą</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Visada klausti prieš atliekant automatinį rinkimą</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Visuotinis automatinio rinkimo spartusis klavišas</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Perkeliama įrankių juosta</translation>
</message>
@@ -244,12 +240,8 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Button style:</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Language:</source>
- <translation type="unfinished"/>
+ <translation>Kalba:</translation>
</message>
<message>
<source>(restart program to activate)</source>
@@ -293,27 +285,63 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Use monospaced font for Notes</source>
+ <source>Language selection</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Language selection</source>
+ <source>Global auto-type shortcut</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Reset Settings to Default</source>
+ <source>Auto-type character typing delay milliseconds</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Auto-type start delay milliseconds</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
</context>
@@ -365,18 +393,6 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Nereikalauti pakartoti slaptažodį, kai šis yra matomas</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation type="unfinished"/>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,33 +555,35 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
+ <source>KeePassXC - Browser Access Request</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Prisiminti šį sprendimą</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Leisti</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Atmesti</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 užklausė prieigos prie slaptažodžių šiam elementui(-ams).
-Pasirinkite, ar norite leisti prieigą.</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
+ <source>Deny All</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
+ <source>Disable for this site</source>
<translation type="unfinished"/>
</message>
</context>
@@ -579,190 +609,227 @@ Prisijungimo duomenų įrašymui, pasirinkite teisingą duomenų bazę.</transla
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialogas</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Naujo rakto susiejimo užklausa</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
+ <source>Save and allow access</source>
+ <translation>Įrašyti ir leisti prieigą</translation>
</message>
<message>
- <source>General</source>
- <translation>Bendra</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Perrašyti esamą raktą?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Įjungti integraciją šioms naršyklėms:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Bendrinamas šifravimo raktas, pavadinimu &quot;%1&quot; jau yra.
+Ar norite jį perrašyti?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Atnaujinti įrašą</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Ar norite atnaujinti informaciją ties %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Nutraukti</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Konvertuojami požymiai į tinkintus duomenis…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Rodyti pra&amp;nešimą, kai reikalaujama prisijungimo duomenų</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Konvertuoti KeePassHTTP požymiai</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Už&amp;klausti atrakinti duomenų bazę, jeigu ji yra užrakinta</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Sėkmingai konvertuoti požymiai iš %1 įrašo(-ų).
+Perkelta %2 raktų į tinkintus duomenis.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ...).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nerasta jokio įrašo su KeePassHTTP požymiais!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Atitikti URL schemą (pvz., https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Aktyvioje duomenų bazėje nėra įrašo su KeePassHTTP požymiais.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Vietoj visos srities visų įrašų, grąžina tik geriausiai tam tikrą URL atitinkančius įrašus.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Grąžinti tik labiausiai atitinkančius prisijungimo duomenis</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Rikiuoti atitinkančius prisijungimo duomenis pagal &amp;antraštę</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Rikiuoti atitinkančius prisijungimo duomenis pagal na&amp;udotojo vardą</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Advanced</source>
- <translation>Išplėstiniai</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Daugiau neberodyti šio įspėjimo</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Niekada nekl&amp;austi prieš gaunant prieigą prie prisijungimo duomenų</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Niekada neklausti prieš atna&amp;ujinant prisijungimo duomenis</translation>
+ <source>Dialog</source>
+ <translation>Dialogas</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ieš&amp;koti atitinkančių prisijungimo duomenų visose atvertose duomenų bazėse</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatinis eilutės laukų kūrimas ar atnaujinimas nėra palaikomas.</translation>
+ <source>Enable browser integration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Grąžinti išplėstines eilutes, kurios prasideda &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Bendra</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <source>Browsers installed as snaps are currently not supported.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
+ <source>Enable integration for these browsers:</source>
+ <translation>Įjungti integraciją šioms naršyklėms:</translation>
+ </message>
+ <message>
+ <source>Vivaldi</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
+ <source>&amp;Edge</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
+ <source>Firefox</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <source>Tor Browser</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <source>Brave</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Naršyti...</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Įspėjimas:&lt;/b&gt; Šie parametrai gali būti pavojingi!</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Vykdomieji failai</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ...).</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Visi failai</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Vietoj visos srities visų įrašų, grąžina tik geriausiai tam tikrą URL atitinkančius įrašus.</translation>
+ </message>
+ <message>
+ <source>Return only best-matching credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
+ <source>All databases connected to the extension will return matching credentials.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>Advanced</source>
+ <translation>Išplėstiniai</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatinis eilutės laukų kūrimas ar atnaujinimas nėra palaikomas.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
@@ -770,110 +837,109 @@ Prisijungimo duomenų įrašymui, pasirinkite teisingą duomenų bazę.</transla
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Naujo rakto susiejimo užklausa</translation>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Įrašyti ir leisti prieigą</translation>
+ <source>Custom proxy location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Perrašyti esamą raktą?</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Bendrinamas šifravimo raktas, pavadinimu &quot;%1&quot; jau yra.
-Ar norite jį perrašyti?</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Naršyti...</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Atnaujinti įrašą</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Ar norite atnaujinti informaciją ties %1 - %2?</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Nutraukti</translation>
+ <source>Toolbar button style</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Konvertuojami požymiai į tinkintus duomenis…</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Konvertuoti KeePassHTTP požymiai</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Sėkmingai konvertuoti požymiai iš %1 įrašo(-ų).
-Perkelta %2 raktų į tinkintus duomenis.</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <message>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nerasta jokio įrašo su KeePassHTTP požymiais!</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Aktyvioje duomenų bazėje nėra įrašo su KeePassHTTP požymiais.</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
+ <source>Please see special instructions for browser extension use below</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Daugiau neberodyti šio įspėjimo</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Įspėjimas:&lt;/b&gt; Šie parametrai gali būti pavojingi!</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Executable Files</source>
+ <translation>Vykdomieji failai</translation>
+ </message>
+ <message>
+ <source>All Files</source>
+ <translation>Visi failai</translation>
+ </message>
+ <message>
+ <source>Select custom proxy location</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -885,7 +951,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Pridėti prie antraštės &quot; - Dublikatas&quot;</translation>
+ <translation>Pridėti prie pavadinimo &quot; - Dublikatas&quot;</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -931,10 +997,6 @@ chrome-laptop.</source>
<translation>Komentarai prasideda su</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Pirmame įraše yra laukų pavadinimai</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Laikyti &quot;\&quot; kaitos ženklu</translation>
</message>
@@ -943,14 +1005,6 @@ chrome-laptop.</source>
<translation>Peržiūra</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Stulpelio išdėstymas</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Nėra CSV faile</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importuota iš CSV failo</translation>
</message>
@@ -963,14 +1017,6 @@ chrome-laptop.</source>
<translation>Klaida</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Tuščias lauko pavadinimas %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>stulpelis %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>CSV faile aptikta klaida(-os)!</translation>
</message>
@@ -999,12 +1045,64 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Paskutinis keitimas</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Slaptažodis</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Sukurta</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Pastabos</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Antraštė</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupė</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Naudotojo vardas</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n stulpelis</numerusform><numerusform>%n stulpeliai</numerusform><numerusform>%n stulpelių</numerusform><numerusform>%n stulpelių</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1023,11 +1121,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Šaknis</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Failo %1 nėra.</translation>
</message>
@@ -1068,6 +1161,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Šiukšlinė</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Slaptažodžiai</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1118,10 +1224,6 @@ Please consider generating a new key file.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation type="unfinished"/>
</message>
@@ -1134,14 +1236,6 @@ Please consider generating a new key file.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
@@ -1202,28 +1296,44 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <source>Key file help</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Key file help</source>
+ <source>?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>?</source>
+ <source>Cannot use database file as key file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select key file...</source>
+ <source>You cannot use your database file as a key file.
+If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Cannot use database file as key file</source>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You cannot use your database file as a key file.
-If you do not have a key file, please leave the field empty.</source>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Prašome priliesti mygtuką ant savo YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1249,10 +1359,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Saugumas</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Pagrindinis raktas</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Šifravimo nustatymai</translation>
</message>
@@ -1260,6 +1366,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Naršyklės integracija</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1268,18 +1378,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Atjungti visas naršykles</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Perkelti KeePassHTTP požymius į KeePassXC-Browser &amp;tinkintus duomenis</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation type="unfinished"/>
</message>
@@ -1383,6 +1481,64 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Sukurta</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Pridėti papildomą apsaugą...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nenustatytas joks slaptažodis</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nepridėtas joks šifravimo raktas</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Norėdami apsaugoti savo duomenų bazę, privalote pridėti bent vieną šifravimo raktą!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Nežinoma klaida</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1407,10 +1563,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Pasikeitimo ciklų:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Atminties naudojimas:</translation>
</message>
@@ -1431,14 +1583,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Keisti</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation type="unfinished"/>
</message>
@@ -1504,22 +1648,12 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform> MiB</numerusform><numerusform> MiB</numerusform><numerusform> MiB</numerusform><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform> gija</numerusform><numerusform> gijos</numerusform><numerusform> gijų</numerusform><numerusform> gija</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1553,6 +1687,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1561,15 +1703,15 @@ If you keep this number, your database may be too easy to crack!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1616,10 +1758,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>Papildomi duomenų bazės nustatymai</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Įjungti &amp;glaudinimą (rekomenduojama)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation type="unfinished"/>
</message>
@@ -1652,6 +1790,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1686,43 +1828,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Pridėti papildomą apsaugą...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nepridėtas joks šifravimo raktas</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Norėdami apsaugoti savo duomenų bazę, privalote pridėti bent vieną šifravimo raktą!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Nenustatytas joks slaptažodis</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Nežinoma klaida</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Nepavyko pakeisti pagrindinio rakto</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1742,125 +1847,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Pavadinimas</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Reikšmė</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1884,7 +1870,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Open KeePass 1 database</source>
- <translation>Atverti KeePass 1 duomenų bazę</translation>
+ <translation>Atverkite KeePass 1 duomenų bazę</translation>
</message>
<message>
<source>KeePass 1 database</source>
@@ -1954,6 +1940,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2132,6 +2122,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2176,14 +2174,6 @@ Disable safe saves and try again?</source>
<translation>Pasirinkti privatųjį raktą</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Failas per didelis, kad būtų privatusis raktas</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Nepavyko atverti privačiojo rakto</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Įrašo istorija</translation>
</message>
@@ -2193,11 +2183,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Edit entry</source>
- <translation>Taisyti įrašą</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Pateikti skirtingi slaptažodžiai.</translation>
+ <translation>Keisti įrašą</translation>
</message>
<message>
<source>New attribute</source>
@@ -2213,36 +2199,20 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n savaitė</numerusform><numerusform>%n savaitės</numerusform><numerusform>%n savaičių</numerusform><numerusform>%n savaičių</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Naudoti sugeneruotą slaptaždoį?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
+ <translation><numerusform>%n mėnesis</numerusform><numerusform>%n mėnesiai</numerusform><numerusform>%n mėnesių</numerusform><numerusform>%n mėnesių</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Įrašas sėkmingai atnaujintas.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Įraše yra neįrašytų pakeitimų</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Naujas požymis %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[APSAUGOTA] Norėdami rodyti ar redaguoti, paspauskite atskleisti</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
@@ -2263,6 +2233,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Atskleisti</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2338,6 +2328,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2346,14 +2344,6 @@ Disable safe saves and try again?</source>
<translation>Įjungti šiam įrašui automatinį rinkimą</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Paveldėti numatytąją automatinio rinkimo seką iš &amp;grupės</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Na&amp;udoti tinkintą automatinio rinkimo seka:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Lango asociacijos</translation>
</message>
@@ -2409,6 +2399,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Paveldėti numatytąją automatinio rinkimo seką iš grupės</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Naudoti tinkintą automatinio rinkimo seka:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2444,6 +2442,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>Keisti</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2495,18 +2501,10 @@ Disable safe saves and try again?</source>
<translation>Slaptažodis:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Pakartokite:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Antraštė:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Pastabos</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Parinktys</translation>
</message>
@@ -2519,10 +2517,6 @@ Disable safe saves and try again?</source>
<translation>Naudotojo vardas:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Baigia galioti</translation>
- </message>
- <message>
<source>Url field</source>
<translation type="unfinished"/>
</message>
@@ -2531,22 +2525,10 @@ Disable safe saves and try again?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2578,6 +2560,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Pastabos:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2691,7 +2685,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Edit group</source>
- <translation>Taisyti grupę</translation>
+ <translation>Keisti grupę</translation>
</message>
<message>
<source>Enable</source>
@@ -2713,10 +2707,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Forma</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipas:</translation>
</message>
@@ -2725,10 +2715,6 @@ Disable safe saves and try again?</source>
<translation>Kelias:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Slaptažodis:</translation>
</message>
@@ -2811,96 +2797,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Naršyti...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Pavadinimas</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>Pastabos</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expires</source>
- <translation>Baigia galioti</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Paieška</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Automatinis rinkimas</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Naudoti numatytąją pirminės grupės automatinio rinkimo seką</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Nustatyti numatytąją automatinio rinkimo se&amp;ką</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>Pastabos:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Na&amp;udoti numatytąją piktogramą</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Naudoti tinkintą piktogra&amp;mą</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Pridėti tinkintą piktogramą</translation>
</message>
@@ -2946,7 +2920,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Ši piktograma patyrė nesėkmę:</numerusform><numerusform>Šios piktogramos patyrė nesėkmę:</numerusform><numerusform>Šios piktogramos patyrė nesėkmę:</numerusform><numerusform>Šios piktogramos patyrė nesėkmę:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
@@ -2965,27 +2939,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
+ <translation>Naudoti numatytąją piktogramą</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Naudoti tinkintą piktogramą</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3103,7 +3085,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Ar tikrai norite pašalinti %n priedą?</numerusform><numerusform>Ar tikrai norite pašalinti %n priedus?</numerusform><numerusform>Ar tikrai norite pašalinti %n priedų?</numerusform><numerusform>Ar tikrai norite pašalinti %n priedų?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3170,6 +3152,17 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3253,11 +3246,51 @@ This may cause the affected plugins to malfunction.</source>
<translation>Priedai</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Taip</translation>
+ <source>Size</source>
+ <translation>Dydis</translation>
</message>
<message>
- <source>TOTP</source>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3358,6 +3391,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3384,8 +3424,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>Atstatyti į numatytuosius</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Priedai (piktograma)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3397,20 +3443,73 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupė</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nėra</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Nežinoma</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Nežinoma</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3423,13 +3522,9 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Nepavyksta įrašyti failo!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
+ <source>Online password validation failed</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3499,14 +3594,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nepavyko apskaičiuoti pagrindinio rakto</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nepavyko išduoti iššūkio atsakymo.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>trūksta duomenų bazės antraščių</translation>
</message>
@@ -3531,16 +3618,24 @@ You can enable the DuckDuckGo website icon service in the security section of th
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nepavyko išduoti iššūkio atsakymo.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nepavyko apskaičiuoti pagrindinio rakto</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3550,10 +3645,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>trūksta duomenų bazės antraščių</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nepavyko apskaičiuoti pagrindinio rakto</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Neteisingas antraštės kontrolinės sumos dydis</translation>
</message>
@@ -3670,6 +3761,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3683,14 +3778,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nepavyko apskaičiuoti pagrindinio rakto</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3840,10 +3935,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
<translation type="unfinished"/>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation type="unfinished"/>
</message>
@@ -3890,6 +3981,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Failas per didelis, kad būtų privatusis raktas</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Nepavyko atverti privačiojo rakto</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3952,10 +4066,6 @@ Line %2, column %3</source>
<translation>Šaknis</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nepavyko apskaičiuoti pagrindinio rakto</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Rakto transformacija nepavyko</translation>
</message>
@@ -4056,6 +4166,10 @@ Line %2, column %3</source>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4162,13 +4276,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation type="unfinished"/>
@@ -4234,6 +4341,13 @@ Message: %2</source>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4242,18 +4356,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Duomenų bazė</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Paskiausiai naudotos duomenų bazės</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>Ž&amp;inynas</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>Į&amp;rašai</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupės</translation>
</message>
@@ -4270,46 +4376,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Apie</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Atverti duomenų bazę...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Į&amp;rašyti duomenų bazę</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Užverti duomenų bazę</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Ištrinti įrašą</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Taisyti grupę</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Ištrinti grupę</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Įraš&amp;yti duomenų bazę kaip...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Duomenų bazės nustatymai</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Dubliuoti įrašą</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopijuoti &amp;naudotojo vardą</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Kopijuoti naudotojo vardą į iškarpinę</translation>
</message>
@@ -4322,16 +4392,12 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Nustatymai</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Užrakinti duomenų bazes</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Antraštė</translation>
</message>
<message>
<source>Copy title to clipboard</source>
- <translation>Kopijuoti antraštę į iškarpinę</translation>
+ <translation>Kopijuoti pavadinimą į iškarpinę</translation>
</message>
<message>
<source>&amp;URL</source>
@@ -4350,14 +4416,6 @@ Are you sure you want to continue with this file?</source>
<translation>Kopijuoti pastabas į iškarpinę</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Eksportuoti į CSV failą...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Nustatyti NTVS...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopijuoti &amp;NTVS</translation>
</message>
@@ -4400,10 +4458,6 @@ This version is not meant for production use.</source>
<translation>&amp;Paaukoti</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Pranešti apie &amp;klaidą</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation type="unfinished"/>
@@ -4413,180 +4467,358 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>&amp;Importuoti</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
+ <source>Create a new database</source>
+ <translation>Sukurti naują duomenų bazę</translation>
+ </message>
+ <message>
+ <source>Merge from another KDBX database</source>
+ <translation>Sulieti iš kitos KDBX duomenų bazės</translation>
+ </message>
+ <message>
+ <source>Add a new entry</source>
+ <translation>Pridėti naują įrašą</translation>
+ </message>
+ <message>
+ <source>View or edit entry</source>
+ <translation>Rodyti ar taisyti įrašą</translation>
+ </message>
+ <message>
+ <source>Add a new group</source>
+ <translation>Pridėti naują grupę</translation>
+ </message>
+ <message>
+ <source>Perform &amp;Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
- <source>TOTP...</source>
+ <source>Open &amp;URL</source>
+ <translation>Atverti &amp;URL</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>Importuoti KeePass 1 duomenų bazę</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>Importuoti CSV failą</translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>&amp;Nauja duomenų bazė...</translation>
+ <source>Check for updates on startup?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Create a new database</source>
- <translation>Sukurti naują duomenų bazę</translation>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Sulieti iš duomenų bazės...</translation>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Sulieti iš kitos KDBX duomenų bazės</translation>
+ <source>&amp;Export</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Naujas įrašas</translation>
+ <source>Sort &amp;A-Z</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Pridėti naują įrašą</translation>
+ <source>Sort &amp;Z-A</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Taisyti įrašą</translation>
+ <source>&amp;Password Generator</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Rodyti ar taisyti įrašą</translation>
+ <source>Import a 1Password Vault</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nauja grupė</translation>
+ <source>&amp;Getting Started</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Add a new group</source>
- <translation>Pridėti naują grupę</translation>
+ <source>&amp;User Guide</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Keisti pagrindinį &amp;raktą...</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Duomenų bazės nustatymai...</translation>
+ <source>&amp;Recent Databases</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation>Kopijuoti sla&amp;ptažodį</translation>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
+ <source>Copy Att&amp;ribute</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Atverti &amp;URL</translation>
+ <source>TOTP</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 duomenų bazė...</translation>
+ <source>View</source>
+ <translation>Rodinys</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Importuoti KeePass 1 duomenų bazę</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV failas...</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Importuoti CSV failą</translation>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP...</source>
+ <source>&amp;Save Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP QR Code...</source>
+ <source>&amp;Close Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <source>&amp;New Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Check for updates on startup?</source>
+ <source>&amp;Merge From Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
+ <source>&amp;New Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
+ <source>&amp;Edit Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export</source>
+ <source>&amp;Delete Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Check for Updates...</source>
+ <source>&amp;New Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
+ <source>&amp;Edit Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;Delete Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>Download All &amp;Favicons…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>Sa&amp;ve Database As…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>Atsisiųsti svetainės piktogramą</translation>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>Database &amp;Reports...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>Statistics, health check, etc.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>&amp;Database Settings…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>&amp;Clone Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>Move u&amp;p</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Move entry one step up</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>Move do&amp;wn</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>Move entry one step down</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Copy &amp;Username</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Rodyti NTVS</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Duomenų bazės nustatymai</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Atrakinti duomenų bazę</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Užrakinti duomenų bazę</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4676,10 +4908,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Ši&amp;fravimo nustatymai</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose.</translation>
</message>
@@ -4691,27 +4919,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Paprasti nustatymai</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Šifravimo nustatymai</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Duomenų bazės pagrindinis raktas</translation>
+ <source>Encryption Settings</source>
+ <translation>Šifravimo nustatymai</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose.</translation>
</message>
</context>
<context>
@@ -4726,6 +4958,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4900,6 +5139,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4924,25 +5175,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Slaptažodžiai nesutampa.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4951,10 +5190,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Slaptažodis:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>stiprumas</translation>
@@ -5004,14 +5239,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Žodžių skirtukas:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopijuoti</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Priimti</translation>
- </message>
- <message>
<source>Close</source>
<translation>Užverti</translation>
</message>
@@ -5108,14 +5335,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Perjungti į paprastą veikseną</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
</message>
@@ -5136,14 +5355,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Žodžių ska&amp;ičius:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5192,10 +5403,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Kopijuoti slaptažodį</translation>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5208,7 +5415,43 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Žodžių skaičius:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Išvalyti</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5222,6 +5465,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5361,17 +5656,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Įrašo, kurį pridėti, kelias.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Kopijuoti įrašo slaptažodį į iškarpinę.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Įrašo, kurį iškirpti, kelias.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Laiko limitas, sekundėmis, prieš išvalant iškarpinę.</translation>
+ <translation>Skirtas laikas, sekundėmis, prieš išvalant iškarpinę.</translation>
</message>
<message>
<source>Edit an entry.</source>
@@ -5379,7 +5670,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Title for the entry.</source>
- <translation>Įrašo antraštė.</translation>
+ <translation>Įrašo pavadinimas.</translation>
</message>
<message>
<source>title</source>
@@ -5519,14 +5810,6 @@ Prieinamos komandos:
<translation>Naršyklės integracija</translation>
</message>
<message>
- <source>Press</source>
- <translation>Paspausti</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasyvus</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH agentas</translation>
</message>
@@ -5564,10 +5847,6 @@ Prieinamos komandos:
<translation>Sėkmingai pridėtas įrašas %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5579,14 +5858,6 @@ Prieinamos komandos:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
@@ -5806,10 +6077,6 @@ Prieinamos komandos:
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Nepavyko paleisti programos %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>failas tuščias</translation>
</message>
@@ -5818,18 +6085,6 @@ Prieinamos komandos:
<translation>%1: (eil., stulp.) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 bitų</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 bitų</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 bitų</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – rekomenduojama)</translation>
</message>
@@ -6080,10 +6335,6 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6100,10 +6351,6 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6144,10 +6391,6 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6240,10 +6483,6 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6259,10 +6498,6 @@ Branduolys: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6275,6 +6510,193 @@ Branduolys: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6311,6 +6733,290 @@ Branduolys: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Blogas</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Silpnas</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Antraštė</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Kelias</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Antraštė</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Kelias</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Pavadinimas</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Reikšmė</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>no</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6344,6 +7050,14 @@ Branduolys: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6451,26 +7165,10 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupė</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
<translation type="unfinished"/>
</message>
@@ -6479,41 +7177,21 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Duomenų bazės nustatymai</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Atrakinti duomenų bazę</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Užrakinti duomenų bazę</translation>
- </message>
- <message>
- <source>Unlock to show</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>None</source>
- <translation>Nėra</translation>
- </message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
@@ -6785,10 +7463,6 @@ Branduolys: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Netikėta klaida</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6957,6 +7631,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7047,6 +7728,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Paspausti</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasyvus</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7061,19 +7789,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
+ <source>Refresh hardware tokens</source>
<translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
+ <source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/share/translations/keepassx_lv.ts b/share/translations/keepassx_lv.ts
deleted file mode 100644
index 8e3cdadff..000000000
--- a/share/translations/keepassx_lv.ts
+++ /dev/null
@@ -1,5423 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="lv" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Debug Info</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Libraries:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deny</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encoding</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database description:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> MiB</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restore</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete all</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Repeat:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Presets</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Properties</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download favicon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Uuid:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expires</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character Types</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Numbers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special Characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>0-9</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_nb.ts b/share/translations/keepassx_nb.ts
index 21a3c7acd..1d11a0610 100644
--- a/share/translations/keepassx_nb.ts
+++ b/share/translations/keepassx_nb.ts
@@ -23,11 +23,11 @@
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Se bidrag på GitHub&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Se Bidrag på GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
- <translation>Feilsøkingsinformasjon</translation>
+ <translation>Debuggingsinfo</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Slå på SSH-agenten (krever omstart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Bruk OpenSSH for Windows i stedet for Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Er du sikker på at du vil tilbakestille alle generelle og sikkerhetsinnstillinger til standard?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Filhåndtering</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Sikker lagring av database-filer (kan være uforenelig med Dropbox, etc.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Sikkerhetskopier database-filen før lagring</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Lagre automatisk ved avslutning </translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Ikke marker database som endret ved ikke-dataendringer (f.eks. ekspandere grupper)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Last databasen automatisk på nytt hvis den blir endret eksternt </translation>
</message>
@@ -159,18 +183,6 @@
<translation>Bruk gruppeikon ved ny oppføring</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Skjul forhåndsvisningspanelet</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Generelt</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Skjul verktøylinje (ikon)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimer istedenfor app-avslutning</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Vis et ikon i systemkurven</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Mørkt ikon i systemkurven</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Skjul vindu til systemkurven når minimert</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Alltid spør før utførelse av autoskriv</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Global autoskriv-hurtigtast</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Autoskriv tidsforsinkelse</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Autoskriv start-forsinkelse</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Bevegelig verktøylinje</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Ta med betaversjoner når du ser etter oppdateringer</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Knappestil:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Språk:</translation>
</message>
@@ -293,18 +285,10 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Language selection</source>
<translation>Valg av språk</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Tilbakestill innstillinger til standard</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation type="unfinished"/>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,20 +393,8 @@
<translation>Lås tidligere låst database etter utført autoskriv</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Ikke krev gjentakelse av passord ved klartekst-visning</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Ikke skjul passord når du redigerer dem</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Ikke bruk plassholder for tomme passordfelter</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Skjul passord i forhåndsvisningspanelet</translation>
+ <translation>Skjul passord i oppføring panelet</translation>
</message>
<message>
<source>Hide entry notes by default</source>
@@ -413,12 +429,24 @@
<source>Clear search query after</source>
<translation>Tøm søket etter</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Finner ingen oppføring som samsvarer med vindustittelen:</translation>
+ <translation>Kunne ikke finne en oppføring som samsvarer med vindutittelen:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
@@ -461,7 +489,7 @@
</message>
<message>
<source>Sequence</source>
- <translation>Rekkefølge</translation>
+ <translation>Sekvens</translation>
</message>
<message>
<source>Default sequence</source>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser bekreft tilgang</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Husk dette valget</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Tillat</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Avvis</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 spør om passordtilgang for følgende elementer.
-Velg om du vil gi tilgang eller ikke.</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>Gi tilgang</translation>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
- <translation>Nekte adgang</translation>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -575,304 +605,340 @@ Velg om du vil gi tilgang eller ikke.</translation>
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
<translation>Du har flere databaser åpne.
-Vennligst velg riktig database for å lagre legitimasjon.</translation>
+Vennligst velge riktig database for å lagre identifikasjon.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Vindu</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Tilknytningsforespørsel for ny nøkkel.</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Dette er nødvendig for å få tilgang til dine databaser med KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Lagre og tillat aksess</translation>
</message>
<message>
- <source>General</source>
- <translation>Generelt</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Overskrive eksisterende nøkkel?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Bruk tillegget i disse nettleserne:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>En delt krypteringsnøkkel med navn &quot;%1&quot; eksisterer fra før.
+Vil du overskrive den?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Oppdater oppføring.</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Vil du oppdatere informasjonen i %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Avbryt</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Vis et &amp;varsel når legitimasjon blir forespurt</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Spør om å låse opp dersom databasen er låst</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Bare oppføringer med samme protokoll (http://, https://, ...) er returnert.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Ingen oppføring med KeePassHTTP-attributter funnet!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Match URL-skjema (f.eks. https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Den aktiv database inneholder ikke en oppføring med KeePassHTTP-attributter.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Gammel nettleser integrasjon innstillinger oppdaget</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Returner bare beste matcher av identifikasjonen</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Lag en ny gruppe</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sorter samsvarende berettigelsesbevis etter &amp;tittel</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sorter matchende identifikasjoner etter &amp;brukernavn</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Advanced</source>
- <translation>Avansert</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Ikke vis denne advarselen igjen</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Aldri spør før det gis tilgang til identifikasjon</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Aldri spør før &amp;oppdatering av identifikasjon</translation>
+ <source>Dialog</source>
+ <translation>Vindu</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Søk etter matchende identifikasjon i alle åpne databaser</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Dette er nødvendig for å få tilgang til dine databaser med KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatisk registrering eller endring av tekstfelt er ikke støttet.</translation>
+ <source>Enable browser integration</source>
+ <translation>Aktiver nettleser integrasjon</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Returner avanserte tekstfelt som begynner med &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Generelt</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-proxy til lokale meldings-skript ved oppstart.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Oppdater &amp;lokalt meldings-manifest ved oppstart</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Bruk tillegget i disse nettleserne:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Angi en mellomtjener-applikasjon mellom KeePassXC og nettleserutvidelsen.</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Bruk en &amp;mellomtjener til å forbinde KeePassXC og nettlesertillegget</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Oppgi en selvvalgt mellomtjener dersom du installerte mellomtjeneren manuelt.</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Oppgi en &amp;selvvalgt mellomtjerneradresse</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Bla gjennom...</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Advarsel:&lt;/b&gt; Disse innstillingene kan medføre risiko.</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Oppgi en selvvalgt mellomtjerneradresse</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor nettleser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Kjørbare filer</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>Alle Filer</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Bare oppføringer med samme protokoll (http://, https://, ...) er returnert.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Ikke spør om tillatelse til &amp;enkel HTTP autentisering</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet.</translation>
+ </message>
+ <message>
+ <source>Return only best-matching credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Vennligst se spesielle instruksjoner for bruk av nettleserutvidelse nedenfor</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Aktiver nettleser integrasjon</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Advanced</source>
+ <translation>Avansert</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatisk registrering eller endring av tekstfelt er ikke støttet.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-proxy til lokale meldings-skript ved oppstart.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Tilknytningsforespørsel for ny nøkkel.</translation>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Oppgi en selvvalgt mellomtjener dersom du installerte mellomtjeneren manuelt.</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Lagre og tillat aksess</translation>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Overskrive eksisterende nøkkel?</translation>
+ <source>Custom proxy location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>En delt krypteringsnøkkel med navn &quot;%1&quot; eksisterer fra før.
-Vil du overskrive den?</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Oppdater oppføring.</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Bla gjennom...</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Vil du oppdatere informasjonen i %1 - %2?</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Avbryt</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
+ <source>Toolbar button style</source>
<translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <source>Config Location:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
+ <source>Custom browser location field</source>
<translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <message>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Ingen oppføringer med KeePassHTTP-attributter funnet!</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Den aktiv database inneholder ikke en oppføring med KeePassHTTP-attributter.</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Gammel nettleser integrasjon innstillinger oppdaget</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Lag en ny gruppe</translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Vennligst se spesielle instruksjoner for bruk av nettleserutvidelse nedenfor</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Ikke vis denne advarselen igjen</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Advarsel:&lt;/b&gt; Disse innstillingene kan medføre risiko.</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Executable Files</source>
+ <translation>Kjørbare filer</translation>
+ </message>
+ <message>
+ <source>All Files</source>
+ <translation>Alle Filer</translation>
+ </message>
+ <message>
+ <source>Select custom proxy location</source>
+ <translation>Oppgi en selvvalgt mellomtjerneradresse</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -930,10 +996,6 @@ chrome-laptop.</source>
<translation>Kommentarer starter med</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Første post har feltnavn</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Betrakt &apos;\&apos; som en escape-sekvens</translation>
</message>
@@ -942,14 +1004,6 @@ chrome-laptop.</source>
<translation>Forhåndsvis</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Kolonneoppsett</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Ikke tilstede i CSV-fil</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importert fra CSV-fil</translation>
</message>
@@ -962,14 +1016,6 @@ chrome-laptop.</source>
<translation>Feil</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Tomt feltnavn %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>kolonne %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Feil(er) oppdaget i CSV-fil!</translation>
</message>
@@ -998,12 +1044,64 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Sist endra</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Passord</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Opprettet</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notater</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Tittel</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppe</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>Adresse</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Brukernavn</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n kolonne(r)</numerusform><numerusform>%n kolonne(r)</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1022,11 +1120,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Rot</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Filen %1 eksisterer ikke.</translation>
</message>
@@ -1036,7 +1129,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>Feil under lesing av databasen: %1</translation>
+ <translation>Feil under lesing av database: %1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
@@ -1067,6 +1160,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Papirkurv</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Passord</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1087,7 +1193,7 @@ Backup database located at %2</source>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Eldre nøkkelfil-format</translation>
+ <translation>Eldre nøkkelfilformat</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
@@ -1119,10 +1225,6 @@ Vurder å opprette en ny nøkkelfil.</translation>
<translation>Kunne ikke åpne nøkkelfil: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Låse opp KeePassXC Database</translation>
</message>
@@ -1135,14 +1237,6 @@ Vurder å opprette en ny nøkkelfil.</translation>
<translation>Passord felt</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
@@ -1203,10 +1297,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Key file help</source>
<translation type="unfinished"/>
</message>
@@ -1215,10 +1305,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Velge nøkkelfil...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Kan ikke bruke database fil som nøkkelfil</translation>
</message>
@@ -1227,6 +1313,30 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Vennligst trykk på knappen på din YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1250,10 +1360,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Sikkerhet</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Hovednøkkel</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Krypteringsinnstillinger</translation>
</message>
@@ -1261,6 +1367,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Nettlesertillegg</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1269,18 +1379,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC nettleser-innstillinger</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>Kople &amp;fra alle nettleserne</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Stored keys</source>
<translation>Lagrede nøkler</translation>
</message>
@@ -1307,7 +1405,7 @@ This may prevent connection to the browser plugin.</source>
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>Aktiver nettleserintegrasjon for å få tilgang til disse innstillingene.</translation>
+ <translation>Aktiver nettleser integrasjon for å få tilgang til disse innstillingene.</translation>
</message>
<message>
<source>Disconnect all browsers</source>
@@ -1324,7 +1422,7 @@ This may prevent connection to the browser plugin.</source>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>Ingen delte krypteringsnøkler funnet i KeePassXC-innstillingene.</translation>
+ <translation>Ingen delte kryptering nøkkel funnet i KeePassXC-innstillingene.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
@@ -1384,6 +1482,66 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Opprettet</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Legg til ekstra beskyttelse</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Passord ikke satt</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>ADVARSEL! Du har ikke angitt et passord. Å bruke en database uten passord frarådes sterkt!
+
+Er du sikker på at du vil fortsette uten passord?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Fortsett uten passord</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Ingen krypteringsnøkkel lagt til</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Du må legge til minst en krypteringsnøkkel for å sikre databasen!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Ukjent feil</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1408,10 +1566,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Transformasjonsrunder:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Testmåling 1 sek. forsinkelse</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Minnebruk:</translation>
</message>
@@ -1432,14 +1586,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Endring</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Høyere verdier gir mer beskyttelse, men å åpne database vil ta lengre tid.</translation>
</message>
@@ -1509,22 +1655,12 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>MiB</numerusform><numerusform>MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>tråd(er)</numerusform><numerusform>tråd(er)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1558,6 +1694,14 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
<source>Parallelism</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1566,15 +1710,15 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1610,7 +1754,7 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
</message>
<message>
<source> MiB</source>
- <translation>MiB</translation>
+ <translation> MiB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1621,10 +1765,6 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
<translation>Ekstra database-innstillinger</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Aktiver &amp;komprimering (anbefalt)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation type="unfinished"/>
</message>
@@ -1657,6 +1797,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation>(gammel)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1691,45 +1835,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Legg til ekstra beskyttelse</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Ingen krypteringsnøkkel lagt til</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Du må legge til minst en krypteringsnøkkel for å sikre databasen!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Passord ikke satt</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>ADVARSEL! Du har ikke angitt et passord. Å bruke en database uten passord frarådes sterkt!
-
-Er du sikker på at du vil fortsette uten passord?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Ukjent feil</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Feilet å endre hovednøkkel</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Fortsett uten passord</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1749,125 +1854,6 @@ Er du sikker på at du vil fortsette uten passord?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistikk</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Navn</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Verdi</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Database navn</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Beskrivelse</translation>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Sist lagret</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation>ja</translation>
- </message>
- <message>
- <source>no</source>
- <translation>nei</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Unike passord</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Mer enn 10% av passordene brukes på nytt. Bruk unike passord når det er mulig.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Noen passord brukes mer enn tre ganger. Bruk unike passord når det er mulig.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Anbefaler å bruke lange, tilfeldige passord med en vurdering av &apos;bra&apos; eller &apos;utmerket&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Vent, database statistikk blir beregnet...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1912,7 +1898,7 @@ Er du sikker på at du vil fortsette uten passord?</translation>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation>Den opprettede databasen har ingen nøkkel eller KDF, og nekter å lagre den.
+ <translation>Den opprettede database har ingen nøkkel eller KDF, og nekter å lagre den.
Dette er definitivt en feil, rapporter det til utviklerne.</translation>
</message>
<message>
@@ -1962,6 +1948,10 @@ Dette er definitivt en feil, rapporter det til utviklerne.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1979,7 +1969,7 @@ Dette er definitivt en feil, rapporter det til utviklerne.</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven?</numerusform><numerusform>Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2041,11 +2031,11 @@ Vil du slå sammen fila med endringene dine?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Ønsker du virkelig å slette %n oppføring(s) for godt (permanent)</numerusform><numerusform>Ønsker du virkelig å slette %n oppføring(s) for godt (permanent)</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Vil du slette oppføring?</numerusform><numerusform>Vil du slette oppføringer?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
@@ -2057,7 +2047,7 @@ Vil du slå sammen fila med endringene dine?</translation>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Du redigerer en oppføring. Kast endringer og lås likevel?</translation>
+ <translation>Du redigerer en oppføring. Kast endringer og låse likevel?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
@@ -2068,7 +2058,7 @@ Lagre endringer?</translation>
<message>
<source>Database was modified.
Save changes?</source>
- <translation>Databasen ble endret.
+ <translation>Database ble endret.
Lagre endringer?</translation>
</message>
<message>
@@ -2142,6 +2132,14 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2167,7 +2165,7 @@ Deaktivere sikker lagring og prøve igjen?</translation>
</message>
<message>
<source>History</source>
- <translation>Historikk</translation>
+ <translation>Historie</translation>
</message>
<message>
<source>SSH Agent</source>
@@ -2186,14 +2184,6 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation>Velg privat nøkkel</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Fil for stor til å være privat nøkkel</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Kunne ikke åpne den private nøkkelen</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Oppførings-historikk</translation>
</message>
@@ -2206,10 +2196,6 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation>Rediger oppføring</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Forskjellige passord oppgitt.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Ny attributt</translation>
</message>
@@ -2223,36 +2209,20 @@ Deaktivere sikker lagring og prøve igjen?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n uke(r)</numerusform><numerusform>%n uke(r)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Vil du bruke det lagde passordet?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Vil du bruke det lagde passordet for denne oppføringen?</translation>
+ <translation><numerusform>%n måned(er)</numerusform><numerusform>%n måned(er)</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Oppføring oppdatert.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>New attribute %1</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -2273,6 +2243,26 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Er du sikker på at du vil fjerne denne URL-en?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Vis</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2348,6 +2338,14 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2356,14 +2354,6 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation>Aktiver autoskriv for denne oppføringa</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Arv standard autoskriv-sekvens fra &amp;gruppen</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Br&amp;uk tilpasset autoskriv-sekvens:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Vindustilknytninger</translation>
</message>
@@ -2419,6 +2409,14 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2454,6 +2452,14 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<source>Edit</source>
<translation>Endring</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2505,18 +2511,10 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation>Passord:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Gjenta:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Tittel:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notater</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Hurtigvalg</translation>
</message>
@@ -2529,10 +2527,6 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation>Brukernavn:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Utløper</translation>
- </message>
- <message>
<source>Url field</source>
<translation type="unfinished"/>
</message>
@@ -2541,22 +2535,10 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation>Passord felt</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2588,6 +2570,18 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2633,7 +2627,7 @@ Deaktivere sikker lagring og prøve igjen?</translation>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Kopier til utklippstavla</translation>
+ <translation>Kopier til utklippstavle</translation>
</message>
<message>
<source>Private key</source>
@@ -2723,10 +2717,6 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Skjema</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Type:</translation>
</message>
@@ -2735,10 +2725,6 @@ Deaktivere sikker lagring og prøve igjen?</translation>
<translation>Sti:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Passord:</translation>
</message>
@@ -2821,96 +2807,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation>Passord felt</translation>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Bla gjennom...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Navn</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>Notater</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expires</source>
- <translation>Utløper</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Søk</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Autoskriv</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Bruk standard autoskriv-sekvens fra foreldre-gruppa</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>&amp;Angi standard autoskriv-sekvens</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
+ <source>Notes:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Bruk standard ikon</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Bruk et &amp;selvvalgt ikon</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Legg til selvvalgt ikon</translation>
</message>
@@ -2975,27 +2949,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3114,7 +3096,7 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Er du sikker på at du vil fjerne %n vedlegg?</numerusform><numerusform>Er du sikker på at du vil fjerne %n vedlegg?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3181,6 +3163,17 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3205,7 +3198,7 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
</message>
<message>
<source>URL</source>
- <translation>Adresse</translation>
+ <translation>URL</translation>
</message>
</context>
<context>
@@ -3229,7 +3222,7 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
</message>
<message>
<source>URL</source>
- <translation>Adresse</translation>
+ <translation>URL</translation>
</message>
<message>
<source>Never</source>
@@ -3264,12 +3257,52 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
<translation>Vedlegg</translation>
</message>
<message>
- <source>Yes</source>
- <translation>JA</translation>
+ <source>Size</source>
+ <translation>Størrelse</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3369,6 +3402,13 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3395,8 +3435,14 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
<translation>Resette til standard</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Vedlegg (ikon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3408,20 +3454,73 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Gruppe</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Ingen</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Ukjent</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Ukjent</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3434,14 +3533,10 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Kan ikke lagre fil!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Kan ikke lagre den lokale meldings-skriptfilen.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3510,14 +3605,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke kalkulere hovednøkkel</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kan ikke utstede utfordrer-respons.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>manglende database-headere</translation>
</message>
@@ -3542,16 +3629,24 @@ You can enable the DuckDuckGo website icon service in the security section of th
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kan ikke utstede utfordrer-respons.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke kalkulere hovednøkkel</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3561,10 +3656,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>manglende database-headere</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke kalkulere hovednøkkel</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Ugyldig header-sjekksumstørrelse</translation>
</message>
@@ -3681,6 +3772,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3694,14 +3789,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ugyldig: Symmetric cipher IV size.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke kalkulere hovednøkkel</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Kunne ikke serialisere KDF-parametre variant-map</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3769,7 +3864,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de
</message>
<message>
<source>Failed to read database file.</source>
- <translation>Kunne ikke lese databasefilen.</translation>
+ <translation>Kunne ikke lese database filen.</translation>
</message>
</context>
<context>
@@ -3851,10 +3946,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de
<translation>Mangler: Entry string key or value</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Duplikat: Attachment</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Mangler: Entry binary key or value</translation>
</message>
@@ -3899,6 +3990,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Fil for stor til å være privat nøkkel</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Kunne ikke åpne den private nøkkelen</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3961,10 +4075,6 @@ Line %2, column %3</source>
<translation>Rot</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan ikke kalkulere hovednøkkel</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Nøkkeltransformasjon feila</translation>
</message>
@@ -4065,6 +4175,10 @@ Line %2, column %3</source>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4171,13 +4285,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Eldre nøkkelfil-format</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation type="unfinished"/>
@@ -4243,6 +4350,13 @@ Message: %2</source>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4251,18 +4365,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Database</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>N&amp;ylige databaser</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Hjelp</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Oppføringer</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupper</translation>
</message>
@@ -4279,46 +4385,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Om</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Åpne database</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Lagre database</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Lukk database</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Slett oppføring</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Rediger gruppe</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Slett gruppe</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Lag&amp;re database som...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Databaseoppsett</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Klon oppføring</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopier &amp;brukernavn</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Kopier brukernavn til utklippstavlen</translation>
</message>
@@ -4331,10 +4401,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Oppsett</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lås databaser</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Tittel</translation>
</message>
@@ -4359,14 +4425,6 @@ Are you sure you want to continue with this file?</source>
<translation>Kopier notater til utklippstavle</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Eksporter som CSV-fil...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Sett opp TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopier &amp;TOTP</translation>
</message>
@@ -4380,7 +4438,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Feil ved tilgang til konfigurasjonsfilen %1</translation>
+ <translation>Feil ved tilgang for konfigurasjonsfilen %1</translation>
</message>
<message>
<source>Settings</source>
@@ -4411,10 +4469,6 @@ Denne versjonen er ikke ment for produksjonsmiljø.</translation>
<translation>&amp;Donér</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Meld inn en &amp;feil</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>ADVARSEL: Qt-versjon du bruker kan føre til at KeePassXC kræsjer med et skjermtastatur!
@@ -4425,180 +4479,358 @@ Vi anbefaler at du bruker det AppImage som er tilgjengelig på nedlastingssiden.
<translation type="unfinished"/>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
+ <source>Create a new database</source>
+ <translation>Opprett en ny database</translation>
+ </message>
+ <message>
+ <source>Merge from another KDBX database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
+ <source>Add a new entry</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>&amp;Ny database...</translation>
+ <source>View or edit entry</source>
+ <translation>Vis eller endring oppføring</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Opprett en ny database</translation>
+ <source>Add a new group</source>
+ <translation>Legg til ny gruppe</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
+ <source>Perform &amp;Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Merge from another KDBX database</source>
+ <source>Open &amp;URL</source>
+ <translation>Åpne &amp;URL</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>Importer en KeePass 1 database</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>Importer en CSV-fil</translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Ny oppføring</translation>
+ <source>Check for updates on startup?</source>
+ <translation>Sjekk etter oppdateringer ved oppstart?</translation>
+ </message>
+ <message>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Vil du at KeePassXC skal se etter oppdateringer ved oppstart?</translation>
</message>
<message>
- <source>Add a new entry</source>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Du kan alltid sjekke om oppdateringer manuelt fra programmenyen.</translation>
+ </message>
+ <message>
+ <source>&amp;Export</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Edit entry</source>
+ <source>Sort &amp;A-Z</source>
<translation type="unfinished"/>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Vis eller endre oppføring</translation>
+ <source>Sort &amp;Z-A</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Ny gruppe</translation>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Passord generator</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Legg til ny gruppe</translation>
+ <source>Import a 1Password Vault</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Change master &amp;key...</source>
+ <source>&amp;Getting Started</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Database settings...</source>
+ <source>&amp;User Guide</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation>Kopier &amp;passord</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
+ <source>&amp;Recent Databases</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Åpne &amp;URL</translation>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 database...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Importer en KeePass 1 database</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV fil...</translation>
+ <source>View</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Importer en CSV-fil</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Vis TOTP...</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Vis TOTP QR Kode...</translation>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <source>&amp;Save Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>Sjekk etter oppdateringer ved oppstart?</translation>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Vil du at KeePassXC skal se etter oppdateringer ved oppstart?</translation>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Du kan alltid sjekke om oppdateringer manuelt fra programmenyen.</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export</source>
+ <source>&amp;New Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Se etter oppdateringer...</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
+ <source>&amp;Delete Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;New Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>&amp;Edit Group…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Passord generator</translation>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>Last ned ikoner</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>Sa&amp;ve Database As…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Hvelv...</translation>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>Database &amp;Reports...</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>Statistics, health check, etc.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>&amp;Database Settings…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>&amp;Clone Entry…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>Move u&amp;p</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>Move entry one step up</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Move do&amp;wn</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Vis TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Databaseoppsett</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Lås opp databasen</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Lås database</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4688,10 +4920,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation type="unfinished"/>
</message>
@@ -4703,26 +4931,30 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Enkle innstillinger</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Krypteringsinnstillinger</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Database hovednøkkel</translation>
+ <source>Encryption Settings</source>
+ <translation>Krypteringsinnstillinger</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4738,6 +4970,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4912,6 +5151,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4936,25 +5187,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Passordene er ikke like.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Opprette hovedpassord</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Passord felt</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4963,10 +5202,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Passord:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>styrke</translation>
@@ -4989,11 +5224,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Extended ASCII</source>
- <translation>Utvidet ASCII</translation>
+ <translation>Utvida ASCII</translation>
</message>
<message>
<source>Exclude look-alike characters</source>
- <translation>Ekskluder tegn som ligner hverandre</translation>
+ <translation>Ekskluder tegn som er nesten makne</translation>
</message>
<message>
<source>Pick characters from every group</source>
@@ -5016,14 +5251,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Ord-skilletegn:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopier</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Godta</translation>
- </message>
- <message>
<source>Close</source>
<translation>Lukk</translation>
</message>
@@ -5120,14 +5347,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Bytt til enkel modus</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Enkel</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
</message>
@@ -5148,14 +5367,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Generated password</source>
<translation>Generert passord</translation>
</message>
@@ -5204,10 +5415,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Kopier passord</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Godta passord</translation>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5220,7 +5427,43 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Antall ord:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Tøm</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5234,6 +5477,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>Statistikk</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5354,7 +5649,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>URL</source>
- <translation>Adresse</translation>
+ <translation>URL</translation>
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
@@ -5373,10 +5668,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Sti til oppføringa som skal legges til.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Kopier passordet i oppføringa til utklippstavlen.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Sti til oppføring som skal klippes ut.</translation>
@@ -5533,14 +5824,6 @@ Tilgjengelige kommandoer:
<translation>Nettlesertillegg</translation>
</message>
<message>
- <source>Press</source>
- <translation>Trykk</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiv</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-agent</translation>
</message>
@@ -5579,10 +5862,6 @@ Tilgjengelige kommandoer:
<translation type="unfinished"/>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation type="unfinished"/>
</message>
@@ -5594,14 +5873,6 @@ Tilgjengelige kommandoer:
<source>Entry with path %1 has no TOTP set up.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -5821,10 +6092,6 @@ Tilgjengelige kommandoer:
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>file empty</source>
<translation type="unfinished"/>
</message>
@@ -5833,18 +6100,6 @@ Tilgjengelige kommandoer:
<translation type="unfinished"/>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – anbefalt)</translation>
</message>
@@ -6095,10 +6350,6 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6115,10 +6366,6 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6159,10 +6406,6 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6255,10 +6498,6 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6274,10 +6513,6 @@ Kjerne: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6290,6 +6525,193 @@ Kjerne: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6326,6 +6748,290 @@ Kjerne: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Dårlig</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Svak</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Tittel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Sti</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Tittel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Sti</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Navn</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Verdi</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Vent, database statistikk blir beregnet...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Database navn</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Beskrivelse</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Sist lagret</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>ja</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>nei</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Unike passord</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Mer enn 10% av passordene brukes på nytt. Bruk unike passord når det er mulig.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Noen passord brukes mer enn tre ganger. Bruk unike passord når det er mulig.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Anbefaler å bruke lange, tilfeldige passord med en vurdering av &apos;bra&apos; eller &apos;utmerket&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6337,7 +7043,7 @@ Kjerne: %3 %4</translation>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>Ingen agent kjører, kan ikke identifisere.</translation>
+ <translation>Ingen agent kjører. Kan ikke identifisere.</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
@@ -6359,6 +7065,14 @@ Kjerne: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>En bekreftelsesforespørsel støttes ikke av agenten (sjekk alternativene).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6466,26 +7180,10 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Gruppe</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
<translation type="unfinished"/>
</message>
@@ -6494,41 +7192,21 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Databaseoppsett</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Lås opp databasen</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Lås database</translation>
- </message>
- <message>
- <source>Unlock to show</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>None</source>
- <translation>Ingen</translation>
- </message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
@@ -6800,10 +7478,6 @@ Kjerne: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Uventet feil</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation type="unfinished"/>
</message>
@@ -6871,7 +7545,7 @@ Kjerne: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Utløper om %n sekund</numerusform><numerusform>Utløper om &lt;b&gt;%n&lt;/b&gt; sekunder</numerusform></translation>
</message>
</context>
<context>
@@ -6972,6 +7646,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7042,7 +7723,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Import from CSV</source>
- <translation>Importer fra CSV</translation>
+ <translation>Importer fra CSV-fil</translation>
</message>
<message>
<source>Recent databases</source>
@@ -7062,6 +7743,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Trykk</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiv</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7076,19 +7804,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Dersom du har en &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, så kan du bruke den for økt sikkerhet.&lt;/p&gt;&lt;p&gt;Ett av sporene på YubiKey må programmeres med &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 utfordrings-respons&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Ingen YubiKey oppdaga. Sjekk om den er satt inn.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Ingen YubiKey satt inn.</translation>
+ <source>Hardware key slot selection</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/share/translations/keepassx_nl_NL.ts b/share/translations/keepassx_nl_NL.ts
index d7d03446a..82d1e810f 100644
--- a/share/translations/keepassx_nl_NL.ts
+++ b/share/translations/keepassx_nl_NL.ts
@@ -11,7 +11,7 @@
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Meld problemen op: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>Meld problemen op: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt; https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
@@ -23,11 +23,11 @@
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Zie bijdragen op GitHub&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Toon bijdragen op GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
- <translation>Foutopsporingsinformatie</translation>
+ <translation>Foutinformatie</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
@@ -43,19 +43,39 @@
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>Een extra dank-je-wel van het KeePassXC-team gaat naar debfx voor het creëren van het oorspronkelijke KeePassX.</translation>
+ <translation>Bijzondere dank van het KeePassXC-team gaat uit naar debfx voor het creëren van het oorspronkelijke KeePassX.</translation>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH-agent activeren (vereist herstart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Gebruik OpenSSH voor Windows in plaats van Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>SSH Agent-integratie inschakelen</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK waarde</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK overschrijven</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(leeg)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Geen SSH Agent-socket beschikbaar. Zorg ervoor dat de omgevingsvariabele SSH_AUTH_SOCK bestaat of stel een overschrijving in.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH Agent-verbinding werkt!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Weet je zeker dat je de algemene en beveiligingsinstellingen opnieuw wilt instellen?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochrome (licht)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochrome (donker)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Kleurrijk</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -120,33 +152,25 @@
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Venster minimaliseren bij het opstarten</translation>
+ <translation>Scherm minimaliseren bij het opstarten</translation>
</message>
<message>
<source>File Management</source>
<translation>Bestandsbeheer</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Databasebestanden veilig opslaan (mogelijk incompatibel met Dropbox, etc.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Back-up databasebestand voor het opslaan</translation>
</message>
<message>
<source>Automatically save after every change</source>
- <translation>Automatisch opslaan na elke wijziging</translation>
+ <translation>Automatisch opslaan na iedere wijziging</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automatisch opslaan bij afsluiten</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Markeer de database niet als gewijzigd voor non-data wijzigingen (bijv. het uitbreiden van groepen)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Database automatisch opnieuw laden als deze van buitenaf is gewijzigd</translation>
</message>
@@ -159,30 +183,14 @@
<translation>Gebruik groepspictogram voor nieuwe items</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Voorvertoning verbergen</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Algemeen</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Werkbalk (pictogrammen) verbergen</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
- <translation>Applicatie minimaliseren in plaats afsluiten</translation>
+ <translation>Minimaliseren in plaats van app afsluiten</translation>
</message>
<message>
<source>Show a system tray icon</source>
<translation>Pictogram in het systeemvak weergeven</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Donker systeemvak-pictogram</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Minimaliseren naar systeemvak</translation>
</message>
@@ -200,15 +208,7 @@
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Altijd vragen voordat Auto-type wordt toegepast</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globale sneltoets voor Auto-type</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Auto-typevertraging</translation>
+ <translation>Altijd vragen voor toepassen Auto-type</translation>
</message>
<message>
<source> ms</source>
@@ -216,12 +216,8 @@
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Auto-type startvertraging</translation>
- </message>
- <message>
<source>Movable toolbar</source>
- <translation>Verplaatsbare gereedschapsbalk</translation>
+ <translation>Verplaatsbare werkbalk</translation>
</message>
<message>
<source>Remember previously used databases</source>
@@ -237,15 +233,11 @@
</message>
<message>
<source>Check for updates at application startup once per week</source>
- <translation>Zoek eens per week bij het opstarten van het programma naar updates</translation>
+ <translation>Controleer eens per week op updates bij het opstarten van het programma</translation>
</message>
<message>
<source>Include beta releases when checking for updates</source>
- <translation>Zoek ook naar bèta-releases bij het zoeken naar updates</translation>
- </message>
- <message>
- <source>Button style:</source>
- <translation>Knopstijl:</translation>
+ <translation>Zoek ook naar bèta-releases bij het controleren op updates</translation>
</message>
<message>
<source>Language:</source>
@@ -293,18 +285,10 @@
<translation>Knopstijl van de werkbalk</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Mono-lettertype gebruiken voor notities</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Taalkeuze</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Standaardinstellingen herstellen</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Globale sneltoets voor Auto-type</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Auto-type startvertraging milliseconden</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>KeePassXC automatisch opstarten met het systeem</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Database markeren als gewijzigd voor niet-inhoudelijke aanpassingen (bijv. uitbreiding van groepen)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Databasebestanden veilig opslaan (uitschakelen bij problemen met Dropbox, enz.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Gebruikersomgeving</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Knopstijl van de werkbalk:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Mono-lettertype gebruiken voor notities</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Systeemvak-pictogram:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Standaardinstellingen terugzetten...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Auto-type typevertraging:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Algemene Auto-type sneltoets:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Auto-type startvertraging:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -325,7 +353,7 @@
</message>
<message>
<source>Clear clipboard after</source>
- <translation>Klembord leegmaken na</translation>
+ <translation>Klembord wissen na</translation>
</message>
<message>
<source> sec</source>
@@ -346,7 +374,7 @@
</message>
<message>
<source>Convenience</source>
- <translation>Gemak</translation>
+ <translation>Gebruiksgemak</translation>
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
@@ -354,7 +382,7 @@
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>TouchID vergeten wanneer sessie is vergrendeld of deksel is gesloten</translation>
+ <translation>TouchID vergeten wanneer sessie wordt vergrendeld of deksel wordt gesloten</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
@@ -365,20 +393,8 @@
<translation>Vergrendelde database na Auto-type weer vergrendelen</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Geen herhaling van wachtwoord vragen als deze zichtbaar is</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Wachtwoord niet verbergen tijdens bewerken</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Geen tijdelijke aanduiding gebruiken voor lege wachtwoordvelden</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Wachtwoorden verbergen in voorvertoning</translation>
+ <translation>Wachtwoorden in voorvertoning verbergen</translation>
</message>
<message>
<source>Hide entry notes by default</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Zoekopdracht wissen na</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Herhaling vereisen wanneer het wachtwoord zichtbaar is</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Wachtwoord verbergen tijdens bewerken</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Tijdelijke aanduiding gebruiken voor lege wachtwoordvelden</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -442,7 +470,7 @@
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Deze Auto-type opdracht bevat argumenten die zeer vaak worden herhaald. Wil je echt doorgaan?</translation>
+ <translation>Deze Auto-type opdracht bevat elementen die zeer vaak worden herhaald. Wil je echt doorgaan?</translation>
</message>
<message>
<source>Permission Required</source>
@@ -450,7 +478,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC heeft de Toegankelijkheid-machtiging nodig om invoerniveau Auto-Type te kunnen uitvoeren. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten.</translation>
+ <translation>KeePassXC heeft de Toegankelijkheid-machtiging nodig om invoerniveau Auto-type te kunnen uitvoeren. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten.</translation>
</message>
</context>
<context>
@@ -506,7 +534,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC heeft de Toegankelijkheid- en Schermopname-machtiging nodig om globale Auto-Type te kunnen uitvoeren. Schermopname is benodigd om het venster te gebruiken om invoer te kunnen vinden. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten.</translation>
+ <translation>KeePassXC heeft de Toegankelijkheid- en Schermopname-machtiging nodig om globale Auto-type te kunnen uitvoeren. Schermopname is benodigd om het venster te gebruiken om invoer te kunnen vinden. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten.</translation>
</message>
</context>
<context>
@@ -517,7 +545,7 @@
</message>
<message>
<source>Select entry to Auto-Type:</source>
- <translation>Kies item voor Auto-type:</translation>
+ <translation>Kies item om automatisch in te vullen:</translation>
</message>
<message>
<source>Search...</source>
@@ -527,41 +555,43 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser toegang bevestigen</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Verzoek om browsertoegang</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Deze keuze onthouden</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>% 1 vraagt toegang tot de volgende vermeldingen:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Toestaan</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Onthoud de toegang tot aangevinkte vermeldingen</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Weigeren</translation>
+ <source>Remember</source>
+ <translation>Onthouden</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 vraagt voor het volgende toegang tot jouw wachtwoorden.
-Geef aan of je toegang wilt verlenen of niet.</translation>
+ <source>Allow access to entries</source>
+ <translation>Toegang tot vermeldingen toestaan</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Toegang verlenen</translation>
+ <source>Allow Selected</source>
+ <translation>Selectie toestaan</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Toegang weigeren</translation>
+ <source>Deny All</source>
+ <translation>Alles weigeren</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Uitschakelen voor deze website</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-browser: Item opslaan</translation>
+ <translation>KeePassXC-Browser: Item opslaan</translation>
</message>
<message>
<source>Ok</source>
@@ -574,204 +604,265 @@ Geef aan of je toegang wilt verlenen of niet.</translation>
<message>
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
- <translation>Je hebt meerdere databases open.
+ <translation>Er zijn meerdere databases geopend.
Selecteer de database voor het opslaan van de inloggegevens.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialoog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Nieuw verzoek voor sleutelkoppeling</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Dit is vereist voor toegang tot jouw databases met KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Opslaan en toegang verlenen</translation>
</message>
<message>
- <source>General</source>
- <translation>Algemeen</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Bestaande sleutel overschrijven?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Activeer integratie voor deze browsers:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Een gedeelde coderingssleutel met de naam &quot;%1&quot; bestaat al.
+Wil je deze overschrijven?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Item bijwerken</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Wil je de gegevens in %1 - %2 bijwerken?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Afbreken</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Kenmerken worden omgezet in aangepaste gegevens...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Een &amp;melding tonen wanneer inloggegevens worden gevraagd</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Omgezette KeePassHTTP-kenmerken</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Verzoek om database te ontgrendelen</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Kenmerken van %1 item(s) is/zijn omgezet.
+%2 sleutels naar aangepaste gegevens verplaatst.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Sleutel is verplaats naar speciale data.</numerusform><numerusform>%n Sleutels zijn verplaatst naar aangepaste gegevens.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Alleen items van hetzelfde schema (http://, https://, …) worden gegeven.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Geen item met KeePassHTTP-kenmerken gevonden!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Vergelijk URL-sche&amp;ma&apos;s (bijv. https://…)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>De actieve database bevat geen item met KeePassHTTP-kenmerken.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Geeft alleen de beste overeenkomsten terug voor een specifieke URL in plaats van alle items voor het hele domein.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: instellingen voor oudere browserintegratie gedetecteerd</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Geef alleen de best ove&amp;reenkomende inloggegevens</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Een nieuwe groep aanmaken</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sorteer &amp;overeenkomende inloggegevens op naam</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Een aanvraag voor het aanmaken van een nieuwe groep &apos;%1&apos; werd ontvangen.
+Wil je deze groep aanmaken?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sorteer overeenkomende inloggegevens op &amp;gebruikersnaam</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>De KeePassXC-Browser instellingen moeten worden verplaatst naar de instellingen-database.
+Dit is nodig om de huidige browserverbindingen te behouden.
+Wil je de bestaande instellingen nu migreren?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Geavanceerd</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Deze waarschuwing niet meer geven</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nooit &amp;waarschuwen bij toegang tot inloggegevens</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Je hebt een associatieverzoek ontvangen voor de volgende database:%1
+
+Geef de verbinding een unieke naam of ID, voorbeeld:
+chrome-laptop</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nooit waarschuwen bij &amp;bijwerken van inloggegevens</translation>
+ <source>Dialog</source>
+ <translation>Dialoog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Zoek in alle geopende databases voor overeenkomende inloggegevens</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Dit is vereist voor toegang tot jouw databases met KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund.</translation>
+ <source>Enable browser integration</source>
+ <translation>Browserintegratie inschakelen</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Lever &amp;geavanceerde tekenreeks-velden die met &quot;KPH: &quot; beginnen.</translation>
+ <source>General</source>
+ <translation>Algemeen</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Wijzig bij het opstarten automatisch het zoekpad van KeePassXC of keepassxc-proxy naar de native messaging scripts.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Browsers die als snaps zijn geïnstalleerd, worden momenteel niet ondersteund.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>&amp;Native messaging manifest-bestanden vernieuwen bij het opstarten</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Activeer integratie voor deze browsers:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Ondersteun een proxy-programma tussen KeePassXC en de browserextensie.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Gebruik een &amp;proxy-programma tussen KeePassXC en de browserextensie</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Gebruik een aangepaste proxy-locatie als je zelf een proxy hebt geïnstalleerd.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Gebruik een &amp;aangepaste proxy-locatie</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Bladeren…</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Waarschuwing:&lt;/b&gt; De volgende opties kunnen gevaarlijk zijn!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Selecteer aangepaste proxy-locatie</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Toon een melding wanneer om referenties wordt gevraagd</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Uitvoerbare bestanden</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Verzoek om ontgrendeling van de database als deze is vergrendeld</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Alle bestanden</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Alleen items van hetzelfde schema (http://, https://, …) worden gegeven.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Vraag geen toestemming voor HTTP &amp;Basis-authenticatie</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Overeenkomstig URL-schema (bijv. https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Vanwege de module sandboxing is het nodig een script uit te voeren dat de browser integratie mogelijk maakt. &lt;br /&gt; Je kunt dit script krijgen via %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Geeft alleen de beste overeenkomsten terug voor een specifieke URL in plaats van alle items voor het hele domein.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Raadpleeg onderstaande instructies voor het gebruik van browserextensies</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Geef alleen best overeenkomende inloggegevens</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser is vereist voor het functioneren van de browserintegratie. &lt;br /&gt; Download het voor %1 en %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Geeft verlopen inloggegevens. Woord [expired] is aan de titel toegevoegd.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Verlopen inloggegevens toestaan</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Geeft verlopen inloggegevens. Woord [expired] is aan de titel toegevoegd.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Alle databases verbonden met de extensie kunnen overeenkomende inloggegevens geven.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Verlopen inloggegevens toestaan.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Zoek in alle geopende databases naar overeenkomende inloggegevens</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Browserintegratie inschakelen</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sorteer inloggegevens op titel</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Browsers die als snaps zijn geïnstalleerd, worden momenteel niet ondersteund.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sorteer inloggegevens op gebruikersnaam</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Alle databases verbonden met de extensie kunnen overeenkomende inloggegevens geven.</translation>
+ <source>Advanced</source>
+ <translation>Geavanceerd</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nooit waarschuwen bij toegang tot logingegevens</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nooit waarschuwen bij bijwerken van inloggegevens</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Vraag geen toestemming voor HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Lever geavanceerde tekenreeksvelden die beginnen met &quot;KPH:&quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Laat de pop-up die de migratie van KeePassHTTP naar KeePassXC-Browser aanbiedt, niet meer zien.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Vraag niet om de KeePassHTTP instellingen te migreren naar KeePassXC-Browser.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Vraag niet om migratie van KeePassHTTP-instellingen.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Wijzig bij het opstarten automatisch het zoekpad van KeePassXC of keepassxc-proxy naar de native messaging scripts.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Native messaging-manifestbestanden bij het opstarten bijwerken</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Gebruik een aangepaste proxy-locatie als je zelf een proxy hebt geïnstalleerd.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Aangepaste proxy-locatie toepassen:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,117 +873,92 @@ Selecteer de database voor het opslaan van de inloggegevens.</translation>
<translation>Blader naar eigen Proxy configuratiebestand</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Waarschuwing&lt;/b&gt;, de keepassxc-proxy-applicatie kon niet worden gevonden!&lt;br /&gt;Controleer de KeePassXC-installatiefolder of geef het aangepaste pad op in de geavanceerde instellingen.&lt;br /&gt;Zonder de proxy-applicatie zal browserintegratie NIET WERKEN.&lt;br /&gt;Verwacht pad: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Bladeren…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Nieuw verzoek voor sleutelkoppeling</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Aangepaste locatie voor de browserconfiguratie gebruiken:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Opslaan en toegang verlenen</translation>
+ <source>Browser type:</source>
+ <translation>Browser-type:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Bestaande sleutel overschrijven?</translation>
+ <source>Toolbar button style</source>
+ <translation>Knopstijl van de werkbalk</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Een gedeelde encryptiesleutel met de naam &quot;%1&quot; bestaat al.
-Wil je deze overschrijven?</translation>
+ <source>Config Location:</source>
+ <translation>Locatie configuratiebestand:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Item bijwerken</translation>
+ <source>Custom browser location field</source>
+ <translation>Aangepast locatieveld van de browser</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Wil je de gegevens in %1 - %2 bijwerken?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Afbreken</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Blader naar een aangepast browserpad</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Kenmerken worden omgezet in gebruikersinstellingen...</translation>
+ <source>Custom extension ID:</source>
+ <translation>Aangepast extensie-ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Geconverteerde KeePassHTTP-kenmerken</translation>
+ <source>Custom extension ID</source>
+ <translation>Aangepast extensie-ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Kenmerken van %1 item(s) is/zijn geconverteerd.
-%2 sleutels naar gebruikersinstellingen verplaatst.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Verplaatst %n sleutels aan aangepaste gegevens.</numerusform><numerusform>%n sleutels verplaatst naar gebruikersinstellingen.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Vanwege de Snap-sandboxing moet je een script uitvoeren waarmee browserintegratie mogelijk wordt. &lt;br /&gt; Je kunt dit script vinden op %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Geen item met KeePassHTTP-kenmerken gevonden!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser is vereist om de integratie van de browser te laten werken. &lt;br /&gt; download het voor %1 en %2 en %3. %4.</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>De actieve database bevat geen item met KeePassHTTP-kenmerken.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Raadpleeg onderstaande speciale instructies voor gebruik van browserextensie </translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Instellingen voor oudere browserintegratie gedetecteerd</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>Fout:&lt;/b&gt; De aangepaste proxy-locatie is niet gevonden!&lt;br/&gt;Browserintegratie WERKT NIET zonder de proxy-applicatie.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Een nieuwe groep aanmaken</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Waarschuwing:&lt;/b&gt; De volgende opties kunnen gevaarlijk zijn!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Een aanvraag voor het aanmaken van een nieuwe groep &apos;%1&apos; werd ontvangen.
-Wil je deze groep aanmaken?
-</translation>
+ <source>Executable Files</source>
+ <translation>Uitvoerbare bestanden</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>De KeePassXC-Browser instellingen moeten worden verplaatst naar de instellingen-database.
-Dit is nodig om de huidige browser verbindingen te behouden.
-Wil je de bestaande instellingen nu migreren?</translation>
+ <source>All Files</source>
+ <translation>Alle bestanden</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Deze waarschuwing niet meer geven</translation>
+ <source>Select custom proxy location</source>
+ <translation>Selecteer aangepaste proxy-locatie</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Je hebt een associatieverzoek ontvangen voor de volgende database:%1
-
-Geef de verbinding een unieke naam of ID, voorbeeld:
-chrome-laptop</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Selecteer de locatie van de native messaging-hostmap</translation>
</message>
</context>
<context>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
- <translation>Opties klonen</translation>
+ <translation>Opties dupliceren</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Voeg &apos; - Kloon&apos; toe aan naam</translation>
+ <translation>Voeg &apos; - Duplicaat&apos; toe aan naam</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -900,7 +966,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Copy history</source>
- <translation>Geschiedenis kopiëren</translation>
+ <translation>Historie kopiëren</translation>
</message>
</context>
<context>
@@ -919,7 +985,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Encoding</source>
- <translation>Coderen</translation>
+ <translation>Codering</translation>
</message>
<message>
<source>Codec</source>
@@ -927,7 +993,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>Tekst is geschikt bevonden door</translation>
+ <translation>Tekst staat tussen</translation>
</message>
<message>
<source>Fields are separated by</source>
@@ -938,10 +1004,6 @@ chrome-laptop</translation>
<translation>Commentaar start met</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Eerste record bevat veldnamen</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Beschouw &apos;\&apos; als escape-teken</translation>
</message>
@@ -950,14 +1012,6 @@ chrome-laptop</translation>
<translation>Voorvertoning</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Kolomsgewijs</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Niet aanwezig in CSV-bestand</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Geïmporteerd uit CSV-bestand</translation>
</message>
@@ -970,20 +1024,12 @@ chrome-laptop</translation>
<translation>Fout</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Lege veldnaam %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>kolom %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Fout(en) gevonden in CSV-bestand!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n meer bericht(en) overgeslagen]</numerusform><numerusform>[%n meer bericht(en) overgeslagen]</numerusform></translation>
+ <translation><numerusform>[%n meer bericht(en) overgeslagen]</numerusform><numerusform>[%n bericht(en) overgeslagen]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1007,12 +1053,64 @@ chrome-laptop</translation>
<source>CSV import preview</source>
<translation>CSV import voorbeeld</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Kolomverwijzing</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Laatst bewerkt</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Wachtwoord</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Aangemaakt</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notities</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Naam</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Groep</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Gebruikersnaam</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Koptekstregels overgeslagen</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>De eerste regel bevat veldnamen</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Niet aanwezig</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Kolom %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n kolom(men)</numerusform><numerusform>%n kolom(men)</numerusform></translation>
+ <translation><numerusform>1 kolom</numerusform><numerusform>%n kolom(men)</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1021,7 +1119,7 @@ chrome-laptop</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n byte(s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
+ <translation><numerusform>%n byte (s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
@@ -1031,11 +1129,6 @@ chrome-laptop</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Alles</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Bestand %1 bestaat niet.</translation>
</message>
@@ -1049,11 +1142,11 @@ chrome-laptop</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>Bestand kan niet worden geschreven omdat het in alleen-lezen modus is geopend.</translation>
+ <translation>Bestand kan niet worden geschreven omdat het in de alleen-lezen modus is geopend.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Sleutel niet getransformeerd. Dit is een fout, rapporteer dit alstublieft aan de ontwikkelaars!</translation>
+ <translation>Sleutel is niet getransformeerd. Dit is een fout, rapporteer deze alsjeblieft aan de ontwikkelaars!</translation>
</message>
<message>
<source>%1
@@ -1077,12 +1170,25 @@ Back-up databestand op %2</translation>
<source>Recycle Bin</source>
<translation>Prullenbak</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Wachtwoorden</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Database wordt opgeslagen.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Niet opgeslagen, database is niet geïnitialiseerd!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Ontgrendel database - KeePassXC</translation>
+ <translation>Database ontgrendelen - KeePassXC</translation>
</message>
</context>
<context>
@@ -1104,9 +1210,9 @@ Back-up databestand op %2</translation>
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst niet wordt ondersteund .
+ <translation>Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst niet ondersteund zal worden.
-Overweeg een nieuw sleutelbestand te genereren.</translation>
+Het is raadzaam om een nieuw sleutelbestand te genereren.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1129,10 +1235,6 @@ Overweeg een nieuw sleutelbestand te genereren.</translation>
<translation>Kon sleutelbestand niet openen: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Kies positie...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Ontgrendel KeePassXC-database</translation>
</message>
@@ -1145,14 +1247,6 @@ Overweeg een nieuw sleutelbestand te genereren.</translation>
<translation>Wachtwoord invulveld</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Wachtwoord wel/niet weergeven.</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Sleutelbestand</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Hardwaresleutel positie selectie</translation>
</message>
@@ -1213,14 +1307,10 @@ Om deze fout te voorkomen ga je naar &quot;Database instellingen.../Beveiliging&
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Je kunt een hardwarebeveiligingssleutel gebruiken, zoals een &lt;strong&gt;YubiKey&lt;/strong&gt; of &lt;strong&gt;OnlyKey&lt;/strong&gt; met posities (&quot;slots&quot;) geconfigureerd voor HMAC-SHA1.&lt;/p&gt;
+ <translation>&lt;p&gt;Je kunt een hardwarebeveiligingssleutel gebruiken, zoals een &lt;strong&gt;YubiKey&lt;/strong&gt; of &lt;strong&gt;OnlyKey&lt;/strong&gt; met posities (slots) geconfigureerd voor HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Klik voor meer informatie...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Je kunt de beveiliging van uw database vergroten door naast het hoofdwachtwoord een geheim bestand te gebruiken. Zo een bestand kan worden gegenereerd vanuit de beveiligingsinstellingen van uw database.&lt;/p&gt;&lt;p&gt;Dit is &lt;strong&gt;niet&lt;/strong&gt; je *.kdbx database bestand!&lt;br&gt;Als je geen sleutelbestand hebt, kun je het veld leeg laten.&lt;/p&gt;&lt;p&gt;Klik hier voor meer informatie...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Sleutelbestandhulp</translation>
</message>
@@ -1229,10 +1319,6 @@ Om deze fout te voorkomen ga je naar &quot;Database instellingen.../Beveiliging&
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Kies sleutelbestand...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Kan database niet als sleutelbestand gebruiken</translation>
</message>
@@ -1242,6 +1328,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Je kunt je database niet als sleutelbestand gebruiken.
Als je geen sleutelbestand hebt laat je het veld leeg.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Naast een wachtwoord kan je een geheim bestand gebruiken om de beveiliging van je database te verbeteren. Dit bestand kan worden gegenereerd in de beveiligingsinstellingen van je database.&lt;/p&gt;&lt;p&gt;Dit is &lt;strong&gt;niet&lt;/strong&gt; jouw *.kdbx database-bestand!&lt;br&gt;Laat dit veld leeg als je geen sleutelbestand gebruikt.&lt;/p&gt;&lt;p&gt;Klik hier voor meer informatie...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Sleutelbestand om de database te ontgrendelen</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Druk op de knop van je YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Hardwaresleutels detecteren...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Geen hardwaresleutels gedetecteerd</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Selecteer hardwaresleutel...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1265,10 +1375,6 @@ Als je geen sleutelbestand hebt laat je het veld leeg.</translation>
<translation>Beveiliging</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Hoofdsleutel</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Versleutelingsinstellingen</translation>
</message>
@@ -1276,24 +1382,16 @@ Als je geen sleutelbestand hebt laat je het veld leeg.</translation>
<source>Browser Integration</source>
<translation>Browserintegratie</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Databasegegevens</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
<message>
<source>KeePassXC-Browser settings</source>
- <translation>KeePassXC-browserinstellingen</translation>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Verbreek verbinding met alle browsers</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Vergeet alle site-specifieke instellingen bij items</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Verplaats KeePassHTTP-kenmerken naar KeePassXC-browser &amp;gebruikersinstellingen</translation>
+ <translation>KeePassXC-Browser instellingen</translation>
</message>
<message>
<source>Stored keys</source>
@@ -1305,13 +1403,13 @@ Als je geen sleutelbestand hebt laat je het veld leeg.</translation>
</message>
<message>
<source>Delete the selected key?</source>
- <translation>De geselecteerde sleutel verwijderen?</translation>
+ <translation>Geselecteerde sleutel verwijderen?</translation>
</message>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
<translation>Wil je de geselecteerde sleutel echt verwijderen?
-Hierdoor werkt de verbinding met de browser-plugin mogelijk niet meer.</translation>
+Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer.</translation>
</message>
<message>
<source>Key</source>
@@ -1327,13 +1425,13 @@ Hierdoor werkt de verbinding met de browser-plugin mogelijk niet meer.</translat
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>Verbreek verbinding met alle browsers</translation>
+ <translation>Verbreek de verbinding met alle browsers</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
<translation>Wil je echt de verbinding met alle browsers verbreken?
-Hierdoor werkt de verbinding met de browser-plugin mogelijk niet meer.</translation>
+Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
@@ -1341,7 +1439,7 @@ Hierdoor werkt de verbinding met de browser-plugin mogelijk niet meer.</translat
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>Geen gedeelde coderingssleutels gevonden in KeePassXC-instellingen.</translation>
+ <translation>Geen gedeelde coderingssleutels gevonden in KeePassXC instellingen.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
@@ -1349,7 +1447,7 @@ Hierdoor werkt de verbinding met de browser-plugin mogelijk niet meer.</translat
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>%n encryptiesleutel(s) is/zijn verwijderd van KeePassXC-instellingen.</numerusform><numerusform>%n encryptiesleutel(s) is/zijn verwijderd van KeePassXC-instellingen.</numerusform></translation>
+ <translation><numerusform>%n coderingssleutel uit KeePassXC instellingen verwijderd.</numerusform><numerusform>Er zijn %n coderingssleutel(s) uit KeePassXC-instellingen verwijderd.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1370,11 +1468,11 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: Machtigingen verwijderd</translation>
+ <translation>KeePassXC: machtigingen verwijderd</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Machtigingen van %n item(s) zijn verwijderd.</numerusform><numerusform>Machtigingen van %n item(s) zijn verwijderd.</numerusform></translation>
+ <translation><numerusform>Machtigingen zijn verwijderd uit %n item(s).</numerusform><numerusform>Machtigingen zijn verwijderd uit %n item(s).</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1386,13 +1484,13 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>Verplaats KeePassHTTP-kenmerken naar gebruikersinstellingen</translation>
+ <translation>KeePassHTTP-kenmerken naar aangepaste gegevens verplaasen</translation>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>Wil je alle instellingen voor de oudere browserintegratie omzetten naar de nieuwste standaard?
-Dit is nodig om compatibiliteit met de browser-plugin te behouden.</translation>
+ <translation>Wil je echt alle instellingen voor de oudere browserintegratie veranderen naar de nieuwste standaard?
+Dit is nodig om compatibiliteit met de browserextensie te behouden.</translation>
</message>
<message>
<source>Stored browser keys</source>
@@ -1402,6 +1500,67 @@ Dit is nodig om compatibiliteit met de browser-plugin te behouden.</translation>
<source>Remove selected key</source>
<translation>Geselecteerde sleutel verwijderen</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Verplaats KeePassHTTP-kenmerken naar aangepaste KeePassXC-Browser-gegevens</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Database-rootgroep-ID vernieuwen</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Aangemaakt</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Database-ID vernieuwen</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Wilt je echt de database-ID vernieuwen?
+Dit is alleen nodig als je database een kopie is van een andere en de browserextensie geen verbinding kan maken.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Extra beveiliging toevoegen...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Geen wachtwoord ingesteld</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>WAARSCHUWING! Je hebt geen wachtwoord ingesteld. Een database gebruiken zonder wachtwoord wordt sterk afgeraden!
+
+Weet je zeker dat je door wilt gaan zonder een wachtwoord?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Doorgaan zonder wachtwoord</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Geen coderingssleutel toegevoegd</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Je moet minstens één coderingssleutel aan je database toevoegen om deze te beveiligen!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Onbekende fout</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Veranderen van databasereferenties is mislukt</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1426,10 +1585,6 @@ Dit is nodig om compatibiliteit met de browser-plugin te behouden.</translation>
<translation>Transformatie-iteraties:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Benchmark 1 seconde vertraging</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Geheugengebruik:</translation>
</message>
@@ -1450,14 +1605,6 @@ Dit is nodig om compatibiliteit met de browser-plugin te behouden.</translation>
<translation>Wijzigen</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Hogere waarden bieden meer bescherming, maar laten het openen van de database langer duren.</translation>
</message>
@@ -1514,7 +1661,7 @@ Als je dit aantal aanhoudt, kan het uren, dagen (of zelfs langer) duren om de da
If you keep this number, your database may be too easy to crack!</source>
<translation>Je gebruikt een zeer laag aantal sleuteltransformatie-iteraties met AES-KDF.
-Als je dit aantal aanhoudt is je database mogelijk eenvoudig te kraken!</translation>
+Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kraken!</translation>
</message>
<message>
<source>KDF unchanged</source>
@@ -1532,17 +1679,7 @@ Als je dit aantal aanhoudt is je database mogelijk eenvoudig te kraken!</transla
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform> thread(s)</numerusform><numerusform> thread(s)</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform>thread(s)</numerusform><numerusform>thread(s)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1576,6 +1713,14 @@ Als je dit aantal aanhoudt is je database mogelijk eenvoudig te kraken!</transla
<source>Parallelism</source>
<translation>Parallelliteit</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1584,16 +1729,16 @@ Als je dit aantal aanhoudt is je database mogelijk eenvoudig te kraken!</transla
<translation>Beschikbare items</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Deze database niet beschikbaar maken</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Deze database niet blootstellen</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Items onder deze groep beschikbaar stellen:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Items onder deze groep blootstellen:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Schakel fd.o Secret Service in om toegang te krijgen tot deze instellingen.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Schakel Secret Service in om toegang te krijgen tot deze instellingen.</translation>
</message>
</context>
<context>
@@ -1616,11 +1761,11 @@ Als je dit aantal aanhoudt is je database mogelijk eenvoudig te kraken!</transla
</message>
<message>
<source>History Settings</source>
- <translation>Geschiedenis instellingen</translation>
+ <translation>Geschiedenis-instellingen</translation>
</message>
<message>
<source>Max. history items:</source>
- <translation>Max. aantal vorige versies:</translation>
+ <translation>Max. geschiedenisitems:</translation>
</message>
<message>
<source>Max. history size:</source>
@@ -1636,11 +1781,7 @@ Als je dit aantal aanhoudt is je database mogelijk eenvoudig te kraken!</transla
</message>
<message>
<source>Additional Database Settings</source>
- <translation>Extra database instellingen</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>&amp;Compressie toepassen (aanbevolen)</translation>
+ <translation>Extra database-instellingen</translation>
</message>
<message>
<source>Database name field</source>
@@ -1676,6 +1817,10 @@ Deze actie is onomkeerbaar.</translation>
<source> (old)</source>
<translation>(oud)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Compressie inschakelen (aanbevolen)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1697,7 +1842,7 @@ Deze actie is onomkeerbaar.</translation>
</message>
<message>
<source>Last Signer</source>
- <translation>Laatste ondertekenaar</translation>
+ <translation>Laatste Ondertekenaar</translation>
</message>
<message>
<source>Certificates</source>
@@ -1710,49 +1855,10 @@ Deze actie is onomkeerbaar.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Extra beveiliging toevoegen...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Geen coderingssleutel toegevoegd</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Je moet minstens één coderingssleutel aan je database toevoegen om deze te beveiligen!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Geen wachtwoord ingesteld</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>WAARSCHUWING! Je hebt geen wachtwoord ingesteld. Een database gebruiken zonder wachtwoord wordt sterk afgeraden!
-
-Weet je zeker dat je door wilt gaan zonder wachtwoord?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Onbekende fout</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Hoofdsleutel niet kunnen wijzigen</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Doorgaan zonder wachtwoord</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
- <translation>Databasenaam:</translation>
+ <translation>Database naam:</translation>
</message>
<message>
<source>Description:</source>
@@ -1768,125 +1874,6 @@ Weet je zeker dat je door wilt gaan zonder wachtwoord?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistieken</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Beweeg de muis over regels met foutpictogrammen voor meer informatie.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Naam</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Waarde</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Databasenaam</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Beschrijving</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Locatie</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Laatst opgeslagen</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Niet-opgeslagen wijzigingen</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>ja</translation>
- </message>
- <message>
- <source>no</source>
- <translation>nee</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>De database is bewerkt, maar de wijzigingen zijn nog niet opgeslagen.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Aantal groepen</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Aantal items</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Aantal verlopen items</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>De database bevat items die verlopen zijn.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Unieke wachtwoorden</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Niet-unieke wachtwoorden</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Meer dan 10% van de wachtwoorden zijn dubbel gebruikt. Gebruik waar mogelijk unieke wachtwoorden.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maximaal wachtwoordherbruik</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Verscheidene wachtwoorden worden meer dan drie keer gebruikt. Gebruik waar mogelijk unieke wachtwoorden.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Aantal korte wachtwoorden</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Aangeraden minimumlengte voor wachtwoorden is 8 tekens.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Aantal zwakke wachtwoorden</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Het is aanbevolen om lange, willekeurige wachtwoorden te gebruiken met een beoordeling van &apos;goed&apos; of &apos;uitstekend&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Gemiddelde wachtwoordlengte</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 tekens</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Gemiddeld wachtwoordlengte is minder dan tien tekens. Langere wachtwoorden bieden meer veiligheid.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Een moment geduld, databasestatistieken worden berekend...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1926,13 +1913,13 @@ Weet je zeker dat je door wilt gaan zonder wachtwoord?</translation>
</message>
<message>
<source>Database creation error</source>
- <translation>Fout bij aanmaken van de database:</translation>
+ <translation>Fout bij het aanmaken van de database:</translation>
</message>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation>De aangemaakte database heeft geen sleutel of KDF en kan niet worden opgeslagen.
-Dit is zeker een bug, rapporteer dit alsjeblieft aan de ontwikkelaars.</translation>
+ <translation>De aangemaakte database heeft geen sleutel of KDF en kan daarom niet worden opgeslagen.
+Dit is zeker een fout, rapporteer dit aan de ontwikkelaars.</translation>
</message>
<message>
<source>Select CSV file</source>
@@ -1981,6 +1968,10 @@ Dit is zeker een bug, rapporteer dit alsjeblieft aan de ontwikkelaars.</translat
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Je gaat je database naar een niet-versleuteld bestand exporteren. Dit maakt je wachtwoorden en gevoelige informatie kwetsbaar! Weet je zeker dat je door wil gaan?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>OPVault openen</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1990,7 +1981,7 @@ Dit is zeker een bug, rapporteer dit alsjeblieft aan de ontwikkelaars.</translat
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Weet je zeker dat je het item &quot;%1&quot; definitief wil verwijderen?</translation>
+ <translation>Weet je zeker dat je item &quot;%1&quot; definitief wil verwijderen?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
@@ -1998,7 +1989,7 @@ Dit is zeker een bug, rapporteer dit alsjeblieft aan de ontwikkelaars.</translat
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Wil je echt %n entry(s) naar de prullenbak verplaatsen?</numerusform><numerusform>Weet je zeker dat je %n entry(s) naar de prullenbak wil verplaatsen?</numerusform></translation>
+ <translation><numerusform>Wil je echt %n item naar de Prullenbak verplaatsen?</numerusform><numerusform>Weet je zeker dat je %n item(s) naar de prullenbak wilt verplaatsen?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2038,7 +2029,7 @@ Dit is zeker een bug, rapporteer dit alsjeblieft aan de ontwikkelaars.</translat
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation>Het databasebestand is gewijzigd. Wil je de wijzigingen laden?</translation>
+ <translation>Het database-bestand is gewijzigd. Wil je de aanpassingen inlezen?</translation>
</message>
<message>
<source>Merge Request</source>
@@ -2056,11 +2047,11 @@ Wil je de wijzigingen samenvoegen?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Weet je zeker dat je alles uit de prullenbak definitief wil verwijderen?</translation>
+ <translation>Weet je zeker dat je alles definitief uit de prullenbak wil verwijderen?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Wil je echt %n entry(s) definitief verwijderen?</numerusform><numerusform>Weet je zeker dat je %n entry(s) definitief wil verwijderen?</numerusform></translation>
+ <translation><numerusform>Wilt u echt %n item(s) voorgoed verwijderen?</numerusform><numerusform>Weet je zeker dat je %n item(s) definitief wilt verwijderen?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2068,7 +2059,7 @@ Wil je de wijzigingen samenvoegen?</translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Entry(s) naar Prullenbak verplaatsen</numerusform><numerusform>Item(s) naar Prullenbak verplaatsen</numerusform></translation>
+ <translation><numerusform>Item(s) naar prullenbak verplaatsen?</numerusform><numerusform>Item(s) naar prullenbak verplaatsen?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2081,7 +2072,7 @@ Wil je de wijzigingen samenvoegen?</translation>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>&quot;%1&quot; is gewijzigd.
+ <translation>&quot;%1&quot; is aangepast.
Wijzigingen opslaan?</translation>
</message>
<message>
@@ -2097,7 +2088,7 @@ Wijzigingen opslaan?</translation>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>Kan het nieuwe databasebestand niet openen tijdens het automatisch herladen.
+ <translation>Kan het nieuwe databasebestand niet openen tijdens het automatisch opnieuw laden.
Fout: %1</translation>
</message>
<message>
@@ -2107,7 +2098,7 @@ Fout: %1</translation>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>KeePassXC heeft meerdere keren geprobeerd de database op te slaan maar het is niet gelukt. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatie-dienst het bestand bezet houd.
+ <translation>KeePassXC heeft de database meerdere keren niet kunnen opslaan. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatie-dienst het bestand vergrendeld houdt.
Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
@@ -2128,11 +2119,11 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>Item &quot;%1&quot; heeft %2 referentie(s). Wil je verwijzingen vervangen door waarden, dit item overslaan, of alsnog verwijderen?</numerusform><numerusform>Item &quot;%1&quot; heeft %2 referentie(s). Wil je verwijzingen vervangen door waarden, dit item overslaan, of alsnog verwijderen?</numerusform></translation>
+ <translation><numerusform>Vermelding &quot;%1&quot; heeft %2 reference(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of verwijderen toch?</numerusform><numerusform>Item &quot;%1&quot; heeft %2 referentie(s). Wil je de verwijzingen vervangen door waarden, dit bericht overslaan, of toch verwijderen ?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
- <translation>Verwijder groep</translation>
+ <translation>Groep verwijderen</translation>
</message>
<message>
<source>Move group to recycle bin?</source>
@@ -2140,7 +2131,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Wil je echt de groep &apos;%1&apos; naar de prullenbak verplaatsen?</translation>
+ <translation>Weet je zeker dat je de groep &apos;%1&apos; naar de prullenbak wilt verplaatsen?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
@@ -2162,6 +2153,14 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>De database is in alleen-lezenmodus geopend. Automatisch opslaan is uitgeschakeld.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Database-backup opslaan</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Databasebestand is niet aangetroffen: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2206,14 +2205,6 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<translation>Kies persoonlijke sleutel</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Bestand te groot voor een persoonlijke sleutel</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Niet gelukt het sleutelbestand te openen</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Item geschiedenis</translation>
</message>
@@ -2223,11 +2214,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Edit entry</source>
- <translation>Item bewerken</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Wachtwoorden komen niet overeen.</translation>
+ <translation>Item wijzigen</translation>
</message>
<message>
<source>New attribute</source>
@@ -2243,39 +2230,23 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>1 week</numerusform><numerusform>%n weken</numerusform></translation>
+ <translation><numerusform>%n week</numerusform><numerusform>%n weken</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n maand(en)</numerusform><numerusform>%n maand(en)</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Gegenereerde wachtwoord opslaan?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Wil je het gegenereerde wachtwoord in dit item opslaan?</translation>
+ <translation><numerusform>%n maand</numerusform><numerusform>%n maanden</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Het item is bijgewerkt.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Het item heeft niet opgeslagen wijzigingen</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Nieuw kenmerk %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[BEVEILIGD] Klik toon om de kijken of wijzigen</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation><numerusform>1 jaar</numerusform><numerusform>%n jaren</numerusform></translation>
+ <translation><numerusform>%n jaar</numerusform><numerusform>%n jaren</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
@@ -2293,6 +2264,26 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Weet je zeker dat je dit URL wil verwijderen?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Onthullen</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Verbergen</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Niet-opgeslagen wijzigingen</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Wil je de wijzigingen in dit item opslaan?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[BESCHERMD] Druk op Onthullen om te bekijken of te bewerken</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2318,7 +2309,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Reveal</source>
- <translation>Weergeven</translation>
+ <translation>Onthullen</translation>
</message>
<message>
<source>Attachments</source>
@@ -2368,6 +2359,14 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<source>Background color selection</source>
<translation>Achtergrondkleurselectie</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Indien aangevinkt, zal het item niet verschijnen in rapporten zoals Health Check en HIBP, zelfs als het niet voldoet aan de kwaliteitseisen (bijv. wachtwoord-entropie of hergebruik). Je kunt het vinkje plaatsen als je geen controle hebt over het wachtwoord (bijvoorbeeld als het een viercijferige pincode moet zijn) om te voorkomen dat de rapporten onoverzichtelijk worden.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Uitsluiten van databaserapporten</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2376,14 +2375,6 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<translation>Auto-type inschakelen voor dit item</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Standaard Auto-type tekenreeks overnemen van de &amp;groep</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Aan&amp;gepaste Auto-type tekenreeks gebruiken:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Scherm-koppelingen</translation>
</message>
@@ -2439,6 +2430,14 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Aangepaste Auto-type tekenreeks voor dit venster</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Standaard auto-typevolgorde van de groep erven</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Gebruik aangepaste Auto-typevolgorde:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2474,12 +2473,20 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<source>Edit</source>
<translation>Bewerken</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Stuur deze instelling alleen naar de browser voor HTTP Auth-dialogen. Indien ingeschakeld, tonen normale aanmeldingsformulieren dit item niet voor selectie.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Gebruik dit item alleen met HTTP Basic Auth</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
<message>
<source>Show</source>
- <translation>Weergeven</translation>
+ <translation>Tonen</translation>
</message>
<message>
<source>Restore</source>
@@ -2525,34 +2532,22 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<translation>Wachtwoord:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Herhalen:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Naam:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notities</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Voorkeuze</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Selecteer om notities weer te geven.</translation>
+ <translation>Inschakelen om de notities weer te geven.</translation>
</message>
<message>
<source>Username:</source>
<translation>Gebruikersnaam:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Verloopt</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL veld</translation>
</message>
@@ -2561,22 +2556,10 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<translation>Pictogram downloaden voor URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Wachtwoord herhaling veld</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Laat wachtwoordgenerator wel/niet zien.</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Wachtwoord invulveld</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Laat wachtwoord wel/niet zien.</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Laat notities wel/niet zien.</translation>
</message>
@@ -2608,6 +2591,18 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<source>Toggle expiration</source>
<translation>Vervaldatum wel/niet tonen</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Opmerkingen:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Verloopt:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2617,7 +2612,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>Sleutel verwijderen uit agent na</translation>
+ <translation>Sleutel bij agent wegnemen na</translation>
</message>
<message>
<source> seconds</source>
@@ -2629,7 +2624,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>Verwijder sleutel uit agent wanneer de database wordt gesloten/vergrendeld</translation>
+ <translation>Sleutel bij agent wegnemen als de database wordt gesloten/vergrendeld</translation>
</message>
<message>
<source>Public key</source>
@@ -2637,7 +2632,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Voeg sleutel toe aan agent wanneer de database wordt geopend/ontgrendeld</translation>
+ <translation>Sleutel aan agent toevoegen wanneer de database wordt geopend/ontgrendeld</translation>
</message>
<message>
<source>Comment</source>
@@ -2737,16 +2732,12 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>Het item heeft niet opgeslagen wijzigingen</translation>
+ <translation>Het item heeft niet-opgeslagen wijzigingen</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulier</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Type:</translation>
</message>
@@ -2755,10 +2746,6 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<translation>Pad:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Wachtwoord:</translation>
</message>
@@ -2784,7 +2771,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Select import/export file</source>
- <translation>Selecteer import/export bestand</translation>
+ <translation>Selecteer import-/exportbestand</translation>
</message>
<message>
<source>Clear</source>
@@ -2842,57 +2829,25 @@ Ondersteund zijn: %1.</translation>
<translation>Pad naar te delen bestand veld</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Blader naar gedeelde database bestand</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Wachtwoord invulveld</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Laat wachtwoord wel/niet zien.</translation>
+ <source>Clear fields</source>
+ <translation>Wis velden</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Laat wachtwoordgenerator wel/niet zien.</translation>
+ <source>Browse for share file</source>
+ <translation>Blader naar deelbestand</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Wis velden</translation>
+ <source>Browse...</source>
+ <translation>Bladeren…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Naam</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notities</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Verloopt</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Zoeken</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-type</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Gebruik de standaard Auto-type tekenreeks van de bovenliggende groep</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Standaard Auto-type tekenreeks instellen</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Naam veld</translation>
</message>
@@ -2920,24 +2875,44 @@ Ondersteund zijn: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Standaard Auto-type tekenreeks veld</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Standaardpictogram &amp;gebruiken</translation>
+ <source>Expires:</source>
+ <translation>Verloopt:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Gebruik standaard Auto-type volgorde van bovenliggende groep</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Aangepast pictogram gebruiken</translation>
+ <source>Auto-Type:</source>
+ <translation>Auto-type:</translation>
</message>
<message>
+ <source>Search:</source>
+ <translation>Zoeken:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Opmerkingen:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Naam:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Standaard Auto-type tekenreeks instellen</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
- <translation>Pictogram toevoegen</translation>
+ <translation>Aangepast pictogram toevoegen</translation>
</message>
<message>
<source>Delete custom icon</source>
- <translation>Pictogram verwijderen</translation>
+ <translation>Aangepast pictogram verwijderen</translation>
</message>
<message>
<source>Download favicon</source>
@@ -2969,7 +2944,7 @@ Ondersteund zijn: %1.</translation>
</message>
<message>
<source>No icons were loaded</source>
- <translation>Geen pictogrammen werden geladen</translation>
+ <translation>Geen pictogrammen geladen</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
@@ -2977,11 +2952,11 @@ Ondersteund zijn: %1.</translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>De volgende pictogram(men) mislukte(n):</numerusform><numerusform>De volgende pictogram(men) mislukte(n):</numerusform></translation>
+ <translation><numerusform>De volgende pictogram(men) mislukten:</numerusform><numerusform>De volgende pictogram(men) mislukten:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wil verwijderen?</numerusform><numerusform>Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wil verwijderen?</numerusform></translation>
+ <translation><numerusform>Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen?</numerusform><numerusform>Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2996,14 +2971,6 @@ Ondersteund zijn: %1.</translation>
<translation>Gebruik het geselecteerde pictogram voor onderliggende groepen en items</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Pictogram &amp;toepassen op...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Alleen hier toepassen</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Ook toepassen op onderliggende groepen</translation>
</message>
@@ -3019,6 +2986,22 @@ Ondersteund zijn: %1.</translation>
<source>Existing icon selected.</source>
<translation>Bestaand pictogram geselecteerd.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Gebruik standaardicoon</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Gebruik aangepast icoon</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Pictogram toepassen op...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Alleen op deze groep toepassen</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3053,7 +3036,7 @@ Ondersteund zijn: %1.</translation>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>Wil je de geselecteerde plugin-gegevens echt verwijderen?
+ <translation>Weet je zeker dat je de geselecteerde plugin-gegevens wilt verwijderen?
Hierdoor werken de plugins mogelijk niet meer goed.</translation>
</message>
<message>
@@ -3093,7 +3076,7 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>%1 - kloon</translation>
+ <translation>%1 - Duplicaat</translation>
</message>
</context>
<context>
@@ -3135,7 +3118,7 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Weet je zeker dat je %n bijlage(n) wil verwijderen?</numerusform><numerusform>Weet je zeker dat je %n bijlage(n) wil verwijderen?</numerusform></translation>
+ <translation><numerusform>Weet je zeker dat je %n bijlage wil verwijderen?</numerusform><numerusform>Weet je zeker dat je %n bijlagen wil verwijderen?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3175,14 +3158,12 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
</message>
<message>
<source>Confirm remove</source>
- <translation>Verwijderen bevestigen</translation>
+ <translation>Verwijdering bevestigen</translation>
</message>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Kan de volgende bestanden niet openen:
-%1</numerusform><numerusform>Kan de volgende bestanden niet openen:
-%1</numerusform></translation>
+ <translation><numerusform>Kan bestand niet openen: %1</numerusform><numerusform>Kan bestand(en) niet openen: %1</numerusform></translation>
</message>
<message>
<source>Attachments</source>
@@ -3204,6 +3185,20 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
<source>Save selected attachment to disk</source>
<translation>Geselecteerde bijlage opslaan</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 is een groot bestand (%2 MB).
+De database kan erg groot worden en de prestaties verminderen.
+
+Weet je zeker dat je dit bestand wilt toevoegen?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Bijlage bevestigen</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3287,12 +3282,52 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
<translation>Bijlagen</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ja</translation>
+ <source>Size</source>
+ <translation>Grootte</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Groepnaam</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Titel van het item</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Notities bij het item</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Item verloopt op</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Aanmaakdatum</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Datum laatste wijziging</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Datum laatste toegang</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Bijgevoegde bestanden</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Grootte van het item</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Heeft bijlagen</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Bevat TOTP eenmalig wachtwoord</translation>
</message>
</context>
<context>
@@ -3392,6 +3427,13 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Ongeldige URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3418,8 +3460,14 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
<translation>Standaardwaarden opnieuw instellen</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Bijlagen (icoon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Heeft bijlagen</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Heeft TOTP</translation>
</message>
</context>
<context>
@@ -3431,21 +3479,74 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Kan de DBus-service niet registreren op %1: er wordt een andere geheime service uitgevoerd.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n item(s) werden gebruikt door %1</numerusform><numerusform>%n item(s) werden gebruikt door %1</numerusform></translation>
+ <translation><numerusform>%n Item is gebruikt door %1</numerusform><numerusform>%n Items zijn gebruikt door %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Kan DBus-service niet registreren op %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Bestandsnaam</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Groep</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Beheren</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Ontgrendel voor deze informatie</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Geen</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Programma</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Beheren</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>FDO-geheime service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Onbekend</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Onbekend</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Uitvoerbaar bestand: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Een andere secret service is actief (%1).&lt;br/&gt;Stop/verwijder deze en probeer de Secret Service-integratie opnieuw te activeren.</translation>
</message>
</context>
<context>
@@ -3457,14 +3558,10 @@ Hierdoor werken de plugins mogelijk niet meer goed.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Kan bestand niet opslaan!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Kan het native messaging scriptbestand niet opslaan.</translation>
+ <source>Online password validation failed</source>
+ <translation>Online validatie van wachtwoord is mislukt</translation>
</message>
</context>
<context>
@@ -3534,14 +3631,6 @@ Je kunt de DuckDuckGo website pictogram dienst inschakelen in de sectie &apos;Be
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan hoofdsleutel niet berekenen</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kan challenge/response niet uitvoeren.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>ontbrekende database-koppen</translation>
</message>
@@ -3567,16 +3656,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ongeldige inloggegevens, probeer het opnieuw.
Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Kan databasesleutel niet berekenen</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Kan challenge-antwoord niet uitgeven: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kan challenge/response niet uitvoeren.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Kan challenge-antwoord niet uitgeven: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan hoofdsleutel niet berekenen</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Kan databasesleutel niet berekenen</translation>
</message>
</context>
<context>
@@ -3586,10 +3683,6 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
<translation>ontbrekende database-koppen</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan hoofdsleutel niet berekenen</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Ongeldige grootte van header-controlecijfer</translation>
</message>
@@ -3665,7 +3758,7 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Ongeldige lengte van een variant map Bool-waarde</translation>
+ <translation>Ongeldige lengte van een variant map Boolean-waarde</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
@@ -3690,7 +3783,7 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Ongeldige item type in variant map</translation>
+ <translation>Ongeldige item-type in variant map</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
@@ -3707,6 +3800,10 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
<source>(HMAC mismatch)</source>
<translation>(HMAC komt niet overeen)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Kan databasesleutel niet berekenen: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3720,13 +3817,13 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
<translation>Ongeldige grootte van symmetrisch versleutelingsalgoritme IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan hoofdsleutel niet berekenen</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Fout bij het serialisatie van KDF-parameters variant map</translation>
+ <translation>Fout bij serialisering van KDF-parameters variant map</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Kan databasesleutel niet berekenen: %1</translation>
</message>
</context>
<context>
@@ -3787,7 +3884,7 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Ongeldige cipher uuid lengte: %1 (lengte=2%)</translation>
+ <translation>Ongeldige versleuteling uuid lengte: %1 (lengte=2%)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
@@ -3810,11 +3907,11 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Ontbrekend icoon uuid of data</translation>
+ <translation>Ontbrekende pictogram-uuid of -gegevens</translation>
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>Ontbrekende gebruikersinstelling of -waarde</translation>
+ <translation>Ontbrekende aangepaste datasleutel of -waarde</translation>
</message>
<message>
<source>Multiple group elements</source>
@@ -3826,7 +3923,7 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Ongeldig groepsicoon-nummer</translation>
+ <translation>Ongeldig groepspictogramnummer</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
@@ -3854,11 +3951,11 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Ongeldig icoonitem-nummer</translation>
+ <translation>Ongeldig pictogramnummer</translation>
</message>
<message>
<source>History element in history entry</source>
- <translation>Geschiedenis element in vorige versie</translation>
+ <translation>Geschiedenis element in geschiedenis item</translation>
</message>
<message>
<source>No entry uuid found</source>
@@ -3870,19 +3967,15 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Duplicaat gebruikers-kenmerk gevonden</translation>
+ <translation>Duplicaat aangepast kenmerk gevonden</translation>
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Item stringsleutel of -waarde ontbreekt</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Duplicaat bijlage gevonden</translation>
+ <translation>Stringsleutel of -waarde ontbreekt in item</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Item binaire sleutel of waarde ontbreekt</translation>
+ <translation>Binaire sleutel of waarde ontbreekt in item</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
@@ -3890,7 +3983,7 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Invalid bool value</source>
- <translation>Ongeldige bool-waarde</translation>
+ <translation>Ongeldige boolean-waarde</translation>
</message>
<message>
<source>Invalid date time value</source>
@@ -3902,7 +3995,7 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Ongeldige kleur in rgb deel</translation>
+ <translation>Ongeldige kleur in rgb-deel</translation>
</message>
<message>
<source>Invalid number value</source>
@@ -3915,7 +4008,7 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
<message>
<source>Unable to decompress binary</source>
<extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation>Kan binary niet uitpakken</translation>
+ <translation>Kan binaire gegevens niet decomprimeren</translation>
</message>
<message>
<source>XML error:
@@ -3927,6 +4020,29 @@ Lijn %2, kolom %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Ongeldige bestandsstructuur van KeeAgent-instellingen.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Privésleutel is een bijlage maar er is geen bijlage verstrekt.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Privésleutel is leeg</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Bestand te groot voor een persoonlijke sleutel</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Persoonlijk sleutelbestand niet kunnen openen</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3941,11 +4057,11 @@ Lijn %2, kolom %3</translation>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation>Kan sleutelbestand niet lezen</translation>
+ <translation>Kan sleutelbestand niet lezen.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>Geen KeePass-database.</translation>
+ <translation>Geen KeePass-database</translation>
</message>
<message>
<source>Unsupported encryption algorithm.</source>
@@ -3989,20 +4105,16 @@ Lijn %2, kolom %3</translation>
<translation>Alles</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan hoofdsleutel niet berekenen</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Sleuteltransformatie is mislukt</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>Ongeldig groep veld typenummer</translation>
+ <translation>Ongeldig veld typenummer van groep</translation>
</message>
<message>
<source>Invalid group field size</source>
- <translation>Ongeldige grootte van groep veld</translation>
+ <translation>Ongeldige veldgrootte van groep</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
@@ -4010,35 +4122,35 @@ Lijn %2, kolom %3</translation>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation>Onjuiste grootte van id-veld</translation>
+ <translation>Onjuiste veldgrootte van id</translation>
</message>
<message>
<source>Incorrect group creation time field size</source>
- <translation>Onjuiste grootte van aanmaaktijd veld</translation>
+ <translation>Onjuiste veldgrootte van aanmaaktijd</translation>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation>Onjuiste grootte wijzigingstijd-veld</translation>
+ <translation>Onjuiste veldgrootte van wijzigingstijd</translation>
</message>
<message>
<source>Incorrect group access time field size</source>
- <translation>Onjuiste grootte toegangstijd-veld</translation>
+ <translation>Onjuiste veldgrootte van toegangstijd</translation>
</message>
<message>
<source>Incorrect group expiry time field size</source>
- <translation>Onjuiste grootte verlooptijd-veld</translation>
+ <translation>Onjuiste veldgrootte van verlooptijd</translation>
</message>
<message>
<source>Incorrect group icon field size</source>
- <translation>Onjuiste grootte icoon-veld</translation>
+ <translation>Onjuiste veldgrootte groepspictogram</translation>
</message>
<message>
<source>Incorrect group level field size</source>
- <translation>Onjuiste grootte van groepsniveau-veld</translation>
+ <translation>Onjuiste veldgrootte van groepsniveau</translation>
</message>
<message>
<source>Invalid group field type</source>
- <translation>Ongeldig groep-veldtype</translation>
+ <translation>Ongeldig veldtype van groep</translation>
</message>
<message>
<source>Missing group id or level</source>
@@ -4046,39 +4158,39 @@ Lijn %2, kolom %3</translation>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>Ontbrekend item veldtype-nummer</translation>
+ <translation>Ontbrekend veldnummer van item</translation>
</message>
<message>
<source>Invalid entry field size</source>
- <translation>Ongeldige grootte van item-veld</translation>
+ <translation>Ongeldige veldgrootte van item</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>Item veld data komt niet overeen met grootte</translation>
+ <translation>Itemgegevens komen niet overeen met veldgrootte</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Ongeldige grootte van uuid-veld</translation>
+ <translation>Ongeldige veldgrootte van uuid</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>Ongeldige grootte van groepid-veld</translation>
+ <translation>Ongeldige veldgrootte van groepid</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation>Ongeldige grootte van icoon-veld</translation>
+ <translation>Ongeldige veldgrootte van pictogram</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
- <translation>Ongeldige grootte van aanmaaktijd-veld</translation>
+ <translation>Ongeldige veldgrootte van aanmaaktijd</translation>
</message>
<message>
<source>Invalid entry modification time field size</source>
- <translation>Ongeldige grootte van wijzigingstijd-veld</translation>
+ <translation>Ongeldige veldgrootte van wijzigingstijd</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Ongeldige grootte van verlooptijd-veld</translation>
+ <translation>Ongeldige veldgrootte van verlooptijd</translation>
</message>
<message>
<source>Invalid entry field type</source>
@@ -4094,6 +4206,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ongeldige inloggegevens, probeer het opnieuw.
Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Kan databasesleutel niet berekenen</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4107,7 +4223,7 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
</message>
<message>
<source>Imported from %1</source>
- <translation>Geïmporteerd van %1</translation>
+ <translation>Geïmporteerd vanuit %1</translation>
</message>
<message>
<source>Exported to %1</source>
@@ -4163,17 +4279,17 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
<message>
<source>Add %1</source>
<comment>Add a key component</comment>
- <translation>Voeg %1 toe</translation>
+ <translation>%1 toevoegen</translation>
</message>
<message>
<source>Change %1</source>
<comment>Change a key component</comment>
- <translation>Wijzig %1</translation>
+ <translation>%1 aanpassen</translation>
</message>
<message>
<source>Remove %1</source>
<comment>Remove a key component</comment>
- <translation>Verwijder %1</translation>
+ <translation>%1 verwijderen</translation>
</message>
<message>
<source>%1 set, click to change or remove</source>
@@ -4193,22 +4309,13 @@ Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd.</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Je kunt een sleutelbestand toevoegen met willekeurige bytes voor extra veiligheid.&lt;/p&gt; &lt;p&gt;Je moet het sleutelbestand geheim houden en nooit verliezen anders wordt je buiten gesloten!&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Je kunt een sleutelbestand met willekeurige bytes toevoegen voor extra veiligheid.&lt;/p&gt; &lt;p&gt;Je moet het sleutelbestand geheim houden en nooit verliezen anders wordt je buitengesloten!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
<translation>Verouderd sleutelbestandsformaat</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst niet ondersteund zal worden.
-
-Ga naar de hoofdsleutel instellingen en genereer een nieuw sleutelbestand.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Er ging iets fout bij het laden van het sleutelbestand &apos;%1&apos;
@@ -4276,6 +4383,16 @@ Are you sure you want to continue with this file?</source>
<translation>Het gekozen sleutelbestand ziet eruit als een wachtwoord databasebestand. Een sleutelbestand moet een statisch bestand zijn dat nooit wijzigt ander verlies je voor altijd toegang tot de database.
Weet je zeker dat je wilt doorgaan met dit bestand?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Je gebruikt een verouderde sleutelbestandsindeling die in de toekomst
+mogelijk niet wordt ondersteund.
+
+Genereer een nieuw sleutelbestand in de beveiligingsinstellingen van de database.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4284,18 +4401,10 @@ Weet je zeker dat je wilt doorgaan met dit bestand?</translation>
<translation>&amp;Database</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Recente databases</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Help</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>Items</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Groepen</translation>
</message>
@@ -4312,44 +4421,8 @@ Weet je zeker dat je wilt doorgaan met dit bestand?</translation>
<translation>&amp;Over</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Open database…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Database Op&amp;slaan</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Database sluiten</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Item verwijderen</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Groep b&amp;ewerken</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Groep &amp;verwijderen</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Database opslaan als…</translation>
- </message>
- <message>
<source>Database settings</source>
- <translation>Database instellingen</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>Item klonen</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>&amp;Gebruikersnaam kopiëren</translation>
+ <translation>Database-instellingen</translation>
</message>
<message>
<source>Copy username to clipboard</source>
@@ -4364,10 +4437,6 @@ Weet je zeker dat je wilt doorgaan met dit bestand?</translation>
<translation>&amp;Instellingen</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Databases vergrende&amp;len</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Naam</translation>
</message>
@@ -4392,14 +4461,6 @@ Weet je zeker dat je wilt doorgaan met dit bestand?</translation>
<translation>Notities naar klembord kopiëren</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exporteren naar CSVbestand…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>TOTP instellen…</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>&amp;TOTP kopiëren</translation>
</message>
@@ -4409,7 +4470,7 @@ Weet je zeker dat je wilt doorgaan met dit bestand?</translation>
</message>
<message>
<source>Clear history</source>
- <translation>Wis menu</translation>
+ <translation>Geschiedenislijst wissen</translation>
</message>
<message>
<source>Access error for config file %1</source>
@@ -4444,10 +4505,6 @@ Er is een hoog risico op beschadiging. Bewaar een back-up van jouw databases.</t
<translation>&amp;Doneren</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Rapporteer een &amp;bug</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>WAARSCHUWING: Jouw Qt-versie kan KeePassXC laten crashen bij gebruik van een schermtoetsenbord!
@@ -4455,200 +4512,378 @@ Wij raden je aan om de AppImage te gebruiken welke beschikbaar is op onze downlo
</message>
<message>
<source>&amp;Import</source>
- <translation>&amp;Importeer</translation>
+ <translation>&amp;Importeren</translation>
+ </message>
+ <message>
+ <source>Create a new database</source>
+ <translation>Een nieuwe database maken</translation>
+ </message>
+ <message>
+ <source>Merge from another KDBX database</source>
+ <translation>Samenvoegen uit een andere KDBX database</translation>
+ </message>
+ <message>
+ <source>Add a new entry</source>
+ <translation>Een nieuw item toevoegen</translation>
+ </message>
+ <message>
+ <source>View or edit entry</source>
+ <translation>Bekijk/bewerk item</translation>
+ </message>
+ <message>
+ <source>Add a new group</source>
+ <translation>Een nieuwe groep toevoegen</translation>
+ </message>
+ <message>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>&amp;Auto-type uitvoeren</translation>
+ </message>
+ <message>
+ <source>Open &amp;URL</source>
+ <translation>&amp;URL openen</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>Een KeePass 1-database importeren</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>Een CSV-bestand importeren</translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>Opmerking: Je gebruikt een pre-release versie van KeePassXC!
+Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor regulier gebruik.</translation>
+ </message>
+ <message>
+ <source>Check for updates on startup?</source>
+ <translation>Controleren op updates bij het opstarten?</translation>
+ </message>
+ <message>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Wil je dat KeePassXC bij het opstarten controleert op updates?</translation>
+ </message>
+ <message>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Je kunt altijd handmatig controleren of er updates zijn vanuit het programmamenu.</translation>
+ </message>
+ <message>
+ <source>&amp;Export</source>
+ <translation>&amp;Exporteren</translation>
+ </message>
+ <message>
+ <source>Sort &amp;A-Z</source>
+ <translation>Sorteer &amp;A-Z</translation>
+ </message>
+ <message>
+ <source>Sort &amp;Z-A</source>
+ <translation>Sorteer &amp;Z-A</translation>
+ </message>
+ <message>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Wachtwoordgenerator</translation>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation>Importeer een 1Password vault</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Aan de slag</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Gebruikershandleiding</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Sneltoetsen</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Recente databases</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Items</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Ken&amp;merk kopiëren</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Beeld</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation>Thema</translation>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Controleer op updates</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>Database &amp;openen...</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopieer &amp;kenmerk...</translation>
+ <source>&amp;Save Database</source>
+ <translation>Database op&amp;slaan...</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
+ <source>&amp;Close Database</source>
+ <translation>Database s&amp;luiten</translation>
</message>
<message>
- <source>&amp;New database...</source>
+ <source>&amp;New Database…</source>
<translation>&amp;Nieuwe database...</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Nieuwe database maken</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation>Database sa&amp;menvoegen...</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Samenvoegen uit database...</translation>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nieuw Item…</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Samenvoegen uit een andere KDBX database</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Wijzig Item…</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nieuw item</translation>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Verwijder Item…</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Een nieuw item toevoegen</translation>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Nieuwe Groep…</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>Item b&amp;ewerken</translation>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Wijzig Groep…</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Item bekijken/bewerken</translation>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Verwijder Groep…</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nieuwe groep</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Alle &amp;favicons downloaden...</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Een nieuwe groep toevoegen</translation>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Database opslaan &amp;als...</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>&amp;Hoofdsleutel veranderen</translation>
+ <source>Database &amp;Security…</source>
+ <translation>Database-be&amp;veiliging...</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Database instellingen...</translation>
+ <source>Database &amp;Reports...</source>
+ <translation>Database &amp;Rapporten...</translation>
</message>
<message>
- <source>Copy &amp;password</source>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistieken, gezondheidscontrole, etc.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Database-instellingen</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>Item &amp;dupliceren...</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Om&amp;hoog verplaatsen</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Hiermee verplaats je een item een positie omhoog.</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Om&amp;laag verplaatsen</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Hiermee verplaats je een item een positie omlaag.</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>&amp;Gebruikersnaam kopiëren</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
<translation>&amp;Wachtwoord kopiëren</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>&amp;Auto-type uitvoeren</translation>
+ <source>Download &amp;Favicon</source>
+ <translation>&amp;Favicon downloaden</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Open &amp;URL</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>Databases vergrende&amp;len</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV-bestand...</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML-bestand...</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
<translation>KeePass 1 database...</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Een KeePass 1-database importeren</translation>
+ <source>1Password Vault…</source>
+ <translation>1Password vault...</translation>
</message>
<message>
- <source>CSV file...</source>
+ <source>CSV File…</source>
<translation>CSV-bestand...</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Importeren een CSV-bestand</translation>
+ <source>Show TOTP</source>
+ <translation>TOTP weergeven</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Toon TOTP…</translation>
+ <source>Show QR Code</source>
+ <translation>TOTP QR-code tonen</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Toon TOTP QR code...</translation>
+ <source>Set up TOTP…</source>
+ <translation>TOTP instellen…</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>Merk op: Je gebruikt een pre-release versie van KeePassXC!
-Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor productiedoeleinden.</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Meld een &amp;fout</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>Zoek naar updates bij het opstarten?</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Open de handleiding Aan de slag</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Wil je dat KeePassXC naar updates zoekt bij het opstarten?</translation>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Online hulp</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Je kunt altijd handmatig naar updates zoeken vanuit het menu.</translation>
+ <source>Go to online documentation</source>
+ <translation>Online documentatie</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Exporteren</translation>
+ <source>Open User Guide</source>
+ <translation>Open de gebruikershandleiding</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Zoek naar updates...</translation>
+ <source>Save Database Backup...</source>
+ <translation>Database-backup opslaan...</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Alle favicons downloaden</translation>
+ <source>Add key to SSH Agent</source>
+ <translation>Sleutel toevoegen aan SSH-agent</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Sorteer &amp;A-Z</translation>
+ <source>Remove key from SSH Agent</source>
+ <translation>Sleutel wegnemen van SSH-agent</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Sorteer &amp;Z-A</translation>
+ <source>Compact Mode</source>
+ <translation>Compacte weergave</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Wachtwoordgenerator</translation>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Favicon downloaden</translation>
+ <source>Light</source>
+ <translation>Licht</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exporteer naar HTML-bestand...</translation>
+ <source>Dark</source>
+ <translation>Donker</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password vault...</translation>
+ <source>Classic (Platform-native)</source>
+ <translation>Klassiek (platform-eigen)</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importeer een 1Password vault</translation>
+ <source>Show Toolbar</source>
+ <translation>Werkbalk weergeven</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Aan de slag</translation>
+ <source>Show Preview Panel</source>
+ <translation>Voorbeeldvenster weergeven</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Open de aan de slag gids PDF</translation>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Niet meer weergeven voor deze versie</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Online hulp...</translation>
+ <source>Restart Application?</source>
+ <translation>Programma opnieuw starten?</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Online documentatie (opent een browser)</translation>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Je moet de applicatie opnieuw opstarten om deze instelling toe te passen. Wil je nu opnieuw opstarten?</translation>
</message>
+</context>
+<context>
+ <name>ManageDatabase</name>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Gebruikershandleiding</translation>
+ <source>Database settings</source>
+ <translation>Database-instellingen</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Open de gebruikershandleiding PDF</translation>
+ <source>Edit database settings</source>
+ <translation>Database instellingen bewerken</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Sneltoetsen</translation>
+ <source>Unlock database</source>
+ <translation>Database ontgrendelen</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Ontgrendel de database voor meer informatie</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Database vergrendelen</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Verbreken</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Deze applicatie loskoppelen</translation>
</message>
</context>
<context>
<name>Merger</name>
<message>
<source>Creating missing %1 [%2]</source>
- <translation>Creëren van ontbrekende %1 [%2]</translation>
+ <translation>Ontbrekende %1 [%2] aanmaken</translation>
</message>
<message>
<source>Relocating %1 [%2]</source>
- <translation>Verhuizen van %1 [%2]</translation>
+ <translation>%1 [%2] verplaatsen</translation>
</message>
<message>
<source>Overwriting %1 [%2]</source>
- <translation>Overschrijven van %1 [%2]</translation>
+ <translation>%1 [%2] overschrijven</translation>
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
@@ -4656,11 +4891,11 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
- <translation>Voeg back-up toe voor ouder doel %1 [%2]</translation>
+ <translation>Back-up toevoegen voor ouder doel %1 [%2]</translation>
</message>
<message>
<source>Adding backup for older source %1 [%2]</source>
- <translation>Voeg back-up toe voor oudere bron %1 [%2]</translation>
+ <translation>Back-up toevoegen voor oudere bron %1 [%2]</translation>
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
@@ -4719,15 +4954,11 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<name>NewDatabaseWizardPage</name>
<message>
<source>WizardPage</source>
- <translation>Wizard pagina</translation>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation>En&amp;cryptie instellingen</translation>
+ <translation>Assistent</translation>
</message>
<message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Hier kun je de coderingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database instellingen wijzigen.</translation>
+ <translation>Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen.</translation>
</message>
<message>
<source>Advanced Settings</source>
@@ -4737,27 +4968,31 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<source>Simple Settings</source>
<translation>Eenvoudige instellingen</translation>
</message>
+ <message>
+ <source>Encryption Settings</source>
+ <translation>Versleutelingsinstellingen</translation>
+ </message>
</context>
<context>
- <name>NewDatabaseWizardPageEncryption</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Encryption Settings</source>
- <translation>Versleuteling instellingen</translation>
+ <source>Database Credentials</source>
+ <translation>Databasegegevens</translation>
</message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Hier kun je de coderingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database instellingen wijzigen.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Een verzameling referenties die jij alleen kent en die je database beschermt.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Database hoofdsleutel</translation>
+ <source>Encryption Settings</source>
+ <translation>Versleutelingsinstellingen</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Een hoofdsleutel die alleen aan jou bekend is beschermt de database.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen.</translation>
</message>
</context>
<context>
@@ -4772,6 +5007,13 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Wachtwoordbeheer</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4926,7 +5168,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>Codering IV is te kort om MD5-sleutel te verkrijgen.</translation>
+ <translation>Versleuteilng IV is te kort om MD5-sleutel te verkrijgen.</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
@@ -4947,6 +5189,18 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<source>Passwords match so far</source>
<translation>Wachtwoorden overeenkomst tot nu toe</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Wachtwoord schakelen (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Wachtwoord genereren (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Let op: Caps Lock geactiveerd!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4956,7 +5210,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Confirm password:</source>
- <translation>Bevestig wachtwoord:</translation>
+ <translation>Wachtwoord bevestigen:</translation>
</message>
<message>
<source>Password</source>
@@ -4971,25 +5225,13 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<translation>Wachtwoorden komen niet overeen.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Genereer een hoofdwachtwoord</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Wachtwoord invulveld</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Laat wachtwoord wel/niet zien.</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Wachtwoord herhaling veld</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Laat wachtwoordgenerator wel/niet zien</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4998,10 +5240,6 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Wachtwoord:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>sterkte</translation>
@@ -5051,14 +5289,6 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<translation>Scheidingsteken:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopiëren</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Accepteren</translation>
- </message>
- <message>
<source>Close</source>
<translation>Sluiten</translation>
</message>
@@ -5096,7 +5326,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Switch to advanced mode</source>
- <translation>Schakel over naar de geavanceerde modus</translation>
+ <translation>Overschakelen naar de geavanceerde modus</translation>
</message>
<message>
<source>Advanced</source>
@@ -5124,7 +5354,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Punctuation</source>
- <translation>Interpunctie</translation>
+ <translation>Leestekens</translation>
</message>
<message>
<source>.,:;</source>
@@ -5132,7 +5362,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Quotes</source>
- <translation>Quotes</translation>
+ <translation>Aanhalingstekens</translation>
</message>
<message>
<source>&quot; &apos;</source>
@@ -5148,21 +5378,13 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Logograms</source>
- <translation>Speciale tekens</translation>
+ <translation>Special tekens</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Schakel over naar de simpele modus</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Eenvoudig</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord</translation>
</message>
@@ -5172,7 +5394,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation>Voeg niet-hex tekens toe aan de &quot;niet gebruiken&quot; lijst</translation>
+ <translation>Voeg niet-hex karakters toe aan de &quot;niet gebruiken&quot; lijst</translation>
</message>
<message>
<source>Hex</source>
@@ -5180,15 +5402,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation>Niet te gebruiken tekens: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation>Aantal woorden:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Opnieuw genereren</translation>
+ <translation>Niet te gebruiken karakters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
<source>Generated password</source>
@@ -5239,10 +5453,6 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<translation>Wachtwoord kopiëren</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Wachtwoord accepteren</translation>
- </message>
- <message>
<source>lower case</source>
<translation>kleine letters</translation>
</message>
@@ -5255,8 +5465,44 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<translation>Eerste Letter Als Hoofdletter</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Laat wachtwoord wel/niet zien</translation>
+ <source>Generate Password</source>
+ <translation>Wachtwoord genereren</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Kies ook uit:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Aanvullende tekens in het gegenereerde wachtwoord</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Aanvullende tekens</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Aantal woorden:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Wachtwoord gebruiken</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Wissen</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Wachtwoord opnieuw genereren (%1)</translation>
</message>
</context>
<context>
@@ -5269,6 +5515,58 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<source>Statistics</source>
<translation>Statistieken</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Zeer zwak wachtwoord</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Wachtwoord-entropie is %1 bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Zwak wachtwoord</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Gebruikt in %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Wachtwoord is %1 keer gebruikt</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Wachtwoord is verlopen</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Wachtwoord is %1 verlopen</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Wachtwoord is bijna verlopen</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Wachtwoord verloopt in %1 dagen</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Wachtwoord verloopt snel</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Wachtwoord verloopt op %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Gezondheidscontrole</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5317,7 +5615,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Database hash not available</source>
- <translation>Database controlecijfer is niet beschikbaar</translation>
+ <translation>Database-controlecijfer is niet beschikbaar</translation>
</message>
<message>
<source>Client public key not received</source>
@@ -5325,7 +5623,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Cannot decrypt message</source>
- <translation>Kan het bericht niet ontcijferen</translation>
+ <translation>Kan bericht niet decoderen</translation>
</message>
<message>
<source>Action cancelled or denied</source>
@@ -5337,7 +5635,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Encryption key is not recognized</source>
- <translation>De versleutelingssleutel is niet herkend</translation>
+ <translation>De coderingssleutel is niet herkend</translation>
</message>
<message>
<source>Incorrect action</source>
@@ -5393,7 +5691,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Vraag voor het item&apos;s wachtwoord.</translation>
+ <translation>Vraag om het item&apos;s wachtwoord.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
@@ -5408,17 +5706,13 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
<translation>Pad van toe te voegen item.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Item&apos;s wachtwoord naar het klembord kopiëren.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Pad van het te kopiëren item.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Wachttijd (sec) voor het leegmaken klembord.</translation>
+ <translation>Wachttijd (sec) voor het wissen van het klembord.</translation>
</message>
<message>
<source>Edit an entry.</source>
@@ -5426,7 +5720,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
</message>
<message>
<source>Title for the entry.</source>
- <translation>Naam voor dit item.</translation>
+ <translation>Naam voor deze entry.</translation>
</message>
<message>
<source>title</source>
@@ -5455,7 +5749,7 @@ unsupported in the future.
Please consider generating a new key file.</source>
<translation>WAARSCHUWING: Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst mogelijk niet ondersteund zal worden.
-Overweeg een nieuw sleutelbestand te genereren.</translation>
+Het is raadzaam om een nieuw sleutelbestand te genereren.</translation>
</message>
<message>
<source>
@@ -5469,7 +5763,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Name of the command to execute.</source>
- <translation>Naam van het uit te voeren commando.</translation>
+ <translation>Naam van de uit te voeren opdracht.</translation>
</message>
<message>
<source>List database entries.</source>
@@ -5497,7 +5791,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation>Gebruik dezelfde inloggegevens voor beide gegevensbestanden.</translation>
+ <translation>Gebruik dezelfde gegevens voor beide gegevensbestanden.</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
@@ -5509,7 +5803,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>Namen van de weer te geven kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven.</translation>
+ <translation>Namen van de te tonen kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven.</translation>
</message>
<message>
<source>attribute</source>
@@ -5529,7 +5823,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>malformed string</source>
- <translation>beschadigde tekst</translation>
+ <translation>misvormde tekenreeks</translation>
</message>
<message>
<source>missing closing quote</source>
@@ -5568,14 +5862,6 @@ Beschikbare opdrachten:
<translation>Browserintegratie</translation>
</message>
<message>
- <source>Press</source>
- <translation>Druk</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passief</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-agent</translation>
</message>
@@ -5614,12 +5900,8 @@ Beschikbare opdrachten:
<translation>Item %1 toegevoegd.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Kopieer de huidige TOTP naar het klembord.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
- <translation>Ongeldige time-out waarde %1.</translation>
+ <translation>Ongeldige time-out %1.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
@@ -5629,17 +5911,9 @@ Beschikbare opdrachten:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Item met pad %1 heeft geen TOTP instellingen.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>De huidige TOTP naar het klembord gekopieerd!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Het wachtwoord is naar het klembord gekopieerd!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Het klembord wordt over %1 seconde(n) gewist...</numerusform><numerusform>Het klembord wordt over %1 seconde(n) gewist...</numerusform></translation>
+ <translation><numerusform>Het klemboard wordt over %1 seconde(n) gewist...</numerusform><numerusform>Het klembord wordt over %1 seconde(n) gewist...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5647,7 +5921,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation>Verberg wachtwoord prompt en andere bijkomstige output.</translation>
+ <translation>Wachtwoordprompt en andere bijkomstige meldingen verbergen.</translation>
</message>
<message>
<source>count</source>
@@ -5672,7 +5946,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation>Item %1 is gewijzigd.</translation>
+ <translation>Item %1 is aangepast.</translation>
</message>
<message>
<source>Length %1</source>
@@ -5692,7 +5966,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Type: Bruteforce</source>
- <translation>Type: bruut geweld</translation>
+ <translation>Type: Brute kracht</translation>
</message>
<message>
<source>Type: Dictionary</source>
@@ -5700,7 +5974,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>Type: woordenboek + Leet</translation>
+ <translation>Type: Woordenboek + Leet</translation>
</message>
<message>
<source>Type: User Words</source>
@@ -5728,39 +6002,39 @@ Beschikbare opdrachten:
</message>
<message>
<source>Type: Bruteforce(Rep)</source>
- <translation>Type: bruut geweld (herhalend)</translation>
+ <translation>Type: Brute kracht (herh)</translation>
</message>
<message>
<source>Type: Dictionary(Rep)</source>
- <translation>Type: woordenboek (herhalend)</translation>
+ <translation>Type: Woordenboek (herh)</translation>
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>Type: woordenboek+Leet (herhalend)</translation>
+ <translation>Type: Woordenboek + Leet (herh)</translation>
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>Type: Gebruikerwoorden (herhalend)</translation>
+ <translation>Type: Gebruikerwoorden (herh)</translation>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
- <translation>Type: Gebruikerwoorden + Leet (herhalend)</translation>
+ <translation>Type: Gebruikerwoorden + Leet (herh)</translation>
</message>
<message>
<source>Type: Repeated(Rep)</source>
- <translation>Type: herhaald (herhalend)</translation>
+ <translation>Type: Herhaald (herh)</translation>
</message>
<message>
<source>Type: Sequence(Rep)</source>
- <translation>Type: Reeks (herhalend)</translation>
+ <translation>Type: Reeks (herh)</translation>
</message>
<message>
<source>Type: Spatial(Rep)</source>
- <translation>Type: Ruimtelijk (herhalend)</translation>
+ <translation>Type: Ruimtelijk (herh)</translation>
</message>
<message>
<source>Type: Date(Rep)</source>
- <translation>Type: Datum (herhalend)</translation>
+ <translation>Type: Datum (herh)</translation>
</message>
<message>
<source>Type: Unknown%1</source>
@@ -5796,15 +6070,15 @@ Beschikbare opdrachten:
</message>
<message>
<source>Use extended ASCII</source>
- <translation>Uitgebreide ASCII tekens gebruikt</translation>
+ <translation>Uitgebreide ASCII-tekens gebruiken</translation>
</message>
<message>
<source>Exclude character set</source>
- <translation>Niet te gebruiken tekens</translation>
+ <translation>Tekenset uitsluiten</translation>
</message>
<message>
<source>chars</source>
- <translation>tekens</translation>
+ <translation>Tekens</translation>
</message>
<message>
<source>Exclude similar looking characters</source>
@@ -5812,11 +6086,11 @@ Beschikbare opdrachten:
</message>
<message>
<source>Include characters from every selected group</source>
- <translation>Neem tekens uit iedere geslecteerde groep</translation>
+ <translation>Tekens uit iedere geslecteerde groep opnemen</translation>
</message>
<message>
<source>Recursively list the elements of the group.</source>
- <translation>Recursief de elementen van de groep opsommen</translation>
+ <translation>De elementen van de groep recursief opsommen</translation>
</message>
<message>
<source>Cannot find group %1.</source>
@@ -5825,16 +6099,16 @@ Beschikbare opdrachten:
<message>
<source>Error reading merge file:
%1</source>
- <translation>Er ging iets fout bij het lezen van het samenvoegbestand:
+ <translation>Fout bij lezen van samenvoegbestand:
%1</translation>
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation>Kan de database niet bewaren naar bestand: %1</translation>
+ <translation>Kan de database niet opslaan in bestand: %1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>Kan de database niet bewaren naar bestand: %1</translation>
+ <translation>Kan de database niet opslaan in bestand: %1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
@@ -5857,10 +6131,6 @@ Beschikbare opdrachten:
<translation>Geen programma ingesteld voor klembord manipulatie</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Kon programma niet starten %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>leeg bestand</translation>
</message>
@@ -5869,20 +6139,8 @@ Beschikbare opdrachten:
<translation>%1: (rij, col) 2%,3%</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
- <translation>Argon2 (KDBX 4 - aanbevolen)</translation>
+ <translation>Argon2 (KDBX 4 – aanbevolen)</translation>
</message>
<message>
<source>AES-KDF (KDBX 4)</source>
@@ -5920,11 +6178,11 @@ Beschikbare opdrachten:
</message>
<message>
<source>Loading the key file failed</source>
- <translation>Er ging iets fout bij het laden van het sleutelbestand</translation>
+ <translation>Laden van het sleutelbestand is mislukt</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation>Geen sleutel ingesteld. Aanmaken van de database is gestopt.</translation>
+ <translation>Geen sleutel ingesteld. De aanmaak van de database is afgebroken.</translation>
</message>
<message>
<source>Failed to save the database: %1.</source>
@@ -5932,11 +6190,11 @@ Beschikbare opdrachten:
</message>
<message>
<source>Successfully created new database.</source>
- <translation>Nieuwe database is gemaakt</translation>
+ <translation>Nieuwe database is aangemaakt</translation>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation>Creëren van sleutelbestand %1 is mislukt: %2</translation>
+ <translation>Aanmaak van sleutelbestand %1 is mislukt: %2</translation>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
@@ -5964,7 +6222,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>path to a custom config file</source>
- <translation>pad naar een configuratiebestand</translation>
+ <translation>pad naar aangepast configuratiebestand</translation>
</message>
<message>
<source>key file of the database</source>
@@ -5980,11 +6238,11 @@ Beschikbare opdrachten:
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation>Een andere instantie van KeePassXC is reeds gestart.</translation>
+ <translation>Een andere instantie van KeePassXC is reeds actief.</translation>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
- <translation>Fatale fout bij het testen van de cryptografische functies.</translation>
+ <translation>Cruciale fout bij het testen van de cryptografische functies.</translation>
</message>
<message>
<source>KeePassXC - Error</source>
@@ -5996,7 +6254,7 @@ Beschikbare opdrachten:
</message>
<message>
<source>Cannot create new group</source>
- <translation>Kon nieuwe groep niet maken</translation>
+ <translation>Kan geen nieuwe groep aanmaken</translation>
</message>
<message>
<source>Deactivate password key for the database.</source>
@@ -6131,10 +6389,6 @@ Kernelversie: %3 %4</translation>
<translation>Toont deze helptekst.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>YubiKey positie voor het versleutelen van de database.</translation>
- </message>
- <message>
<source>slot</source>
<translation>positie</translation>
</message>
@@ -6151,10 +6405,6 @@ Kernelversie: %3 %4</translation>
<translation>Interactieve modus afsluiten.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Bestandsindeling bij het exporteren. Beschikbare opties zijn XML of CSV. Standaard ingesteld op XML.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exporteert de inhoud van een database naar standaarduitvoer in de opgegeven indeling.</translation>
</message>
@@ -6195,10 +6445,6 @@ Kernelversie: %3 %4</translation>
<translation>Pad van de nieuwe database.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Kan XML-database export %1 niet importeren</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Database is geïmporteerd.</translation>
</message>
@@ -6291,10 +6537,6 @@ Kernelversie: %3 %4</translation>
<translation>Ongeldige YubiKey positie %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Druk op de knop van je YubiKey om %1 te ontgrendelen</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Voer een wachtwoord in om de database te versleutelen (optioneel):</translation>
</message>
@@ -6310,13 +6552,9 @@ Kernelversie: %3 %4</translation>
<source>User name</source>
<translation>Gebruikersnaam</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] challenge/response - Positie %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Wachtwoord voor &apos;%1&apos; is %2 keer gelekt!</numerusform><numerusform>Wachtwoord voor &apos;%1&apos; is %2 keer gelekt!</numerusform></translation>
+ <translation><numerusform>Wachtwoord voor &apos;%1&apos; is %2 keer gelekt!</numerusform><numerusform>Wachtwoorden voor &apos;%1&apos; zijn %2 keer gelekt!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6326,6 +6564,194 @@ Kernelversie: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Toon de beschermde kenmerken in tekst.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Fout met browser-extensie</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Kan het native messaging scriptbestand voor %1 niet opslaan.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Kopieer het gegeven kenmerk naar het klembord. Dit is &quot;password&quot; tenzij anders gespecificeerd.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Kopieer de huidige TOTP naar het klembord (equivalent aan &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Kopieer het kenmerk van een item naar het klembord.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>FOUT: geef --attribute op OF --totp, niet beide.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>FOUT: attribuut %1 is dubbelzinnig, het komt overeen met %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Kenmerk &quot;%1&quot; niet aangetroffen.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Kenmerk &quot;%1&quot; van het item is naar het klembord gekopieerd!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Yubikey-positie en optioneel serienummer dat wordt gebruikt om toegang te krijgen tot de database (bijv. 1: 7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>positie[:nummer]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Beoogde decoderingstijd voor de database [ms].</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>tijd</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Het sleutelbestand voor de database instellen.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Stel een wachtwoord in voor de database.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Ongeldige decoderingstijd %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Beoogde decoderingstijd moet tussen %1 en %2 liggen.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Kan databasewachtwoord niet instellen.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Tijdmeting sleutel-afleidingsfunctie bij %1 ms vertraging.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Sleutel-afleidingsfunctie instellen op %1 iteraties.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>fout bij het instellen van database-sleutelafleiding.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Formaat om te gebruiken bij het exporteren. Beschikbare keuzes zijn &apos;xml&apos; of &apos;csv&apos;. Standaard ingesteld op &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Kan XML-database niet importeren: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Toon de gegevens van een database.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Naam: </translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Beschrijving:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Versleuteling:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Prullenbak is ingeschakeld.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Prullenbak is niet ingeschakeld.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Ongeldige opdracht %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Ongeldig YubiKey nummer %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Druk op de knop van je YubiKey om door te gaan...</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Wil je een database aanmaken met een leeg wachtwoord? [j/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Herhaal wachtwoord:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Fout: wachtwoorden komen niet overeen.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Alle knipprogramma&apos;s zijn mislukt. Ik heb %1 geprobeerd
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 iteraties)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 iteraties, %2 kB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Tijdmeting %1 vertraging</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6362,10 +6788,294 @@ Kernelversie: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Toon ook vermeldingen die zijn uitgesloten van rapporten</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Positioneer de muis boven een item om aanvullende details weer te geven. Dubbelklik een items om het te bewerken.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Slecht</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Slecht — wachtwoord moet worden gewijzigd</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Slecht</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Mager — wachtwoord moet worden gewijzigd</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Zwak</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Zwak — overweeg het wachtwoord te wijzigen</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Uitgesloten)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Dit item wordt uitgesloten van rapporten</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Even geduld, gezondheidsgegevens worden vergaard...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Gefeliciteerd, alles ziet er goed uit!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Naam</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Pad</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Score</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Reden</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Item bewerken...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Uitsluiten van rapporten</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>LET OP: Voor dit rapport wordt informatie verzonden naar de online dienst Have I Been Pwned (https://haveibeenpwned.com). Als je doorgaat, worden je databasewachtwoorden cryptografisch gehasht en worden de eerste vijf tekens van die hashes op veilige wijze verzonden naar deze dienst. Jouw database blijft veilig en kan uit deze informatie niet worden samengesteld. Het aantal wachtwoorden dat je verzendt en je IP-adres worden wel blootgesteld aan deze dienst.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Online analyse uitvoeren</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Toon ook vermeldingen die zijn uitgesloten van rapporten</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Deze versie van KeePassXC biedt geen netwerkfunctionaliteit. Dit is nodig om jouw wachtwoorden te vergelijken met die in de databases van Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Gefeliciteerd, geen gelekte wachtwoorden!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Naam</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Pad</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Gelekte wachtwoorden...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Uitgesloten)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Dit item wordt uitgesloten van rapporten</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>eenmalig</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>tot 10 keer</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>tot 100 keer</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>tot 1000 keer</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>tot 10.000 keer</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>tot 100.000 keer</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>tot miljoen keer</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>miljoen keer</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Item bewerken...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Uitsluiten van rapporten</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Beweeg de muis over regels met foutpictogrammen voor meer informatie.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Naam</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Waarde</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Even geduld, databasestatistieken worden berekend...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Databasenaam</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Beschrijving</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Locatie</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Laatst opgeslagen</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Niet-opgeslagen wijzigingen</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>ja</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>nee</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>De database is bewerkt, maar de wijzigingen zijn nog niet opgeslagen.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Aantal groepen</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Aantal items</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Aantal verlopen items</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>De database bevat items die verlopen zijn.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Unieke wachtwoorden</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Niet-unieke wachtwoorden</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Meer dan 10% van de wachtwoorden zijn dubbel gebruikt. Gebruik waar mogelijk unieke wachtwoorden.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maximaal wachtwoordherbruik</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Verscheidene wachtwoorden worden meer dan drie keer gebruikt. Gebruik waar mogelijk unieke wachtwoorden.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Aantal korte wachtwoorden</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Aangeraden minimumlengte voor wachtwoorden is 8 tekens.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Aantal zwakke wachtwoorden</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Het is aanbevolen om lange, willekeurige wachtwoorden te gebruiken met een beoordeling van &apos;goed&apos; of &apos;uitstekend&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Items die zijn uitgesloten van rapporten</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Het uitsluiten van vermeldingen uit rapporten, bijv. omdat al bekend is dat ze een slecht wachtwoord hebben, is niet per se een probleem, maar je moet ze wel in de gaten houden.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Gemiddelde wachtwoordlengte</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 tekens</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Gemiddeld wachtwoordlengte is minder dan tien tekens. Langere wachtwoorden bieden meer veiligheid.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
- <translation>Agent verbinding mislukt.</translation>
+ <translation>Verbinding met agent mislukt.</translation>
</message>
<message>
<source>Agent protocol error.</source>
@@ -6373,11 +7083,11 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>Geen agent wordt uitgevoerd, kan geen identiteit toevoegen.</translation>
+ <translation>Geen agent actief, kan geen identiteit toevoegen.</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>Geen agent wordt uitgevoerd, kan deze identiteit niet verwijderen.</translation>
+ <translation>Geen agent actief, kan geen identiteit verwijderen.</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
@@ -6389,11 +7099,19 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation>Beperkte levensduur wordt niet ondersteund door de agent (controleer de instellingen).</translation>
+ <translation>De agent ondersteunt beperkte levensduur niet (zie opties).</translation>
</message>
<message>
<source>A confirmation request is not supported by the agent (check options).</source>
- <translation>Een aanvraag voor transactiebevestiging wordt niet ondersteund door de agent (controleer de instellingen).</translation>
+ <translation>De agent ondersteunt aanvraag voor transactiebevestiging niet (zie opties).</translation>
+ </message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Conflict tussen sleutelidentiteit. Geweigerd.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Geen agent actief, kan geen identiteiten opsommen.</translation>
</message>
</context>
<context>
@@ -6412,7 +7130,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Modifiers</source>
- <translation>wijzigers</translation>
+ <translation>Modifiers</translation>
</message>
<message>
<source>exclude term from results</source>
@@ -6424,7 +7142,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>use regex in term</source>
- <translation>regex gebruiken in zoekopdracht</translation>
+ <translation>expressies gebruiken in zoekopdracht</translation>
</message>
<message>
<source>Fields</source>
@@ -6472,7 +7190,7 @@ Kernelversie: %3 %4</translation>
<message>
<source>Search (%1)...</source>
<comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation>Zoek (%1)...</translation>
+ <translation>Zoeken (%1)...</translation>
</message>
<message>
<source>Case sensitive</source>
@@ -6502,26 +7220,10 @@ Kernelversie: %3 %4</translation>
<translation>&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Als de prullenbak is ingeschakeld voor de database, worden items rechtstreeks naar de prullenbak verplaatst. Anders, zullen ze zonder bevestiging worden verwijderd.&lt;/p&gt;&lt;p&gt;Je wordt nog steeds gevraagd voor het verwijderen van items waarnaar wordt verwezen door andere items.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Vraag niet om bevestiging wanneer items worden verwijderd door clients.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Blootgestelde databasegroepen:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Bestandsnaam</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Groep</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Beheren</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorisatie</translation>
</message>
@@ -6530,47 +7232,27 @@ Kernelversie: %3 %4</translation>
<translation>Deze programma&apos;s zijn momenteel verbonden:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Programma</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Verbreken</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Database instellingen</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Database instellingen bewerken</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Niet om bevestiging vragen wanneer items worden verwijderd door clients</translation>
</message>
<message>
- <source>Unlock database</source>
- <translation>Database ontgrendelen</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Ontgrendel de database voor meer informatie</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>Database vergrendelen</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Fout:&lt;/b&gt; Geen verbinding met DBus. Controleer de DBus-instellingen.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Ontgrendel voor deze informatie</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Waarschuwing:&lt;/b&gt; </translation>
</message>
<message>
- <source>None</source>
- <translation>Geen</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Sla huidige wijzigingen op om de plug-in te activeren en het bewerken van deze sectie mogelijk te maken.</translation>
</message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
<message>
<source>Active</source>
- <translation>Actieve</translation>
+ <translation>Activering</translation>
</message>
<message>
<source>Allow export</source>
@@ -6586,7 +7268,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Fingerprint:</source>
- <translation>Vingerafdruk</translation>
+ <translation>Vingerafdruk:</translation>
</message>
<message>
<source>Certificate:</source>
@@ -6622,7 +7304,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Ask</source>
- <translation>Vraag</translation>
+ <translation>Vragen</translation>
</message>
<message>
<source>Untrust</source>
@@ -6746,7 +7428,7 @@ Kernelversie: %3 %4</translation>
<name>ShareExport</name>
<message>
<source>Overwriting signed share container is not supported - export prevented</source>
- <translation>Het overschrijven van een ondertekende deel-container wordt niet ondersteund - export is niet uitgevoerd</translation>
+ <translation>Het overschrijven van een ondertekende container wordt niet ondersteund - export is niet uitgevoerd</translation>
</message>
<message>
<source>Could not write export container (%1)</source>
@@ -6770,7 +7452,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation>Overschrijven van een niet-ondertekende deel-container wordt niet ondersteund - export is niet uitgevoerd</translation>
+ <translation>Het overschrijven van een niet-ondertekende container wordt niet ondersteund - export is niet uitgevoerd</translation>
</message>
<message>
<source>Could not write export container</source>
@@ -6785,15 +7467,15 @@ Kernelversie: %3 %4</translation>
<name>ShareImport</name>
<message>
<source>Import from container without signature</source>
- <translation>Importeren vanuit de container zonder handtekening</translation>
+ <translation>Importeren vanuit een niet-ondertekende container</translation>
</message>
<message>
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation>De bron van de gedeelde container kan niet gecontroleerd worden omdat het niet is ondertekend. Wil je echt uit %1 importeren?</translation>
+ <translation>De bron van de gedeelde container kan niet worden gecontroleerd omdat deze niet ondertekend is. Weet je zeker dat je vanuit %1 wilt importeren?</translation>
</message>
<message>
<source>Import from container with certificate</source>
- <translation>Importeren uit de container met certificaat</translation>
+ <translation>Importeren vanuit een container met certificaat</translation>
</message>
<message>
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
@@ -6817,7 +7499,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Signed share container are not supported - import prevented</source>
- <translation>Ondertekende deel-containers worden niet ondersteund - import is niet uitgevoerd</translation>
+ <translation>Ondertekende containers wordt niet ondersteund - import is niet uitgevoerd</translation>
</message>
<message>
<source>File is not readable</source>
@@ -6836,16 +7518,12 @@ Kernelversie: %3 %4</translation>
<translation>Ondertekende import is voltooid</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Onverwachte fout</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
- <translation>Niet ondertekende deel-container worden niet ondersteund - import is niet uitgevoerd</translation>
+ <translation>Niet-ondertekende container wordt niet ondersteund - import is niet uitgevoerd</translation>
</message>
<message>
<source>Successful unsigned import</source>
- <translation>Niet ondertekende import voltooid</translation>
+ <translation>Niet-ondertekende import voltooid</translation>
</message>
<message>
<source>File does not exist</source>
@@ -6860,15 +7538,15 @@ Kernelversie: %3 %4</translation>
<name>ShareObserver</name>
<message>
<source>Import from %1 failed (%2)</source>
- <translation>Importeren van %1 is mislukt (%2)</translation>
+ <translation>Importeren vanuit %1 is mislukt (%2)</translation>
</message>
<message>
<source>Import from %1 successful (%2)</source>
- <translation>Importeren van %1 is gelukt (%2)</translation>
+ <translation>Importeren vanuit %1 is voltooid (%2)</translation>
</message>
<message>
<source>Imported from %1</source>
- <translation>Geïmporteerd van %1</translation>
+ <translation>Geïmporteerd vanuit %1</translation>
</message>
<message>
<source>Export to %1 failed (%2)</source>
@@ -6880,15 +7558,15 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Export to %1</source>
- <translation>Exporteer naar %1</translation>
+ <translation>Exporteren naar %1</translation>
</message>
<message>
<source>Multiple import source path to %1 in %2</source>
- <translation>Meerdere import bronpaden naar %1 in %2</translation>
+ <translation>Meerdere import-bronpaden naar %1 in %2</translation>
</message>
<message>
<source>Conflicting export target path %1 in %2</source>
- <translation>Conflicterende exporteerdoelpad %1 in %2</translation>
+ <translation>Conflicterend export-doelpad %1 in %2</translation>
</message>
</context>
<context>
@@ -6907,7 +7585,7 @@ Kernelversie: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Verloopt over &lt;b&gt;%n&lt;/b&gt; seconde(n)</numerusform><numerusform>Verloopt over &lt;b&gt;%n&lt;/b&gt; seconde(n)</numerusform></translation>
+ <translation><numerusform>Verloopt in &lt;b&gt;%n&lt;/b&gt; seconde(n)</numerusform><numerusform>Verloopt over &lt;b&gt;%n&lt;/b&gt; seconde(n)</numerusform></translation>
</message>
</context>
<context>
@@ -6919,22 +7597,22 @@ Kernelversie: %3 %4</translation>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation>Merk op: deze TOTP instellingen zijn op maat en werken mogelijk niet met andere authenticators.</translation>
+ <translation>Let op: deze TOTP-instellingen zijn applicatie-specifiek en werken mogelijk niet met andere authenticators.</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation>Er ging iets fout bij het creëren van de QR-code.</translation>
+ <translation>Er ging iets fout bij het maken van de QR-code.</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation>Sluit over %1 seconden.</translation>
+ <translation>Sluiten in %1 seconden.</translation>
</message>
</context>
<context>
<name>TotpSetupDialog</name>
<message>
<source>Setup TOTP</source>
- <translation>TOTP instellen</translation>
+ <translation>TOTP-instellen</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
@@ -6942,7 +7620,7 @@ Kernelversie: %3 %4</translation>
</message>
<message>
<source>Steam token settings</source>
- <translation>Instellingen Steam-token</translation>
+ <translation>Steam-tokeninstellingen</translation>
</message>
<message>
<source>Use custom settings</source>
@@ -7009,14 +7687,21 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Ongeldige URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
- <translation>Updates worden gezocht</translation>
+ <translation>Controleren op updates</translation>
</message>
<message>
<source>Checking for updates...</source>
- <translation>Updates worden gezocht...</translation>
+ <translation>Controleren op updates...</translation>
</message>
<message>
<source>Close</source>
@@ -7024,11 +7709,11 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Update Error!</source>
- <translation>Update fout!</translation>
+ <translation>Update-fout!</translation>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
- <translation>Er is iets fout gegaan bij het zoeken naar updates.</translation>
+ <translation>Er ging iets fout bij het ophalen van de update-informatie.</translation>
</message>
<message>
<source>Please try again later.</source>
@@ -7036,7 +7721,7 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Software Update</source>
- <translation>Software update</translation>
+ <translation>Software-update</translation>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
@@ -7044,11 +7729,11 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation>KeePassXC %1 is nu beschikbaar — jij hebt %2.</translation>
+ <translation>KeePassXC %1 is nu beschikbaar — jij gebruikt %2.</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation>Download het op keepassxc.org</translation>
+ <translation>Download het van keepassxc.org</translation>
</message>
<message>
<source>You&apos;re up-to-date!</source>
@@ -7075,11 +7760,11 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Import from KeePass 1</source>
- <translation>Keepass 1-database importeren</translation>
+ <translation>Importeren vanuit Keepass 1-database</translation>
</message>
<message>
<source>Import from CSV</source>
- <translation>CSV-bestand importeren</translation>
+ <translation>Importeren vanuit CSV-bestand</translation>
</message>
<message>
<source>Recent databases</source>
@@ -7099,6 +7784,53 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Ingestelde positie - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Challenge Response - Positie %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Druk</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passief</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Ongeldige positie opgegeven - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>De YubiKey-interface is niet geïnitialiseerd.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Hardwaresleutel is momenteel in gebruik.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Hardwaresleutel met serienummer %1 niet gevonden. Sluit deze aan om door te gaan.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Er is een time-out opgetreden voor de hardwaresleutel tijdens het wachten op gebruikersinteractie.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Er is een USB-fout opgetreden bij het openen van de hardwaresleutel: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Challenge-response is niet voltooid, de specifieke fout was: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7110,15 +7842,7 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Als je zelf een &lt;a href=&quot;https://www.yubico.com/&quot;&gt; YubiKey&lt;/a&gt; hebt, kun je deze gebruiken voor extra beveiliging.&lt;/p&gt; &lt;p&gt;De YubiKey vereist dat een van zijn posities &quot;slots&quot; wordt geprogrammeerd als &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt; HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Geen YubiKey gedetecteerd, plug deze alsjeblieft in.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Geen YubiKey ingeplugd.</translation>
+ <translation>&lt;p&gt;Als je zelf een &lt;a href=&quot;https://www.yubico.com/&quot;&gt; YubiKey&lt;/a&gt; hebt, kun je deze gebruiken voor extra beveiliging.&lt;/p&gt; &lt;p&gt;De YubiKey vereist dat een van zijn posities (slots) wordt geprogrammeerd als &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt; HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -7128,5 +7852,21 @@ Voorbeeld: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Hardwaresleutel positie selectie</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Geen hardwaresleutels aangetroffen!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Geselecteerde hardwaresleutel-positie ondersteunt geen challenge-respons!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Hardwaresleutels detecteren...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Geen hardwaresleutels gedetecteerd</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_pl.ts b/share/translations/keepassx_pl.ts
index 2621fbea3..bd2085d31 100644
--- a/share/translations/keepassx_pl.ts
+++ b/share/translations/keepassx_pl.ts
@@ -3,7 +3,7 @@
<name>AboutDialog</name>
<message>
<source>About KeePassXC</source>
- <translation>O KeePassXC</translation>
+ <translation>O programie KeePassXC</translation>
</message>
<message>
<source>About</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Włącz agenta SSH (wymaga ponownego uruchomienia)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Użyj OpenSSH dla Windows zamiast Pageanta</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Włącz integrację agenta SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Wartość SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>Zastąpienie SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(puste)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Brak dostępnego gniazda agenta SSH. Sprawdź, czy istnieje zmienna środowiskowa SSH_AUTH_SOCK, lub ustaw zastąpienie.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Połączenie agenta SSH działa!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Czy na pewno chcesz zresetować wszystkie ustawienia ogólne i zabezpieczeń do domyślnych?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochromatyczny (jasny)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochromatyczny (ciemny)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Kolorowy</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -120,17 +152,13 @@
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Minimalizuj okno podczas uruchomienia aplikacji</translation>
+ <translation>Minimalizuj okno podczas uruchamiania aplikacji</translation>
</message>
<message>
<source>File Management</source>
<translation>Zarządzanie plikami</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Bezpiecznie zapisuj pliki bazy danych (może być niezgodne z Dropbox itp.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Utwórz kopię zapasową pliku bazy danych przed zapisaniem</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Automatycznie zapisz przy wyjściu</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Nie zaznaczaj bazy danych jako zmodyfikowanej dla zmian innych niż dane (np. rozwijanie grup)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie</translation>
</message>
@@ -159,30 +183,14 @@
<translation>Użyj ikony grupy podczas tworzenia wpisu</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Ukryj panel podglądu wpisu</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Ogólne</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Ukryj pasek narzędzi (ikony)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
- <translation>Minimalizuj zamiast wyjść z aplikacji</translation>
+ <translation>Zminimalizuj zamiast wyjść z aplikacji</translation>
</message>
<message>
<source>Show a system tray icon</source>
<translation>Pokaż ikonę w zasobniku systemowym</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Ciemna ikona w zasobniku systemowym</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Schowaj okno do zasobnika podczas minimalizacji</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Zawsze pytaj przed wykonaniem autowpisywania</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globalny skrót autowpisywania</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Opóźnienie pisania autowpisywania</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Opóźnienie rozpoczęcia autowpisywania</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Ruchomy pasek narzędzi</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Uwzględnij wersje beta podczas sprawdzania aktualizacji</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Styl przycisku:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Język:</translation>
</message>
@@ -290,23 +282,15 @@
</message>
<message>
<source>Toolbar button style</source>
- <translation>Styl przycisku paska narzędzi</translation>
- </message>
- <message>
- <source>Use monospaced font for Notes</source>
- <translation>Użyj czcionek o stałej szerokości w notatkach</translation>
+ <translation>Styl przycisków paska narzędzi</translation>
</message>
<message>
<source>Language selection</source>
<translation>Wybór języka</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Zresetuj ustawienia do domyślnych</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
- <translation>Globalny skrót autowpisywania</translation>
+ <translation>Skrót globalnego autowpisywania</translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Opóźnienie rozpoczęcia autowpisywania w milisekundach</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Automatycznie uruchom KeePassXC podczas uruchamiania systemu</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Oznacz bazę danych jako zmodyfikowaną dla zmian innych niż dane (np. rozwijanie grup)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Bezpiecznie zapisuj pliki bazy danych (wyłącz, jeśli występują problemy z Dropboksem itp.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Interfejs użytkownika</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Styl przycisków paska narzędzi:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Użyj czcionek o stałej szerokości w notatkach</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Typ ikony zasobnika:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Zresetuj ustawienia do domyślnych…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Opóźnienie pisania autowpisywania:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Skrót globalnego autowpisywania:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Opóźnienie rozpoczęcia autowpisywania:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Ponownie zablokuj poprzednio zablokowaną bazę danych po wykonaniu autowpisywania</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Nie wymagaj powtarzania hasła, gdy jest widoczne</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Nie ukrywaj haseł podczas ich edycji</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Nie używaj symboli zastępczych w pustych polach hasła</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Ukryj hasła w panelu podglądu wpisu</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Wyczyść wyszukaną frazę po</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Wymagaj powtórzenia hasła, gdy jest widoczne</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Ukryj hasła podczas ich edycji</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Używaj symboli zastępczych w pustych polach hasła</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Potwierdź dostęp KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Żądanie dostępu do przeglądarki</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 prosi o dostęp do następujących wpisów:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Zapamiętaj tę decyzję</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Zapamiętaj dostęp do zaznaczonych wpisów</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Zezwól</translation>
+ <source>Remember</source>
+ <translation>Zapamiętaj</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Odmów</translation>
+ <source>Allow access to entries</source>
+ <translation>Zezwalaj na dostęp do wpisów</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 zażądał dostępu do haseł dla następujących element(ów).
-Wybierz, czy chcesz zezwolić na dostęp.</translation>
+ <source>Allow Selected</source>
+ <translation>Zezwalaj wybranym</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Zezwól na dostęp</translation>
+ <source>Deny All</source>
+ <translation>Odmów wszystkim</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Odmów dostępu</translation>
+ <source>Disable for this site</source>
+ <translation>Wyłącz dla tej witryny</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Wybierz właściwą bazę danych do zapisania danych uwierzytelniających.</tran
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Okno dialogowe</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Nowe żądanie skojarzenia klucza</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Wymagane jest to aby uzyskać dostęp do baz danych za pomocą KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Zapisz i zezwól na dostęp</translation>
</message>
<message>
- <source>General</source>
- <translation>Ogólne</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Nadpisać istniejący klucz?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Włącz integrację z tymi przeglądarkami:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Współdzielony klucz szyfrujący o nazwie &quot;%1&quot; już istnieje.
+Czy chcesz go nadpisać?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Aktualizacja wpisu</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Czy chcesz uaktualnić informację w %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Zaniechaj</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Konwertowanie atrybutów na niestandardowe dane...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>P&amp;okaż powiadomienie, gdy wymagane są dane uwierzytelniające</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Przekonwertowane atrybuty KeePassHTTP</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Żąda&amp;j odblokowania bazy danych, jeżeli jest zablokowana</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Pomyślnie przekonwertowano atrybuty z %1 wpis(ów).
+Przeniesiono %2 klucze do niestandardowych danych.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Pomyślnie przeniesiono %n klucz do niestandardowych danych.</numerusform><numerusform>Pomyślnie przeniesiono %n klucze do niestandardowych danych.</numerusform><numerusform>Pomyślnie przeniesiono %n kluczy do niestandardowych danych.</numerusform><numerusform>Pomyślnie przeniesiono %n kluczy do niestandardowych danych.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Tylko wpisy z tym samym schematem (http://, https://, ...) są zwracane.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Dopasuj schemat adresu URL (np. https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Zwracaj tylko najlepsze dopasowania wpisów dla URL zamiast wszystkich wpisów domeny.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Wykryto ustawienia przestarzałej integracji z przeglądarką</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Z&amp;wróć tylko najlepiej pasujące dane uwierzytelniające</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Utwórz nową grupę</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortuj dopasowane dane uwierzytelniające według &amp;tytułu</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Otrzymano żądanie utworzenia nowej grupy &quot;%1&quot;.
+Czy chcesz stworzyć tę grupę?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortuj dopasowane dane uwierzytelniające według nazwy &amp;użytkownika</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Twoje ustawienia KeePassXC-Browser należy przenieść do ustawień bazy danych.
+Jest to konieczne, aby utrzymać bieżące połączenia przeglądarki.
+Czy chcesz teraz migrować istniejące ustawienia?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Zaawansowane</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Nie wyświetlaj ponownie tego ostrzeżenia</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nigdy nie &amp;pytaj przed uzyskaniem dostępu do danych uwierzytelniających</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Otrzymałeś żądanie skojarzenia następującej bazy danych:
+%1
+
+Nadaj połączeniu unikatową nazwę lub identyfikator, na przykład:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nigdy nie &amp;pytaj przed aktualizacją danych uwierzytelniających</translation>
+ <source>Dialog</source>
+ <translation>Okno dialogowe</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Szuk&amp;aj we wszystkich otwartych bazach danych dopasowanych danych uwierzytelniających</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Wymagane jest to aby uzyskać dostęp do baz danych za pomocą KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatyczne tworzenie albo aktualizowanie pól ciągów znaków nie jest obsługiwane.</translation>
+ <source>Enable browser integration</source>
+ <translation>Włącz integrację z przeglądarką</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Zwracaj zaawansowane pola ciągów znaków, które zaczynają się od &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Ogólne</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Aktualizuje automatycznie ścieżkę binarną KeePassXC albo keepassxc-proxy do skryptów Native Messaging podczas uruchomienia.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Przeglądarki zainstalowane jako snapy są obecnie nieobsługiwane.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Aktualizuj pliki manifestu &amp;Native Messaging podczas uruchomienia</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Włącz integrację z tymi przeglądarkami:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Obsługuj aplikację proxy pomiędzy KeePassXC a rozszerzeniem przeglądarki.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Używaj aplikację &amp;proxy pomiędzy KeePassXC a rozszerzeniem przeglądarki</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Używaj niestandardowej lokalizacji proxy, jeżeli została zainstalowana ręcznie.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Używaj &amp;niestandardowej lokalizacji proxy</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Przeglądaj...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Ostrzeżenie:&lt;/b&gt; Poniższe opcje mogą być niebezpieczne!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Wybierz niestandardową lokalizację proxy</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Pokaż powiadomienie, gdy wymagane są dane uwierzytelniające</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Pliki wykonywalne</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Żądaj odblokowania bazy danych, jeżeli jest zablokowana</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Wszystkie pliki</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Tylko wpisy z tym samym schematem (http://, https://, ...) są zwracane.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Nie pytaj o uprawnienie dla podstawowego &amp;uwierzytelniania HTTP</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Dopasuj schemat adresu URL (np. https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Ze względu na sandboxing Snap należy uruchomić skrypt, aby umożliwić integrację przeglądarki.&lt;br /&gt;Możesz uzyskać ten skrypt z %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Zwracaj tylko najlepsze dopasowania wpisów dla adresu URL zamiast wszystkich wpisów domeny.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Zobacz poniżej specjalne instrukcje dotyczące używania rozszerzenia przeglądarki</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Zwróć tylko najlepiej pasujące dane uwierzytelniające</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser jest potrzebny do integracji przeglądarki. &lt;br /&gt;Pobierz go dla %1 i %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Zwraca wygasłe dane uwierzytelniające. Ciąg [wygasłe] jest dodawany do tytułu.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Zezwalaj na zwrot wygasłych danych uwierzytelniających</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Zwraca wygasłe dane uwierzytelniające. Ciąg [wygasłe] jest dodawany do tytułu.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Wszystkie bazy danych podłączone do rozszerzenia zwrócą pasujące dane uwierzytelniające.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Zezwalaj na zwrot wygasłych danych uwierzytelniających.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Szukaj we wszystkich otwartych bazach danych dopasowanych danych uwierzytelniających</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Włącz integrację z przeglądarką</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sortuj dopasowane dane uwierzytelniające według tytułu</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Przeglądarki zainstalowane jako snapy są obecnie nieobsługiwane.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sortuj dopasowane dane uwierzytelniające według nazwy użytkownika</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Wszystkie bazy danych podłączone do rozszerzenia zwrócą pasujące dane uwierzytelniające.</translation>
+ <source>Advanced</source>
+ <translation>Zaawansowane</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nigdy nie pytaj przed uzyskaniem dostępu do danych uwierzytelniających</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nigdy nie pytaj przed aktualizacją danych uwierzytelniających</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Nie pytaj o uprawnienie dla podstawowego uwierzytelniania HTTP</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatyczne tworzenie albo aktualizowanie pól ciągów znaków nie jest obsługiwane.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Zwracaj zaawansowane pola ciągów znaków, które zaczynają się od &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Nie wyświetlaj wyskakującego okienka sugerującego migrację przestarzałych ustawień KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Nie pytaj o migrację ustawień KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Nie pytaj o migrację ustawień KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Aktualizuje automatycznie ścieżkę binarną KeePassXC albo keepassxc-proxy do skryptów wiadomości natywnych podczas uruchamiania.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Aktualizuj pliki manifestu wiadomości natywnych podczas uruchamiania</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Używaj niestandardowej lokalizacji proxy, jeżeli została zainstalowana ręcznie.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Używaj niestandardowej lokalizacji proxy:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Wybierz właściwą bazę danych do zapisania danych uwierzytelniających.</tran
<translation>Przeglądarka niestandardowego pliku proxy</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Ostrzeżenie&lt;/b&gt;, aplikacja keepassxc-proxy nie została znaleziona!&lt;br /&gt;Proszę sprawdzić katalog instalacyjny KeePassXC albo potwierdzić niestandardową ścieżkę w opcjach zaawansowanych.&lt;br /&gt;Integracja z przeglądarką NIE BĘDZIE DZIAŁAĆ bez aplikacji proxy.&lt;br /&gt;Oczekiwana ścieżka: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Przeglądaj...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Nowe żądanie skojarzenia klucza</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Używaj niestandardowej lokalizacji konfiguracji przeglądarki:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Zapisz i zezwól na dostęp</translation>
+ <source>Browser type:</source>
+ <translation>Typ przeglądarki:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Nadpisać istniejący klucz?</translation>
+ <source>Toolbar button style</source>
+ <translation>Styl przycisku paska narzędzi</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Współdzielony klucz szyfrujący o nazwie &quot;%1&quot; już istnieje.
-Czy chcesz go nadpisać?</translation>
+ <source>Config Location:</source>
+ <translation>Lokalizacja konfiguracji:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Aktualizacja wpisu</translation>
+ <source>Custom browser location field</source>
+ <translation>Niestandardowe pole lokalizacji przeglądarki</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Czy chcesz uaktualnić informację w %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Zaniechaj</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Wyszukaj niestandardową ścieżkę przeglądarki</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Konwertowanie atrybutów na niestandardowe dane...</translation>
+ <source>Custom extension ID:</source>
+ <translation>Identyfikator niestandardowego rozszerzenia:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Przekonwertowane atrybuty KeePassHTTP</translation>
+ <source>Custom extension ID</source>
+ <translation>Identyfikator niestandardowego rozszerzenia</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Pomyślnie przekonwertowano atrybuty z %1 wpis(ów).
-Przeniesiono %2 klucze do niestandardowych danych.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Pomyślnie przeniesiono %n klucz do niestandardowych danych.</numerusform><numerusform>Pomyślnie przeniesiono %n klucze do niestandardowych danych.</numerusform><numerusform>Pomyślnie przeniesiono %n kluczy do niestandardowych danych.</numerusform><numerusform>Pomyślnie przeniesiono %n kluczy do niestandardowych danych.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Ze względu na sandboxing Snap należy uruchomić skrypt, aby umożliwić integrację przeglądarki.&lt;br /&gt;Możesz uzyskać ten skrypt z %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser jest niezbędny do integracji przeglądarki. &lt;br /&gt;Pobierz go dla %1 oraz %2 i %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Zobacz poniżej specjalne instrukcje dotyczące używania rozszerzenia przeglądarki</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Wykryto ustawienia przestarzałej integracji z przeglądarką</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Błąd:&lt;/b&gt; Nie można znaleźć niestandardowej lokalizacji proxy! Integracja przeglądarki NIE DZIAŁA bez aplikacji proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Stwórz nową grupę</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Ostrzeżenie:&lt;/b&gt; Poniższe opcje mogą być niebezpieczne!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Otrzymano żądanie utworzenia nowej grupy &quot;%1&quot;.
-Czy chcesz stworzyć tę grupę?
-</translation>
+ <source>Executable Files</source>
+ <translation>Pliki wykonywalne</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Twoje ustawienia KeePassXC-Browser należy przenieść do ustawień bazy danych.
-Jest to konieczne, aby utrzymać bieżące połączenia przeglądarki.
-Czy chcesz teraz migrować istniejące ustawienia?</translation>
+ <source>All Files</source>
+ <translation>Wszystkie pliki</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Nie wyświetlaj ponownie tego ostrzeżenia</translation>
+ <source>Select custom proxy location</source>
+ <translation>Wybierz niestandardową lokalizację proxy</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Otrzymałeś żądanie skojarzenia następującej bazy danych:
-%1
-
-Nadaj połączeniu unikatową nazwę lub identyfikator, na przykład:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Wybierz lokalizację folderu hosta wiadomości natywnych</translation>
</message>
</context>
<context>
@@ -893,7 +959,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Dodaj &apos; - klon&apos; do nazwy</translation>
+ <translation>Dodaj &apos; - Klon&apos; do nazwy</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -939,10 +1005,6 @@ chrome-laptop.</translation>
<translation>Komentarze zaczynają się od</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Pierwszy rekord zawiera nazwy pól</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Traktuj &apos;\&apos; jako znak ucieczki</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>Podgląd</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Układ kolumn</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Nie występuje w pliku CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importowane z pliku CSV</translation>
</message>
@@ -971,20 +1025,12 @@ chrome-laptop.</translation>
<translation>Błąd</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Pusta nazwa pola %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>kolumna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Wykryto błąd lub błędy w pliku CSV!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform> [%n więcej komunikat pominięto]</numerusform><numerusform> [%n więcej komunikaty pominięto]</numerusform><numerusform> [%n więcej komunikatów pominięto]</numerusform><numerusform> [%n więcej komunikatów pominięto]</numerusform></translation>
+ <translation><numerusform> [%n więcej komunikat pominięto]</numerusform><numerusform> [%n więcej komunikatów pominięto]</numerusform><numerusform> [%n więcej komunikatów pominięto]</numerusform><numerusform> [%n więcej komunikatów pominięto]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1002,12 +1048,64 @@ chrome-laptop.</translation>
</message>
<message>
<source>Number of header lines to discard</source>
- <translation>Liczba linii nagłówka do odrzucenia</translation>
+ <translation>Liczba wierszy nagłówka do odrzucenia</translation>
</message>
<message>
<source>CSV import preview</source>
<translation>Podgląd importu CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Skojarzenie kolumny</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Ostatnia modyfikacja</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Hasło</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Stworzone</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notatki</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Tytuł</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupa</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>Adres URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Użytkownik</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Wiersze nagłówka pominięto</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Pierwszy wiersz ma nazwy pól</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Nieobecne</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Kolumna %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Główna</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Plik %1 nie istnieje.</translation>
</message>
@@ -1078,6 +1171,19 @@ Zapasowa baza danych znajduje się w %2</translation>
<source>Recycle Bin</source>
<translation>Kosz</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Hasła</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Zapisywanie bazy danych jest już w toku.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Nie można zapisać, baza danych nie została zainicjowana!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1131,10 +1237,6 @@ Proszę rozważyć wygenerowanie nowego pliku klucza.</translation>
<translation>Nie można otworzyć pliku klucza: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Wybierz slot...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Odblokuj bazę danych KeePassXC</translation>
</message>
@@ -1147,16 +1249,8 @@ Proszę rozważyć wygenerowanie nowego pliku klucza.</translation>
<translation>Pole hasła</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Przełącz widoczność hasła</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Wybór pliku klucza</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
- <translation>Wybór slotu klucza sprzętowego</translation>
+ <translation>Wybór gniazda klucza sprzętowego</translation>
</message>
<message>
<source>Browse for key file</source>
@@ -1215,14 +1309,10 @@ Aby zapobiec pojawianiu się tego błędu, musisz przejść do &quot;Ustawienia
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Możesz użyć sprzętowego klucza bezpieczeństwa, takiego jak &lt;strong&gt;YubiKey&lt;/strong&gt; albo &lt;strong&gt;OnlyKey&lt;/strong&gt; ze slotami skonfigurowanymi dla HMAC-SHA1.&lt;/p&gt;
+ <translation>&lt;p&gt;Możesz użyć sprzętowego klucza bezpieczeństwa, takiego jak &lt;strong&gt;YubiKey&lt;/strong&gt; albo &lt;strong&gt;OnlyKey&lt;/strong&gt; z gniazdami skonfigurowanymi dla HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Kliknij, aby uzyskać więcej informacji...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Oprócz hasła głównego można użyć pliku sekretnego w celu zwiększenia bezpieczeństwa bazy danych. Taki plik można wygenerować w ustawieniach zabezpieczeń bazy danych.&lt;/p&gt;&lt;p&gt;To &lt;strong&gt;nie&lt;/strong&gt; jest plik bazy danych *. kdbx!&lt;br&gt;Jeśli nie masz pliku klucza, pozostaw pole puste.&lt;/p&gt;&lt;p&gt;Kliknij, aby uzyskać więcej informacji...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Pomoc dotycząca pliku klucza</translation>
</message>
@@ -1231,10 +1321,6 @@ Aby zapobiec pojawianiu się tego błędu, musisz przejść do &quot;Ustawienia
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Wybierz plik klucza...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Nie można użyć pliku bazy danych jako pliku klucza</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Nie można użyć pliku bazy danych jako pliku klucza.
Jeśli nie masz pliku klucza, pozostaw puste pole.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Oprócz hasła głównego można użyć pliku sekretnego w celu zwiększenia bezpieczeństwa bazy danych. Ten plik można wygenerować w ustawieniach zabezpieczeń bazy danych.&lt;/p&gt;&lt;p&gt;To &lt;strong&gt;nie&lt;/strong&gt; jest plik bazy danych *. kdbx!&lt;br&gt;Jeśli nie masz pliku klucza, pozostaw to pole puste.&lt;/p&gt;&lt;p&gt;Kliknij, aby uzyskać więcej informacji...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Plik klucza do odblokowania bazy danych</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Proszę dotknąć przycisku na twoim YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Wykrywanie kluczy sprzętowych…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nie wykryto kluczy sprzętowych</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Wybierz klucz sprzętowy…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,10 +1377,6 @@ Jeśli nie masz pliku klucza, pozostaw puste pole.</translation>
<translation>Bezpieczeństwo</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Klucz główny</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Ustawienia szyfrowania</translation>
</message>
@@ -1278,6 +1384,10 @@ Jeśli nie masz pliku klucza, pozostaw puste pole.</translation>
<source>Browser Integration</source>
<translation>Integracja z przeglądarką</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Dane uwierzytelniające bazy danych</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ Jeśli nie masz pliku klucza, pozostaw puste pole.</translation>
<translation>Ustawienia KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Odłącz wszystkie przeglądarki</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Za&amp;pomnij wszystkie ustawienia witryn dla wpisów</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Przenieś atrybuty KeePassHTTP do &amp;niestandardowych danych KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Przechowywane klucze</translation>
</message>
@@ -1329,12 +1427,12 @@ Może to uniemożliwić połączenie z wtyczką przeglądarki.</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>Odłącz wszystkie przeglądarki</translation>
+ <translation>Rozłącz wszystkie przeglądarki</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>Czy na pewno chcesz odłączyć wszystkie przeglądarki?
+ <translation>Czy na pewno chcesz rozłączyć wszystkie przeglądarki?
Może to uniemożliwić połączenie z wtyczką przeglądarki.</translation>
</message>
<message>
@@ -1405,6 +1503,67 @@ Jest to konieczne, aby zachować zgodność z wtyczką przeglądarki.</translati
<source>Remove selected key</source>
<translation>Usuń wybrany klucz</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Przenieś atrybuty KeePassHTTP do niestandardowych danych KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Odśwież identyfikator grupy głównej bazy danych</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Stworzone</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Odśwież identyfikator bazy danych</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Czy naprawdę chcesz odświeżyć identyfikator bazy danych?
+Jest to konieczne tylko wtedy, gdy baza danych jest kopią innej, a rozszerzenie przeglądarki nie może się połączyć.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Dodaj dodatkową ochronę...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nie ustawiono hasła</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>OSTRZEŻENIE! Nie ustawiłeś hasła. Używanie bazy danych bez hasła jest zdecydowanie odradzane!
+
+Czy na pewno chcesz kontynuować bez hasła?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Kontynuuj bez hasła</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nie dodano klucza szyfrowania</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Musisz dodać co najmniej jeden klucz szyfrowania, aby zabezpieczyć bazę danych!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Nieznany błąd</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Nie udało się zmienić danych uwierzytelniających bazy danych</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1588,6 @@ Jest to konieczne, aby zachować zgodność z wtyczką przeglądarki.</translati
<translation>Liczba rund szyfrowania:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Przetestuj 1-sekundowe opóźnienie</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Zużycie pamięci:</translation>
</message>
@@ -1453,14 +1608,6 @@ Jest to konieczne, aby zachować zgodność z wtyczką przeglądarki.</translati
<translation>Zmień</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Wyższe wartości zapewniają lepszą ochronę, ale otwarcie bazy danych potrwa dłużej.</translation>
</message>
@@ -1537,16 +1684,6 @@ Jeśli zachowasz tę liczbę, twoja baza danych może być zbyt łatwa do złama
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> wątek</numerusform><numerusform> wątki</numerusform><numerusform> wątków</numerusform><numerusform> wątków</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Zmień istniejący czas odszyfrowywania</translation>
@@ -1579,6 +1716,14 @@ Jeśli zachowasz tę liczbę, twoja baza danych może być zbyt łatwa do złama
<source>Parallelism</source>
<translation>Paralelizm</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1732,16 @@ Jeśli zachowasz tę liczbę, twoja baza danych może być zbyt łatwa do złama
<translation>Odsłonięte wpisy</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Nie o&amp;dsłaniaj tej bazy danych</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Nie odsłaniaj tej bazy danych</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Odsłoń wpisy w &amp;tej grupie:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Odsłoń wpisy w tej grupie:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Włącz usługę sekretną fd.o , aby uzyskać dostęp do tych ustawień.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Włącz usługę sekretną, aby uzyskać dostęp do tych ustawień.</translation>
</message>
</context>
<context>
@@ -1642,10 +1787,6 @@ Jeśli zachowasz tę liczbę, twoja baza danych może być zbyt łatwa do złama
<translation>Dodatkowe ustawienia bazy danych</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Włącz &amp;kompresję (zalecane)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Pole nazwy bazy danych</translation>
</message>
@@ -1679,6 +1820,10 @@ To działanie jest nieodwracalne.</translation>
<source> (old)</source>
<translation> (stare)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Włącz kompresję (zalecane)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1858,6 @@ To działanie jest nieodwracalne.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Dodaj dodatkową ochronę...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nie dodano klucza szyfrowania</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Musisz dodać co najmniej jeden klucz szyfrowania, aby zabezpieczyć bazę danych!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Brak hasła</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>OSTRZEŻENIE! Nie ustawiłeś hasła. Używanie bazy danych bez hasła jest zdecydowanie odradzane!
-
-Czy na pewno chcesz kontynuować bez hasła?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Nieznany błąd</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Nie udało się zmienić klucza głównego</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Kontynuuj bez hasła</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1877,6 @@ Czy na pewno chcesz kontynuować bez hasła?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statystyka</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Najedź kursorem na linie z ikonami błędów, aby uzyskać więcej informacji.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nazwa</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Wartość</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nazwa bazy danych</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Opis</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Lokalizacja</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Ostatnio zapisane</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Niezapisane zmiany</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>tak</translation>
- </message>
- <message>
- <source>no</source>
- <translation>nie</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Baza danych została zmodyfikowana, ale zmiany nie zostały jeszcze zapisane na dysku.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Liczba grup</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Liczba wpisów</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Liczba wygasłych wpisów</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Baza danych zawiera wpisy, które wygasły.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Niepowtarzalne hasła</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Powtarzalne hasła</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Ponad 10% haseł jest ponownie wykorzystywanych. Jeśli to możliwe, używaj niepowtarzalnych haseł.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maksymalne ponowne użycie hasła</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Niektóre hasła są używane więcej niż trzy razy. Jeśli to możliwe, używaj niepowtarzalnych haseł.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Liczba krótkich haseł</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Zalecana minimalna długość hasła to co najmniej 8 znaków.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Liczba słabych haseł</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Zaleca się używanie długich, losowych haseł z oceną &apos;dobra&apos; lub &apos;znakomita&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Średnia długość hasła</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 znaków</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Średnia długość hasła wynosi mniej niż dziesięć znaków. Dłuższe hasła zapewniają większe bezpieczeństwo.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Proszę czekać, statystyki bazy danych są obliczane...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1905,7 +1892,7 @@ Czy na pewno chcesz kontynuować bez hasła?</translation>
</message>
<message>
<source>CSV file</source>
- <translation>Plik CSV</translation>
+ <translation>plik CSV</translation>
</message>
<message>
<source>Merge database</source>
@@ -1984,6 +1971,10 @@ Jest to z pewnością błąd, zgłoś go programistom.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Za chwilę wyeksportujesz bazę danych do niezaszyfrowanego pliku. To narazi twoje hasła i wrażliwe informacje! Jesteś pewien, że chcesz kontynuować?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Otwórz OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2165,6 +2156,14 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Ta baza danych jest otwarta w trybie tylko do odczytu. Automatyczne zapisywanie jest wyłączone.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Zapisz kopię zapasową bazy danych</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Nie można znaleźć pliku bazy danych: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2209,14 +2208,6 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<translation>Wybierz klucz prywatny</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Plik jest zbyt duży, aby być kluczem prywatnym</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Nie udało się otworzyć klucza prywatnego</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Historia wpisu</translation>
</message>
@@ -2229,10 +2220,6 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<translation>Edycja wpisu</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Podano różne hasła.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nowy atrybut</translation>
</message>
@@ -2250,32 +2237,16 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n miesiąc</numerusform><numerusform>%n miesięce</numerusform><numerusform>%n miesięcy</numerusform><numerusform>%n miesięcy</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Zastosować wygenerowane hasło?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Czy chcesz zastosować wygenerowane hasło do tego wpisu?</translation>
+ <translation><numerusform>%n miesiąc</numerusform><numerusform>%n miesiące</numerusform><numerusform>%n miesięcy</numerusform><numerusform>%n miesięcy</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Wpis został pomyślnie zaktualizowany.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Wpis ma niezapisane zmiany</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Nowy atrybut %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[CHRONIONE] Wciśnij Odsłoń, aby zobaczyć albo edytować</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n rok</numerusform><numerusform>%n lata</numerusform><numerusform>%n lat</numerusform><numerusform>%n lat</numerusform></translation>
@@ -2290,12 +2261,32 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
</message>
<message>
<source>&lt;empty URL&gt;</source>
- <translation>&lt;pusty adres URL&gt;</translation>
+ <translation>&lt;empty URL&gt;</translation>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
<translation>Czy na pewno chcesz usunąć ten adres URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Odsłoń</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Ukryj</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Niezapisane zmiany</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Czy chcesz zapisać zmiany w tym wpisie?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[CHRONIONE] Wciśnij Odsłoń, aby zobaczyć albo edytować</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2371,6 +2362,14 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<source>Background color selection</source>
<translation>Wybór koloru tła</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jeśli zaznaczone, wpis nie pojawi się w raportach takich jak kontrola zdrowia i HIBP, nawet jeśli nie spełnia wymagań jakościowych (np. entropia hasła lub ponowne użycie). Możesz ustawić znacznik wyboru, jeśli hasło jest poza twoją kontrolą (np. jeśli musi to być czterocyfrowy kod PIN), aby zapobiec zaśmiecaniu raportów.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Wyklucz z raportów bazy danych</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2379,16 +2378,8 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<translation>Włącz autowpisywanie dla tego wpisu</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Dziedzicz domyślną sekwencję autowpisywania z &amp;grupy</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Używaj niestandardowej sekwencji autowpisywania:</translation>
- </message>
- <message>
<source>Window Associations</source>
- <translation>Skojarzone okna</translation>
+ <translation>Skojarzenia okna</translation>
</message>
<message>
<source>+</source>
@@ -2404,7 +2395,7 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Użyj określonej sekwencji dla tego skojarzenia:</translation>
+ <translation>Użyj określonej sekwencji dla tego powiązania:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2442,6 +2433,14 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Niestandardowa sekwencja autowpisywania dla tego okna</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Dziedzicz domyślną sekwencję autowpisywania z grupy</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Używaj niestandardowej sekwencji autowpisywania:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2477,6 +2476,14 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<source>Edit</source>
<translation>Edytuj</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Wyślij to ustawienie do przeglądarki tylko w przypadku okien dialogowych uwierzytelniania HTTP. Jeśli ta opcja jest włączona, zwykłe formularze logowania nie będą wyświetlać tego wpisu do wyboru.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Użyj tego wpisu tylko w przypadku podstawowego uwierzytelniania HTTP</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2521,25 +2528,17 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<name>EditEntryWidgetMain</name>
<message>
<source>URL:</source>
- <translation>URL:</translation>
+ <translation>Adres URL:</translation>
</message>
<message>
<source>Password:</source>
<translation>Hasło:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Powtórz:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Tytuł:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notatki</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Ustawienia</translation>
</message>
@@ -2552,34 +2551,18 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<translation>Użytkownik:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Wygasa</translation>
- </message>
- <message>
<source>Url field</source>
- <translation>Pole URL</translation>
+ <translation>Pole adresu URL</translation>
</message>
<message>
<source>Download favicon for URL</source>
<translation>Pobierz ikonę ulubionych dla adresu URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Pole powtórzenia hasła</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Przełącz generator haseł</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Pole hasła</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Przełącz widoczność hasła</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Przełącz widoczność notatek</translation>
</message>
@@ -2611,6 +2594,18 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<source>Toggle expiration</source>
<translation>Przełącz wygasanie</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notatki:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Wygasa:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2746,10 +2741,6 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formularz</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Typ:</translation>
</message>
@@ -2758,10 +2749,6 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
<translation>Ścieżka:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Hasło:</translation>
</message>
@@ -2845,57 +2832,25 @@ Obsługiwane rozszerzenia to: %1.</translation>
<translation>Ścieżka do pola udostępniania pliku</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Przeglądaj plik udostępniania</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Pole hasła</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Przełącz widoczność hasła</translation>
+ <source>Clear fields</source>
+ <translation>Wyczyść pola</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Przełącz generator haseł</translation>
+ <source>Browse for share file</source>
+ <translation>Przeglądaj plik udostępniania</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Wyczyść pola</translation>
+ <source>Browse...</source>
+ <translation>Przeglądaj...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nazwa</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notatki</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Wygasa</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Szukaj</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Autowpisywanie</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Korzystaj z domyślnej sekwencji autowpisywania z nadrzędnej grupy</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Ustaw domyślną se&amp;kwencję autowpisywania</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Pole nazwy</translation>
</message>
@@ -2923,17 +2878,37 @@ Obsługiwane rozszerzenia to: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Pole domyślnej sekwencji autowpisywnaia</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Użyj ikony domyślnej</translation>
+ <source>Expires:</source>
+ <translation>Wygasa:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Korzystaj z domyślnej sekwencji autowpisywania z nadrzędnej grupy</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Autowpisywanie:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Szukaj:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notatki:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Nazwa:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Użyj niesta&amp;ndardowej ikony</translation>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Ustaw domyślną sekwencję autowpisywania</translation>
</message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
<message>
<source>Add custom icon</source>
<translation>Dodaj niestandardową ikonę</translation>
@@ -2976,7 +2951,7 @@ Obsługiwane rozszerzenia to: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n ikona już istnieje w bazie danych</numerusform><numerusform>%n ikony już istnieje w bazie danych</numerusform><numerusform>%n ikon już istnieje w bazie danych</numerusform><numerusform>%n ikon już istnieje w bazie danych</numerusform></translation>
+ <translation><numerusform>%n ikona już istnieje w bazie danych</numerusform><numerusform>%n ikony już istnieją w bazie danych</numerusform><numerusform>%n ikon już istnieje w bazie danych</numerusform><numerusform>%n ikon już istnieje w bazie danych</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2999,14 +2974,6 @@ Obsługiwane rozszerzenia to: %1.</translation>
<translation>Zastosuj wybraną ikonę do podgrup i wpisów</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Zastosuj ikonę &amp;do ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Zastosuj tylko do tego</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Zastosuj również do grup podrzędnych</translation>
</message>
@@ -3022,6 +2989,22 @@ Obsługiwane rozszerzenia to: %1.</translation>
<source>Existing icon selected.</source>
<translation>Wybrano istniejącą ikonę.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Ustaw domyślną ikonę</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Ustaw niestandardową ikonę</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Zastosuj ikonę do...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Zastosuj tylko do tej grupy</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3183,8 +3166,8 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Nie można otworzyć plik:
-%1</numerusform><numerusform>Nie można otworzyć pliki:
+ <translation><numerusform>Nie można otworzyć pliku:
+%1</numerusform><numerusform>Nie można otworzyć plików:
%1</numerusform><numerusform>Nie można otworzyć plików:
%1</numerusform><numerusform>Nie można otworzyć plików:
%1</numerusform></translation>
@@ -3209,6 +3192,20 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
<source>Save selected attachment to disk</source>
<translation>Zapisz wybrany załącznik na dysk</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 to duży plik (%2 MB).
+Twoja baza danych może być bardzo duża i zmniejszać wydajność.
+
+Czy na pewno chcesz dodać ten plik?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Potwierdź załącznik</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3233,7 +3230,7 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Adres URL</translation>
</message>
</context>
<context>
@@ -3257,7 +3254,7 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Adres URL</translation>
</message>
<message>
<source>Never</source>
@@ -3292,12 +3289,52 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
<translation>Załączniki</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Tak</translation>
+ <source>Size</source>
+ <translation>Rozmiar</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nazwa grupy</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Tytuł wpisu</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Notatki wpisu</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Wpis wygasa</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Data utworzenia</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Data ostatniej modyfikacji</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Data ostatniego dostępu</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Załączone pliki</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Rozmiar wpisu</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Ma załączniki</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Ma hasło jednorazowe TOTP</translation>
</message>
</context>
<context>
@@ -3324,7 +3361,7 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Adres URL</translation>
</message>
<message>
<source>Attributes</source>
@@ -3397,6 +3434,13 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Nieprawidłowy adres URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3423,8 +3467,14 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
<translation>Przywróć domyślne</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Załączniki (ikona)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Ma załączniki</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Ma TOTP</translation>
</message>
</context>
<context>
@@ -3436,21 +3486,74 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Rejestracja usługi DBus w %1 nie powiodła się: uruchomiona jest inna usługa sekretna.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n wpis był używany przez %1</numerusform><numerusform>%n wpisy były używane przez %1</numerusform><numerusform>%n wpisów było używanych przez %1</numerusform><numerusform>%n wpisów było używanych przez %1</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Rejestracja usługi DBus w %1 nie powiodła się.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nazwa pliku</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupa</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Zarządzaj</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Odblokuj, aby pokazać</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Żaden</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplikacja</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Zarządzaj</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Usługa sekretna Fdo: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Usługa sekretna Fdo:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Nieznany</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Nieznany</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, plik wykonywalny: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Uruchomiona jest inna usługa sekretna (%1). Zatrzymaj ją/usuń przed ponownym włączeniem Integracji usługi sekretnej.</translation>
</message>
</context>
<context>
@@ -3458,18 +3561,14 @@ Może to spowodować nieprawidłowe działanie wtyczek.</translation>
<message>
<source>[empty]</source>
<comment>group has no children</comment>
- <translation>[puste]</translation>
+ <translation>[pusty]</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Nie można zapisać pliku!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Nie można zapisać pliku skryptu Native Messaging.</translation>
+ <source>Online password validation failed</source>
+ <translation>Sprawdzanie hasła online nie powiodło się</translation>
</message>
</context>
<context>
@@ -3494,7 +3593,7 @@ Możesz włączyć usługę ikon witryn DuckDuckGo w sekcji bezpieczeństwa usta
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Adres URL</translation>
</message>
<message>
<source>Status</source>
@@ -3539,20 +3638,12 @@ Możesz włączyć usługę ikon witryn DuckDuckGo w sekcji bezpieczeństwa usta
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nie mogę wyliczyć głównego klucza</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nie można wywołać wyzwania-odpowiedzi.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>brakuje nagłówków bazy danych</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation>Nagłówek nie pasuje do hashu</translation>
+ <translation>Nagłówek nie pasuje do hasza</translation>
</message>
<message>
<source>Invalid header id size</source>
@@ -3572,16 +3663,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Podano nieprawidłowe dane uwierzytelniające, spróbuj ponownie.
Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Nie można wyliczyć klucza bazy danych</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nie można wywołać wyzwania-odpowiedzi: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nie można wywołać wyzwania-odpowiedzi.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nie można wywołać wyzwania-odpowiedzi: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nie mogę wyliczyć głównego klucza</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Nie można wyliczyć klucza bazy danych</translation>
</message>
</context>
<context>
@@ -3591,10 +3690,6 @@ Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translatio
<translation>brakuje nagłówków bazy danych</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nie mogę wyliczyć głównego klucza</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Nieprawidłowy rozmiar sumy kontrolnej nagłówka</translation>
</message>
@@ -3645,7 +3740,7 @@ Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translatio
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Nieobsługiwana wersja mapy odmian KeePass.</translation>
+ <translation>Niewspierana wersja mapy odmian KeePass.</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
@@ -3712,6 +3807,10 @@ Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translatio
<source>(HMAC mismatch)</source>
<translation>(Niezgodność HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Nie można wyliczyć klucza bazy danych: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3725,14 +3824,14 @@ Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translatio
<translation>Nieprawidłowy rozmiar symetrycznego szyfru IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nie mogę wyliczyć głównego klucza</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Nie udało się serializować mapy odmian parametrów KDF</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Nie można wyliczyć klucza bazy danych: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3792,7 +3891,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Nieprawidłowa długość szyfru UUID: %1 (długość=%2)</translation>
+ <translation>Nieprawidłowa długość szyfru uuid: %1 (długość=%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
@@ -3815,7 +3914,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Brakujący UUID ikony lub danych</translation>
+ <translation>Brakujące uuid ikony lub danych</translation>
</message>
<message>
<source>Missing custom data key or value</source>
@@ -3827,7 +3926,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>Null group uuid</source>
- <translation>Zerowa grupa UUID</translation>
+ <translation>Zerowa grupa uuid</translation>
</message>
<message>
<source>Invalid group icon number</source>
@@ -3843,19 +3942,19 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>No group uuid found</source>
- <translation>Nie znaleziono grupy UUID</translation>
+ <translation>Nie znaleziono grupy uuid</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
- <translation>Zerowy UUID DeleteObject</translation>
+ <translation>Zerowy uuid DeleteObject</translation>
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
- <translation>Brakujący UUID DeletedObject lub czasu</translation>
+ <translation>Brakujące uuid DeletedObject lub czasu</translation>
</message>
<message>
<source>Null entry uuid</source>
- <translation>Zerowy wpis UUID</translation>
+ <translation>Zerwoy wpis uuid</translation>
</message>
<message>
<source>Invalid entry icon number</source>
@@ -3867,11 +3966,11 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>No entry uuid found</source>
- <translation>Nie znaleziono wpisu UUID</translation>
+ <translation>Nie znaleziono wpisu uuid</translation>
</message>
<message>
<source>History element with different uuid</source>
- <translation>Element historii z innym UUID</translation>
+ <translation>Element historii z innym uuid</translation>
</message>
<message>
<source>Duplicate custom attribute found</source>
@@ -3882,16 +3981,12 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
<translation>Brak klucza lub wartości dla wpisu</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Znaleziono zduplikowany załącznik</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Brak wejściowego klucza binarnego lub wartości</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>Brak skojarzonego okna lub sekwencji autowpisywania</translation>
+ <translation>Brak skojarzenego okna lub sekwencji autowpisywania</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3907,7 +4002,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Nieprawidłowa wartość części koloru RGB</translation>
+ <translation>Nieprawidłowa wartość części koloru rgb</translation>
</message>
<message>
<source>Invalid number value</source>
@@ -3915,7 +4010,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz
</message>
<message>
<source>Invalid uuid value</source>
- <translation>Nieprawidłowa wartość UUID</translation>
+ <translation>Nieprawidłowa wartość uuid</translation>
</message>
<message>
<source>Unable to decompress binary</source>
@@ -3932,6 +4027,29 @@ Wiersz %2, kolumna %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Niepoprawna struktura pliku ustawień KeeAgenta.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Klucz prywatny jest załącznikiem, ale nie ma załączników.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Klucz prywatny jest pusty</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Plik jest zbyt duży, aby być kluczem prywatnym</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Nie udało się otworzyć klucza prywatnego</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3994,10 +4112,6 @@ Wiersz %2, kolumna %3</translation>
<translation>Główna</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nie mogę wyliczyć głównego klucza</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Nie udało się transformować klucza</translation>
</message>
@@ -4063,7 +4177,7 @@ Wiersz %2, kolumna %3</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Nieprawidłowy rozmiar pola wpisu UUID</translation>
+ <translation>Nieprawidłowy rozmiar pola wpisu uuid</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
@@ -4091,7 +4205,7 @@ Wiersz %2, kolumna %3</translation>
</message>
<message>
<source>unable to seek to content position</source>
- <translation>niezdolny do szukania pozycji treści</translation>
+ <translation>nie można znaleźć pozycji treści</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -4099,6 +4213,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Podano nieprawidłowe dane uwierzytelniające, spróbuj ponownie.
Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Nie można wyliczyć klucza bazy danych</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4205,16 +4323,6 @@ Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony.</translatio
<translation>Przestarzały format pliku klucza</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Używasz przestarzałego formatu pliku klucza, który może być
-nieobsługiwany w przyszłości.
-
-Przejdź do ustawień klucza głównego i wygeneruj nowy plik klucza.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Błąd ładowania pliku klucza &apos;%1&apos;
@@ -4282,6 +4390,16 @@ Are you sure you want to continue with this file?</source>
<translation>Wybrany plik klucza wygląda jak plik bazy danych haseł. Plik klucza musi być plikiem statycznym, który nigdy się nie zmienia albo utracisz dostęp do bazy danych na zawsze.
Czy na pewno chcesz kontynuować z tym plikiem?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Używasz przestarzałego formatu pliku klucza, który może nie być
+obsługiwany w przyszłości.
+
+Wygeneruj nowy plik klucza w ustawieniach bezpieczeństwa bazy danych.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4290,18 +4408,10 @@ Czy na pewno chcesz kontynuować z tym plikiem?</translation>
<translation>&amp;Baza danych</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Ostatnie bazy danych</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Pomoc</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>W&amp;pisy</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupy</translation>
</message>
@@ -4318,46 +4428,10 @@ Czy na pewno chcesz kontynuować z tym plikiem?</translation>
<translation>&amp;O programie</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Ot&amp;wórz bazę danych...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Zapisz bazę danych</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Zamknij bazę da&amp;nych</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Usuń wpis</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Edytuj grupę</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>U&amp;suń grupę</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>&amp;Zapisz bazę danych jako...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Ustawienia bazy danych</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Sklonuj wpis</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Skopi&amp;uj użytkownika</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Skopiuj użytkownika do schowka</translation>
</message>
@@ -4370,10 +4444,6 @@ Czy na pewno chcesz kontynuować z tym plikiem?</translation>
<translation>&amp;Ustawienia</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Zablokuj bazy danych</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Tytuł</translation>
</message>
@@ -4383,7 +4453,7 @@ Czy na pewno chcesz kontynuować z tym plikiem?</translation>
</message>
<message>
<source>&amp;URL</source>
- <translation>&amp;URL</translation>
+ <translation>Adres &amp;URL</translation>
</message>
<message>
<source>Copy URL to clipboard</source>
@@ -4398,14 +4468,6 @@ Czy na pewno chcesz kontynuować z tym plikiem?</translation>
<translation>Skopiuj notatki do schowka</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Eksportuj do pliku CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Ustaw TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Skopiuj &amp;TOTP</translation>
</message>
@@ -4450,10 +4512,6 @@ Ta wersja nie jest przeznaczona do użytku produkcyjnego.</translation>
<translation>&amp;Wspomóż</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Zgłoś &amp;błąd</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>OSTRZEŻENIE: Twoja wersja Qt może powodować awarie KeePassXC z klawiaturą ekranową!
@@ -4464,181 +4522,359 @@ Zalecamy korzystanie z AppImage dostępnego na naszej stronie pobierania.</trans
<translation>&amp;Importuj</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Skopiuj atry&amp;but...</translation>
+ <source>Create a new database</source>
+ <translation>Stwórz nową bazę danych</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
+ <source>Merge from another KDBX database</source>
+ <translation>Scal z inną bazą KDBX</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>&amp;Nowa baza danych...</translation>
+ <source>Add a new entry</source>
+ <translation>Dodaj nowy wpis</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Stwórz nową bazę danych</translation>
+ <source>View or edit entry</source>
+ <translation>Podgląd lub edycja wpisu</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Scal z bazą danych...</translation>
+ <source>Add a new group</source>
+ <translation>Dodaj nową grupę</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Scal z inną bazą KDBX</translation>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>Wykonaj &amp;autowpisywanie</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nowy wpis</translation>
+ <source>Open &amp;URL</source>
+ <translation>Otwórz adres &amp;URL</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Dodaj nowy wpis</translation>
+ <source>Import a KeePass 1 database</source>
+ <translation>Importuj bazę danych KeePass 1</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Edytuj wpis</translation>
+ <source>Import a CSV file</source>
+ <translation>Importuj plik CSV</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Podgląd lub edycja wpisu</translation>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>UWAGA: Używasz wstępnej wersji KeePassXC! Spodziewaj się pewnych błędów i drobnych problemów, ta wersja nie jest przeznaczona do użytku produkcyjnego.</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nowa grupa</translation>
+ <source>Check for updates on startup?</source>
+ <translation>Sprawdzać aktualizacje podczas uruchamiania?</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Dodaj nową grupę</translation>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Czy chcesz, aby KeePassXC sprawdzał aktualizacje podczas uruchamiania?</translation>
+ </message>
+ <message>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Zawsze możesz sprawdzić aktualizacje ręcznie w menu aplikacji.</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Zmień &amp;klucz główny...</translation>
+ <source>&amp;Export</source>
+ <translation>&amp;Eksportuj</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>Ustawienia bazy &amp;danych...</translation>
+ <source>Sort &amp;A-Z</source>
+ <translation>Sortuj &amp;A-Z</translation>
</message>
<message>
- <source>Copy &amp;password</source>
+ <source>Sort &amp;Z-A</source>
+ <translation>Sortuj &amp;Z-A</translation>
+ </message>
+ <message>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Generator hasła</translation>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation>Importuj sejf 1Password</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Pierwsze kroki</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>Podręcznik uż&amp;ytkownika</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Skróty klawiaturowe</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Ostatnie bazy danych</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>W&amp;pisy</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Skopiuj atry&amp;but</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Widok</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation>Motyw</translation>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>Sprawdź &amp;aktualizacje</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>Ot&amp;wórz bazę danych…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Zapisz bazę danych</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>Zamknij bazę da&amp;nych</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Nowa baza danych…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Scal z bazą danych…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nowy wpis…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Edytuj wpis…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Usuń wpis…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Nowa grupa…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Edytuj grupę…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>U&amp;suń grupę…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Pobierz wszystkie ikony &amp;ulubionych…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>&amp;Zapisz bazę danych jako…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>&amp;Bezpieczeństwo bazy danych…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>&amp;Raporty bazy danych...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statystyka, kontrola zdrowia itp.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Ustawienia bazy &amp;danych…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Sklonuj wpis…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Przesuń w &amp;górę</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Przesuń wpis o jeden krok w górę</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Przesuń w &amp;dół</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Przesuń wpis o jeden krok w dół</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Skopi&amp;uj nazwę użytkownika</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
<translation>Skopiuj &amp;hasło</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>Wykonaj &amp;autowpisywanie</translation>
+ <source>Download &amp;Favicon</source>
+ <translation>Pobierz &amp;ikonę ulubionych</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Otwórz &amp;URL</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>Zab&amp;lokuj bazy danych</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Baza danych KeePass 1...</translation>
+ <source>&amp;CSV File…</source>
+ <translation>Plik &amp;CSV…</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Importuj bazę danych KeePass 1</translation>
+ <source>&amp;HTML File…</source>
+ <translation>Plik &amp;HTML…</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Plik CSV...</translation>
+ <source>KeePass 1 Database…</source>
+ <translation>Baza danych KeePass 1…</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Importuj plik CSV</translation>
+ <source>1Password Vault…</source>
+ <translation>Sejf 1Password…</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Pokaż TOTP...</translation>
+ <source>CSV File…</source>
+ <translation>Plik CSV…</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Pokaż kod QR TOTP...</translation>
+ <source>Show TOTP</source>
+ <translation>Pokaż TOTP</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>UWAGA: Używasz wstępnej wersji KeePassXC! Spodziewaj się pewnych błędów i drobnych problemów, ta wersja nie jest przeznaczona do użytku produkcyjnego.</translation>
+ <source>Show QR Code</source>
+ <translation>Pokaż kod QR</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>Sprawdzać aktualizacje podczas uruchomienia?</translation>
+ <source>Set up TOTP…</source>
+ <translation>Ustaw TOTP…</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Czy chcesz, aby KeePassXC sprawdzał aktualizacje podczas uruchomienia?</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Zgłoś &amp;błąd</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Zawsze możesz sprawdzić aktualizacje ręcznie w menu aplikacji.</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Otwórz przewodnik pierwszych kroków</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Eksportuj</translation>
+ <source>&amp;Online Help</source>
+ <translation>Po&amp;moc online</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>Sprawdź &amp;aktualizacje...</translation>
+ <source>Go to online documentation</source>
+ <translation>Przejdź do dokumentacji online</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Pobierz wszystkie ikony &amp;ulubionych</translation>
+ <source>Open User Guide</source>
+ <translation>Otwórz podręcznik użytkownika</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Sortuj &amp;A-Z</translation>
+ <source>Save Database Backup...</source>
+ <translation>Zapisz kopię zapasową bazy danych…</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Sortuj &amp;Z-A</translation>
+ <source>Add key to SSH Agent</source>
+ <translation>Dodaj klucz do agenta SSH</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Generator hasła</translation>
+ <source>Remove key from SSH Agent</source>
+ <translation>Usuń klucz z agenta SSH</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Pobierz ikonę ulubionych</translation>
+ <source>Compact Mode</source>
+ <translation>Tryb kompaktowy</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Eksportuj do pliku HTML...</translation>
+ <source>Automatic</source>
+ <translation>Automatyczny</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>Sejf 1Password...</translation>
+ <source>Light</source>
+ <translation>Jasny</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importuj sejf 1Password</translation>
+ <source>Dark</source>
+ <translation>Ciemny</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Pierwsze kroki</translation>
+ <source>Classic (Platform-native)</source>
+ <translation>Klasyczny (natywny dla platformy)</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Otwórz przewodnik pierwszych kroków w formacie PDF</translation>
+ <source>Show Toolbar</source>
+ <translation>Pokaż pasek narzędzi</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Po&amp;moc online...</translation>
+ <source>Show Preview Panel</source>
+ <translation>Pokaż panel podglądu</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Przejdź do dokumentacji online (otwiera przeglądarkę)</translation>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Nie pokazuj więcej dla tej wersji</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Podręcznik uż&amp;ytkownika</translation>
+ <source>Restart Application?</source>
+ <translation>Zrestartować aplikację?</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Otwórz podręcznik użytkownika w formacie PDF</translation>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Musisz zrestartować aplikację, aby zastosować to ustawienie. Czy chcesz teraz zrestartować?</translation>
</message>
+</context>
+<context>
+ <name>ManageDatabase</name>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Skróty klawiaturowe</translation>
+ <source>Database settings</source>
+ <translation>Ustawienia bazy danych</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Edytuj ustawienia bazy danych</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Odblokuj bazę danych</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Odblokuj bazę danych, aby wyświetlić więcej informacji</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Zablokuj bazę danych</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Rozłącz</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Rozłącz tę aplikację</translation>
</message>
</context>
<context>
@@ -4727,10 +4963,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>WizardPage</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Ustawienia &amp;szyfrowania</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych.</translation>
</message>
@@ -4742,27 +4974,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Ustawienia proste</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Ustawienia szyfrowania</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych.</translation>
+ <source>Database Credentials</source>
+ <translation>Dane uwierzytelniające bazy danych</translation>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Zestaw danych uwierzytelniających, znanych tylko Tobie, który chroni Twoją bazę danych.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Klucz główny bazy danych</translation>
+ <source>Encryption Settings</source>
+ <translation>Ustawienia szyfrowania</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Klucz główny znany tylko tobie chroni twoją bazę danych.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych.</translation>
</message>
</context>
<context>
@@ -4777,6 +5013,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Menedżer haseł</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4840,7 +5083,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unable to derive master key: %1</source>
- <translation>Nie można wyprowadzić klucza głównego: %1</translation>
+ <translation>Nie można derywować klucza głównego: %1</translation>
</message>
</context>
<context>
@@ -4952,6 +5195,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>Hasła są do tej pory zgodne</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Przełącz hasło (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Wygeneruj hasło (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Ostrzeżenie: włączony Caps Lock!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4976,25 +5231,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Hasła nie pasują do siebie.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Wygeneruj hasło główne</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Pole hasła</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Przełącz widoczność hasła</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Pole powtórzenia hasła</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Przełącz generator haseł</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5003,10 +5246,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Hasło:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>siła</translation>
@@ -5056,14 +5295,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Separator słów:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Skopiuj</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Zaakceptuj</translation>
- </message>
- <message>
<source>Close</source>
<translation>Zamknij</translation>
</message>
@@ -5078,7 +5309,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<message>
<source>Poor</source>
<comment>Password quality</comment>
- <translation>Kiepska</translation>
+ <translation>Uboga</translation>
</message>
<message>
<source>Weak</source>
@@ -5160,14 +5391,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Zmień na tryb prosty</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Prosty</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Zestaw znaków do wykluczenia w wygenerowanym haśle</translation>
</message>
@@ -5188,14 +5411,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Wykluczone znaki: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Liczba słów:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regeneruj</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Wygenerowane hasło</translation>
</message>
@@ -5244,10 +5459,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Skopiuj hasło</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Zaakceptuj hasło</translation>
- </message>
- <message>
<source>lower case</source>
<translation>małe litery</translation>
</message>
@@ -5260,8 +5471,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Tytułowe Litery</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Przełącz widoczność hasła</translation>
+ <source>Generate Password</source>
+ <translation>Wygeneruj hasło</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Wybierz także:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Dodatkowe znaki do użycia dla wygenerowanego hasła</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Dodatkowe znaki</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Liczba słów:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Zastosuj hasło</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Wyczyść</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Wygeneruj ponownie hasło (%1)</translation>
</message>
</context>
<context>
@@ -5274,6 +5521,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>Statystyka</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Bardzo słabe hasło</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Entropia hasła to %1 bitów</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Słabe hasło</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Użyte w %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Hasło użyte %1 razy</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Hasło wygasło</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Wygaśnięcie hasła było %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Hasło zaraz wygaśnie</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Hasło wygaśnie za %1 dni</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Hasło wkrótce wygaśnie</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Hasło wygasa w %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Kontrola zdrowia</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5354,7 +5653,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>No URL provided</source>
- <translation>Nie podano URL</translation>
+ <translation>Nie podano adresu URL</translation>
</message>
<message>
<source>No logins found</source>
@@ -5394,7 +5693,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>URL</source>
- <translation>URL</translation>
+ <translation>Adres URL</translation>
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
@@ -5413,10 +5712,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Ścieżka wpisu do dodania.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Skopiuj hasło wpisu do schowka.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Ścieżka wpisu do zapamiętania.</translation>
@@ -5503,7 +5798,7 @@ Dostępne polecenia:
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation>Użyj tych samych danych uwierzytelniających dla obu plików bazy danych.</translation>
+ <translation>Użyj tych samych poświadczeń dla obu plików bazy danych.</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
@@ -5574,14 +5869,6 @@ Dostępne polecenia:
<translation>Integracja z przeglądarką</translation>
</message>
<message>
- <source>Press</source>
- <translation>Naciśnij</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasywny</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agent SSH</translation>
</message>
@@ -5620,10 +5907,6 @@ Dostępne polecenia:
<translation>Pomyślnie dodano wpis %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Skopiuj bieżące TOTP do schowka.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Nieprawidłowa wartość limitu czasu %1.</translation>
</message>
@@ -5635,14 +5918,6 @@ Dostępne polecenia:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Wpis ze ścieżką %1 nie ma ustawionego TOTP.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Bieżące TOTP wpisu zostało skopiowane do schowka!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Hasło wpisu zostało skopiowane do schowka!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>Czyszczenie schowka za %1 sekundę...</numerusform><numerusform>Czyszczenie schowka za %1 sekundy...</numerusform><numerusform>Czyszczenie schowka za %1 sekund...</numerusform><numerusform>Czyszczenie schowka za %1 sekund...</numerusform></translation>
@@ -5844,7 +6119,7 @@ Dostępne polecenia:
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation>Pomyślnie przetworzono wpis %1.</translation>
+ <translation>Pomyślnie przeniesiono do kosza wpis %1.</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
@@ -5863,10 +6138,6 @@ Dostępne polecenia:
<translation>Nie zdefiniowano żadnego programu do manipulacji schowkiem</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Nie można uruchomić programu %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>plik pusty</translation>
</message>
@@ -5875,18 +6146,6 @@ Dostępne polecenia:
<translation>%1: (rząd, kolumna) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bitowy</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bitowy</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bitowy</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – zalecany)</translation>
</message>
@@ -6137,12 +6396,8 @@ Jądro: %3 %4</translation>
<translation>Wyświetl tę pomoc.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Slot YubiKey używany do szyfrowania bazy danych.</translation>
- </message>
- <message>
<source>slot</source>
- <translation>slot</translation>
+ <translation>gniazdo</translation>
</message>
<message>
<source>Invalid word count %1</source>
@@ -6157,10 +6412,6 @@ Jądro: %3 %4</translation>
<translation>Wyjdź z trybu interaktywnego.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Format używany podczas eksportowania. Dostępne opcje to XML lub CSV. Domyślnie XML.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Eksportuje zawartość bazy danych do standardowego wyjścia w określonym formacie.</translation>
</message>
@@ -6201,10 +6452,6 @@ Jądro: %3 %4</translation>
<translation>Ścieżka nowej bazy danych.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Nie można zaimportować eksportu bazy danych XML %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Pomyślnie zaimportowano bazę danych.</translation>
</message>
@@ -6214,7 +6461,7 @@ Jądro: %3 %4</translation>
</message>
<message>
<source>Flattens the output to single lines.</source>
- <translation>Spłaszcza dane wyjściowe do pojedynczych linii.</translation>
+ <translation>Spłaszcza dane wyjściowe do pojedynczych wierszy.</translation>
</message>
<message>
<source>Only print the changes detected by the merge operation.</source>
@@ -6222,7 +6469,7 @@ Jądro: %3 %4</translation>
</message>
<message>
<source>Yubikey slot for the second database.</source>
- <translation>Slot YubiKey dla drugiej bazy danych.</translation>
+ <translation>Gniazdo YubiKey dla drugiej bazy danych.</translation>
</message>
<message>
<source>Successfully merged %1 into %2.</source>
@@ -6294,11 +6541,7 @@ Jądro: %3 %4</translation>
</message>
<message>
<source>Invalid YubiKey slot %1</source>
- <translation>Nieprawidłowy slot YubiKey %1</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Proszę dotknąć przycisku na YubiKey, aby odblokować %1</translation>
+ <translation>Nieprawidłowe gniazdo YubiKey %1</translation>
</message>
<message>
<source>Enter password to encrypt database (optional): </source>
@@ -6316,10 +6559,6 @@ Jądro: %3 %4</translation>
<source>User name</source>
<translation>Nazwa użytkownika</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1 [%2] wyzwanie-odpowiedź - slot %3-%4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation><numerusform>Hasło do &apos;%1&apos; wyciekło %2 raz!</numerusform><numerusform>Hasło do &apos;%1&apos; wyciekło %2 razy!</numerusform><numerusform>Hasło do &apos;%1&apos; wyciekło %2 razy!</numerusform><numerusform>Hasło do &apos;%1&apos; wyciekło %2 razy!</numerusform></translation>
@@ -6332,6 +6571,194 @@ Jądro: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Pokaż chronione atrybuty w postaci zwykłego tekstu.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Błąd wtyczki przeglądarki</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Nie można zapisać pliku skryptu wiadomości natywnej dla %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Skopiuj dany atrybut do schowka. Domyślnie &quot;hasło&quot;, jeśli nie jest określony.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Skopiuj bieżący TOTP do schowka (odpowiednik &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Skopiuj atrybut wpisu do schowka.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>BŁĄD: Proszę określić jeden z --atrybut lub --totp, a nie oba.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>BŁĄD: atrybut %1 jest niejednoznaczny, jest zgodny z %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Nie znaleziono atrybutu &quot;%1&quot;.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Atrybut &quot;%1&quot; wpisu skopiowany do schowka!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Gniazdo Yubikey i opcjonalny numer seryjny używane do uzyskiwania dostępu do bazy danych (np. 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>gniazdo[:numer seryjny]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Docelowy czas odszyfrowywania w ms dla bazy danych.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>czas</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Ustaw plik klucza dla bazy danych.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Ustaw hasło bazy danych.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Nieprawidłowy czas odszyfrowywania %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Docelowy czas odszyfrowywania musi wynosić od %1 do %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Nie można ustawić hasła bazy danych.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Testowanie wydajności funkcji derywacji klucza dla opóźnienia %1ms.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Ustawienie %1 rund dla funkcji derywacji klucza.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>błąd podczas tworzenia ustawień derywacji klucza.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Formatowanie do użycia podczas eksportowania. Dostępne opcje to &apos;xml&apos; lub &apos;csv&apos;. Domyślnie wartość &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Nie można zaimportować bazy danych XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Pokaż informacje o bazie danych.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nazwa: </translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Opis: </translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Szyfr: </translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Kosz jest włączony.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Kosz nie jest włączony.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Nieprawidłowe polecenie %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Nieprawidłowy numer seryjny YubiKey %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Proszę dotknąć przycisku na YubiKey, aby kontynuować…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Czy chcesz utworzyć bazę danych z pustym hasłem? [t/N]: </translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Powtarzanie hasła: </translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Błąd: hasła nie są zgodne.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Wszystkie programy obcinające zawiodły. Próbowano %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (rundy: %1)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (rundy: %1, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bitowy</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bitowy</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bitowy {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Test wydajności opóźnienia %1</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6368,6 +6795,290 @@ Jądro: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Pokaż również wpisy, które zostały wykluczone z raportów</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Umieść wskaźnik myszy nad powodem, aby wyświetlić dodatkowe szczegóły. Kliknij dwukrotnie wpisy, aby edytować.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Zła</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Złe — hasło musi zostać zmienione</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Uboga</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Ubogie — hasło powinno zostać zmienione</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Słaba</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Słabe — rozważ zmianę hasła</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Wykluczone)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Ten wpis jest wykluczony z raportów</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Proszę czekać, dane zdrowotne są obliczane...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Gratulacje, wszystko jest zdrowe!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Tytuł</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Ścieżka</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Ocena</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Powód</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Edytuj wpis...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Wyklucz z raportów</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>UWAGA: Ten raport wymaga wysłania informacji do serwisu internetowego Have I Been Pwned (https://haveibeenpwned.com). Jeśli będziesz kontynuować, hasła bazy danych zostaną zahashowane kryptograficznie i pierwsze pięć znaków tych hashów zostanie wysłane bezpiecznie do tej usługi. Twoja baza danych pozostanie bezpieczna i nie będzie można jej odtworzyć na podstawie tych informacji. Jednak liczba wysłanych haseł i adres IP będą widoczne dla tej usługi.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Przeprowadź analizę online</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Pokaż również wpisy, które zostały wykluczone z raportów</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Ta kompilacja KeePassXC nie ma funkcji sieciowych. Sieć jest wymagana do sprawdzania haseł w bazach danych Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Gratulacje, bez narażonych haseł!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Tytuł</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Ścieżka</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Hasło narażone…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Wykluczone)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Ten wpis jest wykluczony z raportów</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>raz</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>do 10 razy</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>do 100 razy</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>do 1000 razy</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>do 10 000 razy</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>do 100 000 razy</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>do miliona razy</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>miliony razy</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Edytuj wpis...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Wyklucz z raportów</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Najedź kursorem na wiersze z ikonami błędów, aby uzyskać więcej informacji.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Wartość</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Proszę czekać, statystyki bazy danych są obliczane...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nazwa bazy danych</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Opis</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Lokalizacja</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Ostatnio zapisane</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Niezapisane zmiany</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>tak</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>nie</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Baza danych została zmodyfikowana, ale zmiany nie zostały jeszcze zapisane na dysku.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Liczba grup</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Liczba wpisów</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Liczba wygasłych wpisów</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Baza danych zawiera wpisy, które wygasły.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Niepowtarzalne hasła</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Powtarzalne hasła</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Ponad 10% haseł jest ponownie wykorzystywanych. Jeśli to możliwe, używaj niepowtarzalnych haseł.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maksymalne ponowne użycie hasła</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Niektóre hasła są używane więcej niż trzy razy. Jeśli to możliwe, używaj niepowtarzalnych haseł.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Liczba krótkich haseł</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Zalecana minimalna długość hasła to co najmniej 8 znaków.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Liczba słabych haseł</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Zaleca się używanie długich, losowych haseł z oceną &apos;dobra&apos; lub &apos;znakomita&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Wpisy wykluczone z raportów</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Wykluczenie wpisów z raportów, np. ponieważ wiadomo, że mają słabe hasło, niekoniecznie jest to problem, ale należy na to uważać.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Średnia długość hasła</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 znaków</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Średnia długość hasła wynosi mniej niż dziesięć znaków. Dłuższe hasła zapewniają większe bezpieczeństwo.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6401,6 +7112,14 @@ Jądro: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Żądanie potwierdzenia nie jest obsługiwane przez agenta (sprawdź opcje).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Konflikt własności tożsamości klucza. Odmowa dodania.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Żaden agent uruchomiony, nie może wyświetlić listy tożsamości.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6508,26 +7227,10 @@ Jądro: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jeżeli kosz jest włączony dla bazy danych, wpisy zostaną przeniesione do kosza bezpośrednio. W przeciwnym razie zostaną one usunięte bez potwierdzenia.&lt;/p&gt;&lt;p&gt;Nadal będzie wyświetlany monit, jeśli jakiekolwiek wpisy są przywoływane przez inne.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Nie potwierdzaj, kiedy wpisy są usuwane przez klienty.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Odsłonięte grupy bazy danych:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nazwa pliku</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupa</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Zarządzaj</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Uwierzytelnienie</translation>
</message>
@@ -6536,40 +7239,20 @@ Jądro: %3 %4</translation>
<translation>Aplikacje te są obecnie podłączone:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplikacja</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Odłącz</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Ustawienia bazy danych</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Edytuj ustawienia bazy danych</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Odblokuj bazę danych</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Odblokuj bazę danych, aby wyświetlić więcej informacji</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Nie potwierdzaj, kiedy wpisy są usuwane przez klientów</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Zablokuj bazę danych</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Błąd:&lt;/b&gt; Nie można połączyć się z DBus. Sprawdź konfigurację DBus.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Odblokuj, aby pokazać</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Ostrzeżenie:&lt;/b&gt; </translation>
</message>
<message>
- <source>None</source>
- <translation>Żaden</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Zapisz bieżące zmiany, aby aktywować wtyczkę i włączyć edycję tej sekcji.</translation>
</message>
</context>
<context>
@@ -6842,10 +7525,6 @@ Jądro: %3 %4</translation>
<translation>Pomyślnie podpisany import</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Niespodziewany błąd</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Niepodpisany kontener udostępniania nie jest obsługiwany - import został zablokowany</translation>
</message>
@@ -7015,6 +7694,13 @@ Przykład: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Nieprawidłowy adres URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7105,6 +7791,53 @@ Przykład: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] skonfigurowane gniazdo - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] wyzwanie-odpowiedź - gniazdo %3-%4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Naciśnij</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasywny</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 określono nieprawidłowe gniazdo - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>Interfejs YubiKey nie został zainicjowany.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Klucz sprzętowy jest obecnie używany.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Nie można odnaleźć klucza sprzętowego o numerze seryjnym %1. Podłącz go, aby kontynuować.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Przekroczono limit czasu klucza sprzętowego oczekującego na interakcję z użytkownikiem.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Podczas uzyskiwania dostępu do klucza sprzętowego wystąpił błąd USB: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Nie można ukończyć wyzwania-odpowiedzi, konkretny błąd to: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7116,23 +7849,31 @@ Przykład: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Jeśli jesteś właścicielem &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, możesz go użyć do zwiększenia bezpieczeństwa.&lt;/p&gt;&lt;p&gt;YubiKey wymaga zaprogramowania jednego z jego slotów jako &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Jeśli jesteś właścicielem &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, możesz go użyć do zwiększenia bezpieczeństwa.&lt;/p&gt;&lt;p&gt;YubiKey wymaga zaprogramowania jednego z jego gniazd jako &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;Wyzwanie-odpowiedź HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nie wykryto YubiKey, upewnij się, że jest włożony.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation>Odśwież tokeny sprzętowe</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Nie włożono YubiKey.</translation>
+ <source>Hardware key slot selection</source>
+ <translation>Wybór gniazda klucza sprzętowego</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>Odśwież tokeny sprzętowe</translation>
+ <source>Could not find any hardware keys!</source>
+ <translation>Nie można znaleźć żadnych kluczy sprzętowych!</translation>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>Wybór slotu klucza sprzętowego</translation>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Wybrane gniazdo klucza sprzętowego nie obsługuje wyzwania-odpowiedzi!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Wykrywanie kluczy sprzętowych…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nie wykryto kluczy sprzętowych</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_pt.ts b/share/translations/keepassx_pt.ts
index d5b4b6b5d..b3dce7833 100644
--- a/share/translations/keepassx_pt.ts
+++ b/share/translations/keepassx_pt.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Ativar agente SSH (tem que reiniciar)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Utilizar OpeSSH for Windows em vez de Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Gestão de ficheiros</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Guardar bases de dados em segurança (pode ser incompatível com DropBox e outros serviços)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Criar backup da base de dados antes de guardar</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Guardar automaticamente ao fechar</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Não marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Recarregar base de dados se esta for modificada externamente</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Utilizar ícone do grupo ao criar a entrada</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Ocultar painel de pré-visualização de entradas</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Geral</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Ocultar barra de ferramentas (ícones)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimizar aplicação em vez de fechar</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Mostrar ícone na bandeja do sistema</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Ícone escuro na bandeja</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Ao minimizar, ocultar a janela na bandeja do sistema</translation>
</message>
@@ -203,29 +211,17 @@
<translation>Perguntar antes de executar a escrita automática</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Atalho global de escrita automática</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Atraso para a escrita automática</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Atraso para iniciar a escrita automática</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Barra de ferramentas amovível</translation>
</message>
<message>
<source>Remember previously used databases</source>
- <translation type="unfinished"/>
+ <translation>Lembrar bases de dados usadas anteriormente</translation>
</message>
<message>
<source>Load previously open databases on startup</source>
@@ -244,12 +240,8 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Button style:</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Language:</source>
- <translation type="unfinished"/>
+ <translation>Idioma:</translation>
</message>
<message>
<source>(restart program to activate)</source>
@@ -269,7 +261,7 @@
</message>
<message>
<source>Minimize</source>
- <translation type="unfinished"/>
+ <translation>Minimizar</translation>
</message>
<message>
<source>Drop to background</source>
@@ -293,27 +285,63 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Use monospaced font for Notes</source>
+ <source>Language selection</source>
+ <translation>Seleção de idioma</translation>
+ </message>
+ <message>
+ <source>Global auto-type shortcut</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Language selection</source>
+ <source>Auto-type character typing delay milliseconds</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-type start delay milliseconds</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Reset Settings to Default</source>
+ <source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
</context>
@@ -365,18 +393,6 @@
<translation>Bloquear novamente a base de dados depois de usar a escrita automática</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Não pedir repetição da palavra-passe se esta estiver visível</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Não ocultar palavras-passe durante a edição</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Não utilizar marcadores de posição para campos vazios</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Ocultar palavras-passe no painel de pré-visualização de entradas</translation>
</message>
@@ -413,16 +429,28 @@
<source>Clear search query after</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Não foi possível encontrar uma entrada coincidente com o título da janela:</translation>
+ <translation>Não foi encontrada uma entrada coincidente com o título da janela:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Escrita automática - KeePassXC</translation>
+ <translation>KeePassXC - Escrita automática</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -438,7 +466,7 @@
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>O comando de escrita automática tem uma pressão de teclas muito lento. Deseja mesmo continuar?</translation>
+ <translation>O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
@@ -513,7 +541,7 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Escrita automática - KeePassXC</translation>
+ <translation>KeePassXC - Escrita automática</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
@@ -527,33 +555,35 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC Navegador - Confirmar acesso</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Memorizar esta escolha</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Permitir</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Recusar</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 solicitou o acesso a palavras-passe para o(s) seguinte(s) iten(s).
-Selecione se deseja permitir o acesso.</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
+ <source>Allow Selected</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disable for this site</source>
<translation type="unfinished"/>
</message>
</context>
@@ -579,190 +609,231 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Diálogo</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Pedido de associação da nova chave</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Isto é necessário para aceder às suas bases de dados com KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Guardar e permitir acesso</translation>
</message>
<message>
- <source>General</source>
- <translation>Geral</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Substituir chave existente?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Ativar integração para estes navegadores:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Já existe uma chave de cifra partilhada com o nome &quot;%1&quot;.
+Deseja substituir a chave existente?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Atualizar entrada</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Deseja atualizar as informações em %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Abortar</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>A converter atributos para dados personalizados...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Mostrar &amp;notificação se as credenciais forem solicitadas</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Atributos KeePassHTTP convertidos</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Pe&amp;dir para desbloquear a base de dados se esta estiver bloqueada</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Os atributos para %1 entrada(s) foram convertidos.
+%2 chaves movidas para dados personalizados.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n chave movida para dados personalizados.</numerusform><numerusform>%n chaves movidas para dados personalizados.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ...).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Não existem entradas com atributos KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Corresponder com os esque&amp;mas do URL (https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>A base de dados ativa não tem entradas com atributos KePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Apenas devolve as melhores entradas para o URL específico em vez das entradas para o domínio.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Detetadas definições de integração legada com o navegador</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Devolve&amp;r apenas as credenciais mais parecidas</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: criar um novo grupo</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar &amp;entradas por título</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Foi recebido um pedido para a criação do grupo &quot;%1&quot;.
+Quer criar este grupo?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar credenciais coincidentes por nome de &amp;utilizador</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Tem que mover as suas definições do KeePassXC-Browser para as definições da base de dados.
+Este procedimento é necessário para manter as ligações existentes.
+Quer migrar as definições agora?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avançado</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Não mostrar novamente</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nunc&amp;a perguntar antes de aceder às credenciais</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nun&amp;ca perguntar antes de atualizar as credenciais</translation>
+ <source>Dialog</source>
+ <translation>Diálogo</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Pesquisar por credenciais semel&amp;hantes em todas as base de dados abertas</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Isto é necessário para aceder às suas bases de dados com KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>A criação ou atualização dos campos de cadeias não é suportada.</translation>
+ <source>Enable browser integration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Most&amp;rar campos avançados que começem com &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Geral</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Atualiza automaticamente o caminho do KeePassXC ou do caminho do binário keepassxc-proxy para os &apos;sripts&apos; nativos de mensagens ao iniciar.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Atualizar ficheiros de mensagens &amp;nativas ao iniciar</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Ativar integração para estes navegadores:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Suporte à utilização de uma aplicação proxy entre o KeePassXC a a extensão do navegador.</translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Utilizar uma aplicação de &amp;proxy entre o KeePassXC e a extensão do navegador</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Utilize um proxy personalizado caso o tenha instalado manualmente.</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Utilizar pro&amp;xy personalizado</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Procurar...</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;AVISO&lt;/b&gt;: as opções seguintes podem ser perigosas!</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Selecionar localização do proxy personalizado</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Navegador &amp;Tor</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Ficheiros executáveis</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>Todos os ficheiros</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ...).</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Não pedir permissão para autorização &amp;básica HTTP</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Devido a &apos;Snap sandboxing&apos;, tem que executar um script para ativar a integração com o navegador.&lt;br /&gt;Pode obter este script em %1.</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Apenas devolve as melhores entradas para o URL específico em vez das entradas para o domínio.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Por favor consulte as instruções para a utilização da extensão abaixo</translation>
+ <source>Return only best-matching credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Necessita do KeePassXC-Browser para que a integração funcione corretamente.&lt;br /&gt;Pode descarregar para %1 e para %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>All databases connected to the extension will return matching credentials.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Advanced</source>
+ <translation>Avançado</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>A criação ou atualização dos campos de cadeias não é suportada.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
@@ -770,114 +841,109 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Atualiza automaticamente o caminho do KeePassXC ou do caminho do binário keepassxc-proxy para os &apos;sripts&apos; nativos de mensagens ao iniciar.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Utilize um proxy personalizado caso o tenha instalado manualmente.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Custom proxy location field</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Pedido de associação de nova chave</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Guardar e permitir acesso</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Procurar...</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Substituir chave existente?</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Já existe uma chave de cifra partilhada com o nome &quot;%1&quot;.
-Deseja substituir a chave existente?</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Atualizar entrada</translation>
+ <source>Toolbar button style</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Deseja atualizar as informações em %1 - %2?</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Abortar</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>A converter atributos para dados personalizados...</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Atributos KeePassHTTP convertidos</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Os atributos para %1 entrada(s) foram convertidos.
-%2 chaves movidas para dados personalizados.</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n chave movida para dados personalizados.</numerusform><numerusform>%n chaves movidas para dados personalizados.</numerusform></translation>
+ <message>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Não existem entradas com atributos KeePassHTTP!</translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Devido a &apos;Snap sandboxing&apos;, tem que executar um script para ativar a integração com o navegador.&lt;br /&gt;Pode obter este script em %1.</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>A base de dados ativa não tem entradas com atributos KePassHTTP.</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Detetadas definições de integração legada com o navegador</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Por favor consulte as instruções para a utilização da extensão abaixo</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: criar um novo grupo</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Foi recebido um pedido para a criação do grupo &quot;%1&quot;.
-Quer criar este grupo?
-</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;AVISO&lt;/b&gt;: as opções seguintes podem ser perigosas!</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Tem que mover as suas definições do KeePassXC-Browser para as definições da base de dados.
-Este procedimento é necessário para manter as ligações existentes.
-Quer migrar as definições agora?</translation>
+ <source>Executable Files</source>
+ <translation>Ficheiros executáveis</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Não mostrar novamente</translation>
+ <source>All Files</source>
+ <translation>Todos os ficheiros</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Select custom proxy location</source>
+ <translation>Selecionar localização do proxy personalizado</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -935,10 +1001,6 @@ chrome-laptop.</source>
<translation>Comentários iniciados por</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Primeiro registo tem nome dos campos</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Considerar &apos;\&apos; como carácter de escape</translation>
</message>
@@ -947,14 +1009,6 @@ chrome-laptop.</source>
<translation>Antevisão</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Disposição das colunas</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Não existente no ficheiro CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importar de ficheiro CSV</translation>
</message>
@@ -967,14 +1021,6 @@ chrome-laptop.</source>
<translation>Erro</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nome de campo vazio %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>coluna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Detetado(s) erro(s) no ficheiro CSV!</translation>
</message>
@@ -1004,12 +1050,64 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Última modificação</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Palavra-passe</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Criada</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notas</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nome de utilizador</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n coluna</numerusform><numerusform>%n colunas</numerusform></translation>
+ <translation><numerusform>%n coluna,</numerusform><numerusform>%n coluna(s),</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1028,11 +1126,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Raiz</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>%1 não existe.</translation>
</message>
@@ -1073,6 +1166,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Reciclagem</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Palavras-passe</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1093,7 +1199,7 @@ Backup database located at %2</source>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Formato legado de ficheiro-chave</translation>
+ <translation>Ficheiro-chave no formato legado</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
@@ -1103,7 +1209,7 @@ Please consider generating a new key file.</source>
<translation>Está a utilizar um formato legado que pode, no futuro, deixar
de ser suportado.
-Deve considerar a geração de uma novo ficheiro-chave.</translation>
+Deve considerar a geração de um novo ficheiro-chave.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1126,10 +1232,6 @@ Deve considerar a geração de uma novo ficheiro-chave.</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation type="unfinished"/>
</message>
@@ -1142,14 +1244,6 @@ Deve considerar a geração de uma novo ficheiro-chave.</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
@@ -1210,28 +1304,44 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <source>Key file help</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Key file help</source>
+ <source>?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>?</source>
+ <source>Cannot use database file as key file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select key file...</source>
+ <source>You cannot use your database file as a key file.
+If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Cannot use database file as key file</source>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You cannot use your database file as a key file.
-If you do not have a key file, please leave the field empty.</source>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Toque no botão da sua YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1257,10 +1367,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Segurança</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Chave-mestre</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Definições de cifra</translation>
</message>
@@ -1268,6 +1374,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Integração com navegador</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1276,18 +1386,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Definições KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Desconectar de todos os navegadores</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>&amp;Esquecer definições específicas dos sites (nas entradas)</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Mover atributos KeePassHTTP para dados personalizados KeePassX&amp;C-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Chaves guardadas</translation>
</message>
@@ -1341,7 +1439,7 @@ Esta ação pode interferir com a ligação ao suplemento.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>%n chave de cifra removida das configurações do KeePassXC.</numerusform><numerusform>%n chaves de cifra removidas das configurações do KeePassXC.</numerusform></translation>
+ <translation><numerusform>Removida com sucesso %n chave de cifra das definições do KeePassXC.</numerusform><numerusform>Removidas com sucesso %n chaves de cifra das definições do KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1395,6 +1493,66 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
<source>Remove selected key</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Criada</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Adicionar proteção extra...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Palavra-passe não definida</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida!
+
+Tem a certeza de que deseja continuar?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Chave de cifra não adicionada</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro desconhecido</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1419,10 +1577,6 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
<translation>Ciclos de transformação:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Testar atraso de 1 segundo</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Utilização de memória:</translation>
</message>
@@ -1443,14 +1597,6 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
<translation>Alterar</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Os valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados.</translation>
</message>
@@ -1515,7 +1661,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>Falha ao transformar a chave com os novos parâmetros KDF; KDF inalterado.</translation>
+ <translation>Erro ao transformar a chave com os novos parâmetros KDF; KDF inalterado.</translation>
</message>
<message numerus="yes">
<source> MiB</source>
@@ -1527,16 +1673,6 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>processo</numerusform><numerusform>processos</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation type="unfinished"/>
@@ -1569,6 +1705,14 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<source>Parallelism</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1577,15 +1721,15 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1629,11 +1773,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
</message>
<message>
<source>Additional Database Settings</source>
- <translation>Definições extra da base de dados</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Ativar compr&amp;essão (recomendado)</translation>
+ <translation>Definições extra para a base de dados</translation>
</message>
<message>
<source>Database name field</source>
@@ -1668,6 +1808,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1702,45 +1846,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Adicionar proteção extra...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Chave de cifra não adicionada</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Palavra-passe não definida</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida!
-
-Tem a certeza de que deseja continuar?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Erro desconhecido</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Erro ao alterar a chave-mestre</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1760,125 +1865,6 @@ Tem a certeza de que deseja continuar?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valor</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1914,7 +1900,7 @@ Tem a certeza de que deseja continuar?</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>Falha ao escrever no ficheiro CSV.</translation>
+ <translation>Erro ao escrever no ficheiro CSV.</translation>
</message>
<message>
<source>Database creation error</source>
@@ -1973,12 +1959,16 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>Pesquisar...</translation>
+ <translation>Pesquisar..</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
@@ -1986,11 +1976,11 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Deseja mesmo mover a entrada &quot;%1&quot; para a reciclagem?</translation>
+ <translation>Tem a certeza de que deseja mover a entrada &quot;%1&quot; para a reciclagem?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Quer mesmo mover %n entrada para a reciclagem?</numerusform><numerusform>Quer mesmo mover %n entradas para a reciclagem?</numerusform></translation>
+ <translation><numerusform>Tem a certeza de que deseja mover %n entrada para a reciclagem?</numerusform><numerusform>Tem a certeza de que deseja mover %n entradas para a reciclagem?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -1998,7 +1988,7 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Deseja mesmo executar o seguinte comando?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>Tem a certeza de que deseja executar este comando?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
@@ -2034,13 +2024,13 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
</message>
<message>
<source>Merge Request</source>
- <translation>Pedido de união</translation>
+ <translation>Pedido de combinação</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>A base de dados foi alterada e tem alterações não gravadas.
-Deseja juntar as suas alterações?</translation>
+ <translation>A base de dados foi alterada e tem alterações não guardadas.
+Deseja combinar as suas alterações?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2052,15 +2042,15 @@ Deseja juntar as suas alterações?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Tem a certeza de que quer eliminar %n entrada?</numerusform><numerusform>Tem a certeza de que quer eliminar %n entradas?</numerusform></translation>
+ <translation><numerusform>Tem a certeza de que deseja eliminar %n entrada?</numerusform><numerusform>Tem a certeza de que deseja eliminar %n entradas?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Eliminar a entrada?</numerusform><numerusform>Eliminar as entradas?</numerusform></translation>
+ <translation><numerusform>Eliminar entrada?</numerusform><numerusform>Eliminar entradas?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Mover a entrada para a reciclagem?</numerusform><numerusform>Mover as entradas para a reciclagem?</numerusform></translation>
+ <translation><numerusform>Mover entrada para a reciclagem?</numerusform><numerusform>Mover entradas para a reciclagem?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2099,7 +2089,7 @@ Erro: %1</translation>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não permitira a gravação.
+ <translation>O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram.
Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
@@ -2120,7 +2110,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>A entrada &quot;%1&quot; tem %2 referência. Quer substituir as referência com valores, ignorar a entrada ou eliminar?</numerusform><numerusform>A entrada &quot;%1&quot; tem %2 referências. Quer substituir as referências com valores, ignorar a entrada ou eliminar?</numerusform></translation>
+ <translation><numerusform>A entrada &quot;%1&quot; tem %2 referência. Deseja substituir as referências com valores, ignorar a entrada ou eliminar?</numerusform><numerusform>A entrada &quot;%1&quot; tem %2 referências. Deseja substituir as referências com valores, ignorar a entrada ou eliminar?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2154,6 +2144,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2198,14 +2196,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Selecionar chave privada</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Ficheiro muito grande para ser uma chave privada</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Falha ao abrir a chave privada</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Histórico da entrada</translation>
</message>
@@ -2218,10 +2208,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Editar entrada</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>As palavras-passe não são iguais.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Novo atributo</translation>
</message>
@@ -2242,29 +2228,13 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation><numerusform>%n mês</numerusform><numerusform>%n meses</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Aplicar palavra-passe gerada?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Deseja aplicar a palavra-passe gerada para esta entrada?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Entrada atualizada com sucesso.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>A entrada tem alterações por guardar</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Novo atributo %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTEGIDA] Por favor revele para ver ou editar</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n ano</numerusform><numerusform>%n anos</numerusform></translation>
@@ -2285,6 +2255,26 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Revelar</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2310,7 +2300,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Reveal</source>
- <translation>Revelar</translation>
+ <translation>Mostrar</translation>
</message>
<message>
<source>Attachments</source>
@@ -2360,6 +2350,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2368,14 +2366,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Ativar escrita automática para esta entrada</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Herdar sequência de escrita automática deste &amp;grupo</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Usar sequência personalizada de escrita automática:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Associação de janelas</translation>
</message>
@@ -2431,6 +2421,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2466,6 +2464,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Edit</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2517,18 +2523,10 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Palavra-passe:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repetição:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Título:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Predefinições</translation>
</message>
@@ -2541,10 +2539,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Nome de utilizador:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expira</translation>
- </message>
- <message>
<source>Url field</source>
<translation type="unfinished"/>
</message>
@@ -2553,22 +2547,10 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2600,6 +2582,18 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2725,7 +2719,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Inherit from parent group (%1)</source>
- <translation>Herdar a partir do grupo (%1)</translation>
+ <translation>Herdar do grupo (%1)</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
@@ -2735,10 +2729,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulário</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipo:</translation>
</message>
@@ -2747,10 +2737,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Caminho:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Palavra-passe:</translation>
</message>
@@ -2833,96 +2819,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>Procurar...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nome</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>Notas</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expires</source>
- <translation>Expira</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Pesquisa</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Escrita automática</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Herdar sequência de escrita a&amp;utomática do grupo relacionado</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Definir se&amp;quência padrão para escrita automática</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
+ <source>Notes:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Utilizar ícone padrão</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Utilizar íco&amp;ne personalizado</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Adicionar ícone personalizado</translation>
</message>
@@ -2956,7 +2930,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>%1 de %n ícone carregados com sucesso.</numerusform><numerusform>%1 de %n ícones carregados com sucesso.</numerusform></translation>
+ <translation><numerusform>%1 de %n ícones carregado com sucesso.</numerusform><numerusform>%1 de %n ícones carregados com sucesso.</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2968,11 +2942,11 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>Erro no seguinte ícone:</numerusform><numerusform>Erro nos seguintes ícones:</numerusform></translation>
+ <translation><numerusform>O ícone seguinte falhou:</numerusform><numerusform>Os ícones seguintes falharam:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Este ícone é utilizado por % entrada e será substituído pelo ícone padrão. Tem a certeza de que quer eliminar o ícone?</numerusform><numerusform>Este ícone é utilizado por % entradas e será substituído pelo ícone padrão. Tem a certeza de que quer eliminar o ícone?</numerusform></translation>
+ <translation><numerusform>Este ícone é utilizado por % entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone?</numerusform><numerusform>Este ícone é utilizado por % entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2987,27 +2961,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3031,7 +3013,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Plugin Data</source>
- <translation>Dados do plugin</translation>
+ <translation>Dados do suplemento</translation>
</message>
<message>
<source>Remove</source>
@@ -3126,7 +3108,7 @@ Esta ação pode implicar um funcionamento errático.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Tem a certeza de que quer remover %n anexo?</numerusform><numerusform>Tem a certeza de que quer remover %n anexos?</numerusform></translation>
+ <translation><numerusform>Tem a certeza de que deseja remover %n anexo?</numerusform><numerusform>Tem a certeza de que deseja remover %n anexos?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3195,6 +3177,17 @@ Esta ação pode implicar um funcionamento errático.</translation>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3278,12 +3271,52 @@ Esta ação pode implicar um funcionamento errático.</translation>
<translation>Anexos</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Sim</translation>
+ <source>Size</source>
+ <translation>Tamanho</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3383,6 +3416,13 @@ Esta ação pode implicar um funcionamento errático.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3409,8 +3449,14 @@ Esta ação pode implicar um funcionamento errático.</translation>
<translation>Repor predefinições</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Anexos (ícone)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3422,20 +3468,73 @@ Esta ação pode implicar um funcionamento errático.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nada</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Desconhecido</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Desconhecido</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3448,14 +3547,10 @@ Esta ação pode implicar um funcionamento errático.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Ficheiro não guardado!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Não foi possível guardar o ficheiro de mensagens nativas.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3524,14 +3619,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Não foi possível emitir a pergunta de segurança.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>cabeçalhos em falta</translation>
</message>
@@ -3549,23 +3636,31 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Invalid header data length</source>
- <translation>Comprimento de dados cabeçalho inválido</translation>
+ <translation>Comprimento dos dados de cabeçalho inválido</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Não foi possível emitir a pergunta de segurança.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3575,10 +3670,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>cabeçalhos em falta</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Tamanho inválido para o &apos;checksum&apos; do cabeçalho</translation>
</message>
@@ -3600,11 +3691,11 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Comprimento de dados cabeçalho inválido</translation>
+ <translation>Comprimento dos dados de cabeçalho inválido</translation>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>Falha ao processar os parâmetros KDF no cabeçalho</translation>
+ <translation>Erro ao processar os parâmetros KDF no cabeçalho</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
@@ -3634,22 +3725,22 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do nome da entrada da variante do mapa</translation>
+ <translation>Comprimento inválido no nome da entrada da variante do mapa</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Dados inválidos do nome da entrada da variante do mapa</translation>
+ <translation>Dados inválidos no nome da entrada da variante do mapa</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do valor de entrada do mapa</translation>
+ <translation>Comprimento inválido no valor de entrada do mapa</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Dados inválidos do valor da entrada da variante do mapa</translation>
+ <translation>Dados inválidos no valor da entrada da variante do mapa</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
@@ -3695,6 +3786,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3705,16 +3800,16 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Algoritmo inválido de cifra simétrica IV.</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
+ <translation>Tamanho inválido da cifra simétrica IV.</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Falhou a serialização dos parâmetros da KDF (função de derivação de chave) da variante do mapa</translation>
+ <translation>Erro ao serializar os parâmetros KDF da variante do mapa</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3749,7 +3844,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid random stream id size</source>
- <translation>Tamanho inválido do ID do stream aleatório</translation>
+ <translation>Tamanho inválido do ID do fluxo aleatório</translation>
</message>
<message>
<source>Invalid inner random stream cipher</source>
@@ -3790,7 +3885,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
<name>KdbxXmlReader</name>
<message>
<source>XML parsing failure: %1</source>
- <translation>Falha no processamento XML: %1</translation>
+ <translation>Erro ao processar o XML: %1</translation>
</message>
<message>
<source>No root group</source>
@@ -3830,11 +3925,11 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
</message>
<message>
<source>Null DeleteObject uuid</source>
- <translation>UUID de DeleteObject nulo</translation>
+ <translation>UUID nulo em DeleteObject</translation>
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
- <translation>Tempo ou UUID de DeletedObject em falta</translation>
+ <translation>Tempo ou UUID em falta para DeletedObject</translation>
</message>
<message>
<source>Null entry uuid</source>
@@ -3842,7 +3937,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Número inválido da entrada de ícone</translation>
+ <translation>Número inválido na entrada de ícone</translation>
</message>
<message>
<source>History element in history entry</source>
@@ -3850,7 +3945,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
</message>
<message>
<source>No entry uuid found</source>
- <translation>Não foi encontrada uma entrada UUID</translation>
+ <translation>Não foi encontrado o UUID da entrada</translation>
</message>
<message>
<source>History element with different uuid</source>
@@ -3865,10 +3960,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
<translation>Chave &apos;string&apos; ou valor em falta</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Encontrado anexo em duplicado</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Chave binária ou valor em falta</translation>
</message>
@@ -3915,6 +4006,29 @@ Linha %2, coluna %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Ficheiro muito grande para ser uma chave privada</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Falha ao abrir a chave privada</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3977,12 +4091,8 @@ Linha %2, coluna %3</translation>
<translation>Raiz</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
<source>Key transformation failed</source>
- <translation>Falha ao transformar a chave</translation>
+ <translation>Erro ao transformar a chave</translation>
</message>
<message>
<source>Invalid group field type number</source>
@@ -4081,6 +4191,10 @@ Linha %2, coluna %3</translation>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4187,16 +4301,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Formato legado de ficheiro-chave</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Está a utilizar um formato legado que pode, no futuro, deixar
-de ser suportado.
-
-Aceda às definições da chave-mestre para gerar um novo ficheiro-chave.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Erro ao carregar o ficheiro-chave %1
@@ -4263,6 +4367,13 @@ Mensagem: %2</translation>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4271,18 +4382,10 @@ Are you sure you want to continue with this file?</source>
<translation>Base &amp;de dados</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>Bases de dados &amp;recentes</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>Aj&amp;uda</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntradas</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupos</translation>
</message>
@@ -4299,46 +4402,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Acerca</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Abrir base de dad&amp;os...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Guardar base de dado&amp;s</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Fe&amp;char base de dados</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Eliminar &amp;entrada</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Editar grupo</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Eliminar &amp;grupo</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>G&amp;uardar base de dados como...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Definições da base de dados</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clonar entrada</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copiar nome de &amp;utilizador</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copiar nome de utilizador para a área de transferência</translation>
</message>
@@ -4351,10 +4418,6 @@ Are you sure you want to continue with this file?</source>
<translation>Definiçõe&amp;s</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>B&amp;loquear base de dados</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Título</translation>
</message>
@@ -4379,14 +4442,6 @@ Are you sure you want to continue with this file?</source>
<translation>Copiar notas para a área de transferência</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportar para ficheiro CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configurar TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copiar &amp;TOTP</translation>
</message>
@@ -4422,7 +4477,7 @@ Are you sure you want to continue with this file?</source>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>AVISO: está a utilizar uma versão instável do KeepassXC!
+ <translation>AVISO: está a utilizar uma versão instável do KeePassXC!
Existe um risco bastante grande e deve efetuar um backup da base de dados.
Esta versão não deve ser utilizada para uma utilização regular.</translation>
</message>
@@ -4431,10 +4486,6 @@ Esta versão não deve ser utilizada para uma utilização regular.</translation
<translation>&amp;Donativos</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Reportar um &amp;erro</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)!
@@ -4445,66 +4496,26 @@ Recomendamos que utilize a versão AppImage disponível no nosso site.</translat
<translation>&amp;Importar</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copiar at&amp;ributo...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Nova base de dados...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Criar uma nova base de dados</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>Co&amp;mbinar bases de dados...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Combinar com outra base de dados KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nova entrada</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Adicionar uma nova entrada</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Editar entrada</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Ver ou editar entrada</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Novo grupo</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Adicionar um novo grupo</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Alterar chave-&amp;mestre...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Definições da base de dados...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copiar &amp;palavra-passe</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Execut&amp;ar escrita automática</translation>
</message>
@@ -4513,30 +4524,14 @@ Recomendamos que utilize a versão AppImage disponível no nosso site.</translat
<translation>Abrir &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Base de dados do KeePass 1...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importar base de dados do KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Ficheiro CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importar ficheiro CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Mostrar TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Mostrar código QR TOTP...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOTA: está a utilizar uma versão de teste do KeePassXC!
@@ -4559,67 +4554,301 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Check for Updates...</source>
+ <source>Sort &amp;A-Z</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
+ <source>Sort &amp;Z-A</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;Password Generator</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>Import a 1Password Vault</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>&amp;Getting Started</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>Descarregar &apos;favicon&apos;</translation>
+ <source>&amp;User Guide</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>&amp;Keyboard Shortcuts</source>
<translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;Recent Databases</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>&amp;Entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>Copy Att&amp;ribute</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Theme</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>&amp;Check for Updates</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>&amp;Open Database…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>&amp;Save Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Mostrar TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Definições da base de dados</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Desbloquear base de dados</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Bloquear base de dados</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4709,10 +4938,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Assistente</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Definições de &amp;cifra</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
</message>
@@ -4724,27 +4949,31 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Simple Settings</source>
<translation>Definições básicas</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Definições de cifra</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Chave-mestre da base de dados</translation>
+ <source>Encryption Settings</source>
+ <translation>Definições de cifra</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Uma chave-mestre apenas sua e que protege a base de dados.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
</message>
</context>
<context>
@@ -4759,6 +4988,13 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4836,7 +5072,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Base64 decoding failed</source>
- <translation>Falha na descodificação Base64</translation>
+ <translation>Erro de descodificação Base64</translation>
</message>
<message>
<source>Key file way too small.</source>
@@ -4852,7 +5088,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Failed to read public key.</source>
- <translation>Falha ao ler a chave pública.</translation>
+ <translation>Erro ao ler a chave pública.</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
@@ -4872,11 +5108,11 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>Falha na derivação da chave, ficheiro-chave danificado?</translation>
+ <translation>Erro na derivação da chave, ficheiro-chave danificado?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Falha ao decifrar, frase-chave errada?</translation>
+ <translation>Erro ao decifrar, frase-chave errada?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
@@ -4933,6 +5169,18 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4957,25 +5205,13 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Disparidade nas palavras-passe.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Gerar palavra-passe principal</translation>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4984,10 +5220,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Palavra-passe:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>qualidade</translation>
@@ -5037,14 +5269,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Separador de palavras:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copiar</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Aceitar</translation>
- </message>
- <message>
<source>Close</source>
<translation>Fechar</translation>
</message>
@@ -5141,14 +5365,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Trocar para o modo básico</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Básico</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres a excluir da palavra-passe gerada</translation>
</message>
@@ -5169,14 +5385,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Caracteres excluídos: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Número de palavras:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Recriar</translation>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5225,10 +5433,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation type="unfinished"/>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5241,7 +5445,43 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Número de palavras:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5255,6 +5495,58 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Statistics</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5319,7 +5611,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>Falha ao associar o KeePassXC. Tente novamente.</translation>
+ <translation>Erro ao associar o KeePassXC. Tente novamente.</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5394,10 +5686,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Caminho da entrada a adicionar.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copiar palavra-passe da entrada para a área de transferência.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Caminho da entrada a copiar.</translation>
@@ -5472,7 +5760,7 @@ Comandos disponíveis:
</message>
<message>
<source>Search term.</source>
- <translation>Termo de pesquisa</translation>
+ <translation>Termo de pesquisa.</translation>
</message>
<message>
<source>Merge two databases.</source>
@@ -5555,14 +5843,6 @@ Comandos disponíveis:
<translation>Integração com navegador</translation>
</message>
<message>
- <source>Press</source>
- <translation>Prima</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiva</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agente SSH</translation>
</message>
@@ -5601,10 +5881,6 @@ Comandos disponíveis:
<translation>Entrada %1 adicionada com sucesso</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copiar TOTP atual para a área de transferência</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Valor limite inválido %1</translation>
</message>
@@ -5616,14 +5892,6 @@ Comandos disponíveis:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>A entrada com o caminho %1 não tem uma TOTP configurada.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP da entrada atual copiada para a área de transferência!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Palavra-passe da entrada atual copiada para a área de transferência!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>A área de transferência será limpa dentro de %1 segundo...</numerusform><numerusform>A área de transferência será limpa dentro de %1 segundos...</numerusform></translation>
@@ -5844,10 +6112,6 @@ Comandos disponíveis:
<translation>Não definiu um programa para manipulação da área de transferência</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Não foi possível iniciar %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>ficheiro vazio</translation>
</message>
@@ -5856,18 +6120,6 @@ Comandos disponíveis:
<translation>%1: (linha, coluna) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recomendado)</translation>
</message>
@@ -6118,10 +6370,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6138,10 +6386,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6182,10 +6426,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6278,10 +6518,6 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6297,10 +6533,6 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6313,6 +6545,193 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6349,10 +6768,294 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Má</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Fraca</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Caminho</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Caminho</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>no</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
- <translation>Falha ao conectar com o agente.</translation>
+ <translation>Erro ao conectar com o agente.</translation>
</message>
<message>
<source>Agent protocol error.</source>
@@ -6382,6 +7085,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>O agente não tem suporte a pedidos de confirmação (consulte as opções).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6489,26 +7200,10 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupo</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
<translation type="unfinished"/>
</message>
@@ -6517,41 +7212,21 @@ Kernel: %3 %4</translation>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Disconnect</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Definições da base de dados</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>Desbloquear base de dados</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Lock database</source>
- <translation>Bloquear base de dados</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation>Nada</translation>
- </message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
@@ -6823,10 +7498,6 @@ Kernel: %3 %4</translation>
<translation>Importação assinada bem sucedida</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Erro inesperado</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>O contentor de partilha não assinado não é suportado - importação evitada</translation>
</message>
@@ -6933,7 +7604,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Use custom settings</source>
- <translation>Usar definições personalizadas</translation>
+ <translation>Utilizar definições personalizadas</translation>
</message>
<message>
<source>Custom Settings</source>
@@ -6995,6 +7666,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7085,6 +7763,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Prima</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiva</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7099,19 +7824,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Se você tiver uma &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, pode utiliza-la para obter mais segurança.&lt;/p&gt;&lt;p&gt;A YubiKey requer que uma das suas ranhuras seja programada como uma &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Yubikey não detetada. verifique se está inserida corretamente.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Youbikey não inserida.</translation>
+ <source>Hardware key slot selection</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/share/translations/keepassx_pt_BR.ts b/share/translations/keepassx_pt_BR.ts
index 0c53862fa..c0a69f453 100644
--- a/share/translations/keepassx_pt_BR.ts
+++ b/share/translations/keepassx_pt_BR.ts
@@ -3,7 +3,7 @@
<name>AboutDialog</name>
<message>
<source>About KeePassXC</source>
- <translation>Sobre KeePassXC</translation>
+ <translation>Sobre o KeePassXC</translation>
</message>
<message>
<source>About</source>
@@ -15,7 +15,7 @@
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC é distribuído nos termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU.</translation>
+ <translation>KeePassXC é distribuído sob os termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU.</translation>
</message>
<message>
<source>Contributors</source>
@@ -23,11 +23,11 @@
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Ver colaborações no GitHub&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Ver Colaborações no GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
- <translation>Informações de depuração</translation>
+ <translation>Informações de Depuração</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
@@ -39,23 +39,43 @@
</message>
<message>
<source>Project Maintainers:</source>
- <translation>Mantedores do projeto:</translation>
+ <translation>Mantenedores do Projeto:</translation>
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>A equipe do KeePassXC agradece especialmente a debfx pela criação do KeePassX original.</translation>
+ <translation>A equipe KeePassXC agradece especialmente à debfx pela criação do KeePassX original.</translation>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Habilitar agente SSH (requer reinicialização)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Usar o OpenSSH para Windows em vez de Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Habilitar integração com agente SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Valor de SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>Sobrescrever SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(vazio)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Nenhum socket de agente SSH disponível. Verifique se uma variável de ambiente SSH_AUTH_SOCK existe ou configure um substituto.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>A conexão com o agente SSH está funcionando corretamente!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -77,11 +97,11 @@
</message>
<message>
<source>Icon only</source>
- <translation>Só ícones</translation>
+ <translation>Apenas ícones</translation>
</message>
<message>
<source>Text only</source>
- <translation>Só textos</translation>
+ <translation>Apenas texto</translation>
</message>
<message>
<source>Text beside icon</source>
@@ -101,7 +121,19 @@
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
- <translation>Você tem certeza que quer restaurar todas as configurações gerais e de segurança para o padrão?</translation>
+ <translation>Você tem certeza que deseja restaurar todas as configurações gerais e de segurança para o padrão?</translation>
+ </message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monocromático (claro)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monocromático (escuro)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Colorido</translation>
</message>
</context>
<context>
@@ -116,7 +148,7 @@
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>Iniciar apenas uma única instância do KeePassXC</translation>
+ <translation>Iniciar apenas uma instância do KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
@@ -124,11 +156,7 @@
</message>
<message>
<source>File Management</source>
- <translation>Gerenciamento de arquivo</translation>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Salvar os arquivos de banco de dados com segurança (pode ser incompatível com o Dropbox, etc)</translation>
+ <translation>Gerenciamento de Arquivo</translation>
</message>
<message>
<source>Backup database file before saving</source>
@@ -143,10 +171,6 @@
<translation>Salvar automaticamente ao sair</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Não marcar o banco de dados como modificado para alterações sem dados (por exemplo, expansão de grupos)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Automaticamente recarregar o banco de dados quando houver modificações externas</translation>
</message>
@@ -156,19 +180,7 @@
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>Usar ícone do grupo na criação da entrada</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>Ocultar entrada do painel de visualização</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Geral</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Ocultar barra de ferramentas (ícones)</translation>
+ <translation>Usar ícone de grupo na criação da entrada</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
@@ -176,19 +188,15 @@
</message>
<message>
<source>Show a system tray icon</source>
- <translation>Mostrar um ícone de bandeja do sistema</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation>Ícone de bandeja para sistema em modo escuro (dark mode)</translation>
+ <translation>Mostrar um ícone na bandeja do sistema</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
- <translation>Ocultar janela para bandeja de sistema quando minimizada</translation>
+ <translation>Ocultar janela na bandeja de sistema quando minimizada</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Auto-Digitar</translation>
+ <translation>Autodigitação</translation>
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
@@ -203,25 +211,13 @@
<translation>Sempre perguntar antes de executar o Auto-Digitar</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Atalho para Auto-Digitar global</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Atraso na digitação do Auto-Digitar</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Atraso ao iniciar Auto-Digitar</translation>
- </message>
- <message>
<source>Movable toolbar</source>
- <translation>Barra de ferramentas móvel</translation>
+ <translation>Barra de Ferramentas Móvel</translation>
</message>
<message>
<source>Remember previously used databases</source>
@@ -244,10 +240,6 @@
<translation>Incluir versões betas durante a verificação de atualizações</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Estilo de botão:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Idioma:</translation>
</message>
@@ -257,7 +249,7 @@
</message>
<message>
<source>Minimize window after unlocking database</source>
- <translation>Minimizar a janela após destrancar banco de dados</translation>
+ <translation>Minimizar a janela após destravar banco de dados</translation>
</message>
<message>
<source>Minimize when opening a URL</source>
@@ -293,18 +285,10 @@
<translation>Estilo de botão da barra de ferramentas</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Usar fonte monoespaçada para Notas</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Seleção de idioma</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Restaurar configurações para o padrão</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Atalho para Auto-Digitar global</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Auto-Digitar inicia com atraso de milissegundos</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Iniciar KeePassXC automaticamente com a inicialização do sistema</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Marcar banco de dados como modificado para mudanças não relacionadas a dados (por exemplo, expansão de grupos)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Salvar os arquivos de banco de dados com segurança (desative se tiver problemas com o Dropbox, etc)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Interface do Usuário</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Estilo de botão da barra de ferramentas:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Usar fonte monoespaçada para notas</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Tipo de ícone da área de notificação:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Reverter às configurações originais...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Atraso para digitação automática:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Atalho para Auto-Digitação global:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Atraso para início de digitação automática:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -334,7 +362,7 @@
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>Trancar bancos de dados após inatividade de</translation>
+ <translation>Travar bancos de dados após inatividade de</translation>
</message>
<message>
<source> min</source>
@@ -350,35 +378,23 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>Trancar banco de dados quando a sessão for bloqueada ou a tela for fechada</translation>
+ <translation>Bloqueio de bancos de dados quando a sessão estiver bloqueada ou a tampa está fechada</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Esquecer TouchID quando a sessão for bloqueada ou a tela for fechada</translation>
+ <translation>Esqueça o TouchID quando a sessão está bloqueada ou a tampa está fechada</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>Trancar bancos de dados após minimizar a janela</translation>
+ <translation>Bloquear bancos de dados após minimizar a janela</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Trancar novamente o banco de dados anteriormente trancado depois de executar o Auto-Digitar</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Quando a senha for visível não pedir para repeti-la</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Não ocultar senhas enquanto as estiver editando</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Não use preenchimento para campos de senha vazios</translation>
+ <translation>Bloquear novamente o banco de dados anteriormente bloqueado depois de executar o Auto-Digitar</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Ocultar senhas no painel de prévia de entrada</translation>
+ <translation>Ocultar senhas no painel da prévia de entrada</translation>
</message>
<message>
<source>Hide entry notes by default</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Limpar pesquisa depois de</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Requisitar repetição da senha quando visível</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Ocultar senhas ao editá-las</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Utilizar espaço reservado para campos de senha vazios</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -422,27 +450,27 @@
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Auto-Digitar - KeePassXC</translation>
+ <translation>Auto-Digitação - KeePassXC</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Auto-Digitar</translation>
+ <translation>Auto-Digitação</translation>
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>A sintaxe da sua sequência do Auto-Digitar está incorreta!</translation>
+ <translation>A sintaxe da sua sequência de Auto-Digitação está incorreta!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>Este comando de Auto-Digitar contém um tempo de espera muito longo. Você tem certeza de que deseja continuar?</translation>
+ <translation>Este comando de Auto-Digitação contém um tempo de espera muito longo. Você tem certeza que deseja continuar?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Este comando de Auto-Digitar contém pressionamentos de teclas muito lentas. Você tem certeza de que deseja continuar?</translation>
+ <translation>Este comando Autotipo contém pressionamentos de teclas muito lentos. Você realmente deseja prosseguir?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>Este comando de Auto-Digitar contém parâmetros que são repetidos muitas vezes. Você tem certeza de que deseja continuar?</translation>
+ <translation>Este comando Auto-Type contém os argumentos que são repetidos muitas vezes. Você realmente deseja prosseguir?</translation>
</message>
<message>
<source>Permission Required</source>
@@ -513,7 +541,7 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Auto-Digitar - KeePassXC</translation>
+ <translation>Auto-Digitação - KeePassXC</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
@@ -527,41 +555,43 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Confirmar acesso do KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Requisição de Acesso ao Browser</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 está requisitando acesso aos seguintes itens:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Lembrar esta escolha</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Lembrar acesso aos itens marcados</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Permitir</translation>
+ <source>Remember</source>
+ <translation>Lembrar</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Negar</translation>
+ <source>Allow access to entries</source>
+ <translation>Permitir acesso aos itens</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 solicitou acesso a senhas para o(s) seguinte(s) iten(s).
-Selecione se deseja permitir o acesso.</translation>
+ <source>Allow Selected</source>
+ <translation>Permitir Selecionados</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Permitir acesso</translation>
+ <source>Deny All</source>
+ <translation>Negar Todos</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Negar acesso</translation>
+ <source>Disable for this site</source>
+ <translation>Desabilitar para este site</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>Salvar entrada do KeePassXC-Browser</translation>
+ <translation>KeePassXC-Browser Salvar Entrada</translation>
</message>
<message>
<source>Ok</source>
@@ -579,199 +609,261 @@ Por favor, selecione o banco de dados correto para salvar as credenciais.</trans
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Diálogo</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Nova associação de chaves requisitada</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Isso é necessário para acessar os seus bancos de dados usando o KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Salvar e permitir acesso</translation>
</message>
<message>
- <source>General</source>
- <translation>Geral</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Substituir chave existente?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Habilitar integração para estes navegadores:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Uma chave de criptografia compartilhada com o nome &quot;% 1&quot; já existe.
+Você deseja sobrescreve-la?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Atualizar entrada</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>F&amp;irefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Deseja atualizar as informações em %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Cancelar</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Convertendo atributos para dados personalizados...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Mostrar &amp;notificação quando as credenciais forem requisitadas</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Convertido KeePassHTTP atributos</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Pe&amp;dir para destrancar o banco de dados se estiver trancado</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Atributos convertidos com sucesso de %1 entrada(s).
+Movido %2 chaves para dados personalizados.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Movido com sucesso %n chaves para dados personalizados.</numerusform><numerusform>Movido com sucesso %n chaves para dados personalizados.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Apenas entradas com o mesmo esquema (http://, https://,...) são retornados.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>C&amp;orresponder ao esquema de URL (por exemplo, https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>O banco de dados ativo não contém uma entrada com atributos KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Retorna apenas as melhores correspondências para um URL específico em vez de todas entradas para todo o domínio.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Configurações de integração do navegador herdado detectadas</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Retornar apenas credenciais de melhor correspondência</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Crie um novo grupo</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar credenciais correspondentes por &amp;título</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Um pedido para criar um novo grupo &quot;%1&quot; foi recebido.
+Você quer criar este grupo?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar credenciais correspondentes por nome de &amp;usuário</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>As configurações do seu navegador KeePassXC precisam ser movidas para as configurações do banco de dados.
+Isso é necessário para manter as conexões atuais do navegador.
+Gostaria de migrar suas configurações existentes agora?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avançado</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Não mostrar este alerta novamente</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nunca peça confirmação antes de acessar as c&amp;redenciais</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Você recebeu um pedido de associação para o seguinte banco de dados:
+%1
+
+Dê à conexão um nome único ou um ID, por exemplo:
+chrome-laptop</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nunca peça confirmação antes de at&amp;ualizar as credenciais</translation>
+ <source>Dialog</source>
+ <translation>Diálogo</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Buscar em todos os bancos de dados abertos por credenciais correspondentes</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Isso é necessário para acessar os seus bancos de dados usando o KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Criação automática ou atualizações não são suportadas para os valores dos campos.</translation>
+ <source>Enable browser integration</source>
+ <translation>Habilitar integração com navegadores</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Mostrar também campos avançados que começam com &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Geral</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Atualiza os caminhos dos binários do KeePassXC ou keepassxc-proxy automaticamente para o envio de mensagens de scripts nativo na inicialização.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Navegadores instalados como snaps atualmente não são suportados.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>A&amp;tualizar arquivos de manifesto de mensagens nativas na inicialização</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Habilitar integração para estes navegadores:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Suporte a um aplicativo de proxy entre KeePassXC e extensão de navegador.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Usar um aplicativo &amp;proxy entre KeePassXC e uma extensão do navegador</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Usar um local de proxy personalizado se você instalou um proxy manualmente.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Usar um endereço de proxy &amp;customizado</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Procurar...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;AVISO:&lt;/b&gt; As seguintes opções podem ser perigosas!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Selecione localização para o proxy</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Exibir uma notificação quando as credenciais forem solicitadas</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Arquivos Executáveis</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Solicitar para destrancar o banco de dados se estiver bloqueado</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Todos os arquivos</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Apenas entradas com o mesmo esquema (http://, https://,...) são retornados.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Não pedir permissão para &amp;HTTP Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Combinar com esquema de URL (por exemplo, https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Devido ao sandbox do Snap, você deve executar um script para ativar a integração do navegador.&lt;br /&gt;Você pode obter este script de %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Retorna apenas as melhores correspondências para um URL específico em vez de todas entradas para todo o domínio.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Por favor, veja as instruções especiais para o uso da extensão do navegador abaixo</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Retornar apenas as credenciais com melhor correspondência</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>O KeePassXC-Browser é necessário para que a integração do navegador funcione. &lt;br /&gt;Faça o download para %1 e %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Retornou credenciais expiradas. [expired] foi adicionado ao título.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Permitir retorno de credenciais expiradas</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Retornou credenciais expiradas. [expired] foi adicionado ao título.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Todos os bancos de dados conectados a extensão irão retornar as credenciais correspondentes.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Permitir retorno de credenciais expiradas.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Pesquisar em todas as bases de dados por credenciais correspondentes</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Habilitar integração com navegadores</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordenar credenciais correspondentes por título</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Navegadores instalados como snaps atualmente não são suportados.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordenar credenciais correspondentes por nome de usuário</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Todos os bancos de dados conectados a extensão irão retornar as credenciais correspondentes.</translation>
+ <source>Advanced</source>
+ <translation>Avançado</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nunca pedir confirmação antes de acessar as credenciais</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nunca pedir confirmação antes de atualizar as credenciais</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Não pedir permissão para HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Criação automática ou atualizações não são suportadas para os valores dos campos.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Mostrar campos avançados que começam com &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Não mostrar o popup sugerindo migração das configurações do KeePassHTTP legado.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>Não alertar sobre a migração das configurações do &amp;KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Não alertar sobre a migração das configurações do KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Atualiza os caminhos dos binários do KeePassXC ou keepassxc-proxy automaticamente para o envio de mensagens de scripts nativo na inicialização.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Atualizar arquivos de manifesto de mensagens nativas na inicialização</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Usar um local de proxy personalizado se você instalou um proxy manualmente.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Utilizar endereço de proxy customizado:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Por favor, selecione o banco de dados correto para salvar as credenciais.</trans
<translation>Procurar por arquivo proxy personalizado</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Alerta&lt;/b&gt;, a aplicação do keepassxc-proxy não foi encontrada! &lt;br /&gt;Por favor verifique o diretório de instalação do KeePassXC ou confirme o caminho personalizado nas opções avançadas.&lt;br /&gt;A integração do navegador NÃO IRÁ FUNCIONAR sem a aplicação proxy. &lt;br /&gt;Caminho esperado: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Procurar...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Nova associação de chaves requisitada</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Utilizar localização de configuração de navegador customizada:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Salvar e permitir acesso</translation>
+ <source>Browser type:</source>
+ <translation>Tipo de navegador:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Substituir chave existente?</translation>
+ <source>Toolbar button style</source>
+ <translation>Estilo de botão da barra de ferramentas</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Uma chave de criptografia compartilhada com o nome &quot;%1&quot; já existe.
-Você deseja substituí-la?</translation>
+ <source>Config Location:</source>
+ <translation>Localização da configuração:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Atualizar entrada</translation>
+ <source>Custom browser location field</source>
+ <translation>Campo de localização de navegador personalizado</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Deseja atualizar as informações em %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Cancelar</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Navegar para caminho de navegador personalizado</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Convertendo atributos para dados personalizados...</translation>
+ <source>Custom extension ID:</source>
+ <translation>ID de extensão personalizado:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Atributos do KeePassHTTP convertidos</translation>
+ <source>Custom extension ID</source>
+ <translation>ID de extensão personalizado:</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Atributos convertidos com sucesso de %1 entrada(s).
-Movido %2 chaves para dados personalizados.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Movido com sucesso %n chaves para dados personalizados.</numerusform><numerusform>Movido com sucesso %n chaves para dados personalizados.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Devido ao sandbox do Snap, você deve executar um script para ativar a integração do navegador.&lt;br /&gt;Você pode obter este script de %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>O KeePassXC-Browser é necessário para que a integração com navegador funcione. Faça o download para %1, %2 e %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>O banco de dados ativo não contém uma entrada com atributos KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Por favor, veja as instruções especiais para o uso da extensão do navegador abaixo</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Configurações de integração do navegador herdado detectadas</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Erro:&lt;/b&gt; O endereço de proxy personalizado não foi encontrado!&lt;br/&gt;A integração com o navegador NÃO IRÁ funcionar sem a aplicação de proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Crie um novo grupo</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;AVISO:&lt;/b&gt; As seguintes opções podem ser perigosas!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Um pedido para criar um novo grupo &quot;%1&quot; foi recebido.
-Você quer criar este grupo?
-</translation>
+ <source>Executable Files</source>
+ <translation>Arquivos Executáveis</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>As configurações do seu navegador KeePassXC precisam ser movidas para as configurações do banco de dados.
-Isso é necessário para manter as conexões atuais do navegador.
-Gostaria de migrar suas configurações existentes agora?</translation>
+ <source>All Files</source>
+ <translation>Todos os arquivos</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Não mostrar este alerta novamente</translation>
+ <source>Select custom proxy location</source>
+ <translation>Selecione localização para o proxy</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Você recebeu um pedido de associação para o seguinte banco de dados:
-%1
-
-Dê à conexão um nome único ou um ID, por exemplo:
-chrome-laptop</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Selecione o local da pasta de host de mensagens nativas</translation>
</message>
</context>
<context>
@@ -893,7 +959,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Anexar &apos;-Clone&apos; ao título</translation>
+ <translation>Anexar &apos;-Clonar&apos; ao título</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -939,24 +1005,12 @@ chrome-laptop</translation>
<translation>Comentários começam com</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>O primeiro registro contém os nomes dos campos</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Considere &apos;\&apos; como caractere de escape</translation>
</message>
<message>
<source>Preview</source>
- <translation>Pré-visualização</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Organização das colunas</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Não existe no arquivo CSV</translation>
+ <translation>Visualização</translation>
</message>
<message>
<source>Imported from CSV file</source>
@@ -971,14 +1025,6 @@ chrome-laptop</translation>
<translation>Erro</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nome de campo vazio %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>coluna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Erro(s) detectado(s) no arquivo CSV!</translation>
</message>
@@ -989,7 +1035,7 @@ chrome-laptop</translation>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>Importação de CSV: erros durante a escrita:
+ <translation>Importação de CSV: o gravador tem erros:
%1</translation>
</message>
<message>
@@ -1008,6 +1054,58 @@ chrome-laptop</translation>
<source>CSV import preview</source>
<translation>Prever importação de CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Associação de Coluna</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Última modificação</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Senha</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Criado</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notas</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nome de usuário</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Linhas do cabeçalho ignoradas</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Primeira linha possui nomes dos campos</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Não Presente</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Coluna %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1022,21 +1120,16 @@ chrome-laptop</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n byte(s)</numerusform><numerusform>%n byte(s)</numerusform></translation>
+ <translation><numerusform>%n byte</numerusform><numerusform>%n bytes</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n linha(s)</numerusform><numerusform>%n linha(s)</numerusform></translation>
+ <translation><numerusform>%n linha</numerusform><numerusform>%n linhas</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Raíz</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Arquivo %1 não existe.</translation>
</message>
@@ -1054,7 +1147,7 @@ chrome-laptop</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Chave não transformada. Este é um bug, por favor reporte para os desenvolvedores!</translation>
+ <translation>Chave não transformada. Este é um bug, por favor denuncie para os desenvolvedores!</translation>
</message>
<message>
<source>%1
@@ -1078,12 +1171,25 @@ Backup do banco de dados alocado em %2</translation>
<source>Recycle Bin</source>
<translation>Lixeira</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Senhas</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Salvamento do banco de dados já está em andamento.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Não foi possível salvar, o banco de dados não foi inicializado!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Destrancar banco de dados - KeePassXC</translation>
+ <translation>Desbloquear Banco de Dados - KeePassXC</translation>
</message>
</context>
<context>
@@ -1098,16 +1204,16 @@ Backup do banco de dados alocado em %2</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Formato de arquivo-chave antigo</translation>
+ <translation>Formato de chave antigo</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Você está usando um formato de arquivo-chave antigo que pode perder o suporte no futuro.
+ <translation>Você está usando um formato de arquivo de chave legado que pode tornar-se sem suporte no futuro.
-Por favor, considere gerar um novo arquivo-chave.</translation>
+Por favor, considere-se gerar um novo arquivo de chave.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1130,10 +1236,6 @@ Por favor, considere gerar um novo arquivo-chave.</translation>
<translation>Falha ao abrir o arquivo-chave: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Selecione um campo...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Destrancar banco de dados do KeePassXC</translation>
</message>
@@ -1146,14 +1248,6 @@ Por favor, considere gerar um novo arquivo-chave.</translation>
<translation>Campo de senha</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da senha</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Seleção do arquivo-chave</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Seleção de campo de chave de hardware</translation>
</message>
@@ -1218,10 +1312,6 @@ Para impedir que esses erros apareçam, você deve ir em &quot;Configurações d
&lt;p&gt;Clique para maiores informações...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Em adição à sua senha mestra, você pode usar um arquivo secreto para aumentar a segurança de seu banco de dados. Este arquivo pode ser gerado em suas configurações de segurança do banco de dados.&lt;/p&gt;&lt;p&gt;Este &lt;strong&gt;não&lt;/strong&gt; é seu arquivo de banco de dados *.kdbx!&lt;br&gt;Se você não tem um arquivo-chave, deixe o campo em branco.&lt;/p&gt;&lt;p&gt;Clique para maiores informações...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Ajuda do arquivo-chave</translation>
</message>
@@ -1230,10 +1320,6 @@ Para impedir que esses erros apareçam, você deve ir em &quot;Configurações d
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Selecione um arquivo-chave...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Não use arquivos de banco de dados (*.kdbx) como arquivo-chave</translation>
</message>
@@ -1243,6 +1329,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Você não pode usar seu arquivo de banco de dados como arquivo-chave.
Se você não tem um arquivo-chave, por favor deixe o campo vazio.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Em adição à sua senha, você pode usar um arquivo secreto para aumentar a segurança de seu banco de dados. Este arquivo pode ser gerado em suas configurações de segurança do banco de dados.&lt;/p&gt;&lt;p&gt;Este &lt;strong&gt;não&lt;/strong&gt; é seu arquivo de banco de dados *.kdbx!&lt;br&gt;Se você não tem um arquivo-chave, deixe o campo em branco.&lt;/p&gt;&lt;p&gt;Clique para maiores informações...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Arquivo-chave para desbloquear banco de dados</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Por favor pressione o botão em seu YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detectando chaves físicas...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nenhuma chave física detectada</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Selecionar chave física...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1255,7 +1365,7 @@ Se você não tem um arquivo-chave, por favor deixe o campo vazio.</translation>
<name>DatabaseSettingsDialog</name>
<message>
<source>Advanced Settings</source>
- <translation>Configurações avançadas</translation>
+ <translation>Definições avançadas</translation>
</message>
<message>
<source>General</source>
@@ -1266,16 +1376,16 @@ Se você não tem um arquivo-chave, por favor deixe o campo vazio.</translation>
<translation>Segurança</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Chave-mestre</translation>
- </message>
- <message>
<source>Encryption Settings</source>
- <translation>Configurações de criptografia</translation>
+ <translation>Definições de cifra</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integração com o navegador</translation>
+ <translation>Integração com o Navegador</translation>
+ </message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Credenciais do Banco de Dados</translation>
</message>
</context>
<context>
@@ -1285,18 +1395,6 @@ Se você não tem um arquivo-chave, por favor deixe o campo vazio.</translation>
<translation>Configurações do KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Desconectar todos os navegadores</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Esq&amp;uecer todas as configurações específicas do site nas entradas</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Mover os atributos do KeePassHTTP para os &amp;dados personalizados do KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Chaves guardadas</translation>
</message>
@@ -1350,7 +1448,7 @@ Isso pode impedir a conexão com o plugin do navegador.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Removeu com sucesso %n chave(s) de criptografia das configurações do KeePassXC.</numerusform><numerusform>Removeu com sucesso %n chave(s) de criptografia das configurações do KeePassXC.</numerusform></translation>
+ <translation><numerusform>Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC.</numerusform><numerusform>Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1404,12 +1502,73 @@ Isso é necessário para manter a compatibilidade com o plugin do navegador.</tr
<source>Remove selected key</source>
<translation>Remover chave selecionada</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Mover os atributos do KeePassHTTP para os dados personalizados do KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Atualizar ID do grupo raiz do banco de dados</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Criado</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Atualizar ID da banco de dados</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Você deseja realmente atualizar o ID do banco de dados?
+Isto somente é necessário se o seu banco de dados é uma cópia de outro e a extensão do navegador não puder conectar.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Adicionar proteção adicional...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nenhuma senha definida</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>AVISO! Você não definiu uma senha. Usar um banco de dados sem uma senha é altamente desencorajado!
+
+Tem certeza de que deseja continuar sem uma senha?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continuar sem senha</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Chave de criptografia não adicionada</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Você deve adicionar pelo menos uma chave de criptografia para proteger seu banco de dados!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro desconhecido</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Falha ao alterar credenciais do banco de dados</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
<message>
<source>Encryption Algorithm:</source>
- <translation>Algoritmo de criptografia:</translation>
+ <translation>Algoritmo de Encriptação:</translation>
</message>
<message>
<source>AES: 256 Bit (default)</source>
@@ -1421,19 +1580,15 @@ Isso é necessário para manter a compatibilidade com o plugin do navegador.</tr
</message>
<message>
<source>Key Derivation Function:</source>
- <translation>Função de derivação da chave:</translation>
+ <translation>Função de Derivação de Chave:</translation>
</message>
<message>
<source>Transform rounds:</source>
<translation>Rodadas de transformação:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Testar atraso de 1 segundo</translation>
- </message>
- <message>
<source>Memory Usage:</source>
- <translation>Uso de memória:</translation>
+ <translation>Uso de Memória:</translation>
</message>
<message>
<source>Parallelism:</source>
@@ -1441,7 +1596,7 @@ Isso é necessário para manter a compatibilidade com o plugin do navegador.</tr
</message>
<message>
<source>Decryption Time:</source>
- <translation>Tempo de descriptografia:</translation>
+ <translation>Hora da descriptografia:</translation>
</message>
<message>
<source>?? s</source>
@@ -1452,14 +1607,6 @@ Isso é necessário para manter a compatibilidade com o plugin do navegador.</tr
<translation>Alterar</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Valores mais altos oferecem mais proteção, mas a abertura do banco de dados levará mais tempo.</translation>
</message>
@@ -1487,13 +1634,13 @@ Isso é necessário para manter a compatibilidade com o plugin do navegador.</tr
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Número de rodadas muito alto</translation>
+ <translation>Número de voltas muito alto</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>Você está usando um número muito elevado de rodadas de transformação de chave com Argon2.
+ <translation>Você está usando um número muito elevado de transformação chave rodadas com Argon2.
Se você mantiver este número, seu banco de dados pode levar horas ou dias (ou até mais) para abrir!</translation>
</message>
@@ -1514,7 +1661,7 @@ Se você mantiver este número, seu banco de dados pode levar horas ou dias (ou
<source>You are using a very low number of key transform rounds with AES-KDF.
If you keep this number, your database may be too easy to crack!</source>
- <translation>Você está usando um número muito baixo de rodadas de transformação de chave com KDF-AES.
+ <translation>Você está usando um número muito baixo de transformação chave rodadas com KDF-AES.
Se você manter este número, seu banco de dados pode ser facilmente crackeado!</translation>
</message>
@@ -1536,16 +1683,6 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!<
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform>processo(s)</numerusform><numerusform>processo(s)</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Mudar tempo de descriptografia</translation>
@@ -1578,6 +1715,14 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!<
<source>Parallelism</source>
<translation>Paralelismo</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1586,16 +1731,16 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!<
<translation>Entradas Expostas</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Não e&amp;xibir este banco de dados</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Não exibir este banco de dados</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Exibir entradas &amp;neste grupo:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Exibir entradas deste grupo:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Habilitar fd.o Secret Service para acessar estas configurações.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Habilitar Serviço Secreto para acessar estas configurações.</translation>
</message>
</context>
<context>
@@ -1630,7 +1775,7 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!<
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation> MB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1641,10 +1786,6 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!<
<translation>Configurações do Banco de Dados</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Ativar &amp;compressão (recomendado)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Nome do campo do banco de dados</translation>
</message>
@@ -1678,6 +1819,10 @@ Esta ação não é reversível.</translation>
<source> (old)</source>
<translation>(antigo)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Ativar compressão (recomendado)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1712,45 +1857,6 @@ Esta ação não é reversível.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Adicionar proteção adicional...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Chave de criptografia não adicionada</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Você deve adicionar pelo menos uma chave de criptografia para proteger seu banco de dados!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Nenhuma senha definida</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>AVISO! Você não definiu uma senha. Usar um banco de dados sem uma senha é altamente desencorajado!
-
-Tem certeza de que deseja continuar sem uma senha?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Erro desconhecido</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Não foi possível alterar a chave mestra</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continuar sem senha</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1770,125 +1876,6 @@ Tem certeza de que deseja continuar sem uma senha?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Estatísticas</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Passe o mouse por cima dos ícones de erro para maiores informações.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valor</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nome do banco de dados</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Descrição</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Localização</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Salvo por último em </translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Mudanças não-salvas</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>sim</translation>
- </message>
- <message>
- <source>no</source>
- <translation>não</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>O banco de dados foi modificado, mas as mudanças ainda não foram salvas no disco.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Número de grupos</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Número de entradas</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Número de entradas expiradas</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>O banco de dados contém entradas que expiraram.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Senhas únicas</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Senhas não-únicas</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Mais que 10% das senhas estão sendo reutilizadas. Use senhas únicas quando possível.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Máximo de reusos da senha</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Algumas senhas são usadas mais do que três vezes. Use senhas únicas quando possível.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Números de senhas pequenas</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Comprimento mínimo recomendado de senha é pelo menos 8 caracteres.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Número de senhas fracas</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Recomendamos o uso de senhas longas e randomizados com uma classificação de &apos;bom&apos; ou &apos;excelente&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Comprimento médio da senha</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caracteres</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>O tamanho médio das senhas é menor que dez caracteres. Senhas maiores são mais seguras.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Por favor espere, as estatísticas do banco de dados estão sendo calculadas...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1908,7 +1895,7 @@ Tem certeza de que deseja continuar sem uma senha?</translation>
</message>
<message>
<source>Merge database</source>
- <translation>Mesclar banco de dados</translation>
+ <translation>Juntar banco de dados</translation>
</message>
<message>
<source>Open KeePass 1 database</source>
@@ -1934,7 +1921,7 @@ Tem certeza de que deseja continuar sem uma senha?</translation>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
<translation>O banco de dados criado não possui chave ou KDF, recusando-se a salvá-lo.
-Este é definitivamente um bug, por favor reporte para os desenvolvedores.</translation>
+Este é definitivamente um bug, por favor denuncie para os desenvolvedores.</translation>
</message>
<message>
<source>Select CSV file</source>
@@ -1952,7 +1939,7 @@ Este é definitivamente um bug, por favor reporte para os desenvolvedores.</tran
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Trancado]</translation>
+ <translation>%1 [Bloqueada]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
@@ -1983,6 +1970,10 @@ Este é definitivamente um bug, por favor reporte para os desenvolvedores.</tran
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Você está prestes a exportar o seu banco de dados para um arquivo não criptografado. Isso vai deixar suas senhas e informações confidenciais vulneráveis! Você tem certeza que quer continuar?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Abrir o OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1996,11 +1987,11 @@ Este é definitivamente um bug, por favor reporte para os desenvolvedores.</tran
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Você realmente quer mover a entrada &quot;%1&quot; para a lixeira?</translation>
+ <translation>Pretende realmente mover a entrada &quot;%1&quot; para a lixeira?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Você realmente quer mover %n entrada(s) para a lixeira?</numerusform><numerusform>Você realmente quer mover %n entrada(s) para a lixeira?</numerusform></translation>
+ <translation><numerusform>Você quer realmente mudar %n entradas para a lixeira?</numerusform><numerusform>Você deseja realmente mover %n entrada(s) para a lixeira?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2020,11 +2011,11 @@ Este é definitivamente um bug, por favor reporte para os desenvolvedores.</tran
</message>
<message>
<source>No current database.</source>
- <translation>Nenhum banco de dados atual.</translation>
+ <translation>Nenhuma banco de dados atual.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
- <translation>Nenhum banco de dados de origem, nada a fazer.</translation>
+ <translation>Nenhuma banco de dados de origem, nada a fazer.</translation>
</message>
<message>
<source>Search Results (%1)</source>
@@ -2044,13 +2035,13 @@ Este é definitivamente um bug, por favor reporte para os desenvolvedores.</tran
</message>
<message>
<source>Merge Request</source>
- <translation>Mesclar Pedido</translation>
+ <translation>Juntar Pedido</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
<translation>O arquivo de banco de dados foi alterado e você tem alterações não salvas.
-Você deseja mesclar suas alterações?</translation>
+Você deseja combinar suas alterações?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2062,23 +2053,23 @@ Você deseja mesclar suas alterações?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Você realmente quer apagar %n entrada(s) para o bem?</numerusform><numerusform>Você realmente quer apagar %n entrada(s) permanentemente?</numerusform></translation>
+ <translation><numerusform>Você realmente quer apagar %n entrada(s) para o bem?</numerusform><numerusform>Você realmente quer apagar %n entrada(s) para o bem?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Excluir entrada(s)?</numerusform><numerusform>Excluir entrada(s)?</numerusform></translation>
+ <translation><numerusform>Apagar entrada?</numerusform><numerusform>Apagar entradas?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Mover entrada(s) para lixeira?</numerusform><numerusform>Mover entrada(s) para lixeira?</numerusform></translation>
+ <translation><numerusform>Mover entrada para a lixeira?</numerusform><numerusform>Mover entradas para a lixeira?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
- <translation>Trancar banco de dados?</translation>
+ <translation>Travar banco de dados?</translation>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Você está editando uma entrada. Descartar as mudanças e trancar assim mesmo?</translation>
+ <translation>Você está editando uma entrada. Descartar as mudanças e travar de qualquer maneira?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
@@ -2146,11 +2137,11 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>Arquivos do banco de dados foram mesclados com sucesso.</translation>
+ <translation>Fundiu com sucesso os arquivos do banco de dados.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>O banco de dados não foi modificado pela operação de mesclagem.</translation>
+ <translation>Banco de dados não foi modificado pela operação de mesclagem.</translation>
</message>
<message>
<source>Shared group...</source>
@@ -2164,6 +2155,14 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Este banco de dados está aberto em modo de leitura. Auto-salvar está desabilitado.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Salvar backup do banco de dados</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Não foi possível localizar o arquivo do banco de dados: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2181,7 +2180,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Auto-Digitar</translation>
+ <translation>Auto-Digitação</translation>
</message>
<message>
<source>Properties</source>
@@ -2208,14 +2207,6 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<translation>Escolha uma chave privada</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Este arquivo é muito grande para ser uma chave privada</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Falha ao abrir chave privada</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Histórico de Entradas</translation>
</message>
@@ -2228,10 +2219,6 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<translation>Editar entrada</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Senhas diferentes fornecidas.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Novo atributo</translation>
</message>
@@ -2249,35 +2236,19 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n mês(es)</numerusform><numerusform>%n mês(es)</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Utilizar senha gerada?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Deseja aplicar a senha gerada a esta entrada?</translation>
+ <translation><numerusform>%n mese(s)</numerusform><numerusform>%n mese(s)</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Item atualizado com sucesso.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>A entrada tem alterações não salvas</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Novo atributo %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTEGIDO] Pressione revelar para visualizar ou editar</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation><numerusform>%n ano(s)</numerusform><numerusform>%n ano(s)</numerusform></translation>
+ <translation><numerusform>%n ano</numerusform><numerusform>%n anos</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
@@ -2295,6 +2266,26 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Tem certeza de que deseja remover esta URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Revelar</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Ocultar</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Desfazer Mundanças</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Você gostaria de salvar as mudanças para esta entrada?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[PROTEGIDO] Pressione Revelar para visualizar ou editar</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2312,7 +2303,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Edit Name</source>
- <translation>Editar nome</translation>
+ <translation>Editar Nome</translation>
</message>
<message>
<source>Protect</source>
@@ -2370,20 +2361,20 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<source>Background color selection</source>
<translation>Seleção de cor do plano de fundo</translation>
</message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
<message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Habilitar Auto-Digitar para esta entrada</translation>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se marcado, a entrada não aparecerá em relatórios como Verificação de Saúde e HIBP, mesmo se ela não corresponder aos requerimentos de qualidade (ex.: entropia de senha ou reuso). Você pode definir a marca de seleção se a senha estiver fora do seu controle (por exemplo, se precisar ser um PIN de quatro dígitos) para evitar que isso atrapalhe os relatórios.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Herdar sequência pré-definida de Auto-Digitar do &amp;grupo</translation>
+ <source>Exclude from database reports</source>
+ <translation>Excluir dos relatórios do banco de dados</translation>
</message>
+</context>
+<context>
+ <name>EditEntryWidgetAutoType</name>
<message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Usar sequência de Auto-Digitar personalizada:</translation>
+ <source>Enable Auto-Type for this entry</source>
+ <translation>Habilitar Auto-Digitação para esta entrada</translation>
</message>
<message>
<source>Window Associations</source>
@@ -2399,7 +2390,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Window title:</source>
- <translation>Título da janela:</translation>
+ <translation>Título da Janela:</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
@@ -2441,6 +2432,14 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Sequência de Auto-Digitar personalizada para esta janela</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Herdar sequência pré-definida de Auto-Digitação do grupo</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Usar sequência de Auto-Digitação personalizada:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2476,6 +2475,14 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<source>Edit</source>
<translation>Editar</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Envia esta configuração apenas ao navegador para caixas de diálogo de Autenticação HTTP. Se ativado, os formulários de login normais não mostrarão esta entrada para seleção.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Usar esta entrada somente com Autenticação HTTP Básica</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2527,18 +2534,10 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<translation>Senha:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repetir:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Título:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Pré-definidos</translation>
</message>
@@ -2548,11 +2547,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Username:</source>
- <translation>Nome de usuário:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Expira em</translation>
+ <translation>Nome de Usuário:</translation>
</message>
<message>
<source>Url field</source>
@@ -2563,22 +2558,10 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<translation>Baixar favicon para URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Repetir campo de senha</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Alternar gerador de senha</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo de senha</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da senha</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Alternar visibilidade das notas</translation>
</message>
@@ -2610,6 +2593,18 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<source>Toggle expiration</source>
<translation>Alternar expiração</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notas:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Expira em:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2627,11 +2622,11 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Impressão digital</translation>
+ <translation>Fingerprint</translation>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>Remover chave do agente ao fechar/trancar o banco de dados</translation>
+ <translation>Remover chave do agente ao fechar/bloquear o banco de dados</translation>
</message>
<message>
<source>Public key</source>
@@ -2639,7 +2634,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Adicionar chave ao agente quando abrir/destrancar o banco de dados</translation>
+ <translation>Adicionar chave ao agente quando abrir/desbloquear o banco de dados</translation>
</message>
<message>
<source>Comment</source>
@@ -2668,7 +2663,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>Procurar...</translation>
+ <translation>Navegar...</translation>
</message>
<message>
<source>Attachment</source>
@@ -2745,10 +2740,6 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulário</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipo:</translation>
</message>
@@ -2757,10 +2748,6 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
<translation>Caminho:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Senha:</translation>
</message>
@@ -2844,57 +2831,25 @@ Extensões suportadas são: %1</translation>
<translation>Campo do caminho para compartilhar arquivo</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Procurar por arquivo compartilhado</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo de senha</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da senha</translation>
+ <source>Clear fields</source>
+ <translation>Limpar campos</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Alternar gerador de senha</translation>
+ <source>Browse for share file</source>
+ <translation>Procurar por arquivo compartilhado</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Limpar campos</translation>
+ <source>Browse...</source>
+ <translation>Procurar...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Expira em</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Pesquisar</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto-Digitar</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Usar a sequência padrão de Auto-Digitar do grupo pai</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Definir se&amp;quência padrão de Auto-Digitar</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Campo nome</translation>
</message>
@@ -2922,18 +2877,38 @@ Extensões suportadas são: %1</translation>
<source>Default auto-type sequence field</source>
<translation>Campo de sequência de Auto-Digitar padrão</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Usar ícone padrão</translation>
+ <source>Expires:</source>
+ <translation>Expira em:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Usar a sequência padrão de Auto-Digitar do grupo pai</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Usar ícone &amp;personalizado</translation>
+ <source>Auto-Type:</source>
+ <translation>Auto-Digitar:</translation>
</message>
<message>
+ <source>Search:</source>
+ <translation>Pesquisar:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notas:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Configurar sequência padrão de Auto-Digitar</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Adicionar ícone personalizado</translation>
</message>
@@ -2955,7 +2930,7 @@ Extensões suportadas são: %1</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos os arquivos</translation>
+ <translation>Todos arquivos</translation>
</message>
<message>
<source>Confirm Delete</source>
@@ -2967,7 +2942,7 @@ Extensões suportadas são: %1</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Carregou com sucesso %1 de %n ícone(s)</numerusform><numerusform>Carregou com sucesso %1 de %n ícone(s)</numerusform></translation>
+ <translation><numerusform>Carregado com sucesso %1 de %n ícone(s)</numerusform><numerusform>Carregado com sucesso %1 de %n ícone(s)</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2979,7 +2954,7 @@ Extensões suportadas são: %1</translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>Os seguintes ícones falharam:</numerusform><numerusform>O(s) seguinte(s) ícone(s) falharam:</numerusform></translation>
+ <translation><numerusform>O seguinte ícone falhou:</numerusform><numerusform>O(s) ícone(s) a seguir falharam:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
@@ -2998,14 +2973,6 @@ Extensões suportadas são: %1</translation>
<translation>Aplicar ícone selecionado aos sub grupos e entradas</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Aplicar ícone &amp;em</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Aplicar apenas neste</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Também aplicar nos grupos herdeiros</translation>
</message>
@@ -3021,6 +2988,22 @@ Extensões suportadas são: %1</translation>
<source>Existing icon selected.</source>
<translation>Ícone existente selecionado.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Usar ícone padrão</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Usar ícone personalizado</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Aplicar ícone para...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Aplicar para este grupo somente</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3137,7 +3120,7 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Tem certeza de que deseja remover %n anexo(s)?</numerusform><numerusform>Tem certeza de que deseja remover %n anexo(s)?</numerusform></translation>
+ <translation><numerusform>Tem certeza que deseja remover anexos de %n?</numerusform><numerusform>Tem certeza que deseja remover os %n anexo(s)?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3206,6 +3189,20 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
<source>Save selected attachment to disk</source>
<translation>Salvar anexo selecionado no disco</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 é um arquivo grande (%2 MB).
+Seu banco de dados pode ficar muito grande e reduzir o desempenho.
+
+Você deseja realmente adicionar este arquivo?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Confirmar Anexo</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3289,12 +3286,52 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
<translation>Anexos</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Sim</translation>
+ <source>Size</source>
+ <translation>Tamanho</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nome do grupo</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Título da entrada</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Anotações da entrada</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Entrada expira em</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Data de criação</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Data da última modificação</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Data do último acesso</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Arquivos anexados</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Tamanho da entrada</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Tem anexos</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Possui senha de uso único TOPT</translation>
</message>
</context>
<context>
@@ -3337,7 +3374,7 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
</message>
<message>
<source>Autotype</source>
- <translation>Auto-Digitar</translation>
+ <translation>Auto-Digitação</translation>
</message>
<message>
<source>Window</source>
@@ -3394,6 +3431,13 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL inválida</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3420,8 +3464,14 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
<translation>Redefinir as configurações padrões</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Anexos (ícone)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Tem anexos</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Possui TOTP</translation>
</message>
</context>
<context>
@@ -3433,21 +3483,74 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Falha ao registrar serviço DBus em %1: outro Secret Service está aberto.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n Entrada (s) foi utilizada por %1</numerusform><numerusform>%n Entrada(s) foram utilizada por %1</numerusform></translation>
+ <translation><numerusform>%n entrada foi usada por %1</numerusform><numerusform>%n entradas foram usadas por %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Falha ao registrar serviço DBus em %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nome do arquivo</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gerenciar</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Destrancar para mostrar</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nada</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplicativo</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gerenciar</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Desconhecido</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Desconhecido</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Executável: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Outro serviço secreto está em execução (%1).&lt;br/&gt;Por favor, encerre/remova ele antes de reabilitar a integração com o Serviço Secreto.</translation>
</message>
</context>
<context>
@@ -3459,14 +3562,10 @@ Isto pode causar mal funcionamento dos plugins afetados.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Não foi possível salvar o arquivo!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Não pode salvar o arquivo de script de envio de mensagens nativo.</translation>
+ <source>Online password validation failed</source>
+ <translation>Falha na validação online da senha</translation>
</message>
</context>
<context>
@@ -3536,14 +3635,6 @@ Você pode habilitar o serviço de ícones do DuckDuckGo na seção de seguranç
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave mestre</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Impossibilitado de expedir o desafio-resposta.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>cabeçalhos de banco de dados ausente</translation>
</message>
@@ -3569,16 +3660,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Credenciais inválidas foram informadas, por favor tente novamente.
Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Não foi possível calcular a chave do banco de dados</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Não foi possível emitir resposta ao desafio: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Impossibilitado de expedir o desafio-resposta.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Não foi possível emitir resposta ao desafio: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave mestre</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Não foi possível calcular a chave do banco de dados</translation>
</message>
</context>
<context>
@@ -3588,10 +3687,6 @@ Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</trans
<translation>cabeçalhos de banco de dados ausente</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave mestre</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Tamanho de soma de verificação do cabeçalho inválido</translation>
</message>
@@ -3709,33 +3804,37 @@ Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</trans
<source>(HMAC mismatch)</source>
<translation>(HMAC não combina)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Não foi possível calcular a chave do banco de dados: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>Algoritmo de criptografia simétrica inválido.</translation>
+ <translation>Algoritmo de cifra simétrica inválido.</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Tamanho de criptografia simétrica IV inválida.</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave mestre</translation>
+ <translation>Tamanho de cifra simétrica IV inválida.</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Falha ao serializar mapa variante do parâmetros KDF</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Não foi possível calcular a chave do banco de dados: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
<message>
<source>Unsupported cipher</source>
- <translation>Criptografia não suportada</translation>
+ <translation>Cifra não suportada</translation>
</message>
<message>
<source>Invalid compression flags length</source>
@@ -3767,7 +3866,7 @@ Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</trans
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>Criptografia de fluxo aleatório interno inválido</translation>
+ <translation>Cifra de fluxo aleatório interno inválido</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3778,10 +3877,10 @@ Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</trans
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>O arquivo selecionado é um banco de dados antigo do KeePass 1 (.kdb)
+ <translation>O arquivo selecionado é um velho banco de dados do KeePass 1 (.kdb)
-Você pode importá-lo clicando em Banco de Dados &gt; &quot;Importar banco de dados do KeePass 1...&quot;
-Isto é uma migração de caminho único. Você não poderá abrir o banco de dados importado com a versão antiga do KeePassX 0.4.</translation>
+Você pode importá-lo clicando em Banco de Dados &gt; &quot;Importar banco de dados do KeePss 1...&quot;
+Isto é uma migração de caminho único. Você não poderá abrir o banco de dados importado com a velha versão KeePassX 0.4.</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
@@ -3789,7 +3888,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Tamanho de criptografia uuid inválida: %1 (tamanho=%2)</translation>
+ <translation>Tamanho de cifra uuid inválida: %1 (tamanho=%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
@@ -3828,7 +3927,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Número inválido de ícones de grupo</translation>
+ <translation>Número do grupo de ícone inválido</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
@@ -3840,7 +3939,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da
</message>
<message>
<source>No group uuid found</source>
- <translation>Nenhum uuid de grupo encontrado</translation>
+ <translation>Nenhum grupo uuid encontrado</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
@@ -3856,7 +3955,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Entrada de número de ícone inválida</translation>
+ <translation>Item inválido número de ícone</translation>
</message>
<message>
<source>History element in history entry</source>
@@ -3868,19 +3967,15 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da
</message>
<message>
<source>History element with different uuid</source>
- <translation>Elemento de histórico com uuid diferente</translation>
+ <translation>Elemento de história com diferente uuid</translation>
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Atributo personalizado duplicado encontrado</translation>
+ <translation>Atributo customizado duplicado encontrado</translation>
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Entrada de chave ou valor ausente</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Anexo duplicado encontrado</translation>
+ <translation>Chave de cadeia de caracteres de entrada ou valor ausente</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
@@ -3929,6 +4024,29 @@ Linha %2, coluna %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Estrutura inválida do arquivo de configurações do KeeAgent.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>A chave privada é um anexo, mas nenhum anexo foi fornecido.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>A chave privada está vazia</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Este arquivo é muito grande para ser uma chave privada</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Falha ao abrir chave privada</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3976,11 +4094,11 @@ Linha %2, coluna %3</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Tamanho de semente de transformação inválido</translation>
+ <translation>Tamanho de sementes de transformação inválido</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>Número inválido de rodadas de transformação</translation>
+ <translation>Número inválido de ciclos de transformção</translation>
</message>
<message>
<source>Unable to construct group tree</source>
@@ -3991,100 +4109,96 @@ Linha %2, coluna %3</translation>
<translation>Raíz</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave mestre</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Transformação de chave falhou</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>Tipo de número do campo de grupo inválido</translation>
+ <translation>Grupo inválido número do tipo de campo</translation>
</message>
<message>
<source>Invalid group field size</source>
- <translation>Tamanho do campo de grupo inválido</translation>
+ <translation>Tamanho do campo Grupo inválido</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
- <translation>Leitura dos dados do campo de grupo não corresponde com o tamanho</translation>
+ <translation>Leitura de grupo dados do campo não correspondem em tamanho</translation>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation>Tamanho de campo do id do grupo incorreto</translation>
+ <translation>Tamanho de campo de id de grupo incorreto</translation>
</message>
<message>
<source>Incorrect group creation time field size</source>
- <translation>Tamanho do campo de criação de tempo do grupo incorreto</translation>
+ <translation>Grupo incorreto tamanho do campo de hora de criação</translation>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation>Tamanho do campo de modificação do tempo do grupo incorreto</translation>
+ <translation>Grupo incorreto tamanho do campo de hora de modificação</translation>
</message>
<message>
<source>Incorrect group access time field size</source>
- <translation>Tamanho do campo de acesso do tempo do grupo incorreto</translation>
+ <translation>Grupo incorreto tamanho do campo de hora de acesso</translation>
</message>
<message>
<source>Incorrect group expiry time field size</source>
- <translation>Tamanho do campo de expiração do tempo do grupo incorreto</translation>
+ <translation>Grupo incorreto tamanho do campo de hora de expiração</translation>
</message>
<message>
<source>Incorrect group icon field size</source>
- <translation>Tamanho do campo de ícone do grupo incorreto</translation>
+ <translation>Grupo incorreto tamanho do campo de ícone</translation>
</message>
<message>
<source>Incorrect group level field size</source>
- <translation>Tamanho do campo de nível do grupo incorreto</translation>
+ <translation>Grupo incorreto tamanho do campo de nível</translation>
</message>
<message>
<source>Invalid group field type</source>
- <translation>Tipo de campo de grupo inválido</translation>
+ <translation>Grupo incorreto tipo de campo</translation>
</message>
<message>
<source>Missing group id or level</source>
- <translation>Id ou nível do grupo ausente</translation>
+ <translation>Grupo ausente id ou nível </translation>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>Entrada de campo para tipo de número ausente</translation>
+ <translation>Item ausente número do tipo de campo</translation>
</message>
<message>
<source>Invalid entry field size</source>
- <translation>Tamanho de entrada de campo inválido</translation>
+ <translation>Item inválido tamanho do campo</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>Leitura do campo de entrada de dados não corresponde ao tamanho</translation>
+ <translation>Leitura do dados de campo de entrada não correspondem com o tamanho</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Tamanho de campo de entrada uuid inválida</translation>
+ <translation>Item inválido tamanho do campo uuid</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>Tamanho de entrada do campo de id do grupo inválido</translation>
+ <translation>Item inválido tamanho do campo de id de grupo</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation>Tamanho de entrada do campo de ícone inválido</translation>
+ <translation>Item inválido tamanho de campo de ícone</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
- <translation>Tamanho de entrada do campo de criação do tempo inválido</translation>
+ <translation>Item inválido tamanho do campo de hora de criação</translation>
</message>
<message>
<source>Invalid entry modification time field size</source>
- <translation>Tamanho de entrada do campo de modificação do tempo inválido</translation>
+ <translation>Item inválido Tamanho do campo de hora de modificação</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Tamanho de entrada do campo de expiração do tempo inválido</translation>
+ <translation>Tamanho de campo de tempo de expiração entrada inválida</translation>
</message>
<message>
<source>Invalid entry field type</source>
- <translation>Tipo de entrada de campo inválido</translation>
+ <translation>Tipo de campo de entrada inválido</translation>
</message>
<message>
<source>unable to seek to content position</source>
@@ -4096,6 +4210,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Credenciais inválidas foram informadas, por favor tente novamente.
Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Não foi possível calcular a chave do banco de dados</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4191,30 +4309,20 @@ Se este erro ocorrer novamente, seu banco de dados pode estar corrompido.</trans
</message>
<message>
<source>Key File</source>
- <translation>Arquivo-chave</translation>
+ <translation>Arquivo Chave</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Você pode adicionar um arquivo-chave contendo bytes aleatórios para segurança adicional.&lt;/p&gt;&lt;p&gt;Você deve mantê-lo em segredo e nunca perdê-lo ou você será bloqueado!&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Você pode adicionar um arquivo de chave contendo bytes aleatórios para segurança adicional.&lt;/p&gt;&lt;p&gt;Você deve mantê-lo em segredo e nunca perdê-lo ou você será bloqueado!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Formato de arquivo-chave antigo</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Você está usando um formato de arquivo-chave antigo que pode ficar
-sem suporte no futuro.
-
-Por favor, vá para as configurações da senha mestre e gere um novo arquivo-chave.</translation>
+ <translation>Formato de chave antigo</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>Erro ao carregar o arquivo-chave &apos;%1&apos;
+ <translation>Erro ao carregar o arquivo de chave &apos;%1&apos;
Mensagem: %2</translation>
</message>
<message>
@@ -4227,15 +4335,15 @@ Mensagem: %2</translation>
</message>
<message>
<source>Create Key File...</source>
- <translation>Criar arquivo-chave...</translation>
+ <translation>Criar Arquivo-Chave...</translation>
</message>
<message>
<source>Error creating key file</source>
- <translation>Erro ao criar o arquivo-chave</translation>
+ <translation>Erro ao criar o arquivo de chave</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>Não foi possível criar arquivo-chave: %1</translation>
+ <translation>Não foi possível criar arquivo de chave: %1</translation>
</message>
<message>
<source>Select a key file</source>
@@ -4279,6 +4387,17 @@ Are you sure you want to continue with this file?</source>
<translation>O arquivo-chave escolhido parece com um arquivo de banco de dados. Um arquivo-chave deve ser um arquivo estático que nunca sofrerá mudanças, pois senão você perderá acesso ao seu banco de dados para sempre.
Tem certeza que deseja continuar com este arquivo?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Você está usando um formato de arquivo de chave legado
+que pode perder o suporte no futuro.
+
+Por favor, considere gerar um novo arquivo de chave nas
+configurações de segurança do banco de dados.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4287,18 +4406,10 @@ Tem certeza que deseja continuar com este arquivo?</translation>
<translation>Banco de &amp;dados</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Bancos de dados recentes</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Ajuda</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntradas</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupos</translation>
</message>
@@ -4315,46 +4426,10 @@ Tem certeza que deseja continuar com este arquivo?</translation>
<translation>&amp;Sobre</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Abrir banco de dados...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Salvar banco de dados</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Fechar banco de dados</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Apagar entrada</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Editar grupo</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>A&amp;pagar grupo</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Sal&amp;var banco de dados como...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Configurações do Banco de Dados</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clonar entrada</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copiar n&amp;ome de usuário</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copiar nome de usuário para área de transferência</translation>
</message>
@@ -4367,10 +4442,6 @@ Tem certeza que deseja continuar com este arquivo?</translation>
<translation>&amp;Configurações</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Trancar banco de dados</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Título</translation>
</message>
@@ -4395,14 +4466,6 @@ Tem certeza que deseja continuar com este arquivo?</translation>
<translation>Copiar notas para a área de transferência</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportar para arquivo CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configurar TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copiar &amp;TOTP</translation>
</message>
@@ -4447,10 +4510,6 @@ Esta versão não se destina ao uso em produção.</translation>
<translation>&amp;Doar</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Reportar um &amp;bug</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>AVISO: Sua versão do Qt pode fazer com que o KeePassXC trave com um teclado na tela!
@@ -4461,98 +4520,42 @@ Recomendamos que você use o AppImage disponível em nossa página de downloads.
<translation>&amp;Importar</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copiar at&amp;ributo...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Novo banco de dados...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Criar um banco de dados</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Mesclar do banco de dados...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Mesclar de outro banco de dados KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nova entrada</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Adicionar uma nova entrada</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Editar entrada</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Exibir ou editar entrada</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Novo grupo</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Adicionar a um novo grupo</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>M&amp;udar chave mestra</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Configurações do banco de dados...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copiar &amp;senha</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
- <translation>Executar Auto-&amp;Digitar</translation>
+ <translation>Executar &amp;Auto Digitação</translation>
</message>
<message>
<source>Open &amp;URL</source>
<translation>Abrir &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Banco de dados do KeePass 1...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importar banco de dados do KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Arquivo CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importar arquivo CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Mostrar TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Exibir QR Code do TOTP...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOTA: Você está usando uma versão de pré-lançamento do KeePassXC!
@@ -4575,14 +4578,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>&amp;Exportar</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Verificar por atualizações...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>&amp;Baixar todos os favicons</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Organizar &amp;A-Z</translation>
</message>
@@ -4595,48 +4590,290 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>&amp;Gerador de senhas</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Baixar favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importar cofre 1Password</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportar para arquivo HTML...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Começando</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>Cofre 1Password...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Guia do usuário</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importar cofre 1Password</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Atalhos no teclado</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Começando</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Banco de Dados Recentes</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Abrir PDF de Guia para Começar</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Entradas</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Ajuda &amp;Online...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Copiar At&amp;ributo</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Ir para documentação online (abrirá navegador)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Guia do usuário</translation>
+ <source>View</source>
+ <translation>Ver</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Abrir PDF do Guia do Usuário</translation>
+ <source>Theme</source>
+ <translation>Tema</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Atalhos no teclado</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Checar Atualizações</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Abrir Banco de Dados...</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Salvar Banco de Dados</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Fechar Banco de Dados</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Novo Banco de Dados...</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Mesclar do Banco de Dados...</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nova Entrada...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Editar Entrada…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Excluir Entrada…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Novo Grupo…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Editar Grupo</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Excluir Grupo...</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Baixar Todos &amp;Favicons...</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Sal&amp;var Banco de Dados Como...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>&amp;Segurança do Banco de Dados...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>&amp;Relatórios do Banco de Dados...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Estatísticas, verificação de saúde, etc.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Configurações do Banco de &amp;Dados...</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Clonar Entrada...</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Mover para &amp;cima</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Mover entrada um passo para cima</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Move para &amp;baixo</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Mover entrada um passo para baixo</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Copiar &amp;Nome de Usuário</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Copiar &amp;Senha</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Baixar &amp;Favicon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Bloquear Banco de Dados</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>Arquivo &amp;CSV...</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>Arquivo &amp;HTML...</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>Banco de dados do KeePass 1...</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>Cofre do 1Password...</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>Arquivo CSV...</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Mostrar TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Exibir QR Code</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Configurar TOTP</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Reportar um &amp;Bug</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>Abra o Guia de Introdução</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Ajuda Online</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>Ir para documentação online</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Abrir Guia do Usuário</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Salvar Backup do Banco de Dados...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Adicionar chave ao Agente SSH</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Remover a chave do agente SSH</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Modo Compacto</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Claro</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Escuro</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Clássico (nativo da plataforma)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Exibir Barra de Ferramentas</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Exibir Painel de Prévia</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Não exibir novamenete para esta versão</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Reiniciar Aplicativo?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Você precisa reiniciar o aplicativo para aplicar esta configuração. Você gostaria de reiniciar agora?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Configurações do Banco de Dados</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Editar configurações de banco de dados</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Destrancar banco de dados</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Destranque o banco de dados para mostrar mais informações</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Trancar Banco de Dados</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Desconectar</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Desconectar este aplicativo</translation>
</message>
</context>
<context>
@@ -4667,11 +4904,11 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>Reaplicar entrada alvo antiga em cima da fonte nova %1 [%2]</translation>
+ <translation>Reaplicar entradas alvo antigas em cima da fonte nova %1 [%2]</translation>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>Reaplicar entrada de fonte antiga em cima do alvo novo %1 [%2]</translation>
+ <translation>Reaplicar fonte alvo antiga em cima do alvo novo %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
@@ -4725,42 +4962,42 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Assistente</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Configurações de &amp;criptografia</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados.</translation>
</message>
<message>
<source>Advanced Settings</source>
- <translation>Configurações avançadas</translation>
+ <translation>Definições avançadas</translation>
</message>
<message>
<source>Simple Settings</source>
- <translation>Configurações básicas</translation>
+ <translation>Definições básicas</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Configurações de criptografia</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Credenciais do Banco de Dados</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Um conjunto de credenciais conhecidas apenas por você que protege seu banco de dados.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Chave mestra do banco de dados</translation>
+ <source>Encryption Settings</source>
+ <translation>Definições de cifra</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Uma chave mestra conhecida apenas por você protege seu banco de dados.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados.</translation>
</message>
</context>
<context>
@@ -4775,6 +5012,13 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Gerenciador de Senhas</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4845,7 +5089,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Arquivo-chave inválido. É esperado uma chave OpenSSH</translation>
+ <translation>Arquivo chave inválido, é esperado uma chave OpenSSH</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
@@ -4857,11 +5101,11 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Key file way too small.</source>
- <translation>O arquivo-chave é muito pequeno.</translation>
+ <translation>O modo do arquivo chave é muito pequeno.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>O id do cabeçalho mágico do arquivo-chave é invalido</translation>
+ <translation>O id do cabeçalho mágico do arquivo chave é invalido</translation>
</message>
<message>
<source>Found zero keys</source>
@@ -4869,11 +5113,11 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Failed to read public key.</source>
- <translation>Falha ao ler chave pública.</translation>
+ <translation>Falha ao ler chave pública</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>Arquivo-chave corrompido. Leitura da chave privada falhou</translation>
+ <translation>Arquivo chave corrompido, leitura da chave privada falhou</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
@@ -4885,39 +5129,39 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Frase secreta é necessária para descriptografar esta chave</translation>
+ <translation>Senha é necessária para decriptar esta chave</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>A derivação da chave falhou. O arquivo-chave esta corrompido?</translation>
+ <translation>A derivação da chave falhou, o arquivo chave esta corrompido?</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Descriptografia falhou, frase secreta errada?</translation>
+ <translation>Decriptação falhou, senha errada?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>EOF inesperado enquanto lendo a chave pública</translation>
+ <translation>EOF inesperado enquanto lendo a chave pública.</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>EOF inesperado enquanto lendo a chave privada</translation>
+ <translation>EOF inesperado enquanto lendo a chave privada.</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
- <translation>Não é possível escrever a chave pública enquanto estiver vazio</translation>
+ <translation>Não é possível escrever a chave pública enquanto estiver vazio.</translation>
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>EOF inesperado enquanto escrevendo a chave pública</translation>
+ <translation>EOF inesperado enquanto escrevendo a chave pública.</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>Não é possível escrever a chave privada enquanto estiver vazio</translation>
+ <translation>EOF inesperado enquanto escrevendo a chave privada.</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>EOF inesperado enquanto escrevendp a chave privada</translation>
+ <translation>EOF inesperado enquanto escrevendp a chave privada.</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
@@ -4925,11 +5169,11 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Unknown cipher: %1</source>
- <translation>Criptografia desconhecida: %1</translation>
+ <translation>Cifra desconhecida: %1</translation>
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>Criptografia de IV é muito curta para MD5 kdf</translation>
+ <translation>Cifra de IV é muito curta para MD5 kdf</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
@@ -4950,12 +5194,24 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<source>Passwords match so far</source>
<translation>Senhas não coincidem até agora</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Alternar Senha (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Gerar Senha (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Alerta: Caps Lock habilitado!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>Digite a senha:</translation>
+ <translation>Insira senha:</translation>
</message>
<message>
<source>Confirm password:</source>
@@ -4974,25 +5230,13 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Senha não corresponde.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Gerar senha mestra</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo de senha</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da senha</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Repetir campo de senha</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Alternar gerador de senha</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5001,10 +5245,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Senha:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>força</translation>
@@ -5043,7 +5283,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Passphrase</source>
- <translation>Frase secreta</translation>
+ <translation>Senha</translation>
</message>
<message>
<source>Wordlist:</source>
@@ -5054,14 +5294,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Separador de Palavras:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copiar</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Aceitar</translation>
- </message>
- <message>
<source>Close</source>
<translation>Fechar</translation>
</message>
@@ -5158,14 +5390,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Mudar para o modo simples</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Básico</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres para excluir da senha gerada</translation>
</message>
@@ -5186,14 +5410,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Caracteres excluídos: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Número de palavras:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Gerar novamente</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Senha geradas</translation>
</message>
@@ -5242,10 +5458,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Copiar senha</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Aceitar senha</translation>
- </message>
- <message>
<source>lower case</source>
<translation>minúsculo</translation>
</message>
@@ -5258,8 +5470,44 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Caixa do título</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da senha</translation>
+ <source>Generate Password</source>
+ <translation>Gerar Senha</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Escolher também de:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Caracteres adicionais a serem usados para a senha gerada</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Caracteres adicionais</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Número de Palavras:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Aplicar Senha</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Regenerar senha (%1)</translation>
</message>
</context>
<context>
@@ -5272,6 +5520,58 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<source>Statistics</source>
<translation>Estatísticas</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Senha muito fraca</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>A entropia da senha é de %1 bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Senha fraca</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Usada em %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>A senha foi usada %1 vezes</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Senha expirou</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>A expiração da senha foi %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>A senha está prestes a expirar</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>A senha expira em %1 dias</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>A senha irá expirar em breve</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>A senha expira em %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Verificação de Saúde</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5289,7 +5589,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Empty</source>
- <translation>Esvaziar</translation>
+ <translation>Vazio</translation>
</message>
<message>
<source>Remove</source>
@@ -5305,7 +5605,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Merge</source>
- <translation>Mesclar</translation>
+ <translation>Fundir</translation>
</message>
<message>
<source>Continue</source>
@@ -5336,7 +5636,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>Associação KeePassXC falhou, tente novamente</translation>
+ <translation>KeePassXC associação falhou, tente novamente</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5368,7 +5668,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
</message>
<message>
<source>Path of the database.</source>
- <translation>Caminho do banco de dados.</translation>
+ <translation>Caminho do banco de dados</translation>
</message>
<message>
<source>Key file of the database.</source>
@@ -5411,10 +5711,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<translation>Caminho da entrada para adicionar.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copiar a senha de uma entrada para a área de transferência.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Caminho da entrada para copiar.</translation>
@@ -5456,9 +5752,9 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Aviso: Você está usando um formato de arquivo-chave antigo que pode perder o suporte no futuro.
+ <translation>Aviso: Você está usando um formato de arquivo de chave legado que pode tornar-se sem suporte no futuro.
-Por favor, considere gerar um novo arquivo-chave.</translation>
+Por favor, considere gerar um novo arquivo de chave.</translation>
</message>
<message>
<source>
@@ -5492,11 +5788,11 @@ Comandos disponíveis:
</message>
<message>
<source>Merge two databases.</source>
- <translation>Mesclar dois bancos de dados.</translation>
+ <translation>Juntar dois bancos de dados.</translation>
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>Caminho do banco de dados para mesclar como base.</translation>
+ <translation>Caminho do banco de dados para combinar como base.</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
@@ -5504,7 +5800,7 @@ Comandos disponíveis:
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation>Arquivo-chave do banco de dados para mesclar como base.</translation>
+ <translation>Arquivo de chave do banco de dados para combinar como base.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
@@ -5571,24 +5867,16 @@ Comandos disponíveis:
<translation>Integração com o Navegador</translation>
</message>
<message>
- <source>Press</source>
- <translation>Aperte</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passivo</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agente SSH</translation>
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
- <translation>Gere uma frase secreta diceware aleatória novamente.</translation>
+ <translation>Gere uma senha aleatória diceware novamente.</translation>
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>Contagem de palavra para a frase secreta diceware.</translation>
+ <translation>Contagem de palavra para a frase-chave diceware.</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
@@ -5617,32 +5905,20 @@ Comandos disponíveis:
<translation>Entrada adicionada com sucesso %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copie o TOTP atual para a área de transferência.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Valor de tempo limite inválido %1.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
- <translation>Entrada %1 não encontrada.</translation>
+ <translation>Entrada%1 não encontrada.</translation>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Entrada com caminho %1 não tem configuração TOTP</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>A atual entrada TOTP foi copiada para a área de transferência!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Entrada da senha copiada para a área de transferência!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Limpando a prancheta em %1 segundo (s)...</numerusform><numerusform>Limpando a área de transferência em %1 segundo(s)...</numerusform></translation>
+ <translation><numerusform>Limpando a área de transferência em %1 segundo(s)...</numerusform><numerusform>Limpando a área de transferência em %1 segundo(s)...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5650,7 +5926,7 @@ Comandos disponíveis:
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation>Perguntar por senha em silêncio e outras saídas secundárias.</translation>
+ <translation>Pergunta por senha em silêncio e outras saídas secundárias.</translation>
</message>
<message>
<source>count</source>
@@ -5703,7 +5979,7 @@ Comandos disponíveis:
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>Tipo: Dicionário+Leet</translation>
+ <translation>Tipo: Dict+leet</translation>
</message>
<message>
<source>Type: User Words</source>
@@ -5779,7 +6055,7 @@ Comandos disponíveis:
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation>Falha ao carregar o arquivo-chave %1: %2</translation>
+ <translation>Falha ao carregar o arquivo de chave %1: %2</translation>
</message>
<message>
<source>Length of the generated password</source>
@@ -5828,7 +6104,7 @@ Comandos disponíveis:
<message>
<source>Error reading merge file:
%1</source>
- <translation>Erro ao ler arquivo de mesclagem:
+ <translation>Erro ao ler arquivo para fundir:
%1</translation>
</message>
<message>
@@ -5837,7 +6113,7 @@ Comandos disponíveis:
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>Não foi possível salvar banco de dados no arquivo: %1</translation>
+ <translation>Não foi possível salvar bando de dados no arquivo: %1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
@@ -5849,7 +6125,7 @@ Comandos disponíveis:
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation>Mostrar o TOTP da entrada atual.</translation>
+ <translation>Mostrar o TOTP atual da entrada.</translation>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
@@ -5860,10 +6136,6 @@ Comandos disponíveis:
<translation>Nenhum programa definido para manipulação da área de transferência</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Não é possível iniciar o programa %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>arquivo vazio</translation>
</message>
@@ -5872,18 +6144,6 @@ Comandos disponíveis:
<translation>%1: (linha, coluna) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 bits</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 bits</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 bits</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recomendado)</translation>
</message>
@@ -5923,7 +6183,7 @@ Comandos disponíveis:
</message>
<message>
<source>Loading the key file failed</source>
- <translation>O carregamento do arquivo-chave falhou</translation>
+ <translation>O carregamento do arquivo de chave falhou</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
@@ -5939,11 +6199,11 @@ Comandos disponíveis:
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation>Criação de arquivo-chave %1 falhou: %2</translation>
+ <translation>Criação de Arquivo-Chave %1 falhou: %2</translation>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>Carregamento de arquivo-chave %1 falhou: %2</translation>
+ <translation>Carregamento de Arquivo-Chave %1 falhou: %2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
@@ -6134,10 +6394,6 @@ Kernel: %3 %4</translation>
<translation>Mostrar esta ajuda.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Campo Yubikey usado para encriptar o banco de dados.</translation>
- </message>
- <message>
<source>slot</source>
<translation>campo</translation>
</message>
@@ -6154,10 +6410,6 @@ Kernel: %3 %4</translation>
<translation>Sair do modo interativo.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formato usado quando exportando. Escolhas disponíveis são xml ou csv. O padrão é xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exportar o conteúdo do banco de dados para um padrão de saída no formato especificado.</translation>
</message>
@@ -6198,10 +6450,6 @@ Kernel: %3 %4</translation>
<translation>Caminho do novo banco de dados.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Não foi possível importar o banco de dados XML exportado %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Banco de dados importado com sucesso.</translation>
</message>
@@ -6227,7 +6475,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>Banco de dados não foi modificado pela operação de mesclagem.</translation>
+ <translation>O banco de dados não foi modificado pela operação de mesclagem.</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6294,10 +6542,6 @@ Kernel: %3 %4</translation>
<translation>Campo YubiKey inválido %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Por favor toque no botão no seu YubiKey para destrancar %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Digite a senha para encriptar seu banco de dados (opcional):</translation>
</message>
@@ -6313,13 +6557,9 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation>Nome de usuário</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Reposta desafio - Campo %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Senha para &apos;%1&apos; foi vazada %2 tempo (s)!</numerusform><numerusform>Senha para &apos;%1&apos; foi vazada %2 vezes(s)!</numerusform></translation>
+ <translation><numerusform>A senha para &apos;%1&apos; foi vazada %2 vez(es)!</numerusform><numerusform>A senha para &apos;%1&apos; foi vazada %2 vez(es)!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6329,6 +6569,193 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Mostrar os atributos protegidos como texto legível.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Falha no Plugin do Navegador</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Não foi possível salvar o arquivo de script do sistema de mensagens nativo para %1</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Copie o atributo fornecido para a área de transferência. O padrão é &quot;senha&quot;, se não especificado.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Copia o TOTP atual para a área de transferência (equivalente a &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Copia um atributo da entrada para a área de transferência.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>ERRO: Por favor, especifique um de --attribute ou --totp, não ambos.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>ERRO: o atributo %1 é ambíguo, corresponde a %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Atributo &quot;%1&quot; não encontrado</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Atributo &quot;%1&quot; da entrada copiado para a área de transferência!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Slot Yubikey e serial opcional usado para acessar o banco de dados (por exemplo: 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>slot[:serial]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Tempo de descriptografia de destino em MS para o banco de dados.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>tempo</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Define o arquivo-chave para o banco de dados.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Define uma senha para o banco de dados.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Tempo de descriptografia inválido %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>O tempo de descriptografia de destino deve ser entre %1 e %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Falha ao definir a senha do banco de dados.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Função de derivação de chave de benchmarking para atraso de %1 ms.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Configurando %1 rodadas para a função de derivação de chave.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>erro ao definir configurações de derivação da chave do banco de dados.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Formato usado ao exportar. Escolhas disponíveis são &apos;xml&apos; ou &apos;csv&apos;. O padrão é &apos;xml&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Não foi possível importar banco de dados XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Mostra as informações de um banco de dados.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Descrição:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Cifra: </translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>A Lixeira está habilitada.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>A Lixeira não está habilitada.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Comando inválido: %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Serial YubiKey inválido %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Por favor, pressione o botão em seu YubiKey para continuar...</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Você deseja criar um banco de dados com uma senha vazia? [S/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Repetir senha:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Erro: as senhas não correspondem.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Todos os programas de recorte falharam. Tentativas: %1</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 rodadas)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 rodadas, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Atraso de benchmark %1</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6365,6 +6792,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Exibir também entradas que foram excluídas dos relatórios</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Passe o mouse sobre o motivo para mostrar detalhes adicionais. Clique duas vezes nas entradas para editar.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Ruim</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Ruim — a senha precisa ser mudada</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Pobre</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Pobre — a senha precisa ser mudada</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Fraco</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Fraca — considere mudar a senha</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Excluída)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Esta entrada está sendo excluída dos relatórios</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Por favor espere, os dados de saúde estão sendo calculados...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Parabéns, tudo está saudável!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Caminho</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Pontuação</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Motivo</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Editar Entrada...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Excluir dos relatórios</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>CUIDADO: Este relatório requer o envio de informações para o serviço online Have I Been Pwned (https://haveibeenpwned.com). Se você prosseguir, as senhas do banco de dados serão criptografadas e os cinco primeiros caracteres desses hashes serão enviados com segurança para este serviço. Seu banco de dados permanece seguro e não pode ser reconstituído com essas informações. No entanto, o número de senhas enviadas e o seu endereço IP serão expostos a este serviço.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Executar Análise Online</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Exibir também entradas que foram excluídas dos relatórios</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Esta versão do KeePassXC não possui funções de rede. A rede é necessária para verificar suas senhas no banco de dados do Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Parabéns, nenhuma senha expostas!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Caminho</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Senha exposta...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Excluída)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Esta entrada está sendo excluída dos relatórios</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>uma vez</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>acima de 10 vezes</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>acima de 100 vezes</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>acima de 1000 vezes</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>acima de 10000 vezes</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>acima de 100000 vezes</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>acima de um milhão de vezes</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>milhões de vezes</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Editar Entrada...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Excluir dos relatórios</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Passe o mouse por cima dos ícones de erro para maiores informações.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Por favor espere, as estatísticas do banco de dados estão sendo calculadas...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nome do banco de dados</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descrição</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Localização</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Salvo por último em </translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Mudanças não-salvas</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>sim</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>não</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>O banco de dados foi modificado, mas as mudanças ainda não foram salvas no disco.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Número de grupos</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Número de entradas</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Número de entradas expiradas</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>O banco de dados contém entradas que expiraram.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Senhas únicas</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Senhas não-únicas</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Mais que 10% das senhas estão sendo reutilizadas. Use senhas únicas quando possível.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Máximo de reusos da senha</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Algumas senhas são usadas mais do que três vezes. Use senhas únicas quando possível.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Números de senhas pequenas</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Comprimento mínimo recomendado de senha é pelo menos 8 caracteres.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Número de senhas fracas</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Recomendamos o uso de senhas longas e randomizados com uma classificação de &apos;bom&apos; ou &apos;excelente&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Entradas excluídas dos relatórios</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Excluindo entradas de relatórios. Por exemplo: porque elas têm uma senha ruim, não é necessariamente um problema, mas você deve ficar de olho nelas.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Comprimento médio da senha</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caracteres</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>O tamanho médio das senhas é menor que dez caracteres. Senhas maiores são mais seguras.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6398,6 +7109,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Uma solicitação de confirmação não é suportado pelo agente (verificar opções).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Conflito de propriedade da identidade principal. Recusando-se a adicionar.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Nenhum agente em execução, não é possível listar identidades.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6505,26 +7224,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se a lixeira estiver habilitado para o banco de dados, as entradas serão movidas para a lixeira diretamente. Por outro lado, elas serão apagadas sem confirmação.&lt;/p&gt;&lt;p&gt;Você irá ser alertado se alguma entrada for referenciada por outras.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Não confirmar quando entradas são deletadas pelos clientes.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Grupos do banco de dados exposto:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nome do arquivo</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupo</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Gerenciar</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorização</translation>
</message>
@@ -6533,40 +7236,20 @@ Kernel: %3 %4</translation>
<translation>Esses aplicativos estão atualmente conectados:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplicativo</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Não confirmar quando entradas são excluídas por clientes</translation>
</message>
<message>
- <source>Disconnect</source>
- <translation>Desconectar</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Erro:&lt;/b&gt; Falha na conexão com o DBus. Por favor, verifique sua configuração do DBus.</translation>
</message>
<message>
- <source>Database settings</source>
- <translation>Configurações do Banco de Dados</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Aviso:&lt;/b&gt; </translation>
</message>
<message>
- <source>Edit database settings</source>
- <translation>Editar configurações de banco de dados</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Destrancar banco de dados</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Destranque o banco de dados para mostrar mais informações</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>Trancar Banco de Dados</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>Destrancar para mostrar</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Nada</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Salve as alterações atuais para ativar o plugin e ativar a edição desta seção.</translation>
</message>
</context>
<context>
@@ -6645,7 +7328,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Impressão digital</translation>
+ <translation>Fingerprint</translation>
</message>
<message>
<source>Certificate</source>
@@ -6670,7 +7353,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>KeeShare key file</source>
- <translation>Arquivo-chave KeeShare</translation>
+ <translation>Arquivo chave KeeShare</translation>
</message>
<message>
<source>All files</source>
@@ -6839,10 +7522,6 @@ Kernel: %3 %4</translation>
<translation>Importação assinada bem-sucedida</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Erro inesperado</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Compartilhamento não assinado de recipiente não é suportado - importação impedida</translation>
</message>
@@ -6898,7 +7577,7 @@ Kernel: %3 %4</translation>
<name>TotpDialog</name>
<message>
<source>Timed Password</source>
- <translation>Senha temporária</translation>
+ <translation>Senha Temporária</translation>
</message>
<message>
<source>000000</source>
@@ -6910,7 +7589,7 @@ Kernel: %3 %4</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Expira em &lt;b&gt;%n&lt;/b&gt; segundo (s)</numerusform><numerusform>Expira em &lt;b&gt;%n&lt;/b&gt; segundo(s)</numerusform></translation>
+ <translation><numerusform>Expira em &lt;b&gt;%n&lt;/b&gt; segundo(s)</numerusform><numerusform>Expira em &lt;b&gt;%n&lt;/b&gt; segundo(s)</numerusform></translation>
</message>
</context>
<context>
@@ -6926,7 +7605,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation>Ocorreu um erro ao criar o QR Code.</translation>
+ <translation>Ocorreu um erro ao criar o código QR.</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
@@ -7012,6 +7691,13 @@ Exemplo: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL inválida</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7102,6 +7788,53 @@ Exemplo: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Slot Configurado - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Resposta do Desafio - Slot %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Aperte</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passivo</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>Slot inválido do %1 especificado - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>A interface do YubiKey não foi inicializada.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>A chave de hardware está atualmente em uso.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Não foi possível encontrar a chave de hardware com o número de série %1. Por favor, conecte-o para continuar.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Chave de hardware atingiu o tempo limite aguardando interação do usuário.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Ocorreu um erro de USB ao acessar a chave de hardware: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Falha ao completar o desafio-resposta, o erro específico foi: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7116,14 +7849,6 @@ Exemplo: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Se você possui uma &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, você pode usá-la para segurança adicional.&lt;/p&gt;&lt;p&gt;A YubiKey requer que um de seus slots seja programado como &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Desafio-Resposta&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nenhuma YubiKey detectada, verifique se está conectada.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Nenhuma YubiKey inserida.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Atualizar os tokens de hardware</translation>
</message>
@@ -7131,5 +7856,21 @@ Exemplo: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Seleção de campo de chave de hardware</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Não foi possível encontrar nenhuma chave de hardware!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>O slot de chave de hardware selecionado não suporta resposta a desafios!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detectando chaves de hardware...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nenhuma chave física detectada</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_pt_PT.ts b/share/translations/keepassx_pt_PT.ts
index dc6f6ad5f..8a9fc92ab 100644
--- a/share/translations/keepassx_pt_PT.ts
+++ b/share/translations/keepassx_pt_PT.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Ativar agente SSH (tem que reiniciar)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Utilizar OpenSSH para Windows em vez de Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Ativar integração de agente SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Valor SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>Substituição SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(vazio)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Não existe um &apos;socket&apos; do agente SSh. Certifique-se que a variável de ambiente SSH_AUTH_SOCK existe ou defina uma sobreposição.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Ligação ao agente SSH a funcionar!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Tem a certeza de que deseja repor todas as definições para os valores padrão?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monocromático (claro)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monocromático (escuro)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Colorido</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Gestão de ficheiros</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Guardar bases de dados em segurança (pode ser incompatível com DropBox e outros serviços)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Criar backup da base de dados antes de guardar</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Guardar automaticamente ao fechar</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Não marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Recarregar base de dados se esta for modificada externamente</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Utilizar ícone do grupo ao criar a entrada</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Ocultar painel de pré-visualização de entradas</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Geral</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Ocultar barra de ferramentas (ícones)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimizar aplicação em vez de fechar</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Mostrar ícone na bandeja do sistema</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Ícone escuro na bandeja</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Ao minimizar, ocultar janela na bandeja do sistema</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Perguntar antes de executar a escrita automática</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Atalho global para escrita automática</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Atraso para digitar a escrita automática</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Atraso para iniciar a escrita automática</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Barra de ferramentas amovível</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Incluir versões beta ao procurar por atualizações</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Estilo dos botões:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Idioma:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Estilo dos botões da barra de ferramentas</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Utilizar letra mono-espaçada nas notas</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Seleção de idioma</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Repor definições padrão</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Atalho global para escrita automática</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Atraso para iniciar a escrita automática (milissegundos)</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Iniciar KeePassXc ao arrancar o sistema</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Guardar bases de dados em segurança (desative se ocorrerem erros com Dropbox e outros serviços)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Interface</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Estilo dos botões da barra de ferramentas:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Utilizar letra mono-espaçada para as notas</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Ícone na bandeja:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Repor definições padrão...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Atraso para digitar a escrita automática:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Atalho global para escrita automática:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Atraso para iniciar a escrita automática:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Bloquear novamente a base de dados depois de usar a escrita automática</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Não pedir repetição de palavra-passe se esta estiver visível</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Não ocultar palavras-passe durante a edição</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Não utilizar marcadores de posição para campos vazios</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Ocultar palavras-passe no painel de pré-visualização de entradas</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Limpar campo de pesquisa após</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Pedir repetição de palavra-passe mesmo se visível</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Ocultar palavras-passe durante a edição</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Utilizar marcadores de posição para campos vazios</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser - Confirmar acesso</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Pedido de acesso</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 está a solicitar acesso às seguintes entradas:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Memorizar esta escolha</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Memorizar acesso às entradas marcadas</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Permitir</translation>
+ <source>Remember</source>
+ <translation>Memorizar</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Recusar</translation>
+ <source>Allow access to entries</source>
+ <translation>Permitir acesso às entradas</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 solicitou o acesso a palavras-passe para o(s) seguinte(s) itens.
-Selecione se deseja permitir o acesso.</translation>
+ <source>Allow Selected</source>
+ <translation>Permitir selecionados</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Permitir acesso</translation>
+ <source>Deny All</source>
+ <translation>Recusar tudo</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Recusar acesso</translation>
+ <source>Disable for this site</source>
+ <translation>Desativar para este site</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Caixa de diálogo</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Pedido de associação da nova chave</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Necessário para aceder às suas bases de dados com KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Guardar e permitir acesso</translation>
</message>
<message>
- <source>General</source>
- <translation>Geral</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Substituir chave existente?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Ativar integração para estes navegadores:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Já existe uma chave de cifra partilhada com o nome &quot;%1&quot;.
+Deseja substituir a chave existente?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Atualizar entrada</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Deseja atualizar as informações em %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Abortar</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>A converter atributos para dados personalizados...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Mostrar &amp;notificação se as credenciais forem solicitadas</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Atributos KeePassHTTP convertidos</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Pe&amp;dir para desbloquear a base de dados se esta estiver bloqueada</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Convertidos com sucesso s atributos para %1 entrada(s).
+%2 chaves movidas para dados personalizados.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n chave movida para dados personalizados.</numerusform><numerusform>%n chaves movidas para dados personalizados.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Devolver apenas as entradas com o mesmo esquema (http://, https://, ...)</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Não existem entradas com atributos KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Correspondência com os esque&amp;mas URL (https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>A base de dados ativa não tem entradas com atributos KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Devolver apenas as melhores entradas para o URL específico em vez das entradas para o domínio</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Detetadas definições de integração legada com o navegador</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Devolve&amp;r apenas as credenciais mais parecidas</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Criar um novo grupo</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar por título as credenciais coi&amp;ncidentes</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Recebido um pedido para a criação do grupo &quot;%1&quot;.
+Deseja criar este grupo?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ordenar por nome de &amp;utilizador as credenciais coincidentes</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Tem que mover as definições KeePassXC-Browser para as definições da base de dados.
+Este procedimento é necessário para manter as ligações existentes.
+Gostaria de migrar agora as definições?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avançado</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Não mostrar novamente</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nunc&amp;a perguntar antes de aceder às credenciais</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Recebeu um pedido de associação para a base de dados abaixo:
+%1
+
+Indique um nome ou ID exclusivo para a ligação como, por exemplo:
+chrome-laptop</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nun&amp;ca perguntar antes de atualizar as credenciais</translation>
+ <source>Dialog</source>
+ <translation>Caixa de diálogo</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Pesquisar por credenciais semel&amp;hantes em todas as base de dados abertas</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Necessário para aceder às suas bases de dados com KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>A criação ou atualização dos campos de cadeias não é suportada.</translation>
+ <source>Enable browser integration</source>
+ <translation>Ativar integração com o navegador</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Most&amp;rar campos avançados que começem com &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Geral</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Ao iniciar, atualizar automaticamente o caminho do KeePassXC ou do binário keepassxc-proxy para os &apos;sripts&apos; nativos de mensagens.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Ainda não existe suporte a navegadores no formato Snap.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Ao iniciar, atualizar ficheiros de mensagens &amp;nativas</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Ativar integração para estes navegadores:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Suporte à utilização de uma aplicação proxy entre o KeePassXC a a extensão do navegador.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Utilizar uma aplicação de &amp;proxy entre o KeePassXC e a extensão do navegador</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Utilize um proxy personalizado caso o tenha instalado manualmente.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Utilizar pro&amp;xy personalizado</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Explorar...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Aviso&lt;/b&gt;: as opções seguintes podem ser perigosas!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Selecione a localização do proxy personalizado</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Navegador &amp;Tor</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Mostrar notificação se as credenciais forem solicitadas</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Ficheiros executáveis</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Pedir para desbloquear a base de dados se esta estiver bloqueada</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Todos os ficheiros</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Devolver apenas as entradas com o mesmo esquema (http://, https://, ...)</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Não pedir permissão para autorização &amp;básica HTTP</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Correspondência com os esquemas URL (https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Devido a &apos;Snap sandboxing&apos;, tem que executar um script para ativar a integração com o navegador.&lt;br /&gt;Pode obter o script em %1.</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Devolver apenas as melhores entradas para o URL específico em vez das entradas para o domínio</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Por favor consulte abaixo as instruções para a utilização da extensão</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Devolver apenas as credenciais mais parecidas</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Necessita de KeePassXC-Browser para que a integração funcione corretamente.&lt;br /&gt;Disponível para %1 e para %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Devolve as credenciais caducadas. Adiciona [caducada] ao título.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Permitir devolução de credencias caducadas</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Devolve as credenciais caducadas. Adiciona [caducada] ao título.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Todas as bases de dados conectadas à extensão devolverão as credenciais coincidentes.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>Permitir devolução de credencias caduc&amp;adas</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Pesquisar por credenciais semelhantes em todas as base de dados abertas</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Ativar integração com o navegador</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordenar por título as credenciais coincidentes</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Ainda não existe suporte a navegadores no formato Snap.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ordenar por nome de utilizador as credenciais coincidentes</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Todas as bases de dados conectadas à extensão devolverão as credenciais coincidentes.</translation>
+ <source>Advanced</source>
+ <translation>Avançado</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nunca perguntar antes de aceder às credenciais</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nunca perguntar antes de atualizar as credenciais</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Não pedir permissão para autorização HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>A criação ou atualização dos campos de cadeias não é suportada.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Mostrar campos avançados que iniciem com &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Não mostrar janela que sugere a migração das definições KeePassHTTP legadas.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>Não perguntar para migrar as &amp;definições KeePassHTTP</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Não perguntar para migrar as definições KeePassHTTP</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Ao iniciar, atualizar automaticamente o caminho do KeePassXC ou do binário keepassxc-proxy para os &apos;sripts&apos; nativos de mensagens.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Ao iniciar, atualizar ficheiros de mensagens nativas</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Utilize um proxy personalizado caso o tenha instalado manualmente.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Utilizar proxy personalizado:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
<translation>Navegador para o ficheiro do proxy personalizado</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Atenção&lt;/b&gt;, a aplicação keepassxc-proxy não foi encontrada!&lt;br /&gt;Verifique o diretório de instalação do KeePassXC ou confirme o caminho nas definições avançadas.&lt;br /&gt;A integração com o navegador não irá funcionar sem esta aplicação.&lt;br /&gt;Caminho esperado: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Explorar...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Pedido de associação da nova chave</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Utilizar localização personalizada para o navegador:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Guardar e permitir acesso</translation>
+ <source>Browser type:</source>
+ <translation>Tipo de navegador:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Substituir chave existente?</translation>
+ <source>Toolbar button style</source>
+ <translation>Estilo dos botões da barra de ferramentas</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Já existe uma chave de cifra partilhada com o nome &quot;%1&quot;.
-Deseja substituir a chave existente?</translation>
+ <source>Config Location:</source>
+ <translation>Localização da configuração:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Atualizar entrada</translation>
+ <source>Custom browser location field</source>
+ <translation>Campo de localização personalizado</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Deseja atualizar as informações em %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Abortar</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Procurar por um caminho personalizado</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>A converter atributos para dados personalizados...</translation>
+ <source>Custom extension ID:</source>
+ <translation>ID da extensão personalizada:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Atributos KeePassHTTP convertidos</translation>
+ <source>Custom extension ID</source>
+ <translation>ID da extensão personalizada</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Convertidos com sucesso s atributos para %1 entrada(s).
-%2 chaves movidas para dados personalizados.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n chave movida para dados personalizados.</numerusform><numerusform>%n chaves movidas para dados personalizados.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Devido a &apos;Snap sandboxing&apos;, tem que executar um script para ativar a integração com o navegador.&lt;br /&gt;Pode obter o script em %1.</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Não existem entradas com atributos KeePassHTTP!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>Necessita de KeePassXC-Browser para que a integração funcione corretamente.&lt;br /&gt; Disponível para %1, %2 e %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>A base de dados ativa não tem entradas com atributos KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Por favor consulte abaixo as instruções para a utilização da extensão</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Detetadas definições de integração legada com o navegador</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Erro:&lt;/b&gt; não foi possível encontrar a localização do proxy!&lt;br/&gt; A integração com o navegador não funcionará sem um proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Criar um novo grupo</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Aviso&lt;/b&gt;: as opções seguintes podem ser perigosas!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Recebido um pedido para a criação do grupo &quot;%1&quot;.
-Deseja criar este grupo?
-</translation>
+ <source>Executable Files</source>
+ <translation>Ficheiros executáveis</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Tem que mover as definições KeePassXC-Browser para as definições da base de dados.
-Este procedimento é necessário para manter as ligações existentes.
-Gostaria de migrar agora as definições?</translation>
+ <source>All Files</source>
+ <translation>Todos os ficheiros</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Não mostrar novamente</translation>
+ <source>Select custom proxy location</source>
+ <translation>Selecione a localização do proxy personalizado</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Recebeu um pedido de associação para a base de dados abaixo:
-%1
-
-Indique um nome ou ID exclusivo para a ligação como, por exemplo:
-chrome-laptop</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Selecione a localização da pasta de mensagens nativas</translation>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-laptop</translation>
<translation>Comentários iniciados por</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Primeiro registo tem nome de campos</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Considerar &apos;\&apos; como carácter de escape</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop</translation>
<translation>Pré-visualização</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Disposição de colunas</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Não existe no ficheiro CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importada de ficheiro CSV</translation>
</message>
@@ -971,14 +1025,6 @@ chrome-laptop</translation>
<translation>Erro</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nome de campo vazio %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>coluna %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Detetado(s) erro(s) no ficheiro CSV!</translation>
</message>
@@ -1008,6 +1054,58 @@ chrome-laptop</translation>
<source>CSV import preview</source>
<translation>Pré-visualização da importação CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Associação de colunas</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Última modificação</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Palavra-passe</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Criada</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notas</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nome de utilizador</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Linhas de cabeçalho ignoradas</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Primeira linha tem nomes de campo</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Inexistente</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Coluna %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,11 +1130,6 @@ chrome-laptop</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Raiz</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Ficheiro %1 não existe.</translation>
</message>
@@ -1078,6 +1171,19 @@ Backup localizado em %2</translation>
<source>Recycle Bin</source>
<translation>Reciclagem</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Palavras-passe</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>A base de dados já está a ser guardada.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Não é possível guardar, base de dados não inicializada!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1131,10 +1237,6 @@ Deve considerar a geração de um novo ficheiro-chave.</translation>
<translation>Não foi possível abrir o ficheiro-chave: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Selecionar &apos;slot&apos;...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Desbloquear base de dados do KeePassXC</translation>
</message>
@@ -1147,14 +1249,6 @@ Deve considerar a geração de um novo ficheiro-chave.</translation>
<translation>Campo Palavra-passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da palavra-passe</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Seleção do ficheiro-chave</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Seleção de &apos;slot&apos; para a chave de hardware</translation>
</message>
@@ -1164,7 +1258,7 @@ Deve considerar a geração de um novo ficheiro-chave.</translation>
</message>
<message>
<source>Browse...</source>
- <translation>Procurar...</translation>
+ <translation>Explorar...</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -1192,7 +1286,7 @@ Deve considerar a geração de um novo ficheiro-chave.</translation>
</message>
<message>
<source>Unlock failed and no password given</source>
- <translation>Não foi possível desbloquear e palavra-passe não introduzida</translation>
+ <translation>Não foi possível desbloquear - palavra-passe não introduzida</translation>
</message>
<message>
<source>Unlocking the database failed and you did not enter a password.
@@ -1219,10 +1313,6 @@ Para impedir que este erro surja novamente, deve aceder a &quot;Definições da
&lt;p&gt;Clique aqui para mais informações.&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Para além da palavra-passe, pode utilizar um ficheiro-chave de modo a aumentar a segurança da sua base de dados. Esse ficheiro-chave pode ser gerado nas definições de segurança da sua base de dados..&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Não&lt;/strong&gt; pode utilizar os ficheiros *.kdbx como ficheiro-chave!&lt;br&gt;Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.&lt;/p&gt;&lt;p&gt;Clique aqui para mais informação.&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Ajuda para ficheiros-chave</translation>
</message>
@@ -1231,10 +1321,6 @@ Para impedir que este erro surja novamente, deve aceder a &quot;Definições da
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Selecione o ficheiro-chave...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Não pode utilizar uma base de dados como ficheiro-chave</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Não pode utilizar o ficheiro da sua base de dados como ficheiro-chave.
Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Para além da palavra-passe, pode utilizar um ficheiro-chave para aumentar a segurança da sua base de dados. Este ficheiro pode ser gerado nas definições de segurança da sua base de dados..&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Não&lt;/strong&gt; pode utilizar ficheiros *.kdbx como ficheiro-chave!&lt;br&gt;Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.&lt;/p&gt;&lt;p&gt;Clique aqui para mais informação.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Ficheiro-chave para desbloquear a base de dados</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Toque no botão da sua YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>A detetar chaves de hardware...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Não foram detetadas chaves de hardware</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Selecione a chave de hardware...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,10 +1377,6 @@ Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</translat
<translation>Segurança</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Chave-mestre</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Definições de cifra</translation>
</message>
@@ -1278,6 +1384,10 @@ Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</translat
<source>Browser Integration</source>
<translation>Integração com navegadores</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Credenciais da base de dados</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</translat
<translation>Definições KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Desconectar de todos os navegadores</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>&amp;Esquecer definições específicas dos sites (nas entradas)</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Mover atributos KeePassHTTP para dados personalizados KeePassX&amp;C-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Chaves guardadas</translation>
</message>
@@ -1405,6 +1503,67 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
<source>Remove selected key</source>
<translation>Remover chave selecionada</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Mover atributos KeePassHTTP para dados personalizados KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Recarregar ID do grupo raiz da base de dados</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Criada</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Recarregar ID da base de dados</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Tem a certeza de que deseja recarregar a ID da base de dados?
+Esta ação apenas será necessária se a sua base de dados for uma cópia de outra e não for possível estabelecer ligação ao navegador.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Adicionar proteção extra...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Palavra-passe não definida</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida!
+
+Tem a certeza de que deseja continuar?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continuar sem palavra-passe</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Chave de cifra não adicionada</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro desconhecido</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Não foi possível alterar as credenciais</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1588,6 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
<translation>Ciclos de transformação:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Testar atraso de 1 segundo</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Utilização de memória:</translation>
</message>
@@ -1453,14 +1608,6 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
<translation>Alterar</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados.</translation>
</message>
@@ -1525,7 +1672,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>Não foi possível transformar a chave com os novos parâmetros KDF; KDF inalterado.</translation>
+ <translation>Não foi possível transformar a chave com os novos parâmetros. KDF inalterado.</translation>
</message>
<message numerus="yes">
<source> MiB</source>
@@ -1537,16 +1684,6 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> processo</numerusform><numerusform> processos</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Alterar tempo para decifrar</translation>
@@ -1579,6 +1716,14 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<source>Parallelism</source>
<translation>Paralelismo</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1732,16 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<translation>Entradas expostas</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Não e&amp;xpor esta base de dados</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Não expor esta base de dados</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Expor entradas existentes neste gr&amp;upo:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Expor entradas existentes neste grupo:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Ative &apos;fd.o Secret Service&apos; para aceder a estas definições.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Ative &apos;Secret Service&apos; para aceder a estas definições.</translation>
</message>
</context>
<context>
@@ -1642,10 +1787,6 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<translation>Definições extra para a base de dados</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Ativar &amp;compressão (recomendado)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Campo Nome da base de dados</translation>
</message>
@@ -1679,6 +1820,10 @@ Esta ação é irreversível.</translation>
<source> (old)</source>
<translation> (antiga)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Ativar compressão (recomendado)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1858,6 @@ Esta ação é irreversível.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Adicionar proteção extra...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Chave de cifra não adicionada</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Palavra-passe não definida</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida!
-
-Tem a certeza de que deseja continuar?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Erro desconhecido</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Não foi possível alterar a chave-mestre</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continuar sem palavra-passe</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1877,6 @@ Tem a certeza de que deseja continuar?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Estatísticas</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Passe com o rato por cima das linhas com o erro para mais informações.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valor</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Nome da base de dados</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Descrição</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Localização</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Última gravação</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Alterações por guardar</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>sim</translation>
- </message>
- <message>
- <source>no</source>
- <translation>não</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>A base de dados foi modificada mas as alterações ainda não foram guardadas.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Número de grupos</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Numero de entradas</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Número de entradas caducadas</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>A base de dados contém entradas caducadas.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Palavras-passe unívocas</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Palavras-passe não unívocas</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Mais de 10% das palavras-passes foram reutilizadas. Se possível, utilize palavras-passe unívocas.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Número máximo de reutilizações</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Algumas palavras-passe estão a ser utilizadas mais do que 3 vezes. Se possível, utilize palavras-passes unívocas.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Número de palavras-passes curtas</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Recomendamos que utilize palavras-passe com um mínimo de 8 caracteres.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Número de palavras-passe fracas</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Recomendamos que utilize palavras-passe longas e aleatórias e que tenham uma avaliação &apos;boa&apos; ou &apos;excelente&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Tamanho médio das palavras-passe</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caracteres</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>O tamanho médio das palavras-passe é inferior a 10 caracteres. Palavras-passe com tamanho maior conferem mais segurança.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Por favor aguarde. As estatísticas da base de dados estão a ser calculadas.</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1974,7 +1961,7 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation>Não foi possível escrever o ficheiro HTML.</translation>
+ <translation>Não foi possível escrever no ficheiro HTML.</translation>
</message>
<message>
<source>Export Confirmation</source>
@@ -1984,6 +1971,10 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Está prestes a exportar a sua base de dados para um ficheiro não cifrado. As suas palavras-passe e informações pessoais ficarão vulneráveis. Tem a certeza de que deseja continuar?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Open OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2110,7 +2101,7 @@ Erro: %1</translation>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram.
+ <translation>O KeePassXC falhou ao tentar guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram.
Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
@@ -2165,6 +2156,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Esta base de dados está aberta no modo de leitura. Não é possível guardar as alterações.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Guardar backup da base de dados</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Não foi possível encontrar a base de dados: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2209,14 +2208,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Selecionar chave privada</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Ficheiro muito grande para ser uma chave privada</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Não foi possível abrir a chave privada</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Histórico da entrada</translation>
</message>
@@ -2229,10 +2220,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Editar entrada</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>As palavras-passe não são iguais.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Novo atributo</translation>
</message>
@@ -2253,29 +2240,13 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation><numerusform>%n mês</numerusform><numerusform>%n meses</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Aplicar palavra-passe gerada?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Deseja aplicar a palavra-passe gerada para esta entrada?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Entrada atualizada com sucesso.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Entrada com alterações não guardadas</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Novo atributo %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTEGIDA] Por favor revele para ver ou editar</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n ano</numerusform><numerusform>%n anos</numerusform></translation>
@@ -2286,7 +2257,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integração com navegadores</translation>
+ <translation>Integração com o navegador</translation>
</message>
<message>
<source>&lt;empty URL&gt;</source>
@@ -2296,6 +2267,26 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Tem a certeza de que deseja remover este URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Mostrar</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Ocultar</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Alterações por guardar</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Gostaria de guardar as alterações a esta entrada?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[PROTEGIDA] Por favor revele para ver ou editar</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2371,6 +2362,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Background color selection</source>
<translation>Cor secundária</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se ativa, a entrada não aparecerá nos relatórios de verificação e/ou HIBP, mesmo que não cumpra os requisitos de qualidade (por exemplo entropia ou reutilização). Pode assinalar esta opção se a palavra-passe não estiver sobre o seu controlo (por exemplo: se precisar de um código PIN) para impedir de atafulhar os relatórios.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Excluir dos relatórios</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2379,14 +2378,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Ativar escrita automática para esta entrada</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Utilizar sequência de escrita automática deste &amp;grupo</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Utilizar sequência personalizada de escrita automática:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Associação de janelas</translation>
</message>
@@ -2442,6 +2433,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Sequência personalizada de escrita automática para esta janela</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Herdar sequência de auto escrita padrão deste grupo</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Utilizar sequência de auto escrita personalizada:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2477,6 +2476,14 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Edit</source>
<translation>Editar</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Apenas enviar esta definição para o navegador em diálogos HTTP Auth. Se ativa, os formulários normais de acesso não mostrarão esta entrada para seleção.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Apenas utilizar esta entrada com HTTP Basic Auth</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2528,18 +2535,10 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Palavra-passe:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repetição:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Título:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Predefinições</translation>
</message>
@@ -2552,10 +2551,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Nome de utilizador:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Caduca</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Campo URL</translation>
</message>
@@ -2564,22 +2559,10 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Descarregar &apos;favicon&apos; para o URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Campo Repetição de palavra-passe</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Alternar gerador de palavras-passe</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo Palavra-passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da palavra-passe</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Alternar visibilidade das notas</translation>
</message>
@@ -2611,6 +2594,18 @@ Desativar salvaguardas e tentar novamente?</translation>
<source>Toggle expiration</source>
<translation>Alternar caducidade</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notas:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Caduca:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2746,10 +2741,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulário</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tipo:</translation>
</message>
@@ -2758,10 +2749,6 @@ Desativar salvaguardas e tentar novamente?</translation>
<translation>Caminho:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Palavra-passe:</translation>
</message>
@@ -2845,57 +2832,25 @@ As extensões suportadas são: %1.</translation>
<translation>Caminho para o campo ficheiro de partilha</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Explorador para o ficheiro de partilha</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo Palavra-passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da palavra-passe</translation>
+ <source>Clear fields</source>
+ <translation>Limpar campos</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Alternar gerador de palavras-passe</translation>
+ <source>Browse for share file</source>
+ <translation>Procurar por ficheiro de partilha</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Limpar campos</translation>
+ <source>Browse...</source>
+ <translation>Explorar...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nome</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notas</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Caduca</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Pesquisa</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Escrita automática</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Utilizar sequência de escrita automática do grupo relacionado</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Definir se&amp;quência padrão para escrita automática</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Campo Nome</translation>
</message>
@@ -2923,18 +2878,38 @@ As extensões suportadas são: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Campo Sequência padrão de escrita automática</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Utilizar ícone padrão</translation>
+ <source>Expires:</source>
+ <translation>Caduca:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Utilizar sequência de escrita automática do grupo relacionado</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Escrita automática:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Pesquisa:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notas:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Utilizar íco&amp;ne personalizado</translation>
+ <source>Name:</source>
+ <translation>Nome:</translation>
</message>
<message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Definir sequência padrão para escrita automática</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Adicionar ícone personalizado</translation>
</message>
@@ -2999,14 +2974,6 @@ As extensões suportadas são: %1.</translation>
<translation>Aplicar ícone aos sub-grupos e entradas</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Aplicar ícone &amp;a...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Aplicar apenas a este</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Aplicar aos grupos dependentes</translation>
</message>
@@ -3022,6 +2989,22 @@ As extensões suportadas são: %1.</translation>
<source>Existing icon selected.</source>
<translation>Selecionou um ícone existente.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Utilizar icon padrão</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Utilizar icon padrão</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Aplicar ícone a...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Aplicar apenas a este grupo</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3207,6 +3190,20 @@ Esta ação pode implicar um funcionamento errático.</translation>
<source>Save selected attachment to disk</source>
<translation>Guardar anexo selecionado no disco</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 é um ficheiro grande (%2 MB)
+A base de dados ficará muito grande e poderá reduzir o desempenho.
+
+Tem a certeza de que deseja adicionar este ficheiro?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Confirmar anexo</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3290,12 +3287,52 @@ Esta ação pode implicar um funcionamento errático.</translation>
<translation>Anexos</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Sim</translation>
+ <source>Size</source>
+ <translation>Tamanho</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Nome do grupo</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Título da entrada</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Notas da entrada</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Entrada caduca a</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Data de criação</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Data da última modificação</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Data do último acesso</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Ficheiros anexos</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Tamanho da entrada</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Tem anexos</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Tem palavra-passe TOTP</translation>
</message>
</context>
<context>
@@ -3395,6 +3432,13 @@ Esta ação pode implicar um funcionamento errático.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL inválido</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3421,8 +3465,14 @@ Esta ação pode implicar um funcionamento errático.</translation>
<translation>Repor predefinições</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Anexos (ícone)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Tem anexosTem anexos</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Tem TOTP</translation>
</message>
</context>
<context>
@@ -3434,21 +3484,74 @@ Esta ação pode implicar um funcionamento errático.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Não foi possível registar o serviço DBus em %1: já existe um serviço em execução.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n entrada foi utilizada por %1</numerusform><numerusform>%n entradas foram utilizadas por %1</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Não foi possível registar o serviços DBus em %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nome do ficheiro</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupo</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gerir</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Desbloquear para mostrar</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nada</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplicação</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Gerir</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Desconhecido</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Desconhecido</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Executável: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Já existe um serviço em execução (%1)&lt;br/&gt; Tem que parar/remover este serviço antes de poder reativar a integração Secret Service.</translation>
</message>
</context>
<context>
@@ -3460,14 +3563,10 @@ Esta ação pode implicar um funcionamento errático.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Ficheiro não guardado!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Não foi possível guardar o ficheiro de mensagens nativas.</translation>
+ <source>Online password validation failed</source>
+ <translation>Falha na validação online da palavra-passe</translation>
</message>
</context>
<context>
@@ -3537,14 +3636,6 @@ Pode ativar o serviço DuckDuckGo na secção &apos;Segurança&apos; das defini
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Não foi possível emitir a pergunta de segurança.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>cabeçalhos em falta da base de dados</translation>
</message>
@@ -3570,16 +3661,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Credenciais inválidas. Por favor tente novamente.
Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Não foi possível calcular a chave da base de dados</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Não foi possível emitir a pergunta de segurança: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Não foi possível emitir a pergunta de segurança.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Não foi possível emitir a pergunta de segurança: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Não foi possível calcular a chave da base de dados</translation>
</message>
</context>
<context>
@@ -3589,10 +3688,6 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.</tr
<translation>cabeçalhos em falta da base de dados</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Tamanho inválido para o &apos;checksum&apos; do cabeçalho</translation>
</message>
@@ -3710,6 +3805,10 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.</tr
<source>(HMAC mismatch)</source>
<translation>(Disparidade HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Não foi possível calcular a chave da base de dados: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3723,14 +3822,14 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.</tr
<translation>Tamanho inválido da cifra simétrica IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Não foi possível serializar os parâmetros KDF do mapa</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Não foi possível calcular a chave da base de dados: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3880,10 +3979,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
<translation>Chave &apos;string&apos; ou valor em falta</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Encontrado anexo em duplicado</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Chave binária ou valor em falta</translation>
</message>
@@ -3930,6 +4025,29 @@ Linha %2, coluna %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Estrutura inválida no ficheiro de definições KeeAgent.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Chave privada é um anexo mas o anexo não foi indicado.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Chave privada vazia</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Ficheiro muito grande para ser uma chave privada</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Não foi possível abrir a chave privada</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3992,10 +4110,6 @@ Linha %2, coluna %3</translation>
<translation>Raiz</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Não foi possível calcular a chave-mestre</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Não foi possível transformar a chave</translation>
</message>
@@ -4097,6 +4211,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Credenciais inválidas. Por favor tente novamente.
Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Não foi possível calcular a chave da base de dados</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4203,16 +4321,6 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.</tr
<translation>Ficheiro-chave no formato legado</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Está a utilizar um formato legado que pode, no futuro, deixar
-de ser suportado.
-
-Aceda às definições da chave-mestre para gerar um novo ficheiro-chave.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Erro ao carregar o ficheiro-chave %1
@@ -4280,6 +4388,16 @@ Are you sure you want to continue with this file?</source>
<translation>Parece que o ficheiro-chave utilizado é um ficheiro de uma base de dados. Deve utilizar um ficheiro estático ou deixará de conseguir aceder à sua base de dados.
Tem a certeza de que deseja utilizar este ficheiro?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Está a utilizar um formato legado que pode, no futuro, deixar
+de ser suportado.
+
+Deve gerar um novo ficheiro-chave nas definições da base de dados.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4288,18 +4406,10 @@ Tem a certeza de que deseja utilizar este ficheiro?</translation>
<translation>Base &amp;de dados</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>Bases de dados &amp;recentes</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>Aj&amp;uda</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>E&amp;ntradas</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupos</translation>
</message>
@@ -4316,46 +4426,10 @@ Tem a certeza de que deseja utilizar este ficheiro?</translation>
<translation>&amp;Acerca</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Abrir base de dad&amp;os...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Guardar base de dado&amp;s</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Fe&amp;char base de dados</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Apagar entra&amp;da</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Editar grupo</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Apagar g&amp;rupo</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>G&amp;uardar base de dados como...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Definições da base de dados</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clonar entrada</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copiar nome de &amp;utilizador</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copiar nome de utilizador para a área de transferência</translation>
</message>
@@ -4368,10 +4442,6 @@ Tem a certeza de que deseja utilizar este ficheiro?</translation>
<translation>Definiçõe&amp;s</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>B&amp;loquear bases de dados</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Título</translation>
</message>
@@ -4396,14 +4466,6 @@ Tem a certeza de que deseja utilizar este ficheiro?</translation>
<translation>Copiar notas para a área de transferência</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportar para ficheiro CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configurar TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copiar &amp;TOTP</translation>
</message>
@@ -4448,10 +4510,6 @@ Esta versão não deve ser utilizada em ambientes de produção.</translation>
<translation>&amp;Donativos</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Reportar um &amp;erro</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)!
@@ -4462,66 +4520,26 @@ Recomendamos que utilize a versão AppImage disponível no nosso site.</translat
<translation>&amp;Importar</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copiar at&amp;ributo...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Nova base de dados...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Criar uma nova base de dados</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>Co&amp;mbinar da base de dados...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Combinar com outra base de dados KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nova entrada</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Adicionar uma nova entrada</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Editar entrada</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Ver ou editar entrada</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Novo grupo</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Adicionar um novo grupo</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Alterar chave-&amp;mestre...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Definições da base de dados...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copiar &amp;palavra-passe</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Execut&amp;ar escrita automática</translation>
</message>
@@ -4530,30 +4548,14 @@ Recomendamos que utilize a versão AppImage disponível no nosso site.</translat
<translation>Abrir &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Base de dados do KeePass 1...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importar base de dados do KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Ficheiro CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importar ficheiro CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Mostrar TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Mostrar código QR TOTP...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOTA: está a utilizar uma versão de testes do KeePassXC!
@@ -4576,14 +4578,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>&amp;Exportar</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>Pro&amp;curar atualizações...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Descarreg&amp;ar todos os &apos;favicon&apos;</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>De &amp;A-Z</translation>
</message>
@@ -4596,48 +4590,290 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Gerador de &amp;palavras-passe</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Descarregar &apos;favicon&apos;</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importar um cofre 1Password</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Iniciação</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>Guia de &amp;utilizador</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>Atal&amp;hos de teclado</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>Bases de dados &amp;recentes</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Entradas</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Copiar at&amp;ributo</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation>Tema</translation>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>Pro&amp;curar atualizações</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>Abrir base de dad&amp;os...</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>Guardar base de dado&amp;s...</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>Fe&amp;char base de dados...</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Nova base de dados...</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>Co&amp;mbinar da base de dados...</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nova entrada...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Editar entrada...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>Apagar entra&amp;da...</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Novo grupo...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Editar grupo...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>Apagar g&amp;rupo...</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Descarregar todos os &apos;favicons&apos;...</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>G&amp;uardar base de dados como...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>&amp;Segurança da base de dados...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>&amp;Relatórios da base de dados...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Estatísticas, verificações...</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Definições da base de dados...</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Clonar entrada...</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Mover para &amp;cima</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Move a entrada para cima</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportar para ficheiro HTML...</translation>
+ <source>Move do&amp;wn</source>
+ <translation>Mover para &amp;baixo</translation>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>Move entry one step down</source>
+ <translation>Move a entrada para baixo</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Copiar nome de &amp;utilizador</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Copiar &amp;palavra-passe</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Descarregar &apos;&amp;favicon&apos;</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>B&amp;loquear bases de dados</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>Ficheiro &amp;CSV...</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>Ficheiro &amp;HTML...</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>Base de dados do KeePass 1...</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
<translation>Cofre 1Password...</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importar um cofre 1Password</translation>
+ <source>CSV File…</source>
+ <translation>Ficheiro CSV...</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Iniciação</translation>
+ <source>Show TOTP</source>
+ <translation>Mostrar TOTP</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Abrir guia de iniciação em PDF</translation>
+ <source>Show QR Code</source>
+ <translation>Mostrar código QR</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Ajuda &amp;online...</translation>
+ <source>Set up TOTP…</source>
+ <translation>Configurar TOTP...</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Ir para a ajuda online (no navegador web)</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Reportar um &amp;erro</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Guia de &amp;utilizador</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Abrir guia de iniciação</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Abrir guia de utilizador em PDF</translation>
+ <source>&amp;Online Help</source>
+ <translation>Ajuda &amp;online</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>Atal&amp;hos de teclado</translation>
+ <source>Go to online documentation</source>
+ <translation>Aceder à documentação online</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Abrir manual de utilizador</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Guardar backup da base de dados...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Adicionar chave ao agente SSH</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Remover chave do agente SSH</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Modo compacto</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Claro</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Escuro</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Clássico (nativo do SO)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Mostrar barra de ferramentas</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Mostrar painel de pré-visualização</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Não mostrar novamente para esta versão</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Reiniciar aplicação?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Tem que reiniciar a aplicação para aplicar as alterações. Gostaria de o fazer agora?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Definições da base de dados</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Editar definições da base de dados</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Desbloquear base de dados</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Desbloquear base de dados para mostrar mais informação</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Bloquear base de dados</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Desconectar</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Desconectar esta aplicação</translation>
</message>
</context>
<context>
@@ -4726,10 +4962,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Assistente</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Definições de &amp;cifra</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados.</translation>
</message>
@@ -4741,27 +4973,31 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Simple Settings</source>
<translation>Definições básicas</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Definições de cifra</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Credenciais da base de dados</translation>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Um conjunto de credenciais só suas e que protegem a base de dados.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Chave-mestre da base de dados</translation>
+ <source>Encryption Settings</source>
+ <translation>Definições de cifra</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Uma chave-mestre apenas sua e que protege a base de dados.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados.</translation>
</message>
</context>
<context>
@@ -4776,6 +5012,13 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Gestor de palavras-passe</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4886,7 +5129,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Necessita de uma frase-chave para decifrar esta chave</translation>
+ <translation>Necessita de uma palavra-passe para decifrar esta chave</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
@@ -4894,7 +5137,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Falha ao decifrar, frase-chave errada?</translation>
+ <translation>Falha ao decifrar, palavra-passe errada?</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
@@ -4951,6 +5194,18 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Passwords match so far</source>
<translation>Correspondências até agora</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Alternar palavra-passe (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Gerar palavra-passe (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Aviso: Caps Lock ativado</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4975,25 +5230,13 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Disparidade nas palavras-passe.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Gerar palavra-passe principal</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Campo Palavra-passe</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da palavra-passe</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Campo Repetição de palavra-passe</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Alternar gerador de palavras-passe</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5002,10 +5245,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Palavra-passe:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>qualidade</translation>
@@ -5044,7 +5283,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Passphrase</source>
- <translation>Frase-chave</translation>
+ <translation>Palavra-passe</translation>
</message>
<message>
<source>Wordlist:</source>
@@ -5055,14 +5294,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Separador de palavras:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copiar</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Aceitar</translation>
- </message>
- <message>
<source>Close</source>
<translation>Fechar</translation>
</message>
@@ -5159,14 +5390,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Ativar modo básico</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Básico</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres a excluir da palavra-passe gerada</translation>
</message>
@@ -5187,14 +5410,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Caracteres excluídos: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Número de palavras:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Recriar</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Palavra-passe gerada</translation>
</message>
@@ -5243,10 +5458,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Copiar palavra-passe</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Aceitar palavra-passe</translation>
- </message>
- <message>
<source>lower case</source>
<translation>minúsculas</translation>
</message>
@@ -5259,8 +5470,44 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Primeira Letra Em Maiúscula</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Alternar visibilidade da palavra-passe</translation>
+ <source>Generate Password</source>
+ <translation>Gerar palavra-passe</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Escolher também de:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Caracteres extra a utilizar na palavra-passe gerada</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Caracteres extra</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Número de palavras:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Aplicar palavra-passe</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Recriar palavra-passe (%1)</translation>
</message>
</context>
<context>
@@ -5273,6 +5520,58 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Statistics</source>
<translation>Estatísticas</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Palavra-passe muito fraca</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>A entropia da palavra-passe é de %1 bits</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Palavra-passe fraca</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Utilizada em %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Palavra-passe utilizada %1 vezes</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Palavra-passe caducada</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Palavra-passe caducou em %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Palavra-passe perto de caducar</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Palavra-passe caduca dentro de %1 dias</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Palavra-passe está perto de caducar</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Palavra-passe caduca em %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Verificações de qualidade</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5337,7 +5636,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>Não foi possível associar KeePassXC. Tente novamente.</translation>
+ <translation>Não foi possível associar KeePassXC. Por favor tente novamente.</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5412,10 +5711,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<translation>Caminho da entrada a adicionar.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copiar palavra-passe da entrada para a área de transferência.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Caminho da entrada a copiar.</translation>
@@ -5573,14 +5868,6 @@ Comandos disponíveis:
<translation>Integração com o navegador</translation>
</message>
<message>
- <source>Press</source>
- <translation>Prima</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiva</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agente SSH</translation>
</message>
@@ -5619,10 +5906,6 @@ Comandos disponíveis:
<translation>Entrada %1 adicionada com sucesso.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copiar TOTP atual para a área de transferência.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Valor limite inválido %1.</translation>
</message>
@@ -5634,14 +5917,6 @@ Comandos disponíveis:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>A entrada com o caminho %1 não tem uma TOTP configurada.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP da entrada atual copiada para a área de transferência!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Palavra-passe da entrada atual copiada para a área de transferência!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>A área de transferência será limpa dentro de %1 segundo...</numerusform><numerusform>A área de transferência será limpa dentro de %1 segundos...</numerusform></translation>
@@ -5862,10 +6137,6 @@ Comandos disponíveis:
<translation>Não definiu um programa para manipular a área de transferência</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Não foi possível iniciar %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>ficheiro vazio</translation>
</message>
@@ -5874,18 +6145,6 @@ Comandos disponíveis:
<translation>%1: (linha, coluna) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recomendado)</translation>
</message>
@@ -6085,7 +6344,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Cannot generate a password and prompt at the same time!</source>
- <translation type="unfinished"/>
+ <translation>Não pode utilizar as opções &quot;Gerar palavra-passe&quot; e &quot;Pedir palavra-passe&quot; ao mesmo tempo&quot;!</translation>
</message>
<message>
<source>Adds a new group to a database.</source>
@@ -6136,10 +6395,6 @@ Kernel: %3 %4</translation>
<translation>Mostra esta ajuda.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>&apos;Slot&apos; Yubikey utilizada para cifrar a base de dados.</translation>
- </message>
- <message>
<source>slot</source>
<translation>slot</translation>
</message>
@@ -6156,10 +6411,6 @@ Kernel: %3 %4</translation>
<translation>Sair do modo interativo.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formato a utilizar para a exportação. As opções possíveis são xml e csv. Por definição, é utilizado o formato XML.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exporta o conteúdo da base de dados para o formato especificado.</translation>
</message>
@@ -6200,10 +6451,6 @@ Kernel: %3 %4</translation>
<translation>Caminho da nova base de dados.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Não foi possível importar a base de dados %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Base de dados importada com sucesso.</translation>
</message>
@@ -6296,10 +6543,6 @@ Kernel: %3 %4</translation>
<translation>&apos;Slot&apos; Yubikey inválida: %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Toque no botão da sua YubiKey para desbloquear %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Introduza a palavra-passe para cifrar a base de dados (opcional): </translation>
</message>
@@ -6315,10 +6558,6 @@ Kernel: %3 %4</translation>
<source>User name</source>
<translation>Nome de utilizador</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Pergunta de segurança - Slot %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation><numerusform>A palavra-passe para &apos;%1&apos; foi revelada %2 vez!</numerusform><numerusform>A palavra-passe para &apos;%1&apos; foi revelada %2 vezes!</numerusform></translation>
@@ -6331,6 +6570,194 @@ Kernel: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Mostrar atributos protegidos em &apos;clear-text&apos;.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Falha no plugin do navegador</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>Não foi possível guardar o script de mensagens nativas para %1.</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Copiar atributo para a área de transferÊncia. Utiliza &quot;password&quot; se nenhum for especificado.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Copiar TOTP para a área de transferência (equivalente a &quot;-a totp&quot;).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Copiar atributo de uma entrada para a área de transferência.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>ERRO: tem que especificar --attribute ou --totp, mas não ambos.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>ERRO: atributo %1 é ambíguo porque coincide com %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Atributo %1 não encontrado.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Atributo da entrada &quot;%1&quot; copiado para a área de transferência!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Slot Yubikey e número de série (opcional) para aceder à base de dados (exemplo 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>slot[:serial]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Duração (em ms) para decifrar a base de dados.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>duração</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Definir um ficheiro-chave para a base de dados.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Definir uma palavra-passe para a base de dados.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Duração inválida %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>A duração para decifrar tem que estar entre %1 e%2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Não foi possível definir a palavra-passe para a base de dados.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>Função de derivação de chave para um atraso de %1 ms.</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>A definir %1 ciclos para a função de derivação da chave.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>erro ao definir as definições de derivação da chave.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Formato a utilizar para a exportação. As opções possíveis são &apos;xml&apos; e &apos;csv&apos;. Por definição, é utilizado o formato &apos;XML&apos;.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Não foi possível importar a base de dados em XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Mostrar informação da base de dados.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Descrição:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Cifra:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Reciclagem ativada.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Reciclagem desativada.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Comando inválido %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>N.º de série YubiKey inválido %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Toque no botão da YubiKey para continuar...</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Tem a certeza de que deseja criar a base de dados com uma palavra-passe vazia? [y/N]: </translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Repetição de palavra-passe:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Erro: disparidade nas palavras-passe.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>Falha em todos os programas. Tentados %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 ciclos)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 ciclos, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-bit {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Testar atraso de %1</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6367,6 +6794,290 @@ Kernel: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Incluir também as entradas que tenham sido excluídas dos relatórios</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Passe com o rato pelo motivo para obter mais informação. Clique duas vezes na entrada para editar.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Má</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Má - deve alterar a palavra-passe</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Má</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Fraquinha - deve alterar a palavra-passe</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Fraca</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Fraca - considere alterar a palavra-passe</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Excluída)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Esta entrada está a ser excluída dos relatórios</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Por favor aguarde, os dados estão a ser calculados...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Parabéns, tudo parece estar bem.</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Caminho</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Avaliação</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Motivo</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Editar entrada...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Excluir dos relatórios</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>ATENÇÃO: este relatório envia informações para o serviço Have I Been Pwned (https://haveibeenpwned.com). Se continuar, as suas palavras-passe serão cifradas com &apos;hashes&apos; e os primeiros 5 caracteres dessas &apos;hashes&apos; serão enviados para o serviço. A sua base de dados não sofre alterações e não pode ser reconstituída a partir desta informação. Contudo, o número de palavras-passe enviadas e o seu endereço IP serão expostos ao serviço.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Executar análise online</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Incluir também as entradas que tenham sido excluídas dos relatórios</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Esta versão do KeePassXC não possui funcionalidades de rede. Necessita da funcionalidade de rede para comparar as suas palavras-passe com as base de dados Have I Been Pwned (HIBP).</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Parabéns, não possui palavras-passe expostas.</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Título</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Caminho</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Palavra-passe exposta...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Excluída)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Esta entrada está a ser excluída dos relatórios</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>uma</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>até 10 vezes</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>até 100 vezes</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>até 1000 vezes</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>até 10 000 vezes</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>até 100 000 vezes</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>até 1 milhão de vezes</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>milhões de vezes</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Editar entrada...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Excluir dos relatórios</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Passe com o rato por cima das linhas com o erro para mais informações.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Por favor aguarde. As estatísticas da base de dados estão a ser calculadas.</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Nome da base de dados</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descrição</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Localização</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Última gravação</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Alterações por guardar</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>sim</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>não</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>A base de dados foi modificada mas as alterações ainda não foram guardadas.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Número de grupos</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Numero de entradas</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Número de entradas caducadas</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>A base de dados contém entradas caducadas.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Palavras-passe unívocas</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Palavras-passe não unívocas</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Mais de 10% das palavras-passes foram reutilizadas. Se possível, utilize palavras-passe unívocas.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Número máximo de reutilizações</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Algumas palavras-passe estão a ser utilizadas mais do que 3 vezes. Se possível, utilize palavras-passes unívocas.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Número de palavras-passes curtas</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Recomendamos que utilize palavras-passe com um mínimo de 8 caracteres.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Número de palavras-passe fracas</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Recomendamos que utilize palavras-passe longas e aleatórias e que tenham uma avaliação &apos;boa&apos; ou &apos;excelente&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Entradas excluídas dos relatórios</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>A exclusão de entradas dos relatórios, porque sabe-se que são de fraca qualidade, não é necessariamente um problema mas deve manter uma atenção sobre as mesmas.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Tamanho médio das palavras-passe</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caracteres</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>O tamanho médio das palavras-passe é inferior a 10 caracteres. Palavras-passe com tamanho maior conferem mais segurança.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6400,6 +7111,14 @@ Kernel: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>O agente não tem suporte a pedidos de confirmação (consulte as opções).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Conflito na titularidade da chave. Não será adicionada.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Nenhum agente em execução, não é possível listar as identidades.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6507,26 +7226,10 @@ Kernel: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se ativar a Reciclagem para esta base de dados, as entradas apagadas serão movidas mas não apagadas. Se não a utilizar, as entradas serão apagadas sem qualquer confirmação.&lt;/p&gt;&lt;p&gt;Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Não confirmar se as entradas forem apagadas nos clientes.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Grupos expostos:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nome do ficheiro</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupo</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Gerir</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorização</translation>
</message>
@@ -6535,40 +7238,20 @@ Kernel: %3 %4</translation>
<translation>Estas aplicações estão conectadas:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplicação</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Desconectar</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Definições da base de dados</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Editar definições da base de dados</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Desbloquear base de dados</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Desbloquear base de dados para mostrar mais informação</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Não confirmar se as entradas forem apagadas pelos clientes.</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Bloquear base de dados</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Erro:&lt;/b&gt; falha na ligação a DBus. Verifique a configuração DBus.</translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Desbloquear para mostrar</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Aviso:&lt;/b&gt; </translation>
</message>
<message>
- <source>None</source>
- <translation>Nada</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>Guarde as alterações atuais para ativar o plugin e permitir a edição desta secção.</translation>
</message>
</context>
<context>
@@ -6841,10 +7524,6 @@ Kernel: %3 %4</translation>
<translation>Importação assinada bem sucedida</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Erro inesperado</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>O contentor de partilha não assinado não é suportado - importação evitada</translation>
</message>
@@ -7013,6 +7692,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL inválido</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7103,6 +7789,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] Slot configurada - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] Pergunta de segurança - Slot %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Prima</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiva</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 Especificado um slot inválido - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>A interface YubiKey não foi inicializada.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>A chave de hardware está a ser utilizada.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Não foi possível localizar a chave de hardware com o número de série %1. Introduza a sua chave de hardware para continuar.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Tempo limite excedido ou à espera de interação do utilizador.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Ocorreu um erro USB ao tentar aceder à chave de hardware: %1.</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Erro ao tentar concluir a pergunta de segurança. O erro foi: %1.</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7117,14 +7850,6 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Se tiver uma &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, pode utilizá-la para obter mais segurança.&lt;/p&gt;&lt;p&gt;A YubiKey requer que uma das suas ranhuras seja programada como uma &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Yubikey não detetada. verifique se está inserida corretamente.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Youbikey não inserida.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Recarregar &apos;tokens&apos; de hardware</translation>
</message>
@@ -7132,5 +7857,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>Seleção de &apos;slot&apos; para a chave de hardware</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Não foram encontradas chaves de hardware.</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>A chave de hardware selecionada não tem suporte a pergunta de segurança!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>A detetar chaves de hardware...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Não foram detetadas chaves de hardware</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_ro.ts b/share/translations/keepassx_ro.ts
index 469e4ddd1..06fe2305b 100644
--- a/share/translations/keepassx_ro.ts
+++ b/share/translations/keepassx_ro.ts
@@ -23,7 +23,7 @@
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Vezi contribuțiile pe GitHub&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Vezi contibuțiile pe GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Activează Agentul SSH (necesită repornire)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Folositi OpenSSH pentru Windows in loc de Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -77,7 +97,7 @@
</message>
<message>
<source>Icon only</source>
- <translation>Numai iconita</translation>
+ <translation>Numai pictograma</translation>
</message>
<message>
<source>Text only</source>
@@ -93,7 +113,7 @@
</message>
<message>
<source>Follow style</source>
- <translation>Urmareste stil</translation>
+ <translation>Urmareste stilistica</translation>
</message>
<message>
<source>Reset Settings?</source>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Sigur resetați în mod implicit toate setările generale și de securitate ?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Gestionare fișiere</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Salvați în condiții de siguranță fișierele bazei de date (pot fi incompatibile cu Dropbox, etc)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Fă copie de rezervă fișierului bazei de date înainte de salvare</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Salvare automată la ieșire</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Nu marcați baza de date modificată pentru modificări non-date (de exemplu, grupuri în expansiune)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Reîncărcați automat baza de date atunci când este modificată extern</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Utilizarea pictogramei grupului la crearea inregistrarii</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Ascundere panou previzualizare inregistrarii</translation>
- </message>
- <message>
- <source>General</source>
- <translation>General</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Ascundere bară de instrumente (pictograme)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimizare în locul ieșirii aplicației</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Afișare pictogramă tavă de sistem</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Pictograma umbra barei de sistem </translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Ascundere fereastră în tava de sistem atunci când este minimizată</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Întrebați întotdeauna înainte de a efectua auto-tiparire</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Comandă rapidă pentru autotiparire globala</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Întârzierea tastării autotiparirei</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>întârziere inceputuui auto-tiparii</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Bara de instrumente mobila</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Includere versiuni beta la verificarea actualizărilor</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Stilul butonului:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Limba:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Stil buton bară de instrumente</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Utilizați fontul monospațiat pentru notițe</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Selectarea limbii</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Resetare setări la implicit</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Comandă rapidă de tip auto global</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Auto-tip de pornire întârziere milisecunde</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Re-Lock bazei de date blocate anterior după efectuarea auto-Type</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Nu este necesară repetarea parolei atunci când este vizibilă</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Nu ascundeți parolele atunci când le editați</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Nu se utilizează substituent pentru câmpurile de parolă goli</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Ascunderea parolelor în panoul de previzualizare inregistrarii</translation>
</message>
@@ -413,12 +429,24 @@
<source>Clear search query after</source>
<translation>Stergerea interogarea de căutare după</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Nu a putut fi gasită nicio intrare care să coincidă cu titlul ferestrei:</translation>
+ <translation>Nu a putut fi gasită o intrare care să coincidă cu titlul ferestrei:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
@@ -513,7 +541,7 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Auto-tiparire-KeePassXC</translation>
+ <translation>Auto-tip-KeePassXC</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-browser confirmă accesul</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Ține minte această decizie</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>Permite</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Interzice</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>% 1 a solicitat accesul la parole pentru următorul articol (e).
-Vă rugăm să selectați dacă doriți să permiteți accesul.</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>Permite accesul</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
- <translation>Refuzare acces</translation>
+ <source>Deny All</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -579,199 +609,260 @@ Selectați baza de date corectă pentru salvarea acreditărilor.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: noua cerere de asociere cheie</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Acest lucru este necesar pentru accesarea bazelor de date cu KeePassXC-browser</translation>
+ <source>Save and allow access</source>
+ <translation>Salvează și permite acces</translation>
</message>
<message>
- <source>General</source>
- <translation>General</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Suprascriere cheie existentă?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Activați integrarea pentru aceste browsere:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Există deja o cheie de criptare partajată cu numele &quot;%1&quot; .
+Doriți să o suprascrieți?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: actualizare intrare</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Actualizați informațiile în %1 - %2 ?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Anulează</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Conversia atributelor in date particularizate...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Afișare &amp; notificarii atunci când sunt solicitate acreditările</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: conversia atributelor KeePassHTTP</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Re&amp;Quest pentru a debloca baza de date în cazul în care este blocata</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Atributele convertite cu succes din %1 intrare (i).
+S-au mutat %2 chei la date particularizate.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>S-au mutat cu succes% n chei la date particularizate.</numerusform><numerusform>S-au mutat cu succes% n chei la date particularizate.</numerusform><numerusform>S-au mutat cu succes %n chei la date particularizate.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Sunt returnate numai intrările cu aceeași schemă (http://, https://,...) .</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: n-a fost găsita nici o intrare cu KeePassHTTP atribute !</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Potrivi schema URL (de exemplu, https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Baza de date activă nu conține nici o intrare cu atributele KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Returnează numai cele mai bune potriviri pentru un anumit URL în loc de toate intrările pentru întregul domeniu.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Au fost detectate setările moștenite de integrare a browserului</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Returnează numai cele mai bune acreditări de potrivire</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: crearea unui grup nou</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortare &amp; potrivire acreditări după titlu</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>S-a primit o solicitare de creare a unui grup nou &quot;%1&quot;.
+Doriți să creați acest grup?</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortare acreditări de potrivire de &amp;username</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Setările KeePassXC-browser trebuie mutate în setările bazei de date.
+Acest lucru este necesar pentru a menține conexiunile browser-ului curent.
+Migrați acum setările existente?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avansat</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Nu mai afișa acest avertisment</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Niciodată &amp;cere înainte de accesarea acreditărilor</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Ați primit o solicitare de asociere pentru următoarea bază de date:
+%1
+
+Dați conexiunii un nume sau un ID unic, de exemplu:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nu mai întreba înainte &amp;actualizarea acreditărilor</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Caut&amp;a în toate bazele de date deschise pentru acreditări potrivite</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Acest lucru este necesar pentru accesarea bazelor de date cu KeePassXC-browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Crearea sau actualizarea automată a câmpurilor șir nu este acceptată.</translation>
+ <source>Enable browser integration</source>
+ <translation>Activați integrarea browserului</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;Returnează câmpuri de șir avansate care încep cu &quot;KPH:&quot;</translation>
+ <source>General</source>
+ <translation>General</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Actualizează la pornire calea binară KeePassXC sau keepassxc-proxy automat la script-uri de mesagerie native.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Browserele instalate ca snaps nu sunt acceptate momentan.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Actualizează la pornire mesaje &amp;native fișiere manifest</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Activați integrarea pentru aceste browsere:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Sustine o aplicatie proxy intreextensie browser KeePassXC și extensie browser</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Utilizați o aplicație &amp; proxy între KeePassXC și extensia browserului</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Utilizați o locație proxy particularizată dacă ați instalat manual un proxy.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Folosește o locație proxy &amp;personalizată </translation>
+ <source>Tor Browser</source>
+ <translation>Navigator web Tor</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Răsfoiește...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Avertizare:&lt;/b&gt; Următoarele opțiuni pot fi periculoase!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Selectare locație proxy particularizată</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Navigator web Tor</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Fișiere executabile</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>Toate fișierele</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Sunt returnate numai intrările cu aceeași schemă (http://, https://,...) .</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Nu cere permisiunea pentru HTTP &amp;Basic auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Datorită snap sandboxing, trebuie să executați un script pentru a activa integrarea browser-ului.&lt;br&gt;Puteți obține acest script de la % 1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Returnează numai cele mai bune potriviri pentru un anumit URL în loc de toate intrările pentru întregul domeniu.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Vă rugăm să consultați instrucțiunile speciale pentru utilizarea extensiei browserului de mai jos</translation>
+ <source>Return only best-matching credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-browser-ul este necesar pentru integrarea browser-ului pentru a lucra.&lt;br&gt;Descărcați-l pentru %1 și % 2. % 3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Returnează acreditările expirate. String [expirat] se adaugă la titlu.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Returnează acreditările expirate. String [expirat] se adaugă la titlu.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Toate bazele de date conectate la extensie vor returna acreditările corespondente.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>Permite returnarea acreditărilor expirate.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Activați integrarea browserului</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Browserele instalate ca snaps nu sunt acceptate momentan.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Toate bazele de date conectate la extensie vor returna acreditările corespondente.</translation>
+ <source>Advanced</source>
+ <translation>Avansat</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Crearea sau actualizarea automată a câmpurilor șir nu este acceptată.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation type="unfinished"/>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Nu afișați popup-ul sugerând migrarea setărilor KeePassHTTP moștenite.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation> Nu solicitați migrarea setărilor KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Actualizează la pornire calea binară KeePassXC sau keepassxc-proxy automat la script-uri de mesagerie native.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Utilizați o locație proxy particularizată dacă ați instalat manual un proxy.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,106 +873,81 @@ Selectați baza de date corectă pentru salvarea acreditărilor.</translation>
<translation>Browser pentru fișier proxy personalizat</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Avertisment&lt;/b&gt;, aplicația keepassxc-proxy nu a fost găsită! &lt;br /&gt;Vă rugăm să verificați directorul de instalare KeePassXC sau să confirmați calea personalizată în opțiuni avansate. &lt;br /&gt;Integrarea browser-ului NU va funcționa fără aplicația proxy. &lt;br /&gt;Calea așteptată: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Răsfoiește...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: noua cerere de asociere cheie</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Salvează și permite acces</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Suprascriere cheie existentă?</translation>
+ <source>Toolbar button style</source>
+ <translation>Stil buton bară de instrumente</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Există deja o cheie de criptare partajată cu numele &quot;%1&quot; .
-Doriți să o suprascrieți?</translation>
+ <source>Config Location:</source>
+ <translation>Locație configurare:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: actualizare intrare</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Actualizați informațiile în %1 - %2 ?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Anulează</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Conversia atributelor in date particularizate...</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: conversia atributelor KeePassHTTP</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Atributele convertite cu succes din %1 intrare (i).
-S-au mutat %2 chei la date particularizate.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>S-au mutat cu succes% n chei la date particularizate.</numerusform><numerusform>S-au mutat cu succes %n chei la date particularizate.</numerusform><numerusform>S-au mutat cu succes %n chei la date particularizate.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Datorită snap sandboxing, trebuie să executați un script pentru a activa integrarea browser-ului.&lt;br&gt;Puteți obține acest script de la % 1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: n-a fost găsita nici o intrare cu KeePassHTTP atribute !</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Baza de date activă nu conține nici o intrare cu atributele KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Vă rugăm să consultați instrucțiunile speciale pentru utilizarea extensiei browserului de mai jos</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Au fost detectate setările moștenite de integrare a browserului</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: crearea unui grup nou</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Avertizare:&lt;/b&gt; Următoarele opțiuni pot fi periculoase!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>S-a primit o solicitare de creare a unui grup nou &quot;%1&quot;.
-Doriți să creați acest grup?</translation>
+ <source>Executable Files</source>
+ <translation>Fișiere executabile</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Setările KeePassXC-browser trebuie mutate în setările bazei de date.
-Acest lucru este necesar pentru a menține conexiunile browser-ului curent.
-Migrați acum setările existente?</translation>
+ <source>All Files</source>
+ <translation>Toate fișierele</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Nu mai afișa acest avertisment</translation>
+ <source>Select custom proxy location</source>
+ <translation>Selectare locație proxy particularizată</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Ați primit o solicitare de asociere pentru următoarea bază de date:
-%1
-
-Dați conexiunii un nume sau un ID unic, de exemplu:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -938,10 +1004,6 @@ chrome-laptop.</translation>
<translation>Comentariile încep cu</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Prima înregistrare conține denumirile de câmpuri</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Considera &quot;\&quot; un caracter Escape</translation>
</message>
@@ -950,14 +1012,6 @@ chrome-laptop.</translation>
<translation>Previzualizare</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Aranjare coloane</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Nu este prezent în fișierul CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importat din fișier CSV</translation>
</message>
@@ -970,20 +1024,12 @@ chrome-laptop.</translation>
<translation>Eroare</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Nume câmp necompletat %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>coloană %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Eroare (i) detectată în fișierul CSV!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[% n mai mult mesaj (e) ignorate]</numerusform><numerusform>[% n mai mult mesaj (e) ignorate]</numerusform><numerusform>[%n mai mult mesaj(e) ignorat(e)]</numerusform></translation>
+ <translation><numerusform>[% n mai mult mesaj (e) ignorate]</numerusform><numerusform>[% n mai mult mesaj (e) ignorate]</numerusform><numerusform>[%n mai mult mesaj (e) ignorate]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1007,6 +1053,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>Previzualizare import CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Ultima modificare</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Parola</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creat</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notițe</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titlu</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grup</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Nume utilizator</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1021,7 +1119,7 @@ chrome-laptop.</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>% n byte (e)</numerusform><numerusform>% n byte (e)</numerusform><numerusform>%n byte (s)</numerusform></translation>
+ <translation><numerusform>% n byte (e)</numerusform><numerusform>% n byte (e)</numerusform><numerusform>%n byte (e)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
@@ -1031,11 +1129,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Rădăcină</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Fișierul %1 nu există.</translation>
</message>
@@ -1077,6 +1170,19 @@ Baza de date de rezervă localizată la %2</translation>
<source>Recycle Bin</source>
<translation>Coș de gunoi</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Parole</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1130,10 +1236,6 @@ Vă rugăm să luați în considerare generarea unui nou fișier cheie.</transla
<translation>Nu a putut fi deschis fișierul cheii: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Selectați slotul ...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Deblocați baza de date KeePassXC</translation>
</message>
@@ -1146,14 +1248,6 @@ Vă rugăm să luați în considerare generarea unui nou fișier cheie.</transla
<translation>Câmp parola</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Comutați vizibilitatea parolelor</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Selectarea fișierelor cheie</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Selectarea sloturilor pentru cheie hardware</translation>
</message>
@@ -1218,10 +1312,6 @@ Pentru a preveni apariția acestei erori, trebuie să accesați „Setări baza
&lt;p&gt;Faceți clic pentru mai multe informații ...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;În plus față de parola principală, puteți utiliza un fișier secret pentru a îmbunătăți securitatea bazei de date. Un astfel de fișier poate fi generat în setările de securitate ale bazei de date&lt;/p&gt;. &lt;p&gt;Acesta &lt;strong&gt;nu&lt;/strong&gt; este fișierul dvs. de bază de date * .kdbx!&lt;br&gt; Dacă nu aveți un fișier cheie, lăsați câmpul gol.&lt;/p&gt; &lt;p&gt;Faceți clic pentru mai multe informații ...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Ajutor de fișiere cheie</translation>
</message>
@@ -1230,10 +1320,6 @@ Pentru a preveni apariția acestei erori, trebuie să accesați „Setări baza
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Selectați fișierul cheie ...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Nu se poate utiliza fișierul bazei de date ca fișier cheie</translation>
</message>
@@ -1243,6 +1329,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Nu puteți utiliza fișierul dvs. de bază de date ca fișier cheie.
Dacă nu aveți un fișier cheie, lăsați câmpul gol.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Vă rugăm să atingeți butonul de pe YubiKey dvs.!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1266,10 +1376,6 @@ Dacă nu aveți un fișier cheie, lăsați câmpul gol.</translation>
<translation>Securitate</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Cheia principală</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Setări criptare</translation>
</message>
@@ -1277,6 +1383,10 @@ Dacă nu aveți un fișier cheie, lăsați câmpul gol.</translation>
<source>Browser Integration</source>
<translation>Integrare cu browserul</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1285,18 +1395,6 @@ Dacă nu aveți un fișier cheie, lăsați câmpul gol.</translation>
<translation>Setări KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Deconectează toate navigatoarele web</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Uit&amp;a toate setările specifice site-ului pe intrările</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Mutați KeePassHTTP atributele in KeePassXC-browser &amp;cdate personalizate</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Taste memorate</translation>
</message>
@@ -1376,7 +1474,7 @@ Permisiunile de accesare a intrărilor vor fi revocate.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Permisiuni eliminate cu succes de la% n intrare (e).</numerusform><numerusform>Permisiuni eliminate cu succes de la% n intrare (e).</numerusform><numerusform>Permisiuni eliminate cu succes de la %n intrare (i).</numerusform></translation>
+ <translation><numerusform>Permisiuni eliminate cu succes de la% n intrare (e).</numerusform><numerusform>Permisiuni eliminate cu succes de la% n intrare (e).</numerusform><numerusform>Permisiuni eliminate cu succes pentru %n intrare(i).</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1404,6 +1502,66 @@ Acest lucru este necesar pentru a menține compatibilitatea cu plugin-ul browser
<source>Remove selected key</source>
<translation>Ștergeți tasta selectată</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Creat</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Adauga protectie suplimentara...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nici o parolă setată</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>Avertizare! Nu ați setat o parolă. Folosind o bază de date fără o parolă este puternic descurajat!
+
+Sigur continuați fără parolă?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Continuați fără parolă</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nu s-a adăugat cheia de criptare</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Trebuie să adăugați cel puțin o cheie de criptare pentru a securiza baza de date!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Eroare necunoscută</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1428,10 +1586,6 @@ Acest lucru este necesar pentru a menține compatibilitatea cu plugin-ul browser
<translation>Runde de transformare:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Benchmark pentru întârziere de 1 secunda</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Utilizare Memorie:</translation>
</message>
@@ -1452,14 +1606,6 @@ Acest lucru este necesar pentru a menține compatibilitatea cu plugin-ul browser
<translation>Schimba</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Valorile mai mari oferă o protecție mai mare, dar deschiderea bazei de date va dura mai mult.</translation>
</message>
@@ -1529,22 +1675,12 @@ Dacă păstrați acest număr, baza de date poate fi prea ușor de spart!</trans
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>Mib</numerusform><numerusform>Mib</numerusform><numerusform>Mib</numerusform></translation>
+ <translation><numerusform> MiB</numerusform><numerusform> MiB</numerusform><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>filet (e)</numerusform><numerusform>filet (e)</numerusform><numerusform>filet(e)</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>% 1 MS</numerusform><numerusform>% 1 MS</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>% 1 s</numerusform><numerusform>% 1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform>filet (e)</numerusform><numerusform>filet (e)</numerusform><numerusform>thread(s)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1578,6 +1714,14 @@ Dacă păstrați acest număr, baza de date poate fi prea ușor de spart!</trans
<source>Parallelism</source>
<translation>Paralelism</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1586,16 +1730,16 @@ Dacă păstrați acest număr, baza de date poate fi prea ușor de spart!</trans
<translation>Intrări expuse</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Nu e&amp;xpuneti această bază de date</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Expuneti intrări și sub acest grup:</translation>
+ <source>Expose entries under this group:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Activează fd.o Secret Service pentru a accesa aceste setări.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1630,7 +1774,7 @@ Dacă păstrați acest număr, baza de date poate fi prea ușor de spart!</trans
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation>Mib</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1641,10 +1785,6 @@ Dacă păstrați acest număr, baza de date poate fi prea ușor de spart!</trans
<translation>Setări Adiționale Bază de Date</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Permite &amp;comprimare (recomandat)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Câmpul numelui bazei de date</translation>
</message>
@@ -1678,6 +1818,10 @@ Această acțiune nu este reversibilă.</translation>
<source> (old)</source>
<translation>(vechi)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1712,45 +1856,6 @@ Această acțiune nu este reversibilă.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Adauga protectie suplimentara...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nu s-a adăugat cheia de criptare</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Trebuie să adăugați cel puțin o cheie de criptare pentru a securiza baza de date!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Nici o parolă setată</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>Avertizare! Nu ați setat o parolă. Folosind o bază de date fără o parolă este puternic descurajat!
-
-Sigur continuați fără parolă?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Eroare necunoscută</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Imposibil de modificat cheia master</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Continuați fără parolă</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1770,125 +1875,6 @@ Sigur continuați fără parolă?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistici</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Treceți peste linii cu pictograme de eroare pentru informații suplimentare.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Nume</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Valoare</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Numele bazei de date</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Descriere</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Locație</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Ultima salvare</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Modificări salvate</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>da</translation>
- </message>
- <message>
- <source>no</source>
- <translation>Nu</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Baza de date a fost modificată, dar modificările nu au fost încă salvate pe disc.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Număr de grupuri</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Numărul de intrări</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Numărul de intrări expirate</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Baza de date conține intrări care au expirat.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Parole unice</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Parole non-unice</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Mai mult de 10% din parolele sunt reutilizate. Utilizați parole unice atunci când este posibil.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Reutilizarea maximă a parolei</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Unele parole sunt folosite de mai mult de trei ori. Utilizați parole unice atunci când este posibil.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Număr de parole scurte</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Lungimea minimă recomandată a parolei este de cel puțin 8 caractere.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Număr de parole slabe</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Recomandă folosirea parolelor lungi, aleatorii, cu o notă de „bun” sau „excelent”.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Lungimea medie a parolei</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 caractere</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Lungimea medie a parolei este mai mică de zece caractere. Parolele mai lungi oferă mai multă securitate.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Vă rugăm să așteptați, se calculează statisticile bazei de date ...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1908,7 +1894,7 @@ Sigur continuați fără parolă?</translation>
</message>
<message>
<source>Merge database</source>
- <translation>Îmbina baza de date</translation>
+ <translation>Îmbină baza de date</translation>
</message>
<message>
<source>Open KeePass 1 database</source>
@@ -1983,6 +1969,10 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.<
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Ești pe cale să exporti baza de date într-un fișier necriptat. Acest lucru va lăsa parolele și informațiile dvs. sensibile vulnerabile! Esti sigur ca vrei sa continui?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2000,7 +1990,7 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.<
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Chiar doriți să mutați% n intrare (e) în Coșul de reciclare?</numerusform><numerusform>Chiar doriți să mutați% n intrare (e) în Coșul de reciclare?</numerusform><numerusform>Chiar doriți să mutați %n intrari în Coșul de reciclare?</numerusform></translation>
+ <translation><numerusform>Chiar doriți să mutați% n intrare (e) în Coșul de reciclare?</numerusform><numerusform>Chiar doriți să mutați% n intrare (e) în Coșul de reciclare?</numerusform><numerusform>Chiar doriți să mutați %n intrare (i) în Coșul de reciclare?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2020,7 +2010,7 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.<
</message>
<message>
<source>No current database.</source>
- <translation>Nu există o bază de date curentă.</translation>
+ <translation>Nu există o baza de date curentă.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
@@ -2062,11 +2052,11 @@ Doriți să îmbinați modificările?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Chiar doriți să ștergeți% n intrare (e) pentru totdeauna?</numerusform><numerusform>Chiar doriți să ștergeți% n intrare (e) pentru totdeauna?</numerusform><numerusform>Chiar doriți să ștergeți %n intrari pentru totdeauna?</numerusform></translation>
+ <translation><numerusform>Chiar doriți să ștergeți% n intrare (e) pentru totdeauna?</numerusform><numerusform>Chiar doriți să ștergeți% n intrare (e) pentru totdeauna?</numerusform><numerusform>Chiar doriți să ștergeți %n intrare(i) pentru totdeauna?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Ștergeți intrările?</numerusform><numerusform>Ștergeți intrările?</numerusform><numerusform>Ștergeți intrările?</numerusform></translation>
+ <translation><numerusform>Ștergeți intrările?</numerusform><numerusform>Ștergeți intrările?</numerusform><numerusform>Șterge intrările?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
@@ -2164,6 +2154,14 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Această bază de date este deschisă în modul numai de citire. Autosave este dezactivat.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2208,14 +2206,6 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Selectați cheia privată</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Fișier prea mare pentru a fi cheie privată</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Deschiderea cheii private a eșuat</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Istoric intrare</translation>
</message>
@@ -2228,16 +2218,12 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Editează intrare</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Au fost introduse parole diferite.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Atribut nou</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Sigur doriți să eliminați acest atribut?</translation>
+ <translation>Sunteți sigur că doriți să eliminați acest atribut?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2252,29 +2238,13 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation><numerusform>% n lună (i)</numerusform><numerusform>% n lună (i)</numerusform><numerusform>%n lună(i)</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Aplicați parola generată?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Aplicați parola generată la această intrare?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Intrare actualizată cu succes.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Intrarea are modificări nesalvate</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Atribut nou %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[PROTEJAT] Apăsați pe dezvăluire pentru a vizualiza sau edita</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>% n an (i)</numerusform><numerusform>% n an (i)</numerusform><numerusform>%n an(i)</numerusform></translation>
@@ -2295,6 +2265,26 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Sigur doriți să eliminați această adresă URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Dezvăluie</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Ascunde</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2370,6 +2360,14 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<source>Background color selection</source>
<translation>Selectarea culorii de fundal</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2378,14 +2376,6 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Activare tiparire automat pentru această intrare</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Moștenirea secvenței implicite de tiparire auto din &amp;grupul</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Utilizați secvența de auto-tiparire personalizată:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Asocieri de Ferestre</translation>
</message>
@@ -2441,6 +2431,14 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Secvență personalizată de tip automat pentru această fereastră</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2476,6 +2474,14 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<source>Edit</source>
<translation>Editați </translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2527,18 +2533,10 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Parola:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Repetă:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titlu:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notițe</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Presetări</translation>
</message>
@@ -2551,10 +2549,6 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Nume utilizator:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Expiră</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Câmp url</translation>
</message>
@@ -2563,22 +2557,10 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Descărcați favicon pentru URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Repetați câmpul de parolă</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Comutați generatorul de parolă</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Câmp parola</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Comutați vizibilitatea parolelor</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Notele de comutare sunt vizibile</translation>
</message>
@@ -2610,12 +2592,24 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<source>Toggle expiration</source>
<translation>Combate expirarea</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
<message>
<source>Form</source>
- <translation>Formular</translation>
+ <translation>De la</translation>
</message>
<message>
<source>Remove key from agent after</source>
@@ -2639,7 +2633,7 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Adăugare cheie la agent când baza de date este deschisă/descuiată</translation>
+ <translation>Adăugare cheie la agent când baza de date este deschisă/dezblocată</translation>
</message>
<message>
<source>Comment</source>
@@ -2684,7 +2678,7 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
- <translation>Solicitați confirmarea utilizatorului când se utilizează această tastă</translation>
+ <translation>Solicitați confirmarea utilizatorului când se utilizează această cheie</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
@@ -2745,10 +2739,6 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formular</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tip:</translation>
</message>
@@ -2757,10 +2747,6 @@ Dezactivați salvarea sigură și încercați din nou?</translation>
<translation>Calea:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Parola:</translation>
</message>
@@ -2844,57 +2830,25 @@ Extensiile acceptate sunt: %1.</translation>
<translation>Calea de partajare a câmpului de fișiere</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Browser pentru partajarea fișierului</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Câmp parola</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Comutați vizibilitatea parolelor</translation>
+ <source>Clear fields</source>
+ <translation>Câmpuri clare</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Comutați generatorul de parolă</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation>Câmpuri clare</translation>
+ <source>Browse...</source>
+ <translation>Răsfoiește...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Nume</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Notițe</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Expiră</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Caută</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Auto tiparire</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Utilizați secvența implicită de auto-tiparire a grupului părinte</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Setarea implicită auto-tiparire se&amp;quence</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Câmpul de nume</translation>
</message>
@@ -2922,18 +2876,38 @@ Extensiile acceptate sunt: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Câmpul de secvență implicit de tip automat</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Folosește icoana implicită</translation>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Folosește icoa&amp;nă personalizată</translation>
+ <source>Notes:</source>
+ <translation type="unfinished"/>
</message>
<message>
+ <source>Name:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Adaugă icon personalizat</translation>
</message>
@@ -2967,7 +2941,7 @@ Extensiile acceptate sunt: %1.</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Încărcat cu succes% 1 din% n pictogramă (e)</numerusform><numerusform>Încărcat cu succes% 1 din% n pictogramă (e)</numerusform><numerusform>Încărcat cu succes %1 din %n pictogramă(e)</numerusform></translation>
+ <translation><numerusform>Încărcat cu succes% 1 din% n pictogramă (e)</numerusform><numerusform>Încărcat cu succes% 1 din% n pictogramă (e)</numerusform><numerusform>Încărcat cu succes %1 din %n pictograme</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2975,11 +2949,11 @@ Extensiile acceptate sunt: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>% n pictograma (ele) există deja în baza de date</numerusform><numerusform>% n pictograma (ele) există deja în baza de date</numerusform><numerusform>%n pictograma(ele) există deja în baza de date</numerusform></translation>
+ <translation><numerusform>% n pictograma (ele) există deja în baza de date</numerusform><numerusform>% n pictograma (ele) există deja în baza de date</numerusform><numerusform>%n pictograma(e) există deja în baza de date</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>Pictograma (ele) următoare nu a reușit:</numerusform><numerusform>Pictograma (ele) următoare nu a reușit:</numerusform><numerusform>Pictograma(ele) următoare nu au reușit:</numerusform></translation>
+ <translation><numerusform>Pictograma (ele) următoare nu a reușit:</numerusform><numerusform>Pictograma (ele) următoare nu a reușit:</numerusform><numerusform>Pictograma(e) următoare nu au reușit:</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
@@ -2998,14 +2972,6 @@ Extensiile acceptate sunt: %1.</translation>
<translation>Aplicați pictograma selectată pe subgrupuri și intrări</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Aplicați pictograma &amp; în ...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Aplicați numai la acest aspect</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>De asemenea, aplicați pentru grupuri de copii</translation>
</message>
@@ -3021,6 +2987,22 @@ Extensiile acceptate sunt: %1.</translation>
<source>Existing icon selected.</source>
<translation>Pictograma existentă selectată.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3042,7 +3024,7 @@ Extensiile acceptate sunt: %1.</translation>
</message>
<message>
<source>Plugin Data</source>
- <translation>Plugin de date</translation>
+ <translation>Modul de date</translation>
</message>
<message>
<source>Remove</source>
@@ -3113,7 +3095,7 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation>Formular</translation>
+ <translation>De la</translation>
</message>
<message>
<source>Add</source>
@@ -3207,6 +3189,17 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
<source>Save selected attachment to disk</source>
<translation>Salvați atașamentul selectat pe disc</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3263,7 +3256,7 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
</message>
<message>
<source>Password</source>
- <translation>Parola</translation>
+ <translation>Parolă</translation>
</message>
<message>
<source>Notes</source>
@@ -3290,12 +3283,52 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
<translation>Atașamente</translation>
</message>
<message>
- <source>Yes</source>
- <translation>da</translation>
+ <source>Size</source>
+ <translation>Dimensiunea</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Numele grupului</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3383,7 +3416,7 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
</message>
<message>
<source>Share</source>
- <translation>Împărtăşi</translation>
+ <translation>Împărtăşire</translation>
</message>
<message>
<source>Display current TOTP value</source>
@@ -3395,6 +3428,13 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL invalid</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3421,8 +3461,14 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
<translation>Resetare la valorile implicite</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Atașamente (icon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Are TOTP</translation>
</message>
</context>
<context>
@@ -3434,21 +3480,74 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Nu a reușit să înregistrați serviciul DBus la %1: este executat un alt serviciu secret.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>% n Intrărea a fost utilizata de %1</numerusform><numerusform>%n Intrările au fost utilizate de %1</numerusform><numerusform>%n Intrările au fost utilizate de %1</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Nume de fișier</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grup</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Administra</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Deblocați să afișați</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Nici unul</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplicaţie</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Administra</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Serviciu secret Fdo: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Necunoscut</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Necunoscut</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3456,18 +3555,14 @@ Acest lucru poate provoca moduluri afectate la defecțiune.</translation>
<message>
<source>[empty]</source>
<comment>group has no children</comment>
- <translation>gol</translation>
+ <translation>[gol]</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Imposibil de salvat fișierul!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Imposibil de salvat fișierul script de mesagerie nativ.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3537,14 +3632,6 @@ Puteți activa serviciul pictogramelor site-ului web DuckDuckGo în secțiunea d
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nu a putut fi calculată cheia principală</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Imposibilitatea de a emite provocare-răspuns.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>Lipsă de anteturi de baze de date </translation>
</message>
@@ -3570,16 +3657,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Au fost furnizate datele de acreditare nevalide, încercați din nou.
Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Imposibilitatea de a emite provocare-răspuns.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nu a putut fi calculată cheia principală</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3589,10 +3684,6 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt.</transl
<translation>Lipsă de anteturi de baze de date </translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nu a putut fi calculată cheia principală</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Dimensiune de control antet nevalidă</translation>
</message>
@@ -3710,6 +3801,10 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt.</transl
<source>(HMAC mismatch)</source>
<translation>(Nepotrivire HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3723,14 +3818,14 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt.</transl
<translation>Cifrul simetric nevalid dimensiune IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nu a putut fi calculată cheia principală</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Nu s-a reușit serializarea hărții variantei parametrilor KDF</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3877,15 +3972,11 @@ Aceasta este o migrare într-un singur sens. Nu veți putea deschide baza de dat
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Cheie șir de intrare sau valoare lipsă</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Atașare dublată găsită</translation>
+ <translation>Lipsă de cheie șir de intrare sau valoare </translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Intrare cheie binare sau valoare lipsă</translation>
+ <translation>Lipsă cheiei binare sau valorii intrare </translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
@@ -3918,7 +4009,7 @@ Aceasta este o migrare într-un singur sens. Nu veți putea deschide baza de dat
<message>
<source>Unable to decompress binary</source>
<extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation>Imposibilde a decomprima binar</translation>
+ <translation>Imposibil de a decomprima binar</translation>
</message>
<message>
<source>XML error:
@@ -3930,10 +4021,33 @@ Linia %2, coloana %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Fișier prea mare pentru a fi cheie privată</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Deschiderea cheii private a eșuat</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
- <translation>Baza de date nu poate fi deschisă.</translation>
+ <translation>Nu pot deschide baza de date.</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
@@ -3992,10 +4106,6 @@ Linia %2, coloana %3</translation>
<translation>Rădăcină</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nu a putut fi calculată cheia principală</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Transformarea cheii nu a reușit</translation>
</message>
@@ -4021,7 +4131,7 @@ Linia %2, coloana %3</translation>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation>Dimensiunea incorectă a câmpului pentru modificarea grupelor</translation>
+ <translation>Dimensiunea incorectă a câmpului timpul modificarii grupei</translation>
</message>
<message>
<source>Incorrect group access time field size</source>
@@ -4097,6 +4207,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Au fost furnizate datele de acreditare nevalide, încercați din nou.
Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4203,16 +4317,6 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt.</transl
<translation>Format moștenit de fișier cheie </translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Utilizați un format de fișier cheie moștenit care poate deveni
-neacceptat în viitor.
-
-Vă rugăm să mergeți la setările principale cheie și generati un nou fișier cheie.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Eroare la încărcarea fișierului cheie &apos;%1&apos;
@@ -4280,6 +4384,13 @@ Are you sure you want to continue with this file?</source>
<translation>Fișierul cheie ales arată ca un fișier de bază de date cu parolă. Un fișier cheie trebuie să fie un fișier static care nu se schimbă niciodată sau veți pierde accesul la baza de date pentru totdeauna.
Sigur doriți să continuați cu acest fișier?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4288,18 +4399,10 @@ Sigur doriți să continuați cu acest fișier?</translation>
<translation>&amp;Bază de date</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Baze de date recente</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Ajutor</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>I&amp;ntrări</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupuri</translation>
</message>
@@ -4316,46 +4419,10 @@ Sigur doriți să continuați cu acest fișier?</translation>
<translation>&amp;Despre</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Deschide baza de date...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Salvează bază de date</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Închide baza de date</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Șterge intrarea</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Editează grupul</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Șterge grupul</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Sa&amp;lvează bază de date ca...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Setări bază de date</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Clonează intrarea</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Copiază &amp;numele de utilizator</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Copiere nume utilizator în Clipboard</translation>
</message>
@@ -4368,10 +4435,6 @@ Sigur doriți să continuați cu acest fișier?</translation>
<translation>&amp;Setări</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Blocare baze de date</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titlu</translation>
</message>
@@ -4396,14 +4459,6 @@ Sigur doriți să continuați cu acest fișier?</translation>
<translation>Copierea notelor în Clipboard</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportă în fișier CSV...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Configurarea TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Copiază &amp;TOTP</translation>
</message>
@@ -4448,10 +4503,6 @@ Această versiune nu este destinată utilizării producției.</translation>
<translation>&amp;Donează</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Reportează un &amp;defect</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>Avertisment: versiunea dumneavoastră QT poate provoca KeePassXC să se blocheze cu o tastatură vizuală!
@@ -4462,66 +4513,26 @@ Vă recomandăm să utilizați AppImage disponibile pe pagina noastră de descă
<translation>&amp;Import</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Copiază at&amp;ributul...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Bază de date nouă</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Crearea unei baze de date noi</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Merge din baza de date...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Îmbinare dintr-o altă bază de date KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Intrare nouă</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Adăugarea unei noi intrări</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Editează intrarea</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Vizualizarea sau editarea intrării</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Grup nou</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Adăugarea unui grup nou</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Modifică &amp;cheia principală</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Setări bază de date...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Copiază &amp;parola</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Efectuați și &amp;Auto-Tiparire</translation>
</message>
@@ -4530,30 +4541,14 @@ Vă recomandăm să utilizați AppImage disponibile pe pagina noastră de descă
<translation>Deschide &amp;URL-ul</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 bază de date...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importul unei baze de date KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Fișier CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importul unui fișier CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Afișare TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Afișare cod QR TOTP...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>Notă: utilizați o versiune pre-release de KeePassXC!
@@ -4576,14 +4571,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>&amp;Export</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>Verifică pentru a&amp;ctualizări...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Descarc&amp;a toate favicons</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Sortare &amp;A-Z</translation>
</message>
@@ -4596,48 +4583,290 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Generator de &amp;parolă</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Descarcă favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Import 1Password Vault</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>Noțiuni de bază</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Export în fișier HTML ...</translation>
+ <source>&amp;User Guide</source>
+ <translation>Manualul &amp;utilizatorului</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password Vault...</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>comenzi rapide de la tastatură</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Import 1Password Vault</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Baze de date recente</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>Noțiuni de bază</translation>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Deschideți Ghidul de pornire PDF</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Ajutor &amp;online...</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Accesați documentația online (deschide browserul)</translation>
+ <source>View</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Manualul &amp;utilizatorului</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Deschideți Ghidul utilizatorului PDF</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>comenzi rapide de la tastatură</translation>
+ <source>&amp;Open Database…</source>
+ <translation>Deschide baza de date</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Salvează baza de date</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Închide baza de date</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Bază de date nouă...</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Setări bază de &amp;date...</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>Fișier CSV...</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Setări bază de date</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Editați setările bazei de date</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Deblocare bază de date</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Deblocați baza de date pentru a afișa mai multe informații</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Blocare bază de date</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Deconecta</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4726,10 +4955,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Pagină de start</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Setări cri&amp;ptare</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Aici aveți posibilitatea să ajustați setările de criptare a bazei de date. Nu vă faceți griji, le puteți modifica mai târziu în setările bazei de date.</translation>
</message>
@@ -4741,27 +4966,31 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<source>Simple Settings</source>
<translation>Setări simple</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Setări criptare</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aici aveți posibilitatea să ajustați setările de criptare a bazei de date. Nu vă faceți griji, le puteți modifica mai târziu în setările bazei de date.</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Cheie bază de date Master</translation>
+ <source>Encryption Settings</source>
+ <translation>Setări criptare</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>O cheie principală cunoscută numai pentru tine protejează baza de date.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Aici aveți posibilitatea să ajustați setările de criptare a bazei de date. Nu vă faceți griji, le puteți modifica mai târziu în setările bazei de date.</translation>
</message>
</context>
<context>
@@ -4776,6 +5005,13 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4858,7 +5094,7 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
</message>
<message>
<source>Key file way too small.</source>
- <translation>Cheie dosar mult prea mic.</translation>
+ <translation>Cheie dosar e prea mica.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
@@ -4951,6 +5187,18 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<source>Passwords match so far</source>
<translation>Parolele se potrivesc până acum</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4975,25 +5223,13 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Parolele nu se potrivesc.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Generare parolă principală</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Câmp parola</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Comutați vizibilitatea parolelor</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Repetați câmpul de parolă</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Comutați generatorul de parolă</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5002,10 +5238,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Parola:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>putere</translation>
@@ -5016,7 +5248,7 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
</message>
<message>
<source>Password</source>
- <translation>Parola</translation>
+ <translation>Parolă</translation>
</message>
<message>
<source>Character Types</source>
@@ -5055,14 +5287,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Separator cuvinte:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copiază</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Acceptă</translation>
- </message>
- <message>
<source>Close</source>
<translation>Închide</translation>
</message>
@@ -5144,7 +5368,7 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
</message>
<message>
<source>&lt;*+!?=</source>
- <translation>&lt;*+!?=&gt;&lt;/*+!?=&gt;</translation>
+ <translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
@@ -5159,14 +5383,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Comutarea la modul simplu</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Simplu</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Set de caractere pentru a exclude din parola generată</translation>
</message>
@@ -5187,14 +5403,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Caractere excluse: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;.&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Număr c&amp;uvinte:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Regenera</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Parol generat</translation>
</message>
@@ -5243,10 +5451,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Copiază parola</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Acceptați parola</translation>
- </message>
- <message>
<source>lower case</source>
<translation>minuscule</translation>
</message>
@@ -5259,8 +5463,44 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>registrul antetului</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Comutați vizibilitatea parolelor</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Număr cuvinte:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Golește</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5273,6 +5513,58 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<source>Statistics</source>
<translation>Statistici</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5369,7 +5661,7 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
</message>
<message>
<source>Path of the database.</source>
- <translation>Calea către baza de date.</translation>
+ <translation>Calea către baza de date</translation>
</message>
<message>
<source>Key file of the database.</source>
@@ -5412,17 +5704,13 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<translation>Calea intrării de adăugat.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Copiați parola unei intrări în Clipboard.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Calea intrării în clip.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Expirare în câteva secunde înainte de Golirea Clipboard.</translation>
+ <translation>Expirare în secunde înainte de Golirea Clipboard.</translation>
</message>
<message>
<source>Edit an entry.</source>
@@ -5554,7 +5842,7 @@ Comenzi disponibile:
</message>
<message>
<source>Password</source>
- <translation>Parola</translation>
+ <translation>Parolă</translation>
</message>
<message>
<source>Notes</source>
@@ -5573,14 +5861,6 @@ Comenzi disponibile:
<translation>Integrare cu browserul</translation>
</message>
<message>
- <source>Press</source>
- <translation>Apasă</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasiv</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agent SSH</translation>
</message>
@@ -5612,39 +5892,27 @@ Comenzi disponibile:
</message>
<message>
<source>Writing the database failed %1.</source>
- <translation>Scrierea bazei de date nu a reușit %1.</translation>
+ <translation>Scrierea bazei de date nu a reușit% 1.</translation>
</message>
<message>
<source>Successfully added entry %1.</source>
<translation>Intrare adăugată cu succes %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Copiați TOTP curent în Clipboard.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Valoare de expirare nevalidă %1.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
- <translation>Intrarea %1 nu a fost găsită.</translation>
+ <translation>Intrarea% 1 nu a fost găsită.</translation>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Intrarea cu calea %1 nu are TOTP configurat.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP curent de intrare copiate în Clipboard!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Parola de intrare copiate în Clipboard!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Golirea Clipboard-ului în% 1 second (s)...</numerusform><numerusform>Golirea Clipboard-ului în% 1 second (s)...</numerusform><numerusform>Golirea Clipboard-ului în %1 secunda (e)...</numerusform></translation>
+ <translation><numerusform>Golirea Clipboard-ului în% 1 second (s)...</numerusform><numerusform>Golirea Clipboard-ului în% 1 second (s)...</numerusform><numerusform>Golirea Clipboard-ului în %1 secund(e)...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5862,10 +6130,6 @@ Comenzi disponibile:
<translation>Nici un program definit pentru manipularea Clipboard</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Imposibil de pornit programul %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>fișier gol</translation>
</message>
@@ -5874,18 +6138,6 @@ Comenzi disponibile:
<translation>% 1: (rând, col) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-biți</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-biți</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-biți</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – recomandat)</translation>
</message>
@@ -6136,10 +6388,6 @@ Nucleu (Kernel): %3 %4</translation>
<translation>Afișați acest ajutor.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Slot Yubikey utilizat pentru criptarea bazei de date.</translation>
- </message>
- <message>
<source>slot</source>
<translation>slot</translation>
</message>
@@ -6156,10 +6404,6 @@ Nucleu (Kernel): %3 %4</translation>
<translation>Ieșiți din modul interactiv.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Formatul de utilizat la export. Opțiunile disponibile sunt xml sau csv. Valori implicite la xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exportă conținutul unei baze de date până la ieșirea standard în formatul specificat.</translation>
</message>
@@ -6200,10 +6444,6 @@ Nucleu (Kernel): %3 %4</translation>
<translation>Calea noii baze de date.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Imposibil de importat baza de date XML export %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Baza de date importată cu succes.</translation>
</message>
@@ -6296,10 +6536,6 @@ Nucleu (Kernel): %3 %4</translation>
<translation>Slot YubiKey %1 nevalid</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Vă rugăm să atingeți butonul de pe YubiKey pentru a debloca %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Introduceți parola pentru criptarea bazei de date (opțional):</translation>
</message>
@@ -6315,13 +6551,9 @@ Nucleu (Kernel): %3 %4</translation>
<source>User name</source>
<translation>Nume utilizator</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Răspuns la provocare - slot %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Parola pentru „%1” a fost scursă de 2% ori!</numerusform><numerusform>Parola pentru „%1” a fost scursă de 2% ori!</numerusform><numerusform>Parola pentru „%1” a fost scursă de 2% ori!</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6331,6 +6563,193 @@ Nucleu (Kernel): %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Afișează atributele protejate într-un text clar.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>timp</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Nume:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Descriere:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Cifru:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-biți</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-biți</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6367,6 +6786,290 @@ Nucleu (Kernel): %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Inacceptabil</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Slab</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titlu</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Cale</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Scor</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Motiv</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Editare intrare...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titlu</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Cale</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>o dată</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Editare intrare...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Treceți peste linii cu pictograme de eroare pentru informații suplimentare.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nume</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valoare</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Vă rugăm să așteptați, se calculează statisticile bazei de date ...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Numele bazei de date</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descriere</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Locație</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Ultima salvare</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Modificări salvate</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>da</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>Nu</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Baza de date a fost modificată, dar modificările nu au fost încă salvate pe disc.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Număr de grupuri</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Numărul de intrări</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Numărul de intrări expirate</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Baza de date conține intrări care au expirat.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Parole unice</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Parole non-unice</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Mai mult de 10% din parolele sunt reutilizate. Utilizați parole unice atunci când este posibil.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Reutilizarea maximă a parolei</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Unele parole sunt folosite de mai mult de trei ori. Utilizați parole unice atunci când este posibil.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Număr de parole scurte</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Lungimea minimă recomandată a parolei este de cel puțin 8 caractere.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Număr de parole slabe</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Recomandă folosirea parolelor lungi, aleatorii, cu o notă de „bun” sau „excelent”.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Lungimea medie a parolei</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 caractere</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Lungimea medie a parolei este mai mică de zece caractere. Parolele mai lungi oferă mai multă securitate.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6400,6 +7103,14 @@ Nucleu (Kernel): %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>O solicitare de confirmare nu este acceptată de agent (opțiuni de selectare).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6445,7 +7156,7 @@ Nucleu (Kernel): %3 %4</translation>
</message>
<message>
<source>match one</source>
- <translation>meci unul</translation>
+ <translation>se potriveste unul</translation>
</message>
<message>
<source>logical OR</source>
@@ -6507,26 +7218,10 @@ Nucleu (Kernel): %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;În cazul în care coșul de reciclare este activat pentru baza de date, intrările vor fi mutate direct la coșul de gunoi. În caz contrar, acestea vor fi șterse fără confirmare.&lt;/p&gt;&lt;p&gt; Vi se va solicita totuși dacă orice alte înregistrări sunt trimise de către alții.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Nu confirmați când înregistrările sunt șterse de către clienți.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Grupuri de baze de date expuse:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Nume de fișier</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grup</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Administra</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Autorizare</translation>
</message>
@@ -6535,40 +7230,20 @@ Nucleu (Kernel): %3 %4</translation>
<translation>Aceste aplicații sunt conectate în prezent:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Aplicaţie</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Deconecta</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Setări bază de date</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Editați setările bazei de date</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Deblocare bază de date</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Deblocați baza de date pentru a afișa mai multe informații</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Blocare bază de date</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Deblocați să afișați</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>None</source>
- <translation>Nici unul</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6659,7 +7334,7 @@ Nucleu (Kernel): %3 %4</translation>
</message>
<message>
<source>Untrusted</source>
- <translation>Încredere</translation>
+ <translation>Fara Încredere</translation>
</message>
<message>
<source>Unknown</source>
@@ -6841,10 +7516,6 @@ Nucleu (Kernel): %3 %4</translation>
<translation>Import semnat cu succes</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Eroare neașteptată</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Container de partajare nesemnate nu sunt acceptate-import prevenit</translation>
</message>
@@ -7014,6 +7685,13 @@ Exemplu: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL invalid</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7104,6 +7782,53 @@ Exemplu: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Apasă</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasiv</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7118,14 +7843,6 @@ Exemplu: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Dacă dețineți un &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, îl puteți folosi pentru securitate suplimentară.&lt;/p&gt;&lt;p&gt;YubiKey necesită unul dintre sloturile sale să fie programat ca &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-răspuns&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nu este detectat YubiKey, asigurați-vă că este conectat.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Nu s-a inserat YubiKey.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Actualizați jetoane hardware</translation>
</message>
@@ -7133,5 +7850,21 @@ Exemplu: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Selectarea sloturilor pentru cheie hardware</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_ru.ts b/share/translations/keepassx_ru.ts
index 7fb0495bd..e9b174056 100644
--- a/share/translations/keepassx_ru.ts
+++ b/share/translations/keepassx_ru.ts
@@ -15,7 +15,7 @@
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC распространяется на условиях универсальной общественной лицензии GNU (GPL) версии 2 или 3 (на ваше усмотрение).</translation>
+ <translation>KeePassXC распространяется на условиях универсальной общедоступной лицензии GNU (GPL) версии 2 или 3 (на ваше усмотрение).</translation>
</message>
<message>
<source>Contributors</source>
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Включить SSH-агент (необходим перезапуск)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Использовать OpenSSH для Windows вместо Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Включить интеграцию SSH-агента</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>значение SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>переопределить SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(пусто)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Отсутствуют сокеты агента SSH. Убедитесь, что переменная окружения SSL_AUTH_SOCK определена или переопределите её значение. </translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Соединение с агентом SSH активно.</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Действительно сбросить все общие параметры и параметры безопасности к значениям, заданным по умолчанию? </translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Монохромный (светлый)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Монохромный (тёмный)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Цветной</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -120,17 +152,13 @@
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Сворачивать окно при запуске приложения</translation>
+ <translation>Запускать приложение в свёрнутом виде</translation>
</message>
<message>
<source>File Management</source>
<translation>Управление файлами</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Безопасное сохранение файлов базы данных (возможна несовместимость с Dropbox и др.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Создавать резервную копию базы данных перед сохранением</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Автоматически сохранять при выходе</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Не помечать базу данных изменённой при действиях, не связанных с изменением данных (например, при раскрытии групп)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Автоматически перезагружать базу данных при её изменении извне</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Использовать значок группы для новых записей</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Скрыть панель предварительного просмотра записи</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Общие</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Скрывать панель инструментов (значки)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Сворачивать вместо закрытия программы</translation>
</message>
@@ -179,12 +191,8 @@
<translation>Значок в области уведомлений</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Тёмный значок в области уведомлений</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
- <translation>При сворачивании скрывать окно в область уведомлений</translation>
+ <translation>Сворачивать окно в область уведомлений</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -203,23 +211,11 @@
<translation>Всегда спрашивать перед автовводом</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Комбинация клавиш для глобального автоввода</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Задержка автоввода</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> мс</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Задержка начала автоввода</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Перемещаемая панель инструментов</translation>
</message>
@@ -233,7 +229,7 @@
</message>
<message>
<source>Remember database key files and security dongles</source>
- <translation>Запоминать для баз данных ключевые файлы и ключи безопасности</translation>
+ <translation>Запоминать для баз данных файлы-ключи и аппаратные ключи безопасности</translation>
</message>
<message>
<source>Check for updates at application startup once per week</source>
@@ -244,10 +240,6 @@
<translation>Включать в проверку обновлений бета-релизы</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Стиль кнопок:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Язык:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Внешний вид кнопок на панели инструментов</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Использовать для заметок моноширинный шрифт</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Выбор языка</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Восстановить значения по умолчанию</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Комбинация клавиш для глобального автоввода:</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Задержка начала автоввода, задаётся в милисекундах</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Автоматически запуск KeePassXC при запуске системы</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Помечать базу данных изменённой при действиях, не связанных с изменением данных (например, при раскрытии групп)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Безопасное сохранение файлов базы данных (возможна несовместимость с Dropbox и др.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Интерфейс</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Внешний вид кнопок панели инструментов:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Использовать для заметок моноширинный шрифт</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Тип значка в системном лотке:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Сбросить настройки по умолчанию...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Задержка набора автоввода:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Комбинация клавиш для глобального автоввода:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Задержка начала автоввода:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -325,16 +353,16 @@
</message>
<message>
<source>Clear clipboard after</source>
- <translation>Задержка очистки буфера обмена:</translation>
+ <translation>Очищать буфер обмена через</translation>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> с</translation>
+ <translation>сек</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>Блокировать базу данных при отсутствии активности в течение</translation>
+ <translation>Блокировать базу данных при неактивности в течение</translation>
</message>
<message>
<source> min</source>
@@ -342,7 +370,7 @@
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation>Забыть TouchID после неактивности</translation>
+ <translation>Забывать TouchID после неактивности</translation>
</message>
<message>
<source>Convenience</source>
@@ -354,27 +382,15 @@
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Забыть TouchID, когда сеанс заблокирован или крышка закрыта</translation>
+ <translation>Забывать TouchID при блокировке сеанса или закрытии крышки ноутбука</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>Блокировать базу данных при сворачивании окна</translation>
+ <translation>Блокировать базы данных при сворачивании окна</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Заблокировать базу данных после автоввода</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Не требовать повторный ввод пароля, когда он показывается</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Не скрывать пароли при их изменении</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Не использовать заполнитель для полей с пустым паролем</translation>
+ <translation>Блокировать ранее заблокированную БД после автоввода</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@@ -382,7 +398,7 @@
</message>
<message>
<source>Hide entry notes by default</source>
- <translation>Не показывать текст заметкок </translation>
+ <translation>По умолчанию скрывать примечания записи</translation>
</message>
<message>
<source>Privacy</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Задержка очистки поискового запроса:</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Требовать повтора пароля, когда он виден</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Скрыть пароли при их редактировании</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Использовать заполнитель для полей с пустым паролем</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -422,7 +450,7 @@
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Автоввод — KeePassXC</translation>
+ <translation>Автоввод - KeePassXC</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -430,7 +458,7 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>Неверный синтаксис инструкции автоввода!</translation>
+ <translation>Неверная инструкция автоввода!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
@@ -465,7 +493,7 @@
</message>
<message>
<source>Default sequence</source>
- <translation>Последовательность по умолчанию</translation>
+ <translation>Стандартная последовательность</translation>
</message>
</context>
<context>
@@ -476,11 +504,11 @@
</message>
<message>
<source>Title</source>
- <translation>Заголовок</translation>
+ <translation>Имя записи</translation>
</message>
<message>
<source>Username</source>
- <translation>Логин</translation>
+ <translation>Имя пользователя</translation>
</message>
<message>
<source>Sequence</source>
@@ -513,7 +541,7 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>Автоввод — KeePassXC</translation>
+ <translation>Автоввод - KeePassXC</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
@@ -527,41 +555,43 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Подтверждение доступа для KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeepassXC — запрос доступа браузером</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Запомнить это решение</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 запрашивает доступ к следующим записям:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Разрешить</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Всегда разрешать доступ к отмеченным записям</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Запретить</translation>
+ <source>Remember</source>
+ <translation>Запомнить</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 запросил доступ к паролям для следующих элементов.
-Разрешить доступ?</translation>
+ <source>Allow access to entries</source>
+ <translation>Всегда разрешать доступ к записям</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Разрешить доступ</translation>
+ <source>Allow Selected</source>
+ <translation>Разрешить выбранные</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Запретить доступ</translation>
+ <source>Deny All</source>
+ <translation>Запретить все</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Отключить для этого сайта</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-Browser: Сохранение записи</translation>
+ <translation>KeePassXC-Browser - сохранить запись</translation>
</message>
<message>
<source>Ok</source>
@@ -579,201 +609,262 @@ Please select the correct database for saving credentials.</source>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Диалог</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Запрос на ассоциацию нового ключа</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Это требуется для доступа к базам данных с помощью KeePassXC-Browser</translation>
+ <source>Save and allow access</source>
+ <translation>Сохранить и разрешить доступ</translation>
</message>
<message>
- <source>General</source>
- <translation>Общие</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Перезаписать существующий ключ?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Включить интеграцию для браузеров:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Общий секретный ключ с именем &quot;%1&quot; уже существует.
+Вы действительно хотите его перезаписать?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Обновить запись</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Обновить информацию в %1 — %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Прервать</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Преобразование атрибутов в пользовательских данных...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Показывать &amp;уведомление при запросе учётных данных</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Атрибуты KeePassHTTP преобразованы</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Запрашивать разблокировку базы данных, если она заблокирована</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Успешно преобразованы атрибуты из %1 записи(ей).
+Перемещено ключей в пользовательские данные: %2.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Успешно переехал %n ключи пользовательских данных.</numerusform><numerusform>Успешно переехал %n ключи пользовательских данных.</numerusform><numerusform>Успешно переехал %n ключи пользовательских данных.</numerusform><numerusform>Успешно перемещено ключей в пользовательские данные: %n.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Возвращаются только записи с таким же протоколом (http://, https://, ...).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Не найдено записи с атрибутами KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Проверять совпадение протокола для URL-адресов (например: https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>В активной базе данных нет записи с атрибутами KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Возвращает только лучшие совпадения для определённого URL-адреса, а не все записи для целого домена.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Обнаружена устаревшая интеграция с браузером</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Возвращать только наиболее подходящие совпадения</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Создать новую группу</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Сортировать возвращаемые данные по &amp;названию</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Получен запрос на создание новой группы &quot;%1&quot;.
+Создать эту группу?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Сортировать возвращаемые данные по &amp;имени пользователя</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Ваши настройки KeePassXC-Browser требуется переместить в настройки базы данных.
+Это необходимо, чтобы поддерживать текущие подключения браузера.
+Хотите перенести настройки сейчас?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Дополнительные</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Не показывать это предупреждение</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Не подтверждать &amp;доступ к записям</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Получен запрос на ассоциацию для следующей базы данных:
+%1
+
+Задайте для соединения уникальное имя или идентификатор, например: chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Не подтверждать &amp;обновление записей</translation>
+ <source>Dialog</source>
+ <translation>Диалог</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Искать во &amp;всех открытых базах</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Это требуется для доступа к базам данных с помощью KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Автоматическое создание или обновление строковых полей не поддерживается.</translation>
+ <source>Enable browser integration</source>
+ <translation>Включить интеграцию с браузером</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Возвращать дополнительные стро&amp;ковые поля, начинающиеся с &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Общие</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Автоматически обновлять пути к сценариям механизма native messaging при запуске KeePassXC или keepassxc-proxy.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Браузеры, установленные в виде snap-пакетов, в настоящее время не поддерживаются.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Обновлять файлы манифеста механизма &amp;native messaging при запуске</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Включить интеграцию для браузеров:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Поддержка прокси-приложения между KeePassXC и расширением браузера.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Использовать &amp;прокси-приложение между KeePassXC и расширением браузера</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Использовать пользовательский путь к прокси при установке прокси вручную.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Задать &amp;своё расположение прокси</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Обзор…</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;ВНИМАНИЕ:&lt;/b&gt; Следующие параметры могут быть опасны!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Выбрать другое расположение прокси</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Показывать уведомление при запросе учётных данных</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Исполняемые файлы</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Запрашивать разблокировку базы данных, если она заблокирована</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Все файлы</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Возвращаются только записи с таким же протоколом (http://, https://, ...).</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Не спрашивать разрешения для &amp;базовой HTTP-аутентификации</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Проверять совпадение протокола для URL-адресов (например: https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Так как Snap это песочница, для включения браузерной интеграции нужно выполнить сценарий.&lt;br /&gt;Этот сценарий можно получить с %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>При поиске по URL возвращать только лучшие совпадения, а не все записи для домена.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Ознакомьтесь с инструкциями по использованию расширения браузера ниже</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Возвращать только наиболее подходящие совпадения</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Для интеграции требуется установить расширение для браузера «KeePassXC-Browser». &lt;br /&gt;Установите его для %1 и %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Возвращать также записи с завершившимся сроком действия. К названию таких записей будет добавлено «[expired]».</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Возвращать истёкшие записи</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Возвращать также записи с завершившимся сроком действия. К названию таких записей будет добавлено «[expired]».</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Получать результаты поиска из всех подключённых баз данных</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>Возвращать &amp;истёкшие записи</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Искать во всех открытых базах</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Включить интеграцию с браузером</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Сортировать возвращаемые данные по названию</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Браузеры, установленные в виде snap-пакетов, в настоящее время не поддерживаются.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Сортировать возвращаемые данные по имени пользователя</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Получать результаты поиска из всех подключённых баз данных</translation>
+ <source>Advanced</source>
+ <translation>Расширенный режим</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Не подтверждать доступ к записям</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Не подтверждать обновление записей</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Не спрашивать разрешения для обычной проверки подлинности HTTP</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Автоматическое создание или обновление строковых полей не поддерживается.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Возвращать дополнительные строковые поля, начинающиеся с &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Не показывать напоминание о переносе устаревших параметров KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation>Не показывать напоминание о переносе устаревших параметров KeePassHTTP</translation>
</message>
<message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Автоматически обновлять пути к сценариям механизма native messaging при запуске KeePassXC или keepassxc-proxy.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Обновлять файлы манифеста механизма native messaging при запуске</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Использовать пользовательский путь к прокси при установке прокси вручную.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Задать своё расположение прокси:</translation>
+ </message>
+ <message>
<source>Custom proxy location field</source>
<translation>Поле расположения пользовательского прокси сервера</translation>
</message>
@@ -782,106 +873,81 @@ Please select the correct database for saving credentials.</source>
<translation>Выбрать файл пользовательского прокси сервера</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Внимание!&lt;/b&gt; Не найдено приложение keepassxc-proxy! &lt;br /&gt; Проверьте папку установки KeePassXC или задайте свой путь в дополнительных настройках. &lt;br /&gt;Интеграция в браузеры не будет работать без прокси-приложения. &lt;br /&gt;Ожидаемый путь: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Обзор…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Запрос на ассоциацию нового ключа</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Задать своё расположение файла конфигурации браузера:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Сохранить и разрешить доступ</translation>
+ <source>Browser type:</source>
+ <translation>Тип браузера:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Перезаписать существующий ключ?</translation>
+ <source>Toolbar button style</source>
+ <translation>Внешний вид кнопок на панели инструментов</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Общий секретный ключ с именем &quot;%1&quot; уже существует.
-Вы действительно хотите его перезаписать?</translation>
+ <source>Config Location:</source>
+ <translation>Расположение файла конфигурации:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Обновить запись</translation>
+ <source>Custom browser location field</source>
+ <translation>Поле расположения пользовательского браузера</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Обновить информацию в %1 — %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Прервать</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Выбрать расположение браузера</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Преобразование атрибутов в пользовательские данные...</translation>
+ <source>Custom extension ID:</source>
+ <translation>Пользовательский идентификатор расширения:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Атрибуты KeePassHTTP преобразованы</translation>
+ <source>Custom extension ID</source>
+ <translation>Пользовательский идентификатор расширения</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Записей, из которых успешно преобразованы атрибуты: %1.
-Перемещено ключей в пользовательские данные: %2.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n ключ успешно перемещён в пользовательские данные.</numerusform><numerusform>%n ключа успешно перемещены в пользовательские данные.</numerusform><numerusform>%n ключей успешно перемещены в пользовательские данные.</numerusform><numerusform>Перемещено ключей в пользовательские данные: %n.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Так как Snap это песочница, для включения браузерной интеграции нужно выполнить сценарий.&lt;br /&gt;Этот сценарий можно получить с %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Не найдено записи с атрибутами KeePassHTTP!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>Для интеграции требуется установить расширение для браузера «KeePassXC-Browser». &lt;br /&gt;Установите его для %1, %2 и %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>В активной базе данных нет записи с атрибутами KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Ознакомьтесь с инструкциями по использованию расширения браузера ниже</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Обнаружена устаревшая интеграция с браузерами</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Внимание:&lt;/b&gt; не удалось найти заданное пользователем расположение прокси.&lt;br/&gt; Интеграция с браузером НЕ РАБОТАЕТ без приложения прокси.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Создать новую группу</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;ВНИМАНИЕ:&lt;/b&gt; Следующие параметры могут быть опасны!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Получен запрос для создания новой группы &quot;%1&quot;.
-Создать эту группу?
-</translation>
+ <source>Executable Files</source>
+ <translation>Исполняемые файлы</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Необходимо переместить настройки KeePassXC-Browser в настройки базы данных.
-Это нужно для управления текущими подключениями к браузерам.
-Переместить имеющиеся настройки?</translation>
+ <source>All Files</source>
+ <translation>Все файлы</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Не показывать это предупреждение</translation>
+ <source>Select custom proxy location</source>
+ <translation>Выбрать другое расположение прокси</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Получен запрос на ассоциацию для следующей базы данных:
-%1
-
-Задайте для соединения уникальное имя или идентификатор, например: chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Выбрать расположение папки native messaging</translation>
</message>
</context>
<context>
@@ -896,7 +962,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Replace username and password with references</source>
- <translation>Заменить логин и пароль ссылками</translation>
+ <translation>Использовать ссылки для имени пользователя и пароля</translation>
</message>
<message>
<source>Copy history</source>
@@ -923,7 +989,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Codec</source>
- <translation>Кодировка</translation>
+ <translation>Кодек</translation>
</message>
<message>
<source>Text is qualified by</source>
@@ -938,26 +1004,14 @@ chrome-laptop.</source>
<translation>Символ начала комментария</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Первая запись содержит имена полей</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>Считать символ «\» экранирующим</translation>
+ <translation>Символ «\» является экранирующим</translation>
</message>
<message>
<source>Preview</source>
<translation>Предварительный просмотр</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Расположение столбцов</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Отсутствует в CSV-файле</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Импортировано из CSV-файла</translation>
</message>
@@ -970,25 +1024,17 @@ chrome-laptop.</source>
<translation>Ошибка</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Пустое имя поля %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>Столбец %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Ошибки в CSV-файле!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[ещё %n сообщение пропущено]</numerusform><numerusform>[ещё %n сообщения пропущено]</numerusform><numerusform>[ещё %n сообщений пропущено]</numerusform><numerusform>[пропущено сообщений: %n]</numerusform></translation>
+ <translation><numerusform>[%n больше сообщений пропущен]</numerusform><numerusform>[%n больше сообщений пропущен]</numerusform><numerusform>[%n больше сообщений пропущен]</numerusform><numerusform>[пропущено сообщений: %n]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>Импорт CSV: запись с ошибками (%1)</translation>
+ <translation>Импорт CSV: запись с ошибками - %1</translation>
</message>
<message>
<source>Text qualification</source>
@@ -1006,12 +1052,64 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation>Предварительный просмотр импорта из CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Связывание столбцов</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Изменён</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Пароль</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Создано</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Заметки</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заголовок</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Группа</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL-адрес</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Логин</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Начальные строки пропущены</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Первая запись содержит имена полей</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Отусуствует</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Столбец %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n столбец</numerusform><numerusform>%n столбца</numerusform><numerusform>%n столбцов</numerusform><numerusform>%n столбцов</numerusform></translation>
+ <translation><numerusform>%n столбцов</numerusform><numerusform>%n столбцов</numerusform><numerusform>%n столбцов</numerusform><numerusform>%n столбцов</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1020,21 +1118,16 @@ chrome-laptop.</source>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n байт</numerusform><numerusform>%n байта</numerusform><numerusform>%n байт</numerusform><numerusform>%n байт</numerusform></translation>
+ <translation><numerusform>%n байт(ов)</numerusform><numerusform>%n байт(ов)</numerusform><numerusform>%n байт(ов)</numerusform><numerusform>%n байт</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n строка</numerusform><numerusform>%n строки</numerusform><numerusform>%n строк</numerusform><numerusform>%n строк</numerusform></translation>
+ <translation><numerusform>%n строка</numerusform><numerusform>%n строк</numerusform><numerusform>%n строк</numerusform><numerusform>%n строк</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Корень</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Файл %1 не существует.</translation>
</message>
@@ -1048,11 +1141,11 @@ chrome-laptop.</source>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>Невозможно перезаписать файл - он открыт в режиме только для чтения.</translation>
+ <translation>Файл не может быть перезаписан - он открыт в режиме &quot;только для чтения&quot;.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Ключ не преобразован. Это ошибка, сообщите о ней разработчикам.</translation>
+ <translation>Ключ не преобразован. Это ошибка, сообщите о ней разработчикам!</translation>
</message>
<message>
<source>%1
@@ -1076,12 +1169,25 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Корзина</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Пароли</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Сохранение базы данных уже выполняется.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Не удалось сохранить, база данных не была инициализирована.</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>Разблокировка базы данных - KeePassXC</translation>
+ <translation>Разблокировать базу данных - KeePassXC</translation>
</message>
</context>
<context>
@@ -1096,16 +1202,16 @@ Backup database located at %2</source>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Устаревший формат ключевого файла</translation>
+ <translation>Устаревший формат файла-ключа</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Вы используете ключевой файл устаревшего формата, поддержка которого может быть прекращена в будущем.
+ <translation>Вы используете файл-ключ устаревшего формата, поддержка которого может быть прекращена в будущем.
-По возможности создайте новый ключевой файл.</translation>
+По возможности создайте новый файл-ключ.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1117,19 +1223,15 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Key files</source>
- <translation>Ключевые файлы</translation>
+ <translation>Файлы-ключи</translation>
</message>
<message>
<source>Select key file</source>
- <translation>Выберите ключевой файл</translation>
+ <translation>Выберите файл-ключ</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
- <translation>Ошибка при открытии файла ключа: %1</translation>
- </message>
- <message>
- <source>Select slot...</source>
- <translation>Выберите слот…</translation>
+ <translation>Ошибка при открытии файла-ключа: %1</translation>
</message>
<message>
<source>Unlock KeePassXC Database</source>
@@ -1144,14 +1246,6 @@ Please consider generating a new key file.</source>
<translation>Поле пароля</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Скрывать или показывать символы вводимого пароля</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Выбор ключевого файла</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Выбор слота аппаратного ключа</translation>
</message>
@@ -1161,7 +1255,7 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Browse...</source>
- <translation>Обзор...</translation>
+ <translation>Обзор…</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -1216,10 +1310,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
&lt;p&gt;Нажмите здесь для получения дополнительной информации…&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Для усиления защиты базы данных, в дополнение к основному паролю, возможно использовать секретный файл. Такой файл может быть создан из раздела «Безопасность» диалога параметров базы данных.&lt;/p&gt;&lt;p&gt;Файл-ключ &lt;strong&gt;не является&lt;/strong&gt; файлом базы данных в формате *.kdbx!&lt;br&gt;Если файл-ключ не используется, оставьте это поле пустым.&lt;/p&gt;&lt;p&gt;Нажмите для получения дополнительных сведений…&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Справка о файле-ключе</translation>
</message>
@@ -1228,10 +1318,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Выберите файл-ключ…</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Файл базы данных не может быть файлом-ключом</translation>
</message>
@@ -1240,6 +1326,30 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
If you do not have a key file, please leave the field empty.</source>
<translation>Файл базы данных не может быть использован в качестве файла-ключа. Если файл-ключ не используется, оставьте это поле пустым.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Для усиления защиты базы данных, в дополнение к основному паролю, возможно использовать секретный файл. Такой файл может быть создан из раздела «Безопасность» диалога параметров базы данных.&lt;/p&gt;&lt;p&gt;Файл-ключ &lt;strong&gt;не является&lt;/strong&gt; файлом базы данных в формате *.kdbx!&lt;br&gt;Если файл-ключ не используется, оставьте это поле пустым.&lt;/p&gt;&lt;p&gt;Нажмите для получения дополнительных сведений…&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Файл-ключ для разблокирования базы данных</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Нажмите кнопку на YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Обнаружение аппаратных ключей...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Аппаратные ключи не обнаружены</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Выберите аппаратный ключ...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1263,10 +1373,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Безопасность</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Мастер-ключ</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Параметры шифрования</translation>
</message>
@@ -1274,6 +1380,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Интеграция с браузерами</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1282,18 +1392,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Настройки KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Отключить все браузеры</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Забыть все специфические для сайтов настройки записей</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Переместить атрибуты KeePassHTTP в пользовательские данные KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Сохранённые ключи</translation>
</message>
@@ -1308,8 +1406,8 @@ If you do not have a key file, please leave the field empty.</source>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>Действительно удалить выбранный ключ?
-Это может воспрепятствовать соединению с подключаемым модулем браузера.</translation>
+ <translation>Вы действительно хотите удалить выбранный ключ?
+Это может помешать подключению к плагину браузера.</translation>
</message>
<message>
<source>Key</source>
@@ -1330,8 +1428,8 @@ This may prevent connection to the browser plugin.</source>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>Вы действительно хотите отсоединить все браузеры?
-Это может воспрепятствовать соединению с подключаемым модулем браузера.</translation>
+ <translation>Вы действительно хотите отключить все браузеры?
+Это может помешать подключению к плагину браузера.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
@@ -1339,7 +1437,7 @@ This may prevent connection to the browser plugin.</source>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>Нет общих ключей шифрования в настройках KeePassXC.</translation>
+ <translation>В настройках KeePassXC нет общих ключей шифрования.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
@@ -1347,17 +1445,17 @@ This may prevent connection to the browser plugin.</source>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Успешно удалён %n ключ шифрования из настроек KeePassXC.</numerusform><numerusform>Успешно удалёны %n ключа шифрования из настроек KeePassXC.</numerusform><numerusform>Успешно удалёны %n ключей шифрования из настроек KeePassXC.</numerusform><numerusform>Ключи шифрования (%n шт.) успешно удалены из настроек KeePassXC.</numerusform></translation>
+ <translation><numerusform>Успешно удалён %n ключ шифрования из настроек KeePassXC.</numerusform><numerusform>Успешно удалёны %n ключа шифрования из настроек KeePassXC.</numerusform><numerusform>Успешно удалёны %n ключей шифрования из настроек KeePassXC.</numerusform><numerusform>Успешно удалено ключей шифрования из настроек KeePassXC: %n.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>Забыть все специфические для сайтов настройки записей</translation>
+ <translation>Забыть все настройки записей для конкретных сайтов</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>Вы действительно хотите забыть все специфические для сайтов настройки у каждой записи?
-Разрешения на доступ к записям будут отозваны.</translation>
+ <translation>Вы действительно хотите забыть все настройки сайта для каждой записи?
+Разрешения на доступ к записям будут отменены.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
@@ -1373,7 +1471,7 @@ Permissions to access entries will be revoked.</source>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Успешно удалены доступы из %n записи.</numerusform><numerusform>Успешно удалены доступы из %n записей.</numerusform><numerusform>Успешно удалены доступы из %n записей.</numerusform><numerusform>Записей, у которых удалены разрешения: %n.</numerusform></translation>
+ <translation><numerusform>Успешно удалено разрешение от %n записи.</numerusform><numerusform>Успешно удалены разрешения от %n записей.</numerusform><numerusform>Успешно удалены разрешения от %n записей.</numerusform><numerusform>Успешно удалены разрешения из %n шт. записей.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1381,17 +1479,17 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
- <translation>Активная база данных не содержит записей с разрешениями.</translation>
+ <translation>В активной базе данных нет записей с разрешениями.</translation>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>Переместить аттрибуты KeePassHTTP в пользовательские данные</translation>
+ <translation>Переместить атрибуты KeePassHTTP в пользовательские данные</translation>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>Вы действительно хотите привести все устаревшие данные интеграции браузера к новейшему стандарту?
-Это необходимо для поддержания совместимости с подключаемым модулем браузера.</translation>
+ <translation>Вы действительно хотите перевести все устаревшие данные интеграции браузера в новый стандарт?
+Это необходимо для поддержания совместимости с плагином браузера.</translation>
</message>
<message>
<source>Stored browser keys</source>
@@ -1401,6 +1499,66 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>Удалить выбранный ключ</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Создано</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Обновление идентификатора базы данных</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Дополнительная защита...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Не задан пароль</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>ВНИМАНИЕ! Вы не установили пароль. Настоятельно НЕ рекомендуется использовать базу данных без пароля!
+
+Вы действительно хотите продолжить без пароля?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Продолжить без пароля</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Ключ шифрования не добавлен</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Нужно добавить хотя бы один ключ шифрования для защиты базы данных!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Неизвестная ошибка</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1422,11 +1580,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>Transform rounds:</source>
- <translation>Раундов преобразования:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation>Тест 1-секундной задержки</translation>
+ <translation>Циклов преобразования:</translation>
</message>
<message>
<source>Memory Usage:</source>
@@ -1442,23 +1596,15 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>?? s</source>
- <translation>?? с</translation>
+ <translation>?? сек</translation>
</message>
<message>
<source>Change</source>
<translation>Изменить</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 мс</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 сек</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation>Чем выше значение, тем надёжнее защита, но база данных будет открываться дольше.</translation>
+ <translation>Чем больше значение, тем сильнее защита, но дольше открывается база данных.</translation>
</message>
<message>
<source>Database format:</source>
@@ -1484,15 +1630,15 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Слишком много раундов</translation>
+ <translation>Слишком много циклов</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>Слишком большое число раундов преобразования ключа Argon2.
+ <translation>Слишком много циклов преобразования ключа Argon2.
-Если оставить это значение, открытие базы данных может занять часы, дни или даже больше!</translation>
+Если оставить это значение, то база данных может открываться часы, дни или даже дольше!</translation>
</message>
<message>
<source>Understood, keep number</source>
@@ -1505,13 +1651,13 @@ If you keep this number, your database may take hours or days (or even longer) t
<message>
<source>Number of rounds too low</source>
<comment>Key transformation rounds</comment>
- <translation>Слишком мало раундов</translation>
+ <translation>Слишком мало циклов</translation>
</message>
<message>
<source>You are using a very low number of key transform rounds with AES-KDF.
If you keep this number, your database may be too easy to crack!</source>
- <translation>Слишком мало раундов преобразования ключа AES-KDF.
+ <translation>Слишком мало циклов преобразования ключа AES-KDF.
Если оставить это значение, базу данных можно будет слишком легко взломать!</translation>
</message>
@@ -1526,22 +1672,12 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform> МиБ</numerusform><numerusform> МиБ</numerusform><numerusform> МиБ</numerusform><numerusform> МиБ</numerusform></translation>
+ <translation><numerusform> МиБ</numerusform><numerusform> МиБ</numerusform><numerusform> МиБ</numerusform><numerusform> МиБ</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform> поток</numerusform><numerusform> потока</numerusform><numerusform> потоков</numerusform><numerusform> потоков</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform><numerusform>%1 сек</numerusform></translation>
+ <translation><numerusform> потоков</numerusform><numerusform> потоков</numerusform><numerusform> потоков</numerusform><numerusform> потоков</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1575,6 +1711,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation>Параллелизм</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? мс</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? с</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1583,16 +1727,16 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>Доступ к записям</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Не &amp;публиковать эту базу данных</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>&amp;Предоставить доступ к записям выбранной группы:</translation>
+ <source>Expose entries under this group:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Для доступа к этим параметрам включите службу Secret Service.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1611,7 +1755,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Default username:</source>
- <translation>Логин по умолчанию:</translation>
+ <translation>Имя пользователя по умолчанию:</translation>
</message>
<message>
<source>History Settings</source>
@@ -1638,10 +1782,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>Дополнительные параметры базы данных</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Включить &amp;сжатие (рекомендуется)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Поле имени базы данных</translation>
</message>
@@ -1675,6 +1815,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation> (устар.)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1709,45 +1853,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Дополнительная защита...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Ключ шифрования не добавлен</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Нужно добавить хотя бы один ключ шифрования для защиты базы данных!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Не задан пароль</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>ВНИМАНИЕ! Вы не установили пароль. Настоятельно НЕ рекомендуется использовать базу данных без пароля!
-
-Вы действительно хотите продолжить без пароля?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Неизвестная ошибка</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Не удалось изменить мастер-ключ</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Продолжить без пароля</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1767,125 +1872,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Статистика</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Для получения дополнительной информации наведите курсор мыши на строки, содержащие значок ошибки.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Имя</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Значение</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Имя базы данных</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Описание</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Расположение</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Последнее сохранение</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Несохраненные изменения</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>да</translation>
- </message>
- <message>
- <source>no</source>
- <translation>нет</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>База данных была изменена, но эти изменения ещё не были сохранены на диск.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Количество групп</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Количество записей</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Количество истёкших записей</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>База данных содержит записи, срок действия которых истёк.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Уникальные пароли</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Неуникальные пароли</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Для более 10% записей используются повторяющиеся пароли. Используйте уникальные пароли, когда это возможно.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Максимальное количество повторных использований пароля</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Некоторые пароли используются более трёх раз. Используйте уникальные пароли, когда это возможно.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Количество коротких паролей</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Рекомендуемая длина паролей — не менее 8 символов.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Количество ненадёжных паролей</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Рекомендуется использовать длинные пароли, состоящие из случайных символов с уровнями безопасности «хорошо» или «отлично». </translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Средняя длина пароля</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 символов</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Средняя длина паролей менее десяти символов. Более длинные пароли более безопасны.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Подождите, выполняется сбор статистики…</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1930,12 +1916,12 @@ Are you sure you want to continue without a password?</source>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
- <translation>Созданная база данных не имеет ключа или ФФК, сохранение невозможно.
-Это ошибка, сообщите о ней разработчикам.</translation>
+ <translation>У созданной базы данных нет ключа или ФФК, сохранение невозможно.
+Это определённо ошибка, сообщите о ней разработчикам.</translation>
</message>
<message>
<source>Select CSV file</source>
- <translation>Выберать CSV-файл</translation>
+ <translation>Выберите CSV-файл</translation>
</message>
<message>
<source>New Database</source>
@@ -1944,17 +1930,17 @@ This is definitely a bug, please report it to the developers.</source>
<message>
<source>%1 [New Database]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Новая база данных]</translation>
+ <translation>%1 [новая база данных]</translation>
</message>
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Заблокировано]</translation>
+ <translation>%1 [заблокировано]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Только для чтения]</translation>
+ <translation>%1 [только для чтения]</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
@@ -1980,6 +1966,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>При продолжении, будет выполнен экспорт базы данных в незашифрованный файл, что делает доступными содержащиеся в нём пароли и другие чувствительные данные. Продолжить экспортирование?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Открыть OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1997,7 +1987,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>Вы действительно хотите поместить %n запись в корзину?</numerusform><numerusform>Вы действительно хотите поместить %n записи в корзину?</numerusform><numerusform>Вы действительно хотите поместить %n записей в корзину?</numerusform><numerusform>Вы действительно хотите переместить записи (%n шт.) в корзину?</numerusform></translation>
+ <translation><numerusform>Вы действительно хотите переместить %n entry(s) в корзину?</numerusform><numerusform>Вы действительно хотите переместить %n entry(s) в корзину?</numerusform><numerusform>Вы действительно хотите переместить %n entry(s) в корзину?</numerusform><numerusform>Вы действительно хотите переместить записи (%n) в корзину?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2041,7 +2031,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Merge Request</source>
- <translation>Запрос на объединение</translation>
+ <translation>Запрос на слияние</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
@@ -2059,7 +2049,7 @@ Do you want to merge your changes?</source>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Вы действительно хотите удалить %n запись насовсем?</numerusform><numerusform>Вы действительно хотите удалить %n записи насовсем?</numerusform><numerusform>Вы действительно хотите удалить %n записей насовсем?</numerusform><numerusform>Удалить записи (%n шт.) окончательно?</numerusform></translation>
+ <translation><numerusform>Вы действительно хотите удалить %n запись насовсем?</numerusform><numerusform>Вы действительно хотите удалить %n записи насовсем?</numerusform><numerusform>Вы действительно хотите удалить %n записей насовсем?</numerusform><numerusform>Вы действительно хотите окончательно удалить записи (%n шт.)?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2075,7 +2065,7 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Вы редактируете запись. Отказаться от изменений и всё равно заблокировать?</translation>
+ <translation>Вы сейчас редактируете запись. Отменить изменения и всё равно заблокировать?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
@@ -2096,7 +2086,7 @@ Save changes?</source>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>Не удалось открыть новый файл базы данных при попытке автоматической перезагрузки.
+ <translation>Не удалось открыть новый файл базы данных при попытке автоматически загрузить повторно.
Ошибка: %1</translation>
</message>
<message>
@@ -2127,7 +2117,7 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>Запись &quot;%1&quot; имеет %2 ссылку. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?</numerusform><numerusform>Запись &quot;%1&quot; имеет %2 ссылки. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?</numerusform><numerusform>Запись &quot;%1&quot; имеет %2 ссылок. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?</numerusform><numerusform>Ссылок у записи &quot;%1&quot;: %2. Что нужно сделать: перезаписать ссылки значениями, пропустить эту запись или всё равно удалить?</numerusform></translation>
+ <translation><numerusform>Запись &quot;%1&quot; имеет %2 ссылку. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?</numerusform><numerusform>Запись &quot;%1&quot; имеет %2 ссылки. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?</numerusform><numerusform>Запись &quot;%1&quot; имеет %2 ссылок. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?</numerusform><numerusform>У записи &quot;%1&quot; есть ссылки (%2 шт.). Хотите перезаписать ссылки значениями, пропустить эту запись или всё равно её удалить?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2147,11 +2137,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>База данных не была изменена операцией слияния.</translation>
+ <translation>База данных не была изменена операцией объединения.</translation>
</message>
<message>
<source>Shared group...</source>
- <translation>Совместная группа...</translation>
+ <translation>Общая группа...</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
@@ -2161,6 +2151,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>База данных открыта в режиме только для чтения. Автосохраниение отключено.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Сохранить резервную копию базы</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Не удалось найти файл базы данных: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2182,7 +2180,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Properties</source>
- <translation>Свойства</translation>
+ <translation>Параметры</translation>
</message>
<message>
<source>History</source>
@@ -2202,15 +2200,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Select private key</source>
- <translation>Выберите закрытый ключ</translation>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation>Слишком большой файл для закрытого ключа</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Не удалось открыть закрытый ключ</translation>
+ <translation>Выберите закрытый (личный) ключ</translation>
</message>
<message>
<source>Entry history</source>
@@ -2222,11 +2212,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Edit entry</source>
- <translation>Редактирование записи</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Пароли не совпадают.</translation>
+ <translation>Изменить запись</translation>
</message>
<message>
<source>New attribute</source>
@@ -2242,43 +2228,27 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>%n неделя</numerusform><numerusform>%n недели</numerusform><numerusform>%n недель</numerusform><numerusform>%n нед.</numerusform></translation>
+ <translation><numerusform>%n нед</numerusform><numerusform>%n нед</numerusform><numerusform>%n нед</numerusform><numerusform>%n нед.</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n месяц</numerusform><numerusform>%n месяца</numerusform><numerusform>%n месяцев</numerusform><numerusform>%n мес.</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Применить сгенерированный пароль?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Вы действительно хотите применить сгенерированный пароль к этой записи?</translation>
+ <translation><numerusform>%n месяц(-а)(-ев)</numerusform><numerusform>%n месяц(-а)(-ев)</numerusform><numerusform>%n месяц(-а)(-ев)</numerusform><numerusform>%n мес.</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Запись успешно обновлена.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Запись содержит несохранённые изменения.</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Новый атрибут %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[ЗАЩИЩЕНО] Нажмите для просмотра или правки</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation><numerusform>%n год</numerusform><numerusform>%n года</numerusform><numerusform>%n лет</numerusform><numerusform>%n г.</numerusform></translation>
+ <translation><numerusform>%n год</numerusform><numerusform>%n лет</numerusform><numerusform>%n лет</numerusform><numerusform>%n лет</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
- <translation>Подтверждение удаления</translation>
+ <translation>Подтвердите удаление</translation>
</message>
<message>
<source>Browser Integration</source>
@@ -2292,6 +2262,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation>Удалить этот URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Показать</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Скрыть</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Несохраненные изменения</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Сохранить внесённые изменения?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[ЗАЩИЩЕНО] Нажмите для восстановления или изменения</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2317,7 +2307,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Reveal</source>
- <translation>Открытие</translation>
+ <translation>Показать</translation>
</message>
<message>
<source>Attachments</source>
@@ -2367,6 +2357,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>Выбор цвета фона</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2375,14 +2373,6 @@ Disable safe saves and try again?</source>
<translation>Включить автоввод для этой записи</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Унаследовать стандартную последовательность автоввода от &amp;группы</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Использовать свою последовательность автоввода:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Ассоциации окон</translation>
</message>
@@ -2400,7 +2390,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Особая последовательность для этой ассоциации:</translation>
+ <translation>Использовать специальную последовательность для этой ассоциации:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2438,6 +2428,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation>Пользовательская последовательность автоввода для этого окна</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Унаследовать стандартную последовательность автоввода от группы</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Использовать свою последовательность автоввода:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2473,6 +2471,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>Изменить</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Использовать эту запись только при обычной проверке подлинности HTTP</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2524,56 +2530,32 @@ Disable safe saves and try again?</source>
<translation>Пароль:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Пароль ещё раз:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Название:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Заметки</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Предустановки</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Включите для отображения заметок.</translation>
+ <translation>Включите для отображения раздела примечаний.</translation>
</message>
<message>
<source>Username:</source>
<translation>Имя пользователя:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Истекает</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Поле URL-адреса</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation>Загрузить значок сайта для URL</translation>
- </message>
- <message>
- <source>Repeat password field</source>
- <translation>Поле повтора пароля</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Скрыть или показать генератор паролей</translation>
+ <translation>Загрузить значок сайта для URL-адреса</translation>
</message>
<message>
<source>Password field</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation>Скрывать или показывать символы вводимого пароля</translation>
+ <translation>Поле пароля</translation>
</message>
<message>
<source>Toggle notes visible</source>
@@ -2607,6 +2589,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>Использовать срок окончания действия</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Примечания:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Истекает:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2656,7 +2650,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Private key</source>
- <translation>Закрытый ключ</translation>
+ <translation>Закрытый (личный) ключ</translation>
</message>
<message>
<source>External file</source>
@@ -2665,7 +2659,7 @@ Disable safe saves and try again?</source>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>Обзор...</translation>
+ <translation>Просмотр...</translation>
</message>
<message>
<source>Attachment</source>
@@ -2689,11 +2683,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Browser for key file</source>
- <translation>Выбор файла ключа</translation>
+ <translation>Выбор файла-ключа</translation>
</message>
<message>
<source>External key file</source>
- <translation>Внешний файл ключа</translation>
+ <translation>Внешний файл-ключ</translation>
</message>
<message>
<source>Select attachment file</source>
@@ -2712,7 +2706,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Properties</source>
- <translation>Свойства</translation>
+ <translation>Параметры</translation>
</message>
<message>
<source>Add group</source>
@@ -2720,7 +2714,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Edit group</source>
- <translation>Изменить группу</translation>
+ <translation>Править группу</translation>
</message>
<message>
<source>Enable</source>
@@ -2736,16 +2730,12 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>В записи есть несохранённые изменения</translation>
+ <translation>Запись содержит несохранённые изменения.</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Форма</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Тип:</translation>
</message>
@@ -2754,16 +2744,12 @@ Disable safe saves and try again?</source>
<translation>Путь:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Пароль:</translation>
</message>
<message>
<source>Inactive</source>
- <translation>Не участвует в обмене</translation>
+ <translation>Неактивные</translation>
</message>
<message>
<source>KeeShare unsigned container</source>
@@ -2775,11 +2761,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Select import source</source>
- <translation>Выбрать источник для импорта</translation>
+ <translation>Выберите источник импорта</translation>
</message>
<message>
<source>Select export target</source>
- <translation>Выбрать цель для экспорта</translation>
+ <translation>Выберите место экспорта</translation>
</message>
<message>
<source>Select import/export file</source>
@@ -2840,57 +2826,25 @@ Supported extensions are: %1.</source>
<translation>Поле пути к общему файлу</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Запуск диалога открытия общего файла</translation>
- </message>
- <message>
<source>Password field</source>
- <translation>Пароль</translation>
+ <translation>Поле пароля</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Скрывать или показывать символы вводимого пароля</translation>
+ <source>Clear fields</source>
+ <translation>Очистить поля</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Скрыть или показать генератор паролей</translation>
+ <source>Browse for share file</source>
+ <translation>Выбрать общий файл</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Очистить поля</translation>
+ <source>Browse...</source>
+ <translation>Обзор…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Имя</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Заметки</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Истекает</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Поиск</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автоввод</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Использовать по умолчанию последовательность автоввода родительской группы</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Задать последовательность автоввода по умолчанию</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Поле имени</translation>
</message>
@@ -2918,18 +2872,38 @@ Supported extensions are: %1.</source>
<source>Default auto-type sequence field</source>
<translation>Поле последовательности автоввода, используемой по умолчанию</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Использовать с&amp;тандартный значок</translation>
+ <source>Expires:</source>
+ <translation>Истекает:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Использовать св&amp;ой значок</translation>
+ <source>Auto-Type:</source>
+ <translation>Автоввод:</translation>
</message>
<message>
+ <source>Search:</source>
+ <translation>Поиск:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Примечания:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Имя:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Задать последовательность автоввода по умолчанию</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Добавить свой значок</translation>
</message>
@@ -2963,15 +2937,15 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Успешно загружена %1 из %n значка</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform><numerusform>Успешно загружено значков: %1 из %n</numerusform></translation>
+ <translation><numerusform>Успешно загружен %1 из %n значка</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform><numerusform>Успешно загружено значков: %1 из %n</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
- <translation>Значки не были загружены</translation>
+ <translation>Не загружено ни одного значка</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n значок уже существует в базе данных</numerusform><numerusform>%n значка уже существуют в базе данных</numerusform><numerusform>%n значков уже существуют в базе данных</numerusform><numerusform>Уже существующих в базе данных значков: %n</numerusform></translation>
+ <translation><numerusform>%n значок уже существует в базе данных</numerusform><numerusform>%n значка уже существуют в базе данных</numerusform><numerusform>%n значков уже существуют в базе данных</numerusform><numerusform>Значков, уже имеющихся в базе данных: %n</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2979,7 +2953,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Этот значок используется %n записью и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется записями (%n шт.) и будет замещён значком по умолчанию. Вы действительно хотите его удалить?</numerusform></translation>
+ <translation><numerusform>Этот значок используется %n записью и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется записями (%n), он будет замещён стандартным значком. Вы действительно хотите его удалить?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2994,14 +2968,6 @@ Supported extensions are: %1.</source>
<translation>Использовать выбранный значок для вложенных групп и записей</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Использовать выбранный значок для…</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Использовать только для выбранного объекта</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Также применить к дочерним группам</translation>
</message>
@@ -3017,16 +2983,32 @@ Supported extensions are: %1.</source>
<source>Existing icon selected.</source>
<translation>Выбран существующий значок.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Использовать стандартный значок</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Использовать свой значок</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Использовать выбранный значок для…</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Использовать только для этой группы</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
<message>
<source>Created:</source>
- <translation>Создано:</translation>
+ <translation>Создание:</translation>
</message>
<message>
<source>Modified:</source>
- <translation>Изменено:</translation>
+ <translation>Изменение:</translation>
</message>
<message>
<source>Accessed:</source>
@@ -3038,7 +3020,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Plugin Data</source>
- <translation>Данные подключаемого модуля браузера</translation>
+ <translation>Данные плагинов</translation>
</message>
<message>
<source>Remove</source>
@@ -3046,13 +3028,13 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Delete plugin data?</source>
- <translation>Удалить данные подключаемого модуля браузера?</translation>
+ <translation>Удалить данные плагинов?</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>Действительно удалить выбранные данные подключаемого модуля?
-Это действие может привести к неработоспособности подключаемых модулей в браузерах.</translation>
+ <translation>Вы действительно хотите удалить выбранные данные плагинов?
+Это может привести к сбоям плагинов.</translation>
</message>
<message>
<source>Key</source>
@@ -3091,7 +3073,7 @@ This may cause the affected plugins to malfunction.</source>
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>%1 - Клон</translation>
+ <translation>%1 - клон</translation>
</message>
</context>
<context>
@@ -3133,7 +3115,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Действительно удалить это вложение?</numerusform><numerusform>Действительно удалить %n вложения?</numerusform><numerusform>Действительно удалить %n вложений?</numerusform><numerusform>Действительно удалить %n вложения?</numerusform></translation>
+ <translation><numerusform>Вы уверены, что вы хотите удалить %n вложения?</numerusform><numerusform>Вы уверены, что вы хотите удалить %n вложения?</numerusform><numerusform>Вы уверены, что вы хотите удалить %n вложения?</numerusform><numerusform>Вы действительно хотите удалить вложения (%n шт.)?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3142,11 +3124,12 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Unable to create directory:
%1</source>
- <translation>Не удаётся создать папку: %1</translation>
+ <translation>Невозможно создать папку:
+%1</translation>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>Перезаписать имеющийся файл &quot;%1&quot; с вложением?</translation>
+ <translation>Вы действительно хотите перезаписать имеющийся файл &quot;%1&quot; с вложением?</translation>
</message>
<message>
<source>Confirm overwrite</source>
@@ -3155,7 +3138,7 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Unable to save attachments:
%1</source>
- <translation>Невозможно сохранить вложение:
+ <translation>Невозможно сохранить вложения:
%1</translation>
</message>
<message>
@@ -3172,15 +3155,15 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Confirm remove</source>
- <translation>Подтверждение удаления</translation>
+ <translation>Подтвердите удаление</translation>
</message>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Не удаётся открыть файл:
-%1</numerusform><numerusform>Не удаётся открыть файлы:
-%1</numerusform><numerusform>Не удаётся открыть файлы:
-%1</numerusform><numerusform>Невозможно открыть файлы:
+ <translation><numerusform>Не удалось открыть файл:
+%1</numerusform><numerusform>Не удалось открыть файлы:
+%1</numerusform><numerusform>Не удалось открыть файлы:
+%1</numerusform><numerusform>Невозможно открыть файл(ы):
%1</numerusform></translation>
</message>
<message>
@@ -3203,6 +3186,20 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation>Сохранить выбранное вложение на диск</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>У файла «%1» очень большой размер (%2 МБ).
+База данных увеличится в размере, что приведёт к замедлению её работы.
+
+Продолжить добавление этого файла?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Подтвердить вложение</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3219,11 +3216,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Title</source>
- <translation>Название</translation>
+ <translation>Имя записи</translation>
</message>
<message>
<source>Username</source>
- <translation>Логин</translation>
+ <translation>Имя пользователя</translation>
</message>
<message>
<source>URL</source>
@@ -3243,11 +3240,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Title</source>
- <translation>Название</translation>
+ <translation>Имя записи</translation>
</message>
<message>
<source>Username</source>
- <translation>Логин</translation>
+ <translation>Имя пользователя</translation>
</message>
<message>
<source>URL</source>
@@ -3263,7 +3260,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Notes</source>
- <translation>Заметки</translation>
+ <translation>Примечания</translation>
</message>
<message>
<source>Expires</source>
@@ -3271,11 +3268,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Created</source>
- <translation>Создано</translation>
+ <translation>Создан</translation>
</message>
<message>
<source>Modified</source>
- <translation>Изменено</translation>
+ <translation>Изменение</translation>
</message>
<message>
<source>Accessed</source>
@@ -3286,12 +3283,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>Вложения</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Да</translation>
+ <source>Size</source>
+ <translation>Размер</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Название группы</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Название записи</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Примечания записи</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Истечение записи</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Дата создания</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Дата последнего изменения</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Дата последнего доступа</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Вложенные файлы</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Размер записи</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Имеются вложения</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Используется временный одноразовый пароль</translation>
</message>
</context>
<context>
@@ -3330,7 +3367,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Notes</source>
- <translation>Заметки</translation>
+ <translation>Примечания</translation>
</message>
<message>
<source>Autotype</source>
@@ -3379,7 +3416,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Share</source>
- <translation>Общий файл</translation>
+ <translation>Предоставить общий доступ</translation>
</message>
<message>
<source>Display current TOTP value</source>
@@ -3387,7 +3424,14 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Advanced</source>
- <translation>Дополнительно</translation>
+ <translation>Расширенный режим</translation>
+ </message>
+</context>
+<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Неверный URL</translation>
</message>
</context>
<context>
@@ -3414,11 +3458,17 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Reset to defaults</source>
- <translation>Восстановить значения по умолчанию</translation>
+ <translation>Сброс в стандартные значения</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Вложения (значки)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Имеются вложения</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Использует TOTP</translation>
</message>
</context>
<context>
@@ -3430,21 +3480,74 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Не удалось зарегистрировать службу DBus на %1: работает другая служба доступа к паролям.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%1 запись использована %1</numerusform><numerusform>%1 записи использованы %1</numerusform><numerusform>%1 записей использованы %1</numerusform><numerusform>%1 записи использованы %1</numerusform></translation>
+ <translation><numerusform>%n запись использована %1</numerusform><numerusform>%n записи использованы %1</numerusform><numerusform>%n записей использованы %1</numerusform><numerusform>%n записи использованы %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Не удалось зарегистрировать службу DBus на %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Имя файла</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Группа</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Управление</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Разблокируйте для просмотра</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Нет</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Приложение</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Управление</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>FDO Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;FDO Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Неизвестен</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Неизвестен</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;ID процесса: %1, исполняемый файл: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3456,14 +3559,10 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Невозможно сохранить файл!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Невозможно сохранить файл сценария для механизма native messaging.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3533,14 +3632,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Невозможно вычислить мастер-пароль</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Невозможно выполнить ответ на вызов.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>отсутствуют заголовки базы данных</translation>
</message>
@@ -3566,16 +3657,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Вероятно, для входа были указанные неверные данные.
Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Невозможно выполнить ответ на вызов.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Невозможно вычислить мастер-пароль</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3585,10 +3684,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>отсутствуют заголовки базы данных</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Невозможно вычислить мастер-пароль</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Недопустимый размер контрольной суммы заголовка</translation>
</message>
@@ -3706,6 +3801,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation>(несоответствие HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3719,14 +3818,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Недопустимый размер симметричного шифра IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Невозможно вычислить мастер-пароль</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Ошибка сериализации ФФК параметров структуры матаданных</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3744,15 +3843,15 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid master seed size</source>
- <translation>Недопустимый размер мастер-seed</translation>
+ <translation>Недопустимый размер основного seed</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Недопустимый размер seed для трансформирования</translation>
+ <translation>Недопустимый размер seed для преобразования</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation>Недопустимый размер раунда преобразования</translation>
+ <translation>Недопустимый размер цикла преобразования</translation>
</message>
<message>
<source>Invalid start bytes size</source>
@@ -3790,11 +3889,11 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>Невозможно выполнить разбор UUID: %1</translation>
+ <translation>Не удается выполнить разбор UUID: %1</translation>
</message>
<message>
<source>Failed to read database file.</source>
- <translation>Невозможно прочитать файл базы данных.</translation>
+ <translation>Не удалось прочитать файл базы данных.</translation>
</message>
</context>
<context>
@@ -3809,11 +3908,11 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Нет значка UUID или данных</translation>
+ <translation>Нет UUID значка или данных</translation>
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>Отсутствует ключ пользовательских данных или значение</translation>
+ <translation>Нет ключа пользовательских данных или значения</translation>
</message>
<message>
<source>Multiple group elements</source>
@@ -3821,7 +3920,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Null group uuid</source>
- <translation>Значение UUID для NULL-группы</translation>
+ <translation>UUID для группы NULL</translation>
</message>
<message>
<source>Invalid group icon number</source>
@@ -3837,11 +3936,11 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>No group uuid found</source>
- <translation>Отсутствует групповой UUID</translation>
+ <translation>Нет UUID группы</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
- <translation>Null DeleteObject UUID</translation>
+ <translation>UUID DeleteObject Null</translation>
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
@@ -3849,7 +3948,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Null entry uuid</source>
- <translation>UUID для Null-записи</translation>
+ <translation>UUID для записи Null</translation>
</message>
<message>
<source>Invalid entry icon number</source>
@@ -3873,19 +3972,15 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Отсутствует ключ или значение записи</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Обнаружен дубликат во вложениях</translation>
+ <translation>Нет ключа или значения записи</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Отсутствует двоичный ключ или значение записи</translation>
+ <translation>Нет двоичного ключа или значения записи</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>Отсутствует окно или последовательность для автоввода</translation>
+ <translation>Нет окна или последовательности для автоввода</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3893,7 +3988,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Invalid date time value</source>
- <translation>Недопустимое значение даты времени </translation>
+ <translation>Недопустимое значение даты/времени </translation>
</message>
<message>
<source>Invalid color value</source>
@@ -3926,6 +4021,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Слишком большой файл для закрытого ключа</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Не удалось открыть закрытый ключ</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3940,7 +4058,7 @@ Line %2, column %3</source>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation>Невозможно прочитать ключевой файл.</translation>
+ <translation>Невозможно прочитать файл-ключ.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3973,31 +4091,27 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Недопустимый размер seed для трансформирования</translation>
+ <translation>Недопустимый размер seed для преобразования</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>Недопустимое количество раундов преобразования</translation>
+ <translation>Недопустимое число циклов преобразования</translation>
</message>
<message>
<source>Unable to construct group tree</source>
- <translation>Невозможно создать дерево групп</translation>
+ <translation>Не удалось создать дерево групп</translation>
</message>
<message>
<source>Root</source>
<translation>Корень</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Невозможно вычислить мастер-пароль</translation>
- </message>
- <message>
<source>Key transformation failed</source>
- <translation>Невозможно преобразовать ключ</translation>
+ <translation>Не удалось выполнить преобразование ключа </translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>Недопустимый номер типа поля группы</translation>
+ <translation>Недопустимый тип поля группы</translation>
</message>
<message>
<source>Invalid group field size</source>
@@ -4025,7 +4139,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Incorrect group expiry time field size</source>
- <translation>Неверное значение поля времени истечения срока действия группы</translation>
+ <translation>Неверный размер поля времени истечения срока действия группы</translation>
</message>
<message>
<source>Incorrect group icon field size</source>
@@ -4041,15 +4155,15 @@ Line %2, column %3</source>
</message>
<message>
<source>Missing group id or level</source>
- <translation>Отсутствует групповой идентификатор или уровень</translation>
+ <translation>Нет группового идентификатора или уровня</translation>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>Отсутствует номер типа поля записи</translation>
+ <translation>Нет номера типа поля записи</translation>
</message>
<message>
<source>Invalid entry field size</source>
- <translation>Недопустимый размер поля записи</translation>
+ <translation>Неверный размер поля записи</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
@@ -4057,7 +4171,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Недопустимый размер поля UUID записи</translation>
+ <translation>Неверный размер поля UUID записи</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
@@ -4077,7 +4191,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Недопустимый размер поля времени для срока действия</translation>
+ <translation>Недопустимый размер поля времени срока действия</translation>
</message>
<message>
<source>Invalid entry field type</source>
@@ -4093,6 +4207,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Вероятно, для входа были указанные неверные данные.
Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4157,7 +4275,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Key Component set, click to change or remove</source>
- <translation>Ключевой компонент установлен, щёлкните, чтобы изменить или удалить</translation>
+ <translation>Ключевой компонент установлен, нажмите, чтобы изменить или удалить</translation>
</message>
<message>
<source>Add %1</source>
@@ -4184,7 +4302,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<name>KeyFileEditWidget</name>
<message>
<source>Generate</source>
- <translation>Создать</translation>
+ <translation>Генерировать</translation>
</message>
<message>
<source>Key File</source>
@@ -4192,30 +4310,21 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Для большей надёжности можно добавить файл-ключ, содержащий случайные байты.&lt;/p&gt;&lt;p&gt;Этот файл нужно хранить в секрете и не терять, иначе не удастся получить доступ к данным.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Для большей безопасности вы можете добавить файл-ключ со случайным содержимым.&lt;/p&gt;&lt;p&gt;Храните его в надёжном месте и не теряйте, иначе доступ к базе будет заблокирован.&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Устаревший формат файла-ключа</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Вы используете файл-ключ устаревшего формата, поддержка которого в дальнейшем может быть прекращена.
-
-Перейдите в настройки мастер-ключа и создайте новый файл-ключ.</translation>
+ <translation>Устаревший формат ключевого файла</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>Ошибка загрузки файла-ключа «%1»
+ <translation>Ошибка загрузки ключевого файла &apos;%1&apos;
Сообщение: %2</translation>
</message>
<message>
<source>Key files</source>
- <translation>Ключевые файлы</translation>
+ <translation>Файлы-ключи</translation>
</message>
<message>
<source>All files</source>
@@ -4223,23 +4332,23 @@ Message: %2</source>
</message>
<message>
<source>Create Key File...</source>
- <translation>Создать ключевой файл...</translation>
+ <translation>Создать файл-ключ…</translation>
</message>
<message>
<source>Error creating key file</source>
- <translation>Ошибка создания ключевого файла</translation>
+ <translation>Ошибка создания файла-ключа</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>Невозможно создать ключевой файл: %1</translation>
+ <translation>Невозможно создать файл-ключ: %1</translation>
</message>
<message>
<source>Select a key file</source>
- <translation>Выберите ключевой файл</translation>
+ <translation>Выберите файл-ключ</translation>
</message>
<message>
<source>Key file selection</source>
- <translation>Выбор ключевого файла</translation>
+ <translation>Выбор файла-ключа</translation>
</message>
<message>
<source>Browse for key file</source>
@@ -4247,11 +4356,11 @@ Message: %2</source>
</message>
<message>
<source>Browse...</source>
- <translation>Обзор...</translation>
+ <translation>Обзор…</translation>
</message>
<message>
<source>Generate a new key file</source>
- <translation>Создать новый файл ключа</translation>
+ <translation>Создать новый файл-ключ</translation>
</message>
<message>
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
@@ -4259,7 +4368,7 @@ Message: %2</source>
</message>
<message>
<source>Invalid Key File</source>
- <translation>Неверный ключевой файл</translation>
+ <translation>Неверный файл-ключ</translation>
</message>
<message>
<source>You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file.</source>
@@ -4267,7 +4376,7 @@ Message: %2</source>
</message>
<message>
<source>Suspicious Key File</source>
- <translation>Подозрительный ключевой файл</translation>
+ <translation>Подозрительный файл-ключ</translation>
</message>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
@@ -4275,6 +4384,15 @@ Are you sure you want to continue with this file?</source>
<translation>Выбранный файл-ключ, вероятно, является файлом базы данных паролей. Файл-ключ должен являться неизменяемым файлом, в противном случае доступ к базе данных будет безвозвратно утерян.
Продолжить использовать выбранный файл?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Вы используете файл-ключ устаревшего формата, поддержка которого может быть прекращена в будущем.
+
+По возможности создайте новый файл-ключ используя раздел параметров безопасности базы данных.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4283,16 +4401,8 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;База данных</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>Н&amp;едавние базы данных</translation>
- </message>
- <message>
<source>&amp;Help</source>
- <translation>Справка</translation>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation>&amp;Записи</translation>
+ <translation>&amp;Справка</translation>
</message>
<message>
<source>&amp;Groups</source>
@@ -4311,48 +4421,12 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;О программе</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Открыть базу данных...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Сохранить базу данных</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Закрыть базу данных</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Удалить запись</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Изменить группу</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>&amp;Удалить группу</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Со&amp;хранить базу данных как...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Параметры базы данных</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Клонировать запись</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Скопировать &amp;имя пользователя</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
- <translation>Скопировать имя пользователя в буфер обмена</translation>
+ <translation>Скопировать логин в буфер обмена</translation>
</message>
<message>
<source>Copy password to clipboard</source>
@@ -4363,10 +4437,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Параметры</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Заблокировать базу данных</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>Назван&amp;ие</translation>
</message>
@@ -4384,19 +4454,11 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>&amp;Notes</source>
- <translation>&amp;Заметки</translation>
+ <translation>&amp;Примечания</translation>
</message>
<message>
<source>Copy notes to clipboard</source>
- <translation>Скопировать заметку в буфер обмена</translation>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Экспорт в CSV-файл...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Установить TOTP...</translation>
+ <translation>Скопировать примечания в буфер обмена</translation>
</message>
<message>
<source>Copy &amp;TOTP</source>
@@ -4420,7 +4482,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Toggle window</source>
- <translation>Скрыть или показать окно</translation>
+ <translation>Переключить окно</translation>
</message>
<message>
<source>Quit KeePassXC</source>
@@ -4443,196 +4505,370 @@ This version is not meant for production use.</source>
<translation>&amp;Пожертвовать</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Сообщить об &amp;ошибке</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>ВНИМАНИЕ: Ваша версия Qt может привести к сбоям KeePassXC при работе с экранной клавиатурой!
-Рекомендуем использовать AppImage с нашей страницы загрузки.</translation>
+Рекомендуем использовать AppImage (см. нашу страницу загрузок).</translation>
</message>
<message>
<source>&amp;Import</source>
<translation>&amp;Импорт</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Скопировать ат&amp;рибут...</translation>
+ <source>Create a new database</source>
+ <translation>Создать новую базу данных</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>&amp;TOTP...</translation>
+ <source>Merge from another KDBX database</source>
+ <translation>Объединить с другой базой данных KDBX</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>&amp;Новая база данных...</translation>
+ <source>Add a new entry</source>
+ <translation>Добавить новую запись</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>Создать новую базу данных</translation>
+ <source>View or edit entry</source>
+ <translation>Показать/изменить запись</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
+ <source>Add a new group</source>
+ <translation>Добавить новую группу</translation>
+ </message>
+ <message>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>Выполнить а&amp;втоввод</translation>
+ </message>
+ <message>
+ <source>Open &amp;URL</source>
+ <translation>Открыть &amp;URL</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>Импортировать базу данных KeePass 1</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>Импортировать файл CSV</translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>ВНИМАНИЕ: Вы используете бета-версию KeePassXC!
+В ней возможны ошибки и небольшие проблемы, она не предназначена для основного применения.</translation>
+ </message>
+ <message>
+ <source>Check for updates on startup?</source>
+ <translation>Проверять обновления при запуске?</translation>
+ </message>
+ <message>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>Хотите проверять обновления KeePassXC при запуске?</translation>
+ </message>
+ <message>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>Проверять наличие обновлений можно вручную из меню приложения.</translation>
+ </message>
+ <message>
+ <source>&amp;Export</source>
+ <translation>&amp;Экспорт</translation>
+ </message>
+ <message>
+ <source>Sort &amp;A-Z</source>
+ <translation>Сортировать &amp;А-Я</translation>
+ </message>
+ <message>
+ <source>Sort &amp;Z-A</source>
+ <translation>Сортировать &amp;Я-А</translation>
+ </message>
+ <message>
+ <source>&amp;Password Generator</source>
+ <translation>&amp;Генератор паролей</translation>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation>Импортировать хранилище 1Password</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Начало работы</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Руководство пользователя</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Комбинации клавиш</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Недавние базы данных</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Записи</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Скопировать ат&amp;рибут</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Вид</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Проверить обновления</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Открыть базу данных…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Сохранить базу данных</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Закрыть базу данных</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>Со&amp;здать базу даннных…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
<translation>Объе&amp;динить с другой базой данных...</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>Объединить с другой базой данных KDBX</translation>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Создать запись…</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Новая запись</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Изменить запись…</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>Добавить новую запись</translation>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Удалить запись…</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Изменить запись</translation>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Создать группу…</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>Просмотреть или отредактировать запись</translation>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Изменить группу…</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Новая группа</translation>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Удалить группу…</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>Добавить новую группу</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Загрузить &amp;значки сайтов для всех записей…</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Изменить мастер-&amp;ключ...</translation>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>&amp;Сохранить базу данных как…</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Параметры базы данных...</translation>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Copy &amp;password</source>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Параметры базы данных…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Клонировать запись…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Переместить &amp;выше</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Переместить запись выше на одну позицию</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Переместить &amp;ниже</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Переместить запись ниже на одну позицию</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Скопировать &amp;имя пользователя</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
<translation>Скопировать п&amp;ароль</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>Выполнить а&amp;втоввод</translation>
+ <source>Download &amp;Favicon</source>
+ <translation>Загрузить &amp;значок сайта</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>Открыть &amp;URL</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Заблокировать базу данных</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>База данных KeePass 1...</translation>
+ <source>&amp;CSV File…</source>
+ <translation>Файл &amp;CSV...</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>Импортировать базу данных KeePass 1</translation>
+ <source>&amp;HTML File…</source>
+ <translation>Файл &amp;HTML…</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Файл CSV...</translation>
+ <source>KeePass 1 Database…</source>
+ <translation>База данных KeePass 1…</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>Импортировать файл CSV</translation>
+ <source>1Password Vault…</source>
+ <translation>Хранилище 1Password…</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Показать TOTP...</translation>
+ <source>CSV File…</source>
+ <translation>Файл &amp;CSV...</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>Показать QR-код TOTP...</translation>
+ <source>Show TOTP</source>
+ <translation>Показать TOTP</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>ВНИМАНИЕ: Вы используете бета-версию KeePassXC!
-Она может содержать ошибки и не предназначена для повседневного использования.</translation>
+ <source>Show QR Code</source>
+ <translation>Показать QR-код</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>Проверять обновления при запуске?</translation>
+ <source>Set up TOTP…</source>
+ <translation>Настроить TOTP…</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Хотите, чтобы программа KeePassXC проверяла наличие обновлений при запуске?</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Сообщить об &amp;ошибке</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>Наличие обновлений можно проверять и вручную из меню программы.</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Открыть руководство по началу работы</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>&amp;Экспорт</translation>
+ <source>&amp;Online Help</source>
+ <translation>Справка в &amp;интернете</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Проверить обновления…</translation>
+ <source>Go to online documentation</source>
+ <translation>Перейти к онлайн документации</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Загрузить &amp;значки сайтов для всех записей</translation>
+ <source>Open User Guide</source>
+ <translation>Открыть руководство пользователя</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>Сортировать &amp;А-Я</translation>
+ <source>Save Database Backup...</source>
+ <translation>Сохранить резервную копию базы…</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>Сортировать &amp;Я-А</translation>
+ <source>Add key to SSH Agent</source>
+ <translation>Добавить ключ к SSH-агент</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>&amp;Генератор паролей</translation>
+ <source>Remove key from SSH Agent</source>
+ <translation>Убрать ключ из агента SSH</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Скачать значок сайта</translation>
+ <source>Compact Mode</source>
+ <translation>Компактный режим</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Экспорт в HTML-файл...</translation>
+ <source>Automatic</source>
+ <translation>Автоматически</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>Хранилище 1Password...</translation>
+ <source>Light</source>
+ <translation>Светлая</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Импортировать хранилище 1Password</translation>
+ <source>Dark</source>
+ <translation>Темная</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Начало работы</translation>
+ <source>Classic (Platform-native)</source>
+ <translation>Классическая (платформо-зависимая)</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Открыть руководство по началу работы в формате PDF</translation>
+ <source>Show Toolbar</source>
+ <translation>Показать панель инструментов</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Онлайн помощь...</translation>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Перейти к онлайн документации (открывает браузер)</translation>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Руководство пользователя</translation>
+ <source>Restart Application?</source>
+ <translation>Перезапустить приложение?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>ManageDatabase</name>
<message>
- <source>Open User Guide PDF</source>
- <translation>Открыть руководство пользователя в формате PDF</translation>
+ <source>Database settings</source>
+ <translation>Параметры базы данных</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Комбинации клавиш</translation>
+ <source>Edit database settings</source>
+ <translation>Редактирование параметров базы данных</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Разблокировать базу данных</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Разблокируйте базу данных для просмотра дополнительных сведений</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Заблокировать базу данных</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Отключить</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Отключить это приложение</translation>
</message>
</context>
<context>
@@ -4651,7 +4887,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>более старая запись объединена из базы данных &quot;%1&quot;</translation>
+ <translation>более старая запись из базы данных &quot;%1&quot;</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4667,7 +4903,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>Повторное применение более старой исходной записи поверх более новой цели %1 [%2]</translation>
+ <translation>Повторное применение более старой исходной записи поверх более новой мишени %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
@@ -4683,7 +4919,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
- <translation>Удаление &apos;сироты&apos; %1 [%2]</translation>
+ <translation>Удаление &quot;осиротевшей&quot; %1 [%2]</translation>
</message>
<message>
<source>Changed deleted objects</source>
@@ -4721,12 +4957,8 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>СтраницаМастера</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Настройки шифрования</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Здесь можно настроить шифрование базы данных. Вы сможете изменить параметры позже в настройках базы данных.</translation>
+ <translation>Здесь можно настроить параметры шифрования базы данных. Их можно будет изменить позже в настройках базы данных.</translation>
</message>
<message>
<source>Advanced Settings</source>
@@ -4736,27 +4968,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Простые настройки</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Параметры шифрования</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Здесь можно настроить шифрование базы данных. Вы сможете изменить параметры позже в настройках базы данных.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Мастер-ключ базы данных</translation>
+ <source>Encryption Settings</source>
+ <translation>Параметры шифрования</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Известный только вам мастер-ключ для защиты базы данных.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Здесь можно настроить параметры шифрования базы данных. Их можно будет изменить позже в настройках базы данных.</translation>
</message>
</context>
<context>
@@ -4767,7 +5003,14 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>Заполните отображаемое имя и описание (необязательное) новой базы данных:</translation>
+ <translation>Заполните отображаемое имя и, при желании, описание новой базы данных:</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Менеджер паролей</translation>
</message>
</context>
<context>
@@ -4841,7 +5084,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Недопустимый ключевой файл, ожидается ключ OpenSSH</translation>
+ <translation>Недопустимый файл-ключ, ожидается ключ OpenSSH</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
@@ -4853,11 +5096,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key file way too small.</source>
- <translation>Ключевой файл слишком мал.</translation>
+ <translation>Файл-ключ слишком мал.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>Недопустимый идентификатор заголовка ключевого файла</translation>
+ <translation>Недопустимый идентификатор заголовка файла-ключа.</translation>
</message>
<message>
<source>Found zero keys</source>
@@ -4865,15 +5108,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Failed to read public key.</source>
- <translation>Не удалось прочитать публичный ключ.</translation>
+ <translation>Ошибка чтения открытого (публичного) ключа.</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>Повреждённый ключевой файл, ошибка чтения файла закрытого ключа</translation>
+ <translation>Файл-ключ повреждён, ошибка чтения закрытого (личного) ключа</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
- <translation>В закрытом ключе нет сведений для расшифровывания</translation>
+ <translation>Нет данных для расшифровки в закрытом (личном) ключе</translation>
</message>
<message>
<source>Trying to run KDF without cipher</source>
@@ -4885,7 +5128,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>Ошибка формирования ключа, повреждён ключевой файл?</translation>
+ <translation>Ошибка формирования ключа, возможно, повреждён файл-ключ.</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
@@ -4893,27 +5136,27 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>Неожиданный конец файла при чтении публичного ключа</translation>
+ <translation>Неожиданный конец файла при чтении открытого (публичного) ключа</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>Неожиданный конец файла при чтении закрытого ключа</translation>
+ <translation>Неожиданный конец файла при чтении закрытого (личного) ключа</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
- <translation>Невозможно записать публичный ключ, так как он пуст</translation>
+ <translation>Невозможно записать открытый (публичный) ключ, так как он пуст</translation>
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>Неожиданный конец файла при записи публичного ключа</translation>
+ <translation>Неожиданный конец файла при записи открытого (публичного) ключа</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>Невозможно записать закрытый ключ, так как он пуст</translation>
+ <translation>Невозможно записать закрытый (личный) ключ, так как он пуст</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>Неожиданный конец файла при записи закрытого ключа</translation>
+ <translation>Неожиданный конец файла при записи закрытого (личного) ключа</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
@@ -4925,7 +5168,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>Слишком короткий шифр IV для ФФК MD5</translation>
+ <translation>Слишком короткий вектор инициализации (IV) для MD5 ФФК</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
@@ -4946,6 +5189,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>Количество совпавших паролей</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4963,32 +5218,20 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Пароль - основной метод защиты базы данных.&lt;/p&gt;&lt;p&gt;Хороший пароль должен быть длинным и уникальным. Программа KeePassXC может его сгенерировать сама.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Пароль - это основной метод защиты базы данных.&lt;/p&gt;&lt;p&gt;Хороший пароль должен быть длинным и уникальным. KeePassXC может сгенерировать его сам.&lt;/p&gt;</translation>
</message>
<message>
<source>Passwords do not match.</source>
<translation>Пароли не совпадают.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Сгенерировать мастер-пароль</translation>
- </message>
- <message>
<source>Password field</source>
- <translation>Пароль</translation>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation>Скрывать или показывать символы вводимого пароля</translation>
+ <translation>Поле пароля</translation>
</message>
<message>
<source>Repeat password field</source>
<translation>Поле повтора пароля</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Скрыть или показать генератор паролей</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4997,10 +5240,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Пароль:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>надёжность</translation>
@@ -5015,7 +5254,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Character Types</source>
- <translation>Типы символов</translation>
+ <translation>Виды символов</translation>
</message>
<message>
<source>Numbers</source>
@@ -5031,7 +5270,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Pick characters from every group</source>
- <translation>Использовать символы из каждой группы</translation>
+ <translation>Подобрать символы из каждой группы</translation>
</message>
<message>
<source>&amp;Length:</source>
@@ -5050,14 +5289,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Разделитель слов:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Скопировать</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Принять</translation>
- </message>
- <message>
<source>Close</source>
<translation>Закрыть</translation>
</message>
@@ -5095,11 +5326,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Switch to advanced mode</source>
- <translation>Переключение в расширенный режим</translation>
+ <translation>В расширенный режим</translation>
</message>
<message>
<source>Advanced</source>
- <translation>Расширенный режим</translation>
+ <translation>Дополнительно</translation>
</message>
<message>
<source>A-Z</source>
@@ -5154,16 +5385,8 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Переключение в простой режим</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Простой режим</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
- <translation>Набор символов, исключаемых из пароля</translation>
+ <translation>Набор символов для исключения из сгенерированного пароля</translation>
</message>
<message>
<source>Do not include:</source>
@@ -5171,7 +5394,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation>Добавить не-шестнадцатеричные символы к списку исключений</translation>
+ <translation>Добавить не-шестнадцатеричные буквы к списку исключений</translation>
</message>
<message>
<source>Hex</source>
@@ -5182,14 +5405,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Исключить символы: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Количество слов:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Создать заново</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Сгенерированный пароль</translation>
</message>
@@ -5238,10 +5453,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Скопировать пароль</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Принять пароль</translation>
- </message>
- <message>
<source>lower case</source>
<translation>нижний регистр</translation>
</message>
@@ -5254,8 +5465,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Каждое Слово С Заглавной Буквы</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Скрывать или показывать символы вводимого пароля</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Количество слов:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Очистить</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5268,6 +5515,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>Статистика</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5281,7 +5580,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Move</source>
- <translation>Перемещение</translation>
+ <translation>Переместить</translation>
</message>
<message>
<source>Empty</source>
@@ -5301,7 +5600,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Merge</source>
- <translation>Объединить</translation>
+ <translation>Слияние</translation>
</message>
<message>
<source>Continue</source>
@@ -5320,7 +5619,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Client public key not received</source>
- <translation>Не получен публичный ключ клиента</translation>
+ <translation>Не получен открытый (публичный) ключ клиента</translation>
</message>
<message>
<source>Cannot decrypt message</source>
@@ -5348,7 +5647,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>No URL provided</source>
- <translation>Отсутствует URL-адрес</translation>
+ <translation>Нет URL-адреса</translation>
</message>
<message>
<source>No logins found</source>
@@ -5392,7 +5691,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Запрос пароля записи.</translation>
+ <translation>Введите пароль записи.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
@@ -5407,10 +5706,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Путь к записи для добавления.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Скопировать пароль записи в буфер обмена.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Скопировать путь к записи.</translation>
@@ -5452,7 +5747,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>ВНИМАНИЕ: Вы используете ключевой файл устаревшего формата, поддержка которого
+ <translation>ВНИМАНИЕ: Вы используете файл-ключ устаревшего формата, поддержка которого
может быть прекращена в будущем.
По возможности создайте новый ключевой файл.</translation>
@@ -5553,7 +5848,7 @@ Available commands:
</message>
<message>
<source>Notes</source>
- <translation>Заметки</translation>
+ <translation>Примечания</translation>
</message>
<message>
<source>Last Modified</source>
@@ -5568,14 +5863,6 @@ Available commands:
<translation>Интеграция с браузером</translation>
</message>
<message>
- <source>Press</source>
- <translation>Нажать</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Пассивная</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-агент</translation>
</message>
@@ -5607,17 +5894,13 @@ Available commands:
</message>
<message>
<source>Writing the database failed %1.</source>
- <translation>Ошибка при записи базы данных %1.</translation>
+ <translation>Запись базы данных не удалась %1.</translation>
</message>
<message>
<source>Successfully added entry %1.</source>
<translation>Успешно добавлена запись %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Скопировать текущий TOTP в буфер обмена.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Неверное значение времени ожидания %1.</translation>
</message>
@@ -5629,17 +5912,9 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>У записи с путём %1 не настроен TOTP.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Текущий TOTP записи скопирован в буфер обмена.</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Пароль записи скопирован в буфер обмена.</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Очищение буфера обмена через %1 секунду...</numerusform><numerusform>Очищение буфера обмена через %1 секунды...</numerusform><numerusform>Очищение буфера обмена через %1 секунд...</numerusform><numerusform>Буфер обмена будет очищен через %1 сек...</numerusform></translation>
+ <translation><numerusform>Очищение буфера обмена через %1 секунду...</numerusform><numerusform>Очищение буфера обмена через %1 секунды..</numerusform><numerusform>Очищение буфера обмена через %1 секунд...</numerusform><numerusform>Очистка буфера обмена через %1 сек...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5647,7 +5922,7 @@ Available commands:
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation>Не показывать запрос пароля и другие второстепенные выводы.</translation>
+ <translation>Заглушить запрос пароля и другие второстепенные выводы.</translation>
</message>
<message>
<source>count</source>
@@ -5660,7 +5935,7 @@ Available commands:
</message>
<message>
<source>Not changing any field for entry %1.</source>
- <translation>Не меняются какие-либо поля для записи %1.</translation>
+ <translation>Не меняются никакие поля для записи %1.</translation>
</message>
<message>
<source>Enter new password for entry: </source>
@@ -5668,7 +5943,7 @@ Available commands:
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Ошибка при записи базы данных: %1</translation>
+ <translation>Ошибка записи базы данных: %1</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
@@ -5700,15 +5975,15 @@ Available commands:
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>Тип: Словать+Leet</translation>
+ <translation>Тип: Словать+замена букв цифрами/знаками</translation>
</message>
<message>
<source>Type: User Words</source>
- <translation>Тип: Польз. слова</translation>
+ <translation>Тип: Пользовательские слова</translation>
</message>
<message>
<source>Type: User+Leet</source>
- <translation>Тип: Польз. слова+Leet</translation>
+ <translation>Тип: Пользователь+замена букв цифрами/знаками</translation>
</message>
<message>
<source>Type: Repeated</source>
@@ -5736,15 +6011,15 @@ Available commands:
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>Тип: Словарь+Leet (повт.)</translation>
+ <translation>Тип: Словарь+замена букв цифрами/знаками (повт.)</translation>
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>Тип: Польз. слова (повт.)</translation>
+ <translation>Тип: Пользовательские слова (повт.)</translation>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
- <translation>Тип: Польз. слова+Leet (повт.)</translation>
+ <translation>Тип: Пользователь+замена букв цифрами/знаками (повт.)</translation>
</message>
<message>
<source>Type: Repeated(Rep)</source>
@@ -5776,11 +6051,11 @@ Available commands:
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation>Не удалось загрузить ключевой файл %1: %2</translation>
+ <translation>Ошибка загрузки ключевого файла %1: %2</translation>
</message>
<message>
<source>Length of the generated password</source>
- <translation>Длина сгенерированного пароля</translation>
+ <translation>Длина генерируемого пароля</translation>
</message>
<message>
<source>Use lowercase characters</source>
@@ -5825,16 +6100,16 @@ Available commands:
<message>
<source>Error reading merge file:
%1</source>
- <translation>Ошибка при чтении файла слияния:
+ <translation>Ошибка при чтении объединяемого файла:
%1</translation>
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation>Невозможно сохранить базу данных в файле: %1</translation>
+ <translation>Невозможно сохранить базу данных в файл: %1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>Невозможно сохранить базу данных в файле: %1</translation>
+ <translation>Невозможно сохранить базу данных в файл: %1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
@@ -5854,11 +6129,7 @@ Available commands:
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation>Не задана программа для работы с буфером обмена</translation>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation>Не удалось запустить программу %1</translation>
+ <translation>Не задана программа для управления буфером обмена</translation>
</message>
<message>
<source>file empty</source>
@@ -5869,18 +6140,6 @@ Available commands:
<translation>%1: (строка, столбец) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 бит</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 бит</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 бит</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – рекомендуется)</translation>
</message>
@@ -5924,7 +6183,7 @@ Available commands:
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation>Не задан ключ. Создание базы данных прервано.</translation>
+ <translation>Не задан ключ. Создание базы данных отменено.</translation>
</message>
<message>
<source>Failed to save the database: %1.</source>
@@ -5936,11 +6195,11 @@ Available commands:
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation>Ошибка создания ключевого файла %1: %2</translation>
+ <translation>Ошибка создания файла-ключа %1: %2</translation>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>Ошибка загрузки ключевого файла %1: %2</translation>
+ <translation>Ошибка загрузки файла-ключа %1: %2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
@@ -5960,27 +6219,27 @@ Available commands:
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
- <translation>Имена файлов открываемых баз данных паролей (*.kdbx).</translation>
+ <translation>имена файлов открываемой базы данных паролей (*.kdbx)</translation>
</message>
<message>
<source>path to a custom config file</source>
- <translation>Путь к пользовательскому файлу настроек.</translation>
+ <translation>путь к своему файлу настроек</translation>
</message>
<message>
<source>key file of the database</source>
- <translation>Ключевой файл базы данных.</translation>
+ <translation>файл-ключ базы данных</translation>
</message>
<message>
<source>read password of the database from stdin</source>
- <translation>Прочитать пароль базы данных со стандартного ввода stdin.</translation>
+ <translation>читать пароли базы данных с stdin</translation>
</message>
<message>
<source>Parent window handle</source>
- <translation>Дескриптор родительского окна.</translation>
+ <translation>Дескриптор родительского окна</translation>
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation>Уже запущен другой экземпляр KeePassXC.</translation>
+ <translation>Другой экземпляр KeePassXC уже запущен.</translation>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
@@ -5988,7 +6247,7 @@ Available commands:
</message>
<message>
<source>KeePassXC - Error</source>
- <translation>KeePassXC - Ошибка</translation>
+ <translation>Ошибка - KeePassXC</translation>
</message>
<message>
<source>Database password: </source>
@@ -6131,10 +6390,6 @@ Kernel: %3 %4</source>
<translation>Показать эту помощь.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Слот устройства Yubikey, использованный для шифрования базы данных.</translation>
- </message>
- <message>
<source>slot</source>
<translation>слот</translation>
</message>
@@ -6151,10 +6406,6 @@ Kernel: %3 %4</source>
<translation>Покинуть интерактивный режим.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Выбор формата файла для экспорта. Возможные варианты: XML (по умолчанию) или CSV.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Экспорт базы данных в заданном формате на устройство стандартного вывода.</translation>
</message>
@@ -6195,10 +6446,6 @@ Kernel: %3 %4</source>
<translation>Путь до новой базы данных. </translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Ошибка импорта базы данных %1 из формата XML</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>База данных успешно импортирована.</translation>
</message>
@@ -6291,10 +6538,6 @@ Kernel: %3 %4</source>
<translation>Недействительный слот Yubikey %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Для разблокирования %1 нажмите кнопку на устройстве YubiKey</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Введите пароль для шифрования базы данных (необязательно):</translation>
</message>
@@ -6310,13 +6553,9 @@ Kernel: %3 %4</source>
<source>User name</source>
<translation>Имя пользователя</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1 [%2] Вызов-ответ — слот %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Пароль к «%1» был замечен в утечках %2 раз.</numerusform><numerusform>Пароль к «%1» был замечен в утечках %2 раза.</numerusform><numerusform>Пароль к «%1» был замечен в утечках %2 раз.</numerusform><numerusform>Пароль к «%1» был замечен в утечках %2 раза.</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6326,6 +6565,193 @@ Kernel: %3 %4</source>
<source>Show the protected attributes in clear text.</source>
<translation>Показать защищённый атрибут в виде простого текста.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Задать файл-ключ базы данных.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6362,10 +6788,294 @@ Kernel: %3 %4</source>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Плохой</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Слабый</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Исключено)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заголовок</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Путь</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Причика</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Редактировать Запись...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Исключить из отчетов</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Эта сборка KeePassXC не имеет сетевых функций. Сеть необходима для проверки паролей по базе данных &quot;Have I Been Pwned&quot;.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Поздравляем, нет раскрытых паролей!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заголовок</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Путь</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Исключено)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>миллионов раз</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Редактировать Запись...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Исключить из отчетов</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Для получения дополнительной информации наведите курсор мыши на строки, содержащие значок ошибки.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Имя</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Значение</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Подождите, выполняется сбор статистики…</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Имя базы данных</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Описание</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Расположение</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Последнее сохранение</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Несохраненные изменения</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>да</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>нет</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>База данных была изменена, но эти изменения ещё не были сохранены на диск.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Количество групп</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Количество записей</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Количество истёкших записей</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>База данных содержит записи, срок действия которых истёк.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Уникальные пароли</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Неуникальные пароли</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Для более 10% записей используются повторяющиеся пароли. Используйте уникальные пароли, когда это возможно.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Максимальное количество повторных использований пароля</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Некоторые пароли используются более трёх раз. Используйте уникальные пароли, когда это возможно.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Количество коротких паролей</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Рекомендуемая длина паролей — не менее 8 символов.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Количество ненадёжных паролей</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Рекомендуется использовать длинные пароли, состоящие из случайных символов с уровнями безопасности «хорошо» или «отлично». </translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Средняя длина пароля</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 символов</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Средняя длина паролей менее десяти символов. Более длинные пароли более безопасны.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
- <translation>Ошибка подключения агента.</translation>
+ <translation>Сбой подключения агента.</translation>
</message>
<message>
<source>Agent protocol error.</source>
@@ -6373,15 +7083,15 @@ Kernel: %3 %4</source>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>Агент не запущен, не удается добавить идентификатор.</translation>
+ <translation>Агент не запущен, невозможно добавить идентификатор.</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>Агент не запущен, невозможно удалить учётную запись.</translation>
+ <translation>Агент не запущен, невозможно удалить идентификатор.</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
- <translation>Агент отклонил учётную запись. Возможные причины:</translation>
+ <translation>Идентификатор отклонён агентом. Возможные причины:</translation>
</message>
<message>
<source>The key has already been added.</source>
@@ -6395,12 +7105,20 @@ Kernel: %3 %4</source>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Запрос подтверждения не поддерживается этим агентом (проверьте настройки).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Ни один агент не запущен, идентификационные данные недоступны.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
<message>
<source>Search Help</source>
- <translation>Искать в справке</translation>
+ <translation>Поиск в Справке</translation>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
@@ -6408,7 +7126,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Every search term must match (ie, logical AND)</source>
- <translation>Каждое поисковое выражение должно иметь соответствие (то есть логическое И)</translation>
+ <translation>Каждое поисковое выражение должно иметь соответствие (т.е. логическое И)</translation>
</message>
<message>
<source>Modifiers</source>
@@ -6420,7 +7138,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>match term exactly</source>
- <translation>точно соответствовать выражению</translation>
+ <translation>соответствовать выражению в точности</translation>
</message>
<message>
<source>use regex in term</source>
@@ -6436,7 +7154,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>match anything</source>
- <translation>соответствие любому</translation>
+ <translation>соответствие всему</translation>
</message>
<message>
<source>match one</source>
@@ -6467,7 +7185,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Search Help</source>
- <translation>Искать в справке</translation>
+ <translation>Поиск в Справке</translation>
</message>
<message>
<source>Search (%1)...</source>
@@ -6502,26 +7220,10 @@ Kernel: %3 %4</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Если в параметрах базы данных разрешено использование корзины, то при удалении записи будут перемещены в неё. В противном случае, будет выполнено необратимое удаление без подтверждения.&lt;/p&gt;&lt;p&gt;В случае, если на удаляемые записи имеются ссылки, потребуется подтверждение удаления.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Не подтверждать удаление записей приложениями-клиентами</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Доступные группы из базы данных:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Имя файла</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Группа</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Управление</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Авторизация</translation>
</message>
@@ -6530,47 +7232,27 @@ Kernel: %3 %4</source>
<translation>Подключены следующие приложения:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Приложение</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Disconnect</source>
- <translation>Отключить</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Параметры базы данных</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Edit database settings</source>
- <translation>Редактирование параметров базы данных</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Разблокировать базу данных</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Разблокируйте базу данных для просмотра дополнительных сведений</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>Заблокировать базу данных</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>Разблокируйте для просмотра</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Нет</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
<message>
<source>Active</source>
- <translation>Действия</translation>
+ <translation>Активный</translation>
</message>
<message>
<source>Allow export</source>
@@ -6582,7 +7264,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Own certificate</source>
- <translation>Собственный сертификат</translation>
+ <translation>Свой сертификат</translation>
</message>
<message>
<source>Fingerprint:</source>
@@ -6602,7 +7284,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Generate</source>
- <translation>Создать</translation>
+ <translation>Генерировать</translation>
</message>
<message>
<source>Import</source>
@@ -6667,7 +7349,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>KeeShare key file</source>
- <translation>Файл ключа KeeShare</translation>
+ <translation>Файл-ключ KeeShare</translation>
</message>
<message>
<source>All files</source>
@@ -6679,11 +7361,11 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Exporting changed certificate</source>
- <translation>Экспорт изменённого сертификата</translation>
+ <translation>Экспортирование изменённого сертификата</translation>
</message>
<message>
<source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation>Экспортируемый сертификат отличается от используемого. Экспортировать текущий сертификат?</translation>
+ <translation>Экспортированный сертификат отличается от используемого. Хотите экспортировать текущий сертификат?</translation>
</message>
<message>
<source>Signer:</source>
@@ -6836,10 +7518,6 @@ Kernel: %3 %4</source>
<translation>Подписанный импорт выполнен</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Неизвестная ошибка</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Не подписанный совместно используемый контейнер не поддерживается - импорт запрещён</translation>
</message>
@@ -6919,7 +7597,7 @@ Kernel: %3 %4</source>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation>* Эти параметры TOTP - пользовательские и могут не работать с другими средствами проверки подлинности.</translation>
+ <translation>* Эти параметры TOTP - пользовательские, они могут не работать с другими средствами проверки подлинности.</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
@@ -6927,14 +7605,14 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation>Закрытие через %1 сек</translation>
+ <translation>Закрытие через %1 сек.</translation>
</message>
</context>
<context>
<name>TotpSetupDialog</name>
<message>
<source>Setup TOTP</source>
- <translation>Параметры TOTP</translation>
+ <translation>Настроить TOTP</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
@@ -6946,11 +7624,11 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Use custom settings</source>
- <translation>Использовать свои параметры</translation>
+ <translation>Использовать особые настройки</translation>
</message>
<message>
<source>Custom Settings</source>
- <translation>Свои параметры</translation>
+ <translation>Особые настройки</translation>
</message>
<message>
<source>Time step:</source>
@@ -7008,6 +7686,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Неверный URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7035,7 +7720,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Software Update</source>
- <translation>Обновление программного обеспечения</translation>
+ <translation>Обновление ПО</translation>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
@@ -7043,26 +7728,26 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation>Сейчас доступна KeePassXC версии %1. У вас — %2.</translation>
+ <translation>Доступна KeePassXC версии %1. У вас — %2.</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation>Загрузите её с сайта keepassxc.org</translation>
+ <translation>Загрузите её с keepassxc.org</translation>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation>У вас самая новая версия программы!</translation>
+ <translation>У вас самая новая версия!</translation>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
- <translation>KeePassXC %1 — самая новая версия на текущий момент</translation>
+ <translation>На данный момент KeePassXC %1 — самая новая версия</translation>
</message>
</context>
<context>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Начать безопасное хранение паролей в базе данных KeePassXC</translation>
+ <translation>Начать безопасное хранение ваших паролей в базе данных KeePassXC</translation>
</message>
<message>
<source>Create new database</source>
@@ -7098,6 +7783,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Нажать</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Пассивная</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7105,21 +7837,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>YubiKey Challenge-Response</source>
- <translation>YubiKey вызов-ответ</translation>
+ <translation>Вызов-ответ YubiKey</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
<translation>&lt;p&gt;Если у вас есть &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, его можно использовать для дополнительной безопасности.&lt;/p&gt;&lt;p&gt;YubiKey требует, чтобы один из его слотов был запрограммирован как &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt; вызов-ответ HMAC-SHA1&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKey не обнаружен. Проверьте, подключён ли он.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey не подключён.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Перечитать токены</translation>
</message>
@@ -7127,5 +7851,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>Выбор слота аппаратного ключа</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Обнаружение аппаратных ключей...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Аппаратные ключи не обнаружены</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_sk.ts b/share/translations/keepassx_sk.ts
index 92c0a90a3..d6d349ec5 100644
--- a/share/translations/keepassx_sk.ts
+++ b/share/translations/keepassx_sk.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Zapnúť Agenta SSH (vyžaduje reštart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Použiť OpenSSH pre Windows namiesto Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Zapnúť integráciu Agenta SSH</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>Hodnota SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>Prepísanie SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(prázdne)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Nie je dostupný socket Agenta SSH. Buď zaistite existenciu premennej prostredia SSH_AUTH_SOCK alebo nastavte prepísanie.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>Spojenie Agenta SSH funkčné!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Naozaj chcete obnoviť všetky všeobecné nastavenia na predvolené hodnoty?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochromatický (svetlé)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochromatický (tmavé)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Farebné</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Správa súborov</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Bezpečne uložiť súbory databáz (môže byť nekompatibilné Dropbox, apod)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Zálohovať databázu pri každom uložení</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Automaticky uložiť pri ukončení</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Neoznačovať databázu za zmenenú pri nedátových zmenách (napr. rozbalenie skupiny)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Automaticky načítať databázu, ak je upravená externe</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Použiť ikonu skupiny pri vytváraní položky</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Skryť panel náhľadu položky</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Všeobecné</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Skryť panel nástrojov (ikony)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimalizovať namiesto ukončenia</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Zobraziť ikonu v oznamovacej oblasti</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Tmavá ikona oznamovacej oblasti</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Skryť okno do oznamovacej oblasti pri minimalizácii</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Vždy sa spýtať pred vykonaním Automatického vypĺňania</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globálna klávesová skratka Automatického vypĺňania</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Oneskorenie písania Auto-Type</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Oneskorenia spustenia Auto-Type</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Presúvateľný panel nástrojov</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Pri kontrole aktualizácii zahrnúť pred-vydania</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Štýl tlačidla:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Jazyk:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Štýl tlačidiel panela nástrojov</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Na poznámky použiť písmo Monospace</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Výber jazyka</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Obnoviť predvolené nastavenia</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Globálna klávesová skratka Automatického vypĺňania</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Oneskorenia spustenia Automatického vypĺňania v milisekundách</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Automaticky spustiť KeePassXC pri štarte systému</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Označovať databázu za zmenenú pri nedátových zmenách (napr. rozbalenie skupiny)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Bezpečne uložiť súbory databáz (vypnite pri problémoch s Dropbox, apod)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Používateľské rozhranie</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Štýl tlačidiel panela nástrojov:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Na poznámky použiť písmo Monospace</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Ikona oznamovacej oblasti:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Obnoviť predvolené nastavenia</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Oneskorenie Automatického vypĺňania:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Globálna klávesová skratka Automatického vypĺňania:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Oneskorenia spustenia Automatického vypĺňania:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -354,7 +382,7 @@
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Zabudnúť TouchID pri zamknutí relácie alebo zatvorení krytu</translation>
+ <translation>Zabudnúť TouchID po neaktivite dlhšej ako</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
@@ -365,18 +393,6 @@
<translation>Znova zamknúť predtým zamknutú databázu po vykonaní Automatického vypĺňania</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Nevyžadovať opakovanie hesla, ak je viditeľné</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Neskrývať heslo pri jeho úprave</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Nepoužiť zástupné pole na prázdne polia hesiel</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Skryť heslá v paneli ukážky položky </translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Vymazať dopyt po</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Vyžadovať opakovanie hesla, aj ak je viditeľné</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Skryť heslo pri jeho úprave</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Použiť zástupnú hodnotu na prázdne polia hesiel</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -430,7 +458,7 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>Syntax Vášho Automatického vypĺňania nie je správna!</translation>
+ <translation>Syntax Vášho Automatického vypĺňania nieje správna!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
@@ -438,7 +466,7 @@
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>Tento príkaz Automatického vypĺňania obsahuje príliš pomalé stlačenia kláves. Naozaj ho chcete vykonať?</translation>
+ <translation>Tento príkaz Automatického vypĺňania obsahuje príliš pomalé stlačenia kláves. Do you really want to proceed?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
@@ -450,7 +478,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC vyžaduje povolenie Prístupnosť aby mohol realizovať Automatické dopĺňanie na úrovni položky. Ak ste povolenie už pridelili, môže byť potrebné reštartovať.</translation>
</message>
</context>
<context>
@@ -480,7 +508,7 @@
</message>
<message>
<source>Username</source>
- <translation>Použ. meno:</translation>
+ <translation>Používateľské meno</translation>
</message>
<message>
<source>Sequence</source>
@@ -506,7 +534,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC vyžaduje povolenie Prístupnosť a Záznam obrazovky aby mohol realizovať globálne Automatické dopĺňanie. Záznam obrazovky je potrebný na získanie názvu okna na vyhľadávanie položiek. Ak ste povolenie už pridelili, môže byť potrebné reštartovať.</translation>
</message>
</context>
<context>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Prehliadač Potvrďte prístup</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>Žiadosť o prístup KeePassXC-Prehliadač</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 žiada prístup k nasledujúcim položkám:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Zapamätať si túto voľbu</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Zapamätať si prístup k označeným položkám</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Povoliť</translation>
+ <source>Remember</source>
+ <translation>Zapamätať</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Zakázať</translation>
+ <source>Allow access to entries</source>
+ <translation>Povoliť prístup k položkám</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 požiadal prístup k heslám nasledujúcej položky(iek).
-Prosím, zvoľte, či chcete povoliť prístup.</translation>
+ <source>Allow Selected</source>
+ <translation>Povoliť vybraným</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Povoliť prístup</translation>
+ <source>Deny All</source>
+ <translation>Zakázať všetkým</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Odmietnuť prístup</translation>
+ <source>Disable for this site</source>
+ <translation>Zakázať tejto stránke</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Prosím, vyberte správnu databázu na uloženie prihlasovacích údajov.</trans
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialóg</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Nová požiadavka priradenia kľúča</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Toto je potrebné na prístup k vašim databázam cez KeePassXC-Prehliadač</translation>
+ <source>Save and allow access</source>
+ <translation>Uložiť a povoliť prístup</translation>
</message>
<message>
- <source>General</source>
- <translation>Všeobecné</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Prepísať existujúci kľúč?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Zapnúť integráciu v týchto prehliadačoch:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Zdieľaný šifrovací kľúč s menom „%1” už existuje.
+Chcete ho prepísať?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Upraviť položku</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Chcete upraviť informácie v %1 – %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Zrušiť</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Konvertovanie atribútov na vlastné dáta…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Zobraziť upozor&amp;nenie, keď sú požadované údaje</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Konvertované atribúty KeePassHTTP</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Po&amp;žiadať o odomknutie databázy, ak je zamknutá</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Úspešne skonvertované atribúty z %1 položky(iek).
+Do vlastných dát presunuté %2 kľúče.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Úspešne presunutý %n kľúč do vlastných dát.</numerusform><numerusform>Úspešne presunuté %n kľúče do vlastných dát.</numerusform><numerusform>Úspešne presunutých %n kľúčov do vlastných dát.</numerusform><numerusform>Úspešne presunutých %n kľúčov do vlastných dát.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Vrátené budú len položky s rovnakou schémou (http://, https://, …).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Nenájdená žiadna položka s atribútmi KeePassHTTP!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Zhoda sché&amp;m URL (napr., https://…)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Aktívna databáza neobsahuje žiadnu položku s atribútmi KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Vrátiť len najlepšie zhody danej URL, namiesto všetkých položiek celej domény.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Zistené staré nastavenia integrácie prehliadača</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>V&amp;rátiť len údaje s najlepšou zhodou</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Vytvoriť novú skupinu</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Zoradiť vyhovujúce údaje podľa &amp;názvu</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Bola prijatá požiadavka n novú skupinu „%1”.
+Chcete vytvoriť túto skupinu?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Zoradiť vyhovujúce údaje podľa p&amp;už. mena</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Je potrebné presunúť vaše nastavenia KeePassXC-Browser do nastavenia databázovy.
+Je to potrebné kvôli správe aktuálnych pripojení prehliadača.
+Chcete teraz migrovať svoje nastavenia?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Pokročilé</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Nezobrazovať znova toto upozornenie</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nikdy s&amp;a nepýtať pred prístupom k údajom</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Obdržali ste požiadavku na priradenie nasledujúcej databázy.
+%1
+
+Zadajte mu jedinečný názov alebo identifikátor, napríklad:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Nikdy sa nepýtať pred &amp;úpravou údajov</translation>
+ <source>Dialog</source>
+ <translation>Dialóg</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Hľadať vyhovujúce údaje vo všetkých databázach</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Toto je potrebné na prístup k vašim databázam cez KeePassXC-Browser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatické vytváranie alebo úprava textových polí nie je podporovaná.</translation>
+ <source>Enable browser integration</source>
+ <translation>Povoliť integráciu prehľadávača</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>V&amp;rátiť reťazce pokročilých polí, ktoré začínajú na „KPH: ”</translation>
+ <source>General</source>
+ <translation>Všeobecné</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Pri štarte automaticky aktualizovať cestu spustiteľného súboru s KeePassXC alebo keepassxc-proxy na skripty posielania správ medzi prehliadačom a KeePassXC (native messaging).</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Boli nainštalované prehliadače lebo &quot;snaps&quot; momentálne nie sú podporované.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Pri štarte automaticky aktualizovať súbory manifestu správ medzi prehliadačom a KeePassXC (native messaging)</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Zapnúť integráciu v týchto prehliadačoch:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Podporovať aplikáciu proxy medzi KeePassXC a rozšírením prehliadača.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>&amp;Použiť aplikáciu proxy medzi KeePassXC a rozšírením prehliadača.</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Použiť vlastné umiestnenie proxy, ak ste nainštalovali proxy manuálne.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Použiť &amp;vlastné umiestnenie proxy</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Prechádzať…</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Upozornenie:&lt;/b&gt; nasledujúce voľby môžu byť nebezpečné!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Zvoliť vlastné umiestnenie proxy</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Zobraziť upozornenie, keď sú požadované prihlasovacie údaje</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Spustiteľné súbory</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Požiadať o odomknutie databázy, ak je zamknutá</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Všetky súbory</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Vrátené budú len položky s rovnakou schémou (http://, https://, …).</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Nepýtať povolenie na HTTP &amp;Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Zhoda schémy URL (napr., https://…)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Kvôli ochrane Snap v sandboxe, musíte na povolenie integrácie prehliadača spustiť skript.&lt;br /&gt;Skript môžete získať z %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Vrátiť len najlepšie zhody danej URL, namiesto všetkých položiek celej domény.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Prosím, pozrite si špeciálne inštrukcie na použite integrácie prehliadača nižšie</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Vrátiť len prihlasovacie údaje s najlepšou zhodou</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser je potrebný aby fungovala integrácia s prehliadačom&lt;br /&gt; Stiahnite ho pre %1 a %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Vrátiť prshlasovacie údaje po vypršaní platnosti. Do názvu je pridaný reťazec [expired].</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Odvážny</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Povoliť vrátenie prihlasovacích údajov po dobe platnosti</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Vrátiť prshlasovacie údaje po vypršaní platnosti. Do názvu je pridaný reťazec [expired].</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Všetky databázy pripojené k rozšíreniu budú vracať zodpovedajúce prihlasovacie údaje.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Povoliť vrátenie prihlasovacích údajov po dobe platnosti.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Hľadať vyhovujúce prihlasovacie údaje vo všetkých databázach</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Povoliť integráciu prehľadávača</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Zoradiť vyhovujúce prihlasovacie údaje podľa názvu</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Boli nainštalované prehliadače lebo &quot;snaps&quot; momentálne nie sú podporované.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Zoradiť vyhovujúce prihlasovacie údaje podľa použ. mena</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Všetky databázy pripojené k rozšíreniu budú vracať zodpovedajúce prihlasovacie údaje.</translation>
+ <source>Advanced</source>
+ <translation>Pokročilé</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nikdy sa nepýtať pred prístupom k prihlasovacím údajom</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Nikdy sa nepýtať pred úpravou prihlasovacích údajov</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Nepýtať povolenie na HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatické vytváranie alebo úprava textových polí nie je podporovaná.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Vrátiť reťazce pokročilých polí, ktoré začínajú na „KPH: ”</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Nezobrazovať okno s návrhom na migráciu starých nastavení KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Nepýtať sa na migráciu nastavení KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Nepýtať sa na migráciu nastavení KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Pri štarte automaticky aktualizovať cestu spustiteľného súboru s KeePassXC alebo keepassxc-proxy na skripty posielania správ medzi prehliadačom a KeePassXC (native messaging).</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Pri štarte automaticky aktualizovať súbory manifestu</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Použiť vlastné umiestnenie proxy, ak ste nainštalovali proxy manuálne.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Použiť vlastné umiestnenie proxy:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Prosím, vyberte správnu databázu na uloženie prihlasovacích údajov.</trans
<translation>Prehliadač súboru vlastného proxy</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Upozornenie&lt;/b&gt;, nebola nájdená aplikácia keepassxc-proxy!&lt;br /&gt;Prosím, skontrolujte inštalačný adresár KeePassXC alebo potvrďte vlastnú cestu v pokročilých nastaveniach.&lt;br /&gt;Integrácia prehliadača bez tohoto proxy NEBUDE FUNGOVAŤ.&lt;br /&gt;Očakávaná cesta: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Prechádzať…</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Nová požiadavka priradenia kľúča</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Použiť vlastné umiestnenie nastavenia prehliadača:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Uložiť a povoliť prístup</translation>
+ <source>Browser type:</source>
+ <translation>Typ prehliadača:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Prepísať existujúci kľúč?</translation>
+ <source>Toolbar button style</source>
+ <translation>Štýl tlačidiel panela nástrojov</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Zdiľaný šifrovací kľúč s menom „%1” už existuje.
-Chcete ho prepísať?</translation>
+ <source>Config Location:</source>
+ <translation>Umiestnenie nastavenia:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Upraviť položku</translation>
+ <source>Custom browser location field</source>
+ <translation>Pole vlastného umiestnenia prehlaidača</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Chcete upraviť informácie v %1 – %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Zrušiť</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Nájsť cestu vlastného prehlaidača</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Konvertovanie atribútov na vlastné dáta…</translation>
+ <source>Custom extension ID:</source>
+ <translation>Vlastné ID rozšírenia:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Konvertované atribúty KeePassHTTP</translation>
+ <source>Custom extension ID</source>
+ <translation>Vlastné ID rozšírenia</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Úspešne skonvertované atribúty z %1 položky(iek).
-Do vlastných dát presunuté %2 kľúče.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Úspešne presunutých %n kľúč do vlastných dát.</numerusform><numerusform>Úspešne presunutých %n kľúče do vlastných dát.</numerusform><numerusform>Úspešne presunutých %n kľúčov do vlastných dát.</numerusform><numerusform>Úspešne presunutých %n kľúčov do vlastných dát.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Kvôli ochrane Snap v sandboxe, musíte na povolenie integrácie prehliadača spustiť skript.&lt;br /&gt;Skript môžete získať z %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Nenájdená žiadna položka s atribútmi KeePassHTTP!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>Na fungovanie integrácie s prehliadačom je potrebný KeePassXC-Browser.&lt;br /&gt; Stiahnite ho pre %1 a %2. %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Aktívna databáza neobsahuje žiadnu položku s atribútmi KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Prosím, pozrite si špeciálne inštrukcie na použite integrácie prehliadača nižšie</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Zistené staré nastavenia integrácie prehliadača</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Chyba:&lt;/b&gt; Vlastné umiestnenie proxy nemožno nájsť!&lt;br/&gt;Integrácia prehliadača NEBUDE FUNGOVAŤ bez aplikácie proxy.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Vytvoriť novú skupinu</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Upozornenie:&lt;/b&gt; nasledujúce voľby môžu byť nebezpečné!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Bola prijatá požiadavka n novú skupinu „%1”.
-Chcete vytvoriť túto skupinu?
-</translation>
+ <source>Executable Files</source>
+ <translation>Spustiteľné súbory</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Je potrebné presunúť vaše nastavenia KeePassXC-Browser do nastavenia databázovy.
-Je to potrebné kvôli správe aktuálnych pripojení prehliadača.
-Chcete teraz migrovať svoje nastavenia?</translation>
+ <source>All Files</source>
+ <translation>Všetky súbory</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Nezobrazovať znova toto upozornenie</translation>
+ <source>Select custom proxy location</source>
+ <translation>Zvoliť vlastné umiestnenie proxy</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Obdržali ste požiadavku na priradenie nasledujúcej databázy.
-%1
-
-Zadajte mu jedinečný názov alebo identifikátor, napríklad:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -936,11 +1002,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Comments start with</source>
- <translation>Komentáre začínajú znakom</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>Prvý záznam obsahuje názvy polí</translation>
+ <translation>Komentáre začínajú</translation>
</message>
<message>
<source>Consider &apos;\&apos; an escape character</source>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>Ukážka</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Rozloženie stĺpcov</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Neexistuje v súbore CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importované zo súboru CSV</translation>
</message>
@@ -971,20 +1025,12 @@ chrome-laptop.</translation>
<translation>Chyba</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Prázdne meno poľa %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>stĺpec %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>V súbore CSV zistená chyba(y)!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n ďalšia správa preskočená]</numerusform><numerusform>[%n ďalšie správy preskočené]</numerusform><numerusform>[%n ďalších správ preskočených]</numerusform><numerusform>[%n ďalších správ preskočených]</numerusform></translation>
+ <translation><numerusform>[%n ďalšia správa preskočená]</numerusform><numerusform>[%n ďalšie správy preskočené</numerusform><numerusform>[%n ďalších správ preskočených]</numerusform><numerusform>[%n ďalších správ preskočených]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1008,6 +1054,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>Ukážka importu CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Asociaácia stĺpca</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Posledná úprava</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Heslo</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Vytvorené</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Poznámky</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Nadpis</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Skupina</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Použ. meno:</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>Preskočené riadky hlavičky</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>Prvý riadok sú názvy polí</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>Chýba</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Stĺpec %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1022,7 +1120,7 @@ chrome-laptop.</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n bajt</numerusform><numerusform>%n bajty</numerusform><numerusform>%n bajtov</numerusform><numerusform>%n bajtov</numerusform></translation>
+ <translation><numerusform>%n bajt</numerusform><numerusform>%n bajty</numerusform><numerusform>%n bajtov</numerusform><numerusform>%n bajt(y)</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Koreň</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Súbor %1 neexistuje.</translation>
</message>
@@ -1078,6 +1171,19 @@ Zálohovať databázu nachádzajúcu sa na %2</translation>
<source>Recycle Bin</source>
<translation>Kôš</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Heslá</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Ukladanie databázy už prebieha.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Nemožno uložiť, databáza nebola inicializovaná!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1131,10 +1237,6 @@ Prosím, zvážte vygenerovanie nového súboru kľúča.</translation>
<translation>Nepodarilo sa otvoriť kľúčový súbor: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Vybrať slot...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Odomknúť databázu KeePassXC</translation>
</message>
@@ -1147,14 +1249,6 @@ Prosím, zvážte vygenerovanie nového súboru kľúča.</translation>
<translation>Pole pre heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Prepnúť viditeľnosť hesla</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Výber kľúčového súboru</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Výber slotu hardvérového kľúča</translation>
</message>
@@ -1219,10 +1313,6 @@ Ak chcete zabrániť zobrazovaniu tejto chyby, musíte ísť do &quot;Nastavenia
&lt;p&gt;Kliknite pre viac informácií...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Okrem svojho hlavného hesla môžete na zvýšenie bezpečnosti svojej databázy použiť tajný súbor. Taký súbor môže byť vygenerovaný v bezpečnostných nastaveniach databázy.&lt;/p&gt;&lt;p&gt;Toto &lt;strong&gt;nie je&lt;/strong&gt; Váš súbor *.kdbx database!&lt;br&gt;Ak nemáte takýto súbor kľúča, nechajte pole prázdne.&lt;/p&gt;&lt;p&gt;Kliknite na zobrazenie ďalších informácií…&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Pomocník súbora kľúčov</translation>
</message>
@@ -1231,10 +1321,6 @@ Ak chcete zabrániť zobrazovaniu tejto chyby, musíte ísť do &quot;Nastavenia
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Zvoľte súbor kľúča…</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Súbor databázy nemožno použiť ako súbor kľúča</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Nemôžete použiť svoju databázu ako súbor kľúča.
Ak nemáte súbor kľúča, prosím nechajte toto pole prázdne.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Ako doplnok hesla môžete, na zvýšenie bezpečnosti databázy, použiť tajný súbor. Tento súbor môže byť vygenerovaný v nastaveniach bezpečnosti databázy.&lt;/p&gt;&lt;p&gt;Tento súbor &lt;strong&gt;nie je&lt;/strong&gt; súbor vašej databázy *.kdbx!&lt;br&gt;Ak nemáte súbor kľúča, nechajte toto pole prázdne.&lt;/p&gt;&lt;p&gt;Kliknite na ďalšie informácie…&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>Súbor kľúča na odomknutie databázy</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Prosím, stlačte tlačidlo svojho YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detekcia hardvérových kľúčov…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nenájdené žiadne hardvérové kľúče</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Zvoľte hardvérový kľúč…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,10 +1377,6 @@ Ak nemáte súbor kľúča, prosím nechajte toto pole prázdne.</translation>
<translation>Bezpečnosť</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Hlavný kľúč</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Nastavenia šifrovania</translation>
</message>
@@ -1278,6 +1384,10 @@ Ak nemáte súbor kľúča, prosím nechajte toto pole prázdne.</translation>
<source>Browser Integration</source>
<translation>Integrácia prehliadača</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>Prihlasovacie údaje databázy</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ Ak nemáte súbor kľúča, prosím nechajte toto pole prázdne.</translation>
<translation>Nastavenia KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>O&amp;pojiť všetky prehliadače</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Zabudnúť všetky nastavenia &amp;stránok vo všetkých položkách</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Presunúť atribúty KeePassHTTP do vlastný&amp;ch dát KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Uložené kľúče</translation>
</message>
@@ -1351,7 +1449,7 @@ Môže to brániť pripojeniu zásuvného modulu prehliadača.</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Úspešne odstránené% n šifrovací kľúč (y) z KeePassXC nastavenia.</numerusform><numerusform>Úspešne odstránené% n šifrovací kľúč (y) z KeePassXC nastavenia.</numerusform><numerusform>Úspešne odstránené% n šifrovací kľúč (y) z KeePassXC nastavenia.</numerusform><numerusform>Úspešne odstránené %n šifrovacie kľúče z nastavení KeePassXC.</numerusform></translation>
+ <translation><numerusform>Úspešne odstránený %n šifrovací kľúč z nastavení KeePassXC.</numerusform><numerusform>Úspešne odstránené %n šifrovacie kľúče z nastavení KeePassXC.</numerusform><numerusform>Úspešne odstránených %n šifrovacích kľúčov z nastavení KeePassXC.</numerusform><numerusform>Úspešne odstránených %n šifrovacích kľúčov z nastavení KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1377,7 +1475,7 @@ Povolenia na prístup k položkám budú odvolané.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Povolenia sa úspešne odstránili z% n položiek.</numerusform><numerusform>Povolenia sa úspešne odstránili z% n položiek.</numerusform><numerusform>Povolenia sa úspešne odstránili z% n položiek.</numerusform><numerusform>Povolenia sa úspešne odstránili z %n položiek.</numerusform></translation>
+ <translation><numerusform>Úspešne odstránené povolenia z %n položky.</numerusform><numerusform>Úspešne odstránené povolenia z %n položiek.</numerusform><numerusform>Úspešne odstránené povolenia z %n položiek.</numerusform><numerusform>Úspešne odstránené povolenia z %n položky.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1405,6 +1503,67 @@ Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadač
<source>Remove selected key</source>
<translation>Odstrániť vybraný kľúč</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Presunúť atribúty KeePassHTTP do vlastných dát KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Obnoviť ID koreňovej skupiny databázy</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Vytvorené</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Obnoviť ID databázy</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Naozaj chcete obnoviť ID databázy?
+Toto je potrebné len ak je vaša databáza kópiou inej a doplnok prehliadača sa nemôže pripojiť.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Pridať dodatočné zabezpečenie…</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Nie je nastavené heslo</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>UPOZORNENIE! Nenastavili iste heslo. Použitie databázy bez hesla dôrazne neodporúčame!
+
+Naozaj chcete pokračovať bez hesla?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Pokračovať bez hesla</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Nie je pridaný šifrovací kľúč</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Na zabezpečenie svojej databázy musíte pridať aspoň jeden šifrovací kľúč!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Neznáma chyba</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>Zlyhala zmena prihlasovacích údajov databázy</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1414,7 +1573,7 @@ Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadač
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES: 256 bitov (predvolené)</translation>
+ <translation>AES: 256 bit (predvolené)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
@@ -1429,10 +1588,6 @@ Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadač
<translation>Počet transformácií:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>1-sekundové oneskorenie testu výkonu</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Využitie pamäte:</translation>
</message>
@@ -1453,14 +1608,6 @@ Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadač
<translation>Zmeniť</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Vyššie hodnoty poskytujú viac ochrany, ale otvorenie databázy bude trvať dlhšie.</translation>
</message>
@@ -1535,17 +1682,7 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>Závit (y)</numerusform><numerusform>Závit (y)</numerusform><numerusform>Závit (y)</numerusform><numerusform>vlákna</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform>vlákno</numerusform><numerusform>vlákna</numerusform><numerusform>vlákien</numerusform><numerusform> vlákien</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1579,6 +1716,14 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je
<source>Parallelism</source>
<translation>Paralelizácia</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1732,16 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je
<translation>Exponované položky</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Neexponovať túto databázu</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Nezverejňovať túto databázu</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Odkryť položky &amp;v tejto skupine:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Zverejňovať položky tejto skupiny:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation type="unfinished"/>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Zapnúť Tajnú službu na prístup k týmto nastaveniam.</translation>
</message>
</context>
<context>
@@ -1631,7 +1776,7 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation>MiB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1642,10 +1787,6 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je
<translation>Dodatočné nastavenia databázy</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Zapnúť &amp;komprimáciu (odporúčané)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Pole názvu databázy</translation>
</message>
@@ -1679,6 +1820,10 @@ Táto akcia nie je reverzibilná.</translation>
<source> (old)</source>
<translation> (staré)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Zapnúť komprimáciu (odporúčané)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1858,6 @@ Táto akcia nie je reverzibilná.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Pridať dodatočné zabezpečenie…</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Nebol pridaný šifrovací kľúč</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Na zabezpečenie svojej databázy musíte pridať aspoň jeden šifrovací kľúč!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Nie je nastavené heslo</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>UPOZORNENIE! Nenastavili iste heslo. Použitie databázy bez hesla dôrazne neodporúčame!
-
-Naozaj chcete pokračovať bez hesla?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Neznáma chyba</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Zlyhala zmena hlavného kľúča</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Pokračovať bez hesla</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1877,6 @@ Naozaj chcete pokračovať bez hesla?</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Štatistiky</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Pre ďalšie informácie umiestnite kurzor myši na riadky s ikonami chýb.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Názov</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Hodnota</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Názov databázy</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Popis</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Umiestnenie</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Naposledy uložené</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Neuložené zmeny</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>áno</translation>
- </message>
- <message>
- <source>no</source>
- <translation>nie</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Databáza bola zmenená, ale zmeny ešte neboli uložené na disk.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Počet skupín</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Počet položiek</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Počet položiek po dobe platnosti</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Databáza obsahuje položky ktoré expirovali.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Jedinečné heslá</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Nie jedinečné heslá</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Viac ako 10 % hesiel je použitých opakovanie. Použite jedinečné heslá, vždy keď je to možné.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Maximálny počet opakovane použitých hesiel</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Niektoré heslá sú použité viac tri krát. Použite jedinečné heslá, vždy keď je to možné.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Počet krátkych hesiel</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Odporúčaná minimálna dĺžka hesla je aspoň 8 znakov.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Počet slabých hesiel</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Odporúčame použiť dlhé, náhodné heslá s hodnotením „dobré” alebo „výborné” good&apos; or &apos;excellent&apos;.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Priemerná dĺžka hesla</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 znakov</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Priemerná dĺžka hesla je menšia ako desať znakov. Dlhšie heslá poskytujú vyššiu bezpečnosť.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Prosím počkajte, počítanie štatistík databázy…</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1984,6 +1971,10 @@ Toto je určite chyba, prosím nahláste ju vývojárom.</translation>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Chystáte sa exportovať svoju databázu do nešifrovaného súboru. Takto necháte svoje heslá a citlivé informácie nechránené! Naozaj chcete pokračovať?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Otvoriť OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2063,7 +2054,7 @@ Chcete zlúčiť svoje zmeny?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Naozaj chcete natrvalo odstrániť %n položku?</numerusform><numerusform>Naozaj chcete natrvalo odstrániť %n položky?</numerusform><numerusform>Naozaj chcete natrvalo odstrániť %n položiek?</numerusform><numerusform>Naozaj chcete natrvalo odstrániť %n položkiek?</numerusform></translation>
+ <translation><numerusform>Naozaj chcete natrvalo odstrániť %n položku?</numerusform><numerusform>Naozaj chcete natrvalo odstrániť %n položky?</numerusform><numerusform>Naozaj chcete natrvalo odstrániť %n položiek?</numerusform><numerusform>Naozaj chcete natrvalo odstrániť %n položky?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2131,7 +2122,7 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>Položka „%1” má %2 odkaz. Chcete prepísať odkaz hodnotou, preskočiť túto položku alebo ju i tak odstrániť?</numerusform><numerusform>Položka „%1” má %2 odkazy. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform><numerusform>Položka „%1” má %2 odkazov. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform><numerusform>Položka „%1” má %2 odkazov. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform></translation>
+ <translation><numerusform>Položka „%1” má %2 odkaz. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform><numerusform>Položka „%1” má %2 odkazy. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform><numerusform>Položka „%1” má %2 odkazov. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform><numerusform>Položka „%1” má %2 odkazu. Chcete prepísať odkazy hodnotami, preskočiť túto položku alebo ju i tak odstrániť?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2165,6 +2156,14 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Táto databáza je otvorená len na čítanie. Automatické ukladanie je vypnuté.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Uložiť zálohu databázy</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>Nemožno nájsť súbor databázy: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2209,14 +2208,6 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Zvoľte súkromný kľúč</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Súbor je na súkromný kľúč príliš veľký</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Zlyhalo otvorenie súkromného kľúča</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>História položky</translation>
</message>
@@ -2229,10 +2220,6 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Upraviť položku</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Zadané heslá s líšia.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nový atribút</translation>
</message>
@@ -2250,32 +2237,16 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n mesiac</numerusform><numerusform>%n mesiace</numerusform><numerusform>%n mesiacov</numerusform><numerusform>%n mesiacov</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Použiť generované heslo?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Chcete v tejto položke použiť generované heslo?</translation>
+ <translation><numerusform>%n mesiacoch</numerusform><numerusform>%n mesiacoch</numerusform><numerusform>%n mesiacoch</numerusform><numerusform>%n mesiacoch</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Položka úspešne zmenená.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Položka má neuložené zmeny</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Nový atribút %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[CHRÁNENÉ] Stlačte odkryť na zobrazenie alebo úpravu</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n rok</numerusform><numerusform>%n roky</numerusform><numerusform>%n rokov</numerusform><numerusform>%n rokov</numerusform></translation>
@@ -2296,6 +2267,26 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Naozaj chcete odstrániť túto URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Odkryť</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Skryť</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Neuložené zmeny</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Chcete uložiť zmeny tejto položky?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[CHRÁNENÉ] Stlačte odkryť na zobrazenie alebo úpravu</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2371,6 +2362,14 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<source>Background color selection</source>
<translation>Výber farby pozadia</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ak je zvolené, položka nebude zahrnutá v hlásenia ako Health Check alebo HIBP, a to ani keď nespĺňa požiadavky kvality (napr. náhodnosť hesla alebo jeho opakované použitie). Môžete to zvoliť, ak máte heslo mimo svojej kontroly (napr. štvorciferný PIN), aby ste zbytočne nezapĺňali hlasenia.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Vylúčiť z hlásení databázy</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2379,14 +2378,6 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Zapnúť Automatické vypĺňanie pre túto položku</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Zdediť predvolenú postupnosť Automatického &amp;vypĺňania zo skupiny</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Po&amp;užiť vlastnú postupnosť Automatického vypĺňania:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Priradenie okna</translation>
</message>
@@ -2442,12 +2433,20 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Vlastná postupnosť Automatického vypĺňania tohoto okna</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Zdediť predvolenú postupnosť Automatického vypĺňania zo skupiny</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Použiť vlastnú postupnosť Automatického vypĺňania:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
<message>
<source>These settings affect to the entry&apos;s behaviour with the browser extension.</source>
- <translation type="unfinished"/>
+ <translation>Tieto nastavenia ovplyvňujú správanie položky s doplnkom prehliadača.</translation>
</message>
<message>
<source>General</source>
@@ -2477,6 +2476,14 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<source>Edit</source>
<translation>Upraviť</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Toto nastavenie posielať do prehliadača len pre dialógy HTTP Auth. Ak je zapnuté, bežné prihlasovacie formuláre nebudú na výber poskytovať túto položku.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Použiť položku len pre HTTP Basic Auth</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2528,18 +2535,10 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Heslo:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Opakovať:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Názov:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Poznámky</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Predvoľby</translation>
</message>
@@ -2552,10 +2551,6 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Použ. meno:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Platí do</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Pole URL</translation>
</message>
@@ -2564,22 +2559,10 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Stiahnuť ikonu URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Pole opakovaného hesla</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Prepnúť generátor hesla</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Pole pre heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Prepnúť viditeľnosť hesla</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Prepnúť tobrazenie poznámok</translation>
</message>
@@ -2611,6 +2594,18 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<source>Toggle expiration</source>
<translation>Prepnúť dobu platnosti</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Poznámky:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Platí do:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2746,10 +2741,6 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulár</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Typ:</translation>
</message>
@@ -2758,10 +2749,6 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
<translation>Cesta:</translation>
</message>
<message>
- <source>...</source>
- <translation>…</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Heslo:</translation>
</message>
@@ -2779,11 +2766,11 @@ Vypnúť bezpečné ukladanie a skúsiť znova?</translation>
</message>
<message>
<source>Select import source</source>
- <translation>Zvoľte zdroj importu</translation>
+ <translation>Vyberte zdroj importu</translation>
</message>
<message>
<source>Select export target</source>
- <translation>Zvoľte cieľ exportu</translation>
+ <translation>Vyberte cieľ exportu</translation>
</message>
<message>
<source>Select import/export file</source>
@@ -2821,7 +2808,7 @@ Podporované rozšírenia sú: %1.</translation>
</message>
<message>
<source>%1 is being imported and exported by different groups in this database.</source>
- <translation type="unfinished"/>
+ <translation>%1 má byť importované a exportované rôznymi skupinami tejto databázy.</translation>
</message>
<message>
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
@@ -2845,57 +2832,25 @@ Podporované rozšírenia sú: %1.</translation>
<translation>Pole cesty zdieľania súboru</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Vybrať zdieľaný súbor</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Pole pre heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Prepnúť viditeľnosť hesla</translation>
+ <source>Clear fields</source>
+ <translation>Vymazať polia</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Prepnúť generátor hesla</translation>
+ <source>Browse for share file</source>
+ <translation>Vybrať zdieľaný súbor</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Vymazať polia</translation>
+ <source>Browse...</source>
+ <translation>Prechádzať…</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Názov</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Poznámky</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Platí do</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Hľadať</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Automatické vypĺňanie</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Po&amp;užiť predvolenú postupnosť Automatického vypĺňania rodičovskej skupiny</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Nastaviť predvolenú &amp;postupnosť Automatického vypĺňania</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Pole mena</translation>
</message>
@@ -2909,7 +2864,7 @@ Podporované rozšírenia sú: %1.</translation>
</message>
<message>
<source>Auto-Type toggle for this and sub groups</source>
- <translation type="unfinished"/>
+ <translation>Prepnúť Automatické dopĺňanie tejto a vnorených skupín</translation>
</message>
<message>
<source>Expiration field</source>
@@ -2923,18 +2878,38 @@ Podporované rozšírenia sú: %1.</translation>
<source>Default auto-type sequence field</source>
<translation>Pole postupnosti Automatického vypĺňania</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Po&amp;užiť predvolenú ikonu</translation>
+ <source>Expires:</source>
+ <translation>Platí do:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Použiť predvolenú postupnosť Automatického vypĺňania rodičovskej skupiny</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>Automatické vypĺňanie:</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>Hľadať:</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Poznámky:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Použiť &amp;vlastnú ikonu</translation>
+ <source>Name:</source>
+ <translation>Názov:</translation>
</message>
<message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Nastaviť predvolenú postupnosť Automatického vypĺňania</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Pridať vlastnú ikonu</translation>
</message>
@@ -2948,7 +2923,7 @@ Podporované rozšírenia sú: %1.</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>Nemožno stiahnuť ikonu stránky.</translation>
+ <translation>Nemožno stiahnuť ikonu stránky</translation>
</message>
<message>
<source>Images</source>
@@ -2968,7 +2943,7 @@ Podporované rozšírenia sú: %1.</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>Úspešne načítané %1 z %n ikony</numerusform><numerusform>Úspešne načítané %1 z %n ikon</numerusform><numerusform>Úspešne načítané %1 z %n ikon</numerusform><numerusform>Úspešne načítané %1 z %n ikon</numerusform></translation>
+ <translation><numerusform>Úspešne načítané %1 z %n ikony</numerusform><numerusform>Úspešne načítané %1 z %n ikon</numerusform><numerusform>Úspešne načítané %1 z %n ikon</numerusform><numerusform>Úspešne načítané %1 z %n ikony</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2976,7 +2951,7 @@ Podporované rozšírenia sú: %1.</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n ikona už v databáze existuje</numerusform><numerusform>%n ikony už v databáze existujú</numerusform><numerusform>%n ikon už v databáze existuje</numerusform><numerusform>%n ikon už v databáze existuje</numerusform></translation>
+ <translation><numerusform>%n ikony už v databáze existuje</numerusform><numerusform>%n ikony už v databáze existujú</numerusform><numerusform>%n ikon už v databáze existuje</numerusform><numerusform>%n ikony už v databáze existuje</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
@@ -2984,7 +2959,7 @@ Podporované rozšírenia sú: %1.</translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform><numerusform>Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform><numerusform>Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform><numerusform>Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform></translation>
+ <translation><numerusform>Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform><numerusform>Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform><numerusform>Táto ikona je použitá v %n položkách a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform><numerusform>Táto ikona je použitá v %n položke a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2999,14 +2974,6 @@ Podporované rozšírenia sú: %1.</translation>
<translation>Použiť zvolenú ikonu na podskupiny a položky</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Použiť ikonu &amp;na …</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Použiť len na túto</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Použiť aj na podriadené skupiny</translation>
</message>
@@ -3022,6 +2989,22 @@ Podporované rozšírenia sú: %1.</translation>
<source>Existing icon selected.</source>
<translation>Zvolená existujúca ikona.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Použiť predvolenú ikonu</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Použiť vlastnú ikonu</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Použiť ikonu na…</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Použiť len na túto skupinu</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3209,6 +3192,20 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
<source>Save selected attachment to disk</source>
<translation>Uložiť zvolenú prílohu na disk</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 je veľký súbor (%2 MB).
+Vaša databáza môže veľmi narásť a znížiť výkon.
+
+Naozaj chcete pridať tento súbor?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Potvrdiť prílohu</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3229,7 +3226,7 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
</message>
<message>
<source>Username</source>
- <translation>Použ. meno:</translation>
+ <translation>Používateľské meno</translation>
</message>
<message>
<source>URL</source>
@@ -3253,7 +3250,7 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
</message>
<message>
<source>Username</source>
- <translation>Použ. meno:</translation>
+ <translation>Používateľské meno</translation>
</message>
<message>
<source>URL</source>
@@ -3292,12 +3289,52 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
<translation>Prílohy</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Áno</translation>
+ <source>Size</source>
+ <translation>Veľkosť</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Názov skupiny</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Názov položky</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Poznámky položky</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Položka platí do</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Dátum vytvorenia</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Dátum poslednej úpravy</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Dátum posledného prístupu</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Pripojené súbory</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Veľkosť položky</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Má prílohy</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Má TOTP jednorázové časové heslo</translation>
</message>
</context>
<context>
@@ -3397,6 +3434,13 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Neplatná URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3423,35 +3467,94 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
<translation>Obnoviť predvolené</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Prílohy (ikona)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Má prílohy</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Má TOTP</translation>
</message>
</context>
<context>
<name>FdoSecrets::Item</name>
<message>
<source>Entry &quot;%1&quot; from database &quot;%2&quot; was used by %3</source>
- <translation type="unfinished"/>
+ <translation>Položka „%1” z databázy „%2” bola použitá %3</translation>
</message>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Zlyhala registrácia služby DBus na %1: je spustená iná služba.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n položka bola použitá v %1</numerusform><numerusform>%n položky boli použité v %1</numerusform><numerusform>%n položiek bolo použitých v %1</numerusform><numerusform>%n položky bolo použitých v %1</numerusform></translation>
+ <translation><numerusform>%n položka použitá v %1</numerusform><numerusform>%n položky použité v %1</numerusform><numerusform>%n položiek použitých v %1</numerusform><numerusform>%n položky použité v %1</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Zlyhala registrácia služby DBus na %1.</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Meno súboru</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Skupina</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Spravovať</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Odomknúť na zobrazenie</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Žiadny</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Aplikácia</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Spravovať</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Neznámy</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Neznámy</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, príkaz: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>Je spustená iná tajná služba (%1).&lt;br/&gt;Prosím, zastavte/odstráňte ju pred zapnutím Integrácie Tajnej služby.</translation>
+ </message>
</context>
<context>
<name>Group</name>
@@ -3462,14 +3565,10 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.</translation
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Súbor nemožno uložiť!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Nemožno uložiť súbor skriptu správ medzi prehliadačom a KeePassXC (native messaging).</translation>
+ <source>Online password validation failed</source>
+ <translation>Online overenie hesla zlyahlo</translation>
</message>
</context>
<context>
@@ -3539,14 +3638,6 @@ V bezpečnostnej sekcii nastavení aplikácie môžete zapnúť webovú službu
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nemožno vypočítať hlavný kľúč</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nemožno vyvolať výzvu – odpoveď.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>chýbajúce hlavičky databázy</translation>
</message>
@@ -3572,16 +3663,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Boli zadané neplatné prihlasovacie údaje, prosím skúste znova.
Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Nemožno vypočítať kľúč databázy</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nemožno vyvolať výzvu – odpoveď: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Nemožno vyvolať výzvu – odpoveď.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>Nemožno vyvolať výzvu – odpoveď: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nemožno vypočítať hlavný kľúč</translation>
+ <source>Unable to calculate database key</source>
+ <translation>Nemožno vypočítať kľúč databázy</translation>
</message>
</context>
<context>
@@ -3591,10 +3690,6 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
<translation>chýbajúce hlavičky databázy</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nemožno vypočítať hlavný kľúč</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Neplatná veľkosť kontrolného súčtu hlavičky</translation>
</message>
@@ -3650,22 +3745,23 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Neplatná dĺžka názvu položky meta-dát</translation>
+ <translation>Neplatná dĺžka názvu položky mapy varianty</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Neplatné dáta názvu položky meta-dát</translation>
+ <translation>Neplatné dáta názvu položky mapy varianty</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Neplatná dĺžka hodnoty položky meta-dát</translation>
+ <translation>Neplatná dĺžka hodnoty položky mapy varianty
+ </translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Neplatné dáta hodnoty položky meta-dát</translation>
+ <translation>Neplatné dáta hodnoty položky mapy varianty</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
@@ -3712,6 +3808,10 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
<source>(HMAC mismatch)</source>
<translation>(nezhoda HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Nemožno vypočítať kľúč databázy: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3725,14 +3825,14 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
<translation>Neplatná veľkosť IV symetrickej šifry.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nemožno vypočítať hlavný kľúč</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Zlyhala serializácia parametrov KDF meta-dát</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>Nemožno vypočítať kľúč databázy: %1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3742,7 +3842,7 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
</message>
<message>
<source>Invalid compression flags length</source>
- <translation>Neplatná dĺžka príznakov komprimácie</translation>
+ <translation>Nepodporovaný komprimačný algoritmus</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
@@ -3754,7 +3854,7 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Neplatná transformácia náhodnosti (seed)</translation>
+ <translation>Neplatná transformácia hlavnej náhodnosti (seed)</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
@@ -3827,11 +3927,11 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť
</message>
<message>
<source>Null group uuid</source>
- <translation>Žiadne UUID skupiny</translation>
+ <translation>Nulový UUID skupiny</translation>
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Neplatné číslo ikony skupiny</translation>
+ <translation>Neplatný počet ikon skupiny</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
@@ -3847,7 +3947,7 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť
</message>
<message>
<source>Null DeleteObject uuid</source>
- <translation>Žiadne UUID DeleteObject</translation>
+ <translation>Nulový UUID DeleteObject</translation>
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
@@ -3855,11 +3955,11 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť
</message>
<message>
<source>Null entry uuid</source>
- <translation>Žiadne UUID položky</translation>
+ <translation>Nulový UUID položky</translation>
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Neplatné číslo ikony položky</translation>
+ <translation>Neplatný počet ikon položky</translation>
</message>
<message>
<source>History element in history entry</source>
@@ -3879,11 +3979,7 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Chýba textový kľúč alebo hodnota položky</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Nájdená duplicitná príloha</translation>
+ <translation>Chýba kľúč alebo hodnota reťazca položky</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
@@ -3907,7 +4003,7 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Neplatná časť RGB farby</translation>
+ <translation>neplatná časť RGB farby</translation>
</message>
<message>
<source>Invalid number value</source>
@@ -3932,6 +4028,29 @@ Riadok %2, stĺpec %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>Neplatná štruktúra súboru nastavení KeeAgent.</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>Súkromný kľúč je prílohou, ale nie sú žiadne prílohy.</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>Súkromný kľúč je prázdny</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Súbor je na súkromný kľúč príliš veľký</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Zlyhalo otvorenie súkromného kľúča</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3979,7 +4098,7 @@ Riadok %2, stĺpec %3</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Neplatná transformácia náhodnosti (seed)</translation>
+ <translation>Neplatná transformácia hlavnej náhodnosti (seed)</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
@@ -3994,10 +4113,6 @@ Riadok %2, stĺpec %3</translation>
<translation>Koreň</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Nemožno vypočítať hlavný kľúč</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Transformácia kľúča zlyhala</translation>
</message>
@@ -4099,6 +4214,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Boli zadané neplatné prihlasovacie údaje, prosím skúste znova.
Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>Nemožno vypočítať kľúč databázy</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4205,15 +4324,6 @@ Ak sa to opakuje, potom môže byť súbor databázy poškodený.</translation>
<translation>Starý formát kľúča</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Používate starý formát súboru kľúča, ktorý nemusí byť v budúcnosti podporovaný.
-
-Prosím, prejdite do nastavení hlavného kľúča a vygenerujte nový súbor kľúča.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Chyba načítania súboru kľúča „%1”
@@ -4281,6 +4391,16 @@ Are you sure you want to continue with this file?</source>
<translation>Zvolený súbor kľúča vyzerá ako súbor hesla databázy. Súbor kľúča musí byť statický súbor, ktorý sa nikdy nezmení, inak navždy stratíte prístup k svojej databáze.
Naozaj chcete pokračovať s týmto súborom?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>Používate starý formát súboru kľúča, ktorý už nemusí byť
+v budúcnosti podporovaný .
+
+Vygenerujte nový súbor kľúča v nastavení bezpečnosti databázy.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4289,18 +4409,10 @@ Naozaj chcete pokračovať s týmto súborom?</translation>
<translation>&amp;Databáza</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Nedávne databázy</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Pomocník</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>Polo&amp;žky</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Skupiny</translation>
</message>
@@ -4317,46 +4429,10 @@ Naozaj chcete pokračovať s týmto súborom?</translation>
<translation>&amp;O programe</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Otvoriť databázu…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Uložiť databázu</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>&amp;Zatvoriť databázu</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>O&amp;dstrániť položku</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Upraviť skupinu</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>O&amp;dstrániť skupinu</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Ul&amp;ožiť databázu ako…</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Nastavenia databázy</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Klonovať položku</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopírovať po&amp;už. meno</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Skopíruje používateľské meno do schránky</translation>
</message>
@@ -4369,10 +4445,6 @@ Naozaj chcete pokračovať s týmto súborom?</translation>
<translation>Na&amp;stavenia</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Za&amp;mknúť databázy</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Názov</translation>
</message>
@@ -4397,14 +4469,6 @@ Naozaj chcete pokračovať s týmto súborom?</translation>
<translation>Kopírovať poznámky do schránky</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportovať do súboru CSV…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Nastaviť TOTP…</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopírovať &amp;TOTP</translation>
</message>
@@ -4449,10 +4513,6 @@ Táto verzia nie je určená na produkčné použitie.</translation>
<translation>&amp;Podporiť</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Nahlásiť &amp;chybu</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>UPOZORNENIE: Vaša verzia Qt môže spôsobiť pád KeePassXC s klávesnicou na obrazovke!
@@ -4463,66 +4523,26 @@ Odporúčame použiť AppImage dostupný v našej stránke sťahovaní.</transla
<translation>&amp;Import</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopírovať at&amp;ribút...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP…</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Nová databáza…</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Vytvoriť novú databázu</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Zlúčiť z databázou…</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Zlúčiť s inou databázou KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Nová položka</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Pridať novú položku</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Upraviť položku</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Zobraziť alebo upraviť položku</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Nová skupina</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Pridať novú skupinu</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Zmeniť hlavný &amp;kľúč…</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>Nastavenia &amp;databázy…</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Kopírovať &amp;heslo</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Vykonať &amp;Automatické vypĺňanie</translation>
</message>
@@ -4531,30 +4551,14 @@ Odporúčame použiť AppImage dostupný v našej stránke sťahovaní.</transla
<translation>Otvoriť &amp;URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Databáza KeePass 1…</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importovať databázu KeePass 1…</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Súbor CSV</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importovať súbor CSV…</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Zobraziť TOTP…</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Zobraziť QR kód TOTP</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>UPOZORNENIE: Používate nestabilné zostavenie KeePassXC!
@@ -4577,14 +4581,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>&amp;Exportovať</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>Kontrola aktualizácií…</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Stiahnuť &amp;všetky ikony</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Zoradiť &amp;A-Z</translation>
</message>
@@ -4597,48 +4593,290 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>&amp;Generátor hesla</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Stiahnuť ikonu stránky</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importovať z úložiska 1Password</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Začíname</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Používateľská príručka</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Klávesové skratky</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Nedávne databázy</translation>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation>&amp;Položky</translation>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Kopírovať at&amp;ribút</translation>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Zobraziť</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation>Téma</translation>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation>&amp;Skontrolovať aktualizácie</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Otvoriť databázu…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Uložiť databázu</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>&amp;Zatvoriť databázu</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Nová databáza…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>&amp;Zlúčiť z databázou…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Nová položka…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Upraviť položku…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>O&amp;dstrániť položku…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Nová skupina…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Upraviť skupinu…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>O&amp;dstrániť skupinu…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Stiahnuť &amp;všetky ikony…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>Uložiť data&amp;bázu ako…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>&amp;Bezpečnosť databázy…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>&amp;Hlásenia databázy…</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Štatistiky, kontrola zdravia, apod.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>Nastavenia &amp;databázy…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Klonovať položku…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>&amp;Posunúť vyššie</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Posunie položku o jedno vyššie</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportovať do súboru HTML…</translation>
+ <source>Move do&amp;wn</source>
+ <translation>&amp;Posunúť nižšie</translation>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>Move entry one step down</source>
+ <translation>Posunie položku o jedno nižšie</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Kopírovať po&amp;už. meno</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Kopírovať &amp;heslo</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Stiahnuť i&amp;konu</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>Za&amp;mknúť databázy</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>Súbor &amp;CSV…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>Súbor &amp;HTML…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>Databáza KeePass 1</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
<translation>Úložisko 1Password...</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importovať z úložiska 1Password</translation>
+ <source>CSV File…</source>
+ <translation>Súbor CSV…</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Začíname</translation>
+ <source>Show TOTP</source>
+ <translation>Zobraziť TOTP</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Otvorí príručku Začíname v PDF</translation>
+ <source>Show QR Code</source>
+ <translation>Zobraziť QR kód</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>Pomocník &amp;online…</translation>
+ <source>Set up TOTP…</source>
+ <translation>Nastaviť TOTP…</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Prejsť na dokumentáciu on-line (otvorí prehliadač)</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>Nahlásiť &amp;chybu</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Používateľská príručka</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>Otvorí príručku Začíname</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Otvorí používateľskú príručku v PDF</translation>
+ <source>&amp;Online Help</source>
+ <translation>Pomocník &amp;online</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Klávesové skratky</translation>
+ <source>Go to online documentation</source>
+ <translation>Prejsť na dokumentáciu on-line</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Otvorí používateľskú príručku</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Uložiť zálohu databázy…</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Pridať kľúč do Agenta SSH</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Odstrániť kľúč z Agenta SSH</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Kompaktný režim</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automaticky</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Svetlý</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Tmavý</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klasický (podľa platformy)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Zobraziť panel nástrojov</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Zobraziť panel ukážky</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Nezobrazovať znova v tejto verzii</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Reštartovať aplikáciu?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Nastavenia databázy</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Upraviť nastavenia databázy</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Odomknúť databázu</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Odomknúť databázu na zobrazenie ďalších informácií</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Zamknúť databázu</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Odpojiť</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Odpojiť túto palikáciu</translation>
</message>
</context>
<context>
@@ -4669,7 +4907,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>Aplikujem položku staršieho cieľa na novší cieľ %1 [%2]</translation>
+ <translation>Aplikujem položku staršieho cieľa na novší zdroj %1 [%2]</translation>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
@@ -4677,7 +4915,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
- <translation>Synchronizujem z nového zdroja %1 [%2]</translation>
+ <translation>Synchronizujem z novšieho zdroja %1 [%2]</translation>
</message>
<message>
<source>Synchronizing from older source %1 [%2]</source>
@@ -4685,15 +4923,15 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Deleting child %1 [%2]</source>
- <translation>Vymazávam potomka %1 [%2]</translation>
+ <translation>Odstraňuje sa dieťa %1 [%2]</translation>
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
- <translation>Vymazávam sirotu %1 [%2]</translation>
+ <translation>Odstraňujú sa ojedinelé ochorenia %1 [%2]</translation>
</message>
<message>
<source>Changed deleted objects</source>
- <translation>Zmenené vymazané objekty</translation>
+ <translation>Odstránené objekty boli zmenené </translation>
</message>
<message>
<source>Adding missing icon %1</source>
@@ -4701,11 +4939,11 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Removed custom data %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Odstránené vlastné dáta %1 [%2]</translation>
</message>
<message>
<source>Adding custom data %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Pridanie vlastných dát %1 [%2]</translation>
</message>
</context>
<context>
@@ -4727,10 +4965,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>Stránka sprievodcu</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Nastavenia &amp;šifrovanie</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Tu môžete prispôsobiť nastavenia šifrovania databázy. Nebojte sa, neskôr ich môžete zmeniť v nastavení databázy.</translation>
</message>
@@ -4742,27 +4976,31 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<source>Simple Settings</source>
<translation>Jednoduché nastavenia</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Nastavenia šifrovania</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Tu môžete prispôsobiť nastavenia šifrovania databázy. Nebojte sa, neskôr ich môžete zmeniť v nastavení databázy.</translation>
+ <source>Database Credentials</source>
+ <translation>Prihlasovacie údaje databázy</translation>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>Sada prihlasovacích údajov, známe len Vám, chráni vašu databázu.</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Hlavný kľúč databázy</translation>
+ <source>Encryption Settings</source>
+ <translation>Nastavenia šifrovania</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Hlavný kľúč, známy len vám, chráni vašu databázu.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Tu môžete prispôsobiť nastavenia šifrovania databázy. Nebojte sa, neskôr ich môžete zmeniť v nastavení databázy.</translation>
</message>
</context>
<context>
@@ -4777,10 +5015,17 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Správca hesiel</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
- <translation type="unfinished"/>
+ <translation>Neplatné OpData01, neobsahuje hlavičku</translation>
</message>
<message>
<source>Unable to read all IV bytes, wanted 16 but got %1</source>
@@ -4788,7 +5033,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Unable to init cipher for opdata01: %1</source>
- <translation type="unfinished"/>
+ <translation>Nemožno inicializovať šifru pre opdata01: %1</translation>
</message>
<message>
<source>Unable to read all HMAC signature bytes</source>
@@ -4796,7 +5041,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Malformed OpData01 due to a failed HMAC</source>
- <translation type="unfinished"/>
+ <translation>Zlý formát OpData01 kvôli zlyhanému HMAC</translation>
</message>
<message>
<source>Unable to process clearText in place</source>
@@ -4804,7 +5049,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Expected %1 bytes of clear-text, found %2</source>
- <translation type="unfinished"/>
+ <translation>Očakávaných %1 B prostého textu, nájdených %2</translation>
</message>
</context>
<context>
@@ -4812,7 +5057,8 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<message>
<source>Read Database did not produce an instance
%1</source>
- <translation type="unfinished"/>
+ <translation>Čítanie databázy neposkytuje inštanciu
+%1</translation>
</message>
</context>
<context>
@@ -4951,6 +5197,18 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<source>Passwords match so far</source>
<translation>Heslá sa zhodujú až potiaľ</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>Prepnúť heslo (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>Generovať heslo (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Upozornenie: Caps Lock zapnutý!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4975,25 +5233,13 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>Heslá sa nezhodujú.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Vygenerovať hlavné heslo</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Pole pre heslo</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Prepnúť viditeľnosť hesla</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Pole opakovaného hesla</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Prepnúť generátor hesla</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5002,10 +5248,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Heslo:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>sila</translation>
@@ -5055,14 +5297,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>Oddeľovač slov:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopírovať</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Prijať</translation>
- </message>
- <message>
<source>Close</source>
<translation>Zatvoriť</translation>
</message>
@@ -5077,7 +5311,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<message>
<source>Poor</source>
<comment>Password quality</comment>
- <translation>Biedne</translation>
+ <translation>Slabé</translation>
</message>
<message>
<source>Weak</source>
@@ -5159,14 +5393,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Prepnúť na jednoduchý režim</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>jednoduché</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Sady znakov, ktoré majú byť vynechané pri generovaní hesla</translation>
</message>
@@ -5184,15 +5410,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation>Vynechané znaky: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation>Počet &amp;slov:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Obnoviť</translation>
+ <translation>Vynechané znaky: „0”, „1”, „l”, „I”, „O”, „|”, „﹒”</translation>
</message>
<message>
<source>Generated password</source>
@@ -5243,10 +5461,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>Kopírovať heslo</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Prijať heslo</translation>
- </message>
- <message>
<source>lower case</source>
<translation>malé písmená</translation>
</message>
@@ -5259,8 +5473,44 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<translation>Titulková Veľkosť</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Prepnúť viditeľnosť hesla</translation>
+ <source>Generate Password</source>
+ <translation>Generovať heslo</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>Tiež vybrať z:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>Dodatočné znaky použité pri generovaní hesla</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Dodatočné znaky</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Počet slov:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Použiť heslo</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Vymazať</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Obnoviť heslo (%1)</translation>
</message>
</context>
<context>
@@ -5273,6 +5523,58 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<source>Statistics</source>
<translation>Štatistiky</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Veľmi slabé heslo</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Náhodnosť hesla je %1 b</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Slabé heslo</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>Použité v %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Heslo je použité %1 krát</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Heslo vypršalo</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>Platnosť hesla bola %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Heslo čoskoro vyprší</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Platnosť hesla vyprší za %1 dní</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Heslo čoskoro vyprší</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Platnosť hesla vyprší %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>Kontrola zdravia</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5357,7 +5659,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>No logins found</source>
- <translation>Neboli nájdené prihlásenia</translation>
+ <translation>Nebolo nájdené prihlásenie</translation>
</message>
<message>
<source>Unknown error</source>
@@ -5409,11 +5711,7 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
</message>
<message>
<source>Path of the entry to add.</source>
- <translation>Cesta pridávanej položky.</translation>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Skopíruje heslo položky do schránky.</translation>
+ <translation>Cesta pridávanej položky</translation>
</message>
<message>
<source>Path of the entry to clip.</source>
@@ -5538,7 +5836,7 @@ Dostupné príkazy:
</message>
<message>
<source>missing closing quote</source>
- <translation>chýbajúca koncová úvodzovka</translation>
+ <translation>chýba koncová úvodzovka</translation>
</message>
<message>
<source>Group</source>
@@ -5550,7 +5848,7 @@ Dostupné príkazy:
</message>
<message>
<source>Username</source>
- <translation>Použ. meno:</translation>
+ <translation>Používateľské meno</translation>
</message>
<message>
<source>Password</source>
@@ -5573,14 +5871,6 @@ Dostupné príkazy:
<translation>Integrácia prehliadača</translation>
</message>
<message>
- <source>Press</source>
- <translation>Stlačiť</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasívne</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Agent SSH</translation>
</message>
@@ -5619,10 +5909,6 @@ Dostupné príkazy:
<translation>Úspešne pridaná položka %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Kopírovať aktuálny TOTP do schránky.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Neplatná hodnota časového limitu %1.</translation>
</message>
@@ -5634,17 +5920,9 @@ Dostupné príkazy:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Položka s cestou %1 nemá nastavený TOTP.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TTOP aktuálnej položky skopírované do schránky!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Heslo položky skopírované schránky!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Schránka bude vymazaná za %1 s</numerusform><numerusform>Schránka bude vymazaná za %1 s</numerusform><numerusform>Schránka bude vymazaná za %1 s</numerusform><numerusform>Schránka bude vymazaná za %1 s</numerusform></translation>
+ <translation><numerusform>Vymazaním schránky v %1 sekundu...</numerusform><numerusform>Vymazaním schránky v %1 sekundu...</numerusform><numerusform>Vymazaním schránky v %1 sekundu...</numerusform><numerusform>Clipboard bude vymazaný za %1 sek.</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5652,7 +5930,7 @@ Dostupné príkazy:
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation>Umlčať prompt hesla a ďalšie sekundárne výstupy</translation>
+ <translation>Potlačiť prompt hesla a ďalšie sekundárne výstupy</translation>
</message>
<message>
<source>count</source>
@@ -5693,7 +5971,7 @@ Dostupné príkazy:
</message>
<message>
<source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
+ <translation>Viacslovné extra bity %1</translation>
</message>
<message>
<source>Type: Bruteforce</source>
@@ -5705,11 +5983,11 @@ Dostupné príkazy:
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>Typ: Slovníík+Leet</translation>
+ <translation>Typ: Slovník+Leet</translation>
</message>
<message>
<source>Type: User Words</source>
- <translation>Type: Použ. slová</translation>
+ <translation>Typ: Použ. slová</translation>
</message>
<message>
<source>Type: User+Leet</source>
@@ -5733,23 +6011,23 @@ Dostupné príkazy:
</message>
<message>
<source>Type: Bruteforce(Rep)</source>
- <translation>Typ: Hrubou silou (Opak)</translation>
+ <translation>Typ: Hrubou silou(Rep)</translation>
</message>
<message>
<source>Type: Dictionary(Rep)</source>
- <translation>Typ: Slovník(Opak)</translation>
+ <translation>Typ: Slovník(Rep)</translation>
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>Typ: Slovník+Leet(Opak)</translation>
+ <translation>Typ: Slovník+Leet(Rep)</translation>
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>Type: Použ. slová(Opak)</translation>
+ <translation>Type: Použ. slová(Rep)</translation>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
- <translation>Typ: Použ.+Leet(Opak)</translation>
+ <translation>Typ: Použ.+Leet(Rep)</translation>
</message>
<message>
<source>Type: Repeated(Rep)</source>
@@ -5862,10 +6140,6 @@ Dostupné príkazy:
<translation>Nie je definovaný program na manipuláciu so schránkou</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Nemožno spustiť program %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>prázdny súbor</translation>
</message>
@@ -5874,18 +6148,6 @@ Dostupné príkazy:
<translation>%1: (riadok, stĺpec) %2, %3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-b</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-b</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-b</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – odporúčané)</translation>
</message>
@@ -6013,7 +6275,7 @@ Dostupné príkazy:
</message>
<message>
<source>Deactivate password key for the database to merge from.</source>
- <translation type="unfinished"/>
+ <translation>Deaktivovať heslo kľúča zlučovanej databázy.</translation>
</message>
<message>
<source>Version %1</source>
@@ -6136,10 +6398,6 @@ Jadro: %3 %4</translation>
<translation>Zobrazí tohoto pomocníka.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation>slot</translation>
</message>
@@ -6149,19 +6407,15 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>The word list is too small (&lt; 1000 items)</source>
- <translation type="unfinished"/>
+ <translation>Zoznam slov je príliš krátky (&lt; 1000 položiek)</translation>
</message>
<message>
<source>Exit interactive mode.</source>
<translation>Ukončiť interaktívny režim.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
- <translation type="unfinished"/>
+ <translation>Exportuje obsah databázy na štandardný výstup v zadanom formáte.</translation>
</message>
<message>
<source>Unable to export database to XML: %1</source>
@@ -6189,21 +6443,17 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Import the contents of an XML database.</source>
- <translation type="unfinished"/>
+ <translation>Import obsahu databázy XML.</translation>
</message>
<message>
<source>Path of the XML database export.</source>
- <translation type="unfinished"/>
+ <translation>Cesta na export databázy XML.</translation>
</message>
<message>
<source>Path of the new database.</source>
<translation>Cesta k novej databáze.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Nemožno importovať databázu z exportu XML %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Úspešne importovaná databáza.</translation>
</message>
@@ -6213,7 +6463,7 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Flattens the output to single lines.</source>
- <translation type="unfinished"/>
+ <translation>Spája výstup do jedného riadku.</translation>
</message>
<message>
<source>Only print the changes detected by the merge operation.</source>
@@ -6289,39 +6539,31 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Enter password to unlock %1: </source>
- <translation type="unfinished"/>
+ <translation>Zadajte heslo na odomknutie %1:</translation>
</message>
<message>
<source>Invalid YubiKey slot %1</source>
<translation>Neplatný slot Yubikey %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Prosím, stlačte tlačidlo svojho YubiKey na odomknutie %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Zadajte heslo na zašifrovanie databázy (voliteľné):</translation>
</message>
<message>
<source>HIBP file, line %1: parse error</source>
- <translation type="unfinished"/>
+ <translation>Súbor HIBP, riadok %1: chyba spracovania</translation>
</message>
<message>
<source>Secret Service Integration</source>
- <translation type="unfinished"/>
+ <translation>Integrácia Tajnej služby</translation>
</message>
<message>
<source>User name</source>
<translation>Meno používavteľa</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Heslo k „%1” uniknuté %2 krát!</numerusform><numerusform>Heslo k „%1” uniknuté %2 krát!</numerusform><numerusform>Heslo k „%1” uniknuté %2 krát!</numerusform><numerusform>Heslo k „%1” uniknuté %2 krát!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6331,6 +6573,193 @@ Jadro: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Zobraziť chránené atribúty ako prostý text.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Chyba doplnku prehlaidača</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>Prekopírovať zadaný atribút do schránky. Ak nie je zadané, predvolene bude „password”.</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>Kopírovať aktuálny TOTP do schránky (ekvivalent „-a totp”).</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>Skopírovať atribút položky do schránky.</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>CHYBA: Prosím, zadajte len jedno z --attribute alebo --totp, nie oba.</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>CHYBA: atribút %1 je nejednoznačný, vyhovuje %2.</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Atribút „%1” nenájdený.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Atribút „%1” položky skopírovaný do schránky!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Slot Yubikey a voliteľné sériové číslo na prístup k databáze (napr. 1:7370001).</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>slot[:ser.číslo]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>Cieľový čas dešifrovania databázy v ms.</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>čas</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Nastaviť súbor kľúča databázy.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Nastaviť heslo databázy.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>Neplatný čas dešifrovania %1.</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>Cieľový čas dešifrovania databázy má byť medzi %1 a %2.</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>Zlyhalo nastavenie hesla databázy.</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>Nastavenie %1 opakovaní pre funkciu odvodenia kľúča.</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>chyba nastavovania kľúča databázy pri nastavení odvodenia kľúča.</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Formát exportu. Dostupné voľby sú „xml” alebo „csv”. Predvolene „xml”.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Nemožno importovať databázu XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Zobraziť informácie databázy.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Názov:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Popis:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Šifra:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>Odpadkový kôš je zapnutý.</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>Odpadkový kôš nie je zapnutý.</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>Neplatný príkaz %1.</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>Neplatné sériové číslo Yubikey %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Prosím, stlačte tlačidlo svojho YubiKey na pokračovanie*…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Naozaj chcete vytvoriť databázu s prázdnym heslom? [y/N]</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Zopakujte heslo:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Chyba: Heslá sa nezhodujú.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 opakovaní)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 opakovaní, %2 kB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256b</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256b</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256b {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6367,6 +6796,290 @@ Jadro: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Zobraziť aj položky vylúčené z hlásení</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Prejdite myšou na príčinou, na zobrazenie dodatočných podrobností. Dvojklikom na položku ju upravíte.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Zlé</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Zlé — heslo treba zmeniť</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Biedne</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Biedne — heslo by ste mali zmeniť</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Slabé</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Slabé — zvážte zmenu hesla</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Vylúčené)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Táto položka je vylúčená z hlásení</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Prosím počkajte, počítanie dát zdravia…</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Blahoželáme, všetko je v poriadku!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Nadpis</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Cesta</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Skóre</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Dôvod</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Upraviť položku…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Vylúčiť z hlásení</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>VÝSTRAHA: Toto hlásenie vyžaduje odoslanie informácií do online služby Have I Been Pwned (https://haveibeenpwned.com). Ak budete pokračovať, z databáza Vašich hesiel budú urobené kryptografické odtlačky a prvých päť znakov týchto odtlačkov bude zabezpečene poslaných do tejto služby. Vaša databáza ostane bezpečná a nebude možné ju z týchto informácií spätne zostaviť. Ale službe bude známy počet odoslaných hesiel a vaša adresa IP.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Vykonať online analýzu</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Zobraziť aj položky vylúčené z hlásení</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Toto zostavenie KeePassXC nemá sieťové funkcie. Sieť je potrebná na overenie vašich hesiel pomocou databáz Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Blahoželáme, žiadne uniknuté heslá!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Nadpis</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Cesta</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Heslo uniknuté…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (Vylúčené)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Táto položka je vylúčená z hlásení</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>raz</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>až 10 krát</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>až 100 krát</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>až 1 000 krát</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>až 10 000 krát</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>až 100 000 krát</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>až milión krát</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>milión krát</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Upraviť položku…</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Vylúčiť z hlásení</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Pre ďalšie informácie umiestnite kurzor myši na riadky s ikonami chýb.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Názov</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Hodnota</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Prosím počkajte, počítanie štatistík databázy…</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Názov databázy</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Popis</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Umiestnenie</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Naposledy uložené</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Neuložené zmeny</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>áno</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>nie</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Databáza bola zmenená, ale zmeny ešte neboli uložené na disk.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Počet skupín</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Počet položiek</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Počet položiek po dobe platnosti</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Databáza obsahuje položky ktoré expirovali.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Jedinečné heslá</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Nie jedinečné heslá</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Viac ako 10 % hesiel je použitých opakovanie. Použite jedinečné heslá, vždy keď je to možné.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Maximálny počet opakovane použitých hesiel</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Niektoré heslá sú použité viac tri krát. Použite jedinečné heslá, vždy keď je to možné.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Počet krátkych hesiel</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Odporúčaná minimálna dĺžka hesla je aspoň 8 znakov.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Počet slabých hesiel</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Odporúčame použiť dlhé, náhodné heslá s hodnotením „dobré” alebo „výborné” good&apos; or &apos;excellent&apos;.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Položky vylúčené z hlásení</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Vylúčenie položiek z hlásení, napr. pretože je známe ich slabé heslo, zvyčajne nemusí byť problém, ale mali by ste sa na to dávať pozor.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Priemerná dĺžka hesla</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 znakov</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Priemerná dĺžka hesla je menšia ako desať znakov. Dlhšie heslá poskytujú vyššiu bezpečnosť.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6378,7 +7091,7 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>Nie je spustený žiadny agent, nemožno pridať identitu.</translation>
+ <translation>Nie je spustený žiadny agent, nemožno identifikovať.</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
@@ -6394,12 +7107,20 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation>Obmedzená doba platnosti nie je agentom podporovaná (skontrolujte voľby).</translation>
+ <translation>Obmedzená doba platnosti nie je agentom podporovaná (skontrolujte voľby)</translation>
</message>
<message>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Potrvrdzovací požiadavok nie je podporovaný (skontrolujte voľby).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Konflikt identity vlastníctva kľúča. Odmietnuté pridať.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Nie je spustený agent, nemožno získať zoznam identít.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6409,11 +7130,11 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation>Hľadané výrazy sú nasledovné: [modifikátory] [pole:] [&quot;] termín [&quot;]</translation>
+ <translation>Hľadané výrazy sú nasledovné: [modifikátory] [pole:] [&quot;] výraz [&quot;]</translation>
</message>
<message>
<source>Every search term must match (ie, logical AND)</source>
- <translation>Každý hľadaný výraz sa musí zhodovať (tj. platí logický AND)</translation>
+ <translation>Každý hľadaný výraz sa musí zhodovať (tj. platí logické AND)</translation>
</message>
<message>
<source>Modifiers</source>
@@ -6492,7 +7213,7 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
- <translation type="unfinished"/>
+ <translation>Zapne Integráciu KeepassXC Freedesktop.org Secret Service</translation>
</message>
<message>
<source>General</source>
@@ -6500,31 +7221,15 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Show notification when credentials are requested</source>
- <translation type="unfinished"/>
+ <translation>Zobraziť upozornenie, keď sú požadované prihlasovacie údaje</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ak je pre databázu zapnutý kôš, položky budú presunuté priamo do koša. V opačnom prípade budú odstránené bez potvrdenia.&lt;/p&gt;&lt;p&gt;Potvrdenie bude vyžadované, len ak sú položky odkazované inými.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Nepotvrdzovať pri odstránení položiek klientmi.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Name</source>
- <translation>Meno súboru</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Skupina</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Spravovať</translation>
+ <translation>Zverejnené skupiny databázy:</translation>
</message>
<message>
<source>Authorization</source>
@@ -6532,43 +7237,23 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>These applications are currently connected:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Application</source>
- <translation>Aplikácia</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Odpojiť</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Nastavenia databázy</translation>
+ <translation>Aktuálne pripojené aplikácie:</translation>
</message>
<message>
- <source>Edit database settings</source>
- <translation>Upraviť nastavenia databázy</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Odomknúť databázu</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Nepotvrdzovať pri odstránení položiek klientmi.</translation>
</message>
<message>
- <source>Unlock database to show more information</source>
- <translation>Odomknúť databázu na zobrazenie ďalších informácií</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;Chyba:&lt;/b&gt; Zlyhalo pripojenie k DBus. Prosím, skontrolujte nastavenie svojho DBus.</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>Zamknúť databázu</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;Upozornenie:&lt;/b&gt; </translation>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Odomknúť na zobrazenie</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Žiadny</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6623,7 +7308,7 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Trust</source>
- <translation>Dôveryhodnosť</translation>
+ <translation>Dôverovať</translation>
</message>
<message>
<source>Ask</source>
@@ -6712,7 +7397,7 @@ Jadro: %3 %4</translation>
</message>
<message>
<source>Signer name field</source>
- <translation type="unfinished"/>
+ <translation>Pole mena podpisovaného</translation>
</message>
<message>
<source>Generate new certificate</source>
@@ -6751,12 +7436,11 @@ Jadro: %3 %4</translation>
<name>ShareExport</name>
<message>
<source>Overwriting signed share container is not supported - export prevented</source>
- <translation> 
-Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa neuskutočnil</translation>
+ <translation>Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa neuskutočnil</translation>
</message>
<message>
<source>Could not write export container (%1)</source>
- <translation>Nie je možné zapísať do exportného kontajnera (%1)</translation>
+ <translation>Nemožno zapísať do exportného kontajnera (%1)</translation>
</message>
<message>
<source>Could not embed signature: Could not open file to write (%1)</source>
@@ -6764,11 +7448,11 @@ Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa ne
</message>
<message>
<source>Could not embed signature: Could not write file (%1)</source>
- <translation>Podpis sa nedá vložiť: súbor sa nedá zapísať (%1)</translation>
+ <translation>Podpis sa nedá vložiť: do súboru sa nedá zapísať (%1)</translation>
</message>
<message>
<source>Could not embed database: Could not open file to write (%1)</source>
- <translation>Nepodarilo sa vložiť databázu: nedá sa otvoriť súbor na zápis (%1)</translation>
+ <translation>Nedá sa vložiť databáza: nedá sa otvoriť súbor na zápis (%1)</translation>
</message>
<message>
<source>Could not embed database: Could not write file (%1)</source>
@@ -6803,7 +7487,7 @@ Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa ne
</message>
<message>
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
- <translation>Chcete dôverovať %1 odtlačkom prsta %2 z %3? {1?} {2?}</translation>
+ <translation>Chcete dôverovať %1 s odtlačkom prsta %2 z %3? {1?} {2?}</translation>
</message>
<message>
<source>Not this time</source>
@@ -6842,10 +7526,6 @@ Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa ne
<translation>Úspešný podpísaný import</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Neočakávaná chyba</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Nepodpísané zdieľané kontajnery nie sú podporované - import sa neuskutočnil</translation>
</message>
@@ -6913,7 +7593,7 @@ Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa ne
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Platnosť vyprší za % n sekundu</numerusform><numerusform>Platnosť vyprší za % n sekundy</numerusform><numerusform>Platnosť vyprší za % n sekúnd</numerusform><numerusform>Platnosť vyprší za &lt;b&gt;% n&lt;/b&gt; sekúnd</numerusform></translation>
+ <translation><numerusform>Uplynie v &lt;b&gt;% n&lt;/b&gt; sekunda (s)</numerusform><numerusform>Uplynie v &lt;b&gt;% n&lt;/b&gt; sekunda (s)</numerusform><numerusform>Uplynie v &lt;b&gt;% n&lt;/b&gt; sekunda (s)</numerusform><numerusform>Expiruje za &lt;b&gt;% n&lt;/b&gt; sekúnd</numerusform></translation>
</message>
</context>
<context>
@@ -6989,7 +7669,7 @@ Prepis podpísaných zdieľaných kontajnerov nie je podporovaný - export sa ne
</message>
<message>
<source>Time step field</source>
- <translation type="unfinished"/>
+ <translation>Pole kroku času</translation>
</message>
<message>
<source> digits</source>
@@ -7015,6 +7695,13 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Neplatná URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7038,7 +7725,7 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Please try again later.</source>
- <translation>Skúste to znova neskôr.</translation>
+ <translation>Skúste znova neskôr.</translation>
</message>
<message>
<source>Software Update</source>
@@ -7050,7 +7737,7 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation>Už existuje KeePassXC %1 – vy máte %2.</translation>
+ <translation>Už existuje KeePassXC %1 — vy máte %2.</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
@@ -7105,6 +7792,53 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Stlačiť</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasívne</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 zadaný neplatný slot – %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>Rozhranie YubiKey nebolo inicializované.</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>Hardvérový kľúč je práve používaný.</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>Nemožno nájsť hardvérový kľúč so sériovým číslom %1. Prosím, pripojte ho na pokračovanie.</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>Uplynul časový limit hardvérového kľúča pri čakaní na činnosť používateľa.</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>Pri prístupe k hardvérovému kľúču nastala chyba USB: %1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Zlyhalo dokončenie výzvy.odpovede, konkrétna chyba bola: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7119,14 +7853,6 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Ak vlastníte &lt;a href=&quot;https://www.yubico.com/&quot;&gt;Yubikey&lt;/a&gt;, môžete ho použiť na dodatočné zabezpečenie.&lt;/p&gt;&lt;p&gt;YubiKey vyžaduje, aby jeden z jeho slotov bol naprogramovaný ako &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Nebol zistený žiadny YubiKey, skontrolujte, či je pripojený k PC.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>Nie je vložený žiaden YubiKey.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Obnoviť hardvérové tokeny</translation>
</message>
@@ -7134,5 +7860,21 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
<source>Hardware key slot selection</source>
<translation>Výber slotu hardvérového kľúča</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Nemožno nájsť žiadny hardvérový kľúč!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Zvolený slot hardvérového kľúča nepodporuje výzvu.dopoveď!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Detekcia hardvérových kľúčov…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Nenájdené žiadne hardvérové kľúče</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_sl_SI.ts b/share/translations/keepassx_sl_SI.ts
deleted file mode 100644
index e2ede67f9..000000000
--- a/share/translations/keepassx_sl_SI.ts
+++ /dev/null
@@ -1,5424 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="sl_SI" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>About</source>
- <translation>O programu</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Contributors</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Debug Info</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Libraries:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Samodejno tipkanje</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation>Nastavitve aplikacije</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Splošno</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Varnost</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation>Zapomni si zadnje podatkovne baze</translation>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation>Samodejno shrani po vsaki spremembi</translation>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation>Samodejno shrani ob izhodu</translation>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation>Za nove vnose uporabi ikono skupine</translation>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation>Minimiziraj pri kopiranju v odložišče</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Splošno</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation>Pokaži ikono v sistemski vrstici</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation>Minimiziraj v sistemsko vrstico</translation>
- </message>
- <message>
- <source>Language</source>
- <translation>Jezik</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Samodejno tipkanje</translation>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globalna bližnjica za samodejno tipkanje</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation>Pobriši odložišče po</translation>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>sekundah</translation>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation>Zakleni podatkovne baze po neaktivnosti </translation>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Ne najdem vnosa, ki bi ustrezal:</translation>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Samodejno tipkanje</translation>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Okno</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sekvenca</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>Privzeta sekvenca</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Skupina</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Naslov</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Uporabniško ime</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sekvenca</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation>Izberi vnos za samodejno tipkanje:</translation>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deny</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Splošno</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Napredno</translation>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy history</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filename</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encoding</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Codec</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comments start with</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>First record has field names</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Preview</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Column layout</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Original data: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error</source>
- <translation>Napaka</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Koren</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation>Vnesi glavno geslo</translation>
- </message>
- <message>
- <source>Key File:</source>
- <translation>Datoteka s ključi:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Geslo:</translation>
- </message>
- <message>
- <source>Browse</source>
- <translation>Prebrskaj</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Vse datoteke</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>Datoteke s ključi</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>Izberi datoteko s ključi</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Splošno</translation>
- </message>
- <message>
- <source>Security</source>
- <translation>Varnost</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Odstrani</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation>Transform rounds:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation>Ime podatkovne baze:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>Opis podatkovne baze:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>Privzeto uporabniško ime:</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>Max. vnosov zgodovine:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>Max. velikost zgodovine:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation> MiB</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 podatkovna baza</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Vse datoteke</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>Odpri podatkovno bazo</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>CSV datoteka</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>Odpri KeePass 1 podatkovno bazo</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>KeePass 1 podatkovna baza</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation>Izvozi podatkovno bazo v CSV datoteko</translation>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation>Pisanje v CSV datoteko ni uspelo</translation>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Ali res želite izbrisati &quot;%1&quot;?</translation>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Ali res želite izbrisati skupino &quot;%1&quot;?</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No Results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge Request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation>&quot;%1&quot; spremenjeno.
-Shrani spremembe?</translation>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation>Shrani spremembe?</translation>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save database as</source>
- <translation>Shrani podatkovno bazo kot</translation>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 podatkovna baza</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation>Izbriši skupino</translation>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>Vnos</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Napredno</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Ikona</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Samodejno tipkanje</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Lastnosti</translation>
- </message>
- <message>
- <source>History</source>
- <translation>Zgodovina</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry history</source>
- <translation>Zgodovina vnosov</translation>
- </message>
- <message>
- <source>Add entry</source>
- <translation>Dodaj vnos</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>Uredi vnos</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Gesli se ne ujemata.</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>Nov atribut</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>Jutri</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation>Dodatni atributi</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>Dodaj</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Odstrani</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Protect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reveal</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Priponke</translation>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Omogoči samodejno tipkanje za ta vnos</translation>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window Associations</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>Naslov okna:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>Prikaži</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>Obnovi</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>Izbriši</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>Izbriši vse</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>URL:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Geslo:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Ponovi geslo:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>Naslov:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Opombe</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation>Prednastavljeno</translation>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username:</source>
- <translation>Uporabniško ime:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Poteče</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> seconds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Comment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>n/a</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>External file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachment</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add to agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Skupina</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Ikona</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Lastnosti</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>Dodaj skupino</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>Uredi skupino</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>Omogoči</translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>Onemogoči</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation>Podeduj iz nadrejene skupine (%1)</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Geslo:</translation>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>Ime</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Opombe</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Poteče</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Išči</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Samodejno tipkanje</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>Dodaj poljubno ikono</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation>Izbriši ikono</translation>
- </message>
- <message>
- <source>Download favicon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Images</source>
- <translation>Slike</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Vse datoteke</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>Ustvarjeno:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>Spremenjeno:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>Zadnji dostop:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>Uuid:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Odstrani</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>Ime</translation>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add</source>
- <translation>Dodaj</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Odstrani</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>Odpri</translation>
- </message>
- <message>
- <source>Save</source>
- <translation>Shrani</translation>
- </message>
- <message>
- <source>Select files</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>Ime</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>Zadnja sprememba</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Naslov</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Uporabniško ime</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Skupina</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Naslov</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Uporabniško ime</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Geslo</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Opombe</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Poteče</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Priponke</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Splošno</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Uporabniško ime</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Geslo</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Priponke</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Opombe</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Window</source>
- <translation>Okno</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Sekvenca</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search</source>
- <translation>Išči</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation>Koš</translation>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close message</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Izračun glavnega ključa ni uspel</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Napačno geslo ali pa je podatkovna baza poškodovana.</translation>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Izračun glavnega ključa ni uspel</translation>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Izračun glavnega ključa ni uspel</translation>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Izračun glavnega ključa ni uspel</translation>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Datoteka ni KeePass podatkovna baza.</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation>Uvozi KeePass1 podatkovno bazo</translation>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation>Odpiranje podatkovne baze ni uspelo.</translation>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation>Branje datoteke s ključi ni uspelo.</translation>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Datoteka ni KeePass podatkovna baza.</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation>Algoritem za enkripcijo ni podprt.</translation>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation>Različica KeePass podatkovne baze ni podprta.</translation>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>Koren</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Izračun glavnega ključa ni uspel</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Napačno geslo ali pa je podatkovna baza poškodovana.</translation>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>Prebrskaj</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>Datoteke s ključi</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Vse datoteke</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>Ustvari datoteko s ključi...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>Izberi datoteko s kljući</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;About</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Nastavitve podatkovne baze</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation>Kopiraj uporabniško ime v odložišče</translation>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation>Kopiraj geslo v odložišče</translation>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear history</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Settings</source>
- <translation>Nastavitve</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation>Preklopi okno</translation>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>Koren</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>Vnesi geslo:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Geslo</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Geslo:</translation>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>entropy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Geslo</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>Tipi znakov</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>Velike črke</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>Male črke</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>Številke</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>Posebni znaki</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation>Izključi podobne znake</translation>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accept</source>
- <translation>Sprejmi</translation>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Napredno</translation>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>0-9</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>Izbriši</translation>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Odstrani</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>Onemogoči</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>username</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>title</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>error reading from device</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>malformed string</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>Skupina</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Naslov</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Uporabniško ime</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Geslo</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Opombe</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation>pot do konfiguracijske datoteke po meri</translation>
- </message>
- <message>
- <source>key file of the database</source>
- <translation>datoteka s ključi podatkovne baze</translation>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation>Napaka pri testiranju kriptografskih funkcij.</translation>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation>Notranja zlib napaka pri stiskanju:</translation>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation>Napaka pri pisanju na napravo:</translation>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation>Napaka pri odpiranju naprave:</translation>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation>Napak pri branju iz naprave:</translation>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation>Notranja zlib napaka pri dekompresiranju:</translation>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation>Ta različica zlib ne podpira gzip formata.</translation>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation>Notranja zlib napaka:</translation>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>Išči</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation>Razlikuj med velikimi in malimi črkami</translation>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Odstrani</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Vse datoteke</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation>sekundah</translation>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation>Nedavne podatkovne baze</translation>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_sr.ts b/share/translations/keepassx_sr.ts
deleted file mode 100644
index 80787e01e..000000000
--- a/share/translations/keepassx_sr.ts
+++ /dev/null
@@ -1,5430 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="sr" version="2.1">
-<context>
- <name>AboutDialog</name>
- <message>
- <source>About KeePassXC</source>
- <translation>O KeePassXC</translation>
- </message>
- <message>
- <source>About</source>
- <translation>O aplikaciji</translation>
- </message>
- <message>
- <source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Пријавите грешке на: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
- </message>
- <message>
- <source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC се дистрибуира под условима ГНУ Опште Јавне Лиценце (GPL) верзије 2 (или уколико одаберете) верзије 3.</translation>
- </message>
- <message>
- <source>Contributors</source>
- <translation>Сарадници</translation>
- </message>
- <message>
- <source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Погледајте доприносе на GitHub&lt;/a&gt;</translation>
- </message>
- <message>
- <source>Debug Info</source>
- <translation>Информације за отклањање грешака</translation>
- </message>
- <message>
- <source>Include the following information whenever you report a bug:</source>
- <translation>Укључите следеће информације приликом пријављивања грешке:</translation>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Копирај</translation>
- </message>
- <message>
- <source>Revision: %1</source>
- <translation>Ревизија %1</translation>
- </message>
- <message>
- <source>Distribution: %1</source>
- <translation>Дистрибуција: %1</translation>
- </message>
- <message>
- <source>Libraries:</source>
- <translation>Библиотеке:</translation>
- </message>
- <message>
- <source>Operating system: %1
-CPU architecture: %2
-Kernel: %3 %4</source>
- <translation>Оперативни систем: %1
-Архитектура процесора: %2
-Језгро: %3 %4</translation>
- </message>
- <message>
- <source>Enabled extensions:</source>
- <translation>Укључена проширења:</translation>
- </message>
- <message>
- <source>Project Maintainers:</source>
- <translation>Вође пројекта:</translation>
- </message>
- <message>
- <source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Version %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Build Type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Аутоматско-куцање</translation>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Интеграција са прегледачем</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>SSH Агент</translation>
- </message>
- <message>
- <source>YubiKey</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TouchID</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>None</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (signed and unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only signed sharing)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare (only unsigned sharing)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AgentSettingsWidget</name>
- <message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Омогући SSH агента (захтева поновно покретање апликације)</translation>
- </message>
- <message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidget</name>
- <message>
- <source>Application Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Опште</translation>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation>Грешка приликом приступа конфигурационој датотеци %1</translation>
- </message>
- <message>
- <source>Icon only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text only</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text beside icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Text under icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Follow style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetGeneral</name>
- <message>
- <source>Basic Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Start only a single instance of KeePassXC</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember last key files and security dongles</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Load previous databases on startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize window at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Backup database file before saving</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save after every change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically save on exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically reload the database when modified externally</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry Management</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use group icon on entry creation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize when copying to clipboard</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Опште</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Minimize instead of app exit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide window to system tray when minimized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Language</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Аутоматско-куцање</translation>
- </message>
- <message>
- <source>Use entry title to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use entry URL to match windows for global Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Always ask before performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> ms</source>
- <comment>Milliseconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates at application startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include pre-releases when checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Movable toolbar</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Button style</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ApplicationSettingsWidgetSecurity</name>
- <message>
- <source>Timeouts</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Clear clipboard after</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> min</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID after inactivity of</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Convenience</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forget TouchID when session is locked or lid is closed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Lock databases after minimizing the window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re-lock previously locked database after performing Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide passwords in the entry preview panel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide entry notes by default</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Privacy</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use DuckDuckGo as fallback for downloading website icons</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoType</name>
- <message>
- <source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Ставка која одговара наведеном наслову прозора није пронађена:</translation>
- </message>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>Autoматско-Куцање - KeePassXC</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Аутоматско-куцање</translation>
- </message>
- <message>
- <source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>AutoTypeAssociationsModel</name>
- <message>
- <source>Window</source>
- <translation>Прозор</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Секвенца</translation>
- </message>
- <message>
- <source>Default sequence</source>
- <translation>Подразумевани редослед</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeMatchModel</name>
- <message>
- <source>Group</source>
- <translation>Група</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Наслов</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Корисничко име</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Редослед</translation>
- </message>
-</context>
-<context>
- <name>AutoTypeSelectDialog</name>
- <message>
- <source>Auto-Type - KeePassXC</source>
- <translation>Autoматско-Куцање - KeePassXC</translation>
- </message>
- <message>
- <source>Select entry to Auto-Type:</source>
- <translation>Одаберите ставку за Аутоматско-Куцање</translation>
- </message>
-</context>
-<context>
- <name>BrowserAccessControlDialog</name>
- <message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remember this decision</source>
- <translation>Запамти ову одлуку</translation>
- </message>
- <message>
- <source>Allow</source>
- <translation>Допусти</translation>
- </message>
- <message>
- <source>Deny</source>
- <translation>Одбаци</translation>
- </message>
- <message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 тражи приступ лозинкама за следеће ставке.
-Молим вас одаберите да ли желите да одобрите приступ.</translation>
- </message>
-</context>
-<context>
- <name>BrowserEntrySaveDialog</name>
- <message>
- <source>KeePassXC-Browser Save Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ok</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have multiple databases open.
-Please select the correct database for saving credentials.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserOptionDialog</name>
- <message>
- <source>Dialog</source>
- <translation>Дијалог</translation>
- </message>
- <message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable KeepassXC browser integration</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Опште</translation>
- </message>
- <message>
- <source>Enable integration for these browsers:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Google Chrome</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Firefox</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Chromium</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Vivaldi</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return only best-matching credentials</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Напредно</translation>
- </message>
- <message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Only the selected database has to be connected with a client.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Разгледај...</translation>
- </message>
- <message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select custom proxy location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We&apos;re sorry, but KeePassXC-Browser is not supported for Snap releases at the moment.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Tor Browser</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Executable Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All Files</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>BrowserService</name>
- <message>
- <source>KeePassXC: New key association request</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You have received an association request for the above key.
-
-If you would like to allow it access to your KeePassXC database,
-give it a unique name to identify and accept it.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save and allow access</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Update Entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy browser integration settings have been detected.
-Do you want to upgrade the settings to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CloneDialog</name>
- <message>
- <source>Clone Options</source>
- <translation>Клонирај Опције</translation>
- </message>
- <message>
- <source>Append &apos; - Clone&apos; to title</source>
- <translation>Додај наслову суфикс &apos; - дупликат&apos; </translation>
- </message>
- <message>
- <source>Replace username and password with references</source>
- <translation>Замените корисничко име и лозинку са референцама</translation>
- </message>
- <message>
- <source>Copy history</source>
- <translation>Копирај историју</translation>
- </message>
-</context>
-<context>
- <name>CsvImportWidget</name>
- <message>
- <source>Import CSV fields</source>
- <translation>Увези CSV поља</translation>
- </message>
- <message>
- <source>filename</source>
- <translation>датотека</translation>
- </message>
- <message>
- <source>size, rows, columns</source>
- <translation>величина, редови, колоне</translation>
- </message>
- <message>
- <source>Encoding</source>
- <translation>Кодирање</translation>
- </message>
- <message>
- <source>Codec</source>
- <translation>Кодек</translation>
- </message>
- <message>
- <source>Text is qualified by</source>
- <translation>Текст је означен са</translation>
- </message>
- <message>
- <source>Fields are separated by</source>
- <translation>Поља су одвојена са</translation>
- </message>
- <message>
- <source>Comments start with</source>
- <translation>Коментари почињу са</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>Први ред садржи имена колона</translation>
- </message>
- <message>
- <source>Number of headers line to discard</source>
- <translation>Прескочи колико првих линија</translation>
- </message>
- <message>
- <source>Consider &apos;\&apos; an escape character</source>
- <translation>Третирај &apos;\&apos; као командни знак</translation>
- </message>
- <message>
- <source>Preview</source>
- <translation>Приказ</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Распоред по колонама</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Није присутан у CSV датотеци</translation>
- </message>
- <message>
- <source>Imported from CSV file</source>
- <translation>Увезено из CSV датотеке</translation>
- </message>
- <message>
- <source>Original data: </source>
- <translation>Изворни подаци:</translation>
- </message>
- <message>
- <source>Error</source>
- <translation>Грешка</translation>
- </message>
- <message>
- <source>Empty fieldname %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>column %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error(s) detected in CSV file!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>CSV import: writer has errors:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>CsvParserModel</name>
- <message numerus="yes">
- <source>%n column(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>%1, %2, %3</source>
- <comment>file info: bytes, rows, columns</comment>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n byte(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n row(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>Database</name>
- <message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Корен</translation>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not save, database has no file name.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File cannot be written as it is opened in read-only mode.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenDialog</name>
- <message>
- <source>Unlock Database - KeePassXC</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseOpenWidget</name>
- <message>
- <source>Enter master key</source>
- <translation>Унесите главни кључ</translation>
- </message>
- <message>
- <source>Key File:</source>
- <translation>Кључ-Датотека:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Лозинка:</translation>
- </message>
- <message>
- <source>Browse</source>
- <translation>Разгледај</translation>
- </message>
- <message>
- <source>Refresh</source>
- <translation>Освежи</translation>
- </message>
- <message>
- <source>Challenge Response:</source>
- <translation>Изазов Одговор:</translation>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Don&apos;t show this warning again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Све датотеке</translation>
- </message>
- <message>
- <source>Key files</source>
- <translation>Датотеке са кључем</translation>
- </message>
- <message>
- <source>Select key file</source>
- <translation>Одаберите кључ-датотеку</translation>
- </message>
- <message>
- <source>TouchID for quick unlock</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can't open key file:
-%1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingWidgetMetaData</name>
- <message>
- <source>Passwords</source>
- <translation>Лозинке</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsDialog</name>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>General</source>
- <translation>Опште</translation>
- </message>
- <message>
- <source>Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Интеграција са прегледачем</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetBrowser</name>
- <message>
- <source>KeePassXC-Browser settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Stored keys</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Уклони</translation>
- </message>
- <message>
- <source>Delete the selected key?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected key?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable Browser Integration to access these settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect all browsers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to disconnect all browsers?
-This may prevent connection to the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Forget all site-specific settings on entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want forget all site-specific settings on every entry?
-Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Removing stored permissions…</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Abort</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move all legacy browser integration data to the latest standard?
-This is necessary to maintain compatibility with the browser plugin.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetEncryption</name>
- <message>
- <source>Encryption Algorithm:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256 Bit (default)</source>
- <translation>AES: 256 Bit (подразумевано)</translation>
- </message>
- <message>
- <source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 Bit</translation>
- </message>
- <message>
- <source>Key Derivation Function:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Transform rounds:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Memory Usage:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parallelism:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption Time:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>?? s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>100 ms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>5 s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database format:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>This is only important if you need to use your database with other programs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 4.0 (recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDBX 3.1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unchanged</source>
- <comment>Database decryption time is unchanged</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too high</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very high number of key transform rounds with Argon2.
-
-If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Understood, keep number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of rounds too low</source>
- <comment>Key transformation rounds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a very low number of key transform rounds with AES-KDF.
-
-If you keep this number, your database may be too easy to crack!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KDF unchanged</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source> MiB</source>
- <comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source> thread(s)</source>
- <comment>Threads for parallel execution (KDF settings)</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetGeneral</name>
- <message>
- <source>Database Meta Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database name:</source>
- <translation>Име базе података:</translation>
- </message>
- <message>
- <source>Database description:</source>
- <translation>Опис базе података:</translation>
- </message>
- <message>
- <source>Default username:</source>
- <translation>Подразумевано корисничко име:</translation>
- </message>
- <message>
- <source>History Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Max. history items:</source>
- <translation>Максималан број ставки из историје:</translation>
- </message>
- <message>
- <source>Max. history size:</source>
- <translation>Максималан број ставки у историји:</translation>
- </message>
- <message>
- <source> MiB</source>
- <translation> MiB</translation>
- </message>
- <message>
- <source>Use recycle bin</source>
- <translation>Користи корпу за отпатке</translation>
- </message>
- <message>
- <source>Additional Database Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetKeeShare</name>
- <message>
- <source>Sharing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Breadcrumb</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> &gt; </source>
- <comment>Breadcrumb separator</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No password set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetMetaDataSimple</name>
- <message>
- <source>Database Name:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseTabWidget</name>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 База података</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Све датотеке</translation>
- </message>
- <message>
- <source>Open database</source>
- <translation>Отвори базу података</translation>
- </message>
- <message>
- <source>CSV file</source>
- <translation>CSV датотека</translation>
- </message>
- <message>
- <source>Merge database</source>
- <translation>Удружи базу података</translation>
- </message>
- <message>
- <source>Open KeePass 1 database</source>
- <translation>Отвори KeePass 1  базу података</translation>
- </message>
- <message>
- <source>KeePass 1 database</source>
- <translation>KeePass 1 база података</translation>
- </message>
- <message>
- <source>Export database to CSV file</source>
- <translation>Извези базу података у CSV датотеку</translation>
- </message>
- <message>
- <source>Writing the CSV file failed.</source>
- <translation>Уписивање у CSV датотеку није успело.</translation>
- </message>
- <message>
- <source>Database creation error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The created database has no key or KDF, refusing to save it.
-This is definitely a bug, please report it to the developers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file does not exist or is not accessible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New Database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [New Database]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Locked]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 [Read-only]</source>
- <comment>Database tab name modifier</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseWidget</name>
- <message>
- <source>Searching...</source>
- <translation>Претрага је у току...</translation>
- </message>
- <message>
- <source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Да ли сте сигурни да желите да обришете ставку &quot;%1&quot;?</translation>
- </message>
- <message>
- <source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Да ли сте сигурни да желите да преместите ставку &quot;%1&quot; у корпу за отпатке?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Execute command?</source>
- <translation>Изврши команду?</translation>
- </message>
- <message>
- <source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Да ли сте сигурни да желите да извршите следећу команду? &lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
- </message>
- <message>
- <source>Remember my choice</source>
- <translation>Запамти мој избор</translation>
- </message>
- <message>
- <source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Да ли сте сигурни да желите да обришете групу &quot;%1&quot;?</translation>
- </message>
- <message>
- <source>No current database.</source>
- <translation>Нема тренутне базе података.</translation>
- </message>
- <message>
- <source>No source database, nothing to do.</source>
- <translation>Нема изворне базе података, нема шта да се уради.</translation>
- </message>
- <message>
- <source>Search Results (%1)</source>
- <translation>Резултати претраге (%1)</translation>
- </message>
- <message>
- <source>No Results</source>
- <translation>Нема резултата</translation>
- </message>
- <message>
- <source>File has changed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database file has changed. Do you want to load the changes?</source>
- <translation>Датотека базе података је измењена. Да ли желите да учитате измене?</translation>
- </message>
- <message>
- <source>Merge Request</source>
- <translation>Споји захтев</translation>
- </message>
- <message>
- <source>The database file has changed and you have unsaved changes.
-Do you want to merge your changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty recycle bin?</source>
- <translation>Испразни корпу за отпатке</translation>
- </message>
- <message>
- <source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Да ли сте сигурни да желите да желите да трајно обришете све ставке из корпе за отпатке?</translation>
- </message>
- <message numerus="yes">
- <source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>File opened in read only mode.</source>
- <translation>Датотека је отворена у моду само за читање.</translation>
- </message>
- <message>
- <source>Lock Database?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot;%1&quot; was modified.
-Save changes?</source>
- <translation>&quot;%1&quot; је измењен.
-Сачувај измене?</translation>
- </message>
- <message>
- <source>Database was modified.
-Save changes?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Save changes?</source>
- <translation>Сними измене?</translation>
- </message>
- <message>
- <source>Could not open the new database file while attempting to autoreload.
-Error: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable safe saves?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
-Disable safe saves and try again?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed.
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords</source>
- <translation>Лозинке</translation>
- </message>
- <message>
- <source>Save database as</source>
- <translation>Сними базу података као</translation>
- </message>
- <message>
- <source>KeePass 2 Database</source>
- <translation>KeePass 2 База података</translation>
- </message>
- <message>
- <source>Replace references to entry?</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Delete group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Move group to recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully merged the database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database was not modified by merge operation.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidget</name>
- <message>
- <source>Entry</source>
- <translation>Унос</translation>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Напредно</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Икона</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Аутоматско-куцање</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Особине</translation>
- </message>
- <message>
- <source>History</source>
- <translation>Историја</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>SSH Агент</translation>
- </message>
- <message>
- <source>n/a</source>
- <translation>/</translation>
- </message>
- <message>
- <source>(encrypted)</source>
- <translation>(енкриптовано)</translation>
- </message>
- <message>
- <source>Select private key</source>
- <translation>Одаберите приватни кључ</translation>
- </message>
- <message>
- <source>File too large to be a private key</source>
- <translation>Датотека је превелика да би била приватни кључ</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Неуспешно отварање приватног кључа</translation>
- </message>
- <message>
- <source>Entry history</source>
- <translation>Историја уноса</translation>
- </message>
- <message>
- <source>Add entry</source>
- <translation>Додај унос</translation>
- </message>
- <message>
- <source>Edit entry</source>
- <translation>Измени унос</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>Унете су две различите лозинке.</translation>
- </message>
- <message>
- <source>New attribute</source>
- <translation>Нови атрибут</translation>
- </message>
- <message>
- <source>Are you sure you want to remove this attribute?</source>
- <translation>Да ли сте сигурни да желите да уклоните атрибут?</translation>
- </message>
- <message>
- <source>Tomorrow</source>
- <translation>Сутра</translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry updated successfully.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>New attribute %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Confirm Removal</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAdvanced</name>
- <message>
- <source>Additional attributes</source>
- <translation>Додатни атрибути</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>Додај</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Уклони</translation>
- </message>
- <message>
- <source>Edit Name</source>
- <translation>Измени име</translation>
- </message>
- <message>
- <source>Protect</source>
- <translation>Заштити</translation>
- </message>
- <message>
- <source>Reveal</source>
- <translation>Откриј</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Прилози</translation>
- </message>
- <message>
- <source>Foreground Color:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Background Color:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
- <message>
- <source>Enable Auto-Type for this entry</source>
- <translation>Омогући Аутоматско-Куцање за овај унос</translation>
- </message>
- <message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Наследи подразумевану секвенцу за Аутоматско-Куцање од &amp;group</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Користи посебну секвенцу за Аутоматско-Куцање:</translation>
- </message>
- <message>
- <source>Window Associations</source>
- <translation>Везе са прозорима</translation>
- </message>
- <message>
- <source>+</source>
- <translation>+</translation>
- </message>
- <message>
- <source>-</source>
- <translation>-</translation>
- </message>
- <message>
- <source>Window title:</source>
- <translation>Наслов прозора:</translation>
- </message>
- <message>
- <source>Use a specific sequence for this association:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetHistory</name>
- <message>
- <source>Show</source>
- <translation>Прикажи</translation>
- </message>
- <message>
- <source>Restore</source>
- <translation>Обнови</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation>Обриши</translation>
- </message>
- <message>
- <source>Delete all</source>
- <translation>Обриши све</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetMain</name>
- <message>
- <source>URL:</source>
- <translation>URL:</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Лозинка:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>Понови:</translation>
- </message>
- <message>
- <source>Title:</source>
- <translation>Наслов:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Белешке</translation>
- </message>
- <message>
- <source>Presets</source>
- <translation>Предефинисани</translation>
- </message>
- <message>
- <source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Штиклирај поље жа потврду да бисте приказали секцију за белешке.</translation>
- </message>
- <message>
- <source>Username:</source>
- <translation>Корисничко име:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Истиче</translation>
- </message>
-</context>
-<context>
- <name>EditEntryWidgetSSHAgent</name>
- <message>
- <source>Form</source>
- <translation>Форма</translation>
- </message>
- <message>
- <source>Remove key from agent after</source>
- <translation>Уклони кључ са агента након акције</translation>
- </message>
- <message>
- <source> seconds</source>
- <translation>секунди</translation>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation>Отисак прста</translation>
- </message>
- <message>
- <source>Remove key from agent when database is closed/locked</source>
- <translation>Уклони кључ са агента када је база података затворена/закључана</translation>
- </message>
- <message>
- <source>Public key</source>
- <translation>Јавни кључ</translation>
- </message>
- <message>
- <source>Add key to agent when database is opened/unlocked</source>
- <translation>Додај кључ агенту када је база података отворена/откључана</translation>
- </message>
- <message>
- <source>Comment</source>
- <translation>Коментар</translation>
- </message>
- <message>
- <source>Decrypt</source>
- <translation>Декриптуј</translation>
- </message>
- <message>
- <source>n/a</source>
- <translation>/</translation>
- </message>
- <message>
- <source>Copy to clipboard</source>
- <translation>Копирај</translation>
- </message>
- <message>
- <source>Private key</source>
- <translation>Приватни кључ</translation>
- </message>
- <message>
- <source>External file</source>
- <translation>Спољашња датотека</translation>
- </message>
- <message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Разгледај...</translation>
- </message>
- <message>
- <source>Attachment</source>
- <translation>Прилог</translation>
- </message>
- <message>
- <source>Add to agent</source>
- <translation>Додај агенту</translation>
- </message>
- <message>
- <source>Remove from agent</source>
- <translation>Уклони са агента</translation>
- </message>
- <message>
- <source>Require user confirmation when this key is used</source>
- <translation>Захтевај потврду приликом коришћења овог кључа</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidget</name>
- <message>
- <source>Group</source>
- <translation>Група</translation>
- </message>
- <message>
- <source>Icon</source>
- <translation>Икона</translation>
- </message>
- <message>
- <source>Properties</source>
- <translation>Особине</translation>
- </message>
- <message>
- <source>Add group</source>
- <translation>Додај групу</translation>
- </message>
- <message>
- <source>Edit group</source>
- <translation>Измени групу</translation>
- </message>
- <message>
- <source>Enable</source>
- <translation>Омогући</translation>
- </message>
- <message>
- <source>Disable</source>
- <translation>Онемогући</translation>
- </message>
- <message>
- <source>Inherit from parent group (%1)</source>
- <translation>Наследи од родитељске групе (%1)</translation>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetKeeShare</name>
- <message>
- <source>Form</source>
- <translation>Форма</translation>
- </message>
- <message>
- <source>Type:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password:</source>
- <translation>Лозинка:</translation>
- </message>
- <message>
- <source>Inactive</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database sharing is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database export is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database import is disabled</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare unsigned container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare signed container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import source</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select export target</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select import/export file</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EditGroupWidgetMain</name>
- <message>
- <source>Name</source>
- <translation>Име</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Белешке</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Истиче</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Претрага</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Аутоматско-куцање</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Користи подразумевану секвенцу за Аутоматско-Куцање од родитељске групе</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Унеси подразумевану секвенцу за Аутоматско-Куцање</translation>
- </message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
- <message>
- <source>&amp;Use default icon</source>
- <translation>Користи подражумевану иконицу</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Користи посебну иконицу</translation>
- </message>
- <message>
- <source>Add custom icon</source>
- <translation>Додај посебну икону</translation>
- </message>
- <message>
- <source>Delete custom icon</source>
- <translation>Обриши посебну икону</translation>
- </message>
- <message>
- <source>Download favicon</source>
- <translation>Преузми икону са сајта</translation>
- </message>
- <message>
- <source>Unable to fetch favicon.</source>
- <translation>Неуспело добављање иконе са сајта.</translation>
- </message>
- <message>
- <source>Images</source>
- <translation>Слике</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Све датотеке</translation>
- </message>
- <message>
- <source>Custom icon already exists</source>
- <translation>Посебна иконица већ постоји</translation>
- </message>
- <message>
- <source>Confirm Delete</source>
- <translation>Потврди брисање</translation>
- </message>
- <message>
- <source>Custom icon successfully downloaded</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hint: You can enable DuckDuckGo as a fallback under Tools&gt;Settings&gt;Security</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select Image(s)</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>No icons were loaded</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message numerus="yes">
- <source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EditWidgetProperties</name>
- <message>
- <source>Created:</source>
- <translation>Креирано:</translation>
- </message>
- <message>
- <source>Modified:</source>
- <translation>Измењено:</translation>
- </message>
- <message>
- <source>Accessed:</source>
- <translation>Приступљено:</translation>
- </message>
- <message>
- <source>Uuid:</source>
- <translation>Uuid:</translation>
- </message>
- <message>
- <source>Plugin Data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Уклони</translation>
- </message>
- <message>
- <source>Delete plugin data?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you really want to delete the selected plugin data?
-This may cause the affected plugins to malfunction.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Value</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Entry</name>
- <message>
- <source>%1 - Clone</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsModel</name>
- <message>
- <source>Name</source>
- <translation>Име</translation>
- </message>
- <message>
- <source>Size</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryAttachmentsWidget</name>
- <message>
- <source>Form</source>
- <translation>Форма</translation>
- </message>
- <message>
- <source>Add</source>
- <translation>Додај</translation>
- </message>
- <message>
- <source>Remove</source>
- <translation>Уклони</translation>
- </message>
- <message>
- <source>Open</source>
- <translation>Отвори</translation>
- </message>
- <message>
- <source>Save</source>
- <translation>Сними</translation>
- </message>
- <message>
- <source>Select files</source>
- <translation>Одаберите датотеке</translation>
- </message>
- <message numerus="yes">
- <source>Are you sure you want to remove %n attachment(s)?</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Save attachments</source>
- <translation>Сними прилоге</translation>
- </message>
- <message>
- <source>Unable to create directory:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm overwrite</source>
- <translation>Потврди пребрисање</translation>
- </message>
- <message>
- <source>Unable to save attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachment:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open attachments:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Confirm remove</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Unable to open file(s):
-%1</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>EntryAttributesModel</name>
- <message>
- <source>Name</source>
- <translation>Име</translation>
- </message>
-</context>
-<context>
- <name>EntryHistoryModel</name>
- <message>
- <source>Last modified</source>
- <translation>Последњи пут измењено</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Наслов</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Корисничко име</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
-</context>
-<context>
- <name>EntryModel</name>
- <message>
- <source>Ref: </source>
- <comment>Reference abbreviation</comment>
- <translation>Референца:</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Група</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Наслов</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Корисничко име</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Never</source>
- <translation>Никада</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Лозинка</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Белешке</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Истиче</translation>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Accessed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Прилози</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryPreviewWidget</name>
- <message>
- <source>Generate TOTP Token</source>
- <translation>Генериши TOTP токен</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>Затвори</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Опште</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Корисничко име</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Лозинка</translation>
- </message>
- <message>
- <source>Expiration</source>
- <translation>Датум истека</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Attributes</source>
- <translation>Атрибути</translation>
- </message>
- <message>
- <source>Attachments</source>
- <translation>Прилози</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Белешке</translation>
- </message>
- <message>
- <source>Autotype</source>
- <translation>Аутоматско куцање</translation>
- </message>
- <message>
- <source>Window</source>
- <translation>Прозор</translation>
- </message>
- <message>
- <source>Sequence</source>
- <translation>Редослед</translation>
- </message>
- <message>
- <source>Searching</source>
- <translation>Претрага је у току...</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Претрага</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation>Очисти</translation>
- </message>
- <message>
- <source>Never</source>
- <translation>Никада</translation>
- </message>
- <message>
- <source>[PROTECTED]</source>
- <translation>[ЗАШТИЋЕНО]</translation>
- </message>
- <message>
- <source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
- <comment>attributes line</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enabled</source>
- <translation>Омогућено</translation>
- </message>
- <message>
- <source>Disabled</source>
- <translation>Онемогућено</translation>
- </message>
- <message>
- <source>Share</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>EntryView</name>
- <message>
- <source>Customize View</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Usernames</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hide Passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fit to contents</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reset to defaults</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Attachments (icon)</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Group</name>
- <message>
- <source>Recycle Bin</source>
- <translation>Корпа за отпатке</translation>
- </message>
- <message>
- <source>[empty]</source>
- <comment>group has no children</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>GroupModel</name>
- <message>
- <source>%1</source>
- <comment>Template for name without annotation</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KMessageWidget</name>
- <message>
- <source>&amp;Close</source>
- <translation>Затвори</translation>
- </message>
- <message>
- <source>Close message</source>
- <translation>Затвори поруку</translation>
- </message>
-</context>
-<context>
- <name>Kdbx3Reader</name>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Није могуће израчунати главни кључ</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Издавање изазов-одговора није успело.</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Неисправан кључ или неисправна база података.</translation>
- </message>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header doesn&apos;t match hash</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx3Writer</name>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Издавање изазов-одговора није успело.</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Није могуће израчунати главни кључ</translation>
- </message>
-</context>
-<context>
- <name>Kdbx4Reader</name>
- <message>
- <source>missing database headers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Није могуће израчунати главни кључ</translation>
- </message>
- <message>
- <source>Invalid header checksum size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Header SHA256 mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid header data length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to open buffer for KDF parameters in header</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy header fields found in KDBX4 file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header field length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner header binary size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass variant map version.</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry name data</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry value data</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Bool entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt32 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map Int64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map UInt64 entry value length</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map entry type</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid variant map field type size</source>
- <extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Kdbx4Writer</name>
- <message>
- <source>Invalid symmetric cipher algorithm.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid symmetric cipher IV size.</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Није могуће израчунати главни кључ</translation>
- </message>
- <message>
- <source>Failed to serialize KDF parameters variant map</source>
- <extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxReader</name>
- <message>
- <source>Unsupported cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid compression flags length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported compression algorithm</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid master seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform rounds size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid start bytes size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid random stream id size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid inner random stream cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Није KeePass база података</translation>
- </message>
- <message>
- <source>The selected file is an old KeePass 1 database (.kdb).
-
-You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
-This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsupported KeePass 2 database version.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to parse UUID: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to read database file.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KdbxXmlReader</name>
- <message>
- <source>XML parsing failure: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No root group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing custom data key or value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multiple group elements</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null group uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No group uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null DeleteObject uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing DeletedObject uuid or time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Null entry uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element in history entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No entry uuid found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>History element with different uuid</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate custom attribute found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry string key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid bool value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid date time value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid color rgb part</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid uuid value</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to decompress binary</source>
- <extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>XML error:
-%1
-Line %2, column %3</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeePass1OpenWidget</name>
- <message>
- <source>Import KeePass1 database</source>
- <translation>Увези KeePass1 базу података</translation>
- </message>
- <message>
- <source>Unable to open the database.</source>
- <translation>Није могуће отворити базу података.</translation>
- </message>
-</context>
-<context>
- <name>KeePass1Reader</name>
- <message>
- <source>Unable to read keyfile.</source>
- <translation>Није могуће прочитати Кључ-Датотеку:</translation>
- </message>
- <message>
- <source>Not a KeePass database.</source>
- <translation>Није KeePass база података</translation>
- </message>
- <message>
- <source>Unsupported encryption algorithm.</source>
- <translation>Енкрипциони алгоритам није подржан.</translation>
- </message>
- <message>
- <source>Unsupported KeePass database version.</source>
- <translation>Верзија KeePass базе података није подржана.</translation>
- </message>
- <message>
- <source>Unable to read encryption IV</source>
- <comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid content hash size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid transform seed size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid number of transform rounds</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to construct group tree</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <translation>Корен</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>Није могуће израчунати главни кључ</translation>
- </message>
- <message>
- <source>Wrong key or database file is corrupt.</source>
- <translation>Неисправан кључ или неисправна база података.</translation>
- </message>
- <message>
- <source>Key transformation failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect group level field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid group field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing group id or level</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Missing entry field type number</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid entry field type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>unable to seek to content position</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeeShare</name>
- <message>
- <source>Disabled share</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronize with</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyComponentWidget</name>
- <message>
- <source>Key Component</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key Component set, click to change or remove</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add %1</source>
- <comment>Add a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change %1</source>
- <comment>Change a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove %1</source>
- <comment>Remove a key component</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 set, click to change or remove</source>
- <comment>Change or remove a key component</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>KeyFileEditWidget</name>
- <message>
- <source>Browse</source>
- <translation>Преглед</translation>
- </message>
- <message>
- <source>Generate</source>
- <translation>Генериши</translation>
- </message>
- <message>
- <source>Key File</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Legacy key file format</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error loading the key file '%1'
-Message: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key files</source>
- <translation>Кључ-Датотеке</translation>
- </message>
- <message>
- <source>All files</source>
- <translation>Све датотеке</translation>
- </message>
- <message>
- <source>Create Key File...</source>
- <translation>Креирај Кључ-Датотеку...</translation>
- </message>
- <message>
- <source>Error creating key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to create key file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Select a key file</source>
- <translation>Одаберите кључ-датотеку</translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <source>&amp;Database</source>
- <translation>База података</translation>
- </message>
- <message>
- <source>&amp;Recent databases</source>
- <translation>Скорашње базе података</translation>
- </message>
- <message>
- <source>&amp;Help</source>
- <translation>Помоћ</translation>
- </message>
- <message>
- <source>E&amp;ntries</source>
- <translation>Уноси</translation>
- </message>
- <message>
- <source>&amp;Groups</source>
- <translation>Групе</translation>
- </message>
- <message>
- <source>&amp;Tools</source>
- <translation>Алатке</translation>
- </message>
- <message>
- <source>&amp;Quit</source>
- <translation>Напусти</translation>
- </message>
- <message>
- <source>&amp;About</source>
- <translation>О апликацији</translation>
- </message>
- <message>
- <source>&amp;Open database...</source>
- <translation>&amp;Отвори базу података...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Сними базу података</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Затвори базу података</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Обриши унос</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Измени групу</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Обриши групу</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Сачувај базу података као...</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Подешавања базе података</translation>
- </message>
- <message>
- <source>&amp;Clone entry</source>
- <translation>Направи дупликат уноса</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Копирај корисничко име</translation>
- </message>
- <message>
- <source>Copy username to clipboard</source>
- <translation>Копирај корисничко име</translation>
- </message>
- <message>
- <source>Copy password to clipboard</source>
- <translation>Копирај лозинку</translation>
- </message>
- <message>
- <source>&amp;Settings</source>
- <translation>Подешавања</translation>
- </message>
- <message>
- <source>Password Generator</source>
- <translation>Генератор Лозинки</translation>
- </message>
- <message>
- <source>&amp;Lock databases</source>
- <translation>Закључај базу података</translation>
- </message>
- <message>
- <source>&amp;Title</source>
- <translation>Наслов</translation>
- </message>
- <message>
- <source>Copy title to clipboard</source>
- <translation>Копирај назив</translation>
- </message>
- <message>
- <source>&amp;URL</source>
- <translation>&amp;URL</translation>
- </message>
- <message>
- <source>Copy URL to clipboard</source>
- <translation>Копирај URL</translation>
- </message>
- <message>
- <source>&amp;Notes</source>
- <translation>Белешке</translation>
- </message>
- <message>
- <source>Copy notes to clipboard</source>
- <translation>Копирај белешке</translation>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation>Извези у CSV датотеку</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Подеси TOTP...</translation>
- </message>
- <message>
- <source>Copy &amp;TOTP</source>
- <translation>Копирај &amp;TOTP</translation>
- </message>
- <message>
- <source>E&amp;mpty recycle bin</source>
- <translation>Испразни корпу за отпатке</translation>
- </message>
- <message>
- <source>Clear history</source>
- <translation>Очисти историју</translation>
- </message>
- <message>
- <source>Access error for config file %1</source>
- <translation>Грешка приликом приступа конфигурационој датотеци %1</translation>
- </message>
- <message>
- <source>Settings</source>
- <translation>Подешавања</translation>
- </message>
- <message>
- <source>Toggle window</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quit KeePassXC</source>
- <translation>Напусти KeePassXC</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using an unstable build of KeePassXC!
-There is a high risk of corruption, maintain a backup of your databases.
-This version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Donate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
-We recommend you use the AppImage available on our downloads page.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy att&amp;ribute...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Merge from database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge from another KDBX database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>View or edit entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform &amp;Auto-Type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open &amp;URL</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a KeePass 1 database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>CSV file...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import a CSV file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for Updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Share entry</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>Merger</name>
- <message>
- <source>Creating missing %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Relocating %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>older entry merged from database &quot;%1&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding backup for older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from newer source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Synchronizing from older source %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting child %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Deleting orphan %1 [%2]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Changed deleted objects</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Adding missing icon %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizard</name>
- <message>
- <source>Create a new KeePassXC database...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Root</source>
- <comment>Root group</comment>
- <translation>Корен</translation>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPage</name>
- <message>
- <source>WizardPage</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>En&amp;cryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple Settings</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
- <message>
- <source>Encryption Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMasterKey</name>
- <message>
- <source>Database Master Key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A master key known only to you protects your database.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>NewDatabaseWizardPageMetaData</name>
- <message>
- <source>General Database Information</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please fill in the display name and an optional description for your new database:</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>OpenSSHKey</name>
- <message>
- <source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Неисправна датотека са кључем, очекује се OpenSSH кључ</translation>
- </message>
- <message>
- <source>PEM boundary mismatch</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Base64 decoding failed</source>
- <translation>Декодирање Base64 није успело</translation>
- </message>
- <message>
- <source>Key file way too small.</source>
- <translation>Кључ-датотека је превише мала.</translation>
- </message>
- <message>
- <source>Key file magic header id invalid</source>
- <translation>Идентификатор магичног заглавља Кључ-датотеке није валидан </translation>
- </message>
- <message>
- <source>Found zero keys</source>
- <translation>Није пронађен ниједан кључ</translation>
- </message>
- <message>
- <source>Failed to read public key.</source>
- <translation>Није могуће прочитати јавни кључ.</translation>
- </message>
- <message>
- <source>Corrupted key file, reading private key failed</source>
- <translation>Кључ-датотека је корумпирана, није успело ишчитавање приватног кључа</translation>
- </message>
- <message>
- <source>No private key payload to decrypt</source>
- <translation>Нема приватног кључа за декриптовање</translation>
- </message>
- <message>
- <source>Trying to run KDF without cipher</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passphrase is required to decrypt this key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key derivation failed, key file corrupted?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Decryption failed, wrong passphrase?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading public key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected EOF while reading private key</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Can&apos;t write public key as it is empty</source>
- <translation>Није могуће записати јавни кључ јер је празан</translation>
- </message>
- <message>
- <source>Unexpected EOF when writing public key</source>
- <translation>Неочекиван крај датотеке приликом уписивања јавног кључа</translation>
- </message>
- <message>
- <source>Can&apos;t write private key as it is empty</source>
- <translation>Није могуће записати приватни кључ јер је празан</translation>
- </message>
- <message>
- <source>Unexpected EOF when writing private key</source>
- <translation>Неочекиван крај датотеке приликом уписивања приватног кључа</translation>
- </message>
- <message>
- <source>Unsupported key type: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown cipher: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cipher IV is too short for MD5 kdf</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown KDF: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown key type: %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordEditWidget</name>
- <message>
- <source>Enter password:</source>
- <translation>Унесите лозинку:</translation>
- </message>
- <message>
- <source>Confirm password:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password</source>
- <translation>Лозинка</translation>
- </message>
- <message>
- <source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password cannot be empty.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Passwords do not match.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate master password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>PasswordGeneratorWidget</name>
- <message>
- <source>%p%</source>
- <translation>%p%</translation>
- </message>
- <message>
- <source>Password:</source>
- <translation>Лозинка:</translation>
- </message>
- <message>
- <source>strength</source>
- <comment>Password strength</comment>
- <translation>јачина</translation>
- </message>
- <message>
- <source>entropy</source>
- <translation>ентропија</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Лозинка</translation>
- </message>
- <message>
- <source>Character Types</source>
- <translation>Типови карактера</translation>
- </message>
- <message>
- <source>Upper Case Letters</source>
- <translation>Велика слова</translation>
- </message>
- <message>
- <source>Lower Case Letters</source>
- <translation>Мала слова</translation>
- </message>
- <message>
- <source>Numbers</source>
- <translation>Бројеви</translation>
- </message>
- <message>
- <source>Special Characters</source>
- <translation>Посебни карактери</translation>
- </message>
- <message>
- <source>Extended ASCII</source>
- <translation>Проширени ASCII</translation>
- </message>
- <message>
- <source>Exclude look-alike characters</source>
- <translation>Изостави сличне карактере</translation>
- </message>
- <message>
- <source>Pick characters from every group</source>
- <translation>Обезбеди да лозинка садржи карактере из сваке групе</translation>
- </message>
- <message>
- <source>&amp;Length:</source>
- <translation>Дужина:</translation>
- </message>
- <message>
- <source>Passphrase</source>
- <translation>Фразална Лозинка</translation>
- </message>
- <message>
- <source>Wordlist:</source>
- <translation>Листа речи:</translation>
- </message>
- <message>
- <source>Word Separator:</source>
- <translation>Разделник Фраза:</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>Кпирај</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Прихвати</translation>
- </message>
- <message>
- <source>Close</source>
- <translation>Затвори</translation>
- </message>
- <message>
- <source>Entropy: %1 bit</source>
- <translation>Ентропија: %1 бит</translation>
- </message>
- <message>
- <source>Password Quality: %1</source>
- <translation>Квалитет Лозинке: %1</translation>
- </message>
- <message>
- <source>Poor</source>
- <comment>Password quality</comment>
- <translation>Слаб</translation>
- </message>
- <message>
- <source>Weak</source>
- <comment>Password quality</comment>
- <translation>Слаб</translation>
- </message>
- <message>
- <source>Good</source>
- <comment>Password quality</comment>
- <translation>Добар</translation>
- </message>
- <message>
- <source>Excellent</source>
- <comment>Password quality</comment>
- <translation>Одличан</translation>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to advanced mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Advanced</source>
- <translation>Напредно</translation>
- </message>
- <message>
- <source>Upper Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A-Z</source>
- <translation>A-Z</translation>
- </message>
- <message>
- <source>Lower Case Letters A to F</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>a-z</source>
- <translation>a-z</translation>
- </message>
- <message>
- <source>0-9</source>
- <translation>0-9</translation>
- </message>
- <message>
- <source>Braces</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>{[(</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Punctuation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>.,:;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Quotes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&quot; &apos;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Math</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;*+!?=</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Dashes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>\_|-/</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Logograms</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Switch to simple mode</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Simple</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Character set to exclude from generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do not include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hex</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Regenerate</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QApplication</name>
- <message>
- <source>KeeShare</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QFileDialog</name>
- <message>
- <source>Select</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QMessageBox</name>
- <message>
- <source>Overwrite</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Delete</source>
- <translation>Обриши</translation>
- </message>
- <message>
- <source>Move</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Уклони</translation>
- </message>
- <message>
- <source>Skip</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disable</source>
- <translation>Онемогући</translation>
- </message>
- <message>
- <source>Merge</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>Database not opened</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database hash not available</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Client public key not received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot decrypt message</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Action cancelled or denied</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC association failed, try again</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Encryption key is not recognized</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Incorrect action</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Empty message received</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No URL provided</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No logins found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Add a new entry to a database.</source>
- <translation>Додај нови унос у базу података.</translation>
- </message>
- <message>
- <source>Path of the database.</source>
- <translation>Путања до базе података.</translation>
- </message>
- <message>
- <source>Key file of the database.</source>
- <translation>Кључ-Датотека базе података.</translation>
- </message>
- <message>
- <source>path</source>
- <translation>путања</translation>
- </message>
- <message>
- <source>Username for the entry.</source>
- <translation>Корисничко име за овај унос.</translation>
- </message>
- <message>
- <source>username</source>
- <translation>корисничко име</translation>
- </message>
- <message>
- <source>URL for the entry.</source>
- <translation>URL за овај унос.</translation>
- </message>
- <message>
- <source>URL</source>
- <translation>URL</translation>
- </message>
- <message>
- <source>Prompt for the entry&apos;s password.</source>
- <translation>Питај за лозинку уноса.</translation>
- </message>
- <message>
- <source>Generate a password for the entry.</source>
- <translation>Генериши лозинку за овај унос.</translation>
- </message>
- <message>
- <source>Length for the generated password.</source>
- <translation>Дужина генерисане лозинке.</translation>
- </message>
- <message>
- <source>length</source>
- <translation>дужина</translation>
- </message>
- <message>
- <source>Path of the entry to add.</source>
- <translation>Путања уноса који треба да се дода.</translation>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Копирај лозинку</translation>
- </message>
- <message>
- <source>Path of the entry to clip.</source>
- <comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Edit an entry.</source>
- <translation>Измени унос.</translation>
- </message>
- <message>
- <source>Title for the entry.</source>
- <translation>Наслов уноса.</translation>
- </message>
- <message>
- <source>title</source>
- <translation>наслов</translation>
- </message>
- <message>
- <source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Perform advanced analysis on the password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Extract and print the content of a database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to extract.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to unlock %1: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>WARNING: You are using a legacy key file format which may become
-unsupported in the future.
-
-Please consider generating a new key file.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>
-
-Available commands:
-</source>
- <translation>
-
-Доступне команде:
-</translation>
- </message>
- <message>
- <source>Name of the command to execute.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>List database entries.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Find entries quickly.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search term.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Merge two databases.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge into.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>attribute</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name of the entry to show.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>NULL device</source>
- <translation>NULL уређај</translation>
- </message>
- <message>
- <source>error reading from device</source>
- <translation>грешка приликом читања са уређаја</translation>
- </message>
- <message>
- <source>malformed string</source>
- <translation>неисправна ниска</translation>
- </message>
- <message>
- <source>missing closing quote</source>
- <translation>недостаје завршни наводник</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Група</translation>
- </message>
- <message>
- <source>Title</source>
- <translation>Наслов</translation>
- </message>
- <message>
- <source>Username</source>
- <translation>Корисничко име</translation>
- </message>
- <message>
- <source>Password</source>
- <translation>Лозинка</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Белешке</translation>
- </message>
- <message>
- <source>Last Modified</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Created</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser Integration</source>
- <translation>Интеграција са прегледачем</translation>
- </message>
- <message>
- <source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Press</source>
- <translation>Притисни</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Пасивно</translation>
- </message>
- <message>
- <source>SSH Agent</source>
- <translation>SSH Агент</translation>
- </message>
- <message>
- <source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Wordlist for the diceware generator.
-[Default: EFF English]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate a new random password.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter password for new entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry %1 not found.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation type="unfinished"/>
- </message>
- <message numerus="yes">
- <source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Clipboard cleared!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>count</source>
- <comment>CLI parameter</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid value for password length: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not changing any field for entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Enter new password for entry: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Writing the database failed: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Log10 %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Multi-word extra bits %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Bruteforce(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dictionary(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Dict+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User Words(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: User+Leet(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Repeated(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Sequence(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Spatial(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Date(Rep)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Type: Unknown%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 does not exist.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to open file %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while reading the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error while parsing the database:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Length of the generated password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use lowercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use uppercase characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use numbers.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use special characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use extended ASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude character set</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>chars</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exclude similar looking characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Include characters from every selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Cannot find group %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading merge file:
-%1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>file empty</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Argon2 (KDBX 4 – recommended)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 4)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>AES-KDF (KDBX 3.1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Settings</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid Key</source>
- <comment>TOTP</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Message encryption failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No groups found</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create a new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File %1 already exists.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading the key file failed</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successfully created new database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Insert password to encrypt database (Press enter to leave blank): </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove an entry from the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - cross-platform password manager</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>path to a custom config file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key file of the database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>read password of the database from stdin</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Parent window handle</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Another instance of KeePassXC is already running.</source>
- <translation>Друга инстанца KeePassXC апликације је већ активна.</translation>
- </message>
- <message>
- <source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC - Error</source>
- <translation>KeePassXC - Грешка</translation>
- </message>
- <message>
- <source>Database password: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor</name>
- <message>
- <source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error writing to underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error opening underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Error reading data from underlying device: </source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>QtIOCompressor::open</name>
- <message>
- <source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Internal zlib error: </source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SSHAgent</name>
- <message>
- <source>Agent connection failed.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent protocol error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot add identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No agent running, cannot remove identity.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Agent refused this identity. Possible reasons include:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The key has already been added.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A confirmation request is not supported by the agent (check options).</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchHelpWidget</name>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Every search term must match (ie, logical AND)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Modifiers</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>exclude term from results</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match term exactly</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>use regex in term</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fields</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Term Wildcards</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match anything</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>match one</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>logical OR</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Examples</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SearchWidget</name>
- <message>
- <source>Search</source>
- <translation>Претрага</translation>
- </message>
- <message>
- <source>Clear</source>
- <translation>Очисти</translation>
- </message>
- <message>
- <source>Limit search to selected group</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search Help</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Search (%1)...</source>
- <comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Case sensitive</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>SettingsWidgetKeeShare</name>
- <message>
- <source>Active</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Allow import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Own certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Certificate:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signer</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Generate</source>
- <translation>Генериши</translation>
- </message>
- <message>
- <source>Import</source>
- <translation>Увези</translation>
- </message>
- <message>
- <source>Export</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported certificates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Ask</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrust</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Remove</source>
- <translation>Уклони</translation>
- </message>
- <message>
- <source>Path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Status</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Fingerprint</source>
- <translation>Отисак прста</translation>
- </message>
- <message>
- <source>Certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Trusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>key.share</source>
- <comment>Filetype for KeeShare key</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeeShare key file</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>All files</source>
- <translation>Све датотеке</translation>
- </message>
- <message>
- <source>Select path</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Exporting changed certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1.%2</source>
- <comment>Template for KeeShare key file</comment>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>ShareObserver</name>
- <message>
- <source>Import from container without signature</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from container with certificate</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Do you want to trust %1 with the fingerprint of %2 from %3</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Not this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Never</source>
- <translation>Никада</translation>
- </message>
- <message>
- <source>Always</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Just this time</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Imported from %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Signed share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File is not readable</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Invalid sharing container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Untrusted import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful signed import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected error</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsigned share container are not supported - import prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Successful unsigned import</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>File does not exist</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unknown share container type</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting signed share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed signature (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not embed database (%1)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Could not write export container</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unexpected export error occurred</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 failed (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1 successful (%2)</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Export to %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpDialog</name>
- <message>
- <source>Timed Password</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>000000</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Copy</source>
- <translation>Кпирај</translation>
- </message>
- <message numerus="yes">
- <source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
- </message>
-</context>
-<context>
- <name>TotpExportSettingsDialog</name>
- <message>
- <source>Copy</source>
- <translation>Кпирај</translation>
- </message>
- <message>
- <source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
- <comment>TOTP QR code dialog warning</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>There was an error creating the QR code.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Closing in %1 seconds.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>TotpSetupDialog</name>
- <message>
- <source>Setup TOTP</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Default RFC 6238 token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Steam token settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Use custom settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Custom Settings</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Time step:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source> sec</source>
- <comment>Seconds</comment>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Code size:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>6 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>7 digits</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>8 digits</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>UpdateCheckDialog</name>
- <message>
- <source>Checking for updates</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Checking for updates...</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Close</source>
- <translation>Затвори</translation>
- </message>
- <message>
- <source>Update Error!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>An error occurred in retrieving update information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please try again later.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Software Update</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>A new version of KeePassXC is available!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is now available — you have %2.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Download it at keepassxc.org</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>You&apos;re up-to-date!</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>KeePassXC %1 is currently the newest version available</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>WelcomeWidget</name>
- <message>
- <source>Start storing your passwords securely in a KeePassXC database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Create new database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Open existing database</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from KeePass 1</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Import from CSV</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recent databases</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Welcome to KeePassXC %1</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>YubiKeyEditWidget</name>
- <message>
- <source>Refresh</source>
- <translation>Освежи</translation>
- </message>
- <message>
- <source>YubiKey Challenge-Response</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation type="unfinished"/>
- </message>
-</context>
-</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_sv.ts b/share/translations/keepassx_sv.ts
index 1161170e1..82025d41d 100644
--- a/share/translations/keepassx_sv.ts
+++ b/share/translations/keepassx_sv.ts
@@ -49,13 +49,33 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Aktivera SSH-tjänsten (kräver omstart)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Använd OpenSSH för Windows istället för Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Aktivera SSH-tjänstintegrering</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK värde</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK åsidosättning</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(tomt)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Ingen socket för SSH-tjänsten tillgänglig. Tillse antingen att SSH_AUTH_SOCK miljövaiabel finns eller eller ange en åsidosättning.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH-tjänstens anslutning arbetar!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Vill du verkligen återställa alla allmäna och säkerhetsinställningar till standardinställning?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Monochrome (ljus)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Monochrome (mörk)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Färgstark</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Filhantering</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Spara databasfiler säkert (kan vara inkompatibelt med Dropbox etc)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Säkerhetskopiera databasfilen innan den sparas</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Spara automatiskt när programmet avslutas</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Markera inte databasen som ändrad vid icke-dataförändringar (t.ex. expandera grupper)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Läs om databasen automatiskt när den ändrats externt</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Använd gruppikon för nya poster</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Dölj förhandsvisningspanelen för poster</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Allmänt</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Dölj verktygsfältet (ikonerna)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Minimera istället för att avsluta programmet</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Visa en systemfältsikon</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Mörk systemfältsikon</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Minimera fönstret till systemfältet, vid minimering</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Fråga alltid innan autoskriv utförs</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Globalt autoskriv-kortkommando</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Fördröjning för autoskriv</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Autoskriv startfördröjning</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Flyttbart verktygsfält</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Inkludera betaversioner vid sökning efter uppdateringar</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Knappstil:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Språk:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Knappstil för verktygsfält</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Använda teckensnitt med fast teckenbredd för anteckningar</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Språkval</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Återställ inställningarna till standardinställning</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Övergripande autoskrivgenväg</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Autoskrivfördröjning i millisekunder</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Starta KeePassXC automatiskt vid systemstart</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Markera databasen som ändrad för icke dataändringar (t.ex. expanderande grupper)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Användargränssnitt</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Knappstil för verktygsfält:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Använd teckensnitt med fast teckenbredd för anteckningar</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Återställ inställningarna till standard...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Autoskriv skrivfördröjning:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Övergripande autoskrivgenväg:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Autoskriv startfördröjning:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -365,18 +393,6 @@
<translation>Lås tidigare låst databas efter att ha utfört autoskriv</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Behöver inte upprepa lösenordet när det är synligt</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Dölj inte lösenord vid redigering</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Använd inte platshållare för tomma lösenordsfält</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Dölj lösenord i förhandsgranskningsrutan</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Radera söksträng efter</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Kräv lösenordsupprepning när det är synligt</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Dölj lösenord när de redigeras</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Använd platshållare för tomma lösenordfält</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Bekräfta åtkomst för KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - Webbläsaråtkomst</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 begär åtkomst till följande poster:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Kom ihåg det här valet</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Kom ihåg åtkomst till markerade poster</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Tillåt</translation>
+ <source>Remember</source>
+ <translation>Kom ihåg</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Neka</translation>
+ <source>Allow access to entries</source>
+ <translation>Tillåt åtkomst till poster</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 har begärt åtkomst till lösenorden för följande objekt.
-Välj om du vill tillåta eller neka åtkomst.</translation>
+ <source>Allow Selected</source>
+ <translation>Tillåt markerade</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Tillåt åtkomst</translation>
+ <source>Deny All</source>
+ <translation>Neka alla</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Neka åtkomst</translation>
+ <source>Disable for this site</source>
+ <translation>Inaktivera för denna sida</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Välj rätt databas för att spara inloggningsuppgifterna.</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Dialog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Ny nyckelassocieringsbegäran</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Detta krävs för att KeePassXC-Browser ska kunna komma åt dina databaser</translation>
+ <source>Save and allow access</source>
+ <translation>Spara och tillåt åtkomst</translation>
</message>
<message>
- <source>General</source>
- <translation>Allmänt</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Vill du skriva över befintlig nyckel?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Aktivera integrering i dessa webbläsare:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>En delad krypteringsnyckel med namnet &quot;%1&quot; finns redan.
+Vill du skriva över den?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Uppdatera post</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Vill du uppdatera informationen i %1 - %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Avbryt</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Konverterar attribut till anpassad data...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Visa ett &amp;meddelande när behörighetsuppgifter begärs</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Konverterade KeePassHTTP-attribut</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Be&amp;gär att låsa upp databasen om den är låst</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Konverterade attribut från %1 post(er).
+Flyttade %2 nycklar till anpassad data.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>Flyttade %n nyckel till anpassad data.</numerusform><numerusform>Flyttade %n nycklar till anpassad data.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Bara poster med samma protokoll (http://, https:// etc.) returneras.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Hittade ingen post med KeePassHTTP-attribut!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>&amp;Matcha adressens protokoll (t.ex. https://)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Den aktiva databasen innehåller inte någon post med KeePassHTTP-attribut.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Returnerar bara de lämpligaste posterna för en viss webbadress istället för alla poster som rör den domänen.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Föråldrade inställningar för webbläsarintegrering har identifierats</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;Returnera bara de bäst lämpade autentiseringsuppgifterna</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Skapa en ny grupp</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortera &amp;matchande autentiseringsuppgifter efter titel</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>En begäran om att skapa en ny grupp &quot;%1&quot; har tagits emot.
+Vill du skapa denna grupp?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sortera matchande autentiseringsuppgifter efter &amp;användarnamn</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Dina inställningar för KeePassXC-Browser behöver flyttas in i databasinställningarna.
+Detta är nödvändigt för att behålla dina aktuella webbläsaranslutningar.
+Vill du migrera dina befintliga inställningar nu?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Avancerat</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Visa inte denna varning igen</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>&amp;Fråga aldrig före åtkomst till autentisieringsuppgifter</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Du har fått en associationsbegäran för följande databas:
+%1
+
+Ge anslutningen ett unikt namn eller ID, som t.ex.:
+chrome-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Fråga aldrig före &amp;uppdatering av autetiseringsuppgifter</translation>
+ <source>Dialog</source>
+ <translation>Dialog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Sök i alla öppna databaser efter matchande uppgifter</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Detta krävs för att KeePassXC-Browser ska kunna komma åt dina databaser</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Automatiskt skapande eller uppdaterande av textfält stöds inte.</translation>
+ <source>Enable browser integration</source>
+ <translation>Aktivera webbläsarintegration</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Returnera avancerade textfält som börjar med &quot;KPH: &quot;</translation>
+ <source>General</source>
+ <translation>Allmänt</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Uppdaterar KeePassXC eller keepassxc-proxyns binärsökväg automatiskt, till ursprungliga meddelandeskript vid uppstart.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Webbläsare installerade via Snap, stöds för närvarande inte.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Uppdatera &amp;ursprungliga meddelandemanifestfiler vid uppstart</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Aktivera integrering i dessa webbläsare:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Stödjer ett proxyprogram mellan KeePassXC och webbläsartillägget.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Använd ett &amp;proxyprogram mellan KeePassXC och webbläsartillägget</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Använd en anpassad proxy-inställning om du har installerat en proxy manuellt.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Använd en anpassad proxy</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Bläddra...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Varning:&lt;/b&gt; Följande alternativ kan vara farliga!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Välj en anpassad proxy</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Visa en avisering när inloggningsuppgifter begärs</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Körbara filer</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Be om upplåsning av databasen när den är låst</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Alla filer</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Bara poster med samma protokoll (http://, https:// etc.) returneras.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Be inte om tillstånd för HTTP &amp;grundläggande autentisering</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Matcha URL-mall (t.ex. https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>På grund av Snaps sandlådeteknik, måste du köra ett skript för att aktivera webbläsarintegration.&lt;br /&gt;Du kan hämta skriptet från %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Returnerar bara de lämpligaste posterna för en viss webbadress istället för alla poster som rör den domänen.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Se specialinstruktioner för webbläsarintegreringens användning nedan</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Returnera endast bäst matchande autentiseringsuppgifter</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser behövs för att webbläsarintegration skall fungera.&lt;br /&gt;Ladda ner det för %1 och %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Returnerar förfallna autentiseringsuppgifter [Förfallen] läggs till i titeln.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Tillåt utgångna autentiseringsuppgifter som retur</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Returnerar förfallna autentiseringsuppgifter [Förfallen] läggs till i titeln.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Alla databaser anslutna till tillägget, kommer att returnera matchande autentiseringsuppgifter.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Tillåt förfallna autentiseringsuppgifter.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sök i alla öppnade databaser efter matchande autentiseringsuppgifter</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Aktivera webbläsarintegration</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sortera matchande autentiseringsuppgifter efter titel</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Webbläsare installerade via Snap, stöds för närvarande inte.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Sortera matchande autentiseringsuppgifter efter användarnamn</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Alla databaser anslutna till tillägget, kommer att returnera matchande autentiseringsuppgifter.</translation>
+ <source>Advanced</source>
+ <translation>Avancerat</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Fråga aldrig innan åtkomst till autentiseringsuppgifter</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Fråga aldrig innan autentiseringsuppgifter uppdateras</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Be inte om lov för HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Automatiskt skapande eller uppdaterande av textfält stöds inte.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Returnera avancerade strängar som börjar med &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Visa inte popup-fönstret som föreslår migrering av äldre KeePassHTTP-inställningar.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>&amp;Fråga inte efter inställningar för KeePassHTTP-migrering.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Fråga inte efter migrering av KeePassHTTP-inställningar.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Uppdaterar KeePassXC eller keepassxc-proxyns binärsökväg automatiskt, till ursprungliga meddelandeskript vid uppstart.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Uppdatera inbyggda meddelandemanifestfiler vid start</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Använd en anpassad proxy-inställning om du har installerat en proxy manuellt.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>Använd en anpassad proxyplats:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Välj rätt databas för att spara inloggningsuppgifterna.</translation>
<translation>Webbläsare för anpassad proxyfil</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Varning!&lt;/b&gt; Program för keepassxc-proxy kunde inte hittas!&lt;br /&gt;Kontrollera KeePassXCs installationsmapp eller bekräfta den anpassade sökvägen i avancerade alternativ.&lt;br /&gt;Webbläsarintegration FUNGERAR INTE utan proxy-programmet.&lt;br /&gt;Förväntad sökväg: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Bläddra...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Ny nyckelassocieringsbegäran</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>Använd en anpassad plats för webbläsarkonfiguration:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Spara och tillåt åtkomst</translation>
+ <source>Browser type:</source>
+ <translation>Webbläsartyp:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Vill du skriva över befintlig nyckel?</translation>
+ <source>Toolbar button style</source>
+ <translation>Knappstil för verktygsfält</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>En delad krypteringsnyckel med namnet &quot;%1&quot; finns redan.
-Vill du skriva över den?</translation>
+ <source>Config Location:</source>
+ <translation>Konfigurationsplats:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Uppdatera post</translation>
+ <source>Custom browser location field</source>
+ <translation>Platsfält för anpassad webbläsare</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Vill du uppdatera informationen i %1 - %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>Avbryt</translation>
+ <source>Browse for custom browser path</source>
+ <translation>Bläddra efter anpassad webbläsarsökväg</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Konverterar attribut till anpassad data...</translation>
+ <source>Custom extension ID:</source>
+ <translation>Anpassat tilläggs-ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Konverterade KeePassHTTP-attribut</translation>
+ <source>Custom extension ID</source>
+ <translation>Anpassat tilläggs-ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Konverterade attribut från %1 post(er).
-Flyttade %2 nycklar till anpassad data.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>Flyttade %n nyckel till anpassad data.</numerusform><numerusform>Flyttade %n nycklar till anpassad data.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>På grund av Snaps sandlådeteknik, måste du köra ett skript för att aktivera webbläsarintegration.&lt;br /&gt;Du kan hämta skriptet från %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Hittade ingen post med KeePassHTTP-attribut!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC-Browser behövs för att webbläsarintegrationen ska fungera. &lt;br /&gt;Ladda ner dent för %1 och %2 och %3. %4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Den aktiva databasen innehåller inte någon post med KeePassHTTP-attribut.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Se specialinstruktioner för webbläsarintegreringens användning nedan</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Föråldrade inställningar för webbläsarintegrering har identifierats</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;Fel:&lt;/b&gt; Det går inte att hitta den anpassade proxyplatsen!&lt;br/&gt;Webbläsarintegration KOMMER INTE ATT FUNGERA utan proxyprogrammet.</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Skapa en ny grupp</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Varning:&lt;/b&gt; Följande alternativ kan vara farliga!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>En begäran om att skapa en ny grupp &quot;%1&quot; har tagits emot.
-Vill du skapa denna grupp?
-</translation>
+ <source>Executable Files</source>
+ <translation>Körbara filer</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Dina inställningar för KeePassXC-Browser behöver flyttas in i databasinställningarna.
-Detta är nödvändigt för att behålla dina aktuella webbläsaranslutningar.
-Vill du migrera dina befintliga inställningar nu?</translation>
+ <source>All Files</source>
+ <translation>Alla filer</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Visa inte denna varning igen</translation>
+ <source>Select custom proxy location</source>
+ <translation>Välj en anpassad proxy</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Du har fått en associationsbegäran för följande databas:
-%1
-
-Ge anslutningen ett unikt namn eller ID, som t.ex.:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>Välj plats för den inbyggda värdmappen för meddelanden</translation>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-laptop.</translation>
<translation>Kommentarer inleds med</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Första data har fältnamn</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Betrakta &quot;\&quot; som ett kommentarstecken</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-laptop.</translation>
<translation>Förhandsgranska</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Kolumnlayout</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Finns inte i CSV-filen</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Importerat från CSV-fil</translation>
</message>
@@ -971,14 +1025,6 @@ chrome-laptop.</translation>
<translation>Fel</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Tomt fältnamn %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>kolumn %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>Fel upptäckta i CSV-fil!</translation>
</message>
@@ -1008,6 +1054,58 @@ chrome-laptop.</translation>
<source>CSV import preview</source>
<translation>Förhandsgranskning av CSV-import</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>Kolumnassociering</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Ändrad</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Lösenord</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Skapad</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Anteckningar</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupp</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Användarnamn</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>Kolumn %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Root</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Filen %1 finns inte.</translation>
</message>
@@ -1078,6 +1171,19 @@ Säkerhetskopierad databas hittad i %2</translation>
<source>Recycle Bin</source>
<translation>Papperskorg</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Lösenord</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>Dtabasens sparande pågår redan.</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>Kunde inte spara, databasen har inte startats!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1131,10 +1237,6 @@ komma att tas bort för i framtiden.
<translation>Kunde inte öppna nyckelfil: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Välj plats...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Lås upp KeePassXC-databas</translation>
</message>
@@ -1144,15 +1246,7 @@ komma att tas bort för i framtiden.
</message>
<message>
<source>Password field</source>
- <translation>Lösenordsfält</translation>
- </message>
- <message>
- <source>Toggle password visibility</source>
- <translation>Visa/Dölj lösenord</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Val av nyckelfil</translation>
+ <translation>Lösenord</translation>
</message>
<message>
<source>Hardware key slot selection</source>
@@ -1168,7 +1262,7 @@ komma att tas bort för i framtiden.
</message>
<message>
<source>Refresh hardware tokens</source>
- <translation>Uppdatera hårdvarutokens</translation>
+ <translation>Uppdatera hårdvaru-tokens</translation>
</message>
<message>
<source>Hardware Key:</source>
@@ -1219,10 +1313,6 @@ För att förhindra att detta fel uppstår igen, måste du gå till &quot;Databa
&lt;p&gt;Klicka för mer information...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;Som tillägg till ditt huvudlösenord, kan du använda en hemlig fil för att förbättra säkerheten i din databas. En sådan fil kan genereras i databasens säkerhetsinställningar.&lt;/p&gt;&lt;p&gt;Detta är &lt;strong&gt;inte&lt;/strong&gt; din *.kdbx-databasfil!&lt;br&gt;Om du inte har någon nyckelfil, lämnar du fältet tomt.&lt;/p&gt;&lt;p&gt;Klicka för mer information...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Nyckelfilshjälp</translation>
</message>
@@ -1231,10 +1321,6 @@ För att förhindra att detta fel uppstår igen, måste du gå till &quot;Databa
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Välj nyckelfil...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Kan inte använda en databasfil som nyckelfil</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Du kan inte använda din databasfil som nyckelfil.
Om du inte har någon nyckelfil, lämnar du fältet tomt.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Rör vid knappen på din YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Identifierar hårdvarunycklar...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Inga hårdvarunycklar identifierade</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>Välj hårdvarunyckel...</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1267,10 +1377,6 @@ Om du inte har någon nyckelfil, lämnar du fältet tomt.</translation>
<translation>Säkerhet</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Huvudlösenord</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Krypteringsinställningar</translation>
</message>
@@ -1278,6 +1384,10 @@ Om du inte har någon nyckelfil, lämnar du fältet tomt.</translation>
<source>Browser Integration</source>
<translation>Webbläsarintegrering</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ Om du inte har någon nyckelfil, lämnar du fältet tomt.</translation>
<translation>KeePassXC-Browser-inställningar</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Koppla bort alla webbläsare</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Gl&amp;öm alla sidspecifika inställningar i befintliga poster</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Flytta KeePassHTTP-attribut till KeePassXC-Browser &amp;anpassad data</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Lagrade nycklar</translation>
</message>
@@ -1405,6 +1503,67 @@ Detta är nödvändigt för att få kompatibilitet med webbläsartillägget.</tr
<source>Remove selected key</source>
<translation>Ta bort markerad nyckel</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>Flytta KeePassHTTP-attribut till anpassad data för KeePassXC-Browser</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>Uppdatera databasens rotgrupps-ID</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Skapad</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>Uppdatera databas-ID</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>Vill du verkligen uppdatera databas-ID?
+Detta är bara nödvändigt om databasen är en kopia av en annan och webbläsartillägget inte kan ansluta.</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Lägg till ytterligare skydd...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Inget lösenord angivet</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>VARNING! Du har inte angivit något lösenord. Du avråds bestämt från att använda en databas utan lösenord!
+
+Vill du verkligen fortsätta utan lösenord?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Fortsätt utan lösenord</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Ingen krypteringsnyckel tillagd</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Du måste lägga till minst en krypteringsnyckel, för att säkra din databas!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Okänt fel</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1588,6 @@ Detta är nödvändigt för att få kompatibilitet med webbläsartillägget.</tr
<translation>Transformeringsrundor:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Beräkna 1 sekunds fördröjning</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Minnesanvändning:</translation>
</message>
@@ -1453,14 +1608,6 @@ Detta är nödvändigt för att få kompatibilitet med webbläsartillägget.</tr
<translation>Ändra</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Högre värde medger bättre skydd, men databasen tar längre tid att öppna.</translation>
</message>
@@ -1537,16 +1684,6 @@ Om du behåller detta antal, kan din databas bli för lätt att hacka!</translat
<comment>Threads for parallel execution (KDF settings)</comment>
<translation><numerusform> tråd</numerusform><numerusform> trådar</numerusform></translation>
</message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
- </message>
<message>
<source>Change existing decryption time</source>
<translation>Ändra befintlig avkrypteringstid</translation>
@@ -1579,6 +1716,14 @@ Om du behåller detta antal, kan din databas bli för lätt att hacka!</translat
<source>Parallelism</source>
<translation>Parallellitet</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1732,16 @@ Om du behåller detta antal, kan din databas bli för lätt att hacka!</translat
<translation>Exponerade poster</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>&amp;Visa inte denna databas</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>Visa inte denna databas</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Visa poster &amp;under denna grupp:</translation>
+ <source>Expose entries under this group:</source>
+ <translation>Visa poster under denna grupp:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Aktivera fd.o Secret Service, för åtkomst till dessa inställningar.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>Aktivera Secret Service för att komma åt dessa inställningar.</translation>
</message>
</context>
<context>
@@ -1642,10 +1787,6 @@ Om du behåller detta antal, kan din databas bli för lätt att hacka!</translat
<translation>Ytterligare databasinställningar</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Aktivera &amp;komprimering (rekommenderas)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Databasens namn</translation>
</message>
@@ -1679,6 +1820,10 @@ Denna åtgärd kan inte ångras.</translation>
<source> (old)</source>
<translation> (gammal)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>Aktivera komprimering (rekommenderas)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1858,6 @@ Denna åtgärd kan inte ångras.</translation>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Lägg till ytterligare skydd...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Ingen krypteringsnyckel tillagd</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Du måste lägga till minst en krypteringsnyckel, för att säkra din databas!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Inget lösenord angivet</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>VARNING! Du har inte angivit något lösenord. Du avråds bestämt från att använda en databas utan lösenord!
-
-Vill du verkligen fortsätta utan lösenord?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Okänt fel</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Kunde inte ändra huvudlösenordet</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Fortsätt utan lösenord</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1763,130 +1869,11 @@ Vill du verkligen fortsätta utan lösenord?</translation>
</message>
<message>
<source>Database name field</source>
- <translation>Databasnamn</translation>
+ <translation>Databasens namn</translation>
</message>
<message>
<source>Database description field</source>
- <translation>Databasbeskrivning</translation>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Statistik</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Håll muspekaren över rader med felikoner för mer information.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Namn</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Värde</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Databasnamn</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Beskrivning</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Plats</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Senast sparad</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Osparade ändringar</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>Ja</translation>
- </message>
- <message>
- <source>no</source>
- <translation>Nej</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Databasen har ändrats, men ändringarna har ännu inte sparats till disk.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Antal grupper</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Antal poster</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Antal förfallna poster</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Databasen innehåller poster som har förfallit.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Unika lösenord</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Icke unika lösenord</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Mer än 10% av lösenorden är återanvända. Försök använda unika lösenord om möjligt.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Max antal återanvända lösenord</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Vissa lösenord är använda mer än tre gånger. Använd unika lösenord om möjligt.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Antal korta lösenord</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Rekommenderad minimilängd på lösenord är minst 8 tecken.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Antal svaga lösenord</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Långa slumpartade lösenord med betyget &quot;Bra&quot; eller &quot;Utmärkt&quot; rekommenderas.</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Genomsnittlig lösenordslängd</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 tecken</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Genomsnittlig lösenordslängd är mindre än 10 tecken. Längre lösenord är säkrare.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Vänta, databasstatistiken håller på att beräknas...</translation>
+ <translation>Databasens beskrivning</translation>
</message>
</context>
<context>
@@ -1984,6 +1971,10 @@ Detta är definitivt ett programfel, rapportera det till utvecklarna.</translati
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Du är på väg att exportera din databas till en okrypterad fil. Detta kommer att lämna dina lösenord annan känslig information i ett sårbart skick (klartext). Vill du verkligen fortsätta?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>Öppna OPVault</translation>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2165,6 +2156,14 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Databasen är öppnad i skrivskyddat läge. Autospar är inaktiverat.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>Spara säkerhetskopia av databasen</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2209,14 +2208,6 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Välj privat nyckel</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Filen är för stor för att vara en privat nyckel</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Kunde inte öppna privat nyckel</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Posthistorik</translation>
</message>
@@ -2229,10 +2220,6 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Redigera post</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Olika lösenord angivna.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Nytt attribut</translation>
</message>
@@ -2253,29 +2240,13 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation><numerusform>%n månad</numerusform><numerusform>%n månader</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Vill du använda det genererade lösenordet?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Vill du använda det genererade lösenordet till den här posten?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Posten uppdaterad.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Posten har osparade ändringar</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Nytt attribut %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[SKYDDAT] Tryck på &quot;Visa&quot; för att visa eller redigera</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n år</numerusform><numerusform>%n år</numerusform></translation>
@@ -2296,6 +2267,26 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<source>Are you sure you want to remove this URL?</source>
<translation>Vill du verkligen ta bort denna URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Visa</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Dölj</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>Osparade ändringar</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>Vill du spara ändringarna i denna post?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[SKYDDAD] Tryck &quot;Visa&quot; för att visa eller redigera</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2371,6 +2362,14 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<source>Background color selection</source>
<translation>Val av bakgrundsfärg</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Vid aktivering visas posten inte i rapporter som Hälsokontroll och HIBP även om den inte matchar kvalitetskraven (t.ex. lösenordsentropin eller återanvändning). Du kan aktivera om lösenordet ligger utanför din kontroll (t.ex. om det behöver vara en fyrsiffrig PIN-kod) för att förhindra att det belamrar rapporterna.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>Undanta från databasrapporter</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2379,14 +2378,6 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Aktivera autoskriv för denna post</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Hämta autoskrivsekvensstandard från &amp;gruppen</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Använd anpassad autoskrivsekvens:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Fönsterassociering</translation>
</message>
@@ -2442,6 +2433,14 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<source>Custom Auto-Type sequence for this window</source>
<translation>Anpassad autoskrivsekvens för detta fönster</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Ärv standard auto-skriv sekvens för grupp</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Använd egen auto-skriv sekvens:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2477,6 +2476,14 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<source>Edit</source>
<translation>Redigera</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>Skicka bara den här inställningen till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten i normala inloggningsformulär.</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>Använd den här posten endast med HTTP Basic Auth</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2528,18 +2535,10 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Lösenord:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Upprepa:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Titel:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Anteckningar</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Förinställningar</translation>
</message>
@@ -2552,10 +2551,6 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Användarnamn:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Förfaller</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL</translation>
</message>
@@ -2564,22 +2559,10 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Ladda ner favicon för URL:en</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Upprepa lösenordet</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Lösenordgenerator på/av</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Lösenord</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Visa/Dölj lösenordet</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Visa/Dölj anteckningar</translation>
</message>
@@ -2609,7 +2592,19 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
</message>
<message>
<source>Toggle expiration</source>
- <translation>Förfallodag av/på</translation>
+ <translation>Förfallodag på/av</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Anteckningar:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://exempel.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>Förfaller:</translation>
</message>
</context>
<context>
@@ -2746,10 +2741,6 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Formulär</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Typ:</translation>
</message>
@@ -2758,10 +2749,6 @@ Vill du inaktivera &quot;Spara säkert&quot; och försöka igen?</translation>
<translation>Sökväg:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Lösenord:</translation>
</message>
@@ -2845,96 +2832,84 @@ Filtyper som stöds är: %1.</translation>
<translation>Sökväg till delningsfil</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Bläddra efter delningsfil</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Lösenord</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Visa/Dölj lösenordet</translation>
+ <source>Clear fields</source>
+ <translation>Rensa</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Öppna/Stäng lösenordsgeneratorn</translation>
+ <source>Browse for share file</source>
+ <translation>Bläddra efter delningsfil</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>Rensa</translation>
+ <source>Browse...</source>
+ <translation>Bläddra...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
+ <source>Name field</source>
<translation>Namn</translation>
</message>
<message>
- <source>Notes</source>
+ <source>Notes field</source>
<translation>Anteckningar</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Förfaller</translation>
+ <source>Toggle expiration</source>
+ <translation>Förfallodag på/av</translation>
</message>
<message>
- <source>Search</source>
- <translation>Sök</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation>Autoskriv på/av för denna grupp och undergrupper</translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Autoskriv</translation>
+ <source>Expiration field</source>
+ <translation>Förfaller</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Använd standard autoskrivsekvens från överordnad grupp</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation>Sökning på/av för denna grupp och undergrupper</translation>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Anv&amp;ge standard autoskrivsekvens</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>Standard autoskrivsekvens</translation>
</message>
<message>
- <source>Name field</source>
- <translation>Namn</translation>
+ <source>Expires:</source>
+ <translation>Förfaller:</translation>
</message>
<message>
- <source>Notes field</source>
- <translation>Anteckningar</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>Använd standard autoskrivsekvens för överordnad grupp</translation>
</message>
<message>
- <source>Toggle expiration</source>
- <translation>Förfallodag på/av</translation>
+ <source>Auto-Type:</source>
+ <translation>Autoskriv:</translation>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
- <translation>Autoskriv på/av för denna grupp och undergrupper</translation>
+ <source>Search:</source>
+ <translation>Sök:</translation>
</message>
<message>
- <source>Expiration field</source>
- <translation>Förfallodag</translation>
+ <source>Notes:</source>
+ <translation>Anteckningar:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
- <translation>Sökning på/av för denna grupp och undergrupper</translation>
+ <source>Name:</source>
+ <translation>Namn:</translation>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation>Standard autoskrivsekvens</translation>
+ <source>Set default Auto-Type sequence</source>
+ <translation>Ange standard autoskrivsekvens</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Använd standardikon</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Använd an&amp;passad ikon</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Lägg till anpassad ikon</translation>
</message>
@@ -2999,14 +2974,6 @@ Filtyper som stöds är: %1.</translation>
<translation>Använd markerad ikon till undergrupper och poster</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Använd ikon &amp;till...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Använd endast till denna</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Använd även till undergrupper</translation>
</message>
@@ -3022,6 +2989,22 @@ Filtyper som stöds är: %1.</translation>
<source>Existing icon selected.</source>
<translation>Befintlig ikon vald.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Använd standard ikon</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Använd egen ikon</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>Tillämpa ikonen på...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>Använd endast till denna grupp</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3206,6 +3189,20 @@ Det kan medföra att de berörda tilläggen inte fungerar.</translation>
<source>Save selected attachment to disk</source>
<translation>Spara markerad bilaga på disk</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 är en stor fil (%2 MB).
+Databasen kan bli mycket stor och försämra prestanda.
+
+Vill du verkligen lägga till den här filen?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>Bekräfta bilaga</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3289,12 +3286,52 @@ Det kan medföra att de berörda tilläggen inte fungerar.</translation>
<translation>Bilagor</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ja</translation>
+ <source>Size</source>
+ <translation>Storlek</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>Gruppnamn</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Posttitel</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Postanteckning</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Posten upphör att gälla</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Skapad</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Ändrad</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Senast använd</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Bifogade filer</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Postens storlek</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Har bilagor</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Har TOTP engångslösenord</translation>
</message>
</context>
<context>
@@ -3394,6 +3431,13 @@ Det kan medföra att de berörda tilläggen inte fungerar.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Ogiltig URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3420,8 +3464,14 @@ Det kan medföra att de berörda tilläggen inte fungerar.</translation>
<translation>Återställ till standardvärden</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Bilagor (ikon)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Har bilagor</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>Har TOTP</translation>
</message>
</context>
<context>
@@ -3433,21 +3483,74 @@ Det kan medföra att de berörda tilläggen inte fungerar.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Kunde inte registrera DBus-tjänsten vid %1. En annan &quot;Secret Service&quot; körs redan.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n post användes av %1</numerusform><numerusform>%n poster användes av %1</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>Kunde inte registrera DBus-tjänsten på %1.&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Filnamn</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Grupp</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Hantera</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Lås upp för att visa</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Ingen</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Program</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Hantera</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fd.o Secret Service: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Okänd</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Okänd</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1, Körbar: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>En annan Secret Service körs (%1).&lt;br/&gt; Stoppa/ta bort den innan du aktiverar Secret Service-integreringen igen.</translation>
</message>
</context>
<context>
@@ -3459,14 +3562,10 @@ Det kan medföra att de berörda tilläggen inte fungerar.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Kan inte spara filen!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Kan inte att spara den inbyggda meddelandeskriptfilen.</translation>
+ <source>Online password validation failed</source>
+ <translation>Lösenordsvalidering online misslyckades</translation>
</message>
</context>
<context>
@@ -3536,14 +3635,6 @@ Du kan aktivera ikontjänsten från DuckDuckGo, i säkerhetssektionen av program
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan inte beräkna huvudnyckeln</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kan inte utfärda challenge-response.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>saknade databashuvuden</translation>
</message>
@@ -3569,16 +3660,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ogiltiga autentiseringsuppgifter angavs. Försök igen.
Om detta upprepas, kan din databasfil vara skadad.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Kan inte utfärda challenge-response.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan inte beräkna huvudnyckeln</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3588,10 +3687,6 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
<translation>saknade databashuvuden</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan inte beräkna huvudnyckeln</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Ogiltig storlek på sidhuvudets kontrollsumma</translation>
</message>
@@ -3709,6 +3804,10 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
<source>(HMAC mismatch)</source>
<translation>(HMAC matchningsfel)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3722,14 +3821,14 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
<translation>Ogiltig symmetrisk chiffer IV-storlek.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kan inte beräkna huvudnyckeln</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Det gick inte att serialisera KDF-parametrarnas datastruktur för lagring av metadata</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3852,11 +3951,11 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d
</message>
<message>
<source>Null entry uuid</source>
- <translation type="unfinished"/>
+ <translation>Null post-uuid</translation>
</message>
<message>
<source>Invalid entry icon number</source>
- <translation type="unfinished"/>
+ <translation>Ogiltigt post ikon nummer</translation>
</message>
<message>
<source>History element in history entry</source>
@@ -3872,17 +3971,13 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Duplicerat anpassat attribut hittades</translation>
+ <translation>Dubbla anpassade attribut hittades</translation>
</message>
<message>
<source>Entry string key or value missing</source>
<translation>Postens text-nyckel eller värde saknas</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Duplicerad bilaga hittades</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Postens binär-nyckel eller värde saknas</translation>
</message>
@@ -3929,6 +4024,29 @@ Rad %2, kolumn: %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Filen är för stor för att vara en privat nyckel</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Kunde inte öppna privat nyckel</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3991,10 +4109,6 @@ Rad %2, kolumn: %3</translation>
<translation>Root</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Kunde inte räkna nu master-nyckeln</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Nyckeltransformering misslyckades</translation>
</message>
@@ -4096,6 +4210,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Ogiltiga autentiseringsuppgifter angavs. Försök igen.
Om detta upprepas, kan din databasfil vara skadad.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4202,15 +4320,6 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
<translation>Äldre nyckelfilsformat</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Du använder ett äldre nyckelfilsformat, som kanske inte kommer att stödjas i framtiden.
-
-Gå till huvudnyckelinställningarna och generera en ny nyckelfil.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>Kunde inte läsa in nyckelfilen &quot;%1&quot;
@@ -4278,6 +4387,13 @@ Are you sure you want to continue with this file?</source>
<translation>Den valda filen ser ut som en lösenordsdatabas. En nyckelfil måste vara en statisk fil som aldrig ändras, annars förlorar du åtkomst till databasen för alltid.
Vill du verkligen fortsätta med den här filen?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4286,18 +4402,10 @@ Vill du verkligen fortsätta med den här filen?</translation>
<translation>&amp;Databas</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Tidigare databaser</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Hjälp</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Poster</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Grupper</translation>
</message>
@@ -4314,46 +4422,10 @@ Vill du verkligen fortsätta med den här filen?</translation>
<translation>&amp;Om</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>&amp;Öppna databas...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>&amp;Spara databas</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>St&amp;äng databas</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>&amp;Ta bort post</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>&amp;Redigera grupp</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Ta bort &amp;grupp</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>S&amp;para databas som...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Databasinställningar</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>&amp;Klona post</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Kopiera användar&amp;namn</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Kopiera användarnamn till urklipp</translation>
</message>
@@ -4366,10 +4438,6 @@ Vill du verkligen fortsätta med den här filen?</translation>
<translation>&amp;Inställningar</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>&amp;Lås databaser</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Titel</translation>
</message>
@@ -4394,14 +4462,6 @@ Vill du verkligen fortsätta med den här filen?</translation>
<translation>Kopiera anteckningar till urklipp</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;Exportera till CSV-fil...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Konfigurera TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>Kopiera &amp;TOTP</translation>
</message>
@@ -4446,10 +4506,6 @@ Denna version är inte ämnad för daglig användning.</translation>
<translation>&amp;Donera</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>&amp;Rapportera ett fel</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>VARNING! Din Qt-version kan leda till att KeePassXC kraschar vid användning av skärmtangentbord!
@@ -4460,66 +4516,26 @@ Vi rekommenderar att du använder tillgänglig AppImage, från vår nerladdnings
<translation>&amp;Importera</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Kopiera att&amp;ribut...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Ny databas...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Skapa en ny databas</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;Infoga från databas...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Infoga från annan KDBX-databas</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Ny post</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Lägg till en ny post</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Redigera post</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Visa eller redigera posten</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;Ny grupp</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Lägg till en ny grupp</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>&amp;Ändra huvudnyckel...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Databasinställningar...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Kopiera &amp;lösenord</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>&amp;Utför autoskriv</translation>
</message>
@@ -4528,30 +4544,14 @@ Vi rekommenderar att du använder tillgänglig AppImage, från vår nerladdnings
<translation>&amp;Öppna URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1-databas...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Importera en KeePass1-databas</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV-fil...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Importera en CSV-fil</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Visa TOTP...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Visa TOTP QR-kod...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>OBS! Du använder en förhandsversion av KeePassXC!
@@ -4574,14 +4574,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>&amp;Exportera</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Sök efter uppdateringar...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Ladda ner alla &amp;faviconer</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Sortera &amp;A-Z</translation>
</message>
@@ -4594,48 +4586,290 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>&amp;Lösenordsgenerator</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Ladda ner favicon</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Importera ett 1Password-valv</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>&amp;Exportera till HTML-fil...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Kom igång</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password-valv...</translation>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Användarmanual</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Importera ett 1Password-valv</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Tangentbordsgenvägar</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Kom igång</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>&amp;Tidigare databaser</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Öppna kom-igång-manualen som PDF</translation>
+ <source>&amp;Entries</source>
+ <translation>&amp;Poster</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Online-hjälp...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>Kopiera att&amp;ribut</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Gå till online-dokumentationen (öppnas i webbläsaren)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Användarmanual</translation>
+ <source>View</source>
+ <translation>Vy</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Öppna användarmanualen som PDF</translation>
+ <source>Theme</source>
+ <translation>Tema</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Tangentbordsgenvägar</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>Sök efter &amp;uppdateringar</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>&amp;Öppna databas...</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>&amp;Spara databas</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>S&amp;täng databas</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>&amp;Ny databas...</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>S&amp;lå samman från databas...</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>&amp;Ny post...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>&amp;Redigera post...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>&amp;Ta bort post...</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>&amp;Ny grupp...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>&amp;Redigera grupp...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>&amp;Ta bort grupp...</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>Ladda ner alla favikoner...</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>S&amp;para databas som...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>Statistik, hälsokontroll, etc.</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>&amp;Databasinställningar...</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>&amp;Klona post...</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>Flytta u&amp;pp</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>Flytta upp posten ett steg</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>Flytta &amp;ner</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>Flytta ner posten ett steg</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Kopiera an&amp;vändarnamn</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Kopiera &amp;lösenord</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Ladda ner &amp;favikon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>&amp;Lås databasen</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1-databas…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password Vault…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV-file…</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>Visa TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Visa QR-kod</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>Konfigurera TOTP...</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>Rapportera ett &amp;fel</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>&amp;Online-hjälp</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>Öppna användarmanualen</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>Spara säkerhetskopia av databasen...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>Lägg till nyckel till SSH-tjänsten</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>Ta bort nyckel från SSH-tjänsten</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Kompakt läge</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Automatisk</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Ljus</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Mörk</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klassisk (Platfformsintegration)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Visa verktygsfält</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Visa inte igen för denna version</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Databasinställningar</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Avsluta databasinställningar</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Lås upp databasen</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Lås upp databasen för att visa mer information</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Lås databasen</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Kopla ifrån</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>Koppla ifrån detta program</translation>
</message>
</context>
<context>
@@ -4724,10 +4958,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Guidesida</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>&amp;Krypteringsinställningar</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna.</translation>
</message>
@@ -4739,27 +4969,31 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<source>Simple Settings</source>
<translation>Förenklade inställningar</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Krypteringsinställningar</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Databasens huvudnyckel</translation>
+ <source>Encryption Settings</source>
+ <translation>Krypteringsinställningar</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>En huvudnyckel som bara du känner till, skyddar din databas.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna.</translation>
</message>
</context>
<context>
@@ -4774,6 +5008,13 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Lösenordshanterare</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4949,6 +5190,18 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<source>Passwords match so far</source>
<translation>Lösenorden stämmer så långt</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4973,25 +5226,13 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Lösenorden stämmer inte.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Skapa huvudlösenord</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Lösenord</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Visa/Dölj lösenordet</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Upprepa lösenordet</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Lösenordsgenerator på/av</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5000,10 +5241,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Lösenord:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>styrka</translation>
@@ -5053,14 +5290,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Ordavdelare:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopiera</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Acceptera</translation>
- </message>
- <message>
<source>Close</source>
<translation>Stäng</translation>
</message>
@@ -5157,14 +5386,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Växla till förenklat läge</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Förenklat</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Tecken som undantas från genererade lösenord</translation>
</message>
@@ -5185,14 +5406,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Undanta tecknen: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>&amp;Antal ord:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Generera om</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Genererat lösenord</translation>
</message>
@@ -5241,10 +5454,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Kopiera lösenordet</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Acceptera lösenordet</translation>
- </message>
- <message>
<source>lower case</source>
<translation>gemener</translation>
</message>
@@ -5257,8 +5466,44 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Titelns skiftläge</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Visa/Dölj lösenordet</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Antal ord:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Rensa</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5271,6 +5516,58 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<source>Statistics</source>
<translation>Statistik</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5410,10 +5707,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<translation>Sökväg till den tillagda posten.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Kopiera en posts lösenord till urklipp.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Sökväg att kopiera.</translation>
@@ -5571,14 +5864,6 @@ Tillgängliga kommandon:
<translation>Webbläsarintegration</translation>
</message>
<message>
- <source>Press</source>
- <translation>Tryck</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Passiv</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH-tjänst</translation>
</message>
@@ -5617,10 +5902,6 @@ Tillgängliga kommandon:
<translation>Posten %1 tillagd.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Kopiera aktuell TOTP till urklipp.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Ogiltig tidsgräns %1.</translation>
</message>
@@ -5632,14 +5913,6 @@ Tillgängliga kommandon:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Posten med sökväg %1 har ingen TOTP konfigurerad.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Postens aktuella TOTP kopierad till urklipp!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Postens lösenord kopierat till urklipp!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>Rensar urklipp om %1 sekund...</numerusform><numerusform>Rensar urklipp om %1 sekunder...</numerusform></translation>
@@ -5860,10 +6133,6 @@ Tillgängliga kommandon:
<translation>Inget program definierat för urklippsmanipulation</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Kan inte starta programmet %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>filen är tom</translation>
</message>
@@ -5872,18 +6141,6 @@ Tillgängliga kommandon:
<translation>%1: (rad, kolumn) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 bitar</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 bitar</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 bitar</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – rekommenderas)</translation>
</message>
@@ -6134,10 +6391,6 @@ Kärna: %3 %4</translation>
<translation>Visa den här hjälpen.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Yubikey-plats som används för att kryptera databasen.</translation>
- </message>
- <message>
<source>slot</source>
<translation>anslutningsplats</translation>
</message>
@@ -6154,10 +6407,6 @@ Kärna: %3 %4</translation>
<translation>Avsluta interaktivt läge.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Format att använda för export. Tillgängliga alternativ är XML eller CSV. Standard är XML.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Exporterar innehållet i en databas till standardutdata i angivet format.</translation>
</message>
@@ -6198,10 +6447,6 @@ Kärna: %3 %4</translation>
<translation>Sökväg till den nya databasen.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Kan inte importera XML-databasexport %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Databas importera.</translation>
</message>
@@ -6294,10 +6539,6 @@ Kärna: %3 %4</translation>
<translation>Ogiltig YubiKey-plats %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Rör vid knappen på din YubiKey för att låsa upp %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Ange lösenord för att avkryptera databasen (valfritt): </translation>
</message>
@@ -6313,13 +6554,9 @@ Kärna: %3 %4</translation>
<source>User name</source>
<translation>Användarnamn</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] Challenge Response - Plats %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Lösenordet för &quot;%1&quot; har läckts ut %2 gång!</numerusform><numerusform>Lösenordet för &quot;%1&quot; har läckts ut %2 gånger!</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6329,6 +6566,193 @@ Kärna: %3 %4</translation>
<source>Show the protected attributes in clear text.</source>
<translation>Visa de skyddade attributen i klartext.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Namn:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Beskrivning:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Repetera lösenord:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6365,6 +6789,290 @@ Kärna: %3 %4</translation>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Dålig</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Svag</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Sökväg</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Anledning</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Redigera post...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Sökväg</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Redigera post...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Håll muspekaren över rader med felikoner för mer information.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Namn</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Värde</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Vänta, databasstatistiken håller på att beräknas...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Databasnamn</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Beskrivning</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Plats</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Senast sparad</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Osparade ändringar</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>Ja</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>Nej</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Databasen har ändrats, men ändringarna har ännu inte sparats till disk.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Antal grupper</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Antal poster</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Antal förfallna poster</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Databasen innehåller poster som har förfallit.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Unika lösenord</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Icke unika lösenord</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Mer än 10% av lösenorden är återanvända. Försök använda unika lösenord om möjligt.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Max antal återanvända lösenord</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Vissa lösenord är använda mer än tre gånger. Använd unika lösenord om möjligt.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Antal korta lösenord</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Rekommenderad minimilängd på lösenord är minst 8 tecken.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Antal svaga lösenord</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Långa slumpartade lösenord med betyget &quot;Bra&quot; eller &quot;Utmärkt&quot; rekommenderas.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Genomsnittlig lösenordslängd</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 tecken</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Genomsnittlig lösenordslängd är mindre än 10 tecken. Längre lösenord är säkrare.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6398,6 +7106,14 @@ Kärna: %3 %4</translation>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Bekräftelsebegäran stöds inte av tjänsten (kontrollera alternativen).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6505,26 +7221,10 @@ Kärna: %3 %4</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Om papperskorgen är aktiverad för databasen, kommer posterna att flyttas direkt till papperskorgen. Annars kommer de att tas bort utan bekräftelse.&lt;/p&gt;&lt;p&gt;Du kommer fortfarande att tillfrågas om några poster refereras av andra.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Be inte om bekräftelse när poster tas bort av klienter.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Exponerade databasgrupper:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Filnamn</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Grupp</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Hantera</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Auktorisation</translation>
</message>
@@ -6533,40 +7233,20 @@ Kärna: %3 %4</translation>
<translation>Dessa program är för närvarande anslutna:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Program</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>Kopla ifrån</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>Databasinställningar</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Avsluta databasinställningar</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Lås upp databasen</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Lås upp databasen för att visa mer information</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Lås databasen</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unlock to show</source>
- <translation>Lås upp för att visa</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>None</source>
- <translation>Ingen</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6839,10 +7519,6 @@ Kärna: %3 %4</translation>
<translation>Signerad import slutförd</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Oväntat fel</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Osignerad delningsbehållare stöds inte. - Import förhindrad.</translation>
</message>
@@ -7012,6 +7688,13 @@ Exempel: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Ogiltig URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7102,6 +7785,53 @@ Exempel: JBSWY3DPEHPK3PXP</translation>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Tryck</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Passiv</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7116,20 +7846,28 @@ Exempel: JBSWY3DPEHPK3PXP</translation>
<translation>&lt;p&gt;Om du äger en &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, kan du använda den för ytterligare säkerhet.&lt;/p&gt;&lt;p&gt;YubiKey kräver att en av dess platser programmeras som &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>Ingen YubiKey identifierad, tillse att den är ansluten.</translation>
+ <source>Refresh hardware tokens</source>
+ <translation>Uppdatera hårdvaru-tokens</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>Ingen YubiKey ansluten.</translation>
+ <source>Hardware key slot selection</source>
+ <translation>Val av plats för hårdvarunyckel</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>Uppdatera hårdvaru-tokens</translation>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>Hårdvarunyckelplats</translation>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Identifierar hårdvarunycklar...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Inga hårdvarunycklar identifierade</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_th.ts b/share/translations/keepassx_th.ts
index 915852139..7c4caedc8 100644
--- a/share/translations/keepassx_th.ts
+++ b/share/translations/keepassx_th.ts
@@ -11,12 +11,11 @@
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>รายงานข้อผิดพลาดที่: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>รายงานจุดบกพร่องที่ &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC เผยแพร่ภายใต้เงื่อนไขของสัญญาอนุญาตสาธารณะทั่วไปของกนู (GNU GPL)
-รุ่น 2 หรือรุ่น 3 (คุณสามารถเลือกได้)</translation>
+ <translation>KeePassXC เผยแพร่ภายใต้เงื่อนไขของสัญญาอนุญาตสาธารณะทั่วไปของกนู (GNU GPL) รุ่น 2 หรือรุ่น 3 (คุณสามารถเลือกได้)</translation>
</message>
<message>
<source>Contributors</source>
@@ -28,19 +27,19 @@
</message>
<message>
<source>Debug Info</source>
- <translation>ข้อมูลดีบัก</translation>
+ <translation>ข้อมูลการแก้จุดบกพร่อง</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>ใส่ข้อมูลดังต่อไปนี้ทุกครั้งที่คุณรายงานข้อผิดปกติของซอฟต์แวร์:</translation>
+ <translation>ใส่ข้อมูลดังต่อไปนี้ทุกครั้งที่คุณรายงานจุดบกพร่องของซอฟต์แวร์</translation>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>คัดลอกไปยังคลิปบอร์ด:</translation>
+ <translation>คัดลอกไปยังคลิปบอร์ด</translation>
</message>
<message>
<source>Project Maintainers:</source>
- <translation>ผู้บำรุงรักษาโครงการ:</translation>
+ <translation>ผู้ดูแลโครงการ</translation>
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
@@ -50,19 +49,39 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>เปิดใช้ตัวแทน SSH (ต้องเริ่มระบบคอมพิวเตอร์ใหม่)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>ใช้ OpenSSH สำหรับ Windows แทน Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
<message>
<source>Application Settings</source>
- <translation>การตั้งค่าแอป</translation>
+ <translation>การตั้งค่าโปรแกรม</translation>
</message>
<message>
<source>General</source>
@@ -70,7 +89,7 @@
</message>
<message>
<source>Security</source>
- <translation>ความมั่นคง</translation>
+ <translation>ความปลอดภัย</translation>
</message>
<message>
<source>Access error for config file %1</source>
@@ -98,12 +117,24 @@
</message>
<message>
<source>Reset Settings?</source>
- <translation type="unfinished"/>
+ <translation>ล้างการตั้งค่าหรือไม่?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -121,17 +152,13 @@
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>ย่อหน้าต่างลงเล็กสุดตอนเริ่มแอป</translation>
+ <translation>ย่อหน้าต่างลงเล็กสุดตอนเริ่มโปรแกรม</translation>
</message>
<message>
<source>File Management</source>
<translation>การจัดการไฟล์</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>บันทึกไฟล์ฐานข้อมูลอย่างปลอดภัย (อาจจะไม่ตรงกับ Dropbox ฯลฯ)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>สำรองไฟล์ฐานข้อมูลก่อนการบันทึก</translation>
</message>
@@ -144,10 +171,6 @@
<translation>บันทึกอัตโนมัติตอนออก</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>ไม่ทำเครื่องหมายบนฐานข้อมูลว่าแก้ไขแล้วสำหรับข้อมูลที่ไม่มีการเปลี่ยนแปลง (เช่น การขยายกลุ่ม)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>โหลดฐานข้อมูลใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงจากภายนอก</translation>
</message>
@@ -160,28 +183,12 @@
<translation>ใช้ไอคอนกลุ่มบนการสร้างรายการ</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>ซ่อนแผงตัวอย่างแสดงรายการ</translation>
- </message>
- <message>
- <source>General</source>
- <translation>ทั่วไป</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>ซ่อนแถบเครื่องมือ (ไอคอน)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>ย่อหน้าต่างแทนที่การปิดแอป</translation>
</message>
<message>
<source>Show a system tray icon</source>
- <translation>แสดงไอคอนสำหรับ system tray</translation>
- </message>
- <message>
- <source>Dark system tray icon</source>
- <translation>ไอคอนซิสเต็มเทรย์แบบมืด</translation>
+ <translation>แสดงไอคอนของซิสเต็มเทรย์</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
@@ -193,32 +200,20 @@
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
- <translation>ใช้หัวข้อเรื่องในการจับคู่หน้าต่างกับ Auto-Type ระดับโลก</translation>
+ <translation>ใช้หัวข้อของรายการในการจับคู่หน้าต่างกับ Auto-Type สากล</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
- <translation>ใช้ URL ของรายการในการจับคู่หน้าต่างกับ Auto-Type ระดับโลก</translation>
+ <translation>ใช้ URL ของรายการในการจับคู่หน้าต่างกับ Auto-Type สากล</translation>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>ถามเสมอก่อนจะทำการ Auto-Type</translation>
- </message>
- <message>
- <source>Global Auto-Type shortcut</source>
- <translation>ทางลัดสำหรับ Auto-Type ระดับโลก</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>การพิมพ์ Auto-Type ล่าช้า</translation>
+ <translation>ถามก่อนเสมอเมื่อจะทำการ Auto-Type</translation>
</message>
<message>
<source> ms</source>
<comment>Milliseconds</comment>
- <translation>มิลลิวิ</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation>การเริ่ม Auto-Type ล่าช้า</translation>
+ <translation>มิลลิวินาที</translation>
</message>
<message>
<source>Movable toolbar</source>
@@ -230,7 +225,7 @@
</message>
<message>
<source>Load previously open databases on startup</source>
- <translation type="unfinished"/>
+ <translation>เรียกใช้ฐานข้อมูลที่เปิดใช้ก่อนหน้าในตอนเริ่มโปรแกรม</translation>
</message>
<message>
<source>Remember database key files and security dongles</source>
@@ -245,10 +240,6 @@
<translation type="unfinished"/>
</message>
<message>
- <source>Button style:</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Language:</source>
<translation>ภาษา:</translation>
</message>
@@ -266,7 +257,7 @@
</message>
<message>
<source>Hide window when copying to clipboard</source>
- <translation type="unfinished"/>
+ <translation>ซ่อนหน้าต่างขณะที่คัดลอกไปยังคลิปบอร์ด</translation>
</message>
<message>
<source>Minimize</source>
@@ -278,7 +269,7 @@
</message>
<message>
<source>Favicon download timeout:</source>
- <translation type="unfinished"/>
+ <translation>ระยะหมดเวลาดาวน์โหลด favicon:</translation>
</message>
<message>
<source>Website icon download timeout in seconds</source>
@@ -291,30 +282,66 @@
</message>
<message>
<source>Toolbar button style</source>
+ <translation>รูปแบบปุ่มบนแถบเครื่องมือ</translation>
+ </message>
+ <message>
+ <source>Language selection</source>
+ <translation>เลือกภาษา</translation>
+ </message>
+ <message>
+ <source>Global auto-type shortcut</source>
+ <translation>ปุ่มลัดพิมพ์อัตโนมัติในทุกโปรแกรม</translation>
+ </message>
+ <message>
+ <source>Auto-type character typing delay milliseconds</source>
+ <translation>หน่วงเวลาพิมพ์อัตโนมัติแต่ละตัวอักษร หน่วยเป็นมิลลิวินาที</translation>
+ </message>
+ <message>
+ <source>Auto-type start delay milliseconds</source>
+ <translation>หน่วงเวลาเริ่มพิมพ์อัตโนมัติ หน่วยเป็นมิลลิวินาที</translation>
+ </message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Use monospaced font for Notes</source>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Language selection</source>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Reset Settings to Default</source>
+ <source>User Interface</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Global auto-type shortcut</source>
+ <source>Toolbar button style:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type character typing delay milliseconds</source>
+ <source>Use monospaced font for notes</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-type start delay milliseconds</source>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
</context>
@@ -322,7 +349,7 @@
<name>ApplicationSettingsWidgetSecurity</name>
<message>
<source>Timeouts</source>
- <translation>การหยุดชั่วคราว</translation>
+ <translation>หมดเวลา</translation>
</message>
<message>
<source>Clear clipboard after</source>
@@ -331,11 +358,11 @@
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation>วิ</translation>
+ <translation>วินาที</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>ล็อกฐานข้อมูลหลังไม่มีการใช้งาน</translation>
+ <translation>ล็อคฐานข้อมูลหลังไม่มีการใช้งาน</translation>
</message>
<message>
<source> min</source>
@@ -343,7 +370,7 @@
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation>ลืม TouchID หลังไม่มีการใช้งาน</translation>
+ <translation>ไม่จำ TouchID หลังไม่มีการใช้งาน</translation>
</message>
<message>
<source>Convenience</source>
@@ -351,31 +378,19 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>ล็อคฐานข้อมูลเมื่อเซสชันถูกล็อคหรือฝาครอบถูกผิด</translation>
+ <translation>ล็อคฐานข้อมูลเมื่อเซสชันถูกล็อคหรือฝาถูกปิด</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>ลืม TouchID เมื่อเซสชันถูกล็อคหรือฝาครอบถูกผิด</translation>
+ <translation>ไม่จำ TouchID เมื่อเซสชันถูกล็อคหรือฝาถูกปิด</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>ล็อกฐานข้อมูลหลังย่อหน้าต่างลงเล็กสุด</translation>
+ <translation>ล็อคฐานข้อมูลหลังย่อหน้าต่างลง</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>ล็อคฐานข้อมูลที่เคยถูกล็อคมาก่อนอีกครั้งหลังทำการ Auto-Type</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>ไม่ต้องถามรหัสผ่านซ้ำถ้ามองเห็นรหัสผ่านอยู่</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>ไม่ต้องซ่อนรหัสผ่านขณะกำลังแก้ไขรหัสผ่าน</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>ไม่ต้องแสดงข้อความตัวอย่างในช่องรหัสผ่านที่ว่างเปล่า</translation>
+ <translation>ล็อคฐานข้อมูลก่อนหน้าอีกครั้งหลังทำการ Auto-Type</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@@ -391,11 +406,11 @@
</message>
<message>
<source>Use DuckDuckGo service to download website icons</source>
- <translation type="unfinished"/>
+ <translation>ใช้บริการของ DuckDuckGo เพื่อดาวน์โหลดไอคอนของเว็บไซต์</translation>
</message>
<message>
<source>Clipboard clear seconds</source>
- <translation type="unfinished"/>
+ <translation>ล้างคลิปบอร์ดภายใน หน่วยเป็นวินาที</translation>
</message>
<message>
<source>Touch ID inactivity reset</source>
@@ -412,6 +427,18 @@
</message>
<message>
<source>Clear search query after</source>
+ <translation>ล้างคำค้นหลังจาก</translation>
+ </message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
<translation type="unfinished"/>
</message>
</context>
@@ -439,7 +466,7 @@
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>คำสั่ง Auto-Type นี้กดปุ่มช้า ต้องการดำเนินการต่อหรือไม่</translation>
+ <translation>คำสั่ง Auto-Type นี้กดแป้นพิมพ์ช้า ต้องการดำเนินการต่อหรือไม่</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
@@ -528,33 +555,35 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>เบราว์เซอร์ KeePassXC ยืนยันการเข้าถึง</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>จำการตัดสินใจนี้</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>อนุญาต</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>ปฏิเสธ</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 ต้องการเข้าถึงรหัสผ่านของไอเทมต่อไปนี้
-กรุณาเลือกว่าคุณจะอนุญาติหรือไม่</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
+ <source>Deny All</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Deny access</source>
+ <source>Disable for this site</source>
<translation type="unfinished"/>
</message>
</context>
@@ -575,194 +604,233 @@ Please select whether you want to allow access.</source>
<message>
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
- <translation>คุณเปิดหลายฐานข้อมูล กรุณาเลือกฐานข้อมูลที่ถูกต้องเพื่อบันทึกข้อมูลประจำตัวเพื่ิอเข้าระบบ</translation>
+ <translation>คุณเปิดหลายฐานข้อมูล กรุณาเลือกฐานข้อมูลที่ถูกต้องเพื่อบันทึกข้อมูลของคุณ</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>กล่องโต้ตอบ</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC คำขอกุญแจที่เชื่อมโยงใหม่</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>การเข้าถึงฐานข้อมูลของคุณจำเป็นต้องเข้าผ่านเบราว์เซอร์ KeePassXC</translation>
+ <source>Save and allow access</source>
+ <translation>บันทึกและอนุญาติให้เข้าถึง</translation>
</message>
<message>
- <source>General</source>
- <translation>ทั่วไป</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC เขียนทับกุญแจที่มีอยู่เดิม</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>เปิดใช้การผสานกับเบราว์เซอร์เหล่านี้:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>กุญแจถอดรหัสลับที่ถูกแบ่งปันด้วยชื่อ &quot;%1&quot; มีอยู่ก่อนแล้ว
+คุณต้องการจะเขียนทับมันหรือไม่</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC ปรับปรุงรายการ</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>เธอต้องการจะปรับปรุงข้อมูลให้ทันสมัยใน %1 - %2 หรือไม่</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>หยุด</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>กำลังแปลงคุณสมบัติต่างๆเป็นข้อมูลที่กำหนดเอง ...</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>แสดงการแจ้งเตือนเมื่อต้องการข้อมูลประจำตัวสำหรับเข้าระบบ</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: แปลงคุณลักษณะของ KeePassHTTP </translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>คำร้องเพื่อปลดล็อคฐานข้อมูล หากถูกล็อคอยู่</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>แปลงคุณสมบัติจากรายการ %1 สำเร็จ
+ย้าย %2 กุญแจไปยังข้อมูลที่กำหนดเอง</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>ย้ายกุญแจ %n ไปยังข้อมูลที่กำหนดเองได้สำเร็จ</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>ข้อมูลรูปแบบเดียวกัันเท่านั้น (http://, https://, ...) จะถูกส่งคืน</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC ไม่พบรายการที่มีคุณสมบัติ KeePassHTTP</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>รูปแบบ URL ตรงกัน (เช่น https://...) ตรงกัน</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>ฐานข้อมูลที่ยังใช้งานอยู่ไม่มีรายการตามคุณสมบัติ KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>ย้อนกลับเฉพาะเมื่อ URL นั้น ๆ ตรงกันมากที่สุด ไม่ใช่เมืื่อมีข้อมูลทั้งหมดสำหรับโดเมน</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC ตรวจพบการตั้งค่าการรวมเบราว์เซอร์ดั้งเดิม</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>คืนกลับเมื่อข้อมูลประจำตัวกันตรงกันที่สุด</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC สร้างกลุ่มใหม่</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>เรียงลำดับข้อมูลประจำตัวตามหัวข้อ</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>ได้รับคำขอสำหรับการสร้างกลุ่มใหม่ &quot;%1&quot;.
+คุณต้องการสร้างกลุ่มนี้หรือ?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>เรียงลำดับข้อมูลประจำตัวตามชื่อผู้ใช้</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>การตั้งค่าเบราว์เซอร์ KeePassXC ของคุณต้องถูกย้ายไปสู่การตั้งค่าฐานข้อมูล นี่จำเป็นต่อการรักษาการเชื่อมต่อเบราว์เซอร์ปัจจุบันของคุณ คุณต้องการย้ายการตั้งค่าที่มีอยู่แล้วตอนนี้หรือไม่</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>ขั้นสูง</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>ไม่ต้องแสดงคำเตือนนี้อีก</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>ไม่เคย &amp; ถามก่อนการเข้าถึงเอกสารรับรอง</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation type="unfinished"/>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>ไม่เคย &amp; ถามก่อนการอัปโหลดเอกสารรับรอง</translation>
+ <source>Dialog</source>
+ <translation>หน้าต่าง</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Searc&amp;h ในฐานข้อมูลทีเปิดแล้วเพื่อจับคู่กับข้อมูลประจำตัว</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>สิ่งนี้จำเป็นเพื่อการเข้าถึงฐานข้อมูลผ่านเบราว์เซอร์ KeePassXC</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>ไม่รองรับการสร้างหรืออัพเดท string fields โดยอัตโนมัติ</translation>
+ <source>Enable browser integration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&amp;ส่งคืน string fields ขั้นสูงที่เริ่มต้นด้วย &quot;KPH:&quot;</translation>
+ <source>General</source>
+ <translation>ทั่วไป</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>ปรับปรุงข้อมูล KeePassXC หรือคู่ keepassxc-proxy ให้ทันสมัยโดยอัตโนมัติไปยังการส่งข้อความฉบับดั้งเดิมเมื่อเริ่มต้น</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>ปรับปรุงข้อมูลให้ทันสมัยและ ข้อความฉบับดั้งเดิมให้ปรากฏเมื่อเริ่มต้น</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>เปิดการใช้เบราว์เซอร์เหล่านี้ร่วมกับ</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>สนับสนุน proxy application ระหว่าง KeePassXC และเบราว์เซอร์ส่วนขยาย </translation>
+ <source>Vivaldi</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>ใช้ proxy application ระหว่าง KeePassXC และเบราว์เซอร์ส่วนขยาย</translation>
+ <source>&amp;Edge</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>ใช้สนับสนุน proxy application หากคุณติดตั้งพรอกซีด้วยตนเอง</translation>
+ <source>Firefox</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>ใช้ &amp;ตำแหน่งพร็อกซีที่กำหนดเอง</translation>
+ <source>Tor Browser</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>ดู...</translation>
+ <source>Brave</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;คำเตือน:&lt;/b&gt; ตัวเลือกดังต่อไปนี้อาจจะอันตราย!</translation>
+ <source>Google Chrome</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>เลือกตำแหน่งพร็อกซีที่กำหนดเอง</translation>
+ <source>Chromium</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Browser</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>ไฟล์ปฏิบัติการ</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>ไฟล์ทั้งหมด</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>ข้อมูลรูปแบบเดียวกันเท่านั้น (http://, https://, ...) จะถูกส่งคืน</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>ไ่ม่ถามเพื่อขออนุญาติสำหรับ HTTP และBasic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>เนื่องจาก Snap sandbox คุณต้องเรียกใช้สคริปต์เพื่อเปิดใช้งานการรวมเบราว์เซอ.&lt;br /&gt;คุณสามารถรับสคริปต์นี้จาก% 1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>ส่งคืนรายการเฉพาะที่ตรงกับ URL มากที่สุด แทนที่จะส่งคืนรายการทั้งหมดของทั้งโดเมน</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>โปรดดูคำแนะนำพิเศษสำหรับการใช้งานส่วนขยายเบราว์เซอร์ด้านล่าง</translation>
+ <source>Return only best-matching credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>KeePassXC-Browser เป็นสิ่งจำเป็นสำหรับการทำงานร่วมกับเบราว์เซอร์ &lt;br /&gt;Download มันสำหรับ %1 และ %2. %3 </translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Brave</source>
+ <source>Allow returning expired credentials</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <source>All databases connected to the extension will return matching credentials.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
<translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
+ <source>Advanced</source>
+ <translation>ขั้นสูง</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>ไม่รองรับการสร้างหรืออัพเดท string fields โดยอัตโนมัติ</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"/>
</message>
<message>
@@ -770,112 +838,109 @@ Please select the correct database for saving credentials.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Custom proxy location field</source>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>ปรับปรุงข้อมูล KeePassXC หรือเส้นทางของไบนารี keepassxc-proxy โดยอัตโนมัติไปยังการส่งข้อความฉบับดั้งเดิมเมื่อเริ่มต้น</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for custom proxy file</source>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>ใช้พร็อกซีแบบกำหนดเอง ในกรณีที่คุณติดตั้งพร็อกซีด้วยตนเอง</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
+ <source>Custom proxy location field</source>
<translation type="unfinished"/>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: คำขอกุญแจที่เชื่อมโยงใหม่</translation>
+ <source>Browser for custom proxy file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>บันทึกและอนุญาติให้เข้าถึง</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>เรียกดู...</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: เขียนทับกุญแจที่มีอยู่เดิม?</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>กุญแจถอดรหัสลับที่ถูกแบ่งปันด้วยชื่อ &quot;%1&quot; already exists.
-เธอต้องการจะเขียนทับมันหรือไม่?</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: ปรับปรุงรายการ</translation>
+ <source>Toolbar button style</source>
+ <translation>รูปแบบปุ่มบนแถบเครื่องมือ</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>เธอต้องการจะปรับปรุงข้อมูลให้ทันสมัยใน %1 - %2 หรือไม่?</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>หยุด</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>กำลังแปลงคุณสมบัติต่างๆเป็นข้อมูลที่กำหนดเอง ...</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: แปลงคุณลักษณะของ KeePassHTTP </translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>แปลงคุณลักษณะจากรายการ% 1 สำเร็จ
-ย้าย % 2 กุญแจไปยังข้อมูลที่กำหนดเอง</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <message>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: ไม่พบรายการที่มีคุณสมบัติ KeePassHTTP!</translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>เนื่องจาก Snap sandbox คุณต้องเรียกใช้สคริปต์เพื่อเปิดใช้งานการรวมเบราว์เซอร์ &lt;br /&gt; คุณสามารถรับสคริปต์นี้จาก %1</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>ฐานข้อมูลที่ยังใช้งานอยู่ไม่มีรายการตามคุณสมบัติ KeePassHTTP.</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: ตรวจพบการตั้งค่าการรวมเบราว์เซอร์ดั้งเดิม</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>โปรดดูคำแนะนำพิเศษสำหรับการใช้งานส่วนขยายเบราว์เซอร์ด้านล่าง</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: สร้างกลุ่มใหม่</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>ได้รับคำขอสำหรับการสร้างกลุ่มใหม่ &quot;%1&quot;.
-คุณต้องการสร้างกลุ่มนี้หรือ?
-</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt; คำเตือน &lt;/b&gt; ตัวเลือกต่อไปนี้อาจจะอันตราย</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>การตั้งค่าเบราว์เซอร์ KeePassXC ของคุณต้องถูกย้ายไปสู่การตั้งค่าฐานข้อมูล นี่จำเป็นต่อการรักษาการเชื่อมต่อเบราว์เซอร์ปัจจุบันของคุณ คุณต้องการย้ายการตั้งค่าที่มีอยู่แล้วตอนนี้หรือไม่</translation>
+ <source>Executable Files</source>
+ <translation>ไฟล์ปฏิบัติการ</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>ไม่ต้องแสดงคำเตือนนี้อีก</translation>
+ <source>All Files</source>
+ <translation>ไฟล์ทั้งหมด</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
+ <source>Select custom proxy location</source>
+ <translation>เลือกตำแหน่งพร็อกซีที่กำหนดเอง</translation>
+ </message>
+ <message>
+ <source>Select native messaging host folder location</source>
<translation type="unfinished"/>
</message>
</context>
@@ -887,11 +952,11 @@ chrome-laptop.</source>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>เติม &apos;- โคลน&apos; ต่อท้ายชื่อ</translation>
+ <translation>เติม &apos;- Clone&apos; ต่อท้ายชื่อ</translation>
</message>
<message>
<source>Replace username and password with references</source>
- <translation>แทนที่ชื่อผู้ใช้และรหัสผ่านด้วยการอ้างอิง</translation>
+ <translation>แทนที่ชื่อผู้ใช้และรหัสผ่านด้วยข้อมูลอ้างอิง</translation>
</message>
<message>
<source>Copy history</source>
@@ -906,7 +971,7 @@ chrome-laptop.</source>
</message>
<message>
<source>filename</source>
- <translation>ชื่อแฟ้ม</translation>
+ <translation>ชื่อไฟล์</translation>
</message>
<message>
<source>size, rows, columns</source>
@@ -933,10 +998,6 @@ chrome-laptop.</source>
<translation>บันทึกความเห็นเริ่มต้นด้วย</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>เรคคอร์ดแรกมีชื่อฟิลด์</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>ให้นับ &apos;\&apos; เป็น escape character</translation>
</message>
@@ -945,45 +1006,29 @@ chrome-laptop.</source>
<translation>ดูตัวอย่าง</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>เค้าโครงคอลัมน์</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>ไม่ปรากฏในไฟล์ CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
- <translation>นำเข้าจากแฟ้ม CSV แล้ว</translation>
+ <translation>นำเข้าจากไฟล์ CSV แล้ว</translation>
</message>
<message>
<source>Original data: </source>
- <translation>ข้อมูลต้นฉบับ:</translation>
+ <translation>ข้อมูลต้นฉบับ</translation>
</message>
<message>
<source>Error</source>
<translation>ผิดพลาด</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>ล้าง fieldname %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>คอลัมน์ %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>ตรวจพบข้อผิดพลาดในไฟล์ CSV</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>[อีก %n ข้อความถูกข้าม]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>นำเข้า CSV: ผู้เขียนมีข้อผิดพลาด: %1</translation>
+ <translation>นำเข้า CSV ผู้เขียนมีข้อผิดพลาด %1</translation>
</message>
<message>
<source>Text qualification</source>
@@ -1001,6 +1046,58 @@ chrome-laptop.</source>
<source>CSV import preview</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>ถูกแก้ไขล่าสุด</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>รหัสผ่าน</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>ถูกสร้าง</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>บันทึก</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>หัวข้อ</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>กลุ่ม</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>ชื่อผู้ใช้</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1015,7 +1112,7 @@ chrome-laptop.</source>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
- <translation><numerusform>%n ไบต์</numerusform></translation>
+ <translation><numerusform>%n ไบท์</numerusform></translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
@@ -1025,11 +1122,6 @@ chrome-laptop.</source>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>รูต</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>ไม่มีไฟล์ %1 </translation>
</message>
@@ -1070,6 +1162,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>ถังขยะ</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>รหัสผ่าน</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1082,15 +1187,15 @@ Backup database located at %2</source>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>แฟ้มกุญแจ:</translation>
+ <translation>ไฟล์กุญแจคือ</translation>
</message>
<message>
<source>Refresh</source>
- <translation>เรียกใหม่</translation>
+ <translation>รีเฟรช</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>นามสกุลไฟล์แบบดั้งเดิมของแฟ้มกุญแจ</translation>
+ <translation>รูปแบบไฟล์กุญแจแบบดั้งเดิม</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
@@ -1107,25 +1212,21 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>All files</source>
- <translation>ทุกแฟ้ม</translation>
+ <translation>ทุกไฟล์</translation>
</message>
<message>
<source>Key files</source>
- <translation>แฟ้มกุญแจ</translation>
+ <translation>ไฟล์กุญแจ</translation>
</message>
<message>
<source>Select key file</source>
- <translation>เลือกแฟ้มกุญแจ</translation>
+ <translation>เลือกไฟล์กุญแจ</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
<translation>ไม่สามารถเปิดแฟ้มกุญแจได้: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>ปลดล็อกฐานข้อมูล KeePassXC</translation>
</message>
@@ -1138,14 +1239,6 @@ Please consider generating a new key file.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Key file selection</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation type="unfinished"/>
</message>
@@ -1179,7 +1272,7 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Clear Key File</source>
- <translation type="unfinished"/>
+ <translation>ล้างแฟ้มกุญแจ</translation>
</message>
<message>
<source>Unlock failed and no password given</source>
@@ -1206,28 +1299,44 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <source>Key file help</source>
+ <translation>ช่วยเหลือเรื่องแฟ้มกุญแจ</translation>
+ </message>
+ <message>
+ <source>?</source>
+ <translation>?</translation>
+ </message>
+ <message>
+ <source>Cannot use database file as key file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Key file help</source>
+ <source>You cannot use your database file as a key file.
+If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>?</source>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Select key file...</source>
+ <source>Key file to unlock the database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Cannot use database file as key file</source>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>กรุณาแตะปุ่มบน YubiKey ของคุณ!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>You cannot use your database file as a key file.
-If you do not have a key file, please leave the field empty.</source>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1250,20 +1359,20 @@ If you do not have a key file, please leave the field empty.</source>
</message>
<message>
<source>Security</source>
- <translation>ความมั่นคง</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation>กุญแจมาสเตอร์</translation>
+ <translation>การรักษาความปลอดภัย</translation>
</message>
<message>
<source>Encryption Settings</source>
- <translation>การตั้งค่าการเข้ารหัส</translation>
+ <translation>การตั้งค่าการเข้ารหัสลับ</translation>
</message>
<message>
<source>Browser Integration</source>
<translation>การทำงานร่วมกับเบราว์เซอร์</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1272,24 +1381,12 @@ If you do not have a key file, please leave the field empty.</source>
<translation>การตั้งค่าของเบราว์เซอร์ KeePassXC</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ (&amp;D)</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>ไม่จดจำการตั้งค่าเฉพาะสำหรับทุกไซต์บนรายการ</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>ย้ายลักษณะ KeePassHTTP ไปยังKeePassXC-Browser และข้อมูลตามคำสั่ง</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>กุญแจที่ถูกเก็บไว้</translation>
</message>
<message>
<source>Remove</source>
- <translation>นำออก</translation>
+ <translation>ลบ</translation>
</message>
<message>
<source>Delete the selected key?</source>
@@ -1311,11 +1408,11 @@ This may prevent connection to the browser plugin.</source>
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>เปิด Browser Integration เพื่อเข้าถึงการตั้งค่านี้</translation>
+ <translation>เปิดการใช้ Browser Integration เพื่อเข้าถึงการตั้งค่านี้</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>ตัดการเชื่อมต่อกับทุกเบราว์เซอร์</translation>
+ <translation>หยุดการเชื่อมต่อกับทุกเบราว์เซอร์</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
@@ -1337,11 +1434,11 @@ This may prevent connection to the browser plugin.</source>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ลบ %n กุญแจเข้ารหัสลับจากการตั้งค่า KeePassXC สำเร็จ</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>ไม่จำการตั้งค่าเฉพาะไซต์บนรายการ</translation>
+ <translation>ไม่จำการตั้งค่าเฉพาะสำหรับทุกไซต์บนรายการ</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
@@ -1351,23 +1448,23 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>ลบการอนุญาติที่เก็บไว้ออก</translation>
+ <translation>กำลังลบการอนุญาตที่บันทึกออก</translation>
</message>
<message>
<source>Abort</source>
- <translation>หยุด</translation>
+ <translation> ยกเลิกการทำงาน</translation>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: การอนุญาตถูกนำออก</translation>
+ <translation>KeePassXC: การอนุญาตถูกลบออก</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ลบการอนุญาตจากรายการ %n</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC: ไม่มีรายการที่ได้รับอนุญาติ</translation>
+ <translation>KeePassXC: ไม่มีรายการที่ได้รับอนุญาต</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
@@ -1380,7 +1477,7 @@ Permissions to access entries will be revoked.</source>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>คุณต้องการทีีจะย้ายข้อมูลผสานในเบราว์เซอร์แบบตั้งเดิมไปยังมาตรฐานล่าสุดจริง ๆ หรอ นี่เป็นสิ่งจำเป็นในการรักษาความเข้ากับโปรแกรเสริมของเบราว์เซอร์</translation>
+ <translation>คุณต้องการที่จะย้ายข้อมูลผสานในเบราว์เซอร์แบบเดิมไปยังมาตรฐานล่าสุดจริงหรือ นี่เป็นสิ่งที่จำเป็นในการรักษาความเข้ากับโปรแกรเสริมของเบราว์เซอร์</translation>
</message>
<message>
<source>Stored browser keys</source>
@@ -1388,6 +1485,66 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>Remove selected key</source>
+ <translation>ลบกุญแจที่เลือก</translation>
+ </message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>ถูกสร้าง</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>เพิ่มเติมส่วนป้องกันเพิ่มเติม</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>รหัสผ่านยังไม่ได้ติดตั้ง</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>คำเตือน! คุณยังไม่ได้ตั้งรหัสผ่าน. การใช้ฐานข้อมูลโดยไม่ใช้รหัสผ่านเป็นเรื่องที่ไม่สนับสนุนเป็นอย่างยิ่ง
+
+คุณแน่ใจหรือไม่ที่จะดำเนินการต่อโดยไม่ใช้รหัสผ่าน?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>ไม่มีกุญแจถอดรหัสลับที่เพิ่มเข้ามา</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>คุณต้องเพิ่มกุญแจเปิดรหัสลับอย่างน้อย 1 อันเพื่อป้องกันฐานข้อมูลของคุณ</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>ความผิดพลาดที่ไม่อาจระบุได้</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1399,7 +1556,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES: 256 บิต (ค่าปริยาย)</translation>
+ <translation>AES: 256 บิต (ค่าเริ่มต้น)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
@@ -1411,15 +1568,11 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>Transform rounds:</source>
- <translation>รอบเปลี่ยนรูป:</translation>
- </message>
- <message>
- <source>Benchmark 1-second delay</source>
- <translation>เกณฑ์มาตรฐานล่าช้า 1 วินาที</translation>
+ <translation>รอบเปลี่ยนรูป</translation>
</message>
<message>
<source>Memory Usage:</source>
- <translation>ปริมาณความจำที่ใช้</translation>
+ <translation>การใช้หน่วยความจำ</translation>
</message>
<message>
<source>Parallelism:</source>
@@ -1438,14 +1591,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>เปลี่ยนแปลง</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 มิลลิวินาที</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 วินาที</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>ค่าที่สูงกว่าจะมีการป้องกันมากกว่า แต่จะใช้เวลาในการเปิดฐานข้อมูลนานกว่า</translation>
</message>
@@ -1459,13 +1604,11 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>KDBX 4.0 (recommended)</source>
- <translation>KDBX 4.0 (แนะนำ)
-</translation>
+ <translation>KDBX 4.0 (แนะนำ)</translation>
</message>
<message>
<source>KDBX 3.1</source>
- <translation>KDBX 3.1
-</translation>
+ <translation>KDBX 3.1</translation>
</message>
<message>
<source>unchanged</source>
@@ -1475,7 +1618,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>จำนวนรอบมากเกินไป</translation>
+ <translation>จำนวนรอบยาวเกินไป</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
@@ -1502,7 +1645,7 @@ If you keep this number, your database may take hours or days (or even longer) t
If you keep this number, your database may be too easy to crack!</source>
<translation>คุณกำลังใช้จำนวนของรอบการแปลงกุญแจกับ AES-KDF ต่ำ
-ถ้าคุณใช้จำนวนนี้ ฐานข้อมูลของคุณอาจจะถูกถอดได้ง่าย</translation>
+ถ้าคุณใช้จำนวนนี้ ฐานข้อมูลของคุณอาจจะถูกถอดได้อย่างง่าย</translation>
</message>
<message>
<source>KDF unchanged</source>
@@ -1515,22 +1658,12 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>MiB</numerusform></translation>
+ <translation><numerusform> MiB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>thread</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 มิลลิวินาที</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 วินาที</numerusform></translation>
+ <translation><numerusform>thread(s)</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1538,15 +1671,15 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Decryption time in seconds</source>
- <translation type="unfinished"/>
+ <translation>เวลาถอดรหัสลับ หน่วยเป็นวินาที</translation>
</message>
<message>
<source>Database format</source>
- <translation type="unfinished"/>
+ <translation>รูปแบบฐานข้อมูล</translation>
</message>
<message>
<source>Encryption algorithm</source>
- <translation type="unfinished"/>
+ <translation>อัลกอริทึมการเข้ารหัสลับ</translation>
</message>
<message>
<source>Key derivation function</source>
@@ -1558,12 +1691,20 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Memory usage</source>
- <translation type="unfinished"/>
+ <translation>หน่วยความจำที่ใช้</translation>
</message>
<message>
<source>Parallelism</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1572,15 +1713,15 @@ If you keep this number, your database may be too easy to crack!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
+ <source>Expose entries under this group:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
+ <source>Enable Secret Service to access these settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1592,15 +1733,15 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Database name:</source>
- <translation>ชื่อฐานข้อมูล:</translation>
+ <translation>ชื่อฐานข้อมูล</translation>
</message>
<message>
<source>Database description:</source>
- <translation>รายละเอียดฐานข้อมูล:</translation>
+ <translation>รายละเอียดฐานข้อมูล</translation>
</message>
<message>
<source>Default username:</source>
- <translation>ชื่อผู้ใช้มาตรฐาน:</translation>
+ <translation>ค่าเริ่มต้นของชื่อผู้ใช้</translation>
</message>
<message>
<source>History Settings</source>
@@ -1608,15 +1749,15 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Max. history items:</source>
- <translation>จำนวนมากสุดของรายการประวัติ:</translation>
+ <translation>จำนวนมากสุดของรายการประวัติ</translation>
</message>
<message>
<source>Max. history size:</source>
- <translation>ขนาดมากสุดของรายการประวัติ:</translation>
+ <translation>ขนาดมากสุดของรายการประวัติ</translation>
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation>MiB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1627,20 +1768,16 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>การตั้งค่าฐานข้อมูลเพิ่มเติม</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>การเปิดใช้งานและการบีบอัด (แนะนำ)</translation>
- </message>
- <message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>ช่องข้อมูลชื่อฐานข้อมูล</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
+ <translation>ช่องข้อมูลคำอธิบายฐานข้อมูล</translation>
</message>
<message>
<source>Default username field</source>
- <translation type="unfinished"/>
+ <translation>ช่องข้อมูลชื่อผู้ใช้ฐานข้อมูล</translation>
</message>
<message>
<source>Maximum number of history items per entry</source>
@@ -1652,7 +1789,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Delete Recycle Bin</source>
- <translation type="unfinished"/>
+ <translation>ลบถังขยะ</translation>
</message>
<message>
<source>Do you want to delete the current recycle bin and all its contents?
@@ -1661,6 +1798,10 @@ This action is not reversible.</source>
</message>
<message>
<source> (old)</source>
+ <translation> (เก่า)</translation>
+ </message>
+ <message>
+ <source>Enable compression (recommended)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1697,180 +1838,22 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>เพิ่มเติมส่วนป้องกันเพิ่มเติม</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>ไม่มีกุญแจถอดรหัสลับที่เพิ่มเข้ามา</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>คุณต้องเพิ่มกุญแจเปิดรหัสลับอย่างน้อย 1 อันเพื่อป้องกันฐานข้อมูลของคุณ</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>รหัสผ่านยังไม่ได้ติดตั้ง</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>คำเตือน! คุณยังไม่ได้ตั้งรหัสผ่าน. การใช้ฐานข้อมูลโดยไม่ใช้รหัสผ่านเป็นเรื่องที่ไม่สนับสนุนเป็นอย่างยิ่ง
-
-คุณแน่ใจหรือไม่ที่จะดำเนินการต่อโดยไม่ใช้รหัสผ่าน?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>ความผิดพลาดที่ไม่รู้จัก</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>การเปลี่ยนแปลงกุญแจหลักล้มเหลว</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
- <translation>ชื่อฐานข้อมูล:</translation>
+ <translation>ชื่อฐานข้อมูล</translation>
</message>
<message>
<source>Description:</source>
- <translation>รายละเอียด:</translation>
+ <translation>รายละเอียด</translation>
</message>
<message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>ช่องข้อมูลชื่อฐานข้อมูล</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Name</source>
- <translation>ชื่อ</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>ค่า</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Description</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Location</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Last saved</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>yes</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>no</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>%1 characters</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
+ <translation>ช่องข้อมูลคำอธิบายฐานข้อมูล</translation>
</message>
</context>
<context>
@@ -1881,7 +1864,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>All files</source>
- <translation>ทุกแฟ้ม</translation>
+ <translation>ทุกไฟล์</translation>
</message>
<message>
<source>Open database</source>
@@ -1889,7 +1872,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>CSV file</source>
- <translation>แฟ้ม CSV</translation>
+ <translation>ไฟล์ CSV</translation>
</message>
<message>
<source>Merge database</source>
@@ -1905,11 +1888,11 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>ส่งออกฐานข้อมูลเป็นแฟ้ม CSV</translation>
+ <translation>ส่งออกฐานข้อมูลเป็นไฟล์ CSV</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>การเขียนแฟ้ม CSV ล้มเหลว</translation>
+ <translation>การเขียนไฟล์ CSV ล้มเหลว</translation>
</message>
<message>
<source>Database creation error</source>
@@ -1932,17 +1915,17 @@ This is definitely a bug, please report it to the developers.</source>
<message>
<source>%1 [New Database]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [New Database]</translation>
+ <translation>%1 [ฐานข้อมูลใหม่]</translation>
</message>
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Locked]</translation>
+ <translation>%1 [ถูกล็อก]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Read-only]</translation>
+ <translation>%1 [อ่านอย่างเดียว]</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
@@ -1954,7 +1937,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>HTML file</source>
- <translation type="unfinished"/>
+ <translation>แฟ้ม HTML</translation>
</message>
<message>
<source>Writing the HTML file failed.</source>
@@ -1968,16 +1951,20 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>ค้นหา...</translation>
+ <translation>กำลังค้นหา</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>คุณต้องการจะลบรายการ &quot;%1&quot; ให้หายไปตลอดกาลจริงๆ?</translation>
+ <translation>คุณต้องการจะลบรายการ &quot;%1&quot; ให้หายไปอย่างถาวรจริงหรือไม่</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
@@ -1985,7 +1972,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>คุณต้องการจะลบ %n รายการไปยังถังขยะจริงหรือไม่</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -1997,23 +1984,23 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Remember my choice</source>
- <translation>จำที่ฉันเลือก</translation>
+ <translation>จำสิ่งที่ฉันเลือก</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>คุณต้องการจะลบกลุ่ม &quot;%1&quot; ไปตลอดกาลจริงหรือ?</translation>
+ <translation>คุณต้องการจะลบกลุ่ม &quot;%1&quot; ให้หายไปอย่างถาวรจริงหรือไม่</translation>
</message>
<message>
<source>No current database.</source>
- <translation>ไม่มีฐานข้อมูลขณะนี้</translation>
+ <translation>ไม่มีฐานข้อมูลปัจจุบัน</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
- <translation>ไม่มีฐานข้อมูลต้นทาง ไม่มีงานให้ทำ</translation>
+ <translation>ไม่มีฐานข้อมูลต้นทาง ไม่ต้องทำอะไร</translation>
</message>
<message>
<source>Search Results (%1)</source>
- <translation>ผลลัพธ์การค้นหา (%1)</translation>
+ <translation>ผลการค้นหา (%1)</translation>
</message>
<message>
<source>No Results</source>
@@ -2021,7 +2008,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>File has changed</source>
- <translation>ไฟล์เปลี่ยนแปลงไปแล้ว</translation>
+ <translation>ไฟล์เปลี่ยนไปแล้ว</translation>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
@@ -2029,7 +2016,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Merge Request</source>
- <translation>ผสานคำร้อง</translation>
+ <translation>คำร้องเพื่อผสาน</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
@@ -2039,7 +2026,7 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>Empty recycle bin?</source>
- <translation>ล้างถังขยะ</translation>
+ <translation>ล้างถังขยะหรือไม่</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
@@ -2047,15 +2034,15 @@ Do you want to merge your changes?</source>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>คุณต้องการจะลบ %n รายการอย่างถาวรหรือไม่</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ลบรายการหรือไม่</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ย้ายรายการไปยังถังขยะหรือไม่</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2063,13 +2050,13 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>กำลังอยู่ในระหว่างแก้ไขรายการ คุณต้องการจะยกเลิกและล็อคตอนนี้จริงหรือไม่</translation>
+ <translation>กำลังอยู่ในระหว่างแก้ไขรายการ คุณต้องการจะยกเลิกการแก้ไขและล็อคตอนนี้จริงหรือไม่</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>&quot;%1&quot; ถูกแก้ไข
-บันทึกการเปลี่ยนแปลง?</translation>
+ <translation>&quot;%1&quot; ถูกแก้ไขแล้ว
+บันทึกการเปลี่ยนแปลงหรือไม่</translation>
</message>
<message>
<source>Database was modified.
@@ -2079,7 +2066,7 @@ Save changes?</source>
</message>
<message>
<source>Save changes?</source>
- <translation>บันทึกความเปลี่ยนแปลง?</translation>
+ <translation>บันทึกการเปลี่ยนแปลง?</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload.
@@ -2094,7 +2081,7 @@ Error: %1</source>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>KeePassXC ไม่สามารถบันทึกฐานข้อมูลแล้วหลายครั้ง สิ่งนี้อาจทำให้บริการเชื่อมโยงไฟล์ล็อคไฟล์ที่ถูกบัยทึกไว้แล้ว
+ <translation>KeePassXC ไม่สามารถบันทึกฐานข้อมูลแล้วหลายครั้ง สิ่งนี้อาจทำให้บริการเชื่อมโยงไฟล์ล็อคไฟล์ที่ถูกบันทึกไว้แล้ว
ปิดการบันทึกแบบปลอดภัยและลองอีกครั้งหรือไม่</translation>
</message>
<message>
@@ -2111,11 +2098,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Replace references to entry?</source>
- <translation>แทนที่การอ้างอิงของรายการหรือไม่</translation>
+ <translation>เปลี่ยนแหล่งอ้างอิงของรายการหรือไม่</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>รายการ &quot;%1&quot; มี %2 แหล่งอ้างอิง คุณต้องการจะเขียนทับแหล่งอ้างอิงด้วยค่า หรือข้ามรายการนี้ หรือต้องการลบหรือไม่</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2127,7 +2114,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>คุณต้องการย้ายกลุ่ม &quot;%1&quot;  ไปถังขยะจริงหรือไม่</translation>
+ <translation>คุณต้องการย้ายกลุ่ม &quot;%1&quot; ไปถังขยะจริงหรือไม่</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
@@ -2149,6 +2136,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2182,7 +2177,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>n/a</source>
- <translation>ไม่มีข้อมูล</translation>
+ <translation>n/a</translation>
</message>
<message>
<source>(encrypted)</source>
@@ -2193,14 +2188,6 @@ Disable safe saves and try again?</source>
<translation>เลือกกุญแจส่วนตัว</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>แฟ้มใหญ่เกินกว่าจะเป็นกุญแจส่วนตัว</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>ผิดพลาดระหว่างการเปิดกุญแจส่วนตัว</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>ประวัติรายการ</translation>
</message>
@@ -2213,10 +2200,6 @@ Disable safe saves and try again?</source>
<translation>แก้ไขรายการ</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>รหัสผ่านที่ให้มาไม่ตรงกัน</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>คุณสมบัติใหม่</translation>
</message>
@@ -2230,39 +2213,23 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n สัปดาห์</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>ใช้รหัสผ่านที่ถูกสร้างหรือไม่</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>คุณต้องการใช้รหัสผ่านที่ถูกสร้างในรายการนี้หรือไม่</translation>
+ <translation><numerusform>%n เดือน</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>รายการถูกอัปเดตสำเร็จแล้ว</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>รายการมีการเปลี่ยนแปลงที่ไม่ถูกบันทึก</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>คุณสมบัติใหม่ %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[ถูกป้องกัน] กดเปิดเผยเพื่อดูหรือแก้ไข</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n ปี</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
@@ -2280,6 +2247,26 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>เปิดเผย</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
@@ -2355,6 +2342,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2363,14 +2358,6 @@ Disable safe saves and try again?</source>
<translation>เปิดใช้ Auto -Type สำหรับรายการนี้</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>รับช่วงลำดับการตั้งค่าเริ่มต้นAuto-Typeจาก&amp;กลุ่ม</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;ใช้ลำดับการตั้งค่าเริ่มต้น Auto-Type</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>หน้าต่างการเชื่อมโยง</translation>
</message>
@@ -2384,7 +2371,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Window title:</source>
- <translation>หัวเรื่องของหน้าต่าง:</translation>
+ <translation>หัวเรื่องของหน้าต่าง</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
@@ -2426,6 +2413,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2461,6 +2456,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2509,19 +2512,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Password:</source>
- <translation>รหัสผ่าน:</translation>
- </message>
- <message>
- <source>Repeat:</source>
- <translation>ทำซ้ำ:</translation>
+ <translation>รหัสผ่าน</translation>
</message>
<message>
<source>Title:</source>
- <translation>หัวเรื่อง:</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>บันทึก</translation>
+ <translation>หัวเรื่อง</translation>
</message>
<message>
<source>Presets</source>
@@ -2533,11 +2528,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Username:</source>
- <translation>ชื่อผู้ใช้:</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>หมดอายุ</translation>
+ <translation>ชื่อผู้ใช้งาน</translation>
</message>
<message>
<source>Url field</source>
@@ -2548,22 +2539,10 @@ Disable safe saves and try again?</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Repeat password field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2595,6 +2574,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>บันทึก</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2604,7 +2595,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>ลบกุญแจออกหลังจาก agent</translation>
+ <translation>ลบกุญแจออกจากตัวแทน</translation>
</message>
<message>
<source> seconds</source>
@@ -2616,7 +2607,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>ลบกุญแจออกจาก agent เมือฐานข้อมูลถูกปิดหรือล๊อค</translation>
+ <translation>ลบกุญแจออกจากตัวแทน เมือฐานข้อมูลถูกปิดหรือล๊อค</translation>
</message>
<message>
<source>Public key</source>
@@ -2624,11 +2615,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>เพิ่มกุญแจไปยังAgent เมื่อฐานข้อมูลถูกเปิดออกหรือถูกปลดล๊อด</translation>
+ <translation>เพิ่มกุญแจไปยังตัวยแทน เมื่อฐานข้อมูลถูกเปิดออกหรือถูกปลดล๊อด</translation>
</message>
<message>
<source>Comment</source>
- <translation>ความเห็น</translation>
+ <translation>ข้อคิดเห็น</translation>
</message>
<message>
<source>Decrypt</source>
@@ -2640,7 +2631,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>คัดลอกไปยังคลิปบอร์ด:</translation>
+ <translation>คัดลอกไปยังคลิปบอร์ด</translation>
</message>
<message>
<source>Private key</source>
@@ -2653,7 +2644,7 @@ Disable safe saves and try again?</source>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>ดู...</translation>
+ <translation>เรียกดู...</translation>
</message>
<message>
<source>Attachment</source>
@@ -2720,7 +2711,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Inherit from parent group (%1)</source>
- <translation>รับช่วงจากกลุ่มหลัก</translation>
+ <translation>รับช่วงจากกลุ่มหลัก (%1)</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
@@ -2730,10 +2721,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>จาก</translation>
- </message>
- <message>
<source>Type:</source>
<translation>ชนิด</translation>
</message>
@@ -2742,12 +2729,8 @@ Disable safe saves and try again?</source>
<translation>เส้นทาง</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
- <translation>รหัสผ่าน:</translation>
+ <translation>รหัสผ่าน</translation>
</message>
<message>
<source>Inactive</source>
@@ -2755,15 +2738,15 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation>ที่จัดเก็บที่ไม่ได้เซ็นไว้KeeShare</translation>
+ <translation>ที่จัดเก็บที่ไม่ได้เซ็นไว้ของ KeeShare</translation>
</message>
<message>
<source>KeeShare signed container</source>
- <translation>ที่จัดเก็บที่เซ็นไว้ของKeeShare</translation>
+ <translation>ที่จัดเก็บที่เซ็นไว้ของ KeeShare</translation>
</message>
<message>
<source>Select import source</source>
- <translation>เลือกนำเข้าฐานข้อมูล</translation>
+ <translation>เลือกนำฐานข้อมูลที่นำเข้า</translation>
</message>
<message>
<source>Select export target</source>
@@ -2828,96 +2811,84 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Clear fields</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password generator</source>
+ <source>Browse for share file</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <translation>เรียกดู...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>ชื่อ</translation>
+ <source>Name field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes</source>
- <translation>บันทึก</translation>
+ <source>Notes field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expires</source>
- <translation>หมดอายุ</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>ค้นหา</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Auto-Type</translation>
+ <source>Expiration field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;ใช้การตั้งค่าลำดับ Auto-Type เริ่มต้นจากกลุ่มหลัก</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>ตั้งค่าลำดับ Auto-Type เริ่มต้น</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
+ <source>Expires:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
+ <source>Use default Auto-Type sequence of parent group</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
+ <source>Search:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation type="unfinished"/>
+ <source>Notes:</source>
+ <translation>บันทึก</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>ใช้ไอคอนมาตรฐาน (&amp;U)</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>ใช้ไอคอนที่กำหนดเอง (&amp;M)</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>เพิ่มไอคอนที่กำหนดเอง</translation>
</message>
@@ -2931,7 +2902,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>ไม่สามารถดึง favicon ได้</translation>
+ <translation>ไม่สามารถดึงข้อมูล favicon ได้</translation>
</message>
<message>
<source>Images</source>
@@ -2951,7 +2922,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>การโหลดไอคอน %1 ของ %1 ประสบความสำเร็จ</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2959,15 +2930,15 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>%n ไอคอนมีอยู่แล้วในฐานข้อมูล</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ไอคอนต่อไปนี้ล้มเหลว</numerusform></translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ไอคอนนี้ถูกใช้โดย %n เอ็นทรี และจะถูกแทนที่ด้วยไอคอนตั้งต้น คุณแน่ใจหรือไม่ว่าคุณต้องการลบไอคอน</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2982,27 +2953,35 @@ Supported extensions are: %1.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
+ <source>Also apply to child entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3010,19 +2989,19 @@ Supported extensions are: %1.</source>
<name>EditWidgetProperties</name>
<message>
<source>Created:</source>
- <translation>สร้าง:</translation>
+ <translation>สร้าง</translation>
</message>
<message>
<source>Modified:</source>
- <translation>แก้ไข:</translation>
+ <translation>แก้ไข</translation>
</message>
<message>
<source>Accessed:</source>
- <translation>เข้าถึง:</translation>
+ <translation>เข้าถึง</translation>
</message>
<message>
<source>Uuid:</source>
- <translation>Uuid:</translation>
+ <translation>Uuid</translation>
</message>
<message>
<source>Plugin Data</source>
@@ -3040,7 +3019,7 @@ Supported extensions are: %1.</source>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
<translation>คุณต้องการลบข้อมูลโปรแกรมเสริมที่เลือกไว้หรือไม่
-การกระทำนี้อาจจะกระทบโปรแกรมเสริมให้ไม่ทำงาน</translation>
+การกระทำนี้อาจจะกระทบโปรแกรมเสริมให้ทำงานผิดพลาด</translation>
</message>
<message>
<source>Key</source>
@@ -3079,7 +3058,7 @@ This may cause the affected plugins to malfunction.</source>
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>ลอกแบบ</translation>
+ <translation>%1 -ลอกแบบ</translation>
</message>
</context>
<context>
@@ -3097,7 +3076,7 @@ This may cause the affected plugins to malfunction.</source>
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation>จาก</translation>
+ <translation>รูปแบบ</translation>
</message>
<message>
<source>Add</source>
@@ -3121,7 +3100,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>คุณแน่ใจหรือว่าคุณต้องการลบแฟ้มแนบ %n </numerusform></translation>
+ <translation><numerusform>คุณแน่ใจหรือไม่ว่าคุณต้องการลบไฟล์แนบ</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3166,8 +3145,7 @@ This may cause the affected plugins to malfunction.</source>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>ไม่สามารถเปิดแฟ้ม
-%1</numerusform></translation>
+ <translation><numerusform>ไม่สามารถเปิดไฟล์</numerusform></translation>
</message>
<message>
<source>Attachments</source>
@@ -3189,6 +3167,17 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3221,7 +3210,7 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Ref: </source>
<comment>Reference abbreviation</comment>
- <translation>อ้างอิง:</translation>
+ <translation>อ้างอิง</translation>
</message>
<message>
<source>Group</source>
@@ -3257,11 +3246,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Created</source>
- <translation>สร้าง</translation>
+ <translation>ถูกสร้าง</translation>
</message>
<message>
<source>Modified</source>
- <translation>แก้ไข้</translation>
+ <translation>แก้ไข</translation>
</message>
<message>
<source>Accessed</source>
@@ -3272,12 +3261,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>แฟ้มแนบ</translation>
</message>
<message>
- <source>Yes</source>
- <translation>ใช่</translation>
+ <source>Size</source>
+ <translation>ขนาด</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3377,6 +3406,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3403,8 +3439,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>เริ่มใหม่เป็นค่าเริ่มต้น</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>ไฟล์แนบ (ไอคอน)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3416,20 +3458,73 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>ชื่อแฟ้ม</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>กลุ่ม</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>จัดการ</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>ไม่มี</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>แอปพลิเคชัน</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>จัดการ</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>ไม่รู้จัก</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>ไม่รู้จัก</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3438,18 +3533,14 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>[empty]</source>
<comment>group has no children</comment>
- <translation>(ที่วาง)</translation>
+ <translation>(ที่ว่าง)</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: ไม่สามารถบันทึกแฟ้ม!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>ไม่สามารถบันทึกไฟล์สคริปการส่งข้อความดั้งเดิม</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3518,14 +3609,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>ไม่สามารถคำนวญกุญแมาสเตอร์ได้</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>ไม่สามารถส่งออก รหัสสอบถาม-รหัสตอบกลับ</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>ฐานข้อมูลส่วนหัวหายไป</translation>
</message>
@@ -3535,31 +3618,39 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Invalid header id size</source>
- <translation>ขนาด ID ส่วนหัวไม่ถูกต้อง</translation>
+ <translation>ขนาดบัญชีส่วนหัวไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>ความยาวฟิลด์ส่วนหัวไม่ถูกต้อง</translation>
+ <translation>ความยาวของฟิลด์ส่วนหัวไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>ความยาวข้อมูลส่วนหัวไม่ถูกต้อง</translation>
+ <translation>ความยาวของข้อมูลส่วนหัวไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>ไม่สามารถส่งออก รหัสสอบถาม-รหัสตอบกลับ</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ไม่สามารถคำนวญกุญแมาสเตอร์ได้</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3569,10 +3660,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>ฐานข้อมูลส่วนหัวหายไป</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ไม่สามารถคำนวญกุญแมาสเตอร์ได้</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>ขนาดผลรวมหัวข้อไม่ถูกต้อง</translation>
</message>
@@ -3598,7 +3685,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>การเปิดบัพเพอร์สำหรับพารามิเตอร์ในส่วนหัวล้มเหลว</translation>
+ <translation>ไม่สามารถเปิดบัฟเฟอร์สำหรับพารามิเตอร์ KDF ในส่วนต้น</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
@@ -3623,27 +3710,27 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>ไม่สนับKeePass รุ่นแผนที่ที่แตกต่าง </translation>
+ <translation>ไม่รองรับ KeePass รุ่น variant map</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>ความยาวชื่อรายการ variant map ไม่ถูกต้อง</translation>
+ <translation>ความยาวชื่อรายการ variant map ไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>ชื่อข้อมูล variant map ไม่ถูกต้อง</translation>
+ <translation> ข้อมูลชื่อรายการ variant map ไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>ใส่ความยาวรายการ variant map ไม่ถูกต้อง</translation>
+ <translation>ความยาวรายการ variant map ไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>ข้อมูลรายการ variant map ไม่ถูกต้อง</translation>
+ <translation>ข้อมูลรายการเริ่มต้น variant map ไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
@@ -3689,6 +3776,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3702,14 +3793,13 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>ขนาด IV การเข้ารหัสแบบสมมาตรไม่ถูกต้อง</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ไม่สามารถคำนวญกุญแมาสเตอร์ได้</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>ล้มเหลวในการลำดับแผนที่แปรผันพารามิเตอร์ KDF
- </translation>
+ <translation>ล้มเหลวในการลำดับแผนที่แปรผันพารามิเตอร์ KDF </translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3740,11 +3830,11 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation>ขนาดเริ่มต้นไบต์ไม่ถูกต้อง</translation>
+ <translation>ขนาดของไบต์เริ่มต้นไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid random stream id size</source>
- <translation>ขนาด ID สตรีมแบบสุ่มไม่ถูกต้อง</translation>
+ <translation>ขนาด ID สตรีมแบบสุ่มไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid inner random stream cipher</source>
@@ -3793,7 +3883,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>ไอคอน uuid หรือ ไอคอนข้อมูล หายไป</translation>
+ <translation>ไอคอน uuid หรือ ข้อมูล หายไป</translation>
</message>
<message>
<source>Missing custom data key or value</source>
@@ -3849,21 +3939,17 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>History element with different uuid</source>
- <translation>ประวัติขององค์ประกอบที่ uuid ต่างกัน</translation>
+ <translation>ประวัติของส่วนประกอบที่ uuid ต่างกัน</translation>
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>พบสำเนาคุณสมบัติที่กำหนดเอง</translation>
+ <translation>ค้นพบคัดลอกคุณสมบัติที่กำหนดเอง</translation>
</message>
<message>
<source>Entry string key or value missing</source>
<translation>รายการสายกุญแจหรือค่าที่หายไป</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>พบสำเนาเอกสารแนบ</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>รายการกุญแจไบนารีหรือค่าที่หายไป</translation>
</message>
@@ -3912,6 +3998,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>ไฟล์ใหญ่เกินกว่าจะเป็นกุญแจส่วนตัว</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>ล้มเหลวระหว่างการเปิดกุญแจส่วนตัว</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3963,7 +4072,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>จำนวนรอบของการเปลี่ยนแปลงไม่ถูกต้อง</translation>
+ <translation>การแปลงจำนวนรอบของการเปลี่ยนแปลงไม่ถูกต้อง</translation>
</message>
<message>
<source>Unable to construct group tree</source>
@@ -3974,40 +4083,36 @@ Line %2, column %3</source>
<translation>รูต</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>ไม่สามารถคำนวญกุญแมาสเตอร์ได้</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>การแปลงรหัสล้มเหลว</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>กลุ่มฟิลด์ประเภทตัวเลขไม่ถูกต้อง</translation>
+ <translation>กรุ๊ปตัวเลขฟิลด์ไทป์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid group field size</source>
- <translation>กลุ่มฟิลด์ขนาดไม่ถูกต้อง</translation>
+ <translation>ขนาดกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
- <translation>กลุ่มการอ่านข้อมูลฟิลด์จับคู่ไม่ได้ขนาด</translation>
+ <translation>ข้อมูลการอ่านกรุ๊ปฟิลด์ฟิลด์จับคู่ไม่ได้ขนาด</translation>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation>ขนาดกลุ่มตัวเลขขนาดไม่ถูกต้อง</translation>
+ <translation>ขนาดกรุ๊ปไอดีฟิลด์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Incorrect group creation time field size</source>
- <translation>ขนาดเวลาการสร้างกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
+ <translation>เวลาการสร้างกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation>ขนาดการแก้ไขเวลากรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
+ <translation>การแก้ไขเวลากรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Incorrect group access time field size</source>
- <translation>ขนาดเวลาการเข้าถึงกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
+ <translation>เวลาการเข้าถึงกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Incorrect group expiry time field size</source>
@@ -4019,7 +4124,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Incorrect group level field size</source>
- <translation>ขนาดของระดับกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
+ <translation>ขนาดเลเวลกรุ๊ปฟิลด์ไม่ถูกต้อง</translation>
</message>
<message>
<source>Invalid group field type</source>
@@ -4031,7 +4136,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>ตัวเลขนำเข้าฟิลด์ไทป์หายไป</translation>
+ <translation>ตัวเลขเอ็นทรีฟิลด์ไทป์หายไป</translation>
</message>
<message>
<source>Invalid entry field size</source>
@@ -4039,7 +4144,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>ขนาดการอ่านข้อมูลเอ็นทรีฟิล์ดไม่เหมาะสมกับขนาด</translation>
+ <translation>ขนาดการอ่านข้อมูลเอ็นทรีฟิลด์ไม่เหมาะสมกับขนาด</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
@@ -4078,6 +4183,10 @@ Line %2, column %3</source>
If this reoccurs, then your database file may be corrupt.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4162,7 +4271,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>%1 set, click to change or remove</source>
<comment>Change or remove a key component</comment>
- <translation>ตั้งค่า %1 คลิกเพื่อเปลี่ยนแปลงหรือยลบออก</translation>
+ <translation>ตั้งค่า %1 คลิกเพื่อเปลี่ยนแปลงหรือยกเลิก</translation>
</message>
</context>
<context>
@@ -4181,17 +4290,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Legacy key file format</source>
- <translation>นามสกุลไฟล์แบบดั้งเดิมของแฟ้มกุญแจ</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>คุณกำลังใช้งานนามสกุลไฟล์แบบดั้งเดิมของแฟ้มกุญแจที่
-อาจ
-ไม่รองรับในอนาคต
-กรุณาไปที่การตั้งค่ากุญแจมาสเตอร์และสร้างแฟ้มกุญแจใหม่</translation>
+ <translation>นามสกุลไฟล์ของแฟ้มกุญแจ</translation>
</message>
<message>
<source>Error loading the key file '%1'
@@ -4217,7 +4316,7 @@ Message: %2</source>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>รายการ (&amp;E)</translation>
+ <translation>ไม่สามารถสร้างแฟ้มกุญแจ %1</translation>
</message>
<message>
<source>Select a key file</source>
@@ -4260,6 +4359,13 @@ Message: %2</source>
Are you sure you want to continue with this file?</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4268,18 +4374,10 @@ Are you sure you want to continue with this file?</source>
<translation>ฐานข้อมูล (&amp;D)</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>ฐานข้อมูลที่เพิ่งใช้ (&amp;R)</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>ช่วยเหลือ (&amp;H)</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>รายการ (&amp;E)</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>กลุ่ม (&amp;G)</translation>
</message>
@@ -4296,46 +4394,10 @@ Are you sure you want to continue with this file?</source>
<translation>เกี่ยวกับ (&amp;A)</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>เปิดฐานข้อมูล (&amp;O)...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>บันทึกฐานข้อมูล (&amp;S)</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>ปิดฐานข้อมูล (&amp;C)</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>ลบรายการ (&amp;D)</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>แก้ไขกลุ่ม (&amp;E)</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>ลบกลุ่ม (&amp;D)</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>บันทึกฐานข้อมูลเป็น (&amp;V)...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>การตั้งค่าฐานข้อมูล</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>โคลนรายการ (&amp;C)</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>คัดลอกชื่อผู้ใช้ (&amp;U)</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>คัดลอกชื่อผู้ใช้ไปคลิปบอร์ด</translation>
</message>
@@ -4348,16 +4410,12 @@ Are you sure you want to continue with this file?</source>
<translation>การตั้งค่า (&amp;S)</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>ล็อกฐานข้อมูล (&amp;L)</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>หัวเรื่อง (&amp;T)</translation>
</message>
<message>
<source>Copy title to clipboard</source>
- <translation>คัดหัวข้อไปยังคลิปบอร์ด</translation>
+ <translation>คัดลอกหัวข้อไปยังคลิปบอร์ด</translation>
</message>
<message>
<source>&amp;URL</source>
@@ -4376,20 +4434,12 @@ Are you sure you want to continue with this file?</source>
<translation>คัดลอกข้อมูลไปยังคลิปบอร์ด</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>ส่งออกไปเป็นแฟ้ม CSV... (&amp;E)</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>ติดตั้ง TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>คัดลอก &amp;TOTP</translation>
</message>
<message>
<source>E&amp;mpty recycle bin</source>
- <translation>เทถังรีไซเคิลทิ้ง (&amp;M)</translation>
+ <translation>ล้างถังรีไซเคิล</translation>
</message>
<message>
<source>Clear history</source>
@@ -4425,11 +4475,7 @@ This version is not meant for production use.</source>
</message>
<message>
<source>&amp;Donate</source>
- <translation>ึ&amp;บริจาค</translation>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation>รายงาน &amp;ข้อผิดปกติ</translation>
+ <translation>บริจาค</translation>
</message>
<message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
@@ -4442,182 +4488,358 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>&amp;นำเข้า</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>คัดลอก att&amp;ribute</translation>
+ <source>Create a new database</source>
+ <translation>สร้างฐานข้อมูลใหม่</translation>
+ </message>
+ <message>
+ <source>Merge from another KDBX database</source>
+ <translation>รวมฐานข้อมูลKDBXอีกชุด</translation>
+ </message>
+ <message>
+ <source>Add a new entry</source>
+ <translation>เพิ่มรายการใหม่</translation>
+ </message>
+ <message>
+ <source>View or edit entry</source>
+ <translation>ดู หรือ แก้ไขรายการ</translation>
+ </message>
+ <message>
+ <source>Add a new group</source>
+ <translation>เพิ่มกลุ่มใหม่</translation>
+ </message>
+ <message>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>ดำเนินการและพิมพ์อัตโนมัติ</translation>
+ </message>
+ <message>
+ <source>Open &amp;URL</source>
+ <translation>เปิดและ URL</translation>
+ </message>
+ <message>
+ <source>Import a KeePass 1 database</source>
+ <translation>นำเข้า ฐานข้อมูล KeePass1...</translation>
+ </message>
+ <message>
+ <source>Import a CSV file</source>
+ <translation>นำเข้า แฟ้ม CSV </translation>
+ </message>
+ <message>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>หมายเหตุ คุณกำลังใช้งาน KeePassXC รุ่นก่อนวางจำหน่าย คาดว่าข้อบกพร่องบางอย่างและปัญหาเล็กน้อย รุ่นนี้ไม่ได้มีไว้สำหรับการใช้งานจริง</translation>
</message>
<message>
- <source>TOTP...</source>
+ <source>Check for updates on startup?</source>
+ <translation>ตรวจสอบการอัปเดทเมื่อเริ่มโปรแกรม</translation>
+ </message>
+ <message>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>คุณต้องการให้ KeePassXC ตรวจสอบเพื่ออัปเดตคลิกที่ปุ่มเปิด</translation>
+ </message>
+ <message>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>คุณสามารถตรวจสอบการอัปเดตได้ด้วยตนเองจากเมนูแอปพลิเคชัน</translation>
+ </message>
+ <message>
+ <source>&amp;Export</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sort &amp;A-Z</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sort &amp;Z-A</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Password Generator</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Import a 1Password Vault</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>TOTP</source>
<translation>TOTP</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>ข้อมูลใหม่</translation>
+ <source>View</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Create a new database</source>
- <translation>สร้าง{ฐานข้อมูลใหม่</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>ผสานจากฐานข้อมูล</translation>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>ผสานจากฐานข้อมูลKDBXอีกอัน</translation>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>รายการใหม่</translation>
+ <source>&amp;Save Database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Add a new entry</source>
- <translation>เพิ่มรายการใหม่</translation>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>แก้ไข้รายการ</translation>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>View or edit entry</source>
- <translation>ดูหรือแก้ไข้รายการ</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;New group</source>
- <translation>กลุ่มใหม่</translation>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Add a new group</source>
- <translation>เพิ่มกลุ่มใหม่</translation>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>เปลี่ยนกุญแจมาสเตอร์</translation>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>ติดตั้งฐานข้อมูล</translation>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation>คัดลอกรหัสผ่าน</translation>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>ดำเนินการและพิมพ์อัตโนมัติ</translation>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>เปิดและ URL</translation>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>ฐานข้อมูล KeePass1
-</translation>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>นำเข้าฐานข้อมูล KeePass 1</translation>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>CSV file...</source>
- <translation>แฟ้ม CSV</translation>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>นำเข้า แฟ้ม CSV </translation>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>โชว์ TOTP</translation>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>แสดง TOTP QR Code</translation>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>หมายเหตุ: คุณกำลังใช้งาน KeePassXC รุ่นก่อนวางจำหน่าย! คาดว่าข้อบกพร่องบางอย่างและปัญหาเล็กน้อย รุ่นนี้ไม่ได้มีไว้สำหรับการใช้งานจริง</translation>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>คลิ๊กเพื่ออัพเดตบน Startup</translation>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>คุณต้องการให้ KeePassXC ตรวจสอบการอัปเดตเมื่อเริ่มต้นหรือไม่?</translation>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>คุณสามารถตรวจสอบการอัปเดตได้ด้วยตนเองจากเมนูแอปพลิเคชัน
-</translation>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export</source>
+ <source>Copy &amp;Username</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Check for Updates...</source>
+ <source>Copy &amp;Password</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
+ <source>Download &amp;Favicon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;A-Z</source>
+ <source>&amp;Lock Databases</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Sort &amp;Z-A</source>
+ <source>&amp;CSV File…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Password Generator</source>
+ <source>&amp;HTML File…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Download favicon</source>
- <translation>ดาวน์โหลด favicon</translation>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
+ <source>1Password Vault…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>CSV File…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>Show TOTP</source>
+ <translation>แสดง TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
+ <source>Set up TOTP…</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>Report a &amp;Bug</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Open Getting Started Guide</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>&amp;Online Help</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
+ <source>Go to online documentation</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>Open User Guide</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>การตั้งค่าฐานข้อมูล</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>แก้ไขการตั้งค่าฐานข้อมูล</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>ปลดล็อกฐานข้อมูล</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>ล็อกฐานข้อมูล</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>หยุดเชื่อมต่อ</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4625,7 +4847,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>Merger</name>
<message>
<source>Creating missing %1 [%2]</source>
- <translation>กำลังสร้างส่วนที่หายไป %1 [%2]</translation>
+ <translation>กำลังสร้างส่วนที่หายไป %1 [%2]</translation>
</message>
<message>
<source>Relocating %1 [%2]</source>
@@ -4637,7 +4859,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>รายการที่เก่ากว่าผสานจากฐานข้อมูล &quot;% 1&quot;</translation>
+ <translation>รวมข้อมูลที่เก่ากว่าเข้ากับฐานข้อมูล &quot;% 1&quot;</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4653,7 +4875,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>Reapplying older source entry on top of newer target %1 [%2]</translation>
+ <translation>การนำรายการแหล่งข้อมูลเก่ามาใช้ใหม่ที่ด้านบนของเป้าหมายใหม่กว่า% 1 [% 2]</translation>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
@@ -4661,15 +4883,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Synchronizing from older source %1 [%2]</source>
- <translation>เชื่อมต่อจากฐานข้อมูลเก่า %1 [%2]</translation>
+ <translation>เชื่อมต่อจากฐานข้อมูลเดิม %1 [%2]</translation>
</message>
<message>
<source>Deleting child %1 [%2]</source>
- <translation>ลบส่วนเด็ก %1 [%2]</translation>
+ <translation>ลบข้อมูลลูก %1 [%2]</translation>
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
- <translation>ลบส่วนกำพร้า %1 [%2]</translation>
+ <translation>ลบข้อมูลกำพร้า %1 [%2]</translation>
</message>
<message>
<source>Changed deleted objects</source>
@@ -4677,7 +4899,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Adding missing icon %1</source>
- <translation>กำลังเพิ่มไอคอนขาดหายไป % 1</translation>
+ <translation>เพิ่มไอคอนขาดหายไป % 1</translation>
</message>
<message>
<source>Removed custom data %1 [%2]</source>
@@ -4707,10 +4929,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>วิซาร์ดเพจ</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>ตั้งค่าการเข้ารหัส</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>ที่นี่คุณสามารถปรับการตั้งค่าการเข้ารหัสฐานข้อมูล ไม่ต้องกังวลคุณสามารถเปลี่ยนได้ในภายหลังในการตั้งค่า ฐานข้อมูล</translation>
</message>
@@ -4722,27 +4940,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>การตั้งค่าพื้นฐาน</translation>
</message>
+ <message>
+ <source>Encryption Settings</source>
+ <translation>การตั้งค่าการเข้ารหัสลับ</translation>
+ </message>
</context>
<context>
- <name>NewDatabaseWizardPageEncryption</name>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Encryption Settings</source>
- <translation>การตั้งค่าการเข้ารหัส</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>ที่นี่คุณสามารถปรับการตั้งค่าการเข้ารหัสฐานข้อมูล ไม่ต้องกังวลคุณสามารถเปลี่ยนได้ในภายหลังในการตั้งค่า ฐานข้อมูล</translation>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>ฐานข้อมูล กุญแจมาสเตอร์</translation>
+ <source>Encryption Settings</source>
+ <translation>การตั้งค่าการเข้ารหัส</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>กุญแจหลักที่คุณรู้จักเท่านั้นที่คุณจะปกป้อง ฐานข้อมูล </translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>ที่นี่คุณสามารถปรับการตั้งค่าการเข้ารหัสฐานข้อมูล ไม่ต้องกังวลคุณสามารถเปลี่ยนได้ในภายหลังในการตั้งค่าฐานข้อมูล</translation>
</message>
</context>
<context>
@@ -4753,7 +4975,14 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>กรุณากรอกชื่อที่แสดง และคำอธิบายเพิ่มเติมสำหรับ ฐานข้อมูล ใหม่ของคุณ:</translation>
+ <translation>กรุณากรอกชื่อที่แสดง และคำอธิบายเพิ่มเติมสำหรับ ฐานข้อมูล ใหม่ของคุณ</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4826,7 +5055,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>แฟ้มกุญแจไม่ถูกต้อง คาดว่าจะมี กุญแจ OpenSSH</translation>
+ <translation>แฟ้มกุญแจ ไม่ถูกต้อง คาดว่าจะมี กุญแจ OpenSSH</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
@@ -4838,15 +5067,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key file way too small.</source>
- <translation>แฟ้มกุญแจมีขนาดเล็กมาก</translation>
+ <translation>แฟ้มกุญแจ มีขนาดเล็กมาก</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>รหัสหัวแฟ้มกุญแจเมจิกไม่ถูกต้อง</translation>
+ <translation>รหัสหัวไฟล์กุญแจเมจิกไม่ถูกต้อง</translation>
</message>
<message>
<source>Found zero keys</source>
- <translation>พบกุญแจศูนย์</translation>
+ <translation>ไมพบกุญแจ</translation>
</message>
<message>
<source>Failed to read public key.</source>
@@ -4866,23 +5095,23 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>จำเป็นต้องใช้วลีรหัสผ่านเพืื่อถอดรหัสผ่านกุญแจนี้</translation>
+ <translation>จำเป็นต้องใช้วลีรหัสผ่านเพื่อถอดรหัสผ่านกุญแจนี้</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>การสร้างกุญแจล้มเหลว ไฟล์กุญแจมีปัญหาหรือป่าว</translation>
+ <translation>การสร้างกุญแจล้มเหลว ไฟล์กุญแจมีปัญหาหรือไม่</translation>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>การถอดรหัสลับล้มเหลว ใส่วลีรหัสผ่านผิดหรือป่าว</translation>
+ <translation>การถอดรหัสลับล้มเหลว ใส่วลีรหัสผ่านผิดหรือไม่</translation>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>เกิด EOF อย่างไม่คาดคิดขณะอ่านกุญแจสาธารณะ</translation>
+ <translation>เกิด EOF ที่ไม่คาดคิดขณะอ่านกุญแจสาธารณะ</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>เกิด EOF อย่างไม่คาดคิดขณะอ่านกุญแจส่วนตัว</translation>
+ <translation>เกิด EOF ที่ไม่คาดคิดขณะอ่านกุญแจส่วนตัว</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
@@ -4890,7 +5119,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>เกิด EOF อย่างไม่คาดคิดขณะเขียนกุญแจสาธารณะ</translation>
+ <translation>เกิด EOF ที่ไม่คาดคิดขณะเขียนกุญแจสาธารณะ</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
@@ -4898,7 +5127,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>เกิด EOF อย่างไม่คาดคิดขณะเขียนกุญแจส่วนตัว</translation>
+ <translation>เกิด EOF ที่ไม่คาดคิดขณะเขียนกุญแจส่วนตัว</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
@@ -4906,7 +5135,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unknown cipher: %1</source>
- <translation>การเข้ารหัสไม่รู้จัก: %1</translation>
+ <translation>การเข้ารหัสที่ไม่รู้จัก: %1</translation>
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
@@ -4918,7 +5147,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unknown key type: %1</source>
- <translation>KDF ที่ไม่รู้จัก: %1</translation>
+ <translation>ประเภทกุญแจที่ไม่รู้จัก: %1</translation>
</message>
</context>
<context>
@@ -4931,12 +5160,24 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>ป้อนรหัสผ่าน:</translation>
+ <translation>กรอกรหัสผ่าน</translation>
</message>
<message>
<source>Confirm password:</source>
@@ -4948,32 +5189,20 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation>&lt;p&gt;รหัสผ่านเป็นวิธีพื้นฐานในการปกป้องฐานข้อมูลของคุณ&lt;/p&gt;&lt;p&gt;รหัสผ่านที่ดีควรยาวและแตกต่าง KeePassXC สร้างรหัสผ่านให้คุณได้&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;รหัสผ่านเป็นวิธีพื้นฐานในการปกป้องฐานข้อมูลของคุณ&lt;/p&gt;&lt;p&gt;รหัสผ่านที่ดีควรยาวและมีเอกลักษณ์ KeePassXC สร้างรหัสผ่านให้คุณได้&lt;/p&gt;</translation>
</message>
<message>
<source>Passwords do not match.</source>
<translation>รหัสผ่านไม่ตรง</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>สร้างรหัสผ่านหลัก</translation>
- </message>
- <message>
<source>Password field</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Repeat password field</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation type="unfinished"/>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4982,10 +5211,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>รหัสผ่าน:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>ความแข็งแรง</translation>
@@ -5021,7 +5246,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>&amp;Length:</source>
- <translation>ความยาว (&amp;L):</translation>
+ <translation>ความยาว (&amp;L)</translation>
</message>
<message>
<source>Passphrase</source>
@@ -5029,19 +5254,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Wordlist:</source>
- <translation>รายการคำ:</translation>
+ <translation>รายการคำ</translation>
</message>
<message>
<source>Word Separator:</source>
- <translation>ตัวแบ่งคำ:</translation>
- </message>
- <message>
- <source>Copy</source>
- <translation>คัดลอก</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>ตกลง</translation>
+ <translation>ตัวแบ่งคำ</translation>
</message>
<message>
<source>Close</source>
@@ -5077,11 +5294,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>ExtendedASCII</source>
- <translation>ASCII เพิ่มเติม</translation>
+ <translation>ExtendedASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
- <translation>เปลี่ยนเป็นโหมดขั้นสูง</translation>
+ <translation>เปลี่ยนเป็นโหมดใช้งานขั้นสูง</translation>
</message>
<message>
<source>Advanced</source>
@@ -5140,42 +5357,26 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>สลับเป็นโหมดง่าย ๆ</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>อย่างง่าย</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>ชุดอักขระที่ต้องการยกเว้นจากรหัสผ่านที่สร้างขึ้น</translation>
</message>
<message>
<source>Do not include:</source>
- <translation>ไม่รวม:</translation>
+ <translation>ไม่รวม</translation>
</message>
<message>
<source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation>เพิ่มตัวอักษรที่ไม่ใช่ฐานหกเหลี่ยมในรายการ &quot;ห้ามรวม&quot;</translation>
+ <translation>เพิ่มตัวอักขระที่ไม่ใช่เลขฐานสิบหกในรายการ &quot;ห้ามรวม&quot;</translation>
</message>
<message>
<source>Hex</source>
- <translation>เครื่องหมายหกเหลี่ยม</translation>
+ <translation>เลขฐานสิบหก</translation>
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
<translation>อักขระที่ยกเว้น: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>คำ Co&amp;unt:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>สร้างใหม่</translation>
- </message>
- <message>
<source>Generated password</source>
<translation type="unfinished"/>
</message>
@@ -5224,10 +5425,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Accept password</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>lower case</source>
<translation type="unfinished"/>
</message>
@@ -5240,7 +5437,43 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation type="unfinished"/>
</message>
<message>
- <source>Toggle password visibility</source>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>จำนวนคำ:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>ล้าง</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5252,6 +5485,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Statistics</source>
+ <translation>สถิติ</translation>
+ </message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
<translation type="unfinished"/>
</message>
</context>
@@ -5302,11 +5587,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Database hash not available</source>
- <translation>ฐานข้อมูลhash ไม่พร้อมใช้งาน</translation>
+ <translation>ฐานข้อมูล hash ไม่พร้อมใช้งาน</translation>
</message>
<message>
<source>Client public key not received</source>
- <translation>Client public key not receivedไม่ได้รับกุญแจสาธารณะของผู้รับบริการ</translation>
+ <translation>ไม่ได้รับกุญแจสาธารณะของผู้รับบริการ</translation>
</message>
<message>
<source>Cannot decrypt message</source>
@@ -5318,7 +5603,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>การเชื่อมโยง KeePassXC ล้มเหลว, ลองอีกครั้ง</translation>
+ <translation>การเชื่อมโยง KeePassXC ล้มเหลว ลองอีกครั้ง</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5326,7 +5611,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Incorrect action</source>
- <translation>การกระทำที่ไม่ถูกต้อง</translation>
+ <translation>การดำเนินการที่ไม่ถูกต้อง</translation>
</message>
<message>
<source>Empty message received</source>
@@ -5334,7 +5619,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>No URL provided</source>
- <translation>ไม่มี URL ให้มา</translation>
+ <translation>ไม่ได้ระบุ URL</translation>
</message>
<message>
<source>No logins found</source>
@@ -5342,7 +5627,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unknown error</source>
- <translation>ความผิดพลาดที่ไม่รู้จัก</translation>
+ <translation>ความผิดพลาดที่ไม่อาจระบุได้</translation>
</message>
<message>
<source>Add a new entry to a database.</source>
@@ -5393,17 +5678,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>เส้นทางของรายการที่จะเพิ่ม</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>คัดลอกรหัสผ่านของรายการไปยังคลิปบอร์ด</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>เส้นทางของรายการไปยังคลิป</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>หมดเวลานับเป็นวินาทีก่อนที่จะล้างคลิปบอร์ด</translation>
+ <translation>ใกล้หมดเวลาก่อนที่จะล้างคลิปบอร์ด</translation>
</message>
<message>
<source>Edit an entry.</source>
@@ -5415,11 +5696,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>title</source>
- <translation>หัวเรื่อง</translation>
+ <translation>หัวข้อ</translation>
</message>
<message>
<source>Path of the entry to edit.</source>
- <translation>เส้นทางของรายการเพื่อไปแก้ไข</translation>
+ <translation>เส้นทางของรายการที่จะแก้ไข</translation>
</message>
<message>
<source>Estimate the entropy of a password.</source>
@@ -5459,7 +5740,7 @@ Available commands:
</message>
<message>
<source>List database entries.</source>
- <translation>แจงรายการฐานข้อมูล</translation>
+ <translation>แสดงรายการฐานข้อมูล</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
@@ -5471,11 +5752,11 @@ Available commands:
</message>
<message>
<source>Search term.</source>
- <translation>คำค้น</translation>
+ <translation>คำที่ใช้ค้นหา</translation>
</message>
<message>
<source>Merge two databases.</source>
- <translation>ผสานสองฐานข้อมูล</translation>
+ <translation>ผสานสองฐานข้อมูลเข้าด้วยกัน</translation>
</message>
<message>
<source>Path of the database to merge from.</source>
@@ -5483,7 +5764,7 @@ Available commands:
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation>ใช้ข้อมูลประจำตัวเพื่อเข้าระบบเดียวกันสำหรับไฟล์ฐานข้อมูลทั้งคู่</translation>
+ <translation>ใช้ข้อมูลประจำตัวชุดเดียวกันเพื่อเข้าระบบสำหรับไฟล์ฐานข้อมูลทั้งคู่</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
@@ -5495,7 +5776,7 @@ Available commands:
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>ชื่อของคุณสมบัติที่จะแสดง ตัวเลือกนี้สามารถถูกระบุได้มากกว่าหนึ่งครั้ง โดยคุณสมบัติถูกแสดงบรรทัดอะหนึ่งอันตามลำดับ ถ้าไม่มีคุณสมบัติใดถูกระบุ คุณสมบัติเริ่มต้นจะถูกเลือกแทน</translation>
+ <translation>ชื่อของคุณสมบัติที่จะแสดง ตัวเลือกนี้สามารถถูกระบุได้มากกว่าหนึ่งครั้ง โดยคุณสมบัติถูกแสดงบรรทัดอันหนึ่งอันตามลำดับ ถ้าไม่มีคุณสมบัติใดถูกระบุ คุณสมบัติเริ่มต้นจะถูกเลือกแทน</translation>
</message>
<message>
<source>attribute</source>
@@ -5519,7 +5800,7 @@ Available commands:
</message>
<message>
<source>missing closing quote</source>
- <translation>ไม่มีเครื่องหมายคำพูดปิด</translation>
+ <translation>เครื่องหมายปิดคำพูดหายไป</translation>
</message>
<message>
<source>Group</source>
@@ -5527,7 +5808,7 @@ Available commands:
</message>
<message>
<source>Title</source>
- <translation>หัวเรื่อง</translation>
+ <translation>หัวข้อ</translation>
</message>
<message>
<source>Username</source>
@@ -5543,25 +5824,17 @@ Available commands:
</message>
<message>
<source>Last Modified</source>
- <translation>แก้ไขล่าสุด</translation>
+ <translation>ถูกแก้ไขล่าสุด</translation>
</message>
<message>
<source>Created</source>
- <translation>สร้าง</translation>
+ <translation>ถูกสร้าง</translation>
</message>
<message>
<source>Browser Integration</source>
<translation>การทำงานร่วมกับเบราว์เซอร์</translation>
</message>
<message>
- <source>Press</source>
- <translation>กด</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>แพสซีฟ</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>ตัวแทน SSH</translation>
</message>
@@ -5577,7 +5850,7 @@ Available commands:
<source>Wordlist for the diceware generator.
[Default: EFF English]</source>
<translation>รายการคำสำหรับการสร้าง diceware
-[ค่าเริ่มต้น: EFF English]</translation>
+[ค่าเริ่มต้น: EFF ภาษาอังกฤษ]</translation>
</message>
<message>
<source>Generate a new random password.</source>
@@ -5589,23 +5862,19 @@ Available commands:
</message>
<message>
<source>Enter password for new entry: </source>
- <translation>ใส่รหัสผ่านสำหรับรายการใหม่:</translation>
+ <translation>ใส่รหัสผ่านสำหรับรายการใหม่</translation>
</message>
<message>
<source>Writing the database failed %1.</source>
- <translation>การเขียนฐานข้อมูลล้มเหลว %1 </translation>
+ <translation>การเขียนฐานข้อมูลล้มเหลว %1</translation>
</message>
<message>
<source>Successfully added entry %1.</source>
<translation>เพิ่มรายการ %1 สำเร็จแล้ว</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>คัดลอก TOTP ปัจจุบันไปยังคลิปบอร์ด</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
- <translation>ค่า timeout ไม่ถูกต้อง %1</translation>
+ <translation>ค่าหมดเวลาไม่ถูกต้อง %1</translation>
</message>
<message>
<source>Entry %1 not found.</source>
@@ -5615,17 +5884,9 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>รายการด้วยเส้นทาง %1 ไม่มีการตั้งค่า TOTP</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>TOTP ปัจจุบันของรายการถูกคัดลอกไปยังคลิปบอร์ด</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>รหัสผ่านของรายการถูกคัดลอกไปยังคลิปบอร์ด</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>ล้างข้อมูลคลิปบอร์ดใน %1 วินาที</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
@@ -5650,11 +5911,11 @@ Available commands:
</message>
<message>
<source>Enter new password for entry: </source>
- <translation>ใส่รหัสผ่านใหม่สำหรับรายการ:</translation>
+ <translation>ใส่รหัสผ่านใหม่สำหรับรายการ</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>เขียนฐานข้อมูลล้มเหลว: %1</translation>
+ <translation>เขียนฐานข้อมูลล้มเหลว %1</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
@@ -5678,11 +5939,11 @@ Available commands:
</message>
<message>
<source>Type: Bruteforce</source>
- <translation>ชนิด: บรู๊ทฟอร์ส</translation>
+ <translation>ชนิด บรู๊ทฟอร์ส</translation>
</message>
<message>
<source>Type: Dictionary</source>
- <translation>ชนิด: พจนานุกรม</translation>
+ <translation>ชนิด ไดเรคทอรี</translation>
</message>
<message>
<source>Type: Dict+Leet</source>
@@ -5690,7 +5951,7 @@ Available commands:
</message>
<message>
<source>Type: User Words</source>
- <translation>พิมพ์: User Words</translation>
+ <translation>ชนิด: User Words</translation>
</message>
<message>
<source>Type: User+Leet</source>
@@ -5811,15 +6072,15 @@ Available commands:
<message>
<source>Error reading merge file:
%1</source>
- <translation>การอ่านไฟล์ที่รวมกันล้มเหลว: %1</translation>
+ <translation>การอ่านไฟล์ที่รวมกันล้มเหลวคือ %1</translation>
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation>ไม่สามารถบันทึกฐานข้อมูลไปยังไฟล์ : %1</translation>
+ <translation>ไม่สามารถบันทึกฐานข้อมูลไปยังไฟล์คือ %1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>ไม่สามารถบันทึกฐานข้อมูลไปยังไฟล์ : %1</translation>
+ <translation>ไม่สามารถบันทึกฐานข้อมูลไปยังไฟล์คือ %1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
@@ -5839,11 +6100,7 @@ Available commands:
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation>ไม่มีโปรแกรมกำหนดการดำเนินการคลิปบอร์ด</translation>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation>ไม่สามารถเริ่มโปรแกรม %1</translation>
+ <translation>ไม่มีโปรแกรมกำหนดสำหรับการจัดการคลิปบอร์ด</translation>
</message>
<message>
<source>file empty</source>
@@ -5854,18 +6111,6 @@ Available commands:
<translation>%1: (row, col) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 บิต</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 บิต</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 บิต</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – แนะนำ)</translation>
</message>
@@ -5909,11 +6154,11 @@ Available commands:
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation>ไม่มีการตั้งค่ากุญแจ การยกเลิกการสร้างฐานข้อมูล</translation>
+ <translation>ไม่มีการตั้งค่ากุญแจ ยกเลิกการสร้างฐานข้อมูล</translation>
</message>
<message>
<source>Failed to save the database: %1.</source>
- <translation>การบันทึกฐานข้อมูลล้มเหลว:% 1</translation>
+ <translation>การบันทึกฐานข้อมูลล้มเหลว % 1</translation>
</message>
<message>
<source>Successfully created new database.</source>
@@ -5925,7 +6170,7 @@ Available commands:
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>การโหลด KeyFile% 1 ล้มเหลว:% 2</translation>
+ <translation>การโหลดกุญแจไฟล์ % 1 ล้มเหลว:% 2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
@@ -5933,11 +6178,11 @@ Available commands:
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation>Existing single-instance lock file ที่มีอยู่ไม่ถูกต้อง. เปิด instance ใหม่</translation>
+ <translation>ไฟล์ single-instance lock ที่มีอยู่ไม่ถูกต้อง เปิด instance ใหม่</translation>
</message>
<message>
<source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation>ไม่สามารถสร้าง lock file ได้. โหมด Single-instance ถูกปิดใช้งาน.</translation>
+ <translation>ไม่สามารถสร้าง lock file ได้ โหมด Single-instance ถูกปิดใช้งาน</translation>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
@@ -5957,15 +6202,15 @@ Available commands:
</message>
<message>
<source>read password of the database from stdin</source>
- <translation>อ่านรหัสผ่านของฐานข้อมูลจาก stdin</translation>
+ <translation>อ่านรหัสผ่านของฐานข้อมูลจาก stdin</translation>
</message>
<message>
<source>Parent window handle</source>
- <translation>หมายเลขอ้างอิงหน้าต่างหลัก</translation>
+ <translation>จัดการหน้าต่างหลัก</translation>
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation>อีกตัวอย่างหนึ่งของ KeePassXC กำลังทำงานอยู่</translation>
+ <translation>อีกอินสแตนซ์ของ KeePassXC กำลังทำงานอยู่</translation>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
@@ -5977,7 +6222,7 @@ Available commands:
</message>
<message>
<source>Database password: </source>
- <translation>รหัสผ่านฐานข้อมูล:</translation>
+ <translation>รหัสผ่านฐานข้อมูล</translation>
</message>
<message>
<source>Cannot create new group</source>
@@ -6053,7 +6298,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>None</source>
- <translation type="unfinished"/>
+ <translation>ไม่มี</translation>
</message>
<message>
<source>Enabled extensions:</source>
@@ -6116,10 +6361,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6136,10 +6377,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation type="unfinished"/>
</message>
@@ -6180,10 +6417,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation type="unfinished"/>
</message>
@@ -6276,10 +6509,6 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation type="unfinished"/>
</message>
@@ -6295,10 +6524,6 @@ Kernel: %3 %4</source>
<source>User name</source>
<translation type="unfinished"/>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform></translation>
@@ -6311,39 +6536,510 @@ Kernel: %3 %4</source>
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
- <translation>เกิดข้อผิดพลาด zlib ภายในในระหว่างการบีบอัด:</translation>
+ <translation>เกิดข้อผิดพลาด zlib ภายในในระหว่างการบีบอัด</translation>
</message>
<message>
<source>Error writing to underlying device: </source>
- <translation>เกิดข้อผิดพลาดในการเขียนไปยังอุปกรณ์ที่รองรับ:</translation>
+ <translation>เกิดข้อผิดพลาดในการเขียนไปยังอุปกรณ์ที่รองรับ</translation>
</message>
<message>
<source>Error opening underlying device: </source>
- <translation>เกิดข้อผิดพลาดในการเปิดอุปกรณ์อ้างอิง:</translation>
+ <translation>เกิดข้อผิดพลาดในการเปิดอุปกรณ์อ้างอิง</translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
- <translation>เกิดข้อผิดพลาดในการอ่านอุปกรณ์อ้างอิง:</translation>
+ <translation>เกิดข้อผิดพลาดในการอ่านอุปกรณ์อ้างอิง</translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
- <translation>ข้อผิดพลาด zlib ภายในเมื่อคลายการบีบอัด:</translation>
+ <translation>ข้อผิดพลาด zlib ภายในเมื่อคลายการบีบอัด</translation>
</message>
</context>
<context>
<name>QtIOCompressor::open</name>
<message>
<source>The gzip format not supported in this version of zlib.</source>
- <translation>รูปแบบ gzip ไม่รองรับ zlib รุ่นนี้</translation>
+ <translation>รูปแบบ gzip ไม่รองรับ zlib เวอร์ชั่นนี้</translation>
</message>
<message>
<source>Internal zlib error: </source>
- <translation>ความผิดพลาดภายในของ zlib: </translation>
+ <translation>ความผิดพลาดภายในของ zlib</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>แย่</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>อ่อนแอ</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>หัวข้อ</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>เส้นทาง</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>หัวข้อ</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>เส้นทาง</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>ชื่อ</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>ค่า</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>ชื่อฐานข้อมูล</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>คำอธิบาย</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>ที่ตั้ง</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>บันทึกครั้งสุดท้าย</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>ความเปลี่ยนแปลงที่ยังไม่ได้บันทึก</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>ใช่</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>ไม่</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>จำนวนกลุ่ม</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>จำนวนรายการ</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>จำนวนรายการที่หมดอายุ</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>ฐานข้อมูลมีรายการที่หมดอายุแล้ว</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>รหัสผ่านที่ไม่ซ้ำ</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>รหัสผ่านที่ซ้ำ</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>มากกว่า 10% ของรหัสผ่านถูกใช้ซ้ำ ควรใช้รหัสผ่านที่ไม่ซ้ำถ้าทำได้</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 ตัวอักษร</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6366,7 +7062,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
- <translation>ตัวแทนปฏิเสธตัวตนนี้ เหตุผลที่เป็นไปได้ได้แก่</translation>
+ <translation>ตัวแทนปฏิเสธตัวตนนี้ เหตุผลที่เป็นไปได้คือ</translation>
</message>
<message>
<source>The key has already been added.</source>
@@ -6380,6 +7076,14 @@ Kernel: %3 %4</source>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>ไม่รองรับการยืนยันคำร้องโดยตัวแทน ตรวจสอบตัวเลือก</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6405,7 +7109,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>match term exactly</source>
- <translation>การจับคู่คำสอดคล้อง</translation>
+ <translation>การจับคู่คำสอดคล้องกัน</translation>
</message>
<message>
<source>use regex in term</source>
@@ -6448,7 +7152,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Limit search to selected group</source>
- <translation>จำกัดการค้นไว้เฉพาะในกลุ่มที่เลือก</translation>
+ <translation>จำกัดการค้นไว้สำหรับเฉพาะกลุ่มที่เลือก</translation>
</message>
<message>
<source>Search Help</source>
@@ -6468,7 +7172,7 @@ Kernel: %3 %4</source>
<name>SettingsWidgetFdoSecrets</name>
<message>
<source>Options</source>
- <translation type="unfinished"/>
+ <translation>ตัวเลือก</translation>
</message>
<message>
<source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
@@ -6487,67 +7191,31 @@ Kernel: %3 %4</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>File Name</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Group</source>
- <translation>กลุ่ม</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Authorization</source>
- <translation type="unfinished"/>
+ <translation>ตรวจยืนยันสิทธิ์</translation>
</message>
<message>
<source>These applications are currently connected:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Application</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Disconnect</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Database settings</source>
- <translation>การตั้งค่าฐานข้อมูล</translation>
- </message>
- <message>
- <source>Edit database settings</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Unlock database</source>
- <translation>ปลดล็อกฐานข้อมูล</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>ล็อกฐานข้อมูล</translation>
- </message>
- <message>
- <source>Unlock to show</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>None</source>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -6583,7 +7251,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Key:</source>
- <translation>กุญแจ:</translation>
+ <translation>กุญแจ</translation>
</message>
<message>
<source>Generate</source>
@@ -6656,7 +7324,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>All files</source>
- <translation>ทุกแฟ้ม</translation>
+ <translation>ทุกไฟล์</translation>
</message>
<message>
<source>Select path</source>
@@ -6664,7 +7332,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Exporting changed certificate</source>
- <translation>นำใบรับรองที่เปลี่ยนแปลงแล้วออก</translation>
+ <translation>นำออกใบรับรองที่เปลี่ยนแปลงแล้ว</translation>
</message>
<message>
<source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
@@ -6676,11 +7344,11 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Allow KeeShare imports</source>
- <translation type="unfinished"/>
+ <translation>อนุญาตการนำเข้า KeeShare</translation>
</message>
<message>
<source>Allow KeeShare exports</source>
- <translation type="unfinished"/>
+ <translation>อนุญาตการส่งออก KeeShare</translation>
</message>
<message>
<source>Only show warnings and errors</source>
@@ -6821,10 +7489,6 @@ Kernel: %3 %4</source>
<translation>การนำเข้าลายเซ็นสำเร็จ</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>ข้อผิดพลาดที่ไม่คาดคิด</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>ไม่รองรับที่จัดเก็บแบ่งปันที่ไม่ได้เซ็นไว้ -ไม่อนุญาตการนำเข้า</translation>
</message>
@@ -6892,7 +7556,7 @@ Kernel: %3 %4</source>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation type="unfinished"><numerusform></numerusform></translation>
+ <translation><numerusform>หมดอายุภายใน &lt;b&gt;%n&lt;/b&gt; วินาที</numerusform></translation>
</message>
</context>
<context>
@@ -6912,7 +7576,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation>ปิดใน %1 วินาที</translation>
+ <translation>กำลังปิดภายใน %1 วินาที</translation>
</message>
</context>
<context>
@@ -6939,20 +7603,20 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Time step:</source>
- <translation>ขั้นเวลา:</translation>
+ <translation>ขั้นเวลา</translation>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation>วิ</translation>
+ <translation>วินาที</translation>
</message>
<message>
<source>Code size:</source>
- <translation>ขนาดรหัส:</translation>
+ <translation>ขนาดรหัส</translation>
</message>
<message>
<source>Secret Key:</source>
- <translation type="unfinished"/>
+ <translation>กุญแจลับ:</translation>
</message>
<message>
<source>Secret key must be in Base32 format</source>
@@ -6972,7 +7636,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source> digits</source>
- <translation type="unfinished"/>
+ <translation>หลัก</translation>
</message>
<message>
<source>Invalid TOTP Secret</source>
@@ -6993,6 +7657,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7008,7 +7679,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Update Error!</source>
- <translation>อัปเดทข้อผิดพลาด!</translation>
+ <translation>การอัปเดทผิดพลาด</translation>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
@@ -7024,7 +7695,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
- <translation>KeePassXC รุ่นใหม่มีให้ใช้แล้ว!</translation>
+ <translation>KeePassXC เวอร์ชั่นใหม่พร้อมใช้แล้ว</translation>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
@@ -7036,11 +7707,11 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation> คุณอัปเดตแล้ว!</translation>
+ <translation> คุณอัปเดตแล้ว</translation>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
- <translation>KeePassXC %1 เป็นรุ่นใหม่ล่าสุดที่มีให้ใช้</translation>
+ <translation>KeePassXC %1 เป็นรุ่นใหม่ล่าสุดที่พร้อมใช้งานแล้ว</translation>
</message>
</context>
<context>
@@ -7071,14 +7742,61 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Welcome to KeePassXC %1</source>
- <translation>ยินดีต้อนรับสู่ KeePassXC</translation>
+ <translation>ยินดีต้อนรับสู่ KeePassXC %1</translation>
</message>
<message>
<source>Import from 1Password</source>
- <translation type="unfinished"/>
+ <translation>นำเข้าจาก 1Password</translation>
</message>
<message>
<source>Open a recent database</source>
+ <translation>เปิดฐานข้อมูลล่าสุด</translation>
+ </message>
+</context>
+<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>กด</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>แพสซีฟ</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
<translation type="unfinished"/>
</message>
</context>
@@ -7097,19 +7815,27 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;หากคุณเป็นเจ้าของ&lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;คุณสามารถใช้มันสำหรับความปลอดภัยเพิ่มเติมได้&lt;/p&gt;&lt;p&gt;YubiKeyจำเป็นต้องใช้ช่องว่างเพื่อลงโปรแกรมเป็น&lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>ตรวจสอบ YubiKey ไม่เจอ โปรดทำให้แน่ใจว่ามีโปรแกรมเสริม</translation>
+ <source>Refresh hardware tokens</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>ไม่มีการแทรก YubiKey </translation>
+ <source>Hardware key slot selection</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Refresh hardware tokens</source>
+ <source>Could not find any hardware keys!</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Hardware key slot selection</source>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/share/translations/keepassx_tr.ts b/share/translations/keepassx_tr.ts
index 78c8592e8..d621364ec 100644
--- a/share/translations/keepassx_tr.ts
+++ b/share/translations/keepassx_tr.ts
@@ -19,7 +19,7 @@
</message>
<message>
<source>Contributors</source>
- <translation>Katkıda Bulunanlar</translation>
+ <translation>Katkıcılar</translation>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
@@ -49,12 +49,32 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>SSH İstemcisini etkinleştir (yeniden başlatma gerekli)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation>Pageant yerine Windows için OpenSSH kullan</translation>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation>Windows için Pageant yerine OpenSSH kullan</translation>
+ <source>Enable SSH Agent integration</source>
+ <translation>SSH İstemci bütünleşmesini etkinleştir</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(boş)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH İstemci bağlantısı çalışıyor!</translation>
</message>
</context>
<context>
@@ -73,7 +93,7 @@
</message>
<message>
<source>Access error for config file %1</source>
- <translation>%1 yapılandırma dosyası için erişim hatası</translation>
+ <translation>Yapılandırma dosyası erişim hatası %1</translation>
</message>
<message>
<source>Icon only</source>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Tüm genel ayarları ve güvenlik ayarlarını varsayılan ayarlara getirmek istediğinizden emin misiniz?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>Dosya Yönetimi</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Veritabanı dosyalarını güvenli bir şekilde kaydet (Dropbox, vb. ile uyumsuz olabilir)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Kaydetmeden önce veritabanı dosyasını yedekle</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Çıkışta otomatik kaydet</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Veritabanı veri dışı değişiklikler için değiştirilmiş olarak işaretlenmez (örneğin, kümeleri genişletme)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Harici olarak değiştirildiğinde veritabanını otomatik olarak yeniden yükle</translation>
</message>
@@ -159,18 +183,6 @@
<translation>Girdi oluşturmada küme simgesini kullan</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Girdi önizleme panelini gizle</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Genel</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Araç çubuğunu gizle (simgeler)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>Uygulamadan çıkmak yerine simge durumuna küçült</translation>
</message>
@@ -179,10 +191,6 @@
<translation>Sistem tepsisi simgesi göster</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Koyu sistem tepsisi simgesi</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Simge durumuna küçültüldüğünde pencereyi sistem tepsisine gizle</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Otomatik Yazım gerçekleştirmeden önce her zaman sor</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Genel Otomatik Yazım kısayolu</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Otomatik Yazım yazma gecikmesi</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation>ms</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Otomatik Yazım başlangıç gecikmesi</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Hareketli araç çubuğu</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Güncellemeleri kontrol ederken beta sürümleri dahil et</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Düğme tipi:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Dil:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Araç çubuğu düğme tipi</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Notlar için eş aralıklı yazı tipi kullan</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Dil seçimi</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Ayarları Varsayılana Sıfırla</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Genel otomatik yazım kısayolu</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Otomatik yazım başlangıç gecikmesi milisaniye</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Sistem başlangıcında KeePassXC&apos;yi otomatik olarak başlat</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Veritabanında veri olmayan değişiklikler için değiştirilmiş olarak işaretleme (ör. genişleyen gruplar)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Ayarları varsayılanlara sıfırla…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Otomatik Yazım yazma gecikmesi:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Genel Otomatik Yazım kısayolu:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Otomatik Yazım başlangıç gecikmesi:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -330,7 +358,7 @@
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation>sn</translation>
+ <translation>san</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
@@ -350,7 +378,7 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>Oturum kilitlendiğinde veya kapak kapatıldığında veritabanlarını kilitle</translation>
+ <translation>Oturum kilitlendiğinde veya kapak kapandığında veritabanlarını kilitle</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
@@ -365,20 +393,8 @@
<translation>Otomatik Yazım gerçekleştirdikten sonra önceden kilitli veritabanını yeniden kilitle</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Parola görünür olduğunda yineleme gerektirme</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Parolaları düzenlerken gizleme</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Boş parola alanları için yer tutucu kullanma</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Girdi önizleme panelinde parolaları gizle</translation>
+ <translation>Önizleme giriş panelinde parolaları gizle</translation>
</message>
<message>
<source>Hide entry notes by default</source>
@@ -398,7 +414,7 @@
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation type="unfinished"/>
+ <translation>Dokunmatik kimlik işlemsizlik sıfırlandı</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Sonrasında arama sorgusunu temizle</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Tarayıcı Erişim Onayı</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Bu kararı anımsa</translation>
+ <source>Remember access to checked entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow</source>
- <translation>İzin ver</translation>
+ <source>Remember</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Deny</source>
- <translation>Reddet</translation>
+ <source>Allow access to entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1, aşağıdaki ögeler için parola erişimi istiyor.
-Lütfen erişime izin vermek isteyip istemediğinizi seçin.</translation>
+ <source>Allow Selected</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Allow access</source>
- <translation>Erişime izin ver</translation>
+ <source>Deny All</source>
+ <translation>Tümünü Reddet</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Erişimi reddet</translation>
+ <source>Disable for this site</source>
+ <translation>Bu site için devre dışı bırak</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç.</translat
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Diyalog</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: Yeni anahtar ilişkilendirme isteği</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Bu, KeePassXC-Tarayıcı ile veritabanlarınıza erişmek için gereklidir.</translation>
+ <source>Save and allow access</source>
+ <translation>Kaydet ve erişime izin ver</translation>
</message>
<message>
- <source>General</source>
- <translation>Genel</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: Var olan anahtarın üstüne yaz?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Bu tarayıcılar için tümleştirmeyi etkinleştirin:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>&quot;%1&quot; adıyla paylaşılan bir şifreleme anahtarı zaten var.
+Üzerine yazmak istiyor musun?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: Girdiyi Güncelle</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>%1 -%2 bilgilerini güncellemek istiyor musun?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>İptal</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Öznitelikler özel verilere dönüştürüyor…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Kimlik bilgileri istendiğinde bir &amp;bildirim göster</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Dönüştürülmüş KeePassHTTP özellikleri</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Eğer kilitliyse veritabanının kilidini açma &amp;isteği</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>%1 girişinden başarıyla dönüştürülen özellikler.
+Özel verilere %2 anahtarı taşındı.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n anahtarları başarıyla özel verilere taşındı.</numerusform><numerusform>%n anahtarları başarıyla özel verilere taşındı.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Yalnızca aynı şemadaki girdiler (http://, https://, ...) döndürülür.</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: KeePassHTTP özniteliklerine sahip bir girdi bulunamadı!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>URL şemasını &amp;eşleştir (ör., https://...)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Aktif veritabanı KeePassHTTP özelliklerine sahip bir giriş içermiyor.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Tüm alan adı için tüm girdiler yerine yalnızca belirli bir URL için en iyi eşleşenleri döndürür.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: Eski tarayıcı bütünleştirme ayarları tespit edildi</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Yalnızca en iyi eşleşen girdileri &amp;döndür</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Yeni bir küme oluştur</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Eşleşen kimlik bilgilerini başlığa göre &amp;sırala</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>&quot;%1&quot; adlı yeni bir küme oluşturma isteği alındı.
+Bu kümeyi oluşturmak ister misiniz?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Eşleşen kimlik bilgilerini &amp;kullanıcı adına göre sırala</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>KeePassXC-Tarayıcı ayarlarınızın veritabanı ayarlarına taşınması gerekir.
+Bu, mevcut tarayıcı bağlantılarınızı korumak için gereklidir.
+Mevcut ayarlarınızı şimdi taşımak ister misiniz?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Gelişmiş</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Bu uyarıyı bir daha gösterme</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Kimlik bilgilerine erişmeden önce &amp;asla sorma</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Aşağıdaki veritabanı için bir ilişkilendirme isteği aldınız:
+%1
+
+Bağlantıya benzersiz bir ad veya kimlik verin, örneğin:
+linux-laptop.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Kimlik bilgilerini &amp;güncellemeden önce asla sorma</translation>
+ <source>Dialog</source>
+ <translation>Diyalog</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Kimlik bilgilerini eşleştirmek için tüm açılan &amp;veritabanlarında ara</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Bu, KeePassXC-Tarayıcı ile veritabanlarınıza erişmek için gereklidir.</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Dizi alanlarını otomatik oluşturma veya güncelleme desteklenmiyor.</translation>
+ <source>Enable browser integration</source>
+ <translation>Tarayıcı bütünleşmesini etkinleştir</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>&quot;KPH: &quot; ile başlayan gelişmiş dizi alanları &amp;döndür</translation>
+ <source>General</source>
+ <translation>Genel</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Başlangıçta yerel mesajlaşma komut dosyalarına otomatik olarak KeePassXC veya keepassxc-proxy ikili yolu güncellenir.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Ek olarak yüklenen tarayıcılar şu anda desteklenmemektedir.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Başlangıçta &amp;yerel mesajlaşma bildirim dosyalarını güncelle</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Bu tarayıcılar için tümleştirmeyi etkinleştir:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>KeePassXC ve tarayıcı eklentisi arasında vekil sunucu uygulaması desteklensin.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>KeePassXC ve tarayıcı eklentisi arasında bir &amp;vekil sunucu uygulaması kullan</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Elle vekil sunucu kurulduysa, özel vekil sunucu konumu kullan.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>&amp;Özel vekil sunucu konumu kullan</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Tarayıcı</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Gözat...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Uyarı:&lt;/b&gt; Aşağıdaki seçenekler tehlikeli olabilir!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Özel vekil sunucu konumunu seç</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor Tarayıcı</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Executable Files</source>
- <translation>Yürütülebilir Dosyalar</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All Files</source>
- <translation>Tüm Dosyalar</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Yalnızca aynı şemadaki girdiler (http://, https://, ...) döndürülür.</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>HTTP ve Temel Kimlik Doğrulama için izin isteme</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Snap sanal alanı nedeniyle, tarayıcı bütünleşmesini etkinleştirmek için bir komut dosyası çalıştırmalısınız.&lt;br /&gt;Bu betiği %1 adresinden edinebilirsiniz.</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Tüm alan adı için tüm girdiler yerine yalnızca belirli bir URL için en iyi eşleşenleri döndürür.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Lütfen aşağıdaki tarayıcı uzantısı kullanımına ilişkin özel talimatlara bakın</translation>
+ <source>Return only best-matching credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Tarayıcı bütünleşmesinin çalışması için KeePassXC-Tarayıcı gereklidir. &lt;br /&gt; İndir %1 ve %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Süresi dolmuş kimlik bilgilerini döndürür. Dize [süresi doldu] başlığa eklendi.</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Süresi dolmuş kimlik bilgilerini döndürür. Dize [süresi doldu] başlığa eklendi.</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Eklentiye bağlı tüm veritabanları eşleşen kimlik bilgilerini döndürür.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>&amp;Süresi dolmuş kimlik bilgilerine izin ver.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Tarayıcı bütünleşmesini etkinleştir</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Ek olarak yüklenen tarayıcılar şu anda desteklenmemektedir.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Eklentiye bağlı tüm veritabanları eşleşen kimlik bilgilerini döndürür.</translation>
+ <source>Advanced</source>
+ <translation>Gelişmiş</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Dizge alanlarını otomatik oluşturma veya güncelleme desteklenmiyor.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation type="unfinished"/>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Eski KeePassHTTP ayarlarının taşınmasını öneren açılır pencereyi görüntülemeyin.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>KeePassHTTP ayarlarının taşınmasını &amp;istemeyin.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Başlangıçta yerel mesajlaşma komut dosyalarına KeePassXC veya keepassxc-proxy ikili yolunu otomatik olarak günceller.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Elle bir vekil sunucu kurduysanız, özel vekil sunucu konumu kullanın.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç.</translat
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation type="unfinished"/>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Gözat...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Yeni anahtar ilişkilendirme isteği</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Kaydet ve erişime izin ver</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Mevcut anahtarın üzerine yazılsın mı?</translation>
+ <source>Toolbar button style</source>
+ <translation>Araç çubuğu düğme tipi</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>&quot;%1&quot; adıyla paylaşılan bir şifreleme anahtarı zaten var.
-Üzerine yazmak istiyor musun?</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Girdiyi Güncelle</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>%1 -%2 bilgilerini güncellemek istiyor musun?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>İptal</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Öznitelikleri özel verilere dönüştürüyor…</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Dönüştürülmüş KeePassHTTP özellikleri</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>%1 girişinden başarıyla dönüştürülen özellikler.
-Özel verilere %2 anahtarı taşındı.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n anahtarları başarıyla özel verilere taşındı.</numerusform><numerusform>%n anahtarları başarıyla özel verilere taşındı.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Snap sanal alanı nedeniyle, tarayıcı bütünleşmesini etkinleştirmek için bir komut dosyası çalıştırmalısınız.&lt;br /&gt;Bu betiği %1 adresinden edinebilirsiniz.</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: KeePassHTTP özelliklerine sahip bir girdi bulunamadı!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Aktif veritabanı KeePassHTTP özelliklerine sahip bir girdi içermiyor.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Lütfen aşağıdaki tarayıcı eklentisi kullanımına ilişkin özel talimatlara bakın</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Eski tarayıcı bütünleştirme ayarları tespit edildi</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Yeni bir küme oluştur</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Uyarı:&lt;/b&gt; Aşağıdaki seçenekler tehlikeli olabilir!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>&quot;%1&quot; adlı yeni bir küme oluşturma isteği alındı.
-Bu kümeyi oluşturmak ister misiniz?
-</translation>
+ <source>Executable Files</source>
+ <translation>Yürütülebilir Dosyalar</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>KeePassXC-Tarayıcı ayarlarınızın veritabanı ayarlarına taşınması gerekir.
-Bu, mevcut tarayıcı bağlantılarınızı korumak için gereklidir.
-Mevcut ayarlarınızı şimdi taşımak ister misiniz?</translation>
+ <source>All Files</source>
+ <translation>Tüm Dosyalar</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Bu uyarıyı bir daha gösterme</translation>
+ <source>Select custom proxy location</source>
+ <translation>Özel vekil sunucu konumunu seç</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Aşağıdaki veritabanı için bir ilişkilendirme isteği aldınız:
-%1
-
-Bağlantıya benzersiz bir ad veya kimlik verin, örneğin:
-linux-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -901,7 +967,7 @@ linux-laptop.</translation>
</message>
<message>
<source>Copy history</source>
- <translation>Geçmişi kopyala</translation>
+ <translation>Kopyalama geçmişi</translation>
</message>
</context>
<context>
@@ -928,35 +994,23 @@ linux-laptop.</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>tarafından metin yetkili</translation>
+ <translation>Şu tarafından metin yetkilendirildi</translation>
</message>
<message>
<source>Fields are separated by</source>
- <translation>tarafından alanlar ayrıldı</translation>
+ <translation>Şu tarafından alanlar bölümlendi</translation>
</message>
<message>
<source>Comments start with</source>
<translation>Yorumlar şununla başlar</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>İlk kaydın alan adları var</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>&apos;\&apos; kaçış karakteri olduğunu göz önünde bulundurun</translation>
</message>
<message>
<source>Preview</source>
- <translation>Ön izleme</translation>
- </message>
- <message>
- <source>Column layout</source>
- <translation>Sütun düzeni</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>CSV dosyasında mevcut değil</translation>
+ <translation>Ön izle</translation>
</message>
<message>
<source>Imported from CSV file</source>
@@ -971,20 +1025,12 @@ linux-laptop.</translation>
<translation>Hata</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Alan adı boş %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>sütun %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
- <translation>CSV dosyasında hatalar belirlendi!</translation>
+ <translation>CSV dosyasında hata saptandı!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n daha fazla mesaj atlandı]</numerusform><numerusform>[%n daha fazla mesaj atlandı]</numerusform></translation>
+ <translation><numerusform>[%n daha fazla ileti atlandı]</numerusform><numerusform>[%n daha fazla ileti atlandı]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
@@ -1008,6 +1054,58 @@ linux-laptop.</translation>
<source>CSV import preview</source>
<translation>CSV içe aktarma önizlemesi</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Son Değişiklik</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Parola</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Oluşturuldu</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notlar</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Başlık</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Küme</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Kullanıcı adı</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1032,21 +1130,16 @@ linux-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Kök</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>%1 dosyası mevcut değil.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
- <translation>%1 dosyası açılamıyor.</translation>
+ <translation>Dosya açılamıyor %1.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>Veritabanını okurken hata oluştu: %1</translation>
+ <translation>Veritabanını okurken hata: %1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
@@ -1077,6 +1170,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Geri Dönüşüm Kutusu</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Parolalar</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1130,10 +1236,6 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün.</translation>
<translation>Anahtar dosyası açılamadı: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Alan seç...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>KeePassXC Veritabanı Kilidini Aç</translation>
</message>
@@ -1146,14 +1248,6 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün.</translation>
<translation>Parola alanı</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Parola görünürlüğünü değiştir</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Anahtar dosya seçimi</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Donanım anahtarı yuvası seçimi</translation>
</message>
@@ -1214,10 +1308,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation type="unfinished"/>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Key file help</source>
<translation>Anahtar dosyası yardım</translation>
</message>
@@ -1226,10 +1316,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Anahtar dosyası seç...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Veritabanı dosyası anahtar dosyası olarak kullanılamaz</translation>
</message>
@@ -1238,6 +1324,30 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
If you do not have a key file, please leave the field empty.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Lütfen YubiKey&apos;inizdeki düğmeye dokunun!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1261,10 +1371,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Güvenlik</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Ana Anahtar</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Şifreleme Ayarları</translation>
</message>
@@ -1272,6 +1378,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Tarayıcı Bütünleşmesi</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1280,20 +1390,8 @@ If you do not have a key file, please leave the field empty.</source>
<translation>KeePassXC-Tarayıcı ayarları</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Tüm tarayıcıların bağlantısını kes</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>Girdilerde siteye özgü tüm ayarları unut</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>KeePassHTTP özniteliklerini KeePassXC-Tarayıcı &amp;özel verisine taşıyın</translation>
- </message>
- <message>
<source>Stored keys</source>
- <translation>Saklanan anahtarlar</translation>
+ <translation>Depolanan anahtarlar</translation>
</message>
<message>
<source>Remove</source>
@@ -1354,8 +1452,8 @@ Bu işlem, tarayıcı eklentisi bağlantısını engelleyebilir.</translation>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>Gerçekten her girdideki tüm siteye özgü ayarları unutmak istiyor musunuz?
-Girdilere erişim izinleri iptal edilecek.</translation>
+ <translation>%n girişindeki izinler kaldırıldı.
+Girişlere erişim izinleri iptal edilecek.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
@@ -1371,7 +1469,7 @@ Girdilere erişim izinleri iptal edilecek.</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>%n girdideki izinler başarıyla kaldırıldı.</numerusform><numerusform>%n girdideki izinler başarıyla kaldırıldı.</numerusform></translation>
+ <translation><numerusform>%n girişindeki izinler başarıyla kaldırıldı.</numerusform><numerusform>%n girişindeki izinler başarıyla kaldırıldı.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1379,11 +1477,11 @@ Girdilere erişim izinleri iptal edilecek.</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
- <translation>Etkin veritabanı izinleri olan bir girdi içermiyor.</translation>
+ <translation>Etkin veritabanı, izinleri olan bir girdi içermiyor.</translation>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>KeePassHTTP niteliklerini özel verilere taşı</translation>
+ <translation>KeePassHTTP özniteliklerini özel verilere taşı</translation>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
@@ -1399,6 +1497,66 @@ Tarayıcı eklentisiyle uyumluluğu korumak için bu gereklidir.</translation>
<source>Remove selected key</source>
<translation>Seçili anahtarı kaldır</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Oluşturuldu</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Ek koruma ekle...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Parola ayarlanmadı</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>UYARI! Bir parola belirlemediniz. Parola olmadan bir veritabanı kullanmak kesinlikle önerilmez!
+
+Parola olmadan devam etmek istediğinize emin misiniz?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Parola olmadan devam et</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Şifreleme anahtarı eklenmedi</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Veritabanınızı korumak için en az bir şifreleme anahtarı eklemelisiniz!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Bilinmeyen hata</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1423,16 +1581,12 @@ Tarayıcı eklentisiyle uyumluluğu korumak için bu gereklidir.</translation>
<translation>Dönüşüm turları:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Karşılaştırma 1-saniyelik gecikme</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Bellek Kullanımı:</translation>
</message>
<message>
<source>Parallelism:</source>
- <translation>Paralellik:</translation>
+ <translation>Benzerlik:</translation>
</message>
<message>
<source>Decryption Time:</source>
@@ -1447,14 +1601,6 @@ Tarayıcı eklentisiyle uyumluluğu korumak için bu gereklidir.</translation>
<translation>Değiştir</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 ms</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Daha yüksek değerler daha fazla koruma sağlar, ancak veritabanını açmak daha uzun sürer.</translation>
</message>
@@ -1494,7 +1640,7 @@ Eğer bu sayı ile devam ederseniz, veritabanınızın açılması saatler veya
</message>
<message>
<source>Understood, keep number</source>
- <translation>Anladım, sayı kalsın</translation>
+ <translation>Anlaşıldı, sayıyı koru</translation>
</message>
<message>
<source>Cancel</source>
@@ -1524,22 +1670,12 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform>Mıb</numerusform><numerusform>MiB</numerusform></translation>
+ <translation><numerusform>MB</numerusform><numerusform>MB</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>iş parçacığı</numerusform><numerusform>iş parçacıkları</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform><numerusform>%1 sn</numerusform></translation>
+ <translation><numerusform>iş parçacığı</numerusform><numerusform>iş parçacığı</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1573,6 +1709,14 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
<source>Parallelism</source>
<translation>Benzerlik</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? ms</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? s</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1581,16 +1725,16 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
<translation>Maruz Kalan Girdiler</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
+ <source>Don&apos;t expose this database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Bu kümenin &amp;altındaki girdileri göster:</translation>
+ <source>Expose entries under this group:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Bu ayarlara erişmek için fd.o Gizli Servisi etkinleştir.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1609,7 +1753,7 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
</message>
<message>
<source>Default username:</source>
- <translation>Varsayılan kullanıcı adı:</translation>
+ <translation>Öntanımlı kullanıcı adı:</translation>
</message>
<message>
<source>History Settings</source>
@@ -1636,20 +1780,16 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
<translation>Ek Veritabanı Ayarları</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>&amp;Sıkıştırmayı etkinleştir (önerilir)</translation>
- </message>
- <message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>Veritabanı isim alanı</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
+ <translation>Veritabanı açıklama alanı</translation>
</message>
<message>
<source>Default username field</source>
- <translation type="unfinished"/>
+ <translation>Varsayılan kullanıcı adı alanı</translation>
</message>
<message>
<source>Maximum number of history items per entry</source>
@@ -1666,10 +1806,15 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
- <translation type="unfinished"/>
+ <translation>Mevcut geri dönüşüm kutusunu ve tüm içeriğini silmek istiyor musunuz?
+Bu eylem geri alınamaz.</translation>
</message>
<message>
<source> (old)</source>
+ <translation> (eski)</translation>
+ </message>
+ <message>
+ <source>Enable compression (recommended)</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1706,45 +1851,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Ek koruma ekle...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Şifreleme anahtarı eklenmedi</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Veritabanınızı korumak için en az bir şifreleme anahtarı eklemelisiniz!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Parola ayarlanmadı</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>UYARI! Bir parola belirlemediniz. Parola olmadan bir veritabanı kullanmak kesinlikle önerilmez!
-
-Parola olmadan devam etmek istediğinize emin misiniz?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Bilinmeyen hata</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Ana anahtar değiştirilemedi</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1756,130 +1862,11 @@ Parola olmadan devam etmek istediğinize emin misiniz?</translation>
</message>
<message>
<source>Database name field</source>
- <translation type="unfinished"/>
+ <translation>Veritabanı isim alanı</translation>
</message>
<message>
<source>Database description field</source>
- <translation type="unfinished"/>
- </message>
-</context>
-<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>İstatistikler</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Daha fazla bilgi için farenizi hata simgeli satırların üzerine getirin.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Adı</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Değer</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Veritabanı adı</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Açıklama</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Konum</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Son kaydedilen</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Kaydedilmemiş değişiklikler</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>evet</translation>
- </message>
- <message>
- <source>no</source>
- <translation>hayır</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Küme sayısı</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Girdilerin sayısı</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Süresi dolmuş girdi sayısı</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Benzersiz parolalar</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Benzersiz olmayan parolalar</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Parolaların %10&apos;undan fazlası yeniden kullanılır. Mümkünse benzersiz parolalar kullanın.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Azami parola kullanımı</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Bazı parolalar üç kereden fazla kullanılır. Mümkünse benzersiz parolalar kullanın.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Kısa parola sayısı</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Önerilen asgari parola uzunluğu en az 8 karakterdir.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Zayıf parola sayısı</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Ortalama parola uzunluğu</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 karakter</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation type="unfinished"/>
+ <translation>Veritabanı açıklama alanı</translation>
</message>
</context>
<context>
@@ -1914,7 +1901,7 @@ Parola olmadan devam etmek istediğinize emin misiniz?</translation>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>Veritabanını CSV dosyasına aktar</translation>
+ <translation>Veritabanını CSV dosyasına dışa aktar</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
@@ -1955,7 +1942,7 @@ Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin.</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
- <translation type="unfinished"/>
+ <translation>%1 açılamadı. Ya mevcut değil ya da erişilebilir değil.</translation>
</message>
<message>
<source>Export database to HTML file</source>
@@ -1967,16 +1954,20 @@ Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin.</translation>
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation type="unfinished"/>
+ <translation>HTML dosyası yazılamadı.</translation>
</message>
<message>
<source>Export Confirmation</source>
- <translation type="unfinished"/>
+ <translation>Dışa Aktarım Onayı</translation>
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Veritabanınızı şifrelenmemiş bir dosyaya vermek üzeresiniz. Bu, parolalarınızı ve hassas bilgilerinizi savunmasız bırakacaktır! Devam etmek istediğine emin misin?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -1986,15 +1977,15 @@ Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin.</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>&quot;%1&quot; girdisini gerçekten tamamen silmek istiyor musunuz?</translation>
+ <translation>&quot;%1&quot; girdisini tümüyle silmek istediğinize emin misiniz?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>&quot;%1&quot; girdisini gerçeten geri dönüşüm kutusuna taşımak istiyor musunuz?</translation>
+ <translation>&quot;%1&quot; girdisini geri dönüşüm kutusuna taşımak istediğinize emin misiniz?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>%n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz?</numerusform><numerusform>%n girdiyi gerçekten geri dönüşüm kutusuna taşımak istiyor musunuz?</numerusform></translation>
+ <translation><numerusform>%n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz?</numerusform><numerusform>%n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2010,7 +2001,7 @@ Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin.</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>&quot;%1&quot; grubunu gerçekten tamamen silmek istiyor musunuz?</translation>
+ <translation>Gerçekten &quot;%1&quot; grubunu tamamen silmek istiyor musunuz?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2056,7 +2047,7 @@ Değişikliklerinizi birleştirmek ister misiniz?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>%1 girdiyi tümüyle silmek istediğinize emin misiniz?</numerusform><numerusform>%1 girdiyi tümüyle silmek istediğinize emin misiniz?</numerusform></translation>
+ <translation><numerusform>%n girişlerini gerçekten kalıcı olarak silmek istiyor musunuz?</numerusform><numerusform>%n girişlerini gerçekten kalıcı olarak silmek istiyor musunuz?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2072,7 +2063,7 @@ Değişikliklerinizi birleştirmek ister misiniz?</translation>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Bir girdiyi düzenliyorsunuz. Yine de değişiklikleri iptal et ve kilitle?</translation>
+ <translation>Bir girişi düzenliyorsunuz. Değişiklikleri iptal et ve yine de kilitle?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
@@ -2120,11 +2111,11 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Replace references to entry?</source>
- <translation>Girdi referansları değiştirilsin mi?</translation>
+ <translation>Giriş referansları değiştirilsin mi?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>Giriş &quot;%1&quot; , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girişi atlamak ya da yine de silmek istiyor musunuz?</numerusform><numerusform>Giriş &quot;%1&quot; , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girişi atlamak ya da yine de silmek istiyor musunuz?</numerusform></translation>
+ <translation><numerusform>Girdi &quot;%1&quot; , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girdiyi atlamak ya da yine de silmek istiyor musunuz?</numerusform><numerusform>Girdi &quot;%1&quot; , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girdiyi atlamak ya da yine de silmek istiyor musunuz?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2152,12 +2143,20 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Veritabanını yazma başarısız oldu: %1</translation>
+ <translation>Veritabanına yazma başarısız: %1</translation>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Bu veritabanı salt okunur kipte açılır. Otomatik kaydetme devre dışı.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2202,14 +2201,6 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>Özel anahtar seç</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Dosya bir özel anahtar olmak için çok büyük</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Özel anahtarı açma başarısız</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Girdi geçmişi</translation>
</message>
@@ -2222,16 +2213,12 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>Girdiyi düzenle</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Farklı parolalar sağlandı.</translation>
- </message>
- <message>
<source>New attribute</source>
<translation>Yeni öznitelik</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Bu özniteliği kaldırmak istediğinizden emin misiniz?</translation>
+ <translation>Bu özniteliği silmek istediğinizden emin misiniz?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2246,29 +2233,13 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation><numerusform>%n ay</numerusform><numerusform>%n ay</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>Oluşturulan parolayı uygula?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Oluşturulan parolayı bu girdiye uygulamak istiyor musunuz?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
<translation>Girdi güncelleme başarılı.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Girdi kaydedilmemiş değişikliklere sahip</translation>
- </message>
- <message>
<source>New attribute %1</source>
<translation>Yeni öznitelik %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[KORUMALI] Görmek veya düzenlemek için göstere bas</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n yıl</numerusform><numerusform>%n yıl</numerusform></translation>
@@ -2287,6 +2258,26 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
+ <translation>Bu URL&apos;yi kaldırmak istediğinizden emin misiniz?</translation>
+ </message>
+ <message>
+ <source>Reveal</source>
+ <translation>Göster</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Gizle</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
<translation type="unfinished"/>
</message>
</context>
@@ -2346,11 +2337,11 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Edit attribute name</source>
- <translation type="unfinished"/>
+ <translation>Öznitelik adını düzenle</translation>
</message>
<message>
<source>Toggle attribute protection</source>
- <translation type="unfinished"/>
+ <translation>Öznitlik korumasını aç/kapat</translation>
</message>
<message>
<source>Show a protected attribute</source>
@@ -2364,6 +2355,14 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<source>Background color selection</source>
<translation>Arka plan rengi seçimi</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2372,14 +2371,6 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>Bu girdi için Otomatik Yazımı etkinleştir</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>&amp;Kümeden öntanımlı Otomatik Yazım sırasını devral</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>Özel Otomatik Yazım sırası &amp;kullan:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Pencere İlişkilendirmeleri</translation>
</message>
@@ -2397,7 +2388,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Bu ilişkilendirme için belirli bir sıra kullan:</translation>
+ <translation>Bu ilişki için belirli bir sıra kullan:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2425,16 +2416,24 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Set the window association title</source>
- <translation type="unfinished"/>
+ <translation>Pencere ilişkilendirme başlığını ayarla</translation>
</message>
<message>
<source>You can use an asterisk to match everything</source>
- <translation type="unfinished"/>
+ <translation>Her şeyi eşleştirmek için yıldız işareti kullanabilirsiniz</translation>
</message>
<message>
<source>Custom Auto-Type sequence for this window</source>
<translation>Bu pencere için özel Otomatik Yazım sırası</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2448,15 +2447,15 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Skip Auto-Submit for this entry</source>
- <translation type="unfinished"/>
+ <translation>Bu girdi için Otomatik Gönder&apos;i atla</translation>
</message>
<message>
<source>Hide this entry from the browser extension</source>
- <translation type="unfinished"/>
+ <translation>Bu girdiyi tarayıcı eklentisi üstünde gizle</translation>
</message>
<message>
<source>Additional URL&apos;s</source>
- <translation type="unfinished"/>
+ <translation>Ek URL&apos;ler</translation>
</message>
<message>
<source>Add</source>
@@ -2470,6 +2469,14 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<source>Edit</source>
<translation>Düzenle</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2521,18 +2528,10 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>Parola:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Tekrarla:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Başlık:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notlar</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Öndeğerler</translation>
</message>
@@ -2545,10 +2544,6 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>Kullanıcı adı:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Süre bitimi</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL alanı</translation>
</message>
@@ -2557,22 +2552,10 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>URL üstünden simge indir</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Parola tekrarlama alanı</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Parola oluşturucu göster ve gizle</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Parola alanı</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Parola görünürlüğünü değiştir</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation type="unfinished"/>
</message>
@@ -2594,16 +2577,28 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Title field</source>
- <translation type="unfinished"/>
+ <translation>Başlık alanı</translation>
</message>
<message>
<source>Username field</source>
- <translation type="unfinished"/>
+ <translation>Kullanıcı adı alanı</translation>
</message>
<message>
<source>Toggle expiration</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Notlar</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2613,7 +2608,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Remove key from agent after</source>
- <translation>Sonra vekilden anahtarı kaldır</translation>
+ <translation>Anahtarı istemciden sonra kaldır</translation>
</message>
<message>
<source> seconds</source>
@@ -2625,7 +2620,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>Veritabanı kapalı/kilitliyken vekilden anahtarı kaldır</translation>
+ <translation>Veritabanı kapalı/kilitliyken istemciden anahtarı kaldır</translation>
</message>
<message>
<source>Public key</source>
@@ -2633,7 +2628,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Veritabanı kapalı/kilitliyken vekile anahtar ekle</translation>
+ <translation>Veritabanı kapalı/kilitliyken istemciye anahtar ekle</translation>
</message>
<message>
<source>Comment</source>
@@ -2641,7 +2636,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Decrypt</source>
- <translation>Şifreyi Çöz</translation>
+ <translation>Şifreyi çöz</translation>
</message>
<message>
<source>n/a</source>
@@ -2670,15 +2665,15 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Add to agent</source>
- <translation>Vekile ekle</translation>
+ <translation>İstemciye ekle</translation>
</message>
<message>
<source>Remove from agent</source>
- <translation>Vekilden kaldır</translation>
+ <translation>İstemciden kaldır</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
- <translation>Bu anahtar kullanıldığında kullanıcı onayı iste</translation>
+ <translation>Bu tuş kullanıldığında kullanıcı onayı iste</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
@@ -2721,7 +2716,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
</message>
<message>
<source>Enable</source>
- <translation>Etkin</translation>
+ <translation>Etkinleştir</translation>
</message>
<message>
<source>Disable</source>
@@ -2739,10 +2734,6 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Form</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Tür:</translation>
</message>
@@ -2751,10 +2742,6 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
<translation>Yol:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Parola:</translation>
</message>
@@ -2835,99 +2822,87 @@ Desteklenen eklentiler: %1.</translation>
</message>
<message>
<source>Path to share file field</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <source>Browser for share file</source>
- <translation type="unfinished"/>
+ <translation>Dosya paylaşım yolu</translation>
</message>
<message>
<source>Password field</source>
<translation>Parola alanı</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Parola görünürlüğünü değiştir</translation>
+ <source>Clear fields</source>
+ <translation>Alanları temizle</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Parola oluşturucu göster ve gizle</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation>Alanları temizle</translation>
+ <source>Browse...</source>
+ <translation>Gözat...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Adı</translation>
+ <source>Name field</source>
+ <translation>İsim alanı</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Notlar</translation>
+ <source>Notes field</source>
+ <translation>Notlar alanı</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Süre bitimi</translation>
+ <source>Toggle expiration</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Search</source>
- <translation>Ara</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation>Bu ve alt gruplar için Otomatik Yazım geçişi</translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>Otomatik Yazım</translation>
+ <source>Expiration field</source>
+ <translation>Son kullanma alanı</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>Üst kümenin öntanımlı Otomatik Yazım dizilişini &amp;kullan</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Öntanımlı Otomatik Yazım &amp;dizilişi belirle</translation>
+ <source>Default auto-type sequence field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Name field</source>
- <translation>İsim alanı</translation>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Notes field</source>
- <translation>Notlar alanı</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Toggle expiration</source>
+ <source>Auto-Type:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
- <translation>Bu ve alt gruplar için Otomatik Yazım geçişi</translation>
+ <source>Search:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expiration field</source>
- <translation>Son kullanma alanı</translation>
+ <source>Notes:</source>
+ <translation>Notlar</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
+ <source>Name:</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Default auto-type sequence field</source>
+ <source>Set default Auto-Type sequence</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>&amp;Öntanımlı simge kullan</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>Özel si&amp;mge kullan</translation>
- </message>
- <message>
<source>Add custom icon</source>
<translation>Özel simge ekle</translation>
</message>
@@ -2941,7 +2916,7 @@ Desteklenen eklentiler: %1.</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>Site simgesi alınamadı.</translation>
+ <translation>Simge getirilemedi.</translation>
</message>
<message>
<source>Images</source>
@@ -2977,7 +2952,7 @@ Desteklenen eklentiler: %1.</translation>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Bu simge %n girdi tarafından kullanılıyor ve öntanımlı simge tarafından değiştirilecek. Silmek istediğinize emin misiniz?</numerusform><numerusform>Bu simge %n girdi tarafından kullanılıyor ve öntanımlı simge tarafından değiştirilecek. Silmek istediğinize emin misiniz?</numerusform></translation>
+ <translation><numerusform>Bu simge %n girişi tarafından kullanılır ve öntanımlı simge ile değiştirilir. Silmek istediğinize emin misiniz?</numerusform><numerusform>Bu simge %n girişi tarafından kullanılır ve öntanımlı simge ile değiştirilir. Silmek istediğinize emin misiniz?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2992,27 +2967,35 @@ Desteklenen eklentiler: %1.</translation>
<translation>Seçili simgeyi alt gruplara ve girdilere uygula</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
+ <source>Also apply to child groups</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Apply to this only</source>
- <translation>Sadece buna uygula</translation>
+ <source>Also apply to child entries</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child groups</source>
+ <source>Also apply to all children</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to child entries</source>
+ <source>Existing icon selected.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Also apply to all children</source>
+ <source>Use default icon</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Existing icon selected.</source>
+ <source>Use custom icon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
<translation type="unfinished"/>
</message>
</context>
@@ -3062,15 +3045,15 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
</message>
<message>
<source>Datetime created</source>
- <translation type="unfinished"/>
+ <translation>Oluşturulma tarih saati</translation>
</message>
<message>
<source>Datetime modified</source>
- <translation type="unfinished"/>
+ <translation>Düzenlenme tarih saati</translation>
</message>
<message>
<source>Datetime accessed</source>
- <translation type="unfinished"/>
+ <translation>Erişim tarih saati</translation>
</message>
<message>
<source>Unique ID</source>
@@ -3096,7 +3079,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
<name>EntryAttachmentsModel</name>
<message>
<source>Name</source>
- <translation>Adı</translation>
+ <translation>Ad</translation>
</message>
<message>
<source>Size</source>
@@ -3127,11 +3110,11 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
</message>
<message>
<source>Select files</source>
- <translation>Dosya seç</translation>
+ <translation>Dosyaları seç</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>%n dosya eklerini kaldırmak istediğinizden emin misiniz?</numerusform><numerusform>%n dosya ekini kaldırmak istediğinizden emin misiniz?</numerusform></translation>
+ <translation><numerusform>%n eki kaldırmak istediğinize emin misiniz?</numerusform><numerusform>%n eki kaldırmak istediğinize emin misiniz?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3177,7 +3160,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
<source>Unable to open file(s):
%1</source>
<translation><numerusform>Dosyalar açılamıyor:
-%1</numerusform><numerusform>Dosya(lar) açılamıyor:
+%1</numerusform><numerusform>Dosyalar açılamıyor:
%1</numerusform></translation>
</message>
<message>
@@ -3200,12 +3183,23 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
<source>Save selected attachment to disk</source>
<translation>Seçili eki diske kaydet</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
<message>
<source>Name</source>
- <translation>Adı</translation>
+ <translation>Ad</translation>
</message>
</context>
<context>
@@ -3283,12 +3277,52 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
<translation>Ekler</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Evet</translation>
+ <source>Size</source>
+ <translation>Boyut</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3323,7 +3357,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Ekler</translation>
+ <translation>Dosya ekleri</translation>
</message>
<message>
<source>Notes</source>
@@ -3388,6 +3422,13 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3414,8 +3455,14 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
<translation>Öntanımlılara sıfırla</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Ekler (simge)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3427,21 +3474,74 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>%1&apos;de DBus hizmeti kaydedilemedi: başka bir gizli servis çalışıyor.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Dosya Adı</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Küme</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Yönetim</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Yok</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Uygulama</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Yönetim</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo Gizli Servis: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Bilinmeyen</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Bilinmeyen</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3453,14 +3553,10 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: Dosya kaydedilemiyor!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Yerel mesajlaşma betik dosyası kaydedilemiyor.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3530,20 +3626,12 @@ DuckDuckGo web sitesi simge servisini uygulama ayarlarının güvenlik bölümü
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Ana anahtar hesaplanamıyor</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Karşılama yanıtı açılamıyor.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>eksik veritabanı başlıkları</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation>Başlık, karma ile eşleşmiyor</translation>
+ <translation>Başlık sağlama ile eşleşmiyor</translation>
</message>
<message>
<source>Invalid header id size</source>
@@ -3560,18 +3648,27 @@ DuckDuckGo web sitesi simge servisini uygulama ayarlarının güvenlik bölümü
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
+ <translation>Geçersiz kimlik bilgileri sağlandı, lütfen tekrar deneyin.
+Bu yeniden oluşursa, veritabanı dosyanız bozuk olabilir.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Karşılama yanıtı açılamıyor.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Ana anahtar hesaplanamıyor</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3581,10 +3678,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>eksik veritabanı başlıkları</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Ana anahtar hesaplanamıyor</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Geçersiz başlık dosya özeti boyutu</translation>
</message>
@@ -3594,7 +3687,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Unknown cipher</source>
- <translation>Bilinmeyen şifre</translation>
+ <translation>Bilinmeyen şifreleme</translation>
</message>
<message>
<source>Invalid header id size</source>
@@ -3602,7 +3695,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Geçersiz başlık alanı genişliği</translation>
+ <translation>Geçersiz başlık alanı uzunluğu</translation>
</message>
<message>
<source>Invalid header data length</source>
@@ -3610,11 +3703,11 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>Başlıktaki KDF parametreleri için tampon açılamıyor</translation>
+ <translation>Üstbilgideki KDF parametreleri için arabellek açılamadı</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation>Desteklenmeyen Anahtar Türetme İşlevi (KDF) veya geçersiz parametreler</translation>
+ <translation>Desteklenmeyen anahtar türetme işlevi (KDF) veya geçersiz parametreler</translation>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
@@ -3626,7 +3719,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid inner header field length</source>
- <translation>Geçersiz iç başlık alann genişliği</translation>
+ <translation>Geçersiz iç başlık alanı uzunluğu</translation>
</message>
<message>
<source>Invalid inner header binary size</source>
@@ -3685,7 +3778,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Geçersiz değişken harita girdi tipi</translation>
+ <translation>Geçersiz değişken harita girdi türü</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
@@ -3695,12 +3788,17 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation type="unfinished"/>
+ <translation>Geçersiz kimlik bilgileri sağlandı, lütfen tekrar deneyin.
+Bu yeniden oluşursa, veritabanı dosyanız bozuk olabilir.</translation>
</message>
<message>
<source>(HMAC mismatch)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3714,13 +3812,13 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Geçersiz simetrik şifreleme IV boyutu.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Ana anahtar hesaplanamıyor</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>KDF parametreleri değişken harita serileştirme başarısız</translation>
+ <translation>KDF parametreleri değişken haritası serileştirme başarısız</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3731,7 +3829,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid compression flags length</source>
- <translation>Geçersiz sıkıştırma bayrakları genişliği</translation>
+ <translation>Geçersiz sıkıştırma bayrakları uzunluğu</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
@@ -3743,7 +3841,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Geçersiz dönüşüm çekirdeği boyutu</translation>
+ <translation>Geçersiz dönüşüm çekirdek boyutu</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
@@ -3751,7 +3849,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation>Geçersiz başlangıç baytı boyutu</translation>
+ <translation>Geçersiz başlangıç bayt boyutu</translation>
</message>
<message>
<source>Invalid random stream id size</source>
@@ -3759,7 +3857,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>Geçersiz dahili rastgele akış şifresi</translation>
+ <translation>Geçersiz dahili rastgele akış şifrelemesi</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3804,7 +3902,7 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Simge UUID veya verisi eksik</translation>
+ <translation>Uuid simgesi veya veri eksik</translation>
</message>
<message>
<source>Missing custom data key or value</source>
@@ -3816,11 +3914,11 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Null group uuid</source>
- <translation>Boş küme benzersiz tanımlayıcı</translation>
+ <translation>Boş küme uuid</translation>
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Geçersiz küme simgesi numarası</translation>
+ <translation>Geçersiz küme simge numarası</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
@@ -3828,11 +3926,11 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Invalid EnableSearching value</source>
- <translation>Geçersiz Arama Etkinleşirme değeri</translation>
+ <translation>Geçersiz Arama Etkin değeri</translation>
</message>
<message>
<source>No group uuid found</source>
- <translation>Hiçbir kümede UUID bulunamadı</translation>
+ <translation>Kümede uuid bulunamadı</translation>
</message>
<message>
<source>Null DeleteObject uuid</source>
@@ -3840,27 +3938,27 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
- <translation>DeletedObject UUID veya zaman eksik</translation>
+ <translation>SilinmişNesne uuid veya zamanı eksik</translation>
</message>
<message>
<source>Null entry uuid</source>
- <translation>Boş UUID girdisi</translation>
+ <translation>Boş uuid girdisi</translation>
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Geçersiz girdi simgesi numarası</translation>
+ <translation>Geçersiz simge numarası girdisi</translation>
</message>
<message>
<source>History element in history entry</source>
- <translation>Geçmiş girdisinde geçmiş öğesi</translation>
+ <translation>Geçmiş girdisinde geçmiş element</translation>
</message>
<message>
<source>No entry uuid found</source>
- <translation>UUID girdisi bulunamadı</translation>
+ <translation>Uuid girdisi bulunamadı</translation>
</message>
<message>
<source>History element with different uuid</source>
- <translation>Farklı UUID ile tarih elemanı</translation>
+ <translation>Farklı uuid ile geçmiş ögesi</translation>
</message>
<message>
<source>Duplicate custom attribute found</source>
@@ -3868,15 +3966,11 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Girdi dizesi anahtarı veya değeri eksik</translation>
- </message>
- <message>
- <source>Duplicate attachment found</source>
- <translation>Yinelenen ek bulundu</translation>
+ <translation>Giriş dizesi anahtarı veya değeri eksik</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Girdi ikili anahtari veya değeri eksik</translation>
+ <translation>Girdi ikili anahtarı veya değeri eksik</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
@@ -3884,7 +3978,7 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Invalid bool value</source>
- <translation>Geçersiz boolean değeri</translation>
+ <translation>Geçersiz bool değeri</translation>
</message>
<message>
<source>Invalid date time value</source>
@@ -3896,20 +3990,20 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski Kee
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Geçersiz renk RGB bölümü</translation>
+ <translation>Geçersiz rgb renk parçası</translation>
</message>
<message>
<source>Invalid number value</source>
- <translation>Geçersiz numara değeri</translation>
+ <translation>Geçersiz sayı değeri</translation>
</message>
<message>
<source>Invalid uuid value</source>
- <translation>Geçersiz UUID değeri</translation>
+ <translation>Geçersiz uuid değeri</translation>
</message>
<message>
<source>Unable to decompress binary</source>
<extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation>İkili sıkıştırma açılamıyor</translation>
+ <translation>İkili dosya sıkıştırması açılamıyor</translation>
</message>
<message>
<source>XML error:
@@ -3921,6 +4015,29 @@ Satır %2, sütun %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Dosya bir özel anahtar olmak için çok büyük</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Özel anahtarı açma başarısız</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3960,15 +4077,15 @@ Satır %2, sütun %3</translation>
</message>
<message>
<source>Invalid number of entries</source>
- <translation>Geçersiz girdi sayısı</translation>
+ <translation>Geçersiz giriş numarası</translation>
</message>
<message>
<source>Invalid content hash size</source>
- <translation>Geçersiz içerik karması boyutu</translation>
+ <translation>Geçersiz içerik karma boyutu</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Geçersiz dönüşüm çekirdeği boyutu</translation>
+ <translation>Geçersiz dönüşüm çekirdek boyutu</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
@@ -3983,10 +4100,6 @@ Satır %2, sütun %3</translation>
<translation>Kök</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Ana anahtar hesaplanamıyor</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Anahtar dönüştürme başarısız</translation>
</message>
@@ -4000,7 +4113,7 @@ Satır %2, sütun %3</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
- <translation>Okuma grubu alan verisi boyutuyla eşleşmiyor</translation>
+ <translation>Okuma kümesi alanı verileri boyutla eşleşmiyor</translation>
</message>
<message>
<source>Incorrect group id field size</source>
@@ -4048,7 +4161,7 @@ Satır %2, sütun %3</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>Girdi alan verisi okuma boyutuyla eşleşmiyor</translation>
+ <translation>Giriş alan verisi okuma boyutuyla eşleşmiyor</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
@@ -4056,11 +4169,11 @@ Satır %2, sütun %3</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>Geçersiz girdi kümesi kimliği alan boyutu</translation>
+ <translation>Geçersiz küme kimliği alan boyutu girdisi</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation>Geçersiz giriş simge alanı boyutu</translation>
+ <translation>Geçersiz giriş simgesi alan boyutu</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
@@ -4072,11 +4185,11 @@ Satır %2, sütun %3</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Geçersiz giriş zaman aşımı alan boyutu</translation>
+ <translation>Geçersiz giriş süre sonu alan boyutu</translation>
</message>
<message>
<source>Invalid entry field type</source>
- <translation>Geçersiz giriş alan tipi</translation>
+ <translation>Geçersiz girdi alanı tipi</translation>
</message>
<message>
<source>unable to seek to content position</source>
@@ -4085,6 +4198,11 @@ Satır %2, sütun %3</translation>
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
+ <translation>Geçersiz kimlik bilgileri sağlandı, lütfen tekrar deneyin.
+Bu yeniden oluşursa, veritabanı dosyanız bozuk olabilir.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4092,7 +4210,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<name>KeeShare</name>
<message>
<source>Invalid sharing reference</source>
- <translation type="unfinished"/>
+ <translation>Geçersiz paylaşım referansı</translation>
</message>
<message>
<source>Inactive share %1</source>
@@ -4104,19 +4222,19 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Exported to %1</source>
- <translation type="unfinished"/>
+ <translation>%1 klasörüne aktarıldı</translation>
</message>
<message>
<source>Synchronized with %1</source>
- <translation type="unfinished"/>
+ <translation>%1 ile eşitlendi</translation>
</message>
<message>
<source>Import is disabled in settings</source>
- <translation type="unfinished"/>
+ <translation>Ayarlarda içe aktarma devre dışı</translation>
</message>
<message>
<source>Export is disabled in settings</source>
- <translation type="unfinished"/>
+ <translation>Ayarlarda dışa aktarma devre dışı</translation>
</message>
<message>
<source>Inactive share</source>
@@ -4124,7 +4242,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Imported from</source>
- <translation type="unfinished"/>
+ <translation>İçe aktarıldı</translation>
</message>
<message>
<source>Exported to</source>
@@ -4193,16 +4311,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Eski anahtar dosya biçimi</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Gelecekte desteklenmeyecek olan eski bir anahtar
-dosyası biçimi kullanıyorsunuz.
-
-Lütfen ana anahtar ayarlarına gidin ve yeni bir anahtar dosyası oluşturun.</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>&apos;%1&apos; anahtar dosyası yüklenirken hata
@@ -4226,7 +4334,7 @@ Message: %2</source>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>Anahtar dosya oluşturulamıyor: %1</translation>
+ <translation>Anahtar dosyası oluşturulamıyor: %1</translation>
</message>
<message>
<source>Select a key file</source>
@@ -4250,7 +4358,7 @@ Message: %2</source>
</message>
<message>
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
- <translation type="unfinished"/>
+ <translation>Not: Veritabanınızın kilidini açmanızı engelleyeceği için değişebilecek bir dosya kullanmayın!</translation>
</message>
<message>
<source>Invalid Key File</source>
@@ -4258,15 +4366,23 @@ Message: %2</source>
</message>
<message>
<source>You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file.</source>
- <translation type="unfinished"/>
+ <translation>Mevcut veritabanını kendi anahtar dosyası olarak kullanamazsınız. Lütfen farklı bir dosya seçin veya yeni bir anahtar dosyası oluşturun.</translation>
</message>
<message>
<source>Suspicious Key File</source>
- <translation type="unfinished"/>
+ <translation>Şüpheli Anahtar Dosyası</translation>
</message>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
+ <translation>Seçilen anahtar dosyası bir parola veritabanı dosyasına benziyor. Anahtar dosya, değişmeyen statik bir dosya olmalıdır, aksi takdirde veritabanınıza sonsuza kadar erişiminizi kaybedersiniz.
+Bu dosyaya devam etmek istediğinizden emin misiniz?</translation>
+ </message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -4277,18 +4393,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Veritabanı</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Geçmiş veritabanları</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Yardım</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Girdiler</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Kümeler</translation>
</message>
@@ -4305,46 +4413,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Hakkında</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Veritabanı &amp;aç...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>Veritabanını &amp;kaydet</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>Veritabanını &amp;kapat</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>Girdiyi &amp;sil</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>Kümeyi &amp;düzenle</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Kümeyi &amp;sil</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Veritabanını farklı ka&amp;ydet...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Veritabanı ayarları</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>Girdiyi &amp;klonla</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>&amp;Kullanıcı adını kopyala</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>Kullanıcı adını panoya kopyala</translation>
</message>
@@ -4357,10 +4429,6 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Ayarlar</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Veritabanlarını &amp;kilitle</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>&amp;Başlık</translation>
</message>
@@ -4385,14 +4453,6 @@ Are you sure you want to continue with this file?</source>
<translation>Notları panoya kopyala</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>&amp;CSV dosyasına aktar...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>TOTP kurulumu yap...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>&amp;TOTP&apos;yi kopyala</translation>
</message>
@@ -4406,7 +4466,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>%1 yapılandırma dosyası için erişim hatası</translation>
+ <translation>Yapılandırma dosyası için erişim hatası %1</translation>
</message>
<message>
<source>Settings</source>
@@ -4428,19 +4488,15 @@ Are you sure you want to continue with this file?</source>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>UYARI: Kararsız bir KeePassXC yapısı kullanıyorsunuz!
-Yüksek bozulma tehlikesi bulunmaktadır, veritabanlarınızın bir yedeğini alın.
-Bu sürüm, üretim kullanımı için uygun değildir.</translation>
+ <translation>UYARI: KeePassXC&apos;nin kararsız inşasını kullanıyorsunuz!
+Yüksek bozulma tehlikesi bulunmaktadır, veri tabanlarınızın yedeğini alın.
+Bu sürüm, üretimde kullanıma uygun değildir.</translation>
</message>
<message>
<source>&amp;Donate</source>
<translation>&amp;Bağış</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Bir &amp;hata raporla</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>Uyarı: Qt sürümünüz Keepassxc&apos;nin ekran klavyesiyle çökmesine neden olabilir!
@@ -4451,64 +4507,24 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz.</transl
<translation>&amp;İçe aktar</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Öznite&amp;liği kopyala...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>&amp;Yeni veritabanı...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Yeni veritabanı oluştur</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>Veritabanı üstünden &amp;birleştir...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Başka bir KDBX veritabanından birleştir</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;Yeni girdi</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Yeni girdi ekle</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;Girdiyi düzenle</translation>
- </message>
- <message>
<source>View or edit entry</source>
- <translation>Girdiyi göster ve düzenle</translation>
- </message>
- <message>
- <source>&amp;New group</source>
- <translation>&amp;Yeni küme</translation>
+ <translation>Girdiyi görüntüle veya düzenle</translation>
</message>
<message>
<source>Add a new group</source>
- <translation>Yeni küme ekle</translation>
- </message>
- <message>
- <source>Change master &amp;key...</source>
- <translation>Ana &amp;anahtarı değiştir...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>&amp;Veritabanı ayarları...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>&amp;Parolayı kopyala</translation>
+ <translation>Yeni bir küme ekle</translation>
</message>
<message>
<source>Perform &amp;Auto-Type</source>
@@ -4519,30 +4535,14 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz.</transl
<translation>URL&apos;yi &amp;Aç</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 veritabanı...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>KeePass 1 veritabanını içe aktar</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV dosyası...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>CSV dosyasını içe aktar</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>TOTP Göster...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>TOTP QR Kodunu Göster...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>NOT: KeePassXC&apos;nin yayın öncesi bir sürümünü kullanıyorsunuz!
@@ -4565,14 +4565,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Dışa &amp;aktar</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Güncellemeleri kontrol et...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>&amp;Tüm simgeleri indir</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Sırala &amp;A-Z</translation>
</message>
@@ -4585,67 +4577,309 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>&amp;Parola Oluşturucu</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Simge indir</translation>
+ <source>Import a 1Password Vault</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Başlangıç</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>&amp;Kullanıcı Rehberi</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>HTML dosyasına &amp;aktar...</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Klavye Kısayolları</translation>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>&amp;Recent Databases</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Import a 1Password Vault</source>
+ <source>&amp;Entries</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Başlangıç</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
+ </message>
+ <message>
+ <source>View</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>&amp;Çevrimiçi Yardım...</translation>
+ <source>Theme</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
+ <source>&amp;Check for Updates</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>&amp;Kullanıcı Rehberi</translation>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Open User Guide PDF</source>
+ <source>&amp;Save Database</source>
<translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Klavye Kısayolları</translation>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>ZTSP&apos;yi göster</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>Otomatik</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Açık</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Koyu</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>Klasik (Platform-doğal)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Veritabanı ayarları</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Veritabanı ayarlarını düzenle</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Veritabanı kilidini kaldır</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Veritabanını kilitle</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>Merger</name>
<message>
<source>Creating missing %1 [%2]</source>
- <translation>Eksik %1 [%2] oluşturuluyor</translation>
+ <translation>Eksik oluşturuluyor %1 [%2]</translation>
</message>
<message>
<source>Relocating %1 [%2]</source>
- <translation>%1 taşınıyor [%2]</translation>
+ <translation>Taşınıyor %1 [%2]</translation>
</message>
<message>
<source>Overwriting %1 [%2]</source>
- <translation>%1 üzerine yazılıyor [%2]</translation>
+ <translation>Üzerine yazılıyor %1 [%2]</translation>
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>eski giriş &quot;%1&quot; veritabanından birleştirildi</translation>
+ <translation>eski girdi &quot;%1&quot; veritabanıyla birleştirildi</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4657,7 +4891,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>Eski hedef girişini yeni kaynağın üstüne yeniden uygulama %1 [%2]</translation>
+ <translation>Eski hedef girişini yeni kaynağın üstüne yeniden uygula %1 [%2]</translation>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
@@ -4673,11 +4907,11 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Deleting child %1 [%2]</source>
- <translation>Alt girişleri sil %1 [%2]</translation>
+ <translation>Alt girişler siliniyor %1 [%2]</translation>
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
- <translation>Sahipsizleri sil %1 [%2]</translation>
+ <translation>Sahipsizler siliniyor %1 [%2]</translation>
</message>
<message>
<source>Changed deleted objects</source>
@@ -4685,15 +4919,15 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Adding missing icon %1</source>
- <translation>Eksik simge ekle %1</translation>
+ <translation>Eksik simge ekleniyor %1</translation>
</message>
<message>
<source>Removed custom data %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Özel veriler kaldırıldı %1 [%2]</translation>
</message>
<message>
<source>Adding custom data %1 [%2]</source>
- <translation type="unfinished"/>
+ <translation>Özel veriler eklendi %1 [%2]</translation>
</message>
</context>
<context>
@@ -4715,10 +4949,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>SayfaSihirbazı</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>&amp;Şifreleme Ayarları</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz.</translation>
</message>
@@ -4730,27 +4960,31 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<source>Simple Settings</source>
<translation>Temel Ayarlar</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Şifreleme Ayarları</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Veritabanı Ana Anahtar</translation>
+ <source>Encryption Settings</source>
+ <translation>Şifreleme Ayarları</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Yalnızca sizin tarafınızdan bilinen bir ana anahtar veritabanınızı korur.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz.</translation>
</message>
</context>
<context>
@@ -4761,7 +4995,14 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>Lütfen yeni veritabanınız için görünen ad ve isteğe bağlı bir açıklama girin:</translation>
+ <translation>Lütfen yeni veritabanı için görünen bir isim ve isteğe bağlı bir açıklama girin:</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4850,7 +5091,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>Anahtar dosyası sihirli başlık kimliği geçersiz</translation>
+ <translation>Anahtar dosyası sihirbazı başlık kimliği geçersiz</translation>
</message>
<message>
<source>Found zero keys</source>
@@ -4866,11 +5107,11 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>No private key payload to decrypt</source>
- <translation>Şifre çözmek için yüklü özel anahtar yok</translation>
+ <translation>Şifresini çözmek için yüklü özel anahtar yok</translation>
</message>
<message>
<source>Trying to run KDF without cipher</source>
- <translation>Şifre olmadan Anahtar Türetme İşlevi çalıştırma deneniyor</translation>
+ <translation>KDF&apos;yi şifreleme olmadan çalıştırmayı dene</translation>
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
@@ -4894,7 +5135,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
- <translation>Ortak anahtar boş olduğu için yazılamıyor</translation>
+ <translation>Genel anahtar boş olduğundan yazılamıyor</translation>
</message>
<message>
<source>Unexpected EOF when writing public key</source>
@@ -4906,7 +5147,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>Özel anahtar yazılırken beklenmeyen dosya sonu</translation>
+ <translation>Özel anahtar yazarken beklenmeyen EOF</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
@@ -4914,11 +5155,11 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Unknown cipher: %1</source>
- <translation>Bilinmeyen şifre: %1</translation>
+ <translation>Bilinmeyen şifreleme: %1</translation>
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>Şifre IV, MD5 anahtar türetme işlevi için çok kısa</translation>
+ <translation>Cipher IV, MD5 kdf için çok kısa</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
@@ -4939,6 +5180,18 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<source>Passwords match so far</source>
<translation>Parolalar şu ana kadar eşleşiyor</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4963,25 +5216,13 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Parolalar uyuşmuyor.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Ana parola oluştur</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Parola alanı</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Parola görünürlüğünü değiştir</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Parola tekrarlama alanı</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Parola oluşturucu göster ve gizle</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4990,10 +5231,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>%%p</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Parola:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>güç</translation>
@@ -5012,7 +5249,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Numbers</source>
- <translation>Sayılar</translation>
+ <translation>Rakamlar</translation>
</message>
<message>
<source>Extended ASCII</source>
@@ -5043,14 +5280,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Sözcük Ayırıcı:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Kopyala</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Onayla</translation>
- </message>
- <message>
<source>Close</source>
<translation>Kapat</translation>
</message>
@@ -5147,14 +5376,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Basit kipe geç</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Basit</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Oluşturulan paroladan dışlanacak karakter kümesi</translation>
</message>
@@ -5175,14 +5396,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Dışlanan karakterler: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Sözcük &amp;Sayısı:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Yeniden oluştur</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Oluşturulan parola</translation>
</message>
@@ -5231,10 +5444,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Parolayı kopyala</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Parolayı kabul et</translation>
- </message>
- <message>
<source>lower case</source>
<translation>küçük harf</translation>
</message>
@@ -5247,8 +5456,44 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Başlık Örneği</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Parola görünürlüğünü değiştir</translation>
+ <source>Generate Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Sözcük Sayısı:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Temizle</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5261,6 +5506,58 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<source>Statistics</source>
<translation>İstatistikler</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5385,7 +5682,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Giriş parolasını sor.</translation>
+ <translation>Girdi parolasını sor.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
@@ -5400,10 +5697,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<translation>Eklenecek girdinin yolu.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Girdinin parolasını panoya kopyala.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>Girişi kısaltmanın yolu.</translation>
@@ -5470,7 +5763,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Path of the group to list. Default is /</source>
- <translation>Listelenecek kümenin yolu. Öntanımlı: /</translation>
+ <translation>Listelenecek kümenin yolu. Öntanımlı /</translation>
</message>
<message>
<source>Find entries quickly.</source>
@@ -5486,7 +5779,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>Veritabanının nereden birleştirileceği.</translation>
+ <translation>Birleştirilecek veritabanının yolu.</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
@@ -5498,7 +5791,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Show an entry&apos;s information.</source>
- <translation>Bir girişin bilgilerini göster.</translation>
+ <translation>Bir girdinin bilgilerini göster.</translation>
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
@@ -5561,14 +5854,6 @@ Kullanılabilir komutlar:
<translation>Tarayıcı Bütünleşmesi</translation>
</message>
<message>
- <source>Press</source>
- <translation>Basın</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Pasif</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH İstemci</translation>
</message>
@@ -5588,7 +5873,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Generate a new random password.</source>
- <translation>Yeni bir rasgele parola oluştur.</translation>
+ <translation>Yeni bir rastgele parola oluştur.</translation>
</message>
<message>
<source>Could not create entry with path %1.</source>
@@ -5607,29 +5892,17 @@ Kullanılabilir komutlar:
<translation>%1 girişi başarıyla eklendi.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Geçerli TOTP&apos;yi panoya kopyala.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Geçersiz zaman aşımı değeri %1.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
- <translation>%1 girişi bulunamadı.</translation>
+ <translation>Girdi %1 bulunamadı.</translation>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
<translation>%1 yolunun girişinde TOTP ayarlanmadı.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Girdinin mevcut TOTP&apos;si panoya kopyalandı!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Girdi parolası panoya kopyalandı!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>%1 saniye içinde pano temizleniyor...</numerusform><numerusform>%1 saniye içinde pano temizleniyor...</numerusform></translation>
@@ -5657,11 +5930,11 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Enter new password for entry: </source>
- <translation>Girdi için yeni parola girin: </translation>
+ <translation>Girdi için yeni parola gir: </translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Veritabanını yazma başarısız oldu: %1</translation>
+ <translation>Veritabanına yazma başarısız: %1</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
@@ -5809,11 +6082,11 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Recursively list the elements of the group.</source>
- <translation>Kümenin ögelerini yinelemeli olarak sıralayın.</translation>
+ <translation>Kümenin ögelerini özyinelemeli olarak listeler.</translation>
</message>
<message>
<source>Cannot find group %1.</source>
- <translation>% 1 kümesi bulunamıyor.</translation>
+ <translation>%1 kümesi bulunamıyor.</translation>
</message>
<message>
<source>Error reading merge file:
@@ -5835,25 +6108,21 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation>%1 girdisi başarıyla silindi.</translation>
+ <translation>Girdi başarıyla silindi %1</translation>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation>Girdilerin mevcut TOTP&apos;sini göster.</translation>
+ <translation>Girişin mevcut TOTP&apos;sini göster.</translation>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
- <translation>HATA: bilinmeyen özellik %1.</translation>
+ <translation>HATA: bilinmeyen öznitelik %1.</translation>
</message>
<message>
<source>No program defined for clipboard manipulation</source>
<translation>Pano manipülasyonu için tanımlanmış bir program yok</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>Program başlatılamıyor %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>dosya boş</translation>
</message>
@@ -5862,18 +6131,6 @@ Kullanılabilir komutlar:
<translation>%1: (satır, sütun) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-bit</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-bit</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-bit</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – önerilen)</translation>
</message>
@@ -5897,7 +6154,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Message encryption failed.</source>
- <translation>Mesaj şifreleme başarısız.</translation>
+ <translation>İleti şifreleme başarısız.</translation>
</message>
<message>
<source>No groups found</source>
@@ -5961,7 +6218,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>key file of the database</source>
- <translation>veritabanı&apos;nın anahtar dosyası</translation>
+ <translation>veritabanı anahtar dosyası</translation>
</message>
<message>
<source>read password of the database from stdin</source>
@@ -5973,7 +6230,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation>Başka bir KeePassXC oluşumu zaten çalışıyor.</translation>
+ <translation>KeePassXC&apos;nin başka bir örneği zaten çalışıyor.</translation>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
@@ -5997,11 +6254,11 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Displays debugging information.</source>
- <translation type="unfinished"/>
+ <translation>Hata ayıklama bilgilerini görüntüler.</translation>
</message>
<message>
<source>Deactivate password key for the database to merge from.</source>
- <translation type="unfinished"/>
+ <translation>Veritabanının birleştirileceği parola anahtarını devre dışı bırak.</translation>
</message>
<message>
<source>Version %1</source>
@@ -6025,7 +6282,7 @@ Kullanılabilir komutlar:
</message>
<message>
<source>Debugging mode is enabled.</source>
- <translation type="unfinished"/>
+ <translation>Hata ayıklama kipi etkin.</translation>
</message>
<message>
<source>Operating system: %1
@@ -6069,7 +6326,7 @@ MİB mimarisi: %2
</message>
<message>
<source>Cryptographic libraries:</source>
- <translation type="unfinished"/>
+ <translation>Şifreleme kütüphaneleri:</translation>
</message>
<message>
<source>Cannot generate a password and prompt at the same time!</source>
@@ -6081,7 +6338,7 @@ MİB mimarisi: %2
</message>
<message>
<source>Path of the group to add.</source>
- <translation type="unfinished"/>
+ <translation>Eklenecek kümenin yolu.</translation>
</message>
<message>
<source>Group %1 already exists!</source>
@@ -6124,10 +6381,6 @@ MİB mimarisi: %2
<translation>Bu yardımı görüntüle.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>slot</source>
<translation type="unfinished"/>
</message>
@@ -6144,10 +6397,6 @@ MİB mimarisi: %2
<translation type="unfinished"/>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Bir veritabanının içeriğini belirtilen biçimde standart çıktıya aktarır.</translation>
</message>
@@ -6161,7 +6410,7 @@ MİB mimarisi: %2
</message>
<message>
<source>Use numbers</source>
- <translation type="unfinished"/>
+ <translation>Sayıları kullan</translation>
</message>
<message>
<source>Invalid password length %1</source>
@@ -6188,10 +6437,6 @@ MİB mimarisi: %2
<translation>Yeni veritabanının yolu.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Veritabanı başarıyla içe aktarıldı.</translation>
</message>
@@ -6284,10 +6529,6 @@ MİB mimarisi: %2
<translation type="unfinished"/>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Veritabanını şifrelemek için parola gir (isteğe bağlı):</translation>
</message>
@@ -6303,10 +6544,6 @@ MİB mimarisi: %2
<source>User name</source>
<translation>Kullanıcı adı</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
@@ -6319,12 +6556,199 @@ MİB mimarisi: %2
<source>Show the protected attributes in clear text.</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation type="unfinished"/>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
- <translation>Sıkıştırmada dahili zlib hatası:</translation>
+ <translation>Sıkıştırılırken dahili zlib hatası:</translation>
</message>
<message>
<source>Error writing to underlying device: </source>
@@ -6332,7 +6756,7 @@ MİB mimarisi: %2
</message>
<message>
<source>Error opening underlying device: </source>
- <translation>Temel aygıtı açma hatası:</translation>
+ <translation>Temel cihaz açılırken hata oluştu:</translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
@@ -6340,7 +6764,7 @@ MİB mimarisi: %2
</message>
<message>
<source>Internal zlib error when decompressing: </source>
- <translation>Sıkıştırma açılırken dahili zlib hatası:</translation>
+ <translation>Açma sırasında dahili zlib hatası:</translation>
</message>
</context>
<context>
@@ -6355,6 +6779,290 @@ MİB mimarisi: %2
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Kötü</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Zayıf</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Başlık</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Yol</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Başlık</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Yol</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>once</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Daha fazla bilgi için farenizi hata simgeli satırların üzerine getirin.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Adı</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Değer</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Lütfen bekleyin, veritabanı istatistikleri hesaplanıyor...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Veritabanı adı</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Açıklama</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Konum</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Son kaydedilen</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Kaydedilmemiş değişiklikler</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>evet</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>hayır</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Veritabanı değiştirildi, ancak değişiklikler henüz diske kaydedilmedi.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Küme sayısı</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Girdilerin sayısı</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Süresi dolmuş girdi sayısı</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Veritabanı süresi dolmuş girdiler içeriyor.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Benzersiz parolalar</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Benzersiz olmayan parolalar</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Parolaların %10&apos;undan fazlası yeniden kullanılır. Mümkünse benzersiz parolalar kullanın.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Azami parola kullanımı</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Bazı parolalar üç kereden fazla kullanılır. Mümkünse benzersiz parolalar kullanın.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Kısa parola sayısı</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Önerilen asgari parola uzunluğu en az 8 karakterdir.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Zayıf parola sayısı</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>&apos;İyi&apos; veya &apos;mükemmel&apos; derecesine sahip uzun, rastgele parolalar kullanmanızı öneririz.</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Ortalama parola uzunluğu</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 karakter</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Ortalama parola uzunluğu on karakterden az. Daha uzun parolalar daha fazla güvenlik sağlar.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6370,7 +7078,7 @@ MİB mimarisi: %2
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>Çalışan istemci yok, kimlik silemezsiniz.</translation>
+ <translation>Çalışan istemci yok, kimlik kaldırılamaz.</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
@@ -6388,6 +7096,14 @@ MİB mimarisi: %2
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Onay isteği istemci tarafından desteklenmiyor (seçenekleri kontrol edin).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6429,7 +7145,7 @@ MİB mimarisi: %2
</message>
<message>
<source>match anything</source>
- <translation>hepsiyle eşleştir</translation>
+ <translation>her şeyle eşleştir</translation>
</message>
<message>
<source>match one</source>
@@ -6456,7 +7172,7 @@ MİB mimarisi: %2
</message>
<message>
<source>Limit search to selected group</source>
- <translation>Seçilen gruba aramayı sınırla</translation>
+ <translation>Aramayı seçilen kümeyle sınırla</translation>
</message>
<message>
<source>Search Help</source>
@@ -6495,26 +7211,10 @@ MİB mimarisi: %2
<translation type="unfinished"/>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Girdiler istemciler tarafından silindiğinde onaylamayın.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Maruz kalan veritabanı kümeleri:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Dosya Adı</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Küme</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Yönetim</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Yetki</translation>
</message>
@@ -6523,40 +7223,20 @@ MİB mimarisi: %2
<translation>Bu uygulamalar şu anda bağlı:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Uygulama</translation>
- </message>
- <message>
- <source>Disconnect</source>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Veritabanı ayarları</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>Veritabanı ayarlarını düzenle</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Veritabanı kilidini kaldır</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
<translation type="unfinished"/>
</message>
<message>
- <source>Lock database</source>
- <translation>Veritabanını kilitle</translation>
- </message>
- <message>
- <source>Unlock to show</source>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
<translation type="unfinished"/>
</message>
<message>
- <source>None</source>
- <translation>Yok</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6829,10 +7509,6 @@ MİB mimarisi: %2
<translation>İmzalı içe aktarma başarılı</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Beklenmeyen hata</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>İmzalanmamış paylaşım konteyneri desteklenmiyor -içeri alma engellendi</translation>
</message>
@@ -7001,6 +7677,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7040,7 +7723,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation>Keepassxc.org adresinden indir</translation>
+ <translation>Keepassxc.org adresinden indirin</translation>
</message>
<message>
<source>You&apos;re up-to-date!</source>
@@ -7055,7 +7738,7 @@ Example: JBSWY3DPEHPK3PXP</source>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Parolalarınızı bir KeePassXC veritabanında güvenle depolamaya başlayın</translation>
+ <translation>Parolalarınızı KeePassXC veritabanında güvenle depolamaya başlayın</translation>
</message>
<message>
<source>Create new database</source>
@@ -7091,6 +7774,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Basın</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Pasif</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7098,19 +7828,11 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>YubiKey Challenge-Response</source>
- <translation>YubiKey Challenge-Response</translation>
+ <translation>YubiKey Karşılama Yanıtı</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Eğer bir &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt; sahibiyseniz ek güvenlik için kullanabilirsiniz.&lt;/p&gt;&lt;p&gt;YubiKey yuvalarından birinin programlanması gerekir &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKey algılanmadı, lütfen takılı olduğundan emin olun.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey eklenmedi.</translation>
+ <translation>&lt;p&gt;Eğer bir &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt; sahibiyseniz ek güvenlik için kullanabilirsiniz.&lt;/p&gt;&lt;p&gt;YubiKey yuvalarından birinin programlanması gerekir &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Karşılama-Yanıtı&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -7120,5 +7842,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>Donanım anahtarı yuvası seçimi</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation type="unfinished"/>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_uk.ts b/share/translations/keepassx_uk.ts
index 58361a044..1d63be5c6 100644
--- a/share/translations/keepassx_uk.ts
+++ b/share/translations/keepassx_uk.ts
@@ -11,7 +11,7 @@
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Повідомляйте про проблеми на &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>Повідомляйте про вади на &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
@@ -27,7 +27,7 @@
</message>
<message>
<source>Debug Info</source>
- <translation>Інформація щодо зневадження</translation>
+ <translation>Зневаджувальна інформація</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
@@ -35,7 +35,7 @@
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Скопіювати в кишеню</translation>
+ <translation>Копіювати в буфер обміну</translation>
</message>
<message>
<source>Project Maintainers:</source>
@@ -49,19 +49,39 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>Увімкнути посередника SSH (вимагає перезапуск)</translation>
- </message>
- <message>
<source>Use OpenSSH for Windows instead of Pageant</source>
<translation>Використовувати OpenSSH для Windows замість Pageant</translation>
</message>
+ <message>
+ <source>Enable SSH Agent integration</source>
+ <translation>Увімкнути інтеграцію SSH Agent</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>значення SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>перевизначення SSH_AUTH_SOCK</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(порожньо)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>Немає доступних сокетів SSH Agent. Або впевніться, що змінна оточення SSH_AUTH_SOCK існує, або вкажіть перевизначення для неї.</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>З&apos;єднання з SSH Agent працює!</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
<message>
<source>Application Settings</source>
- <translation>Налаштування застосунку</translation>
+ <translation>Налаштування програми</translation>
</message>
<message>
<source>General</source>
@@ -103,12 +123,24 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Ви дійсно бажаєте повністю скинути налаштування і повернутись до стандартних параметрів?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>Монохромна (світла)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>Монохромна (темна)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>Кольорова</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
<message>
<source>Basic Settings</source>
- <translation>Базове налаштування</translation>
+ <translation>Основні налаштування</translation>
</message>
<message>
<source>Startup</source>
@@ -127,10 +159,6 @@
<translation>Керування файлами</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>Безпечно зберігати файли сховища (може бути несумісним з Dropbox та ін.)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>Створювати резервну копію сховища перед збереженням</translation>
</message>
@@ -143,10 +171,6 @@
<translation>Автоматично зберігати перед виходом</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Не помічати сховище зміненим після змін, що не стосуються даних (напр. розкриття груп)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Автоматично перезавантажувати сховище після зовнішніх змін</translation>
</message>
@@ -159,30 +183,14 @@
<translation>Використовувати для нових записів значок групи</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>Сховати панель передперегляду запису</translation>
- </message>
- <message>
- <source>General</source>
- <translation>Загальне</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>Сховати панель інструментів</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
- <translation>Згортати вікно замість закриття</translation>
+ <translation>Мінімізувати вікно замість закриття</translation>
</message>
<message>
<source>Show a system tray icon</source>
<translation>Показувати значок у системному лотку</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>Темний значок у системному лотку</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>Після згортання ховати вікно в системний лоток</translation>
</message>
@@ -203,23 +211,11 @@
<translation>Завжди питати перед автозаповненням</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>Глобальне сполучення клавіш для автозаповнення</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>Затримка введення символів під час автозаповнення</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> мс</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>Затримка початку автозаповнення</translation>
- </message>
- <message>
<source>Movable toolbar</source>
<translation>Рухома панель інструментів</translation>
</message>
@@ -244,10 +240,6 @@
<translation>Пропонувати бета випуски для оновлення</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>Стиль кнопок:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>Мова:</translation>
</message>
@@ -293,18 +285,10 @@
<translation>Стиль кнопки для панелі інструментів</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>Використовувати моноширинний шрифт для нотаток</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>Вибір мови</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>Скинути нетипове налаштування</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>Глобальне сполучення клавіш для автозаповнення</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>Затримка в мілісекундах перед початком автозаповнення</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>Автоматично запускати KeePassXC при завантаженні системи</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>Помічати сховище зміненим після змін, що не стосуються даних (наприклад, розкриття груп)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>Безпечно зберігати файли сховищ (вимкніть, якщо виникають проблеми з Dropbox та ін.)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>Інтерфейс користувача</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>Стиль кнопок панелі інструментів:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>Використовувати моноширинний шрифт для нотаток</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>Варіант піктограми в області сповіщень:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>Скинути налаштування до типових...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>Затримка введення символів під час автозаповнення</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>Глобальне сполучення клавіш для автозаповнення:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>Затримка початку автозаповнення:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -325,7 +353,7 @@
</message>
<message>
<source>Clear clipboard after</source>
- <translation>Очищати кишеню через</translation>
+ <translation>Очищати буфер обміну через</translation>
</message>
<message>
<source> sec</source>
@@ -365,18 +393,6 @@
<translation>Блокувати попередньо заблоковане сховище після завершення автозаповнення</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>Не запитувати підтвердження пароля, якщо він не прихований</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>Не приховувати паролі під час їх редагування</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>Не показувати текст-заповнювач для порожніх полів паролів</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>Приховувати паролі у панелі передперегляду запису</translation>
</message>
@@ -413,6 +429,18 @@
<source>Clear search query after</source>
<translation>Очищати пошуковий запит через</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>Вимагати підтвердження пароля, якщо він не прихований</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>Приховувати паролі під час їх редагування</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>Показувати текст-заповнювач для порожніх полів паролів</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
@@ -527,34 +555,36 @@
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>Підтвердження доступу для KeePassXC-Browser</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>Запит доступу для KeePassXC-Browser</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>Запам&apos;ятати цей вибір</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 запитує доступ до наступних записів:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>Дозволити</translation>
+ <source>Remember access to checked entries</source>
+ <translation>Запам&apos;ятати доступ до позначених записів</translation>
</message>
<message>
- <source>Deny</source>
- <translation>Заборонити</translation>
+ <source>Remember</source>
+ <translation>Запам&apos;ятати</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 запитує доступ до паролів у таких записах.
-Оберіть, чи бажаєте Ви дозволити доступ.</translation>
+ <source>Allow access to entries</source>
+ <translation>Дозволити доступ до записів</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>Дозволити доступ</translation>
+ <source>Allow Selected</source>
+ <translation>Дозволити обрані</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>Заборонити доступ</translation>
+ <source>Deny All</source>
+ <translation>Заборонити всі</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>Вимкнути для цього сайту</translation>
</message>
</context>
<context>
@@ -579,199 +609,261 @@ Please select the correct database for saving credentials.</source>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>Діалог</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: новий запит на прив&apos;язку ключа</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Це необхідно для надання KeePassXC-Browser доступу до Ваших сховищ</translation>
+ <source>Save and allow access</source>
+ <translation>Зберегти і дозволити доступ</translation>
</message>
<message>
- <source>General</source>
- <translation>Загальне</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: перезаписати наявний ключ?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>Увімкнути сполучення з такими переглядачами:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>Спільний ключ шифрування з назвою «%1» вже існує.
+Перезаписати його?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: оновити запис</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>Бажаєте оновити інформацію у %1 – %2?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>Скасувати</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>Перетворення атрибутів користувацьких даних…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Показувати повідомлення, коли надходить запит на реєстраційні дані</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: Атрибути KeePassHTTP перетворено</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>Запитувати щодо розблокування сховища, якщо воно заблоковане</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>Атрибути %1 запису(-ів) успішно перетворені.
+%2 ключів переміщено до користувацьких даних.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>%n ключ успішно переміщено до користувацьких даних.</numerusform><numerusform>%n ключа успішно переміщено до користувацьких даних.</numerusform><numerusform>%n ключів успішно переміщено до користувацьких даних.</numerusform><numerusform>%n ключів успішно переміщено до користувацьких даних.</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Показані тільки записи з такою самою схемою (http://, https://, ftp://, …).</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: Записів з атрибутами KeePassHTTP не знайдено!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>Узгодити зі схемами URL (напр. https:// …)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>Поточне сховище не містить запису з атрибутами KeePassHTTP.</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Показувати лише найкращі збіги для певного URL замість усіх записів для всієї області.</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: знайдено застаріле налаштування сполучення з переглядачами</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>Показувати лише найкращі збіги реєстраційних даних</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: Створити нову групу</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Сортувати збіжні реєстраційні дані за заголовком</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>Отримано запит для створення нової групи &quot;%1&quot;.
+Ви хочете створити цю групу?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Сортувати збіжні реєстраційні дані за іменем користувача</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>Ваші параметри KeePassXC-Переглядача мають бути переміщені до параметрів сховища.
+Це необхідно для підтримання сполучень з Вашим поточним переглядачем.
+Бажаєте перемістити параметри зараз?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>Розширене</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>Більше не показувати це попередження</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ніколи не запитувати перед читанням реєстраційних даних</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>Ви одержали запит на сполучення з таким сховищем:
+%1
+
+Надайте сполученню унікальне ім&apos;я або ідентифікатор, наприклад:
+chrome-на-ноутбуці.</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Ніколи не запитувати перед оновленням реєстраційних даних</translation>
+ <source>Dialog</source>
+ <translation>Діалог</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>Шукати збіги з реєстраційними даними у всіх відкритих сховищах</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>Це необхідно для надання KeePassXC-Browser доступу до Ваших сховищ</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>Автоматичне створення та оновлення текстових полів не втілене.</translation>
+ <source>Enable browser integration</source>
+ <translation>Увімкнути сполучення з переглядачами</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>Показувати розширені текстові поля, що починаються з «KPH: »</translation>
+ <source>General</source>
+ <translation>Загальні</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Автоматично оновлює шлях до сценаріїв власного обміну повідомленнями для KeePassXC або двійкового посередника KeePassXC під час запуску.</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>Підтримка переглядачів, встановлених через Snap, наразі не втілена.</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>Оновлювати файли оголошень для власного обміну повідомленнями під час запуску</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>Увімкнути сполучення з такими переглядачами:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>Підтримувати посередницький застосунок між KeePassXC та розширенням переглядача.</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>Використовувати посередницький застосунок між KeePassXC та розширенням переглядача</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Використовувати власне розташування посередника, якщо Ви встановили посередника вручну.</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>Використовувати власне розташування посередника</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>Переглянути...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;Попередження:&lt;/b&gt; ці параметри можуть бути небезпечними!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>Вибрати власне розташування посередника</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>Переглядач &amp;Tor</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Показувати повідомлення, коли надходить запит на реєстраційні дані</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>Виконувані файли</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>Запитувати щодо розблокування сховища, якщо воно заблоковане</translation>
</message>
<message>
- <source>All Files</source>
- <translation>Всі файли</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>Показані тільки записи з такою самою схемою (http://, https://, ftp://, …).</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>Не запитувати дозвіл для HTTP &amp;Basic Auth</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>Узгоджувати схеми URL (наприклад, https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>Через заходи безпеки у Snap Вам необхідно виконати сценарій для сполучення з переглядачем. &lt;br /&gt;Ви можете знайти файл сценарію в %1</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>Показувати лише найкращі збіги для певного URL замість усіх записів для всієї області.</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>Нижче Ви можете знайти довідку з використання розширення переглядача</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>Показувати лише найкращі збіги реєстраційних даних</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>Для сполучення з переглядачем необхідний KeePassXC-Browser. &lt;br /&gt;Завантажте його для %1 та %2. %3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>Показує знечинені реєстраційні дані. Заголовок міститимить позначку [знечинені].</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>Дозволити показ недійсних реєстраційних даних.</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>Показує знечинені реєстраційні дані. Заголовок міститимить позначку [знечинені].</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>Збіги з реєстраційними даними будуть знайдені в усіх сполучених сховищах.</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>Дозволити показ знечинених реєстраційних даних.</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Шукати збіги з реєстраційними даними у всіх відкритих сховищах</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>Увімкнути сполучення з переглядачами</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Сортувати збіжні реєстраційні дані за заголовком</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>Підтримка переглядачів, встановлених через Snap, наразі не втілена.</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Сортувати збіжні реєстраційні дані за іменем користувача</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>Збіги з реєстраційними даними будуть знайдені в усіх сполучених сховищах.</translation>
+ <source>Advanced</source>
+ <translation>Розширене</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ніколи не запитувати перед читанням реєстраційних даних</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>Ніколи не запитувати перед оновленням реєстраційних даних</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>Не запитувати дозвіл для HTTP Basic Auth</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>Автоматичне створення та оновлення текстових полів не втілене.</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>Показувати розширені текстові поля, що починаються з &quot;KPH: &quot;</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
<translation>Не показувати вигульк, що рекомендує перетворення налаштування застарілого KeePassHTTP.</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>Не запитувати щодо перетворення налаштування застарілого KeePassHTTP.</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>Не запитувати щодо перетворення налаштувань KeePassHTTP.</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>Автоматично оновлює шлях до сценаріїв власного обміну повідомленнями для KeePassXC або двійкового посередника KeePassXC під час запуску.</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>Оновлювати файли маніфесту native messaging під час запуску</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>Використовувати власне розташування посередника, якщо Ви встановили посередника вручну.</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation type="unfinished"/>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,107 +874,81 @@ Please select the correct database for saving credentials.</source>
<translation>Переглядач для власного файла посередника</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;Попередження:&lt;/b&gt; посередницький застосунок для KeePassXC-не знайдено!&lt;br /&gt;Будь ласка, перевірте його наявність у теці встановлення KeePassXC або підтвердьте влвсний шлях до нього у розширених параметрах.&lt;br /&gt;Сполучення з переглядачами &lt;b&gt;не працюватими&lt;/b&gt; без посередницького застосунку.&lt;br /&gt;Очікуваний шлях: %1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>Переглянути...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: новий запит на прив&apos;язку ключа</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Save and allow access</source>
- <translation>Зберегти і дозволити доступ</translation>
+ <source>Browser type:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: перезаписати наявний ключ?</translation>
+ <source>Toolbar button style</source>
+ <translation>Стиль кнопки для панелі інструментів</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>Спільний ключ шифрування з назвою «%1» вже існує.
-Перезаписати його?</translation>
+ <source>Config Location:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: оновити запис</translation>
+ <source>Custom browser location field</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>Бажаєте оновити інформацію у %1 – %2?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Abort</source>
- <translation>Скасувати</translation>
+ <source>Browse for custom browser path</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>Перетворення ознак на користувацькі дані…</translation>
+ <source>Custom extension ID:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: властивості KeePassHTTP перетворено</translation>
+ <source>Custom extension ID</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>Ознаки %1 запису(-ів) успішно перетворені.
-%2 ключів переміщено до користувацьких даних.</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n ключ успішно переміщено до користувацьких даних.</numerusform><numerusform>%n ключа успішно переміщено до користувацьких даних.</numerusform><numerusform>%n ключів успішно переміщено до користувацьких даних.</numerusform><numerusform>%n ключів успішно переміщено до користувацьких даних.</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>Через заходи безпеки у Snap Вам необхідно виконати сценарій для сполучення з переглядачем. &lt;br /&gt;Ви можете знайти файл сценарію в %1</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Записів з властивостями KeePassHTTP не знайдено!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>Поточне сховище не містить запису з властивостями KeePassHTTP.</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>Нижче Ви можете знайти довідку з використання розширення переглядача</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: знайдено застаріле налаштування сполучення з переглядачами</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: Створити нову групу</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;Попередження:&lt;/b&gt; ці параметри можуть бути небезпечними!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>Отримано запит для створення нової групи &quot;%1&quot;.
-Ви хочете створити цю групу?
-</translation>
+ <source>Executable Files</source>
+ <translation>Виконувані файли</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>Параметри Вашого KeePassXC-Browser мають бути переміщеними до параметрів сховища.
-Це необхідно для підтримання сполучень з Вашим поточним переглядачем.
-Бажаєте перемістити параметри зараз?</translation>
+ <source>All Files</source>
+ <translation>Всі файли</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>Більше не показувати це попередження</translation>
+ <source>Select custom proxy location</source>
+ <translation>Вибрати власне розташування посередника</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>Ви одержали запит на сполучення з таким сховищем:
-%1
-
-Надайте сполученню унікальне ім&apos;я або ідентифікатор, наприклад:
-chrome-на-ноутбуці.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -939,10 +1005,6 @@ chrome-на-ноутбуці.</translation>
<translation>Коментарі починаються з</translation>
</message>
<message>
- <source>First record has field names</source>
- <translation>Перший запис має назви полів</translation>
- </message>
- <message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Використовувати &apos;\&apos; для захисту символів</translation>
</message>
@@ -951,14 +1013,6 @@ chrome-на-ноутбуці.</translation>
<translation>Попередній перегляд</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>Розташування колонок</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>Відсутні у файлі CSV</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>Імпортовано з файлу CSV</translation>
</message>
@@ -971,14 +1025,6 @@ chrome-на-ноутбуці.</translation>
<translation>Помилка</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>Порожня назва поля %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>колонка %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>У файлі CSV знайдено помилки!</translation>
</message>
@@ -1008,6 +1054,58 @@ chrome-на-ноутбуці.</translation>
<source>CSV import preview</source>
<translation>Попередній перегляд імпортованого CSV</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>Остання зміна</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Пароль</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Створено</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Примітки</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заголовок</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Група</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>Ім’я користувача</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1026,17 +1124,12 @@ chrome-на-ноутбуці.</translation>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n рядок</numerusform><numerusform>%n рядка</numerusform><numerusform>%n рядків</numerusform><numerusform>%n рядків</numerusform></translation>
+ <translation><numerusform>%n рядок</numerusform><numerusform>%n рядки</numerusform><numerusform>%n рядків</numerusform><numerusform>%n рядків</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>Корінь</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>Файл %1 не існує.</translation>
</message>
@@ -1078,6 +1171,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>Смітник</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>Паролі</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1090,7 +1196,7 @@ Backup database located at %2</source>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>Файловий ключ:</translation>
+ <translation>Файл-ключ:</translation>
</message>
<message>
<source>Refresh</source>
@@ -1098,17 +1204,17 @@ Backup database located at %2</source>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Застарілий формат файлового ключа</translation>
+ <translation>Застарілий формат файла-ключа</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Ви використовуєте застарілий формат файлового ключа, підтримку якого
+ <translation>Ви використовуєте застарілий формат файла-ключа, підтримку якого
може бути скасовано у майбутньому.
-Бажано створити новий файловий ключ.</translation>
+Бажано створити новий файл-ключ.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1120,21 +1226,17 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Key files</source>
- <translation>Файлові ключі</translation>
+ <translation>Файли-ключі</translation>
</message>
<message>
<source>Select key file</source>
- <translation>Оберіть файловий ключ</translation>
+ <translation>Оберіть файл-ключ</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
<translation>Відкриття файлового ключа зазнало невдачі: %1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>Вибрати гніздо...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>Розблокувати сховище KeePassXC</translation>
</message>
@@ -1147,20 +1249,12 @@ Please consider generating a new key file.</source>
<translation>Поле пароля</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Перемкнути видимість пароля</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>Вибір файлового ключа</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>Вибір гнізда апаратного захисту</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation>Вибрати файловий ключ</translation>
+ <translation>Вибір файлового ключа</translation>
</message>
<message>
<source>Browse...</source>
@@ -1219,10 +1313,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
&lt;p&gt;Натисніть тут для додаткової інформації...&lt;/p&gt;</translation>
</message>
<message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;На додаток до Вашого головного пароля Ви можете використовувати таємний файл для посилення захисту Вашого сховища. Такий файл можна створити у розділі налаштування безпеки Вашого сховища.&lt;/p&gt;&lt;p&gt;Цей файл &lt;strong&gt;відрізняється&lt;/strong&gt; від Вашого файла сховища *.kdbx!&lt;br&gt;Якщо у Вас немає файлового ключа, залиште це поле порожнім.&lt;/p&gt;&lt;p&gt;Натисніть тут для додаткової інформації...&lt;/p&gt;</translation>
- </message>
- <message>
<source>Key file help</source>
<translation>Довідка щодо файлового ключа</translation>
</message>
@@ -1231,10 +1321,6 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>Вибрати файловий ключ...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>Неможливо використати файл сховища як файловий ключ</translation>
</message>
@@ -1244,6 +1330,30 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Ви не можете використовувати файл сховища як файловий ключ.
Якщо у Вас немає файлового ключа, залиште, будь ласка, це поле порожнім.</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>Натисніть, будь ласка, кнопку на вашому YubiKey!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Виявлення апаратних ключів...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Не виявлено апаратних ключів</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1260,17 +1370,13 @@ If you do not have a key file, please leave the field empty.</source>
</message>
<message>
<source>General</source>
- <translation>Загальне</translation>
+ <translation>Загальні</translation>
</message>
<message>
<source>Security</source>
<translation>Безпека</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>Головний ключ</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>Налаштування шифрування</translation>
</message>
@@ -1278,6 +1384,10 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>Сполучення з переглядачем</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
@@ -1286,18 +1396,6 @@ If you do not have a key file, please leave the field empty.</source>
<translation>Налаштування KeePassXC-Browser</translation>
</message>
<message>
- <source>&amp;Disconnect all browsers</source>
- <translation>&amp;Від&apos;єднати від усіх переглядачів</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>&amp;Забути особливе налаштування сайтів у всіх записах</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>Перемістити властивості KeePassHTTP до &amp;користувацьких даних у KeePassXC-Browser</translation>
- </message>
- <message>
<source>Stored keys</source>
<translation>Збережені ключі</translation>
</message>
@@ -1351,7 +1449,7 @@ This may prevent connection to the browser plugin.</source>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Успішно видалено %n ключ шифрування з параметрів KeePassXC.</numerusform><numerusform>Успішно видалено %n ключа шифрування з параметрів KeePassXC.</numerusform><numerusform>Успішно видалено %n ключів шифрування з параметрів KeePassXC.</numerusform><numerusform>Успішно видалено %n ключів шифрування з параметрів KeePassXC.</numerusform></translation>
+ <translation><numerusform>Успішно видалено %n ключ шифрування з параметрів KeePassXC.</numerusform><numerusform>Успішно видалено %n ключі шифрування з параметрів KeePassXC.</numerusform><numerusform>Успішно видалено %n ключів шифрування з параметрів KeePassXC.</numerusform><numerusform>Успішно видалено %n ключів шифрування з параметрів KeePassXC.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1377,7 +1475,7 @@ Permissions to access entries will be revoked.</source>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Успішно видалено дозволи для %n запису.</numerusform><numerusform>Успішно видалено дозволи для %n записів.</numerusform><numerusform>Успішно видалено дозволи для %n записів.</numerusform><numerusform>Успішно видалено дозволи для %n записів.</numerusform></translation>
+ <translation><numerusform>Успішно видалено дозволи з %n запису.</numerusform><numerusform>Успішно видалено дозволи з %n записів.</numerusform><numerusform>Успішно видалено дозволи з %n записів.</numerusform><numerusform>Успішно видалено дозволи з %n записів.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
@@ -1389,7 +1487,7 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>Перемістити властивості KeePassHTTP до користувацьких даних</translation>
+ <translation>Перемістити атрибути KeePassHTTP до користувацьких даних</translation>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
@@ -1405,6 +1503,66 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>Видалити вибраний ключ</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>Створено</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>Поліпшити захист...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>Пароль не встановлено</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>&lt;b&gt;Попередження!&lt;/b&gt; Ви не встановили пароль. Використання сховища без пароля не рекомендоване!
+
+Ви дійсно хочете продовжити без пароля?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>Продовжити без пароля</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>Жодного шифрувального ключа не додано</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>Ви мусите додати щонайменьше один шифрувальний ключ, щоб захистити Ваше сховище!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Невідома помилка</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1429,10 +1587,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Циклів перетворення:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>Оцінити секундну затримку еталонним тестом</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>Використана пам&apos;ять:</translation>
</message>
@@ -1453,14 +1607,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Змінити</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 мс</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 с</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>Вищі значення поліпшують захист, але сповільнюють відкривання сховища.</translation>
</message>
@@ -1530,22 +1676,12 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> MiB</source>
<comment>Abbreviation for Mebibytes (KDF settings)</comment>
- <translation><numerusform> МіБ</numerusform><numerusform> МіБ</numerusform><numerusform> МіБ</numerusform><numerusform> МіБ</numerusform></translation>
+ <translation><numerusform>МіБ</numerusform><numerusform>МіБ</numerusform><numerusform>МіБ</numerusform><numerusform>МіБ</numerusform></translation>
</message>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>потік</numerusform><numerusform>потоків</numerusform><numerusform>потоків</numerusform><numerusform>потоків</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform></translation>
+ <translation><numerusform>потік</numerusform><numerusform>потоки</numerusform><numerusform>потоків</numerusform><numerusform>потоків</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1579,6 +1715,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation>Паралельність</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1587,16 +1731,16 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>Виставлені записи</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>Не виставляти це сховище</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>Виставити записи &amp;з такої групи:</translation>
+ <source>Expose entries under this group:</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>Увімкніть fd.o Таємної служби для доступу до цих параметрів.</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -1631,7 +1775,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source> MiB</source>
- <translation>МіБ</translation>
+ <translation> МіБ</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1642,10 +1786,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>Додаткове налаштування сховища</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>Увімкнути стиснення (рекомендовано)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>Поле назви сховища</translation>
</message>
@@ -1679,6 +1819,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation> (старий)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1713,45 +1857,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>Поліпшити захист...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>Жодного шифрувального ключа не додано</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>Ви мусите додати щонайменьше один шифрувальний ключ, щоб захистити Ваше сховище!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>Пароль не встановлено</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>&lt;b&gt;Попередження!&lt;/b&gt; Ви не встановили пароль. Використання сховища без пароля не рекомендоване!
-
-Ви дійсно хочете продовжити без пароля?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>Невідома помилка</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>Зміна головного ключа зазнала невдачі</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>Продовжити без пароля</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1771,125 +1876,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>Статистика</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>Наведіть мишкою на рядки зі значком помилки для додаткової інформації.</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>Назва</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>Значення</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>Назва сховища</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>Опис</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>Розташування</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>Останнє збереження</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>Незбережені зміни</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>так</translation>
- </message>
- <message>
- <source>no</source>
- <translation>ні</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>Сховище було змінено, але поточні зміни ще не було записано на диск.</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>Кількість груп</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>Кількість записів</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>Кількість знечинених записів</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>Сховище містить знечинені записи.</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>Унікальні паролі</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>Повторювані паролі</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>Понад 10% паролів повторюються. Використовуйте унікальні паролі завжди, коли це можливо.</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>Найбільша кількість повторень паролю</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>Деякі паролі використано понад три рази. Використовуйте унікальні паролі завжди, коли це можливо.</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>Кількість коротких паролів</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>Рекомендована найменша довжина пароля — 8 символів.</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>Кількість слабких паролів</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>Рекомендовано використовувати довгі, випадкові паролі з оцінкою «добре» або «відмінно».</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>Середня довжина пароля</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 символів</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>Середня довжина пароля менша 10 символів. Довші паролі покращують безпеку.</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>Зачекайте, будь ласка, триває обчислення статистики сховища...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1984,6 +1970,10 @@ This is definitely a bug, please report it to the developers.</source>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Ви збираєтесь експортувати Ваше сховище в незашифрований файл. Це зробить Ваші паролі і вразливі дані незахищеними! Ви дійсно бажаєте продовжити?</translation>
</message>
+ <message>
+ <source>Open OPVault</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -2071,7 +2061,7 @@ Do you want to merge your changes?</source>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Перемістити запис в смітник?</numerusform><numerusform>Перемістити записи в смітник?</numerusform><numerusform>Перемістити записи в смітник?</numerusform><numerusform>Перемістити записи в смітник?</numerusform></translation>
+ <translation><numerusform>Перемістити запис у смітник?</numerusform><numerusform>Перемістити записи в смітник?</numerusform><numerusform>Перемістити записи в смітник?</numerusform><numerusform>Перемістити записи в смітник?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2165,6 +2155,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>Сховище відкрито у режимі читання. Автоматичне збереження вимкнено.</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2174,7 +2172,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Advanced</source>
- <translation>Розширене</translation>
+ <translation>Розширені</translation>
</message>
<message>
<source>Icon</source>
@@ -2209,14 +2207,6 @@ Disable safe saves and try again?</source>
<translation>Вибрати таємний ключ</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>Файл занадто великий для таємного ключа</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>Відкриття таємного ключа зазнало невдачі</translation>
- </message>
- <message>
<source>Entry history</source>
<translation>Журнал запису</translation>
</message>
@@ -2229,16 +2219,12 @@ Disable safe saves and try again?</source>
<translation>Змінити запис</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>Паролі не співпадають.</translation>
- </message>
- <message>
<source>New attribute</source>
- <translation>Нова ознака</translation>
+ <translation>Новий атрибут</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Ви дійсно бажаєте видалити цю ознаку?</translation>
+ <translation>Ви дійсно бажаєте видалити цей атрибут?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2246,35 +2232,19 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>%n тиждень</numerusform><numerusform>%n тижні</numerusform><numerusform>%n тижнів</numerusform><numerusform>%n тижнів</numerusform></translation>
+ <translation><numerusform>%n тиждень</numerusform><numerusform>%n тижня</numerusform><numerusform>%n тижнів</numerusform><numerusform>%n тижнів</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n місяць</numerusform><numerusform>%n місяці</numerusform><numerusform>%n місяців</numerusform><numerusform>%n місяців</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>Застосувати створений пароль?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>Бажаєте призначити створений пароль цьому запису?</translation>
+ <translation><numerusform>%n місяць</numerusform><numerusform>%n місяця</numerusform><numerusform>%n місяців</numerusform><numerusform>%n місяців</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>Запис успішно оновлено.</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>Запис має незбережені зміни</translation>
- </message>
- <message>
<source>New attribute %1</source>
- <translation>Нова ознака %1</translation>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[ЗАХИЩЕНО] Натисніть «показати», щоб переглянути або змінити</translation>
+ <translation>Новий атрибут %1</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
@@ -2296,12 +2266,32 @@ Disable safe saves and try again?</source>
<source>Are you sure you want to remove this URL?</source>
<translation>Ви дійсно бажаєте видалити цей URL?</translation>
</message>
+ <message>
+ <source>Reveal</source>
+ <translation>Показати</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
<message>
<source>Additional attributes</source>
- <translation>Додаткові ознаки</translation>
+ <translation>Додаткові атрибути</translation>
</message>
<message>
<source>Add</source>
@@ -2371,6 +2361,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>Вибір кольору тла</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2379,14 +2377,6 @@ Disable safe saves and try again?</source>
<translation>Увімкнути автозаповнення для цього запису</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>Успадкувати типову послідовність автозаповнення від &amp;групи</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;Використати власну послідовність автозаповнення:</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>Прив&apos;язки вікон</translation>
</message>
@@ -2442,6 +2432,14 @@ Disable safe saves and try again?</source>
<source>Custom Auto-Type sequence for this window</source>
<translation>Власна послідовність автозаповнення для цього вікна</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>Успадкувати типову послідовність автозаповнення від групи</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>Використовувати свою послідовність автозаповнення:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2477,6 +2475,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>Змінити</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2528,18 +2534,10 @@ Disable safe saves and try again?</source>
<translation>Пароль:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>Повторіть пароль:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>Заголовок:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>Примітки</translation>
- </message>
- <message>
<source>Presets</source>
<translation>Заготовки</translation>
</message>
@@ -2552,10 +2550,6 @@ Disable safe saves and try again?</source>
<translation>Ім’я користувача:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>Знечинюється</translation>
- </message>
- <message>
<source>Url field</source>
<translation>Поле URL</translation>
</message>
@@ -2564,22 +2558,10 @@ Disable safe saves and try again?</source>
<translation>Завантажити фавікон для URL</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>Поле повторення пароля</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>Перемкнути генератор паролів</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Поле пароля</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Перемкнути видимість пароля</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>Перемкнути видимість нотаток</translation>
</message>
@@ -2611,6 +2593,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>Перемкнути знечинення</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>Примітки:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2656,7 +2650,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Скопіювати в кишеню</translation>
+ <translation>Копіювати в буфер обміну</translation>
</message>
<message>
<source>Private key</source>
@@ -2746,10 +2740,6 @@ Disable safe saves and try again?</source>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>Форма</translation>
- </message>
- <message>
<source>Type:</source>
<translation>Тип:</translation>
</message>
@@ -2758,10 +2748,6 @@ Disable safe saves and try again?</source>
<translation>Шлях:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>Пароль:</translation>
</message>
@@ -2845,57 +2831,25 @@ Supported extensions are: %1.</source>
<translation>Поле шляху до спільного файлу</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>Вибрати файл для спільного використання</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Поле пароля</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Перемкнути видимість пароля</translation>
+ <source>Clear fields</source>
+ <translation>Очистити поля</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>Перемкнути генератор паролів</translation>
+ <source>Browse for share file</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Clear fields</source>
- <translation>Очистити поля</translation>
+ <source>Browse...</source>
+ <translation>Переглянути...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>Назва</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>Примітки</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>Знечинюється</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>Пошук</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>Автозаповнення</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;Використати типову послідовність автозаповнення батьківської групи</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>Встановити типову &amp;послідовність автозаповнення</translation>
- </message>
- <message>
<source>Name field</source>
<translation>Поле назви</translation>
</message>
@@ -2923,18 +2877,38 @@ Supported extensions are: %1.</source>
<source>Default auto-type sequence field</source>
<translation>Поле типової послідовності автозаповнення</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>Використати &amp;типовий значок</translation>
+ <source>Expires:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>Використати &amp;власний значок</translation>
+ <source>Auto-Type:</source>
+ <translation type="unfinished"/>
</message>
<message>
+ <source>Search:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>Примітки:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>Додати свій значок</translation>
</message>
@@ -2984,7 +2958,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>Цей значок використовують %n запис і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform><numerusform>Цей значок використовують %n записи і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform><numerusform>Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform><numerusform>Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform></translation>
+ <translation><numerusform>Цей значок використовує %n запис і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform><numerusform>Цей значок використовують %n записи і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform><numerusform>Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform><numerusform>Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2999,14 +2973,6 @@ Supported extensions are: %1.</source>
<translation>Застосувати вибраній значок для дочерніх груп і записів</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>Застосувати значок до...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>Застосувати тільки для цього</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>Також застосувати до дочерніх груп</translation>
</message>
@@ -3022,6 +2988,22 @@ Supported extensions are: %1.</source>
<source>Existing icon selected.</source>
<translation>Вибрано наявний значок.</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>Використовувати типовий значок</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>Використовувати свій значок</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3191,7 +3173,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Attachments</source>
- <translation>Додатки</translation>
+ <translation>Долучення</translation>
</message>
<message>
<source>Add new attachment</source>
@@ -3209,6 +3191,17 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation>Зберегти вибраний додаток на диск</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3292,12 +3285,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>Вкладення</translation>
</message>
<message>
- <source>Yes</source>
- <translation>Так</translation>
+ <source>Size</source>
+ <translation>Розмір</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>ТОП</translation>
+ <source>Group name</source>
+ <translation>Назва групи</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>Назва запису</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>Нотатки до запису</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>Термін дії спливає</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>Дата створення</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>Дата останньої зміни</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>Дата останнього доступу</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>Вкладені файли</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>Розмір запису</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>Має вкладення</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>Має TOTP одноразовий пароль</translation>
</message>
</context>
<context>
@@ -3308,7 +3341,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>General</source>
- <translation>Загальне</translation>
+ <translation>Загальні</translation>
</message>
<message>
<source>Username</source>
@@ -3328,11 +3361,11 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Attributes</source>
- <translation>Ознаки</translation>
+ <translation>Атрибути</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Долучення</translation>
+ <translation>Вкладення</translation>
</message>
<message>
<source>Notes</source>
@@ -3397,6 +3430,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Неправильний URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3423,8 +3463,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>Повернути до типових налаштувань</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>Вкладення (значок)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>Має вкладення</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3436,21 +3482,74 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>Не вдалося зареєструвати службу DBus в %1: інша таємна служба вже працює.</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%1 використовує %n запис</numerusform><numerusform>%1 використовує %n записи</numerusform><numerusform>%1 використовує %n записів</numerusform><numerusform>%1 використовує %n записів</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>Ім&apos;я файлу</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Група</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Керувати</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>Розблокуйте для показу</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Відсутні</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>Застосунок</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>Керувати</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Таємна служба Fdo: %1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>Невідомий</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>Невідомий</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3462,14 +3561,10 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: неможливо зберегти файл!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>Неможливо зберегти файл сценарію для власного обміну повідомленнями.</translation>
+ <source>Online password validation failed</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3539,14 +3634,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>Неможливо обчислити головний ключ</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>Неможливо видати виклик-відповідь.</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>відсутні заголовки сховища</translation>
</message>
@@ -3569,18 +3656,27 @@ You can enable the DuckDuckGo website icon service in the security section of th
<message>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
- <translation>Надано хибні реєстраційні дані. Спробуйте, будь ласка, ще раз. Якщо це повторюватиметься, файл Вашого сховища може бути пошкодженим.</translation>
+ <translation>Надано хибні реєстраційні дані. Спробуйте, будь ласка, ще раз.
+Якщо це повторюватиметься, файл Вашого сховища може бути пошкодженим.</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>Неможливо видати виклик-відповідь.</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Неможливо обчислити головний ключ</translation>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -3590,10 +3686,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>відсутні заголовки сховища</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Неможливо обчислити головний ключ</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>Хибний розмір контрольної суми заголовка</translation>
</message>
@@ -3711,6 +3803,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>(HMAC mismatch)</source>
<translation>(неузгідність HMAC)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3724,14 +3820,14 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Хибний розмір симетричного шифру IV.</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Неможливо обчислити головний ключ</translation>
- </message>
- <message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>Переведення у послідовний формат структури параметрів ФОК зазнало невдачі</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KdbxReader</name>
@@ -3874,17 +3970,13 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Знайдено дублікат Вашої власної ознаки</translation>
+ <translation>Знайдено дублікат Вашого власного атрибута</translation>
</message>
<message>
<source>Entry string key or value missing</source>
<translation>Запису бракує текстового ключа або значення</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>Знайдено дублікат вкладення</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>Запису бракує двійкового ключа або значення</translation>
</message>
@@ -3931,6 +4023,29 @@ Line %2, column %3</source>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>Файл занадто великий для таємного ключа</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>Відкриття таємного ключа зазнало невдачі</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
@@ -3993,10 +4108,6 @@ Line %2, column %3</source>
<translation>Корінь</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>Неможливо обчислити головний ключ</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>Перетворення ключа зазнало невдачі</translation>
</message>
@@ -4098,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>Надано хибні реєстраційні дані. Спробуйте, будь ласка, ще раз.
Якщо це повторюватиметься, файл Вашого сховища може бути пошкодженим.</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4193,35 +4308,25 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Key File</source>
- <translation>Файловий ключ</translation>
+ <translation>Файл-ключ</translation>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Ви можете додати файловий ключ, що містить випадкові байти для покращення безпеки.&lt;/p&gt;&lt;p&gt;Ви мусите зберігати його таємно і не губити, інакше Ви не зможете відкрити сховище.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Ви можете додати файл-ключ, що містить випадкові байти для покращення безпеки.&lt;/p&gt;&lt;p&gt;Ви мусите зберігати його таємно і не губити, інакше Ви не зможете відкрити сховище.&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Застарілий формат файлового ключа</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>Ви використовуєте застарілий формат файлового ключа, підтримання якого
-може бути скасовано у майбутньому.
-
-Будь ласка, перейдіть до налаштування головного ключа і створіть новий файловий ключ.</translation>
+ <translation>Застарілий формат файла-ключа</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>Помилка завантаження файлового ключа &apos;%1&apos;
+ <translation>Помилка завантаження файла-ключа &apos;%1&apos;
Повідомлення: %2</translation>
</message>
<message>
<source>Key files</source>
- <translation>Файлові ключі</translation>
+ <translation>Файли-ключі</translation>
</message>
<message>
<source>All files</source>
@@ -4229,19 +4334,19 @@ Message: %2</source>
</message>
<message>
<source>Create Key File...</source>
- <translation>Створити файловий ключ...</translation>
+ <translation>Створити файл-ключ...</translation>
</message>
<message>
<source>Error creating key file</source>
- <translation>Помилка створення файлового ключа</translation>
+ <translation>Помилка створення файла-ключа</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>Неможливо створити файловий ключ: %1</translation>
+ <translation>Неможливо створити файл-ключ: %1</translation>
</message>
<message>
<source>Select a key file</source>
- <translation>Обрати файловий ключ</translation>
+ <translation>Обрати файл-ключ</translation>
</message>
<message>
<source>Key file selection</source>
@@ -4281,6 +4386,13 @@ Are you sure you want to continue with this file?</source>
<translation>Вибраний фаловий ключ схожий на файл сховища паролів. Файловий ключ мусить бути незмінним файлом, який ніколи не змінюють, інакше Ви назавжди втратите доступ до Вашого сховища.
Ви певні, що хочете продовжити з цим файлом?</translation>
</message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -4289,18 +4401,10 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Сховище</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>&amp;Недавні сховища</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>&amp;Довідка</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>&amp;Записи</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>&amp;Групи</translation>
</message>
@@ -4317,68 +4421,28 @@ Are you sure you want to continue with this file?</source>
<translation>&amp;Про KeePassXC</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>Від&amp;крити сховище…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>З&amp;берегти сховище</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>З&amp;акрити сховище</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>В&amp;идалити запис</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>З&amp;мінити групу</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>Вида&amp;лити групу</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>Зберегти сховище &amp;як…</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>Налаштування сховища</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>Клон&amp;увати запис</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>Скопі&amp;ювати ім&apos;я користувача</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
- <translation>Скопіювати ім’я користувача в кишеню</translation>
+ <translation>Копіювати ім’я користувача до буфера</translation>
</message>
<message>
<source>Copy password to clipboard</source>
- <translation>Скопіювати пароль у кишеню</translation>
+ <translation>Копіювати пароль до буфера</translation>
</message>
<message>
<source>&amp;Settings</source>
<translation>Нала&amp;штування</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>Замкнути сховища</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>Заголовок</translation>
</message>
<message>
<source>Copy title to clipboard</source>
- <translation>Скопіювати заголовок у кишеню</translation>
+ <translation>Копіювати заголовок до буфера</translation>
</message>
<message>
<source>&amp;URL</source>
@@ -4386,7 +4450,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Copy URL to clipboard</source>
- <translation>Скопіювати URL у кишеню</translation>
+ <translation>Копіювати URL до буфера</translation>
</message>
<message>
<source>&amp;Notes</source>
@@ -4394,15 +4458,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Copy notes to clipboard</source>
- <translation>Скопіювати нотатки в кишеню</translation>
- </message>
- <message>
- <source>&amp;Export to CSV file...</source>
- <translation>Експортувати до файлу CSV…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>Налаштувати ТОП…</translation>
+ <translation>Копіювати примітки до буфера</translation>
</message>
<message>
<source>Copy &amp;TOTP</source>
@@ -4449,10 +4505,6 @@ This version is not meant for production use.</source>
<translation>Пожерт&amp;вувати</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>Повідомит&amp;и про помилку</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>&lt;b&gt;Попередження&lt;/b&gt;: Використання Вашої версії Qt з екранною клавіатурою може призвести до збою KeePassXC.</translation>
@@ -4462,66 +4514,26 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>Імпортувати</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>Скопіювати ознаку...</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>ТОП...</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>Нове сховище...</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>Створити нове сховище</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>Об&apos;єднати зі сховищем...</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>Об&apos;єднати з іншого сховища KDBX</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>Новий запис</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>Додати новий запис</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>Змінити запис</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>Переглянути або змінити запис</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>Нова група</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>Додати нову групу</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>Змінити головний ключ...</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>Налаштування сховища...</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>Скопіювати пароль</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>Виконати Автозаповнення</translation>
</message>
@@ -4530,30 +4542,14 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>Відкрити URL</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>Сховище KeePass 1...</translation>
- </message>
- <message>
<source>Import a KeePass 1 database</source>
<translation>Імпортувати сховище KeePass 1</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>Файл CSV...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>Імпортувати файл CSV</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>Показати ТОП...</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>Показати QR-код ТОП...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>&lt;b&gt;Примітка&lt;/b&gt;: Ви використовуєте попередній випуск KeePassXC!
@@ -4576,14 +4572,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>&amp;Експортувати</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>&amp;Перевірити наявність оновлень...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>Завантажити всі &amp;фавікони</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>Впорядкувати &amp;А-Я</translation>
</message>
@@ -4596,48 +4584,290 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Генератор паролів</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>Завантажити фавікон</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>Імпортувати сховище 1Password</translation>
+ </message>
+ <message>
+ <source>&amp;Getting Started</source>
+ <translation>&amp;Вступ</translation>
+ </message>
+ <message>
+ <source>&amp;User Guide</source>
+ <translation>Довідник &amp;користувача</translation>
+ </message>
+ <message>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>&amp;Сполучення клавіш</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Databases</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Entries</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy Att&amp;ribute</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>TOTP</source>
+ <translation>ТОП</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Вигляд</translation>
+ </message>
+ <message>
+ <source>Theme</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Check for Updates</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>Експортувати до файлу HTML...</translation>
+ <source>&amp;Delete Group…</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>1Password Vault...</source>
+ <source>Download All &amp;Favicons…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>Скопіювати ім&apos;я користувача</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>Скопіювати пароль</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>Завантажити &amp;Favicon</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>Замкнути сховища</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV-файл...</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML-файл...</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>Сховище KeePass 1…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
<translation>Сховище 1Password...</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>Імпортувати сховище 1Password</translation>
+ <source>CSV File…</source>
+ <translation>CSV-файл...</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>&amp;Вступ</translation>
+ <source>Show TOTP</source>
+ <translation>Показати ТОП</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>Показати QR-код</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>Відкрити PDF вступного довідника</translation>
+ <source>Set up TOTP…</source>
+ <translation>Встановити ТОП…</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
+ <source>Report a &amp;Bug</source>
+ <translation>Повідомит&amp;и про помилку</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
<translation>&amp;Довідка в мережі...</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>Перейти до документації в мережі (запускає переглядач)</translation>
+ <source>Go to online documentation</source>
+ <translation>Перейти до документації в мережі</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>Довідник &amp;користувача</translation>
+ <source>Open User Guide</source>
+ <translation>Відкрити довідник користувача</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>Відкрити PDF довідника користувача</translation>
+ <source>Save Database Backup...</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>&amp;Сполучення клавіш</translation>
+ <source>Add key to SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>Компактний режим</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>Показувати панель инструментів</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>Показувати панель перегляду</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>Не показувати знову для цієї версії</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>Перезапустити програму?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation type="unfinished"/>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>Налаштування сховища</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>Змінити налаштування сховища</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>Розблокувати сховище</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>Розблокуйте сховище, щоб показати додаткову інформацію</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>Заблокувати сховище</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>Від&apos;єднати</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4726,10 +4956,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Сторінка майстера налаштування</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>Налаштування &amp;шифрування</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища.</translation>
</message>
@@ -4741,27 +4967,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>Просте налаштування</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>Налаштування шифрування</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища.</translation>
+ <source>Database Credentials</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>Головний ключ сховища</translation>
+ <source>Encryption Settings</source>
+ <translation>Налаштування шифрування</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>Відомий тільки Вам головний ключ захищає Ваше сховище.</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища.</translation>
</message>
</context>
<context>
@@ -4776,6 +5006,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>Менеджер паролів</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4846,7 +5083,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Хибний файловий ключ. Ключ має бути у форматі OpenSSH</translation>
+ <translation>Хибний файл ключа. Ключ має бути у форматі OpenSSH</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
@@ -4858,11 +5095,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key file way too small.</source>
- <translation>Файловий ключ занадто короткий.</translation>
+ <translation>Файл ключа занадто маленький.</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>Хибний логічний код файлового ключа</translation>
+ <translation>Хибний логічний код файлу ключа</translation>
</message>
<message>
<source>Found zero keys</source>
@@ -4874,7 +5111,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>Файловий ключ пошкоджений, зчитування таємного ключа зазнало невдачі</translation>
+ <translation>Файл ключа пошкоджений, зчитування таємного ключа зазнало невдачі</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
@@ -4951,6 +5188,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>Паролі поки що співпадають</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>Увага: Caps Lock увімкнено!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4975,25 +5224,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Паролі не збігаються.</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>Створити головний пароль</translation>
- </message>
- <message>
<source>Password field</source>
<translation>Поле пароля</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Перемкнути видимість пароля</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>Поле повторення пароля</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>Перемкнути генератор паролів</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -5002,10 +5239,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>Пароль:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>надійність</translation>
@@ -5055,14 +5288,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Розділювач слів:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Cкопіювати</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>Прийняти</translation>
- </message>
- <message>
<source>Close</source>
<translation>Закрити</translation>
</message>
@@ -5104,7 +5329,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Advanced</source>
- <translation>Розширене</translation>
+ <translation>Розширені</translation>
</message>
<message>
<source>A-Z</source>
@@ -5159,14 +5384,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>Перемкнути у простий режим</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>Простий</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Набір символів, які треба уникати</translation>
</message>
@@ -5187,14 +5404,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Виключені знаки: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>Кількість &amp;слів:</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>Оновити</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>Створений пароль</translation>
</message>
@@ -5243,10 +5452,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Копіювати пароль</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>Прийняти пароль</translation>
- </message>
- <message>
<source>lower case</source>
<translation>нижній регістр</translation>
</message>
@@ -5259,8 +5464,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>З заголовної літери</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>Перемкнути видимість пароля</translation>
+ <source>Generate Password</source>
+ <translation>Створити пароль</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>Додаткові символи</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>Кількість слів:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>Застосувати пароль</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Очистити</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>Створити пароль знову (%1)</translation>
</message>
</context>
<context>
@@ -5273,6 +5514,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>Статистика</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>Дуже слабкий пароль</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>Ентропія пароля: %1 біт</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>Слабкий пароль</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>Пароль використано %1 разів</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>Термін дії пароля сплив</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>Термін дії пароля ось-ось закінчиться</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>Термін дії пароля через %1 днів</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>Термін дії пароля спливає незабаром</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>Термін дії пароля спливає %1</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5373,7 +5666,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key file of the database.</source>
- <translation>Файловий ключ для сховища.</translation>
+ <translation>Файл ключа для сховища.</translation>
</message>
<message>
<source>path</source>
@@ -5412,17 +5705,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Шлях до запису, що підлягає додаванню.</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>Скопіювати пароль запису в кишеню.</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
- <translation>Шлях до запису, який треба скопіювати.</translation>
+ <translation>Шлях до запису, що підлягає копіюванню.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Час очікування в секундах перед очищенням кишені.</translation>
+ <translation>Час в секундах перед очищенням буфера обміну.</translation>
</message>
<message>
<source>Edit an entry.</source>
@@ -5457,10 +5746,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Попередження: Ви використовуєте застарілий формат файлового ключа, підтримка якого
+ <translation>Попередження: Ви використовуєте застарілий формат ключа, підтримка якого
може незабаром закінчитись.
-Бажано створити новий файловий ключ.</translation>
+ Бажано створити новий файл-ключ.</translation>
</message>
<message>
<source>
@@ -5506,7 +5795,7 @@ Available commands:
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation>Файловий ключ для сховища, яке підлягає об&apos;єднанню.</translation>
+ <translation>Файл ключа для сховища, яке підлягає об&apos;єднанню.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
@@ -5514,11 +5803,11 @@ Available commands:
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>Назви ознак для показу. Цей параметр можна вказати кілька разів, тим часом у кожному рядку може бути тільки один примірник у заданому порядку. Якщо ознаки не вказані, буде показано типові ознаки.</translation>
+ <translation>Назви атрибутів для показу. Цей параметр можна вказати кілька разів, тим часом у кожному рядку може бути тільки один примірник у заданому порядку. Якщо атрибути не вказані, буде показано типові атрибути.</translation>
</message>
<message>
<source>attribute</source>
- <translation>ознака</translation>
+ <translation>атрибут</translation>
</message>
<message>
<source>Name of the entry to show.</source>
@@ -5573,14 +5862,6 @@ Available commands:
<translation>Сполучення з переглядачем</translation>
</message>
<message>
- <source>Press</source>
- <translation>Натиснути</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>Пасивне</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>Посередник SSH</translation>
</message>
@@ -5619,10 +5900,6 @@ Available commands:
<translation>Успішно додано запис %1.</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>Копіювати поточний ТОП до кишені.</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>Хибне значення ліміту часу %1.</translation>
</message>
@@ -5634,21 +5911,13 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>Запис із шляхом %1 не має налаштованого ТОП.</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>Поточний ТОП запису скопійовано до кишені!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>Пароль запису скопійовано до кишені!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>Очищення кишені через %1 секунду...</numerusform><numerusform>Очищення кишені через %1 секунди...</numerusform><numerusform>Очищення кишені через %1 секунд...</numerusform><numerusform>Очищення кишені через %1 секунд...</numerusform></translation>
+ <translation><numerusform>Очищення кишені через %1 секунду...</numerusform><numerusform>Очищення кишені через %1 секунди...</numerusform><numerusform>Очищення кишені через %1 секунд...</numerusform><numerusform>Очищення буфера обміну через %1 секунд...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
- <translation>Кишеню очищено!</translation>
+ <translation>Буфер обміну очищено!</translation>
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
@@ -5781,7 +6050,7 @@ Available commands:
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation>Завантаження файлового ключа зазнало невдачі %1: %2</translation>
+ <translation>Завантаження файла ключа зазнало невдачі %1: %2</translation>
</message>
<message>
<source>Length of the generated password</source>
@@ -5855,15 +6124,11 @@ Available commands:
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
- <translation>ПОМИЛКА: невідома ознака %1.</translation>
+ <translation>ПОМИЛКА: невідомий атрибут %1.</translation>
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation>Програма для дій з кишенею не означена</translation>
- </message>
- <message>
- <source>Unable to start program %1</source>
- <translation>Неможливо запустити програму %1</translation>
+ <translation>Програму для роботи з буфером обміну не визначено</translation>
</message>
<message>
<source>file empty</source>
@@ -5874,18 +6139,6 @@ Available commands:
<translation>%1: (рядок, позиція) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256-біт</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256-біт</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256-біт</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – рекомендовано)</translation>
</message>
@@ -5925,7 +6178,7 @@ Available commands:
</message>
<message>
<source>Loading the key file failed</source>
- <translation>Завантаження файлового ключа зазнало невдачі</translation>
+ <translation>Завантаження ключа зазнало невдачі</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
@@ -5973,7 +6226,7 @@ Available commands:
</message>
<message>
<source>key file of the database</source>
- <translation>файловий ключ сховища</translation>
+ <translation>файл-ключ сховища</translation>
</message>
<message>
<source>read password of the database from stdin</source>
@@ -6136,10 +6389,6 @@ Kernel: %3 %4</source>
<translation>Показати цю довідку.</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>Гніздо Yubikey для шифрування сховища.</translation>
- </message>
- <message>
<source>slot</source>
<translation>гніздо</translation>
</message>
@@ -6156,10 +6405,6 @@ Kernel: %3 %4</source>
<translation>Вийти з діалогового режиму.</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>Формат для експортування. Можливі формати: xml або csv. Типовий формат — xml.</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>Надсилає вміст сховища до стандартного виходу в зазначеному форматі.</translation>
</message>
@@ -6200,10 +6445,6 @@ Kernel: %3 %4</source>
<translation>Шлях до нового сховища.</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>Неможливо імпортувати експортоване сховище XML %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>Сховище вдало імпортоване.</translation>
</message>
@@ -6296,10 +6537,6 @@ Kernel: %3 %4</source>
<translation>Хибне гніздо YubiKey %1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>Натисніть, будь ласка, кнопку YubiKey для розблокування %1</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>Введіть пароль для шифрування сховища (необов&apos;язково): </translation>
</message>
@@ -6315,13 +6552,9 @@ Kernel: %3 %4</source>
<source>User name</source>
<translation>Ім’я користувача</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] виклик відповідь — гніздо %3 — %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>Пароль для «%1» став відомим у %2 випадку!</numerusform><numerusform>Пароль для «%1» став відомим у %2 випадках!</numerusform><numerusform>Пароль для «%1» став відомим у %2 випадках!</numerusform><numerusform>Пароль для «%1» став відомим у %2 випадках!</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6331,6 +6564,193 @@ Kernel: %3 %4</source>
<source>Show the protected attributes in clear text.</source>
<translation>Показувати захищені ознаки незахищеним текстом.</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>Помилка розширення браузера</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>Атрибут &quot;%1&quot; не знайдено.</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>Атрибут запису &quot;%1&quot; скопійовано до буфера обміну!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>час</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>Вкажіть файл-ключ для сховища.</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>Вкажіть пароль для сховища.</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>Формат для експортування. Можливі формати: xml або csv. Типовий формат – xml.</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>Неможливо імпортувати сховище XML: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>Показати інформацію про сховище.</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>Назва:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>Опис:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>Шифр:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF: </translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>Натисніть, будь ласка, кнопку на вашому YubiKey для продовження…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>Ви дійсно бажаєте створити сховище з порожнім паролем? [y/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>Повторіть пароль:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>Помилка: паролі не збігаються.</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 раундів)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 раундів, %2 КБ)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-біт</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-біт</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256-біт {20 256-?}</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>Оцінити %1 затримку еталонним тестом</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform><numerusform>%1 мс</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform><numerusform>%1 с</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6367,6 +6787,290 @@ Kernel: %3 %4</source>
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Також показувати записи, які було виключено зі звітів</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>Наведіть курсор на причину, щоб переглянути додаткові відомості. Клацніть двічі по запису для його редагування.</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>Поганий</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>Поганий – пароль необхідно змінити</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>Погана</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>Слабкий – пароль слід змінити</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>Низька</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>Слабкий – розгляньте можливість змінити пароль</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Виключено)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Цей запис виключено зі звітів</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>Зачекайте, будь ласка, триває обчислення даних стану...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>Вітаємо, все здорово!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заголовок</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Шлях</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Оцінка</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>Причина</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Змінити запис...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Виключити зі звітів</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>УВАГА: цей звіт вимагає надсилання інформації до онлайн-сервісу Have I Been Pwned (https://haveibeenpwned.com). Якщо Ви продовжите, паролі з вашого сховища будуть криптографічно хешовані, а перші п&apos;ять символів отриманих хешів будуть безпечно надіслані до цього сервісу. Ваше сховище залишається в безпеці і не може бути відтвореним на основі переданої інформації. Однак, кількість паролів, які ви надсилаєте, та вашу IP-адресу буде розкрито цьому сервісу.</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>Виконати онлайн-аналіз</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>Також показувати записи, які було виключено зі звітів</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>Ця збірка KeePassXC не має мережевих функцій. Мережа необхідна для перевірки наявності паролів в базах даних Have I Been Pwned.</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>Вітаємо, розкритих паролів немає!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Заголовок</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>Шлях</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>Пароль розкрито...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(Виключено)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>Цей запис виключено зі звітів</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>одноразово</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>до 10 разів</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>до 100 разів</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>до 1000 разів</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>до 10 000 разів</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>до 100 000 разів</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>до мільйона разів</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>мільйони разів</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>Змінити запис...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>Виключити зі звітів</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>Наведіть мишкою на рядки зі значком помилки для додаткової інформації.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Назва</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Значення</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>Зачекайте, будь ласка, триває обчислення статистики сховища...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>Назва сховища</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Опис</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Розташування</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>Останнє збереження</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>Незбережені зміни</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>так</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>ні</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>Сховище було змінено, але поточні зміни ще не було записано на диск.</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>Кількість груп</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>Кількість записів</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>Кількість знечинених записів</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>Сховище містить знечинені записи.</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>Унікальні паролі</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>Повторювані паролі</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>Понад 10% паролів повторюються. Використовуйте унікальні паролі завжди, коли це можливо.</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>Найбільша кількість повторень паролю</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>Деякі паролі використано понад три рази. Використовуйте унікальні паролі завжди, коли це можливо.</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>Кількість коротких паролів</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>Рекомендована найменша довжина пароля — 8 символів.</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>Кількість слабких паролів</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>Рекомендовано використовувати довгі, випадкові паролі з оцінкою «добре» або «відмінно».</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>Записи, виключені зі звітів</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>Виключати записи зі звітів, наприклад, тому що в них слабкий пароль, що не обов&apos;язково є проблемою, але ви повинні стежити за ними.</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>Середня довжина пароля</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 символів</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>Середня довжина пароля менша 10 символів. Довші паролі покращують безпеку.</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6400,6 +7104,14 @@ Kernel: %3 %4</source>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>Запит підтвердження не підтримується цим посередником (перевірте налаштування).</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>Конфлікт власності ключа. Додавання скасовано.</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>Немає запущеного посередника, неможливо відобразити перелік ключів.</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6507,26 +7219,10 @@ Kernel: %3 %4</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Якщо смітник увімкнено для сховища, записи будуть переміщені у смітник, а не видалені. Інакше їх буде видалено без додаткового схвалення.&lt;/p&gt;&lt;p&gt;Ви одержуватими повідомлення тільки якщо існують посилання на записи, що Ви видаляєте.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>Не запитувати схвалення, коли інші клієнти видаляють записи.</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>Виставлені групи сховища:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>Ім&apos;я файлу</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>Група</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>Керувати</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>Дозвіл</translation>
</message>
@@ -6535,40 +7231,20 @@ Kernel: %3 %4</source>
<translation>Такі застосунки зараз сполучені:</translation>
</message>
<message>
- <source>Application</source>
- <translation>Застосунок</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>Не запитувати схвалення, коли записи видаляють інші клієнти</translation>
</message>
<message>
- <source>Disconnect</source>
- <translation>Від&apos;єднати</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Database settings</source>
- <translation>Налаштування сховища</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation type="unfinished"/>
</message>
<message>
- <source>Edit database settings</source>
- <translation>Змінити налаштування сховища</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>Розблокувати сховище</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>Розблокуйте сховище, щоб показати додаткову інформацію</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>Заблокувати сховище</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>Розблокуйте для показу</translation>
- </message>
- <message>
- <source>None</source>
- <translation>Відсутні</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6615,7 +7291,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Export</source>
- <translation>Експортування</translation>
+ <translation>Експортувати</translation>
</message>
<message>
<source>Imported certificates</source>
@@ -6672,7 +7348,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>KeeShare key file</source>
- <translation>Файловий ключ KeeShare</translation>
+ <translation>Файл ключа KeeShare</translation>
</message>
<message>
<source>All files</source>
@@ -6755,7 +7431,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Could not write export container (%1)</source>
- <translation>Неможливо записати експортну оболонку (%1)</translation>
+ <translation>Неможливо записати експортовану оболонку (%1)</translation>
</message>
<message>
<source>Could not embed signature: Could not open file to write (%1)</source>
@@ -6841,10 +7517,6 @@ Kernel: %3 %4</source>
<translation>Успішне підписане імпортування</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>Неочікувана помилка</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Підтримання непідписаних спільних оболонок відсутнє – імпортування відвернуте</translation>
</message>
@@ -7013,6 +7685,13 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>Неправильний URL</translation>
+ </message>
+</context>
+<context>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
@@ -7103,6 +7782,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>Натиснути</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>Пасивне</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>Не вдалося завершити виклик-відповідь, конкретна помилка: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7117,14 +7843,6 @@ Example: JBSWY3DPEHPK3PXP</source>
<translation>&lt;p&gt;Якщо у вас є &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, ви можете використовувати його для додаткової безпеки.&lt;/p&gt;&lt;p&gt;Один із слотів YubiKey має бути налаштованим як &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>YubiKey не знайдено, будь ласка, впевніться, що він підключений.</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey не підключений.</translation>
- </message>
- <message>
<source>Refresh hardware tokens</source>
<translation>Оновити апаратні позначки</translation>
</message>
@@ -7132,5 +7850,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>Вибір гнізда апаратного захисту</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>Не вдалося знайти апаратні ключі!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>Обрана комірка апаратного ключа не підтримує виклик-відповідь!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>Виявлення апаратних ключів...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>Не виявлено апаратних ключів</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_zh_CN.ts b/share/translations/keepassx_zh_CN.ts
index 3270b861f..03bc17c20 100644
--- a/share/translations/keepassx_zh_CN.ts
+++ b/share/translations/keepassx_zh_CN.ts
@@ -15,7 +15,7 @@
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC 使用第 2 版 GNU 通用公共授权协议(GPL)分发,(你也可以根据需要)选用第 3 版。</translation>
+ <translation>KeePassXC 使用第 2 版 GNU 通用公共授权协议(GPL)分发,(您也可以根据需要)选用第 3 版。</translation>
</message>
<message>
<source>Contributors</source>
@@ -49,12 +49,32 @@
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>启用 SSH 代理(需要重启)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation>使用 Windows 版 OpenSSH 而不是 Pageant</translation>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation>使用 OpenSSH for Windows 而不是 Pageant</translation>
+ <source>Enable SSH Agent integration</source>
+ <translation>启用 SSH 代理集成</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK值</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK重写</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(空)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>没有可用的 SSH 代理套接字。确保环境SSH_AUTH_SOCK存在或设置重写。</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH 代理连接工作正常!</translation>
</message>
</context>
<context>
@@ -103,6 +123,18 @@
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>您确定要将所有常规和安全设置重置为默认设置吗?</translation>
</message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>单色(浅色)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>单色(深色)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>彩色</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -127,10 +159,6 @@
<translation>文件管理</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>安全保存数据库文件(可能与Dropbox等不兼容)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
<translation>保存前备份数据库文件</translation>
</message>
@@ -143,32 +171,16 @@
<translation>离开后自动保存</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>不要因非数据的更改而将数据库标记为已修改 (比如增加群组)</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>当外部修改时自动重新加载数据库</translation>
</message>
<message>
<source>Entry Management</source>
- <translation>进入管理</translation>
+ <translation>条目管理</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>新增项目时使用群组图标</translation>
- </message>
- <message>
- <source>Hide the entry preview panel</source>
- <translation>在预览面板中隐藏条目</translation>
- </message>
- <message>
- <source>General</source>
- <translation>常规</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>隐藏工具栏(图标)</translation>
+ <translation>新增条目时使用群组图标</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
@@ -179,10 +191,6 @@
<translation>显示任务栏图标</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>暗色系统托盘图标</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
<translation>将窗口最小化至任务栏</translation>
</message>
@@ -192,32 +200,20 @@
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
- <translation>使用条目标题匹配全局自动类型的窗口</translation>
+ <translation>使用条目标题来为全局自动输入时匹配窗口</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
- <translation>使用条目URL匹配全局自动类型的窗口</translation>
+ <translation>使用条目 URL 来为全局自动输入时匹配窗口</translation>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
<translation>总在执行自动输入前询问</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>自动输入全局快捷键</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>自动输入时延迟</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
- <translation>毫秒</translation>
- </message>
- <message>
- <source>Auto-Type start delay</source>
- <translation>启用输入时延迟</translation>
+ <translation> 毫秒</translation>
</message>
<message>
<source>Movable toolbar</source>
@@ -241,11 +237,7 @@
</message>
<message>
<source>Include beta releases when checking for updates</source>
- <translation>检查更新时包含Beta版本</translation>
- </message>
- <message>
- <source>Button style:</source>
- <translation>按钮样式:</translation>
+ <translation>检查更新时包含 Beta 版本</translation>
</message>
<message>
<source>Language:</source>
@@ -293,18 +285,10 @@
<translation>工具栏按钮样式</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>对记录使用等宽字体</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>语言选择</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>重置为默认值</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
<translation>全局自动键入快捷方式</translation>
</message>
@@ -316,6 +300,50 @@
<source>Auto-type start delay milliseconds</source>
<translation>启用输入时延迟(毫秒)</translation>
</message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>系统启动时自动启动 KeePassXC</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>将数据库标记为已修改的非数据更改(例如,展开组)</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>安全地保存数据库文件(如果 Dropbox 出现问题,请禁用)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>用户界面</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>工具栏按钮样式:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>对注释使用单间距字体</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>托盘图标类型:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>将设置重置为默认值...</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>自动键入延迟:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>全局自动类型快捷方式:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>自动类型启动延迟:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -330,19 +358,19 @@
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation>秒</translation>
+ <translation> 秒</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>在多久没有动作之后锁住数据库</translation>
+ <translation>在多久没有动作之后锁定数据库</translation>
</message>
<message>
<source> min</source>
- <translation>分</translation>
+ <translation> 分</translation>
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation>没有动作后锁定TouchID</translation>
+ <translation>没有动作后忘记 TouchID</translation>
</message>
<message>
<source>Convenience</source>
@@ -350,11 +378,11 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>系统锁定或盖子合上时锁定数据库</translation>
+ <translation>系统锁定或合上盖子时锁定数据库</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>系统锁定或盖子关闭时锁定TouchID</translation>
+ <translation>系统锁定或合上盖子时忘记 TouchID</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
@@ -365,18 +393,6 @@
<translation>执行自动类型后重新锁定先前锁定的数据库</translation>
</message>
<message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>可见时不需要重复输入密码</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>编辑时不要隐藏密码</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>不要将占位符用于空密码字段</translation>
- </message>
- <message>
<source>Hide passwords in the entry preview panel</source>
<translation>在预览面板条目中隐藏密码</translation>
</message>
@@ -413,16 +429,28 @@
<source>Clear search query after</source>
<translation>多久后清除搜索框</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>当密码可见时,需要重复密码</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>编辑密码时隐藏密码</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>对空密码字段使用占位符</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>无法找到符合窗口标题的项目:</translation>
+ <translation>无法找到符合窗口标题的条目:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>KeePassXC - 自动输入</translation>
+ <translation>自动输入 - KeePassXC</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -430,19 +458,19 @@
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>自动输入的语法不正确!</translation>
+ <translation>自动输入的语法不正确!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>此自动输入命令包含很长的延迟。你真的要继续吗?</translation>
+ <translation>此自动输入命令包含很长的延迟。确定要继续吗?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>此自动输入命令包含非常慢的按键操作。你真的要继续吗?</translation>
+ <translation>此自动输入命令包含非常慢的按键操作。确定要继续吗?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>此自动输入命令包含频繁重复的参数。你真的要继续吗?</translation>
+ <translation>此自动输入命令包含频繁重复的参数。确定要继续吗?</translation>
</message>
<message>
<source>Permission Required</source>
@@ -450,7 +478,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC需要辅助功能权限以实现条目自动输入。如果你已经授予此权限,你可能需要重新开启KeePassXC。</translation>
+ <translation>KeePassXC 需要辅助功能权限以实现条目自动输入。如果您已经授予此权限,您可能需要重新开启 KeePassXC。</translation>
</message>
</context>
<context>
@@ -495,7 +523,7 @@
</message>
<message>
<source>Copy &amp;password</source>
- <translation>复制 &amp;密码</translation>
+ <translation>复制密码(&amp;P)</translation>
</message>
</context>
<context>
@@ -506,7 +534,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC需要辅助功能和录制屏幕权限以实现全局自动输入。获取窗口标题寻找对应条目需要录制屏幕权限。如果你已经授予此权限,你可能需要重新开启KeePassXC。</translation>
+ <translation>KeePassXC 需要辅助功能和录制屏幕权限以实现全局自动输入。获取窗口标题寻找对应条目需要录制屏幕权限。如果您已经授予此权限,您可能需要重新开启 KeePassXC。</translation>
</message>
</context>
<context>
@@ -517,51 +545,53 @@
</message>
<message>
<source>Select entry to Auto-Type:</source>
- <translation>选择自动输入的项目:</translation>
+ <translation>选择自动输入的条目:</translation>
</message>
<message>
<source>Search...</source>
- <translation>搜索……</translation>
+ <translation>搜索...</translation>
</message>
</context>
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser 浏览器扩展功能访问确认</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC - 浏览器访问请求</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>记住此选项</translation>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 请求访问以下条目:</translation>
</message>
<message>
- <source>Allow</source>
- <translation>允许</translation>
+ <source>Remember access to checked entries</source>
+ <translation>记住对已检查条目的访问</translation>
</message>
<message>
- <source>Deny</source>
- <translation>拒绝</translation>
+ <source>Remember</source>
+ <translation>记住</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 请求获取这些条目的密码。
-请选择是否允许。</translation>
+ <source>Allow access to entries</source>
+ <translation>允许访问条目</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>允许访问</translation>
+ <source>Allow Selected</source>
+ <translation>允许选定</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>拒绝访问</translation>
+ <source>Deny All</source>
+ <translation>拒绝全部</translation>
+ </message>
+ <message>
+ <source>Disable for this site</source>
+ <translation>禁用此站点</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-浏览器保存条目</translation>
+ <translation>KeePassXC-Browser 保存条目</translation>
</message>
<message>
<source>Ok</source>
@@ -579,199 +609,260 @@ Please select the correct database for saving credentials.</source>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>对话框</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC:新的密钥关联请求</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>需要使用 KeePassXC-Browser 浏览器扩展功能访问你的数据库</translation>
+ <source>Save and allow access</source>
+ <translation>保存并允许访问</translation>
</message>
<message>
- <source>General</source>
- <translation>常规</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC:覆盖现有的密钥吗?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>为这些浏览器开启集成:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>一个名为“%1”共享的加密密钥已存在。
+确认要覆盖它吗?</translation>
+ </message>
+ <message>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC:更新条目</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>您想更新 %1-%2 中的信息吗?</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Abort</source>
+ <translation>中断</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>将属性转换为自定义数据...</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC:转换成 KeePassHTTP 属性</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>当请求凭据时显示通知(&amp;N)</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>成功转换了 %1 个条目的属性
+将 %2 个密钥移动到自定义数据。</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>已成功将 %n 个密钥移动到自定义数据。</numerusform></translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>数据库锁定时请求解锁(&amp;nQ)</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC:找不到含有 KeePassHTTP 属性的条目!</translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>只返回具有相同形式的条目。 ( http://, https://,... )。</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>当前数据库中不存在有 KeePassHTTP 属性的条目。</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>匹配 URL 形式 (例如:https://……)(&amp;M)</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC:检测到旧版浏览器集成设置</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>只返回特定网址的最佳匹配,而不是整个域名的所有条目。</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC:创建新群组</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>&amp;只返回最匹配的凭据</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>已收到创建新群组 &quot;%1&quot; 的请求。
+是否要创建此群组?</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>根据名称排列匹配的凭据(&amp;M)</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>您的 KeePassXC-Browser 设置需要移动到数据库设置中。
+这对于保持当前浏览器连接是必需的。
+是否要立即迁移现有设置?</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>根据用户名排列匹配的凭据(&amp;U)</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>不再显示此警告</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>高级</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>您从下列数据库收到关联请求:
+%1
+
+请为它提供一个唯一的名称或ID,比如:
+Chrome笔记本电脑</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>读取凭据时不再询问(&amp;A)</translation>
+ <source>Dialog</source>
+ <translation>对话框</translation>
</message>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>更新凭据时不再询问(&amp;U)</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>必需使用 KeePassXC-Browser 访问您的数据库。</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>在所有打开的的数据库中搜索相符的凭据(&amp;h)</translation>
+ <source>Enable browser integration</source>
+ <translation>启用浏览器集成</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>不支持自动创建或更新字符串字段。</translation>
+ <source>General</source>
+ <translation>常规</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>返回以“KPH:”开头的高级字符串字段(&amp;R)</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>以 Snap 软件包形式安装的浏览器目前不受支持。</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>启动时自动将 KeePassXC 或 keepassxc-proxy 执行文件路径更新为 native messaging 脚本。</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>为这些浏览器开启集成:</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>启动时更新和本机消息传递清单文件(&amp;N)</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>支持KeePassXC和浏览器扩展之间的代理应用程序.</translation>
+ <source>&amp;Edge</source>
+ <translation>Edge(&amp;E)</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>在 KeePassXC 与浏览器扩展之间使用代理程序(&amp;P)</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>如果手工安装了代理,请设置自定义代理的路径。</translation>
+ <source>Tor Browser</source>
+ <translation>Tor 浏览器</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>设置自定义代理路径(&amp;C)</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>浏览...</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;警告:&lt;/b&gt; 以下选项可能有危险!</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>选择自定义代理路径</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>请求凭据时显示通知</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor浏览器</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>如果数据库已锁定,则请求解锁数据库</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>可执行文件</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>只返回具有相同形式的条目。(例如 http://、https:// 等) </translation>
</message>
<message>
- <source>All Files</source>
- <translation>所有文件</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>匹配 URL 方案(例如,https://...)</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>不要请求 http 和基本身份验证的许可(&amp;B)</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>只返回特定网址的最佳匹配,而不是整个域名的所有条目。</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>由于快照沙盒,必须运行脚本才能启用浏览器集成。&lt;br /&gt;您可以从 %1 获取此脚本</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>仅返回最佳匹配的凭据</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>请参阅下面的浏览器扩展使用的特殊说明</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>返回过期的证书时注明(过期)字样</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>浏览器集成需要KeePassXC-Browser才能工作。&lt;br /&gt;下载%1 和 %2. %3</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>允许返回过期的凭据</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>所有连接到扩展的数据库都返回匹配证书</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>返回过期的证书时注明(过期)字样</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>在所有打开的数据库中搜索匹配的凭据</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>允许返回过期证书</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>按标题对匹配的凭据进行排序</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>启用浏览器集成</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>按用户名对匹配的凭据进行排序</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>目前不支持snap安装的浏览器</translation>
+ <source>Advanced</source>
+ <translation>高级</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>所有连接到扩展的数据库都返回匹配证书</translation>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>在访问凭据之前永不询问</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>更新凭据之前永不询问</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>不请求 HTTP 基本身份验证的权限</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>不支持自动创建或更新字符串字段。</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>返回以 &quot;KPH&quot; 开始的高级字符串字段:</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
- <translation>不要显示旧版 KeePassHTTP设置转移的弹出窗口</translation>
+ <translation>不要显示旧版 KeePassHTTP 设置转移的弹出窗口</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>KeePassHTTP 设置转移时不要提示</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>不要提示 KeePassHTTP 设置迁移。</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>启动时自动将 KeePassXC 或 keepassxc-proxy 执行文件路径更新为 native messaging 脚本。</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>在启动时更新本地消息配置文件</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>如果手工安装了代理,请设置自定义代理的路径。</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>使用自定义代理:</translation>
</message>
<message>
<source>Custom proxy location field</source>
@@ -782,106 +873,81 @@ Please select the correct database for saving credentials.</source>
<translation>浏览自定义的代理文件</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;警告&lt;/b&gt;,没有找到 KeePassXC 的代理应用&lt;br /&gt;请检查 KeePassXC 的安装文件夹或在高级设置里确定自定义文件夹&lt;br /&gt;没有代理应用浏览器插件将【不会工作】&lt;br /&gt;可能路径:%1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>浏览...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC: 新的密钥关联请求</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>使用自定义浏览器配置位置:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>保存并允许访问</translation>
+ <source>Browser type:</source>
+ <translation>浏览器类型:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC:覆盖现有的密钥吗?</translation>
+ <source>Toolbar button style</source>
+ <translation>工具栏按钮样式</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>一个名为“%1”共享的加密密钥已存在。
-确认要覆盖它吗?</translation>
+ <source>Config Location:</source>
+ <translation>配置位置:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC:更新条目</translation>
+ <source>Custom browser location field</source>
+ <translation>自定义浏览器位置字段</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>你想更新 %1-%2 中的信息吗?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>中断</translation>
+ <source>Browse for custom browser path</source>
+ <translation>浏览自定义浏览器路径</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>将属性转换为自定义数据...</translation>
+ <source>Custom extension ID:</source>
+ <translation>自定义扩展 ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC:转换成KeePassHTTP属性</translation>
+ <source>Custom extension ID</source>
+ <translation>自定义扩展 ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>成功转换了 %1 个条目的属性。
-将 %2 个密钥移动到自定义数据。</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>已成功将 %n 个密钥移动到自定义数据。</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>由于 Snap 沙盒限制,您必须运行一个脚本才能启用浏览器集成。&lt;br /&gt;您可以从 %1 获取此脚本</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC:找不到KeePassHTTP属性的条目!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>KeePassXC 浏览器是浏览器集成工作需要。&lt;br /&gt;下载 %1 和 %2 和 %3。%4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>当前数据库中没有KeePassHTTP属性的条目。</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>请参阅下面的浏览器扩展使用的特殊说明</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC:检测到旧版浏览器集成设置</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;错误:&lt;/b&gt;找不到自定义代理位置!&lt;br/&gt;没有代理应用程序,浏览器集成将不起作用。</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>keepassxc: 创建新群组</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;警告:&lt;/b&gt; 以下选项可能有危险!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>已收到创建新群组 &quot;%1&quot; 的请求。
-是否要创建此群组?</translation>
+ <source>Executable Files</source>
+ <translation>可执行文件</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>您的keepassxc浏览器设置需要移动到数据库设置中。
-这是保持当前浏览器连接所必需的。
-是否要立即迁移现有设置?</translation>
+ <source>All Files</source>
+ <translation>所有文件</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>不再显示此警告</translation>
+ <source>Select custom proxy location</source>
+ <translation>选择自定义代理路径</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>你从下列数据库收到关联请求:
-%1
-
-请为它提供一个唯一的名称或ID,比如:
-Chrome笔记本电脑</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>选择本地消息主机文件夹位置</translation>
</message>
</context>
<context>
@@ -892,7 +958,7 @@ Chrome笔记本电脑</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>标题后附加 “ - 副本”</translation>
+ <translation>在标题后追加“ - 副本”</translation>
</message>
<message>
<source>Replace username and password with references</source>
@@ -927,19 +993,15 @@ Chrome笔记本电脑</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>文本由此通过验证</translation>
+ <translation>文本由此通过验证:</translation>
</message>
<message>
<source>Fields are separated by</source>
- <translation>字段分隔</translation>
+ <translation>字段分隔:</translation>
</message>
<message>
<source>Comments start with</source>
- <translation>评论以此开头</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>第一条记录包含字段名称</translation>
+ <translation>评论以此开头:</translation>
</message>
<message>
<source>Consider &apos;\&apos; an escape character</source>
@@ -950,14 +1012,6 @@ Chrome笔记本电脑</translation>
<translation>预览</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>列布局</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>未出现在 CSV 文件中</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>导入 CSV 文件</translation>
</message>
@@ -970,25 +1024,17 @@ Chrome笔记本电脑</translation>
<translation>错误</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>空字段名 %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>列 %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
<translation>在 CSV 文件中检测到错误!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n 跳过更多消息]</numerusform></translation>
+ <translation><numerusform>[%n 条信息被跳过]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>CSV 导入: 编辑器错误:
+ <translation>CSV 导入:编辑器错误:
%1</translation>
</message>
<message>
@@ -1007,6 +1053,58 @@ Chrome笔记本电脑</translation>
<source>CSV import preview</source>
<translation>CSV 导入预览</translation>
</message>
+ <message>
+ <source>Column Association</source>
+ <translation>列关联</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>上一次更改</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>密码</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>创建</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>备注</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>标题</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>群组</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>网址</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>用户名</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>已跳过标题行</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>第一行具有字段名称</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>不存在</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>列 %1</translation>
+ </message>
</context>
<context>
<name>CsvParserModel</name>
@@ -1031,11 +1129,6 @@ Chrome笔记本电脑</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>根群组</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>文件 %1 不存在。</translation>
</message>
@@ -1077,6 +1170,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>回收站</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>密码</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>数据库已保存中。</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>无法保存,数据库尚未初始化!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1129,12 +1235,8 @@ Please consider generating a new key file.</source>
<translation>无法打开密钥文件:%1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>选择插槽...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
- <translation>解锁KeePassXC数据库</translation>
+ <translation>解锁 KeePassXC 数据库</translation>
</message>
<message>
<source>Enter Password:</source>
@@ -1145,14 +1247,6 @@ Please consider generating a new key file.</source>
<translation>密码字段</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>密码可见</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>选择密匙文件</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
<translation>选择实体 Key 的插槽</translation>
</message>
@@ -1197,10 +1291,10 @@ Please consider generating a new key file.</source>
Do you want to retry with an &quot;empty&quot; password instead?
To prevent this error from appearing, you must go to &quot;Database Settings / Security&quot; and reset your password.</source>
- <translation>解锁数据库失败,你没有输入密码
-使用空密码在解锁一次?
+ <translation>解锁数据库失败,您没有输入密码
+使用空密码再解锁一次?
-为了避免这样的错误,你应该去“数据库设置/高级”里面重置你的密码</translation>
+为了避免这样的错误,您应该去“数据库设置/高级”里面重置您的密码</translation>
</message>
<message>
<source>Retry with empty password</source>
@@ -1213,12 +1307,8 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;你可以使用像&lt;strong&gt;Yubikey&lt;/strong&gt;或&lt;strong&gt;Onlykey&lt;/strong&gt;这种带有配置HMAC-SHA1槽位的硬件安全密钥。&lt;/p&gt;
-&lt;p&gt;点击此处获取更多信息……&lt;/p&gt;</translation>
- </message>
- <message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;你可以使用密钥文件作为处主密码之外增强数据库安全性的手段,你可以从数据库安全设置中生成这种文件。&lt;/p&gt;&lt;p&gt;这&lt;strong&gt;不能&lt;/strong&gt;是你的kdbx数据库文件!&lt;br&gt;如果你没有密钥文件,留空此字段。&lt;/p&gt;&lt;p&gt;点击查看更多……&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;您可以使用像 &lt;strong&gt;YubiKey&lt;/strong&gt; 或 &lt;strong&gt;OnlyKey&lt;/strong&gt; 这种带有配置HMAC-SHA1 槽位的硬件安全密钥。&lt;/p&gt;
+&lt;p&gt;点击此处获取更多信息...&lt;/p&gt;</translation>
</message>
<message>
<source>Key file help</source>
@@ -1229,18 +1319,38 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>选择密钥文件…</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>无法使用数据库文件作为密钥</translation>
</message>
<message>
<source>You cannot use your database file as a key file.
If you do not have a key file, please leave the field empty.</source>
- <translation>你不能用你的数据库作为密钥文件。
-如果你没有密钥文件,请留空这个字段。</translation>
+ <translation>您不能用您的数据库作为密钥文件。
+如果您没有密钥文件,请留空这个字段。</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;除了密码之外,还可以使用机密文件来增强数据库的安全性。此文件可以在数据库的安全设置中生成。&lt;/p&gt;&lt;p&gt;这不是你的&lt;strong&gt;not&lt;/strong&gt; *.kdbx 数据库文件!&lt;br&gt;如果没有密钥文件,请将此字段留空。&lt;/p&gt;&lt;p&gt;点击查看更多信息...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>要解锁数据库的密钥文件</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>请触摸您 YubiKey 上的按键!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>正在检测硬件密钥...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>未检测到硬件密钥</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>选择硬件密钥...</translation>
</message>
</context>
<context>
@@ -1265,35 +1375,23 @@ If you do not have a key file, please leave the field empty.</source>
<translation>安全</translation>
</message>
<message>
- <source>Master Key</source>
- <translation>主密钥</translation>
- </message>
- <message>
<source>Encryption Settings</source>
<translation>加密设置</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>浏览器配合</translation>
+ <translation>浏览器集成</translation>
+ </message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>数据库凭据</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
<message>
<source>KeePassXC-Browser settings</source>
- <translation>KeePassXC-浏览器设置</translation>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>断开与所有浏览器的关联(&amp;D)</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>取消条目上所有特定于站点的设置(&amp;E)</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>将KeePassHTTP属性移动到KeePassXC-Browser和自定义数据(&amp;C)</translation>
+ <translation>KeePassXC-Browser 设置</translation>
</message>
<message>
<source>Stored keys</source>
@@ -1310,7 +1408,7 @@ If you do not have a key file, please leave the field empty.</source>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>你确定要删除所选的密钥吗?
+ <translation>您确定要删除所选的密钥吗?
这可能会影响与浏览器插件的连接。</translation>
</message>
<message>
@@ -1332,7 +1430,7 @@ This may prevent connection to the browser plugin.</source>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>你确定要断开与所有浏览器的关联吗?
+ <translation>您确定要断开与所有浏览器的关联吗?
这可能会影响与浏览器插件的连接。</translation>
</message>
<message>
@@ -1349,7 +1447,7 @@ This may prevent connection to the browser plugin.</source>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>已成功从keepassxc设置中删除 %n 个加密密钥。</numerusform></translation>
+ <translation><numerusform>已成功从 KeePassXC 设置中删除了 %n 个加密密钥。</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
@@ -1387,7 +1485,7 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>将KeePassHTTP属性移动到自定义数据</translation>
+ <translation>将 KeePassHTTP 属性移动到自定义数据</translation>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
@@ -1403,6 +1501,67 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>Remove selected key</source>
<translation>移除选择的 Key</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>将 Keepasshttp 属性移动到 KeePassxc 浏览器自定义数据</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>刷新数据库根组 ID</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>创建</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>刷新数据库 ID</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>是否要刷新数据库 ID?
+只有当数据库是另一个数据库的副本并且浏览器扩展无法连接时,才有必要这样做。</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>添加额外保护......</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>没有设置密码</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>警告! 您尚未设置密码。强烈建议不要使用没有密码的数据库!
+
+您确定要在没有密码的情况下继续吗?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>不使用密码继续</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>没有添加加密密钥</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>您必须添加至少一个加密密钥,才能保护您的数据库!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>未知错误</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>无法更改数据库凭据</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1412,31 +1571,27 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES: 256 位 (默认)</translation>
+ <translation>AES:256 位 (默认)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 位</translation>
+ <translation>Twofish:256 位</translation>
</message>
<message>
<source>Key Derivation Function:</source>
- <translation>密钥派生函数:</translation>
+ <translation>密钥派生函数:</translation>
</message>
<message>
<source>Transform rounds:</source>
<translation>加密次数:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>基准1秒延迟</translation>
- </message>
- <message>
<source>Memory Usage:</source>
<translation>内存占用:</translation>
</message>
<message>
<source>Parallelism:</source>
- <translation>平行运算:</translation>
+ <translation>平行运算:</translation>
</message>
<message>
<source>Decryption Time:</source>
@@ -1451,14 +1606,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>更改</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 毫秒</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 s</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>较高的值可提供更多保护,但打开数据库需要更长时间。</translation>
</message>
@@ -1486,15 +1633,15 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>回合数太高</translation>
+ <translation>次数太高</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>你正在对 Argon2 使用相当高的密钥转换回合数。
+ <translation>您正在使用的密钥转换次数对于 Argon2 算法非常高。
-如果仍执意使用此数量,你的数据库可能需要数小时或数天(甚至更长时间)才能打开!</translation>
+如果执意使用此数量,您的数据库可能需要数小时或数天(甚至更长时间)才能打开!</translation>
</message>
<message>
<source>Understood, keep number</source>
@@ -1507,19 +1654,19 @@ If you keep this number, your database may take hours or days (or even longer) t
<message>
<source>Number of rounds too low</source>
<comment>Key transformation rounds</comment>
- <translation>回合数太低</translation>
+ <translation>次数太低</translation>
</message>
<message>
<source>You are using a very low number of key transform rounds with AES-KDF.
If you keep this number, your database may be too easy to crack!</source>
- <translation>你正对AES-KDF使用过低的密钥转换回合数。
+ <translation>您正在使用的密钥转换次数对于 AES-KDF 算法过低。
-如果仍执意使用此数量,你的数据库可能会变得相当简单即能破解!</translation>
+如果执意使用此数,您的数据库可能会变得相当易于破解!</translation>
</message>
<message>
<source>KDF unchanged</source>
- <translation>KDF不变</translation>
+ <translation>KDF 不变</translation>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
@@ -1533,17 +1680,7 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform> thread(s)</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 ms</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 s</numerusform></translation>
+ <translation><numerusform>线程</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1577,6 +1714,14 @@ If you keep this number, your database may be too easy to crack!</source>
<source>Parallelism</source>
<translation>平行运算</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>??毫秒</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>?秒</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
@@ -1585,16 +1730,16 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>开放的项目</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>不要开放这个数据库</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>不公开此数据库</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>这个组下开放的项目</translation>
+ <source>Expose entries under this group:</source>
+ <translation>公开此组下的条目:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>开启 fd.o 机密服务来存储这些设置</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>启用保密服务访问这些设置。</translation>
</message>
</context>
<context>
@@ -1629,7 +1774,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source> MiB</source>
- <translation> MiB</translation>
+ <translation>MiB</translation>
</message>
<message>
<source>Use recycle bin</source>
@@ -1640,10 +1785,6 @@ If you keep this number, your database may be too easy to crack!</source>
<translation>其他数据库设置</translation>
</message>
<message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>启用压缩(推荐)(&amp;C)</translation>
- </message>
- <message>
<source>Database name field</source>
<translation>数据库名称字段</translation>
</message>
@@ -1677,6 +1818,10 @@ This action is not reversible.</source>
<source> (old)</source>
<translation>(旧的)</translation>
</message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>启用压缩(推荐)</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetKeeShare</name>
@@ -1711,45 +1856,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>添加额外保护......</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>没有添加加密密钥</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>您必须添加至少一个加密密钥,才能保护您的数据库!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>没有设置密码</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>警告! 您尚未设置密码。强烈建议不要使用没有密码的数据库!
-
-您确定要在没有密码的情况下继续吗?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知错误</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>无法更改主密钥</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>不使用密码继续</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1769,125 +1875,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>统计表</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>将鼠标悬浮于错误图标上可获得更多信息。</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>名称</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>值</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>数据库名称</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>描述</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>位置</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>上一次保存</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>未保存的修改</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>是</translation>
- </message>
- <message>
- <source>no</source>
- <translation>否</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>数据库已经被更改,但未保存到硬盘上。</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>组数</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>项目数</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>失效的项目数</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>这个数据库包含过期的项目</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>唯一密码</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>重复密码</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>超过10%的项目使用这个密码,请尽量使用不重复的密码</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>密码的最大复用数</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>部分密码已经使用过3次以上,请尽量使用不重复的密码</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>短密码的数量</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>推荐密码最少有8位</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>弱密码的数量</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>推荐使用长的、随机化的,评分是“良好”或者“优秀”的密码</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>平均密码长度</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 字符</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>密码平均小于10位,更长的密码安全性更强。</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>请稍候,正在计算数据库信息……</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1937,7 +1924,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Select CSV file</source>
- <translation>选择CSV文件</translation>
+ <translation>选择 CSV 文件</translation>
</message>
<message>
<source>New Database</source>
@@ -1980,7 +1967,11 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
- <translation>你将把数据导出到未加密文件,这将会直接暴露你的密码或敏感信息,确定要继续吗?</translation>
+ <translation>您将把数据导出到未加密文件,这将会直接暴露您的密码或敏感信息,确定要继续吗?</translation>
+ </message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>打开 OPVault</translation>
</message>
</context>
<context>
@@ -1991,15 +1982,15 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>你确定永久删除 &quot;%1&quot; 项目吗?</translation>
+ <translation>您确定要删除“%1”条目吗?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>是否删除 &quot;%1&quot; 项目到回收站?</translation>
+ <translation>您确定要将条目“%1”移动到回收站吗?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <translation><numerusform>您是否想将 %n 个条目移动到回收站吗?</numerusform></translation>
+ <translation><numerusform>您确定要将 %n 个条目移到回收站吗?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@@ -2007,7 +1998,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>你确定要执行以下命令?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>您确定要执行以下命令?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
@@ -2015,7 +2006,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>你确定永久删除 &quot;%1&quot; 群组吗?</translation>
+ <translation>您确定永久删除“%1”群组吗?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2048,8 +2039,8 @@ This is definitely a bug, please report it to the developers.</source>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>数据库文件改变了,你有未保存的更改。
-你想合并你的修改吗?</translation>
+ <translation>数据库文件改变了,您有未保存的更改。
+您想合并您的修改吗?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2057,11 +2048,11 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>你确定要永久删除回收站中的所有内容?</translation>
+ <translation>您确定要永久删除回收站中的所有内容?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>你真的想删除 %n 个条目吗?</numerusform></translation>
+ <translation><numerusform>您真的想删除 %n 个条目吗?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2069,7 +2060,7 @@ Do you want to merge your changes?</source>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>将条目移至回收站?</numerusform></translation>
+ <translation><numerusform>将条目移动到回收站?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2077,7 +2068,7 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>您正在编辑一个项目。放弃更改和锁定?</translation>
+ <translation>您正在编辑一个条目。确定要放弃更改并锁定吗?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
@@ -2088,7 +2079,7 @@ Save changes?</source>
<message>
<source>Database was modified.
Save changes?</source>
- <translation>数据库已被修改
+ <translation>数据库已被修改。
保存更改?</translation>
</message>
<message>
@@ -2117,7 +2108,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Save database as</source>
- <translation>数据库另存为</translation>
+ <translation>另存为数据库</translation>
</message>
<message>
<source>KeePass 2 Database</source>
@@ -2129,7 +2120,7 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>条目 &quot;%1&quot; 具有 %2 个引用。 是否要使用值覆盖引用,跳过此条目或删除?</numerusform></translation>
+ <translation><numerusform>条目&quot;%1&quot;具有 %2 引用。是否要用值覆盖引用、跳过此项或是否无论如何删除引用?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2157,18 +2148,26 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>写入数据库失败: %1</translation>
+ <translation>写入数据库失败:%1</translation>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>这个数据库通过只读模式打开,自动保存已关闭</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>保存数据库备份</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>找不到数据库文件: %1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
<message>
<source>Entry</source>
- <translation>项目</translation>
+ <translation>条目</translation>
</message>
<message>
<source>Advanced</source>
@@ -2207,28 +2206,16 @@ Disable safe saves and try again?</source>
<translation>选择私钥文件</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>文件太大而不能作为私钥</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>无法打开私钥</translation>
- </message>
- <message>
<source>Entry history</source>
- <translation>项目历史</translation>
+ <translation>条目历史</translation>
</message>
<message>
<source>Add entry</source>
- <translation>添加项目</translation>
+ <translation>添加条目</translation>
</message>
<message>
<source>Edit entry</source>
- <translation>编辑项目</translation>
- </message>
- <message>
- <source>Different passwords supplied.</source>
- <translation>密码不一致。</translation>
+ <translation>编辑条目</translation>
</message>
<message>
<source>New attribute</source>
@@ -2236,7 +2223,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>你确定要移除这个属性?</translation>
+ <translation>您确定要移除这个属性?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2251,29 +2238,13 @@ Disable safe saves and try again?</source>
<translation><numerusform>%n 月</numerusform></translation>
</message>
<message>
- <source>Apply generated password?</source>
- <translation>是否应用生成的密码?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>是否将生成的密码应用于此项目?</translation>
- </message>
- <message>
<source>Entry updated successfully.</source>
- <translation>项目已成功更新。</translation>
- </message>
- <message>
- <source>Entry has unsaved changes</source>
- <translation>项目有未保存的更改</translation>
+ <translation>条目已成功更新。</translation>
</message>
<message>
<source>New attribute %1</source>
<translation>添加属性 %1</translation>
</message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[受保护的内容] 点击“揭示”来查看或编辑</translation>
- </message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n 年</numerusform></translation>
@@ -2292,7 +2263,27 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
- <translation>你确定要删除这个 URL?</translation>
+ <translation>您确定要删除这个 URL?</translation>
+ </message>
+ <message>
+ <source>Reveal</source>
+ <translation>揭示</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>隐藏</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>未保存的更改</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>您要保存对此条目的更改吗?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[保护]按&quot;显示&quot;可查看或编辑</translation>
</message>
</context>
<context>
@@ -2327,11 +2318,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Foreground Color:</source>
- <translation>前景色:</translation>
+ <translation>前景色:</translation>
</message>
<message>
<source>Background Color:</source>
- <translation>背景色:</translation>
+ <translation>背景色:</translation>
</message>
<message>
<source>Attribute selection</source>
@@ -2369,20 +2360,20 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>背景色选择</translation>
</message>
-</context>
-<context>
- <name>EditEntryWidgetAutoType</name>
<message>
- <source>Enable Auto-Type for this entry</source>
- <translation>为此项目启用自动输入</translation>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;如果选中,该条目不会显示在运行状况检查和 HIBP 等报告中,即使它与质量要求不匹配(例如密码熵或重新使用)。如果密码超出您的控制范围(例如,如果密码需要四位数的 PIN),您可以设置检查标记,以防止它弄乱报告。&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>从父&amp;群组继承默认的自动输入顺序</translation>
+ <source>Exclude from database reports</source>
+ <translation>从数据库报告中排除</translation>
</message>
+</context>
+<context>
+ <name>EditEntryWidgetAutoType</name>
<message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>&amp;使用自定义自动输入顺序:</translation>
+ <source>Enable Auto-Type for this entry</source>
+ <translation>为此条目启用自动输入</translation>
</message>
<message>
<source>Window Associations</source>
@@ -2426,7 +2417,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>You can use an asterisk (*) to match everything</source>
- <translation>你可以使用星号(*)来标记任何东西</translation>
+ <translation>您可以使用星号(*)来标记任何东西</translation>
</message>
<message>
<source>Set the window association title</source>
@@ -2434,12 +2425,20 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>You can use an asterisk to match everything</source>
- <translation>你可以使用星号来标记任何东西</translation>
+ <translation>您可以使用星号来标记任何东西</translation>
</message>
<message>
<source>Custom Auto-Type sequence for this window</source>
<translation>自定义这个窗口的自动输入顺序</translation>
</message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>从父群组继承默认的自动输入顺序</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>使用自定义自动输入顺序</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
@@ -2475,6 +2474,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>编辑</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>仅将此设置发送到用于 HTTP 身份验证对话框的浏览器。如果启用,普通登录表单不会显示此条目进行选择。</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>仅对 HTTP 基本身份验证一起使用此条目</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2526,18 +2533,10 @@ Disable safe saves and try again?</source>
<translation>密码:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>重复密码:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>标题:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>备注</translation>
- </message>
- <message>
<source>Presets</source>
<translation>预设</translation>
</message>
@@ -2550,10 +2549,6 @@ Disable safe saves and try again?</source>
<translation>用户名:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>过期</translation>
- </message>
- <message>
<source>Url field</source>
<translation>URL 字段</translation>
</message>
@@ -2562,22 +2557,10 @@ Disable safe saves and try again?</source>
<translation>从 URL 下载 favicon</translation>
</message>
<message>
- <source>Repeat password field</source>
- <translation>重复密码字段</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>密码生成器</translation>
- </message>
- <message>
<source>Password field</source>
<translation>密码字段</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>密码可见</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
<translation>备注可见</translation>
</message>
@@ -2609,6 +2592,18 @@ Disable safe saves and try again?</source>
<source>Toggle expiration</source>
<translation>启用过期</translation>
</message>
+ <message>
+ <source>Notes:</source>
+ <translation>备注:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>到期:</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@@ -2638,7 +2633,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>在打开/解锁数据库时向代理添加密钥</translation>
+ <translation>在打开或解锁数据库时向代理添加密钥</translation>
</message>
<message>
<source>Comment</source>
@@ -2738,16 +2733,12 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>项目有未保存的更改</translation>
+ <translation>条目有未保存的更改</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>表格</translation>
- </message>
- <message>
<source>Type:</source>
<translation>类型:</translation>
</message>
@@ -2756,10 +2747,6 @@ Disable safe saves and try again?</source>
<translation>路径:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>密码:</translation>
</message>
@@ -2769,7 +2756,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation>keshare 未签名的容器</translation>
+ <translation>KeeShare 未签名的容器</translation>
</message>
<message>
<source>KeeShare signed container</source>
@@ -2797,7 +2784,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Export</source>
- <translation>输出</translation>
+ <translation>导出</translation>
</message>
<message>
<source>Synchronize</source>
@@ -2824,7 +2811,7 @@ Supported extensions are: %1.</source>
<message>
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
<comment>KeeShare is a proper noun</comment>
- <translation>KeeShare 未开启,你可以在设置中打开导入/导出选项</translation>
+ <translation>KeeShare 未开启,您可以在设置中打开导入/导出选项</translation>
</message>
<message>
<source>Database export is currently disabled by application settings.</source>
@@ -2843,57 +2830,25 @@ Supported extensions are: %1.</source>
<translation>打开分享文件路径</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>浏览分享的文件</translation>
- </message>
- <message>
<source>Password field</source>
<translation>密码字段</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>密码可见</translation>
+ <source>Clear fields</source>
+ <translation>清楚字段</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>打开密码生成器</translation>
+ <source>Browse for share file</source>
+ <translation>浏览共享文件</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>清楚字段</translation>
+ <source>Browse...</source>
+ <translation>浏览...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>名称</translation>
- </message>
- <message>
- <source>Notes</source>
- <translation>备注</translation>
- </message>
- <message>
- <source>Expires</source>
- <translation>过期</translation>
- </message>
- <message>
- <source>Search</source>
- <translation>搜索</translation>
- </message>
- <message>
- <source>Auto-Type</source>
- <translation>自动输入</translation>
- </message>
- <message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>&amp;使用父群组的默认自动输入顺序(U)</translation>
- </message>
- <message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>&amp;设置默认自动输入顺序(Q)</translation>
- </message>
- <message>
<source>Name field</source>
<translation>用户名字段</translation>
</message>
@@ -2921,18 +2876,38 @@ Supported extensions are: %1.</source>
<source>Default auto-type sequence field</source>
<translation>默认自动输入顺序字段</translation>
</message>
-</context>
-<context>
- <name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>使用默认图标(&amp;U)</translation>
+ <source>Expires:</source>
+ <translation>到期:</translation>
+ </message>
+ <message>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>使用父组的默认自动类型序列</translation>
+ </message>
+ <message>
+ <source>Auto-Type:</source>
+ <translation>自动类型:</translation>
</message>
<message>
- <source>Use custo&amp;m icon</source>
- <translation>使用自定义图标(&amp;M)</translation>
+ <source>Search:</source>
+ <translation>搜索:</translation>
</message>
<message>
+ <source>Notes:</source>
+ <translation>备注:</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>名字:</translation>
+ </message>
+ <message>
+ <source>Set default Auto-Type sequence</source>
+ <translation>设置默认的自动类型序列</translation>
+ </message>
+</context>
+<context>
+ <name>EditWidgetIcons</name>
+ <message>
<source>Add custom icon</source>
<translation>添加自定义图标</translation>
</message>
@@ -2946,7 +2921,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>无法获取网站图标。</translation>
+ <translation>无法获取网站图标</translation>
</message>
<message>
<source>Images</source>
@@ -2966,7 +2941,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>已成功加载 %1 个 %n 图标</numerusform></translation>
+ <translation><numerusform>已成功加载 %1 / %n 图标</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
@@ -2982,11 +2957,11 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>此图标由 %n 个条目使用,并将替换为默认图标。 你确定你要删除吗?</numerusform></translation>
+ <translation><numerusform>此图标由 %n 个条目使用,并将替换为默认图标。 您确定您要删除吗?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
- <translation>你可以在 工具-&gt;设置-&gt;安全 中选择DuckDuckGo作为网站图标来源</translation>
+ <translation>您可以在 工具-&gt;设置-&gt;安全 中选择DuckDuckGo作为网站图标来源</translation>
</message>
<message>
<source>Download favicon for URL</source>
@@ -2997,14 +2972,6 @@ Supported extensions are: %1.</source>
<translation>将选择的图标应用于子群组和条目</translation>
</message>
<message>
- <source>Apply icon &amp;to ...</source>
- <translation>将图标应用于… (&amp;t)</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>仅应用于此项</translation>
- </message>
- <message>
<source>Also apply to child groups</source>
<translation>也应用到子群组</translation>
</message>
@@ -3020,6 +2987,22 @@ Supported extensions are: %1.</source>
<source>Existing icon selected.</source>
<translation>选择的图标已经存在。</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>使用默认图标</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>使用自定义图标</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>将图标应用于...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>仅应用于此组</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -3054,7 +3037,7 @@ Supported extensions are: %1.</source>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>你真的想删除所选的插件数据吗?
+ <translation>您真的想删除所选的插件数据吗?
这可能会导致受影响的插件出现问题。</translation>
</message>
<message>
@@ -3094,7 +3077,7 @@ This may cause the affected plugins to malfunction.</source>
<name>Entry</name>
<message>
<source>%1 - Clone</source>
- <translation>%1 - 复制</translation>
+ <translation>%1 - 副本</translation>
</message>
</context>
<context>
@@ -3136,7 +3119,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>您确定要删除 %n 个附件吗?</numerusform></translation>
+ <translation><numerusform>您确定要删除%n个附件吗?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3150,7 +3133,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>您确定要用附件覆盖现有文件&quot;%1&quot;吗?</translation>
+ <translation>您确定要用附件覆盖现有文件“%1”吗?</translation>
</message>
<message>
<source>Confirm overwrite</source>
@@ -3180,7 +3163,7 @@ This may cause the affected plugins to malfunction.</source>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>无法打开文件:
+ <translation><numerusform>无法打开文件:
%1</numerusform></translation>
</message>
<message>
@@ -3203,6 +3186,20 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation>将选择的附件保存到磁盘</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 是一个大文件 (%2 MB)。
+您的数据库可能会变得非常大,并降低性能。
+
+是否确实要添加此文件?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>确认附件</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3286,12 +3283,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>附件</translation>
</message>
<message>
- <source>Yes</source>
- <translation>是</translation>
+ <source>Size</source>
+ <translation>大小</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP 密码</translation>
+ <source>Group name</source>
+ <translation>组名称</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>条目标题</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>项目备注</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>条目过期</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>创建日期</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>上次修改日期</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>上次访问日期</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>附加文件</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>条目大小</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>有附件</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>具有 TOTP 一次密码</translation>
</message>
</context>
<context>
@@ -3367,7 +3404,7 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
<comment>attributes line</comment>
- <translation>&lt;b&gt;%1&lt;/b&gt;: %2</translation>
+ <translation>&lt;b&gt;%1&lt;/b&gt;:%2</translation>
</message>
<message>
<source>Enabled</source>
@@ -3391,6 +3428,13 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>无效 URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
@@ -3417,8 +3461,14 @@ This may cause the affected plugins to malfunction.</source>
<translation>重置为默认值</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>附件(图标)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>有附件</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>有 Totp</translation>
</message>
</context>
<context>
@@ -3430,21 +3480,74 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>注册位于%1的DBus服务失败:另一个密钥服务正在运行。</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
- <translation><numerusform>%n条目正被%1使用</numerusform></translation>
+ <translation><numerusform>%n 条目由 %1 使用</numerusform></translation>
+ </message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>无法以 %1 注册 DBus 服务。&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>文件名</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>群组</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>管理</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>解锁以显示</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>无</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>应用</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>管理</translation>
</message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo密钥服务:%1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo 保密服务:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>未知</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>未知</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1,可执行:%2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>另一个保密服务正在运行 (%1)。&lt;br/&gt;在重新启用保密服务集成之前,请停止/删除它。</translation>
</message>
</context>
<context>
@@ -3456,14 +3559,10 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
- <message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC:无法保存文件!</translation>
- </message>
+ <name>HibpDownloader</name>
<message>
- <source>Cannot save the native messaging script file.</source>
- <translation>无法保存本机消息传递脚本文件。</translation>
+ <source>Online password validation failed</source>
+ <translation>在线密码验证失败</translation>
</message>
</context>
<context>
@@ -3480,7 +3579,7 @@ This may cause the affected plugins to malfunction.</source>
<source>Having trouble downloading icons?
You can enable the DuckDuckGo website icon service in the security section of the application settings.</source>
<translation>下载图标遇到问题?
-你可以在程序设置的安全选项卡中启用DuckDuckGo图标服务。</translation>
+您可以在程序设置的安全选项卡中启用DuckDuckGo图标服务。</translation>
</message>
<message>
<source>Close</source>
@@ -3496,11 +3595,11 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Please wait, processing entry list...</source>
- <translation>请等待,正在处理条目列表……</translation>
+ <translation>请等待,正在处理条目列表...</translation>
</message>
<message>
<source>Downloading...</source>
- <translation>正在下载……</translation>
+ <translation>正在下载...</translation>
</message>
<message>
<source>Ok</source>
@@ -3523,7 +3622,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
<name>KMessageWidget</name>
<message>
<source>&amp;Close</source>
- <translation>&amp;关闭</translation>
+ <translation>关闭(&amp;C)</translation>
</message>
<message>
<source>Close message</source>
@@ -3533,14 +3632,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>无法计算主密码</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>无法发出挑战应答。</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>缺少数据库头</translation>
</message>
@@ -3564,18 +3655,26 @@ You can enable the DuckDuckGo website icon service in the security section of th
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
<translation>凭据无效,请重试。
-若这现象重复发生,可能你的数据库文件已损坏。</translation>
+若这现象重复发生,可能您的数据库文件已损坏。</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>无法计算数据库密钥</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>无法发出质询响应: %1</translation>
</message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>无法发出挑战应答。</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>无法发出质询响应: %1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>无法计算主密码</translation>
+ <source>Unable to calculate database key</source>
+ <translation>无法计算数据库密钥</translation>
</message>
</context>
<context>
@@ -3585,16 +3684,12 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>缺少数据库头</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>无法计算主密码</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>无效的报头校验大小</translation>
</message>
<message>
<source>Header SHA256 mismatch</source>
- <translation>SHA256标头不匹配</translation>
+ <translation>SHA256 标头不匹配</translation>
</message>
<message>
<source>Unknown cipher</source>
@@ -3602,7 +3697,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid header id size</source>
- <translation>无效的标头ID大小</translation>
+ <translation>无效的标头 ID 大小</translation>
</message>
<message>
<source>Invalid header field length</source>
@@ -3614,7 +3709,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>无法打开在标头中KDF参数的缓冲区</translation>
+ <translation>无法打开在标头中 KDF 参数的缓冲区</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
@@ -3622,11 +3717,11 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
- <translation>在KDBX4文件中找到旧的标头字段。</translation>
+ <translation>在 KDBX4 文件中找到旧的标头字段。</translation>
</message>
<message>
<source>Invalid inner header id size</source>
- <translation>无效的内部标头ID大小</translation>
+ <translation>无效的内部标头 ID 大小</translation>
</message>
<message>
<source>Invalid inner header field length</source>
@@ -3639,7 +3734,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>不支持的KeePass变体映射版本。</translation>
+ <translation>不支持的 KeePass 变体映射版本。</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
@@ -3664,12 +3759,12 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>无效的变量映射Bool条目值</translation>
+ <translation>无效的变量映射 Bool 条目值长度</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>无效的变量映射Int32条目值长度</translation>
+ <translation>无效的变量映射 Int32 条目值长度</translation>
</message>
<message>
<source>Invalid variant map UInt32 entry value length</source>
@@ -3679,12 +3774,12 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid variant map Int64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>无效的变量映射Int64条目值长度</translation>
+ <translation>无效的变量映射 Int64 条目值长度</translation>
</message>
<message>
<source>Invalid variant map UInt64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>无效的变量映射UInt64条目值长度</translation>
+ <translation>无效的变量映射 UInt64 条目值长度</translation>
</message>
<message>
<source>Invalid variant map entry type</source>
@@ -3700,12 +3795,16 @@ If this reoccurs, then your database file may be corrupt.</source>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
<translation>凭据无效,请重试。
-若这现象重复发生,可能你的数据库文件已损坏。</translation>
+若这现象重复发生,可能您的数据库文件已损坏。</translation>
</message>
<message>
<source>(HMAC mismatch)</source>
<translation>(HMAC不匹配)</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>无法计算数据库密钥: %1</translation>
+ </message>
</context>
<context>
<name>Kdbx4Writer</name>
@@ -3716,16 +3815,16 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>无效的对称密码IV大小。</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>无法计算主密码</translation>
+ <translation>无效的对称密码 IV 大小。</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>无法序列化KDF参数变量映射</translation>
+ <translation>无法序列化 KDF 参数变量映射</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>无法计算数据库密钥: %1</translation>
</message>
</context>
<context>
@@ -3752,7 +3851,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation>无效的转换回合数</translation>
+ <translation>无效的转换次数</translation>
</message>
<message>
<source>Invalid start bytes size</source>
@@ -3768,7 +3867,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>不是 KeePass 数据库。</translation>
+ <translation>不是一个 KeePass 数据库</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
@@ -3776,20 +3875,20 @@ If this reoccurs, then your database file may be corrupt.</source>
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>当前选择的文件是旧版本的 KeePass 1 数据库(.kdb)。
-你可以通过点击 数据库 &gt; 导入 KeePass 1 数据库 来导入。
+您可以通过点击 数据库 &gt; 导入 KeePass 1 数据库 来导入。
这是不可逆的迁移,导入后的数据库将无法由旧版本的 KeePassX 0.4 打开。</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
- <translation>不支持的KeePass 2数据库版本。</translation>
+ <translation>不支持的 KeePass 2 数据库版本。</translation>
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>无效密码uuid长度: %1(长度=%2)</translation>
+ <translation>无效的密码 uuid 长度:%1(长度=%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>无法解析 UUID: %1</translation>
+ <translation>无法解析 UUID:%1</translation>
</message>
<message>
<source>Failed to read database file.</source>
@@ -3832,7 +3931,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Invalid EnableSearching value</source>
- <translation>无效的EnableSearching值</translation>
+ <translation>无效的 EnableSearching 值</translation>
</message>
<message>
<source>No group uuid found</source>
@@ -3848,7 +3947,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Null entry uuid</source>
- <translation>空的项目 uuid</translation>
+ <translation>空的条目 uuid</translation>
</message>
<message>
<source>Invalid entry icon number</source>
@@ -3860,7 +3959,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>No entry uuid found</source>
- <translation>找不到项目 uuid</translation>
+ <translation>找不到条目 uuid</translation>
</message>
<message>
<source>History element with different uuid</source>
@@ -3875,16 +3974,12 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<translation>输入字符串键或值丢失</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>找到重复的附件</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>缺少输入二进制密钥或值</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>缺少自动键入关联窗口或序列</translation>
+ <translation>缺少自动输入关联窗口或序列</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3900,7 +3995,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>无效的颜色rgb部分</translation>
+ <translation>无效的颜色 rgb 部分</translation>
</message>
<message>
<source>Invalid number value</source>
@@ -3919,16 +4014,39 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>XML error:
%1
Line %2, column %3</source>
- <translation>XML错误:
+ <translation>XML 错误:
%1
行 %2,列 %3</translation>
</message>
</context>
<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>无效的 KeeAgent 设置文件结构。</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>私钥是附件,但没有提供附件。</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>私钥为空</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>文件太大而不能作为私钥</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>无法打开私钥</translation>
+ </message>
+</context>
+<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
- <translation>无法打开数据库。</translation>
+ <translation>无法打开数据库</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
@@ -3939,24 +4057,24 @@ Line %2, column %3</source>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation>无法读取密钥文件。</translation>
+ <translation>无法读取密钥文件</translation>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>不是 KeePass 数据库。</translation>
+ <translation>不是 KeePass 数据库</translation>
</message>
<message>
<source>Unsupported encryption algorithm.</source>
- <translation>不支持的加密算法。</translation>
+ <translation>不支持的加密算法</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
- <translation>不支持的 KeePass 数据库版本。</translation>
+ <translation>不支持的 KeePass 数据库版本</translation>
</message>
<message>
<source>Unable to read encryption IV</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>无法读取加密IV</translation>
+ <translation>无法读取加密 IV</translation>
</message>
<message>
<source>Invalid number of groups</source>
@@ -3976,7 +4094,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>无效的转换回合数</translation>
+ <translation>无效的转换次数</translation>
</message>
<message>
<source>Unable to construct group tree</source>
@@ -3987,10 +4105,6 @@ Line %2, column %3</source>
<translation>根群组</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>无法计算主密码</translation>
- </message>
- <message>
<source>Key transformation failed</source>
<translation>密钥转换失败</translation>
</message>
@@ -4008,7 +4122,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation>组ID字段大小不正确</translation>
+ <translation>组 ID 字段大小不正确</translation>
</message>
<message>
<source>Incorrect group creation time field size</source>
@@ -4040,7 +4154,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Missing group id or level</source>
- <translation>缺少组ID或级别</translation>
+ <translation>缺少组 ID 或级别</translation>
</message>
<message>
<source>Missing entry field type number</source>
@@ -4060,7 +4174,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>无效的条目组ID字段大小</translation>
+ <translation>无效的条目组 ID 字段大小</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
@@ -4090,7 +4204,11 @@ Line %2, column %3</source>
<source>Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt.</source>
<translation>凭据无效,请重试。
-若这现象重复发生,可能你的数据库文件已损坏。</translation>
+若这现象重复发生,可能您的数据库文件已损坏。</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>无法计算数据库密钥</translation>
</message>
</context>
<context>
@@ -4191,27 +4309,17 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;您可以添加包含随机字节的密钥文件以获得额外的安全性。&lt;/p&gt;&lt;p&gt;您必须保密,不要丢失它,否则您将被锁定!&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;您可以添加包含随机字节的密钥文件以获得额外的安全性。&lt;/p&gt;&lt;p&gt;您必须将其保密,请勿丢失,否则您将无法再打开数据库!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
<translation>旧式密钥文件格式</translation>
</message>
<message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>您正在使用可能成为的旧密钥文件格式
-将来不再支持。
-
-请转到主密钥设置并生成新密钥文件。</translation>
- </message>
- <message>
<source>Error loading the key file '%1'
Message: %2</source>
<translation>加载密钥文件 &apos;%1&apos; 时出错
-消息: %2</translation>
+消息:%2</translation>
</message>
<message>
<source>Key files</source>
@@ -4231,7 +4339,7 @@ Message: %2</source>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>无法创建密钥文件: %1</translation>
+ <translation>无法创建密钥文件:%1</translation>
</message>
<message>
<source>Select a key file</source>
@@ -4243,7 +4351,7 @@ Message: %2</source>
</message>
<message>
<source>Browse for key file</source>
- <translation>浏览密钥文件</translation>
+ <translation>浏览密匙文件</translation>
</message>
<message>
<source>Browse...</source>
@@ -4263,7 +4371,7 @@ Message: %2</source>
</message>
<message>
<source>You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file.</source>
- <translation>你不能用当前数据库作为它本身的密钥文件。请选择不同的文件或生成一个新的密钥文件。</translation>
+ <translation>您不能用当前数据库作为它本身的密钥文件。请选择不同的文件或生成一个新的密钥文件。</translation>
</message>
<message>
<source>Suspicious Key File</source>
@@ -4272,8 +4380,18 @@ Message: %2</source>
<message>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
- <translation>选择的密钥文件似乎是个密码库文件。密钥文件必须是不会被改变的文件,否则你会永久失去对数据库的访问。
-你确定要用这个文件继续吗?</translation>
+ <translation>选择的密钥文件似乎是个密码库文件。密钥文件必须是不会被改变的文件,否则您会永久失去对数据库的访问。
+您确定要用这个文件继续吗?</translation>
+ </message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>您使用的是旧式密钥文件格式,该格式可能会成为
+将来不受支持。
+
+在数据库安全设置中生成新的密钥文件。</translation>
</message>
</context>
<context>
@@ -4283,18 +4401,10 @@ Are you sure you want to continue with this file?</source>
<translation>数据库(&amp;D)</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>最近的数据库(&amp;R)</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>帮助(&amp;H)</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>项目(&amp;N)</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>群组(&amp;G)</translation>
</message>
@@ -4311,46 +4421,10 @@ Are you sure you want to continue with this file?</source>
<translation>关于(&amp;A)</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>打开数据库(&amp;O)...</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>保存数据库(&amp;S)</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>关闭数据库(&amp;C)</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>删除项目(&amp;D)</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>编辑群组(&amp;E)</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>删除群组(&amp;D)</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>数据库另存为(&amp;V)...</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>数据库设置</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>复制项目(&amp;C)</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>复制用户名(&amp;U)</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>将用户名复制到剪贴板</translation>
</message>
@@ -4363,10 +4437,6 @@ Are you sure you want to continue with this file?</source>
<translation>设置(&amp;S)</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>锁定数据库(&amp;L)</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>标题(&amp;T)</translation>
</message>
@@ -4391,20 +4461,12 @@ Are you sure you want to continue with this file?</source>
<translation>复制备注到剪贴板</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>导出为 CSV 文件(&amp;E)...</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>设置 TOTP 密码...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
- <translation>复制 TOTP 密码(&amp;T)</translation>
+ <translation>复制 TOTP(&amp;T)</translation>
</message>
<message>
<source>E&amp;mpty recycle bin</source>
- <translation>清空回收站(&amp;m)</translation>
+ <translation>清空回收站(&amp;M)</translation>
</message>
<message>
<source>Clear history</source>
@@ -4428,211 +4490,385 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>请触摸你 YubiKey 上的按键!</translation>
+ <translation>请触摸您 YubiKey 上的按键!</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>警告:您正在使用不稳定的KeePassXC版本!
-存在高风险的损坏,维护数据库的备份。
+ <translation>警告:您正在使用的是非稳定版的 KeePassXC 版本!
+文件损坏的风险较高,请妥善备份您的数据库。
此版本不适用于生产用途。</translation>
</message>
<message>
<source>&amp;Donate</source>
- <translation>&amp;捐助</translation>
- </message>
- <message>
- <source>Report a &amp;bug</source>
- <translation>报告&amp;错误</translation>
+ <translation>捐助(&amp;D)</translation>
</message>
<message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
- <translation>警告:您的Qt版本可能会导致KeePassXC与屏幕键盘而崩溃!
-我们建议您使用我们的下载页面上提供的AppImage。</translation>
+ <translation>警告:您的 Qt 版本可能会导致在使用屏幕键盘时 KeePassXC 崩溃!
+我们建议您使用我们的下载页面上提供的 AppImage。</translation>
</message>
<message>
<source>&amp;Import</source>
- <translation>&amp;导入</translation>
+ <translation>导入(&amp;I)</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>复制属性(&amp;R)...</translation>
+ <source>Create a new database</source>
+ <translation>创建一个新数据库</translation>
</message>
<message>
- <source>TOTP...</source>
- <translation>TOTP...</translation>
+ <source>Merge from another KDBX database</source>
+ <translation>从另一个KDBX数据库合并</translation>
</message>
<message>
- <source>&amp;New database...</source>
- <translation>新数据库(&amp;N)...</translation>
+ <source>Add a new entry</source>
+ <translation>添加新条目</translation>
</message>
<message>
- <source>Create a new database</source>
- <translation>创建一个新数据库</translation>
+ <source>View or edit entry</source>
+ <translation>查看或编辑条目</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>&amp;从数据库中合并...</translation>
+ <source>Add a new group</source>
+ <translation>添加一个新群组</translation>
</message>
<message>
- <source>Merge from another KDBX database</source>
- <translation>从另一个KDBX数据库合并</translation>
+ <source>Perform &amp;Auto-Type</source>
+ <translation>执行自动输入(&amp;A)</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>&amp;新项目</translation>
+ <source>Open &amp;URL</source>
+ <translation>打开 URL 链接(&amp;U)</translation>
</message>
<message>
- <source>Add a new entry</source>
- <translation>添加新项目</translation>
+ <source>Import a KeePass 1 database</source>
+ <translation>导入 KeePass 1 数据库</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>&amp;编辑项目</translation>
+ <source>Import a CSV file</source>
+ <translation>导入一个 CSV 文件</translation>
</message>
<message>
- <source>View or edit entry</source>
- <translation>查看或编辑项目</translation>
+ <source>NOTE: You are using a pre-release version of KeePassXC!
+Expect some bugs and minor issues, this version is not meant for production use.</source>
+ <translation>注意:您使用的是 KeePassXC 的预发行版本!
+可能会有一些错误和小问题。此版本不适合在生产环境中使用。</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>&amp;新群组</translation>
+ <source>Check for updates on startup?</source>
+ <translation>是否在启动时检查更新?</translation>
</message>
<message>
- <source>Add a new group</source>
- <translation>添加一个新群组</translation>
+ <source>Would you like KeePassXC to check for updates on startup?</source>
+ <translation>是否希望 KeePassXC 在启动时检查更新?</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>修改主密钥(&amp;K)...</translation>
+ <source>You can always check for updates manually from the application menu.</source>
+ <translation>您始终可以从应用程序菜单手动检查更新。</translation>
</message>
<message>
- <source>&amp;Database settings...</source>
- <translation>&amp;数据库设置...</translation>
+ <source>&amp;Export</source>
+ <translation>导出(&amp;E)</translation>
</message>
<message>
- <source>Copy &amp;password</source>
- <translation>复制 &amp;密码</translation>
+ <source>Sort &amp;A-Z</source>
+ <translation>顺序排列(&amp;A)</translation>
</message>
<message>
- <source>Perform &amp;Auto-Type</source>
- <translation>执行和自动键入(&amp;A)</translation>
+ <source>Sort &amp;Z-A</source>
+ <translation>逆序排列(&amp;Z)</translation>
</message>
<message>
- <source>Open &amp;URL</source>
- <translation>打开 &amp;URL链接</translation>
+ <source>&amp;Password Generator</source>
+ <translation>密码生成器(&amp;P)</translation>
</message>
<message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 数据库...</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>导入1Password保险库</translation>
</message>
<message>
- <source>Import a KeePass 1 database</source>
- <translation>导入KeePass 1数据库</translation>
+ <source>&amp;Getting Started</source>
+ <translation>开始使用(&amp;G)</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV文件...</translation>
+ <source>&amp;User Guide</source>
+ <translation>用户手册(&amp;U)</translation>
</message>
<message>
- <source>Import a CSV file</source>
- <translation>导入CSV文件</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>键盘快捷键(&amp;K)</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>显示 TOTP...</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>最近的数据库(&amp;R)</translation>
</message>
<message>
- <source>Show TOTP QR Code...</source>
- <translation>显示TOTP 二维码...</translation>
+ <source>&amp;Entries</source>
+ <translation>条目(&amp;E)</translation>
</message>
<message>
- <source>NOTE: You are using a pre-release version of KeePassXC!
-Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>注意:您使用的是KeePassXC的预发行版本!
-预计一些错误和小问题, 这个版本并不打算用于生产使用。</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>复制属性</translation>
</message>
<message>
- <source>Check for updates on startup?</source>
- <translation>是否在启动时检查更新?</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>是否希望KeePassXC在启动时检查更新?</translation>
+ <source>View</source>
+ <translation>显示</translation>
</message>
<message>
- <source>You can always check for updates manually from the application menu.</source>
- <translation>您始终可以从应用程序菜单手动检查更新。</translation>
+ <source>Theme</source>
+ <translation>主题</translation>
</message>
<message>
- <source>&amp;Export</source>
- <translation>导出(&amp;E)</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>检查更新(&amp;C)</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>检查更新(&amp;C)</translation>
+ <source>&amp;Open Database…</source>
+ <translation>打开数据库(&amp;O)...</translation>
</message>
<message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>下载所有网站图标(&amp;A)</translation>
+ <source>&amp;Save Database</source>
+ <translation>保存数据库(&amp;S)</translation>
</message>
<message>
- <source>Sort &amp;A-Z</source>
- <translation>顺序排列(&amp;A)</translation>
+ <source>&amp;Close Database</source>
+ <translation>关闭数据库(&amp;C)</translation>
</message>
<message>
- <source>Sort &amp;Z-A</source>
- <translation>逆序排列(&amp;Z)</translation>
+ <source>&amp;New Database…</source>
+ <translation>新建数据库(&amp;N)...</translation>
</message>
<message>
- <source>&amp;Password Generator</source>
- <translation>密码生成器(&amp;P)</translation>
+ <source>&amp;Merge From Database…</source>
+ <translation>从数据库合并(&amp;M)...</translation>
</message>
<message>
- <source>Download favicon</source>
+ <source>&amp;New Entry…</source>
+ <translation>新建条目(&amp;N)...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>编辑条目(&amp;E)...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>删除条目(&amp;D)...</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>新建群组(&amp;N)...</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>编辑群组(&amp;E)...</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>删除群组(&amp;D)…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>下载所有网站图标...</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>保存数据库作为...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>数据库安全...</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>数据库报告...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>统计、健康检查等</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>数据库设置(&amp;D)...</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>复制条目(&amp;C)...</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>上移</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>向上移动条目一步</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>下移</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>向下移动一步入口</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>复制用户名</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>复制密码</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
<translation>下载网站图标</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>导出为HTML文件(&amp;E)...</translation>
+ <source>&amp;Lock Databases</source>
+ <translation>锁定数据库(&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV 文件...</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password保险库…</translation>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML 文件...</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>导入1Password保险库</translation>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 数据库...</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>开始使用(&amp;G)</translation>
+ <source>1Password Vault…</source>
+ <translation>1Password 库...</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>打开开始使用教程PDF</translation>
+ <source>CSV File…</source>
+ <translation>CSV 文件...</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>在线帮助(&amp;O)</translation>
+ <source>Show TOTP</source>
+ <translation>显示 TOTP 密码</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>查看在线文档(浏览器打开)</translation>
+ <source>Show QR Code</source>
+ <translation>显示二维码</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>用户手册(&amp;U)</translation>
+ <source>Set up TOTP…</source>
+ <translation>设置 TOTP...</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>打开用户手册PDF</translation>
+ <source>Report a &amp;Bug</source>
+ <translation>报告一个Bug</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>键盘快捷键(&amp;K)</translation>
+ <source>Open Getting Started Guide</source>
+ <translation>打开入门指南</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>在线帮助(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>转到联机文档</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>打开用户指南</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>保存数据库备份...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>向 SSH 代理添加密钥</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>从 SSH 代理中删除密钥</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>紧凑模式</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>自动</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>亮色</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>暗色</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>经典(平台原生)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>显示工具栏</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>显示预览面板</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>不再为此版本显示</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>是否重新启动应用程序?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>您必须重新启动应用程序才能应用此设置。现在要重新启动吗?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>数据库设置</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>修改数据库设置</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>解锁数据库</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>解锁数据库以显示更多信息</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>锁定数据库</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>断开连接</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>断开此应用程序</translation>
</message>
</context>
<context>
@@ -4651,7 +4887,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>从数据库 &quot;%1&quot; 合并的旧项目</translation>
+ <translation>从数据库“%1”合并的旧条目</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4663,11 +4899,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>在较新的源 %1 [%2]之上重新应用较旧的目标项目</translation>
+ <translation>在较新的源 %1 [%2]之上重新应用旧的目标条目</translation>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>在较新的目标 %1 [%2]之上重新应用较旧的源项目</translation>
+ <translation>在较新的目标 %1 [%2]之上重新应用旧的源条目</translation>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
@@ -4706,7 +4942,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<name>NewDatabaseWizard</name>
<message>
<source>Create a new KeePassXC database...</source>
- <translation>创建一个新的KeePassXC数据库...</translation>
+ <translation>创建一个新的 KeePassXC 数据库...</translation>
</message>
<message>
<source>Root</source>
@@ -4721,10 +4957,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>向导页</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>加密设置(&amp;C)</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
<translation>您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。</translation>
</message>
@@ -4736,27 +4968,31 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>简单设置</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>加密设置</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。</translation>
+ <source>Database Credentials</source>
+ <translation>数据库凭据</translation>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>一组只有您知道的凭据,用于保护您的数据库。</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>数据库主密钥</translation>
+ <source>Encryption Settings</source>
+ <translation>加密设置</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>只有您知道的主密钥才能保护您的数据库。</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。</translation>
</message>
</context>
<context>
@@ -4771,6 +5007,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
</context>
<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>密码管理器</translation>
+ </message>
+</context>
+<context>
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
@@ -4834,18 +5077,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unable to derive master key: %1</source>
- <translation>不能派生主密码:%1</translation>
+ <translation>不能派生主密钥:%1</translation>
</message>
</context>
<context>
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>无效的密钥文件,需要OpenSSH密钥</translation>
+ <translation>无效的密钥文件,需要 OpenSSH 密钥</translation>
</message>
<message>
<source>PEM boundary mismatch</source>
- <translation>PEM边界不匹配</translation>
+ <translation>PEM 边界不匹配</translation>
</message>
<message>
<source>Base64 decoding failed</source>
@@ -4857,7 +5100,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>密钥文件魔术标头ID无效</translation>
+ <translation>密钥文件魔术标头 ID 无效</translation>
</message>
<message>
<source>Found zero keys</source>
@@ -4909,7 +5152,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>无法写私钥,因为它是空的</translation>
+ <translation>无法写入一个空的私钥</translation>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
@@ -4917,7 +5160,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation>不支持的密钥类型: %1</translation>
+ <translation>不支持的密钥类型:%1</translation>
</message>
<message>
<source>Unknown cipher: %1</source>
@@ -4925,15 +5168,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>密码IV对于MD5 kdf来说太短了</translation>
+ <translation>密码 IV 对于 MD5 kdf 过短</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
- <translation>未知的KDF: %1</translation>
+ <translation>未知的 KDF:%1</translation>
</message>
<message>
<source>Unknown key type: %1</source>
- <translation>未知密钥类型: %1</translation>
+ <translation>未知密钥类型:%1</translation>
</message>
</context>
<context>
@@ -4946,6 +5189,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>目前匹配的密码</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>切换密码 (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>生成密码 (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>警告: 已启用大写锁定!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4955,7 +5210,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Confirm password:</source>
- <translation>确认密码:</translation>
+ <translation>确认密码:</translation>
</message>
<message>
<source>Password</source>
@@ -4963,32 +5218,20 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation>&lt;p&gt;密码是保护数据库的主要方法。&lt;/p&gt;&lt;p&gt;良好的密码长且独特。 KeePassXC可以为您生成一个。&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;密码是保护数据库的主要方法。&lt;/p&gt;&lt;p&gt;良好的密码长且独特。 KeePassXC 可以为您生成一个。&lt;/p&gt;</translation>
</message>
<message>
<source>Passwords do not match.</source>
<translation>密码不匹配。</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>生成主密码</translation>
- </message>
- <message>
<source>Password field</source>
<translation>密码字段</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>密码可见</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>重复密码字段</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>打开密码生成器</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4997,10 +5240,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>密码:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>强度</translation>
@@ -5050,14 +5289,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>字符分隔符:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>复制</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>接受</translation>
- </message>
- <message>
<source>Close</source>
<translation>关闭</translation>
</message>
@@ -5077,7 +5308,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
<message>
<source>Weak</source>
<comment>Password quality</comment>
- <translation>弱</translation>
+ <translation>较弱</translation>
</message>
<message>
<source>Good</source>
@@ -5087,11 +5318,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
<message>
<source>Excellent</source>
<comment>Password quality</comment>
- <translation>优秀</translation>
+ <translation>非常好</translation>
</message>
<message>
<source>ExtendedASCII</source>
- <translation>扩展的ASCII</translation>
+ <translation>扩展 ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
@@ -5154,14 +5385,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>切换到简易模式</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>简易</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>从生成的密码中排除字符集</translation>
</message>
@@ -5179,15 +5402,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</source>
- <translation>排除的字符: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
- </message>
- <message>
- <source>Word Co&amp;unt:</source>
- <translation>字数(&amp;u):</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>重新生成</translation>
+ <translation>排除的字符:“0”,“1”,“l”,“I”,“O”,“|”,“﹒”</translation>
</message>
<message>
<source>Generated password</source>
@@ -5238,10 +5453,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>复制密码</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>接受密码</translation>
- </message>
- <message>
<source>lower case</source>
<translation>小写</translation>
</message>
@@ -5254,8 +5465,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>首字母大小写</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>密码可见</translation>
+ <source>Generate Password</source>
+ <translation>生成密码</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>也从此选择:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>用于生成的密码的其他字符</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>其他字符</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>字数:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>应用密码</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>清除</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>重新生成密码 (%1)</translation>
</message>
</context>
<context>
@@ -5266,7 +5513,59 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Statistics</source>
- <translation>统计表</translation>
+ <translation>统计</translation>
+ </message>
+ <message>
+ <source>Very weak password</source>
+ <translation>非常弱的密码</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>密码熵是 %1 位</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>较弱的密码</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>用于 %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>密码使用 %1 次</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>密码已过期</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>密码到期为 %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>密码即将过期</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>密码在 %1 天后过期</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>密码即将过期</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>密码在 %1 上过期</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>健康检查</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
</message>
</context>
<context>
@@ -5332,7 +5631,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>KeePassXC关联失败,请重试</translation>
+ <translation>KeePassXC 关联失败,请重试</translation>
</message>
<message>
<source>Encryption key is not recognized</source>
@@ -5348,7 +5647,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>No URL provided</source>
- <translation>没有提供URL</translation>
+ <translation>没有提供 URL</translation>
</message>
<message>
<source>No logins found</source>
@@ -5364,7 +5663,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Path of the database.</source>
- <translation>数据库路径。</translation>
+ <translation>数据库路径</translation>
</message>
<message>
<source>Key file of the database.</source>
@@ -5376,7 +5675,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Username for the entry.</source>
- <translation>项目的用户名。</translation>
+ <translation>条目的用户名。</translation>
</message>
<message>
<source>username</source>
@@ -5384,7 +5683,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>URL for the entry.</source>
- <translation>条目的URL。</translation>
+ <translation>条目的 URL。</translation>
</message>
<message>
<source>URL</source>
@@ -5407,10 +5706,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>要添加的条目的路径。</translation>
</message>
<message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>将条目的密码复制到剪贴板。</translation>
- </message>
- <message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
<translation>剪辑条目的路径。</translation>
@@ -5421,11 +5716,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Edit an entry.</source>
- <translation>编辑项目。</translation>
+ <translation>编辑条目。</translation>
</message>
<message>
<source>Title for the entry.</source>
- <translation>项目标题。</translation>
+ <translation>条目标题。</translation>
</message>
<message>
<source>title</source>
@@ -5433,7 +5728,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Path of the entry to edit.</source>
- <translation>要编辑的项目的路径。</translation>
+ <translation>要编辑的条目的路径。</translation>
</message>
<message>
<source>Estimate the entropy of a password.</source>
@@ -5469,11 +5764,11 @@ Available commands:
</message>
<message>
<source>Name of the command to execute.</source>
- <translation>将执行的命令名称。</translation>
+ <translation>将执行的命令名称</translation>
</message>
<message>
<source>List database entries.</source>
- <translation>列出数据库项目。</translation>
+ <translation>列出数据库条目</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
@@ -5481,7 +5776,7 @@ Available commands:
</message>
<message>
<source>Find entries quickly.</source>
- <translation>快速查找项目。</translation>
+ <translation>快速查找条目。</translation>
</message>
<message>
<source>Search term.</source>
@@ -5493,7 +5788,7 @@ Available commands:
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>要合并的数据库的路径。</translation>
+ <translation>将合并的数据库路径。</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
@@ -5517,7 +5812,7 @@ Available commands:
</message>
<message>
<source>Name of the entry to show.</source>
- <translation>项目名称。</translation>
+ <translation>要显示的条目名称。</translation>
</message>
<message>
<source>NULL device</source>
@@ -5565,15 +5860,7 @@ Available commands:
</message>
<message>
<source>Browser Integration</source>
- <translation>浏览器集成</translation>
- </message>
- <message>
- <source>Press</source>
- <translation>按下</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>被动</translation>
+ <translation>浏览器配合</translation>
</message>
<message>
<source>SSH Agent</source>
@@ -5581,17 +5868,17 @@ Available commands:
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
- <translation>生成新的随机diceware密码。</translation>
+ <translation>生成一个新的随机 diceware 密码。</translation>
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>diceware密码短语的字数。</translation>
+ <translation>diceware 密码短语的字数。</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
[Default: EFF English]</source>
- <translation>diceware生成器的词表。
-[默认:EFF英文]</translation>
+ <translation>diceware 生成器的词表。
+[默认:EFF 英文]</translation>
</message>
<message>
<source>Generate a new random password.</source>
@@ -5599,11 +5886,11 @@ Available commands:
</message>
<message>
<source>Could not create entry with path %1.</source>
- <translation>无法创建路径为 %1 的项目。</translation>
+ <translation>无法创建路径为 %1 的条目。</translation>
</message>
<message>
<source>Enter password for new entry: </source>
- <translation>输入新项目的密码:</translation>
+ <translation>输入新条目的密码:</translation>
</message>
<message>
<source>Writing the database failed %1.</source>
@@ -5611,11 +5898,7 @@ Available commands:
</message>
<message>
<source>Successfully added entry %1.</source>
- <translation>成功添加了项目 %1 。</translation>
- </message>
- <message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>将当前TOTP复制到剪贴板。</translation>
+ <translation>成功添加了条目 %1 。</translation>
</message>
<message>
<source>Invalid timeout value %1.</source>
@@ -5623,19 +5906,11 @@ Available commands:
</message>
<message>
<source>Entry %1 not found.</source>
- <translation>输入 %1 未找到。项目</translation>
+ <translation>未找到条目 %1。</translation>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
- <translation>路径 %1 的项目没有设置TOTP。</translation>
- </message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>项目的当前TOTP复制到剪贴板!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>项目密码复制到剪贴板!</translation>
+ <translation>路径 %1 的条目没有设置 TOTP。</translation>
</message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
@@ -5656,11 +5931,11 @@ Available commands:
</message>
<message>
<source>Could not find entry with path %1.</source>
- <translation>找不到路径为 %1的项目。</translation>
+ <translation>找不到路径为 %1 的条目。</translation>
</message>
<message>
<source>Not changing any field for entry %1.</source>
- <translation>不更改项目 %1的任何字段。</translation>
+ <translation>不更改条目 %1 的任何字段。</translation>
</message>
<message>
<source>Enter new password for entry: </source>
@@ -5668,11 +5943,11 @@ Available commands:
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>写入数据库失败: %1</translation>
+ <translation>写入数据库失败:%1</translation>
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation>已成功编辑项目 %1。</translation>
+ <translation>已成功编辑条目 %1。</translation>
</message>
<message>
<source>Length %1</source>
@@ -5700,7 +5975,7 @@ Available commands:
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>类型:字典+名单</translation>
+ <translation>类型:字典 + 名单</translation>
</message>
<message>
<source>Type: User Words</source>
@@ -5728,23 +6003,23 @@ Available commands:
</message>
<message>
<source>Type: Bruteforce(Rep)</source>
- <translation>类型:暴力破解(重复)</translation>
+ <translation>类型:暴力破解(重复)</translation>
</message>
<message>
<source>Type: Dictionary(Rep)</source>
- <translation>类型:字典(重复)</translation>
+ <translation>类型:字典(重复)</translation>
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>类型:字典+名单(重复)</translation>
+ <translation>类型:字典 + 名单(重复)</translation>
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>类型:用户词(重复)</translation>
+ <translation>类型:用户词(重复)</translation>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
- <translation>类型:用户词+名单(重复)</translation>
+ <translation>类型:用户 + 名单(重复)</translation>
</message>
<message>
<source>Type: Repeated(Rep)</source>
@@ -5796,7 +6071,7 @@ Available commands:
</message>
<message>
<source>Use extended ASCII</source>
- <translation>使用扩展ASCII</translation>
+ <translation>使用扩展 ASCII</translation>
</message>
<message>
<source>Exclude character set</source>
@@ -5820,7 +6095,7 @@ Available commands:
</message>
<message>
<source>Cannot find group %1.</source>
- <translation>找不到组%1。</translation>
+ <translation>找不到群组%1。</translation>
</message>
<message>
<source>Error reading merge file:
@@ -5830,23 +6105,23 @@ Available commands:
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation>无法将数据库保存到文件 : %1</translation>
+ <translation>无法将数据库保存到文件:%1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>无法将数据库保存到文件: %1</translation>
+ <translation>无法将数据库保存到文件:%1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation>成功回收了项目%1。</translation>
+ <translation>成功移动条目 %1 到回收站。</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation>已成功删除项目%1。</translation>
+ <translation>已成功删除条目 %1。</translation>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation>显示当前项目的TOTP。</translation>
+ <translation>显示当前条目的 TOTP。</translation>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
@@ -5857,28 +6132,12 @@ Available commands:
<translation>没有为剪贴板操作定义程序</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>无法启动程序 %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>文件为空</translation>
</message>
<message>
<source>%1: (row, col) %2,%3</source>
- <translation>%1: (row, col) %2,%3</translation>
- </message>
- <message>
- <source>AES: 256-bit</source>
- <translation>AES:256位</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish:256位</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20:256位</translation>
+ <translation>%1:(行,列)%2,%3</translation>
</message>
<message>
<source>Argon2 (KDBX 4 – recommended)</source>
@@ -5908,7 +6167,7 @@ Available commands:
</message>
<message>
<source>No groups found</source>
- <translation>未找到组</translation>
+ <translation>未找到群组</translation>
</message>
<message>
<source>Create a new database.</source>
@@ -5928,7 +6187,7 @@ Available commands:
</message>
<message>
<source>Failed to save the database: %1.</source>
- <translation>未能保存数据库: %1。</translation>
+ <translation>未能保存数据库:%1。</translation>
</message>
<message>
<source>Successfully created new database.</source>
@@ -5940,7 +6199,7 @@ Available commands:
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>加载密钥文件 %1 失败: %2</translation>
+ <translation>加载密钥文件 %1 失败:%2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
@@ -6116,11 +6375,11 @@ CPU 架构:%2
</message>
<message>
<source>Failed to open HIBP file %1: %2</source>
- <translation>无法打开HIBP文件%1: %2</translation>
+ <translation>无法打开 HIBP 文件 %1:%2</translation>
</message>
<message>
<source>Evaluating database entries against HIBP file, this will take a while...</source>
- <translation>正通过HIBP文件评估所有数据库条目,这需要一些时间……</translation>
+ <translation>正通过 HIBP 文件评估所有数据库条目,这需要一些时间...</translation>
</message>
<message>
<source>Close the currently opened database.</source>
@@ -6131,10 +6390,6 @@ CPU 架构:%2
<translation>显示此帮助。</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>用于加密数据库的Yubikey槽位。</translation>
- </message>
- <message>
<source>slot</source>
<translation>槽位</translation>
</message>
@@ -6151,10 +6406,6 @@ CPU 架构:%2
<translation>退出交互模式。</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>导出时使用的格式。可选XML或者CSV。默认XML。</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>将数据库内容按照指定的格式输出至标准输出。</translation>
</message>
@@ -6195,10 +6446,6 @@ CPU 架构:%2
<translation>新数据库的路径。</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>无法导入XML数据库%1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>成功导入数据库。</translation>
</message>
@@ -6291,16 +6538,12 @@ CPU 架构:%2
<translation>无效的YubiKey槽位%1</translation>
</message>
<message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>请触摸你 YubiKey 上的按键以解锁%1!</translation>
- </message>
- <message>
<source>Enter password to encrypt database (optional): </source>
<translation>输入用于加密数据库的密码(可选):</translation>
</message>
<message>
<source>HIBP file, line %1: parse error</source>
- <translation>HIBP文件 第%1行:解析错误</translation>
+ <translation>HIBP 文件,第 %1 行:解析错误</translation>
</message>
<message>
<source>Secret Service Integration</source>
@@ -6310,13 +6553,9 @@ CPU 架构:%2
<source>User name</source>
<translation>用户名</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] 挑战应答 - 槽位 %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
- <translation><numerusform>‘%1’的密码泄露了%2次!</numerusform></translation>
+ <translation><numerusform>&quot;%1&quot;的密码已泄露%2 时间!!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6326,6 +6565,193 @@ CPU 架构:%2
<source>Show the protected attributes in clear text.</source>
<translation>明文显示被保护的属性。</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>浏览器插件失败</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>无法为 %1 保存本机消息传递脚本文件。</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>将给定属性复制到剪贴板。如果未指定,则默认为&quot;密码&quot;。</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>将当前 TOTP 复制到剪贴板(相当于&quot;-totp&quot;)。</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>将条目的属性复制到剪贴板。</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>错误:请指定 --属性或 --totp ,不可同时使用。</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>错误:属性 %1 不明确,它匹配 %2。</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>未找到属性&quot;%1&quot;。</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>条目的&quot;%1&quot;属性复制到剪贴板!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>用于访问数据库的 Yubikey 插槽和可选串行(例如,1:7370001)。</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>插槽[:序号]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>数据库的 MS 中的目标解密时间。</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>时间</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>设置数据库的密钥文件。</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>为数据库设置密码。</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>无效解密时间 %1。</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>目标解密时间必须在 %1 和 %2 之间。</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>无法设置数据库密码。</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>为 %1ms 延迟对键派生函数进行基准测试。</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>为密钥派生函数设置 %1 次。</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>设置数据库密钥派生设置时出现错误。</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>导出时使用的格式。可用的选项是&quot;xml&quot;或&quot;csv&quot;。默认值为&quot;xml&quot;。</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>无法导入 XML 数据库:%1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>显示数据库的信息。</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID: </translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>名字:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>描述:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>密码:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>回收站已启用。</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>未启用回收站。</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>无效命令 %1。</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>无效的 YubiKey 序号 %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>请触摸您的 YubiKey 上的按钮继续...</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>是否要创建具有空密码的数据库?[Y/N]:</translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>重复密码:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>错误:密码不匹配。</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>所有剪辑程序都失败。已尝试 %1</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 轮)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 轮, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256 位</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256位</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20: 256 位 [20 256-?]</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>基准 %1 延迟</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 ms</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 s</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
@@ -6354,7 +6780,7 @@ CPU 架构:%2
<name>QtIOCompressor::open</name>
<message>
<source>The gzip format not supported in this version of zlib.</source>
- <translation>当前版本的压缩函数库 zlib 不支援gzip。</translation>
+ <translation>当前版本的 zlib 不支持 gzip 格式。</translation>
</message>
<message>
<source>Internal zlib error: </source>
@@ -6362,6 +6788,290 @@ CPU 架构:%2
</message>
</context>
<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>也显示已从报告中排除的条目</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>将鼠标悬停在原因上以显示其他详细信息。双击要编辑的条目。</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>非常差</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>非常差 — 必须更改密码</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>差</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>差 — 应该更改密码</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>较弱</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>较弱 — 可考虑更改密码</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(已排除)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>此条目已经从报告中排除</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>请稍候,正在计算运行状况数据...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>恭喜,一切健康!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>标题</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>路径</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>得分</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>原因</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>编辑条目...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>从报告中排除</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>注意:此报告需要将信息发送到&quot;已发送过&quot;在线服务(https://haveibeenpwned.com)。如果继续,数据库密码将被加密哈希,这些哈希的前五个字符将安全地发送到此服务。您的数据库仍然安全,无法从此信息中重新组织。但是,您发送的密码数和 IP 地址将公开到此服务。</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>执行在线分析</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>也显示已从报告中排除的条目</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>KeePassXC 的此版本没有网络功能。网络是需要检查你的密码对我有Pwned数据库。</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>恭喜,没有暴露的密码!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>标题</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>路径</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>密码已暴露...</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation>(已排除)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>此条目已经从报告中排除</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>一次</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>最多 10 次</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>最多 100 次</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>最多1000 次</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>最多10,000 次</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>最多100,000 次</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>最多一百万次</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>数百万次</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>编辑条目...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>从报告中排除</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>将鼠标悬浮于错误图标上可获得更多信息。</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>名称</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>值</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>请稍候,正在计算数据库统计信息...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>数据库名称</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>描述</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>位置</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>上一次保存</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>未保存的修改</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>是</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>否</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>数据库已经被修改,但未保存到硬盘上。</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>组数</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>项目数</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>失效的项目数</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>这个数据库包含过期的项目</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>唯一密码</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>重复密码</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>超过10%的项目使用这个密码,请尽量使用不重复的密码</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>密码的最大复用数</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>部分密码已经使用过3次以上,请尽量使用不重复的密码</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>短密码的数量</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>推荐密码最少有8位</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>弱密码的数量</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>推荐使用长的、随机化的,并被系统评为“好”或者“非常好”的密码。</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>从报告中被排除的条目</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>从报表中排除条目(例如,因为已知其密码较差)不一定是问题,但您应该留意它们。</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>平均密码长度</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 字符</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>密码平均小于10位,更长的密码安全性更强。</translation>
+ </message>
+</context>
+<context>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
@@ -6395,6 +7105,14 @@ CPU 架构:%2
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>代理不支持确认请求(检查选项)。</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>密钥标识所有权冲突。拒绝添加。</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>没有代理正在运行,无法列出标识。</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6502,26 +7220,10 @@ CPU 架构:%2
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;如果数据库已启用回收站,条目会被移动到回收站;否则条目会被直接删除。&lt;/p&gt;&lt;p&gt;如果条目被其他条目引用会发出提醒。&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>当客户端删除条目时不进行确认。</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>已公开的数据库群组:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>文件名</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>群组</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>管理</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>认证</translation>
</message>
@@ -6530,47 +7232,27 @@ CPU 架构:%2
<translation>现在已经连接到以下应用:</translation>
</message>
<message>
- <source>Application</source>
- <translation>应用</translation>
- </message>
- <message>
- <source>Disconnect</source>
- <translation>断开连接</translation>
- </message>
- <message>
- <source>Database settings</source>
- <translation>数据库设置</translation>
- </message>
- <message>
- <source>Edit database settings</source>
- <translation>修改数据库设置</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>不确认客户端何时删除条目</translation>
</message>
<message>
- <source>Unlock database</source>
- <translation>解锁数据库</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;错误:&lt;/b&gt;无法连接到 DBus。请检查您的 DBus 设置。</translation>
</message>
<message>
- <source>Unlock database to show more information</source>
- <translation>解锁数据库以显示更多信息</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;警告:&lt;/b&gt;</translation>
</message>
<message>
- <source>Lock database</source>
- <translation>锁定数据库</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>解锁以显示</translation>
- </message>
- <message>
- <source>None</source>
- <translation>无</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>保存当前更改以激活插件并启用此部分的编辑。</translation>
</message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
<message>
<source>Active</source>
- <translation>Active</translation>
+ <translation>启用</translation>
</message>
<message>
<source>Allow export</source>
@@ -6610,7 +7292,7 @@ CPU 架构:%2
</message>
<message>
<source>Export</source>
- <translation>输出</translation>
+ <translation>导出</translation>
</message>
<message>
<source>Imported certificates</source>
@@ -6667,7 +7349,7 @@ CPU 架构:%2
</message>
<message>
<source>KeeShare key file</source>
- <translation>KeeShare密钥文件</translation>
+ <translation>KeeShare 密钥文件</translation>
</message>
<message>
<source>All files</source>
@@ -6687,7 +7369,7 @@ CPU 架构:%2
</message>
<message>
<source>Signer:</source>
- <translation>签名:</translation>
+ <translation>签名:</translation>
</message>
<message>
<source>Allow KeeShare imports</source>
@@ -6750,23 +7432,23 @@ CPU 架构:%2
</message>
<message>
<source>Could not write export container (%1)</source>
- <translation>无法写入导出容器 (%1)</translation>
+ <translation>无法写入导出容器(%1)</translation>
</message>
<message>
<source>Could not embed signature: Could not open file to write (%1)</source>
- <translation>无法嵌入签名:无法打开要写入的文件 (%1)</translation>
+ <translation>无法嵌入签名:无法打开要写入的文件(%1)</translation>
</message>
<message>
<source>Could not embed signature: Could not write file (%1)</source>
- <translation>无法嵌入签名:无法写入文件 (%1)</translation>
+ <translation>无法嵌入签名:无法写入文件(%1)</translation>
</message>
<message>
<source>Could not embed database: Could not open file to write (%1)</source>
- <translation>无法嵌入数据库:无法打开要写入的文件 (%1)</translation>
+ <translation>无法嵌入数据库:无法打开要写入的文件(%1)</translation>
</message>
<message>
<source>Could not embed database: Could not write file (%1)</source>
- <translation>无法嵌入数据库:无法写入文件 (%1)</translation>
+ <translation>无法嵌入数据库:无法写入文件(%1)</translation>
</message>
<message>
<source>Overwriting unsigned share container is not supported - export prevented</source>
@@ -6789,7 +7471,7 @@ CPU 架构:%2
</message>
<message>
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation>我们无法验证共享容器的来源, 因为它未签名。是否确实要从%1导入?</translation>
+ <translation>我们无法验证共享容器的来源,因为它未签名。是否确实要从%1导入?</translation>
</message>
<message>
<source>Import from container with certificate</source>
@@ -6797,7 +7479,7 @@ CPU 架构:%2
</message>
<message>
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
- <translation>是否要信任 %1, 来自 %3 的 %2 的指纹?</translation>
+ <translation>是否要信任 %1,来自 %3 的 %2 的指纹? {1 ?} {2 ?}</translation>
</message>
<message>
<source>Not this time</source>
@@ -6836,10 +7518,6 @@ CPU 架构:%2
<translation>成功导入签名</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>意外错误</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>不支持未签名的共享容器-导入已防止</translation>
</message>
@@ -6860,11 +7538,11 @@ CPU 架构:%2
<name>ShareObserver</name>
<message>
<source>Import from %1 failed (%2)</source>
- <translation>从%1 导入失败 (%2)</translation>
+ <translation>从%1 导入失败(%2)</translation>
</message>
<message>
<source>Import from %1 successful (%2)</source>
- <translation>从%1导入成功 (%2)</translation>
+ <translation>从%1导入成功(%2)</translation>
</message>
<message>
<source>Imported from %1</source>
@@ -6872,11 +7550,11 @@ CPU 架构:%2
</message>
<message>
<source>Export to %1 failed (%2)</source>
- <translation>导出到 %1 失败 (%2)</translation>
+ <translation>导出到 %1 失败(%2)</translation>
</message>
<message>
<source>Export to %1 successful (%2)</source>
- <translation>导出到 %1 成功 (%2)</translation>
+ <translation>导出到 %1 成功(%2)</translation>
</message>
<message>
<source>Export to %1</source>
@@ -6907,7 +7585,7 @@ CPU 架构:%2
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>在 &lt;b&gt;%n&lt;/b&gt; 秒后过期</numerusform></translation>
+ <translation><numerusform>以&lt;b&gt;%n&lt;/b&gt;秒到期</numerusform></translation>
</message>
</context>
<context>
@@ -6919,7 +7597,7 @@ CPU 架构:%2
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation>注意:这些TOTP设置是自定义的,可能无法与其他验证器一起使用。</translation>
+ <translation>注意:这些 TOTP 设置是自定义的,可能无法与其他验证器一起使用。</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
@@ -6934,11 +7612,11 @@ CPU 架构:%2
<name>TotpSetupDialog</name>
<message>
<source>Setup TOTP</source>
- <translation>设置定时一次性密码</translation>
+ <translation>设置 TOTP</translation>
</message>
<message>
<source>Default RFC 6238 token settings</source>
- <translation>默认RFC 6238令牌设置</translation>
+ <translation>默认 RFC 6238 令牌设置</translation>
</message>
<message>
<source>Steam token settings</source>
@@ -6996,7 +7674,7 @@ CPU 架构:%2
<message>
<source>You have entered an invalid secret key. The key must be in Base32 format.
Example: JBSWY3DPEHPK3PXP</source>
- <translation>你输入了一个无效的密匙 Key ,Key必须是base32格式
+ <translation>您输入了一个无效的密匙 Key ,Key必须是base32格式
比如:JBSWY3DPEHPK3PXP</translation>
</message>
<message>
@@ -7005,7 +7683,14 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
- <translation>你确定要移除这个项目的 TOTP 设置吗?</translation>
+ <translation>您确定要移除这个项目的 TOTP 设置吗?</translation>
+ </message>
+</context>
+<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>无效 URL</translation>
</message>
</context>
<context>
@@ -7024,7 +7709,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Update Error!</source>
- <translation>更新错误!</translation>
+ <translation>更新错误!</translation>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
@@ -7040,7 +7725,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
- <translation>有一个新的KeePassXC版本!</translation>
+ <translation>有一个新的 KeePassXC 版本可用!</translation>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
@@ -7052,7 +7737,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation>您使用的是最新的!</translation>
+ <translation>您正在使用最新版!</translation>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
@@ -7063,7 +7748,7 @@ Example: JBSWY3DPEHPK3PXP</source>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>开始将你的密码安全地存储在 KeePassXC 数据库中</translation>
+ <translation>开始将您的密码安全地存储在 KeePassXC 数据库中</translation>
</message>
<message>
<source>Create new database</source>
@@ -7087,7 +7772,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Welcome to KeePassXC %1</source>
- <translation>欢迎来到KeePassXC %1</translation>
+ <translation>欢迎来到 KeePassXC %1</translation>
</message>
<message>
<source>Import from 1Password</source>
@@ -7099,6 +7784,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] 配置插槽 - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] 质询响应 - 插槽 %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>按下</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>被动</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 指定无效插槽 - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>YubiKey 接口尚未初始化。</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>当前正在使用硬件密钥。</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>找不到序列号为 %1 的硬件密钥。请插入后继续。</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>硬件密码等待使用者互动超时。</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>访问硬件密钥时出现 USB 错误:%1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>未能完成质询响应,特定错误为: %1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7110,15 +7842,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation>&lt;p&gt;如果您拥有&lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;,则可以使用它来提高安全性。&lt;/p&gt;&lt;p&gt;YubiKey要求将其中一个插槽编程为&lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1挑战-回应&lt;/a&gt;。&lt;/p&gt;</translation>
- </message>
- <message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>没有检测到YubiKey,请确保已插入。</translation>
- </message>
- <message>
- <source>No YubiKey inserted.</source>
- <translation>没有插入YubiKey。</translation>
+ <translation>&lt;p&gt;如果您拥有 &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;,则可以使用它来提高安全性。&lt;/p&gt;&lt;p&gt;YubiKey 要求将其中一个插槽编程为&lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 挑战-回应&lt;/a&gt;。&lt;/p&gt;</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -7128,5 +7852,21 @@ Example: JBSWY3DPEHPK3PXP</source>
<source>Hardware key slot selection</source>
<translation>选择实体 Key 的插槽</translation>
</message>
+ <message>
+ <source>Could not find any hardware keys!</source>
+ <translation>找不到任何硬件密钥!</translation>
+ </message>
+ <message>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>选定的硬件密钥槽不支持质询响应!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>正在检测硬件密钥...</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>未检测到硬件密钥</translation>
+ </message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/keepassx_zh_TW.ts b/share/translations/keepassx_zh_TW.ts
index b335c314e..3f3fc2c60 100644
--- a/share/translations/keepassx_zh_TW.ts
+++ b/share/translations/keepassx_zh_TW.ts
@@ -11,11 +11,11 @@
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>回報 Bug 請至:&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>回報錯誤請至:&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC 遵循 GNU 通用公共許可證 (GPL) 第二版或(依您的需求)以第三版發行。</translation>
+ <translation>KeePassXC 遵循 GNU 通用公共授權條款 (GPL) 第 2 版或(依您意願以)第 3 版發佈。</translation>
</message>
<message>
<source>Contributors</source>
@@ -23,7 +23,7 @@
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;在 GitHub 上看看有哪些貢獻者&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;上 GitHub 查看貢獻者名單&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
@@ -31,7 +31,7 @@
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>回報 Bug 時請包含以下資訊:</translation>
+ <translation>回報錯誤時需包含以下資訊:</translation>
</message>
<message>
<source>Copy to clipboard</source>
@@ -43,18 +43,38 @@
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>KeePassXC 團隊特別鳴謝 debfx 開發了原本的 KeePassX。</translation>
+ <translation>KeePassXC 團隊特別感謝 debfx 開創了原本的 KeePassX 專案。</translation>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
- <source>Enable SSH Agent (requires restart)</source>
- <translation>啟用 SSH 代理(需要重新啟動)</translation>
+ <source>Use OpenSSH for Windows instead of Pageant</source>
+ <translation>使用 OpenSSH for Windows 而不是 Pageant</translation>
</message>
<message>
- <source>Use OpenSSH for Windows instead of Pageant</source>
- <translation>使用 Windows 版的 OpenSSH 而不是 Pageant</translation>
+ <source>Enable SSH Agent integration</source>
+ <translation>啟用 SSH 代理整合</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK value</source>
+ <translation>SSH_AUTH_SOCK 值</translation>
+ </message>
+ <message>
+ <source>SSH_AUTH_SOCK override</source>
+ <translation>SSH_AUTH_SOCK 覆蓋值</translation>
+ </message>
+ <message>
+ <source>(empty)</source>
+ <translation>(空)</translation>
+ </message>
+ <message>
+ <source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
+ <translation>找不到可供 SSH 代理使用的 socket 接口。檢查 SSH_AUTH_SOCK 環境變數是否存在,或是設定一個覆蓋值。</translation>
+ </message>
+ <message>
+ <source>SSH Agent connection is working!</source>
+ <translation>SSH 代理連線正在運作!</translation>
</message>
</context>
<context>
@@ -65,11 +85,11 @@
</message>
<message>
<source>General</source>
- <translation>一般</translation>
+ <translation>通用</translation>
</message>
<message>
<source>Security</source>
- <translation>安全性</translation>
+ <translation>安全</translation>
</message>
<message>
<source>Access error for config file %1</source>
@@ -85,23 +105,35 @@
</message>
<message>
<source>Text beside icon</source>
- <translation>文字在圖示旁邊</translation>
+ <translation>文字於圖示旁邊</translation>
</message>
<message>
<source>Text under icon</source>
- <translation>文字在圖示底下</translation>
+ <translation>文字於圖示底下</translation>
</message>
<message>
<source>Follow style</source>
- <translation>遵照系統樣式</translation>
+ <translation>跟隨樣式</translation>
</message>
<message>
<source>Reset Settings?</source>
- <translation>重設設定?</translation>
+ <translation>重置設定?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
- <translation>確定將所有一般及安全性設定重設為預設值?</translation>
+ <translation>您確定要重置所有通用和安全設定回預設值?</translation>
+ </message>
+ <message>
+ <source>Monochrome (light)</source>
+ <translation>單色(亮)</translation>
+ </message>
+ <message>
+ <source>Monochrome (dark)</source>
+ <translation>單色(暗)</translation>
+ </message>
+ <message>
+ <source>Colorful</source>
+ <translation>彩色</translation>
</message>
</context>
<context>
@@ -127,12 +159,8 @@
<translation>檔案管理</translation>
</message>
<message>
- <source>Safely save database files (may be incompatible with Dropbox, etc)</source>
- <translation>安全儲存資料庫檔案(可能與 Dropbox 等服務不相容)</translation>
- </message>
- <message>
<source>Backup database file before saving</source>
- <translation>儲存前先備份資料庫檔案</translation>
+ <translation>儲存資料庫檔案前先備份</translation>
</message>
<message>
<source>Automatically save after every change</source>
@@ -143,12 +171,8 @@
<translation>離開時自動儲存</translation>
</message>
<message>
- <source>Don&apos;t mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>非資料變更(例如擴展群組)的情況下,不要將資料庫標記為已修改</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
- <translation>當資料庫被外部修改時,自動將其重新載入</translation>
+ <translation>有外部修改時自動重新載入資料庫</translation>
</message>
<message>
<source>Entry Management</source>
@@ -159,18 +183,6 @@
<translation>建立項目時使用群組圖示</translation>
</message>
<message>
- <source>Hide the entry preview panel</source>
- <translation>隱藏項目預覽面板</translation>
- </message>
- <message>
- <source>General</source>
- <translation>一般</translation>
- </message>
- <message>
- <source>Hide toolbar (icons)</source>
- <translation>隱藏工具列(圖示)</translation>
- </message>
- <message>
<source>Minimize instead of app exit</source>
<translation>以最小化取代關閉程式</translation>
</message>
@@ -179,12 +191,8 @@
<translation>顯示系統列圖示</translation>
</message>
<message>
- <source>Dark system tray icon</source>
- <translation>深色系統列圖示</translation>
- </message>
- <message>
<source>Hide window to system tray when minimized</source>
- <translation>將視窗最小化至系統列</translation>
+ <translation>視窗最小化時隱藏至系統列</translation>
</message>
<message>
<source>Auto-Type</source>
@@ -192,48 +200,36 @@
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
- <translation>全域自動輸入下,使用項目標題來匹配視窗</translation>
+ <translation>全域自動輸入下,使用項目的標題比對視窗</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
- <translation>全域自動輸入下,使用項目網址來匹配視窗</translation>
+ <translation>全域自動輸入下,使用項目的 URL 比對視窗</translation>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
<translation>執行自動輸入前始終詢問</translation>
</message>
<message>
- <source>Global Auto-Type shortcut</source>
- <translation>全域自動輸入快捷鍵</translation>
- </message>
- <message>
- <source>Auto-Type typing delay</source>
- <translation>自動輸入按鍵延遲</translation>
- </message>
- <message>
<source> ms</source>
<comment>Milliseconds</comment>
<translation> 毫秒</translation>
</message>
<message>
- <source>Auto-Type start delay</source>
- <translation>自動輸入啟動延遲</translation>
- </message>
- <message>
<source>Movable toolbar</source>
- <translation>可移動的工具列</translation>
+ <translation>工具列可移動</translation>
</message>
<message>
<source>Remember previously used databases</source>
- <translation>記住先前使用的資料庫</translation>
+ <translation>記住之前使用過的資料庫</translation>
</message>
<message>
<source>Load previously open databases on startup</source>
- <translation>啟動時載入先前開啟的資料庫</translation>
+ <translation>啟動時載入之前開啟的資料庫</translation>
</message>
<message>
<source>Remember database key files and security dongles</source>
- <translation>記住資料庫金鑰檔案與安全加密狗 (dongle)</translation>
+ <translation>記住資料庫的金鑰檔與 dongle 軟體狗</translation>
</message>
<message>
<source>Check for updates at application startup once per week</source>
@@ -244,16 +240,12 @@
<translation>檢查更新時包括 beta 版本</translation>
</message>
<message>
- <source>Button style:</source>
- <translation>按鈕樣式:</translation>
- </message>
- <message>
<source>Language:</source>
<translation>語言:</translation>
</message>
<message>
<source>(restart program to activate)</source>
- <translation>(重啟程式以生效)</translation>
+ <translation>(程式重啟後生效)</translation>
</message>
<message>
<source>Minimize window after unlocking database</source>
@@ -261,7 +253,7 @@
</message>
<message>
<source>Minimize when opening a URL</source>
- <translation>開啟網址時最小化</translation>
+ <translation>開啟 URL 時最小化</translation>
</message>
<message>
<source>Hide window when copying to clipboard</source>
@@ -277,11 +269,11 @@
</message>
<message>
<source>Favicon download timeout:</source>
- <translation>收藏夾圖示下載逾時:</translation>
+ <translation>網站圖標下載超時:</translation>
</message>
<message>
<source>Website icon download timeout in seconds</source>
- <translation>網站圖示下載幾秒後逾時</translation>
+ <translation>網站圖示的下載超時時間,以秒計算</translation>
</message>
<message>
<source> sec</source>
@@ -293,35 +285,71 @@
<translation>工具列按鈕樣式</translation>
</message>
<message>
- <source>Use monospaced font for Notes</source>
- <translation>項目附註使用等寛字體</translation>
- </message>
- <message>
<source>Language selection</source>
<translation>語言選擇</translation>
</message>
<message>
- <source>Reset Settings to Default</source>
- <translation>將設定重設為預設值</translation>
- </message>
- <message>
<source>Global auto-type shortcut</source>
- <translation>全域自動輸入快捷鍵</translation>
+ <translation>全域自動輸入的快捷鍵</translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
- <translation>自動輸入的字元輸入延遲毫秒</translation>
+ <translation>自動輸入的單一字元輸入延遲,以毫秒計算</translation>
</message>
<message>
<source>Auto-type start delay milliseconds</source>
- <translation>自動輸入的起始延遲毫秒</translation>
+ <translation>自動輸入的啟動延遲,以毫秒計算</translation>
+ </message>
+ <message>
+ <source>Automatically launch KeePassXC at system startup</source>
+ <translation>系統開機時自動啟動 KeePassXC</translation>
+ </message>
+ <message>
+ <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
+ <translation>對未牽涉資料的變更(例如擴展群組),同樣將資料庫標記為已更改</translation>
+ </message>
+ <message>
+ <source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
+ <translation>安全儲存資料庫檔案(若和 Dropbox 等服務不相容,可停用此項)</translation>
+ </message>
+ <message>
+ <source>User Interface</source>
+ <translation>使用者介面</translation>
+ </message>
+ <message>
+ <source>Toolbar button style:</source>
+ <translation>工具列按鈕樣式:</translation>
+ </message>
+ <message>
+ <source>Use monospaced font for notes</source>
+ <translation>備註使用等寛字體</translation>
+ </message>
+ <message>
+ <source>Tray icon type:</source>
+ <translation>系統列圖示類型:</translation>
+ </message>
+ <message>
+ <source>Reset settings to default…</source>
+ <translation>將設定重置為預設值…</translation>
+ </message>
+ <message>
+ <source>Auto-Type typing delay:</source>
+ <translation>自動輸入延遲:</translation>
+ </message>
+ <message>
+ <source>Global Auto-Type shortcut:</source>
+ <translation>全域自動輸入的快捷鍵:</translation>
+ </message>
+ <message>
+ <source>Auto-Type start delay:</source>
+ <translation>自動輸入的啟動延遲:</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
<message>
<source>Timeouts</source>
- <translation>逾時</translation>
+ <translation>超時</translation>
</message>
<message>
<source>Clear clipboard after</source>
@@ -334,7 +362,7 @@
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>閒置多久後鎖定資料庫</translation>
+ <translation>閒置多久後鎖上資料庫</translation>
</message>
<message>
<source> min</source>
@@ -350,31 +378,19 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>鎖定工作階段或蓋上螢幕時,將資料庫鎖定</translation>
+ <translation>鎖定工作階段或蓋上螢幕時,將資料庫鎖上</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>鎖定工作階段或蓋上螢幕時,遺忘 TouchID</translation>
+ <translation>鎖定工作階段或蓋上螢幕時,將 TouchID 遺忘</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>最小化視窗後鎖定資料庫</translation>
+ <translation>最小化視窗後鎖上資料庫</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>執行自動輸入後,將之前鎖定的資料庫重新鎖定</translation>
- </message>
- <message>
- <source>Don&apos;t require password repeat when it is visible</source>
- <translation>當密碼可見時,不要求重複輸入密碼</translation>
- </message>
- <message>
- <source>Don&apos;t hide passwords when editing them</source>
- <translation>編輯時不要隱藏密碼</translation>
- </message>
- <message>
- <source>Don&apos;t use placeholder for empty password fields</source>
- <translation>不要在空白的密碼欄位處填入替換字符</translation>
+ <translation>執行自動輸入後,將之前鎖定的資料庫重新鎖上</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@@ -382,7 +398,7 @@
</message>
<message>
<source>Hide entry notes by default</source>
- <translation>預設情況下隱藏項目備註</translation>
+ <translation>預設隱藏項目備註</translation>
</message>
<message>
<source>Privacy</source>
@@ -394,15 +410,15 @@
</message>
<message>
<source>Clipboard clear seconds</source>
- <translation>剪貼簿清除秒數</translation>
+ <translation>清除剪貼簿的預訂時間,以秒計算</translation>
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation>Touch ID 閒置重設</translation>
+ <translation>Touch ID 閒置時間重置</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
- <translation>資料庫鎖定逾時秒數</translation>
+ <translation>資料庫鎖定超時時間,以秒計算</translation>
</message>
<message>
<source> min</source>
@@ -413,12 +429,24 @@
<source>Clear search query after</source>
<translation>多久後清除搜尋字詞</translation>
</message>
+ <message>
+ <source>Require password repeat when it is visible</source>
+ <translation>密碼可見時仍要求重複輸入密碼</translation>
+ </message>
+ <message>
+ <source>Hide passwords when editing them</source>
+ <translation>編輯密碼時將其隱藏</translation>
+ </message>
+ <message>
+ <source>Use placeholder for empty password fields</source>
+ <translation>在空的密碼欄位填入佔位符</translation>
+ </message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>找不到符合視窗標題的項目:</translation>
+ <translation>找不到任何符合視窗標題的項目:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
@@ -434,15 +462,15 @@
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>此自動輸入命令包含很長的延遲。真的要繼續嗎?</translation>
+ <translation>此自動輸入命令包含很長的延遲。真的要繼續?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>此自動輸入命令包含非常緩慢的按鍵操作。真的要繼續嗎?</translation>
+ <translation>此自動輸入命令包含非常緩慢的按鍵操作。真的要繼續?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>此自動輸入命令包含頻繁重複的參數。真的要繼續嗎?</translation>
+ <translation>此自動輸入命令包含頻繁重複的參數。真的要繼續?</translation>
</message>
<message>
<source>Permission Required</source>
@@ -450,7 +478,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
- <translation>KeePassXC 需要「輔助使用」權限以執行項目層級的自動輸入。若您已授予權限,可能要重新啟動 KeePassXC。</translation>
+ <translation>KeePassXC 需要「輔助使用」權限才能執行項目層級的自動輸入。若您已授予權限,可能要重新啟動 KeePassXC。</translation>
</message>
</context>
<context>
@@ -521,47 +549,49 @@
</message>
<message>
<source>Search...</source>
- <translation>搜尋……</translation>
+ <translation>搜尋...</translation>
</message>
</context>
<context>
<name>BrowserAccessControlDialog</name>
<message>
- <source>KeePassXC-Browser Confirm Access</source>
- <translation>KeePassXC-Browser 存取確認</translation>
+ <source>KeePassXC - Browser Access Request</source>
+ <translation>KeePassXC 瀏覽器擴充的存取要求</translation>
+ </message>
+ <message>
+ <source>%1 is requesting access to the following entries:</source>
+ <translation>%1 要求存取以下項目:</translation>
</message>
<message>
- <source>Remember this decision</source>
- <translation>記住此決定</translation>
+ <source>Remember access to checked entries</source>
+ <translation>記住對所選項目的存取</translation>
</message>
<message>
- <source>Allow</source>
- <translation>允許</translation>
+ <source>Remember</source>
+ <translation>記住</translation>
</message>
<message>
- <source>Deny</source>
- <translation>拒絕</translation>
+ <source>Allow access to entries</source>
+ <translation>允許存取項目</translation>
</message>
<message>
- <source>%1 has requested access to passwords for the following item(s).
-Please select whether you want to allow access.</source>
- <translation>%1 要求存取下列項目的密碼。
-請選擇是否允許存取。</translation>
+ <source>Allow Selected</source>
+ <translation>允許所選</translation>
</message>
<message>
- <source>Allow access</source>
- <translation>允許存取</translation>
+ <source>Deny All</source>
+ <translation>全部拒絕</translation>
</message>
<message>
- <source>Deny access</source>
- <translation>拒絕存取</translation>
+ <source>Disable for this site</source>
+ <translation>對此網站停用</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-Browser 儲存項目</translation>
+ <translation>KeePassXC 瀏覽器擴充保存項目</translation>
</message>
<message>
<source>Ok</source>
@@ -574,315 +604,351 @@ Please select whether you want to allow access.</source>
<message>
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
- <translation>您開啟了多個資料庫。
-請選擇要儲存憑證的資料庫。</translation>
+ <translation>您有數個開啟的資料庫。
+請選擇要保存憑證的資料庫。</translation>
</message>
</context>
<context>
- <name>BrowserOptionDialog</name>
+ <name>BrowserService</name>
<message>
- <source>Dialog</source>
- <translation>對話方塊</translation>
+ <source>KeePassXC: New key association request</source>
+ <translation>KeePassXC: 新的金鑰關聯要求</translation>
</message>
<message>
- <source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>使用 KeePassXC-Browser(瀏覽器擴充功能)存取您的資料庫</translation>
+ <source>Save and allow access</source>
+ <translation>儲存並允許存取</translation>
</message>
<message>
- <source>General</source>
- <translation>一般</translation>
+ <source>KeePassXC: Overwrite existing key?</source>
+ <translation>KeePassXC: 覆蓋現有金鑰?</translation>
</message>
<message>
- <source>Enable integration for these browsers:</source>
- <translation>於下列瀏覽器啟用整合功能:</translation>
+ <source>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</source>
+ <translation>已存在名稱為「%1」的共用加密金鑰。
+是否要覆蓋它?</translation>
</message>
<message>
- <source>&amp;Google Chrome</source>
- <translation>&amp;Google Chrome</translation>
+ <source>KeePassXC: Update Entry</source>
+ <translation>KeePassXC: 更新項目</translation>
</message>
<message>
- <source>&amp;Firefox</source>
- <translation>&amp;Firefox</translation>
+ <source>Do you want to update the information in %1 - %2?</source>
+ <translation>是否要更新 %1 - %2 內的資訊?</translation>
</message>
<message>
- <source>&amp;Chromium</source>
- <translation>&amp;Chromium</translation>
+ <source>Abort</source>
+ <translation>中止</translation>
</message>
<message>
- <source>&amp;Vivaldi</source>
- <translation>&amp;Vivaldi</translation>
+ <source>Converting attributes to custom data…</source>
+ <translation>正在轉換屬性至自定義資料…</translation>
</message>
<message>
- <source>Show a &amp;notification when credentials are requested</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>要求憑證時顯示通知 (&amp;N)</translation>
+ <source>KeePassXC: Converted KeePassHTTP attributes</source>
+ <translation>KeePassXC: 轉換 KeePassHTTP 屬性</translation>
</message>
<message>
- <source>Re&amp;quest to unlock the database if it is locked</source>
- <translation>若資料庫已鎖定,則請求解鎖 (&amp;Q)</translation>
+ <source>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</source>
+ <translation>已成功轉換 %1 個項目的屬性。
+已移動 %2 組金鑰至自定義資料。</translation>
+ </message>
+ <message numerus="yes">
+ <source>Successfully moved %n keys to custom data.</source>
+ <translation><numerusform>已成功移動 %n 組金鑰至自定義資料。</numerusform></translation>
</message>
<message>
- <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>只回傳具相同協定 (http://, https://, ...) 的項目。</translation>
+ <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
+ <translation>KeePassXC: 找不到擁有 KeePassHTTP 屬性的項目!</translation>
</message>
<message>
- <source>&amp;Match URL scheme (e.g., https://...)</source>
- <translation>匹配網址協定 (例如 https://...) (&amp;M)</translation>
+ <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
+ <translation>目前作用的資料庫中沒有任何項目擁有 KeePassHTTP 屬性。</translation>
</message>
<message>
- <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>對於給定網址,只回傳最佳的相符項目,而不是與整個網域相符的所有項目。</translation>
+ <source>KeePassXC: Legacy browser integration settings detected</source>
+ <translation>KeePassXC: 偵測到過時的瀏覽器整合設定</translation>
</message>
<message>
- <source>&amp;Return only best-matching credentials</source>
- <translation>只回傳最符合的憑證 (&amp;R)</translation>
+ <source>KeePassXC: Create a new group</source>
+ <translation>KeePassXC: 建立新群組</translation>
</message>
<message>
- <source>Sort &amp;matching credentials by title</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>依照標題排序符合的憑證 (&amp;M)</translation>
+ <source>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
+</source>
+ <translation>已收到建立新群組「%1」的要求。
+是否要建立此群組?
+</translation>
</message>
<message>
- <source>Sort matching credentials by &amp;username</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>依照使用者名稱排序符合的憑證 (&amp;U)</translation>
+ <source>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</source>
+ <translation>需要將您的 KeePassXC 瀏覽器擴充設定移動至資料庫設定。
+這是為了保持您目前的瀏覽器連結。
+您是否要現在移轉既有設定?</translation>
</message>
<message>
- <source>Advanced</source>
- <translation>進階</translation>
+ <source>Don&apos;t show this warning again</source>
+ <translation>不再顯示此警告</translation>
</message>
<message>
- <source>Never &amp;ask before accessing credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>存取憑證前永不詢問 (&amp;A)</translation>
+ <source>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</source>
+ <translation>你已經接收到以下資料庫的關聯請求:
+%1
+
+為連線給予一個獨特的名稱或是 ID,例如:
+chrome-laptop。</translation>
</message>
+</context>
+<context>
+ <name>BrowserSettingsWidget</name>
<message>
- <source>Never ask before &amp;updating credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>更新憑證前永不詢問 (&amp;U)</translation>
+ <source>Dialog</source>
+ <translation>對話方塊</translation>
</message>
<message>
- <source>Searc&amp;h in all opened databases for matching credentials</source>
- <extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation>在所有開啟的資料庫內搜尋相符的憑證 (&amp;H)</translation>
+ <source>This is required for accessing your databases with KeePassXC-Browser</source>
+ <translation>使用 KeePassXC 瀏覽器擴充存取您的資料庫</translation>
</message>
<message>
- <source>Automatically creating or updating string fields is not supported.</source>
- <translation>不支援自動建立或更新文字欄位。</translation>
+ <source>Enable browser integration</source>
+ <translation>啟用瀏覽器整合</translation>
</message>
<message>
- <source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
- <translation>回傳「KPH: 」起首的進階文字欄位 (&amp;R)</translation>
+ <source>General</source>
+ <translation>一般</translation>
</message>
<message>
- <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>啟動時,自動將 KeePassXC 或 keepassxc-proxy 執行檔路徑更新為 Native Messaging 腳本。</translation>
+ <source>Browsers installed as snaps are currently not supported.</source>
+ <translation>目前並不支援以 Snap 套件安裝的瀏覽器。</translation>
</message>
<message>
- <source>Update &amp;native messaging manifest files at startup</source>
- <translation>啟動時,更新 &amp;Native Messaging 的 manifest 檔案</translation>
+ <source>Enable integration for these browsers:</source>
+ <translation>為以下瀏覽器啟用整合功能:</translation>
</message>
<message>
- <source>Support a proxy application between KeePassXC and browser extension.</source>
- <translation>支援 KeePassXC 和瀏覽器擴充功能之間的代理應用程式。</translation>
+ <source>Vivaldi</source>
+ <translation>Vivaldi</translation>
</message>
<message>
- <source>Use a &amp;proxy application between KeePassXC and browser extension</source>
- <translation>在 KeePassXC 和瀏覽器擴充功能之間使用代理應用程式 (&amp;P)</translation>
+ <source>&amp;Edge</source>
+ <translation>&amp;Edge</translation>
</message>
<message>
- <source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>如果自行安裝了代理,請設定自訂代理位置。</translation>
+ <source>Firefox</source>
+ <translation>Firefox</translation>
</message>
<message>
- <source>Use a &amp;custom proxy location</source>
- <comment>Meant is the proxy for KeePassXC-Browser</comment>
- <translation>使用自訂代理位置 (&amp;C)</translation>
+ <source>Tor Browser</source>
+ <translation>Tor Browser</translation>
</message>
<message>
- <source>Browse...</source>
- <extracomment>Button for opening file dialog</extracomment>
- <translation>瀏覽...</translation>
+ <source>Brave</source>
+ <translation>Brave</translation>
</message>
<message>
- <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;警告:&lt;/b&gt;下列選項可能極具風險!</translation>
+ <source>Google Chrome</source>
+ <translation>Google Chrome</translation>
</message>
<message>
- <source>Select custom proxy location</source>
- <translation>選擇自訂代理位置</translation>
+ <source>Chromium</source>
+ <translation>Chromium</translation>
</message>
<message>
- <source>&amp;Tor Browser</source>
- <translation>&amp;Tor 瀏覽器</translation>
+ <source>Show a notification when credentials are requested</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>出現憑證要求時顯示通知</translation>
</message>
<message>
- <source>Executable Files</source>
- <translation>可執行檔案</translation>
+ <source>Request to unlock the database if it is locked</source>
+ <translation>資料庫被鎖定時要求解鎖</translation>
</message>
<message>
- <source>All Files</source>
- <translation>所有檔案</translation>
+ <source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
+ <translation>只回傳具有相同協定 (http://, https://, ...) 的項目。</translation>
</message>
<message>
- <source>Do not ask permission for HTTP &amp;Basic Auth</source>
- <extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation>不確認 HTTP 基本認證的權限 (&amp;B)</translation>
+ <source>Match URL scheme (e.g., https://...)</source>
+ <translation>匹配 URL 協定 (e.g., https://...)</translation>
</message>
<message>
- <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
- <translation>由於 Snap 的沙盒機制,你需要執行一個腳本來啟用瀏覽器整合。&lt;br /&gt;你可以從 %1 取得這個腳本</translation>
+ <source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
+ <translation>對給定的 URL 回傳最佳匹配項目,而非所有和網域名匹配的項目。</translation>
</message>
<message>
- <source>Please see special instructions for browser extension use below</source>
- <translation>請參閱以下關於使用瀏覽器擴展的特別指示</translation>
+ <source>Return only best-matching credentials</source>
+ <translation>只回傳最佳符合的憑證</translation>
</message>
<message>
- <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2. %3</source>
- <translation>需要 KeePassXC-Browser 瀏覽器擴充功能才能使用瀏覽器整合。為 %1 及 %2 下載。%3</translation>
+ <source>Returns expired credentials. String [expired] is added to the title.</source>
+ <translation>可回傳過期的憑證。標題會加入 [已過期] 字串。</translation>
</message>
<message>
- <source>&amp;Brave</source>
- <translation>&amp;Brave</translation>
+ <source>Allow returning expired credentials</source>
+ <translation>允許回傳過期的憑證</translation>
</message>
<message>
- <source>Returns expired credentials. String [expired] is added to the title.</source>
- <translation>回傳過期的憑證。標題會加入 [過期] 字串。</translation>
+ <source>All databases connected to the extension will return matching credentials.</source>
+ <translation>所有與擴充連結的資料庫將回傳相符的憑證。</translation>
</message>
<message>
- <source>&amp;Allow returning expired credentials.</source>
- <translation>允許回傳過期的憑證 (&amp;A)。</translation>
+ <source>Search in all opened databases for matching credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>在所有開啟的資料庫內搜尋相符的憑證</translation>
</message>
<message>
- <source>Enable browser integration</source>
- <translation>啟用瀏覧器整合</translation>
+ <source>Sort matching credentials by title</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>依標題排序符合的憑證</translation>
</message>
<message>
- <source>Browsers installed as snaps are currently not supported.</source>
- <translation>目前不支援以快照版本安裝的瀏覧器。</translation>
+ <source>Sort matching credentials by username</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>依用戶名稱排序符合的憑證</translation>
</message>
<message>
- <source>All databases connected to the extension will return matching credentials.</source>
- <translation>所有與本擴充功能連接的資料庫將回傳相符的憑證。</translation>
+ <source>Advanced</source>
+ <translation>進階</translation>
+ </message>
+ <message>
+ <source>Never ask before accessing credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>存取憑證前永不詢問</translation>
+ </message>
+ <message>
+ <source>Never ask before updating credentials</source>
+ <extracomment>Credentials mean login data requested via browser extension</extracomment>
+ <translation>更新憑證前永不詢問</translation>
+ </message>
+ <message>
+ <source>Do not ask permission for HTTP Basic Auth</source>
+ <extracomment>An extra HTTP Basic Auth setting</extracomment>
+ <translation>不要詢問 HTTP 基本認證的權限</translation>
+ </message>
+ <message>
+ <source>Automatically creating or updating string fields is not supported.</source>
+ <translation>並不支援自動建立或更新文字欄位。</translation>
+ </message>
+ <message>
+ <source>Return advanced string fields which start with &quot;KPH: &quot;</source>
+ <translation>回傳以 &quot;KPH: &quot; 開頭的進階文字欄位</translation>
</message>
<message>
<source>Don&apos;t display the popup suggesting migration of legacy KeePassHTTP settings.</source>
- <translation>不要顯示舊版 KeePassHTTP 設定移轉的彈出視窗。</translation>
+ <translation>不要顯示建議移轉過時 KeePassHTTP 設定的彈出視窗。</translation>
</message>
<message>
- <source>&amp;Do not prompt for KeePassHTTP settings migration.</source>
- <translation>移轉 KeePassHTTP 設定時不要顯示提示 (&amp;D)。</translation>
+ <source>Do not prompt for KeePassHTTP settings migration.</source>
+ <translation>不要提示 KeePassHTTP 設定移轉。</translation>
+ </message>
+ <message>
+ <source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
+ <translation>啟動時,自動將 KeePassXC 或 keepassxc-proxy 二進位檔路徑更新至本地消息腳本。</translation>
+ </message>
+ <message>
+ <source>Update native messaging manifest files at startup</source>
+ <translation>啟動時,更新本地消息配置檔</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location if you installed a proxy manually.</source>
+ <translation>若您有自行安裝代理,則使用自定義的代理位置。</translation>
+ </message>
+ <message>
+ <source>Use a custom proxy location:</source>
+ <comment>Meant is the proxy for KeePassXC-Browser</comment>
+ <translation>使用自定義的代理位置:</translation>
</message>
<message>
<source>Custom proxy location field</source>
- <translation>自訂代理位置欄位</translation>
+ <translation>自定義代理位置欄位</translation>
</message>
<message>
<source>Browser for custom proxy file</source>
- <translation>瀏覧自訂代理檔案</translation>
+ <translation>瀏覽自定義的代理檔案</translation>
</message>
<message>
- <source>&lt;b&gt;Warning&lt;/b&gt;, the keepassxc-proxy application was not found!&lt;br /&gt;Please check the KeePassXC installation directory or confirm the custom path in advanced options.&lt;br /&gt;Browser integration WILL NOT WORK without the proxy application.&lt;br /&gt;Expected Path: %1</source>
- <translation>&lt;b&gt;警告&lt;/b&gt;,未找到 keepassxc-proxy 應用程式!&lt;br /&gt;請檢查 KeePassXC 安裝目錄或確認進階選項內的自訂路徑。&lt;br /&gt;若缺少 proxy 應用程式,瀏覧器整合將「無法運作」。&lt;br /&gt;預期路徑:%1</translation>
+ <source>Browse...</source>
+ <extracomment>Button for opening file dialog</extracomment>
+ <translation>瀏覽...</translation>
</message>
-</context>
-<context>
- <name>BrowserService</name>
<message>
- <source>KeePassXC: New key association request</source>
- <translation>KeePassXC:新的金鑰關聯請求</translation>
+ <source>Use a custom browser configuration location:</source>
+ <translation>使用自定義的瀏覽器設定檔位置:</translation>
</message>
<message>
- <source>Save and allow access</source>
- <translation>儲存並允許存取</translation>
+ <source>Browser type:</source>
+ <translation>瀏覽器類型:</translation>
</message>
<message>
- <source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC:覆蓋現有的金鑰?</translation>
+ <source>Toolbar button style</source>
+ <translation>工具列按鈕樣式</translation>
</message>
<message>
- <source>A shared encryption key with the name &quot;%1&quot; already exists.
-Do you want to overwrite it?</source>
- <translation>已存在名為「%1」的共用加密金鑰。
-是否要覆蓋?</translation>
+ <source>Config Location:</source>
+ <translation>設定檔位置:</translation>
</message>
<message>
- <source>KeePassXC: Update Entry</source>
- <translation>KeePassXC:更新項目</translation>
+ <source>Custom browser location field</source>
+ <translation>自定義瀏覽器位置欄位</translation>
</message>
<message>
- <source>Do you want to update the information in %1 - %2?</source>
- <translation>是否要更新 %1 到 %2 的資訊?</translation>
+ <source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
- <source>Abort</source>
- <translation>中止</translation>
+ <source>Browse for custom browser path</source>
+ <translation>瀏覽自定義的瀏覽器路徑</translation>
</message>
<message>
- <source>Converting attributes to custom data…</source>
- <translation>轉換屬性至自訂資料...</translation>
+ <source>Custom extension ID:</source>
+ <translation>自定義擴充 ID:</translation>
</message>
<message>
- <source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC:轉換 KeePassHTTP 屬性</translation>
+ <source>Custom extension ID</source>
+ <translation>自定義擴充 ID</translation>
</message>
<message>
- <source>Successfully converted attributes from %1 entry(s).
-Moved %2 keys to custom data.</source>
- <translation>成功轉換 %1 個項目的屬性。
-移動 %2 個金鑰至自訂資料。</translation>
- </message>
- <message numerus="yes">
- <source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>成功移動 %n 個金鑰至自訂資料。</numerusform></translation>
+ <source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
+ <translation>由於 Snap 的沙盒機制,您必須執行一個腳本來啟用瀏覽器整合。&lt;br /&gt;您可以從 %1 取得這個腳本</translation>
</message>
<message>
- <source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC:找不到帶有 KeePassHTTP 屬性的項目!</translation>
+ <source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
+ <translation>需要 KeePassXC 瀏覽器擴充才能使用整合功能。&lt;br /&gt;可供 %1 和 %2 和 %3 下載。%4</translation>
</message>
<message>
- <source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>目前的資料庫沒有帶 KeePassHTTP 屬性的項目。</translation>
+ <source>Please see special instructions for browser extension use below</source>
+ <translation>請參閱以下的具體指示,學習如何使用瀏覽器擴展</translation>
</message>
<message>
- <source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC:偵測到舊式瀏覽器整合設定</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
+ <translation>&lt;b&gt;錯誤:&lt;/b&gt;找不到自定義的代理位置!&lt;br/&gt;沒有代理程式,瀏覽器整合將 無 法 運 作 。</translation>
</message>
<message>
- <source>KeePassXC: Create a new group</source>
- <translation>KeePassXC:建立新群組</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
+ <translation>&lt;b&gt;警告:&lt;/b&gt;以下選項存在一定風險!</translation>
</message>
<message>
- <source>A request for creating a new group &quot;%1&quot; has been received.
-Do you want to create this group?
-</source>
- <translation>已收到建立新群組「%1」的請求。
-您要建立這個群組嗎?
-</translation>
+ <source>Executable Files</source>
+ <translation>可執行檔案</translation>
</message>
<message>
- <source>Your KeePassXC-Browser settings need to be moved into the database settings.
-This is necessary to maintain your current browser connections.
-Would you like to migrate your existing settings now?</source>
- <translation>您的 KeePassXC 瀏覽器設定需要被移動至資料庫設定。
-這對於保持您目前瀏覽器連線是必需的。
-您現在要匯入既有設定嗎?</translation>
+ <source>All Files</source>
+ <translation>所有檔案</translation>
</message>
<message>
- <source>Don&apos;t show this warning again</source>
- <translation>不再顯示此警告</translation>
+ <source>Select custom proxy location</source>
+ <translation>選擇自定義的代理位置</translation>
</message>
<message>
- <source>You have received an association request for the following database:
-%1
-
-Give the connection a unique name or ID, for example:
-chrome-laptop.</source>
- <translation>你已接收到以下資料庫的關聯請求:
-%1
-
-請給予連線一個唯一的名稱或 ID,例如:
-chrome-laptop.</translation>
+ <source>Select native messaging host folder location</source>
+ <translation>選擇本地消息主機的資料夾位置</translation>
</message>
</context>
<context>
@@ -901,7 +967,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Copy history</source>
- <translation>複製歷史</translation>
+ <translation>複製歷史記錄</translation>
</message>
</context>
<context>
@@ -916,49 +982,37 @@ chrome-laptop.</translation>
</message>
<message>
<source>size, rows, columns</source>
- <translation>大小、列、行</translation>
+ <translation>大小、列、欄位</translation>
</message>
<message>
<source>Encoding</source>
- <translation>編碼</translation>
+ <translation>編碼方法</translation>
</message>
<message>
<source>Codec</source>
- <translation>編解碼器</translation>
+ <translation>編/解碼</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>字段包裹符號</translation>
+ <translation>文字包裹符為</translation>
</message>
<message>
<source>Fields are separated by</source>
- <translation>欄位分隔符號</translation>
+ <translation>欄位分隔符為</translation>
</message>
<message>
<source>Comments start with</source>
- <translation>註解標示符號</translation>
- </message>
- <message>
- <source>First record has field names</source>
- <translation>首行為欄位名稱</translation>
+ <translation>註解起始符為</translation>
</message>
<message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>請以「\」作為跳脫符號</translation>
+ <translation>將 &apos;\&apos; 當作跳脫符號</translation>
</message>
<message>
<source>Preview</source>
<translation>預覽</translation>
</message>
<message>
- <source>Column layout</source>
- <translation>欄位布局</translation>
- </message>
- <message>
- <source>Not present in CSV file</source>
- <translation>不在 CSV 檔案內</translation>
- </message>
- <message>
<source>Imported from CSV file</source>
<translation>已從 CSV 檔匯入</translation>
</message>
@@ -971,16 +1025,8 @@ chrome-laptop.</translation>
<translation>錯誤</translation>
</message>
<message>
- <source>Empty fieldname %1</source>
- <translation>空白欄位 %1</translation>
- </message>
- <message>
- <source>column %1</source>
- <translation>行 %1</translation>
- </message>
- <message>
<source>Error(s) detected in CSV file!</source>
- <translation>在 CSV 檔案中偵測到錯誤!</translation>
+ <translation>在 CSV 檔中偵測到錯誤!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
@@ -989,12 +1035,12 @@ chrome-laptop.</translation>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>CSV 匯入:寫入器錯誤:
+ <translation>CSV 匯入:寫入器出錯:
%1</translation>
</message>
<message>
<source>Text qualification</source>
- <translation>字段包裹</translation>
+ <translation>文字包裹</translation>
</message>
<message>
<source>Field separation</source>
@@ -1002,23 +1048,75 @@ chrome-laptop.</translation>
</message>
<message>
<source>Number of header lines to discard</source>
- <translation>要忽略的開頭欄數</translation>
+ <translation>從開頭起算要拋棄的列數</translation>
</message>
<message>
<source>CSV import preview</source>
- <translation>CSV 匯入預覧</translation>
+ <translation>CSV 匯入預覽</translation>
+ </message>
+ <message>
+ <source>Column Association</source>
+ <translation>欄位關聯</translation>
+ </message>
+ <message>
+ <source>Last Modified</source>
+ <translation>最後編輯</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>密碼</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>建立於</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>備註</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>標題</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>群組</translation>
+ </message>
+ <message>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <source>Username</source>
+ <translation>使用者名稱</translation>
+ </message>
+ <message>
+ <source>Header lines skipped</source>
+ <translation>跳過開頭列數</translation>
+ </message>
+ <message>
+ <source>First line has field names</source>
+ <translation>首列為欄位名稱</translation>
+ </message>
+ <message>
+ <source>Not Present</source>
+ <translation>不顯示</translation>
+ </message>
+ <message>
+ <source>Column %1</source>
+ <translation>欄位 %1</translation>
</message>
</context>
<context>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n 行</numerusform></translation>
+ <translation><numerusform>%n 個欄位</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
<comment>file info: bytes, rows, columns</comment>
- <translation>%1, %2, %3</translation>
+ <translation>%1、%2、%3</translation>
</message>
<message numerus="yes">
<source>%n byte(s)</source>
@@ -1032,11 +1130,6 @@ chrome-laptop.</translation>
<context>
<name>Database</name>
<message>
- <source>Root</source>
- <comment>Root group name</comment>
- <translation>根</translation>
- </message>
- <message>
<source>File %1 does not exist.</source>
<translation>檔案 %1 不存在。</translation>
</message>
@@ -1046,15 +1139,15 @@ chrome-laptop.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>讀取資料庫時發生錯誤:%1</translation>
+ <translation>讀取資料庫時出錯:%1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>無法寫入檔案,因為該檔案以唯獨模式開啟。</translation>
+ <translation>檔案以唯獨模式開啟,無法寫入。</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>金鑰未轉換。這是一個 bug,請向開發者回報!</translation>
+ <translation>金鑰未被轉換。請向開發者回報此項錯誤!</translation>
</message>
<message>
<source>%1
@@ -1078,6 +1171,19 @@ Backup database located at %2</source>
<source>Recycle Bin</source>
<translation>回收桶</translation>
</message>
+ <message>
+ <source>Passwords</source>
+ <comment>Root group name</comment>
+ <translation>密碼</translation>
+ </message>
+ <message>
+ <source>Database save is already in progress.</source>
+ <translation>資料庫儲存已在進行當中。</translation>
+ </message>
+ <message>
+ <source>Could not save, database has not been initialized!</source>
+ <translation>無法儲存,資料庫尚未初始化!</translation>
+ </message>
</context>
<context>
<name>DatabaseOpenDialog</name>
@@ -1090,11 +1196,11 @@ Backup database located at %2</source>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>金鑰檔案:</translation>
+ <translation>金鑰檔:</translation>
</message>
<message>
<source>Refresh</source>
- <translation>重新整理</translation>
+ <translation>更新</translation>
</message>
<message>
<source>Legacy key file format</source>
@@ -1105,9 +1211,10 @@ Backup database located at %2</source>
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>你正在使用未來將不再支援的舊版金鑰檔案格式。
+ <translation>您使用的金鑰檔案格式為舊版本,將來有可能
+不再被支援。
-請考慮產生新的金鑰。</translation>
+請考慮產生一組新的金鑰檔案。</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -1130,10 +1237,6 @@ Please consider generating a new key file.</source>
<translation>開啟金鑰檔案失敗:%1</translation>
</message>
<message>
- <source>Select slot...</source>
- <translation>選擇插槽...</translation>
- </message>
- <message>
<source>Unlock KeePassXC Database</source>
<translation>解鎖 KeePassXC 資料庫</translation>
</message>
@@ -1146,20 +1249,12 @@ Please consider generating a new key file.</source>
<translation>密碼欄位</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>切換密碼可見性</translation>
- </message>
- <message>
- <source>Key file selection</source>
- <translation>金鑰檔案選擇</translation>
- </message>
- <message>
<source>Hardware key slot selection</source>
- <translation>硬體金鑰插槽選擇</translation>
+ <translation>硬體金鑰槽位選擇</translation>
</message>
<message>
<source>Browse for key file</source>
- <translation>瀏覧金鑰檔案</translation>
+ <translation>瀏覽金鑰檔案</translation>
</message>
<message>
<source>Browse...</source>
@@ -1167,7 +1262,7 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Refresh hardware tokens</source>
- <translation>更新實體插槽</translation>
+ <translation>更新硬體令牌</translation>
</message>
<message>
<source>Hardware Key:</source>
@@ -1191,7 +1286,7 @@ Please consider generating a new key file.</source>
</message>
<message>
<source>Unlock failed and no password given</source>
- <translation>解鎖失敗,密碼未提供</translation>
+ <translation>解鎖失敗且未提供密碼</translation>
</message>
<message>
<source>Unlocking the database failed and you did not enter a password.
@@ -1199,9 +1294,9 @@ Do you want to retry with an &quot;empty&quot; password instead?
To prevent this error from appearing, you must go to &quot;Database Settings / Security&quot; and reset your password.</source>
<translation>解鎖資料庫失敗,且您未輸入任何密碼。
-要改以「空白」密碼嘗試嗎?
+是否要改用「空白」密碼重新嘗試?
-若要避免此錯誤發生,您必須前往「資料庫設定 / 安全性」並重設您的密碼。</translation>
+為了避免出現此錯誤,您必須前往「資料庫設定 / 安全」並重新設定您的密碼。</translation>
</message>
<message>
<source>Retry with empty password</source>
@@ -1209,17 +1304,13 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
</message>
<message>
<source>Enter Additional Credentials (if any):</source>
- <translation>輸入額外憑證(如果有的話):</translation>
+ <translation>輸入額外的驗證資訊(如有需要):</translation>
</message>
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;您可以使用實體安全金鑰如 &lt;strong&gt;YubiKey&lt;/strong&gt; 或 &lt;strong&gt;OnlyKey&lt;/strong&gt;,並配合以 HMAC-SHA1 設置的插槽。&lt;/p&gt;
-&lt;p&gt;點此以獲得更多資訊...&lt;/p&gt;</translation>
- </message>
- <message>
- <source>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
- <translation>&lt;p&gt;除了主密碼,您還可以使用一份袐密檔案來加強資料庫的安全性。此檔案可在您資料庫的安全性設定下產生。&lt;/p&gt;&lt;p&gt;這&lt;strong&gt;並不是&lt;/strong&gt;您的 *.kdbx 資料庫檔案!&lt;br&gt;若您沒有金鑰檔案,請將欄位留空。&lt;/p&gt;&lt;p&gt;點此以獲得更多資訊...&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;您可以使用諸如 &lt;strong&gt;YubiKey&lt;/strong&gt; 或 &lt;strong&gt;OnlyKey&lt;/strong&gt; 等實體安全金鑰,只要它們擁有可設置 HMAC-SHA1 的槽位。&lt;/p&gt;
+&lt;p&gt;點擊獲得更多資訊...&lt;/p&gt;</translation>
</message>
<message>
<source>Key file help</source>
@@ -1230,19 +1321,39 @@ To prevent this error from appearing, you must go to &quot;Database Settings / S
<translation>?</translation>
</message>
<message>
- <source>Select key file...</source>
- <translation>選擇金鑰檔案...</translation>
- </message>
- <message>
<source>Cannot use database file as key file</source>
<translation>無法使用資料庫檔案作為金鑰檔案</translation>
</message>
<message>
<source>You cannot use your database file as a key file.
If you do not have a key file, please leave the field empty.</source>
- <translation>您不能使用自己的資料庫作為金鑰檔案。
+ <translation>您不能使用資料庫作為自己的金鑰檔案。
若您沒有金鑰檔案,請將欄位留空。</translation>
</message>
+ <message>
+ <source>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database&apos;s security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</source>
+ <translation>&lt;p&gt;除了密碼,您還可以使用一份袐密檔案來加強資料庫的安全性。使用資料庫的安全設定可以產生該檔案。&lt;/p&gt;&lt;p&gt;這個&lt;strong&gt;並不是&lt;/strong&gt;您的 *.kdbx 資料庫檔案!&lt;br&gt;若您沒有金鑰檔案,則留空欄位。&lt;/p&gt;&lt;p&gt;點擊獲得更多資訊...&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Key file to unlock the database</source>
+ <translation>解鎖資料庫的金鑰檔案</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey!</source>
+ <translation>請觸摸您 YubiKey 上的按鈕!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>正在偵測硬體金鑰…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>未偵測到硬體金鑰</translation>
+ </message>
+ <message>
+ <source>Select hardware key…</source>
+ <translation>選擇硬體金鑰…</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingWidgetMetaData</name>
@@ -1259,15 +1370,11 @@ If you do not have a key file, please leave the field empty.</source>
</message>
<message>
<source>General</source>
- <translation>一般</translation>
+ <translation>通用</translation>
</message>
<message>
<source>Security</source>
- <translation>安全性</translation>
- </message>
- <message>
- <source>Master Key</source>
- <translation>主密碼</translation>
+ <translation>安全</translation>
</message>
<message>
<source>Encryption Settings</source>
@@ -1277,28 +1384,20 @@ If you do not have a key file, please leave the field empty.</source>
<source>Browser Integration</source>
<translation>瀏覽器整合</translation>
</message>
+ <message>
+ <source>Database Credentials</source>
+ <translation>資料庫憑證</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetBrowser</name>
<message>
<source>KeePassXC-Browser settings</source>
- <translation>KeePassXC-Browser 瀏覽器擴充功能設定</translation>
- </message>
- <message>
- <source>&amp;Disconnect all browsers</source>
- <translation>與所有瀏覽器中斷連線 (&amp;D)</translation>
- </message>
- <message>
- <source>Forg&amp;et all site-specific settings on entries</source>
- <translation>遺忘目前項目中所有站台相關的設定 (&amp;E)</translation>
- </message>
- <message>
- <source>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</source>
- <translation>移動 KeePassHTTP 屬性至 KeePassXC 瀏覽器自定資料 (&amp;C)</translation>
+ <translation>KeePassXC 瀏覽器擴充設定</translation>
</message>
<message>
<source>Stored keys</source>
- <translation>貯存金鑰</translation>
+ <translation>已保存金鑰</translation>
</message>
<message>
<source>Remove</source>
@@ -1312,7 +1411,7 @@ If you do not have a key file, please leave the field empty.</source>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
<translation>真的要刪除選擇的金鑰?
-這可能會影響瀏覽器插件的連線。</translation>
+這可能導致與瀏覽器插件的連結受阻。</translation>
</message>
<message>
<source>Key</source>
@@ -1324,47 +1423,47 @@ This may prevent connection to the browser plugin.</source>
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>啟用瀏覽器整合以存取這些設定。</translation>
+ <translation>啟用瀏覽器整合來存取這些設定。</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>與所有瀏覽器中斷連線</translation>
+ <translation>中斷與所有瀏覽器的連結</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>真的要斷開所有瀏覽器的連線?
-這可能會影響瀏覽器插件的連線。</translation>
+ <translation>真的要中斷與所有瀏覽器的連結?
+這可能導致與瀏覽器插件的連結受阻。</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
- <translation>KeePassXC:找不到金鑰</translation>
+ <translation>KeePassXC: 找不到金鑰</translation>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>在 KeePassXC 設定中找不到共用加密金鑰。</translation>
+ <translation>在 KeePassXC 設定中找不到共享加密金鑰。</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC:從資料庫中移除金鑰</translation>
+ <translation>KeePassXC: 從資料庫移除金鑰</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>成功從 KeePassXC 設定中移除 %n 個加密金鑰。</numerusform></translation>
+ <translation><numerusform>成功從 KeePassXC 設定中移除 %n 組加密金鑰。</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>遺忘項目中與所有站台相關的設定</translation>
+ <translation>遺忘項目的網站個別設定</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>真的要遺忘每個項目的所有站台相關的設定嗎?
-存取項目的權限將被撤銷。</translation>
+ <translation>真的要遺忘每個項目的所有網站個別設定?
+存取項目的權限將會被撤銷。</translation>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>正在移除所有已儲存的權限……</translation>
+ <translation>正在移除保存的權限…</translation>
</message>
<message>
<source>Abort</source>
@@ -1372,7 +1471,7 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC:已移除權限</translation>
+ <translation>KeePassXC: 已移除權限</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
@@ -1380,30 +1479,91 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC:找不到帶有權限的項目!</translation>
+ <translation>KeePassXC: 找不到擁有權限的項目!</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
- <translation>目前的資料庫中沒有帶有權限的項目。</translation>
+ <translation>目前作用的資料庫中沒有任何項目擁有權限。</translation>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>移動 KeePassHTTP 屬性至自定資料</translation>
+ <translation>移動 KeePassHTTP 屬性至自定義資料</translation>
</message>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
- <translation>真的要將所有舊式瀏覽器整合資料遷移到最新標準?
-這對於保持與瀏覽器插件的相容性是必要的。</translation>
+ <translation>真的要將所有過時的瀏覽器整合資料遷移至最新標準?
+這是為了維持與瀏覽器插件的相容性。</translation>
</message>
<message>
<source>Stored browser keys</source>
- <translation>已儲存的瀏覧器金鑰</translation>
+ <translation>已保存的瀏覽器金鑰</translation>
</message>
<message>
<source>Remove selected key</source>
<translation>移除所選金鑰</translation>
</message>
+ <message>
+ <source>Move KeePassHTTP attributes to KeePassXC-Browser custom data</source>
+ <translation>移動 KeePassHTTP 屬性至 KeePassXC 瀏覽器擴充的自定義資料</translation>
+ </message>
+ <message>
+ <source>Refresh database root group ID</source>
+ <translation>更新資料庫的根群組 ID</translation>
+ </message>
+ <message>
+ <source>Created</source>
+ <translation>建立於</translation>
+ </message>
+ <message>
+ <source>Refresh database ID</source>
+ <translation>更新資料庫 ID</translation>
+ </message>
+ <message>
+ <source>Do you really want refresh the database ID?
+This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
+ <translation>真的要更新資料庫的 ID?
+只有當資料庫屬於另一份複本,且瀏覽器擴充無法連結時,才有必要進行。</translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseSettingsWidgetDatabaseKey</name>
+ <message>
+ <source>Add additional protection...</source>
+ <translation>加入額外保護...</translation>
+ </message>
+ <message>
+ <source>No password set</source>
+ <translation>未設定密碼</translation>
+ </message>
+ <message>
+ <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
+
+Are you sure you want to continue without a password?</source>
+ <translation>警告!您尚未設定一組密碼。強烈不建議使用不帶密碼的資料庫!
+
+您確定要在沒有密碼的情形下繼續?</translation>
+ </message>
+ <message>
+ <source>Continue without password</source>
+ <translation>不使用密碼並繼續</translation>
+ </message>
+ <message>
+ <source>No encryption key added</source>
+ <translation>未加入加密金鑰</translation>
+ </message>
+ <message>
+ <source>You must add at least one encryption key to secure your database!</source>
+ <translation>您必須加入至少一組加密金鑰來保護您的資料庫!</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>未知錯誤</translation>
+ </message>
+ <message>
+ <source>Failed to change database credentials</source>
+ <translation>更改資料庫憑證失敗</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetEncryption</name>
@@ -1413,27 +1573,23 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES:256 位元(預設)</translation>
+ <translation>AES: 256 Bit(預設)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
- <translation>Twofish:256 位元</translation>
+ <translation>Twofish: 256 Bit</translation>
</message>
<message>
<source>Key Derivation Function:</source>
- <translation>金鑰推導函式 (KDF):</translation>
+ <translation>金鑰推導函式:</translation>
</message>
<message>
<source>Transform rounds:</source>
<translation>轉換回合數:</translation>
</message>
<message>
- <source>Benchmark 1-second delay</source>
- <translation>測試一秒延遲</translation>
- </message>
- <message>
<source>Memory Usage:</source>
- <translation>記憶體使用量:</translation>
+ <translation>記憶體用量:</translation>
</message>
<message>
<source>Parallelism:</source>
@@ -1441,7 +1597,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
</message>
<message>
<source>Decryption Time:</source>
- <translation>解密所需時間:</translation>
+ <translation>解密時間:</translation>
</message>
<message>
<source>?? s</source>
@@ -1452,14 +1608,6 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<translation>更改</translation>
</message>
<message>
- <source>100 ms</source>
- <translation>100 毫秒</translation>
- </message>
- <message>
- <source>5 s</source>
- <translation>5 秒</translation>
- </message>
- <message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
<translation>較高的值提供較多保護,但需要更長的時間開啟資料庫。</translation>
</message>
@@ -1482,7 +1630,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<message>
<source>unchanged</source>
<comment>Database decryption time is unchanged</comment>
- <translation>未更改</translation>
+ <translation>不變</translation>
</message>
<message>
<source>Number of rounds too high</source>
@@ -1493,9 +1641,9 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<source>You are using a very high number of key transform rounds with Argon2.
If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>你正在對 Argon2 使用相當高的金鑰轉換回合數。
+ <translation>您為 Argon2 使用了非常高的金鑰轉換回合數。
-如果仍執意使用此數量,你的資料庫可能需要花費數小時、數天、或是更久的時間才能打開!</translation>
+如果執意使用此數量,您的資料庫可能要花費數小時、數天(甚至更久時間)才能打開!</translation>
</message>
<message>
<source>Understood, keep number</source>
@@ -1514,9 +1662,9 @@ If you keep this number, your database may take hours or days (or even longer) t
<source>You are using a very low number of key transform rounds with AES-KDF.
If you keep this number, your database may be too easy to crack!</source>
- <translation>你正對 AES-KDF 使用過低的金鑰轉換回合數。
+ <translation>您為 AES-KDF 使用了非常低的金鑰轉換回合數。
-如果仍執意使用此數量,你的資料庫可能會變得相當簡單即能破解!</translation>
+如果執意使用此數量,要破解您的資料庫會變得非常容易!</translation>
</message>
<message>
<source>KDF unchanged</source>
@@ -1524,7 +1672,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>無法以新的 KDF 參數轉換金鑰;KDF 保持不變。</translation>
+ <translation>無法用新的 KDF 參數轉換金鑰;KDF 保持不變。</translation>
</message>
<message numerus="yes">
<source> MiB</source>
@@ -1534,17 +1682,7 @@ If you keep this number, your database may be too easy to crack!</source>
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform> 線程數</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 ms</source>
- <comment>milliseconds</comment>
- <translation><numerusform>%1 毫秒</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%1 s</source>
- <comment>seconds</comment>
- <translation><numerusform>%1 秒</numerusform></translation>
+ <translation><numerusform> 執行緒</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1552,7 +1690,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Decryption time in seconds</source>
- <translation>解密所需時間(秒)</translation>
+ <translation>解密時間,以秒計算</translation>
</message>
<message>
<source>Database format</source>
@@ -1572,37 +1710,45 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Memory usage</source>
- <translation>記憶體使用量</translation>
+ <translation>記憶體用量</translation>
</message>
<message>
<source>Parallelism</source>
<translation>平行運算</translation>
</message>
+ <message>
+ <source>?? ms</source>
+ <translation>?? 毫秒</translation>
+ </message>
+ <message>
+ <source>? s</source>
+ <translation>? 秒</translation>
+ </message>
</context>
<context>
<name>DatabaseSettingsWidgetFdoSecrets</name>
<message>
<source>Exposed Entries</source>
- <translation>已開放的項目</translation>
+ <translation>已開放項目</translation>
</message>
<message>
- <source>Don&apos;t e&amp;xpose this database</source>
- <translation>不要開放此資料庫 (&amp;X)</translation>
+ <source>Don&apos;t expose this database</source>
+ <translation>不要開放此資料庫</translation>
</message>
<message>
- <source>Expose entries &amp;under this group:</source>
- <translation>開放此群組的項目 (&amp;U):</translation>
+ <source>Expose entries under this group:</source>
+ <translation>開放此群組下的項目:</translation>
</message>
<message>
- <source>Enable fd.o Secret Service to access these settings.</source>
- <translation>啟用 fd.o 秘密服務以存取這些設定。</translation>
+ <source>Enable Secret Service to access these settings.</source>
+ <translation>啟用保密服務來存取這些設定。</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidgetGeneral</name>
<message>
<source>Database Meta Data</source>
- <translation>資料庫數據</translation>
+ <translation>資料庫的中繼資料</translation>
</message>
<message>
<source>Database name:</source>
@@ -1626,7 +1772,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Max. history size:</source>
- <translation>最大歷史大小:</translation>
+ <translation>最大歷史記錄大小:</translation>
</message>
<message>
<source> MiB</source>
@@ -1638,11 +1784,7 @@ If you keep this number, your database may be too easy to crack!</source>
</message>
<message>
<source>Additional Database Settings</source>
- <translation>額外的資料庫設定</translation>
- </message>
- <message>
- <source>Enable &amp;compression (recommended)</source>
- <translation>啟用壓縮(推薦)(&amp;C)</translation>
+ <translation>其他資料庫設定</translation>
</message>
<message>
<source>Database name field</source>
@@ -1671,12 +1813,16 @@ If you keep this number, your database may be too easy to crack!</source>
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
- <translation>您要刪除目前的回收桶以及裡面所有內容嗎?
-此項操作無法恢復。</translation>
+ <translation>是否要刪除目前的回收桶以及裡面所有內容?
+此操作無法復原。</translation>
</message>
<message>
<source> (old)</source>
- <translation> (舊)</translation>
+ <translation> (舊)</translation>
+ </message>
+ <message>
+ <source>Enable compression (recommended)</source>
+ <translation>啟用壓縮(推薦)</translation>
</message>
</context>
<context>
@@ -1687,11 +1833,11 @@ This action is not reversible.</source>
</message>
<message>
<source>Breadcrumb</source>
- <translation>痕跡</translation>
+ <translation>導覽路徑</translation>
</message>
<message>
<source>Type</source>
- <translation>種類</translation>
+ <translation>類型</translation>
</message>
<message>
<source>Path</source>
@@ -1699,11 +1845,11 @@ This action is not reversible.</source>
</message>
<message>
<source>Last Signer</source>
- <translation>最後的簽署者</translation>
+ <translation>最後一次簽署</translation>
</message>
<message>
<source>Certificates</source>
- <translation>憑證</translation>
+ <translation>證書</translation>
</message>
<message>
<source> &gt; </source>
@@ -1712,45 +1858,6 @@ This action is not reversible.</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetMasterKey</name>
- <message>
- <source>Add additional protection...</source>
- <translation>加入額外保護...</translation>
- </message>
- <message>
- <source>No encryption key added</source>
- <translation>未加入加密金鑰</translation>
- </message>
- <message>
- <source>You must add at least one encryption key to secure your database!</source>
- <translation>您必須添加至少一個加密金鑰以保護您的資料庫!</translation>
- </message>
- <message>
- <source>No password set</source>
- <translation>未設定密碼</translation>
- </message>
- <message>
- <source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-
-Are you sure you want to continue without a password?</source>
- <translation>警告!您尚未設定密碼。誠心建議不要使用不含密碼的資料庫檔案!
-
-您確定還是要在無密碼的情形下繼續?</translation>
- </message>
- <message>
- <source>Unknown error</source>
- <translation>未知的錯誤</translation>
- </message>
- <message>
- <source>Failed to change master key</source>
- <translation>更改主密碼失敗</translation>
- </message>
- <message>
- <source>Continue without password</source>
- <translation>不使用密碼並繼續</translation>
- </message>
-</context>
-<context>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
@@ -1770,125 +1877,6 @@ Are you sure you want to continue without a password?</source>
</message>
</context>
<context>
- <name>DatabaseSettingsWidgetStatistics</name>
- <message>
- <source>Statistics</source>
- <translation>統計</translation>
- </message>
- <message>
- <source>Hover over lines with error icons for further information.</source>
- <translation>將游標懸浮於錯誤圖示出現的欄位,可獲得更多資訊。</translation>
- </message>
- <message>
- <source>Name</source>
- <translation>名稱</translation>
- </message>
- <message>
- <source>Value</source>
- <translation>值</translation>
- </message>
- <message>
- <source>Database name</source>
- <translation>資料庫名稱</translation>
- </message>
- <message>
- <source>Description</source>
- <translation>描述</translation>
- </message>
- <message>
- <source>Location</source>
- <translation>位置</translation>
- </message>
- <message>
- <source>Last saved</source>
- <translation>最近儲存於</translation>
- </message>
- <message>
- <source>Unsaved changes</source>
- <translation>未儲存變更</translation>
- </message>
- <message>
- <source>yes</source>
- <translation>是</translation>
- </message>
- <message>
- <source>no</source>
- <translation>否</translation>
- </message>
- <message>
- <source>The database was modified, but the changes have not yet been saved to disk.</source>
- <translation>資料庫已被更改,但變更尚未被儲存至磁碟。</translation>
- </message>
- <message>
- <source>Number of groups</source>
- <translation>群組數</translation>
- </message>
- <message>
- <source>Number of entries</source>
- <translation>項目數</translation>
- </message>
- <message>
- <source>Number of expired entries</source>
- <translation>已過期項目數</translation>
- </message>
- <message>
- <source>The database contains entries that have expired.</source>
- <translation>資料庫包含已過期的項目。</translation>
- </message>
- <message>
- <source>Unique passwords</source>
- <translation>獨特的密碼</translation>
- </message>
- <message>
- <source>Non-unique passwords</source>
- <translation>非獨特的密碼</translation>
- </message>
- <message>
- <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
- <translation>超過 10% 的密碼被重複使用。請盡可能使用獨一無二的密碼。</translation>
- </message>
- <message>
- <source>Maximum password reuse</source>
- <translation>最大密碼重複使用次數</translation>
- </message>
- <message>
- <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
- <translation>某些密碼被使用超過三次以上。請盡可能使用獨一無二的密碼。</translation>
- </message>
- <message>
- <source>Number of short passwords</source>
- <translation>過短密碼數</translation>
- </message>
- <message>
- <source>Recommended minimum password length is at least 8 characters.</source>
- <translation>建議最短密碼長度為至少 8 個字元。</translation>
- </message>
- <message>
- <source>Number of weak passwords</source>
- <translation>弱密碼數</translation>
- </message>
- <message>
- <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation>建議使用足夠長度、亂度,且評價為「較好」或「極好」的密碼。</translation>
- </message>
- <message>
- <source>Average password length</source>
- <translation>平均密碼長度</translation>
- </message>
- <message>
- <source>%1 characters</source>
- <translation>%1 字元</translation>
- </message>
- <message>
- <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
- <translation>平均密碼長度小於 10 個字元。密碼越長,能提供的保護越多。</translation>
- </message>
- <message>
- <source>Please wait, database statistics are being calculated...</source>
- <translation>請稍等,正在計算並統計資料庫數據...</translation>
- </message>
-</context>
-<context>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
@@ -1904,7 +1892,7 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>CSV file</source>
- <translation>CSV 檔案</translation>
+ <translation>CSV 檔</translation>
</message>
<message>
<source>Merge database</source>
@@ -1920,11 +1908,11 @@ Are you sure you want to continue without a password?</source>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>將資料庫輸出成 CSV 檔案</translation>
+ <translation>匯出資料庫至 CSV 檔</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>寫入 CSV 檔案失敗。</translation>
+ <translation>寫入 CSV 檔失敗。</translation>
</message>
<message>
<source>Database creation error</source>
@@ -1934,15 +1922,15 @@ Are you sure you want to continue without a password?</source>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
<translation>建立的資料庫沒有金鑰或 KDF,拒絕儲存。
-這顯然是一個臭蟲 (bug),請向開發人員回報。</translation>
+請向開發者回報這個明顯的錯誤。</translation>
</message>
<message>
<source>Select CSV file</source>
- <translation>選擇 CSV 檔案</translation>
+ <translation>選擇 CSV 檔</translation>
</message>
<message>
<source>New Database</source>
- <translation>新建資料庫</translation>
+ <translation>新資料庫</translation>
</message>
<message>
<source>%1 [New Database]</source>
@@ -1965,15 +1953,15 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Export database to HTML file</source>
- <translation>匯出資料庫至 HTML 檔案</translation>
+ <translation>匯出資料庫至 HTML 檔</translation>
</message>
<message>
<source>HTML file</source>
- <translation>HTML 檔案</translation>
+ <translation>HTML 檔</translation>
</message>
<message>
<source>Writing the HTML file failed.</source>
- <translation>寫入 HTML 檔案失敗。</translation>
+ <translation>寫入 HTML 檔失敗。</translation>
</message>
<message>
<source>Export Confirmation</source>
@@ -1981,22 +1969,26 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
- <translation>您正要匯出資料庫至未加密的檔案。您的密碼及敏感資料將不受任何保護!真的要繼續嗎?</translation>
+ <translation>您正要匯出資料庫至未加密的檔案。您的密碼及敏感資料將不受任何保護!您確定要繼續進行?</translation>
+ </message>
+ <message>
+ <source>Open OPVault</source>
+ <translation>開啟 OPVault</translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>搜尋中……</translation>
+ <translation>搜尋中...</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>真的要永久刪除「%1」?</translation>
+ <translation>真的要永遠刪除項目「%1」?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>真的要將「%1」移到回收桶?</translation>
+ <translation>真的要將項目「%1」移到回收桶?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
@@ -2008,7 +2000,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>真的要執行下列命令?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>真的要執行以下命令?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
@@ -2016,7 +2008,7 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>真的要永遠刪除「%1」群組?</translation>
+ <translation>真的要永遠刪除群組「%1」?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2040,17 +2032,17 @@ This is definitely a bug, please report it to the developers.</source>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation>資料庫檔案已變更。讀取變更?</translation>
+ <translation>資料庫檔案已被修改。是否要載入變更?</translation>
</message>
<message>
<source>Merge Request</source>
- <translation>合併請求</translation>
+ <translation>合併要求</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>資料庫檔案已變更,且有尚未儲存的變更。
-合併變更?</translation>
+ <translation>資料庫檔案已被修改,且您有尚未儲存的變更。
+是否合併您的變更?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@@ -2058,11 +2050,11 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>確定要永久刪除回收桶內的項目?</translation>
+ <translation>您確定要永久刪除回收桶內的所有項目?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>真的要永遠移除 %n 個項目?</numerusform></translation>
+ <translation><numerusform>真的要永遠刪除 %n 個項目?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@@ -2070,7 +2062,7 @@ Do you want to merge your changes?</source>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>移動項目到資源回收桶?</numerusform></translation>
+ <translation><numerusform>移動項目到回收桶?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@@ -2078,39 +2070,39 @@ Do you want to merge your changes?</source>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>您正在編輯一個項目。放棄更改並鎖定?</translation>
+ <translation>您正在編輯一個項目。放棄變更並直接鎖定?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>「%1」已修改。
+ <translation>「%1」已被修改。
儲存變更?</translation>
</message>
<message>
<source>Database was modified.
Save changes?</source>
- <translation>資料庫已修改。
+ <translation>資料庫已被修改。
儲存變更?</translation>
</message>
<message>
<source>Save changes?</source>
- <translation>儲存修改?</translation>
+ <translation>儲存變更?</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>嘗試自動重啟時無法開啟新的資料庫檔案。
+ <translation>嘗試自動重新載入,無法開啓新的資料庫檔案。
錯誤:%1</translation>
</message>
<message>
<source>Disable safe saves?</source>
- <translation>關閉安全存檔?</translation>
+ <translation>停用安全存檔?</translation>
</message>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>KeePassXC 儲存資料庫已失敗數次。有可能是檔案同步服務將儲存檔案鎖住了。
-將安全儲存停用並再試一次?</translation>
+ <translation>KeePassXC 儲存資料庫已失敗數次。可能是檔案同步服務把儲存檔案鎖住了。
+停用安全儲存後再試一次?</translation>
</message>
<message>
<source>Passwords</source>
@@ -2130,7 +2122,7 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
- <translation><numerusform>項目「%1」有 %2 個引用。是否使用值覆寫引用、跳過此項目或刪除?</numerusform></translation>
+ <translation><numerusform>項目「%1」有 %2 個引用。是否要用值覆蓋引用、跳過此項目或直接刪除?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@@ -2138,11 +2130,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Move group to recycle bin?</source>
- <translation>移動群組至回收桶?</translation>
+ <translation>移動群組到回收桶?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>真的要移動群組「%1」至回收桶?</translation>
+ <translation>真的要將群組「%1」移到回收桶?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
@@ -2164,6 +2156,14 @@ Disable safe saves and try again?</source>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
<translation>此資料庫以唯讀模式開啟。自動儲存已停用。</translation>
</message>
+ <message>
+ <source>Save database backup</source>
+ <translation>儲存資料庫備份</translation>
+ </message>
+ <message>
+ <source>Could not find database file: %1</source>
+ <translation>未找到資料庫檔案:%1</translation>
+ </message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -2189,7 +2189,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>History</source>
- <translation>歷史</translation>
+ <translation>歷史記錄</translation>
</message>
<message>
<source>SSH Agent</source>
@@ -2208,16 +2208,8 @@ Disable safe saves and try again?</source>
<translation>選擇私密金鑰</translation>
</message>
<message>
- <source>File too large to be a private key</source>
- <translation>檔案太大,無法作為私密金鑰</translation>
- </message>
- <message>
- <source>Failed to open private key</source>
- <translation>無法打開私密金鑰</translation>
- </message>
- <message>
<source>Entry history</source>
- <translation>項目歷史</translation>
+ <translation>項目歷史記錄</translation>
</message>
<message>
<source>Add entry</source>
@@ -2228,16 +2220,12 @@ Disable safe saves and try again?</source>
<translation>編輯項目</translation>
</message>
<message>
- <source>Different passwords supplied.</source>
- <translation>填寫的密碼不一致。</translation>
- </message>
- <message>
<source>New attribute</source>
- <translation>新的屬性</translation>
+ <translation>新屬性</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>確定要移除此屬性?</translation>
+ <translation>您確定要移除此屬性?</translation>
</message>
<message>
<source>Tomorrow</source>
@@ -2245,35 +2233,19 @@ Disable safe saves and try again?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>%n 週</numerusform></translation>
+ <translation><numerusform>%n 個禮拜</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n 月</numerusform></translation>
- </message>
- <message>
- <source>Apply generated password?</source>
- <translation>使用產生的密碼?</translation>
- </message>
- <message>
- <source>Do you want to apply the generated password to this entry?</source>
- <translation>是否要把產生的密碼應用到此項目?</translation>
+ <translation><numerusform>%n 個月</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
<translation>項目已成功更新。</translation>
</message>
<message>
- <source>Entry has unsaved changes</source>
- <translation>項目有未保存的變更</translation>
- </message>
- <message>
<source>New attribute %1</source>
- <translation>新的屬性 %1</translation>
- </message>
- <message>
- <source>[PROTECTED] Press reveal to view or edit</source>
- <translation>[受保護的內容] 請按「揭示」以檢視或編輯</translation>
+ <translation>新屬性 %1</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
@@ -2289,18 +2261,38 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>&lt;empty URL&gt;</source>
- <translation>&lt;空白網址&gt;</translation>
+ <translation>&lt;空白 URL&gt;</translation>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
- <translation>真的要移除此網址?</translation>
+ <translation>您確定要移除此 URL?</translation>
+ </message>
+ <message>
+ <source>Reveal</source>
+ <translation>揭示</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>隱藏</translation>
+ </message>
+ <message>
+ <source>Unsaved Changes</source>
+ <translation>未儲存的變更</translation>
+ </message>
+ <message>
+ <source>Would you like to save changes to this entry?</source>
+ <translation>您是否要儲存此項目的變更?</translation>
+ </message>
+ <message>
+ <source>[PROTECTED] Press Reveal to view or edit</source>
+ <translation>[受保護內容] 按「揭示」以檢視或編輯</translation>
</message>
</context>
<context>
<name>EditEntryWidgetAdvanced</name>
<message>
<source>Additional attributes</source>
- <translation>額外的屬性</translation>
+ <translation>其他屬性</translation>
</message>
<message>
<source>Add</source>
@@ -2370,6 +2362,14 @@ Disable safe saves and try again?</source>
<source>Background color selection</source>
<translation>背景顏色選擇</translation>
</message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;t match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;若勾選此項,項目將不會出現在健康檢查或是 HIBP 等報告,即使項目未通過其品質要求(例如,密碼熵值不足或重複使用)。如果密碼本身有所限制(像是必須使用四位數 PIN),您可以設定將其勾選以保持報告清潔。&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Exclude from database reports</source>
+ <translation>從資料庫報告排除</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
@@ -2378,14 +2378,6 @@ Disable safe saves and try again?</source>
<translation>啟用此項目的自動輸入</translation>
</message>
<message>
- <source>Inherit default Auto-Type sequence from the &amp;group</source>
- <translation>從群組中繼承預設的自動輸入序列 (&amp;G)</translation>
- </message>
- <message>
- <source>&amp;Use custom Auto-Type sequence:</source>
- <translation>使用自訂的自動輸入序列 (&amp;U):</translation>
- </message>
- <message>
<source>Window Associations</source>
<translation>視窗關聯</translation>
</message>
@@ -2407,11 +2399,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Custom Auto-Type sequence</source>
- <translation>自訂自動輸入序列</translation>
+ <translation>自定義自動輸入序列</translation>
</message>
<message>
<source>Open Auto-Type help webpage</source>
- <translation>開啟自動輸入幫助網頁</translation>
+ <translation>開啟自動輸入的幫助網頁</translation>
</message>
<message>
<source>Existing window associations</source>
@@ -2439,14 +2431,22 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Custom Auto-Type sequence for this window</source>
- <translation>自訂此視窗的自動輸入序列</translation>
+ <translation>自定義此視窗的自動輸入序列</translation>
+ </message>
+ <message>
+ <source>Inherit default Auto-Type sequence from the group</source>
+ <translation>從父群組繼承預設的自動輸入序列</translation>
+ </message>
+ <message>
+ <source>Use custom Auto-Type sequence:</source>
+ <translation>使用自定義的自動輸入序列:</translation>
</message>
</context>
<context>
<name>EditEntryWidgetBrowser</name>
<message>
<source>These settings affect to the entry&apos;s behaviour with the browser extension.</source>
- <translation>這些設定影響了項目在瀏覧器擴充下的行為。</translation>
+ <translation>這些設定影響了項目在瀏覽器擴充下的行為。</translation>
</message>
<message>
<source>General</source>
@@ -2458,11 +2458,11 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Hide this entry from the browser extension</source>
- <translation>在瀏覧器擴充隱藏此項目</translation>
+ <translation>在瀏覽器擴充隱藏此項目</translation>
</message>
<message>
<source>Additional URL&apos;s</source>
- <translation>其他網址</translation>
+ <translation>其他 URL</translation>
</message>
<message>
<source>Add</source>
@@ -2476,6 +2476,14 @@ Disable safe saves and try again?</source>
<source>Edit</source>
<translation>編輯</translation>
</message>
+ <message>
+ <source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
+ <translation>只有出現 HTTP 基本認證對話框才會傳送此設定至瀏覽器。啟用之後,將不會在一般的登入表格顯示此項目的選項。</translation>
+ </message>
+ <message>
+ <source>Use this entry only with HTTP Basic Auth</source>
+ <translation>對此項目只使用 HTTP 基本認證</translation>
+ </message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
@@ -2520,67 +2528,43 @@ Disable safe saves and try again?</source>
<name>EditEntryWidgetMain</name>
<message>
<source>URL:</source>
- <translation>網址:</translation>
+ <translation>URL:</translation>
</message>
<message>
<source>Password:</source>
<translation>密碼:</translation>
</message>
<message>
- <source>Repeat:</source>
- <translation>重複:</translation>
- </message>
- <message>
<source>Title:</source>
<translation>標題:</translation>
</message>
<message>
- <source>Notes</source>
- <translation>附註</translation>
- </message>
- <message>
<source>Presets</source>
- <translation>預設</translation>
+ <translation>預先定義</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>勾選核取方塊以揭示附註欄位。</translation>
+ <translation>切換核取方塊以揭示備註欄位。</translation>
</message>
<message>
<source>Username:</source>
<translation>使用者名稱:</translation>
</message>
<message>
- <source>Expires</source>
- <translation>過期</translation>
- </message>
- <message>
<source>Url field</source>
- <translation>網址欄位</translation>
+ <translation>URL 欄位</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation>下載網址的收藏夾圖示</translation>
- </message>
- <message>
- <source>Repeat password field</source>
- <translation>重複密碼欄位</translation>
- </message>
- <message>
- <source>Toggle password generator</source>
- <translation>切換密碼產生器</translation>
+ <translation>下載 URL 的網站圖標</translation>
</message>
<message>
<source>Password field</source>
<translation>密碼欄位</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>切換密碼可見性</translation>
- </message>
- <message>
<source>Toggle notes visible</source>
- <translation>切換附註可見性</translation>
+ <translation>切換備註可見性</translation>
</message>
<message>
<source>Expiration field</source>
@@ -2588,15 +2572,15 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Expiration Presets</source>
- <translation>過期日預置</translation>
+ <translation>過期預先定義</translation>
</message>
<message>
<source>Expiration presets</source>
- <translation>過期日預置</translation>
+ <translation>過期預先定義</translation>
</message>
<message>
<source>Notes field</source>
- <translation>附註欄位</translation>
+ <translation>備註欄位</translation>
</message>
<message>
<source>Title field</source>
@@ -2608,7 +2592,19 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Toggle expiration</source>
- <translation>切換過期日</translation>
+ <translation>切換過期時間</translation>
+ </message>
+ <message>
+ <source>Notes:</source>
+ <translation>附註:</translation>
+ </message>
+ <message>
+ <source>https://example.com</source>
+ <translation>https://example.com</translation>
+ </message>
+ <message>
+ <source>Expires:</source>
+ <translation>過期:</translation>
</message>
</context>
<context>
@@ -2619,7 +2615,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>從代理中刪除金鑰於</translation>
+ <translation>多久後從代理刪除金鑰</translation>
</message>
<message>
<source> seconds</source>
@@ -2631,7 +2627,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>當關閉/鎖定資料庫時從代理中刪除金鑰</translation>
+ <translation>關閉/鎖定資料庫時,從代理刪除金鑰</translation>
</message>
<message>
<source>Public key</source>
@@ -2639,7 +2635,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>當打開/解鎖資料庫時向代理加入金鑰</translation>
+ <translation>當打開/解鎖資料庫時,向代理加入金鑰</translation>
</message>
<message>
<source>Comment</source>
@@ -2680,7 +2676,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Remove from agent</source>
- <translation>從代理移除</translation>
+ <translation>從代理刪除</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
@@ -2692,7 +2688,7 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Browser for key file</source>
- <translation>瀏覧金鑰檔案</translation>
+ <translation>瀏覽金鑰檔案</translation>
</message>
<message>
<source>External key file</source>
@@ -2739,16 +2735,12 @@ Disable safe saves and try again?</source>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>項目有未保存的變更</translation>
+ <translation>項目有未儲存的變更</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
- <source>Form</source>
- <translation>表單</translation>
- </message>
- <message>
<source>Type:</source>
<translation>類型:</translation>
</message>
@@ -2757,10 +2749,6 @@ Disable safe saves and try again?</source>
<translation>路徑:</translation>
</message>
<message>
- <source>...</source>
- <translation>...</translation>
- </message>
- <message>
<source>Password:</source>
<translation>密碼:</translation>
</message>
@@ -2825,15 +2813,15 @@ Supported extensions are: %1.</source>
<message>
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
<comment>KeeShare is a proper noun</comment>
- <translation>KeeShare 目前停用。您可以在應用程式設定中啟用匯入/匯出功能。</translation>
+ <translation>KeeShare 目前已被停用。您可以到應用程式設定啟用匯入/匯出功能。</translation>
</message>
<message>
<source>Database export is currently disabled by application settings.</source>
- <translation>目前資料庫匯出被應用程式設定停用。</translation>
+ <translation>資料庫匯出目前被應用程式設定停用。</translation>
</message>
<message>
<source>Database import is currently disabled by application settings.</source>
- <translation>目前資料庫匯入被應用程式設定停用。</translation>
+ <translation>資料庫匯入目前被應用程式設定停用。</translation>
</message>
<message>
<source>Sharing mode field</source>
@@ -2844,110 +2832,98 @@ Supported extensions are: %1.</source>
<translation>分享檔案路徑欄位</translation>
</message>
<message>
- <source>Browser for share file</source>
- <translation>瀏覧分享檔案</translation>
- </message>
- <message>
<source>Password field</source>
<translation>密碼欄位</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>切換密碼可見性</translation>
+ <source>Clear fields</source>
+ <translation>清除欄位</translation>
</message>
<message>
- <source>Toggle password generator</source>
- <translation>切換密碼產生器</translation>
+ <source>Browse for share file</source>
+ <translation>瀏覽分享檔案</translation>
</message>
<message>
- <source>Clear fields</source>
- <translation>清除欄位</translation>
+ <source>Browse...</source>
+ <translation>瀏覽...</translation>
</message>
</context>
<context>
<name>EditGroupWidgetMain</name>
<message>
- <source>Name</source>
- <translation>名稱</translation>
+ <source>Name field</source>
+ <translation>名稱欄位</translation>
</message>
<message>
- <source>Notes</source>
- <translation>附註</translation>
+ <source>Notes field</source>
+ <translation>備註欄位</translation>
</message>
<message>
- <source>Expires</source>
- <translation>過期</translation>
+ <source>Toggle expiration</source>
+ <translation>切換過期時間</translation>
</message>
<message>
- <source>Search</source>
- <translation>搜尋</translation>
+ <source>Auto-Type toggle for this and sub groups</source>
+ <translation>切換此群組及其子群組的自動輸入</translation>
</message>
<message>
- <source>Auto-Type</source>
- <translation>自動輸入</translation>
+ <source>Expiration field</source>
+ <translation>過期欄位</translation>
</message>
<message>
- <source>&amp;Use default Auto-Type sequence of parent group</source>
- <translation>使用上層群組預設的自動輸入序列 (&amp;U)</translation>
+ <source>Search toggle for this and sub groups</source>
+ <translation>切換此群組及其子群組的搜尋</translation>
</message>
<message>
- <source>Set default Auto-Type se&amp;quence</source>
- <translation>設定預設自動輸入序列 (&amp;Q)</translation>
+ <source>Default auto-type sequence field</source>
+ <translation>預設自動輸入序列欄位</translation>
</message>
<message>
- <source>Name field</source>
- <translation>名稱欄位</translation>
+ <source>Expires:</source>
+ <translation>過期:</translation>
</message>
<message>
- <source>Notes field</source>
- <translation>附註欄位</translation>
+ <source>Use default Auto-Type sequence of parent group</source>
+ <translation>使用父群組預設的自動輸入序列</translation>
</message>
<message>
- <source>Toggle expiration</source>
- <translation>切換過期時間</translation>
+ <source>Auto-Type:</source>
+ <translation>自動輸入:</translation>
</message>
<message>
- <source>Auto-Type toggle for this and sub groups</source>
- <translation>切換此群組及其子群組的自動輸入</translation>
+ <source>Search:</source>
+ <translation>搜尋:</translation>
</message>
<message>
- <source>Expiration field</source>
- <translation>過期時間欄位</translation>
+ <source>Notes:</source>
+ <translation>附註:</translation>
</message>
<message>
- <source>Search toggle for this and sub groups</source>
- <translation>切換此群組及其子群組的搜尋</translation>
+ <source>Name:</source>
+ <translation>名稱:</translation>
</message>
<message>
- <source>Default auto-type sequence field</source>
- <translation>預設自動輸入序列欄位</translation>
+ <source>Set default Auto-Type sequence</source>
+ <translation>設定預設自動輸入序列</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
- <source>&amp;Use default icon</source>
- <translation>使用預設圖示 (&amp;U)</translation>
- </message>
- <message>
- <source>Use custo&amp;m icon</source>
- <translation>使用自訂圖示 (&amp;M)</translation>
- </message>
- <message>
<source>Add custom icon</source>
- <translation>加入自訂圖示</translation>
+ <translation>加入自定義圖示</translation>
</message>
<message>
<source>Delete custom icon</source>
- <translation>刪除自訂圖示</translation>
+ <translation>刪除自定義圖示</translation>
</message>
<message>
<source>Download favicon</source>
- <translation>下載收藏夾圖示</translation>
+ <translation>下載網站圖標</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>無法擷取收藏夾圖示。</translation>
+ <translation>無法擷取網站圖標。</translation>
</message>
<message>
<source>Images</source>
@@ -2963,7 +2939,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Select Image(s)</source>
- <translation>選擇圖片</translation>
+ <translation>選擇圖示</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
@@ -2983,27 +2959,19 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
- <translation><numerusform>此圖示由 %n 個條目使用,並將被替換為預設圖示。確定要刪除它嗎?</numerusform></translation>
+ <translation><numerusform>此圖示由 %n 個項目使用,將會以預設圖示替換。您確定要刪除它?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
- <translation>您可以到「工具」-&gt;「設定」-&gt;「安全性」啟用 DuckDuckGo 網站圖示服務</translation>
+ <translation>您可以到「工具」-&gt;「設定」-&gt;「安全」啟用 DuckDuckGo 的網站圖示服務</translation>
</message>
<message>
<source>Download favicon for URL</source>
- <translation>下載網址的收藏夾圖示</translation>
+ <translation>下載 URL 的網站圖標</translation>
</message>
<message>
<source>Apply selected icon to subgroups and entries</source>
- <translation>套用所選的圖示至子群組與項目</translation>
- </message>
- <message>
- <source>Apply icon &amp;to ...</source>
- <translation>加入圖示至 (&amp;T)...</translation>
- </message>
- <message>
- <source>Apply to this only</source>
- <translation>只套用至此</translation>
+ <translation>套用所選圖示至子群組與項目</translation>
</message>
<message>
<source>Also apply to child groups</source>
@@ -3021,24 +2989,40 @@ Supported extensions are: %1.</source>
<source>Existing icon selected.</source>
<translation>選擇了已存在的圖示。</translation>
</message>
+ <message>
+ <source>Use default icon</source>
+ <translation>使用預設的圖示</translation>
+ </message>
+ <message>
+ <source>Use custom icon</source>
+ <translation>使用自定義圖示</translation>
+ </message>
+ <message>
+ <source>Apply icon to...</source>
+ <translation>套用圖示至...</translation>
+ </message>
+ <message>
+ <source>Apply to this group only</source>
+ <translation>只套用至此群組</translation>
+ </message>
</context>
<context>
<name>EditWidgetProperties</name>
<message>
<source>Created:</source>
- <translation>已建立:</translation>
+ <translation>建立於:</translation>
</message>
<message>
<source>Modified:</source>
- <translation>已修改:</translation>
+ <translation>修改於:</translation>
</message>
<message>
<source>Accessed:</source>
- <translation>已存取:</translation>
+ <translation>存取於:</translation>
</message>
<message>
<source>Uuid:</source>
- <translation>Uuid:</translation>
+ <translation>Uuid:</translation>
</message>
<message>
<source>Plugin Data</source>
@@ -3068,19 +3052,19 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Datetime created</source>
- <translation>建立日期時間</translation>
+ <translation>建立日期與時間</translation>
</message>
<message>
<source>Datetime modified</source>
- <translation>修改日期時間</translation>
+ <translation>修改日期與時間</translation>
</message>
<message>
<source>Datetime accessed</source>
- <translation>存取日期時間</translation>
+ <translation>存取日期與時間</translation>
</message>
<message>
<source>Unique ID</source>
- <translation>獨特 ID</translation>
+ <translation>獨立 ID</translation>
</message>
<message>
<source>Plugin data</source>
@@ -3137,7 +3121,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>確定要移除 %n 個附件嗎?</numerusform></translation>
+ <translation><numerusform>您確定要移除 %n 個附件?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@@ -3151,7 +3135,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>確定要以附件覆蓋現有的檔案「%1」嗎?</translation>
+ <translation>您確定要用附件覆蓋現有的檔案「%1」?</translation>
</message>
<message>
<source>Confirm overwrite</source>
@@ -3160,19 +3144,19 @@ This may cause the affected plugins to malfunction.</source>
<message>
<source>Unable to save attachments:
%1</source>
- <translation>無法保存附件:
+ <translation>無法儲存附件:
%1</translation>
</message>
<message>
<source>Unable to open attachment:
%1</source>
- <translation>無法打開附件:
+ <translation>無法開啟附件:
%1</translation>
</message>
<message>
<source>Unable to open attachments:
%1</source>
- <translation>無法打開附件:
+ <translation>無法開啟附件:
%1</translation>
</message>
<message>
@@ -3205,6 +3189,19 @@ This may cause the affected plugins to malfunction.</source>
<source>Save selected attachment to disk</source>
<translation>儲存所選附件至磁碟</translation>
</message>
+ <message>
+ <source>%1 is a big file (%2 MB).
+Your database may get very large and reduce performance.
+
+Are you sure to add this file?</source>
+ <translation>%1 檔案過大 (%2 MB)。
+可能導致您的資料庫過大並降低效能。
+您確定要加入這個檔案?</translation>
+ </message>
+ <message>
+ <source>Confirm Attachment</source>
+ <translation>確認附件</translation>
+ </message>
</context>
<context>
<name>EntryAttributesModel</name>
@@ -3217,7 +3214,7 @@ This may cause the affected plugins to malfunction.</source>
<name>EntryHistoryModel</name>
<message>
<source>Last modified</source>
- <translation>最後編輯時間</translation>
+ <translation>最後修改於</translation>
</message>
<message>
<source>Title</source>
@@ -3229,7 +3226,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>URL</source>
- <translation>網址</translation>
+ <translation>URL</translation>
</message>
</context>
<context>
@@ -3253,7 +3250,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>URL</source>
- <translation>網址</translation>
+ <translation>URL</translation>
</message>
<message>
<source>Never</source>
@@ -3265,7 +3262,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Notes</source>
- <translation>附註</translation>
+ <translation>備註</translation>
</message>
<message>
<source>Expires</source>
@@ -3288,12 +3285,52 @@ This may cause the affected plugins to malfunction.</source>
<translation>附件</translation>
</message>
<message>
- <source>Yes</source>
- <translation>是</translation>
+ <source>Size</source>
+ <translation>大小</translation>
</message>
<message>
- <source>TOTP</source>
- <translation>TOTP</translation>
+ <source>Group name</source>
+ <translation>群組名稱</translation>
+ </message>
+ <message>
+ <source>Entry title</source>
+ <translation>項目標題</translation>
+ </message>
+ <message>
+ <source>Entry notes</source>
+ <translation>項目備註</translation>
+ </message>
+ <message>
+ <source>Entry expires at</source>
+ <translation>項目過期於</translation>
+ </message>
+ <message>
+ <source>Creation date</source>
+ <translation>建立日期</translation>
+ </message>
+ <message>
+ <source>Last modification date</source>
+ <translation>最近修改日期</translation>
+ </message>
+ <message>
+ <source>Last access date</source>
+ <translation>最近存取日期</translation>
+ </message>
+ <message>
+ <source>Attached files</source>
+ <translation>附加檔案</translation>
+ </message>
+ <message>
+ <source>Entry size</source>
+ <translation>項目大小</translation>
+ </message>
+ <message>
+ <source>Has attachments</source>
+ <translation>有附件</translation>
+ </message>
+ <message>
+ <source>Has TOTP one-time password</source>
+ <translation>有 TOTP 一次密碼</translation>
</message>
</context>
<context>
@@ -3304,7 +3341,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>General</source>
- <translation>一般</translation>
+ <translation>通用</translation>
</message>
<message>
<source>Username</source>
@@ -3320,7 +3357,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>URL</source>
- <translation>網址</translation>
+ <translation>URL</translation>
</message>
<message>
<source>Attributes</source>
@@ -3332,7 +3369,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Notes</source>
- <translation>附註</translation>
+ <translation>備註</translation>
</message>
<message>
<source>Autotype</source>
@@ -3348,7 +3385,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Searching</source>
- <translation>搜尋功能</translation>
+ <translation>搜尋</translation>
</message>
<message>
<source>Search</source>
@@ -3364,12 +3401,12 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>[PROTECTED]</source>
- <translation>[被保護]</translation>
+ <translation>[受保護內容]</translation>
</message>
<message>
<source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
<comment>attributes line</comment>
- <translation>&lt;b&gt;%1&lt;/b&gt;: %2</translation>
+ <translation>&lt;b&gt;%1&lt;/b&gt;:%2</translation>
</message>
<message>
<source>Enabled</source>
@@ -3381,7 +3418,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Share</source>
- <translation>共用</translation>
+ <translation>共享</translation>
</message>
<message>
<source>Display current TOTP value</source>
@@ -3393,10 +3430,17 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
+ <name>EntryURLModel</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>無效的 URL</translation>
+ </message>
+</context>
+<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
- <translation>自訂檢視</translation>
+ <translation>自定義檢視</translation>
</message>
<message>
<source>Hide Usernames</source>
@@ -3416,11 +3460,17 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Reset to defaults</source>
- <translation>重設為預設</translation>
+ <translation>重置為預設值</translation>
</message>
<message>
- <source>Attachments (icon)</source>
- <translation>附件 (圖示)</translation>
+ <source>Has attachments</source>
+ <comment>Entry attachment icon toggle</comment>
+ <translation>有附件</translation>
+ </message>
+ <message>
+ <source>Has TOTP</source>
+ <comment>Entry TOTP icon toggle</comment>
+ <translation>有 TOTP</translation>
</message>
</context>
<context>
@@ -3432,21 +3482,74 @@ This may cause the affected plugins to malfunction.</source>
</context>
<context>
<name>FdoSecrets::Service</name>
- <message>
- <source>Failed to register DBus service at %1: another secret service is running.</source>
- <translation>註冊 DBus 服務於 %1 失敗:另一個秘密服務已經在執行當中。</translation>
- </message>
<message numerus="yes">
<source>%n Entry(s) was used by %1</source>
<comment>%1 is the name of an application</comment>
<translation><numerusform>%n 個項目被 %1 使用</numerusform></translation>
</message>
+ <message>
+ <source>Failed to register DBus service at %1.&lt;br/&gt;</source>
+ <translation>於 %1 註冊 DBus 服務失敗。&lt;br/&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsDatabaseModel</name>
+ <message>
+ <source>File Name</source>
+ <translation>檔案名稱</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>群組</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>管理</translation>
+ </message>
+ <message>
+ <source>Unlock to show</source>
+ <translation>解鎖以顯示</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>無</translation>
+ </message>
+</context>
+<context>
+ <name>FdoSecrets::SettingsSessionModel</name>
+ <message>
+ <source>Application</source>
+ <translation>應用程式</translation>
+ </message>
+ <message>
+ <source>Manage</source>
+ <translation>管理</translation>
+ </message>
</context>
<context>
<name>FdoSecretsPlugin</name>
<message>
- <source>Fdo Secret Service: %1</source>
- <translation>Fdo 秘密服務 (Secret Service):%1</translation>
+ <source>&lt;b&gt;Fdo Secret Service:&lt;/b&gt; %1</source>
+ <translation>&lt;b&gt;Fdo 保密服務:&lt;/b&gt; %1</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown PID</comment>
+ <translation>未知</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown executable path</comment>
+ <translation>未知</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
+ <comment>&lt;i&gt;PID: 1234, Executable: /path/to/exe&lt;/i&gt;</comment>
+ <translation>&lt;i&gt;PID: %1,執行檔: %2&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
+ <translation>另一個保密服務正在執行 (%1)。&lt;br/&gt;請先停止/移除它才能重新啟用保密服務整合。</translation>
</message>
</context>
<context>
@@ -3458,21 +3561,17 @@ This may cause the affected plugins to malfunction.</source>
</message>
</context>
<context>
- <name>HostInstaller</name>
+ <name>HibpDownloader</name>
<message>
- <source>KeePassXC: Cannot save file!</source>
- <translation>KeePassXC: 無法保存檔案!</translation>
- </message>
- <message>
- <source>Cannot save the native messaging script file.</source>
- <translation>無法保存 native messaging 指令檔案。</translation>
+ <source>Online password validation failed</source>
+ <translation>線上密碼驗證失敗</translation>
</message>
</context>
<context>
<name>IconDownloaderDialog</name>
<message>
<source>Download Favicons</source>
- <translation>下載收藏夾圖示</translation>
+ <translation>下載網站圖標</translation>
</message>
<message>
<source>Cancel</source>
@@ -3482,7 +3581,7 @@ This may cause the affected plugins to malfunction.</source>
<source>Having trouble downloading icons?
You can enable the DuckDuckGo website icon service in the security section of the application settings.</source>
<translation>下載圖示時碰到問題了?
-您可以在應用程式設定的「安全性」一欄啟用 DuckDuckGo 網站圖示服務。</translation>
+您可以到應用程式設定的安全一欄啟用 DuckDuckGo 的網站圖示服務。</translation>
</message>
<message>
<source>Close</source>
@@ -3490,7 +3589,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>URL</source>
- <translation>網址</translation>
+ <translation>URL</translation>
</message>
<message>
<source>Status</source>
@@ -3498,7 +3597,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Please wait, processing entry list...</source>
- <translation>請稍待,正在處理項目清單...</translation>
+ <translation>請稍候,正在處理項目清單...</translation>
</message>
<message>
<source>Downloading...</source>
@@ -3518,7 +3617,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Downloading favicons (%1/%2)...</source>
- <translation>正在下載收藏夾圖示 (%1/%2)...</translation>
+ <translation>正在下載網站圖標 (%1/%2)...</translation>
</message>
</context>
<context>
@@ -3535,14 +3634,6 @@ You can enable the DuckDuckGo website icon service in the security section of th
<context>
<name>Kdbx3Reader</name>
<message>
- <source>Unable to calculate master key</source>
- <translation>無法計算主金鑰</translation>
- </message>
- <message>
- <source>Unable to issue challenge-response.</source>
- <translation>無法發出挑戰-回應。</translation>
- </message>
- <message>
<source>missing database headers</source>
<translation>缺少資料庫標頭</translation>
</message>
@@ -3568,16 +3659,24 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>所提供的憑證無效,請再嘗試一遍。
若此情形一再發生,代表您的資料庫檔案可能已損毀。</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>無法計算資料庫金鑰</translation>
+ </message>
+ <message>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>無法發佈挑戰應答:%1</translation>
+ </message>
</context>
<context>
<name>Kdbx3Writer</name>
<message>
- <source>Unable to issue challenge-response.</source>
- <translation>無法發出挑戰-回應。</translation>
+ <source>Unable to issue challenge-response: %1</source>
+ <translation>無法發佈挑戰應答:%1</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>無法計算主金鑰</translation>
+ <source>Unable to calculate database key</source>
+ <translation>無法計算資料庫金鑰</translation>
</message>
</context>
<context>
@@ -3587,10 +3686,6 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>缺少資料庫標頭</translation>
</message>
<message>
- <source>Unable to calculate master key</source>
- <translation>無法計算主金鑰</translation>
- </message>
- <message>
<source>Invalid header checksum size</source>
<translation>無效的標頭校驗大小</translation>
</message>
@@ -3600,7 +3695,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Unknown cipher</source>
- <translation>未知的加密</translation>
+ <translation>未知的加密法</translation>
</message>
<message>
<source>Invalid header id size</source>
@@ -3620,11 +3715,11 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation>不支援的金鑰推導函式 (KDF) 或無效參數</translation>
+ <translation>不支援的金鑰衍生函數 (KDF) 或參數無效</translation>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
- <translation>在 KDBX4 檔案中找到的舊式標頭欄位。</translation>
+ <translation>在 KDBX4 檔案中找到的舊版標頭欄位。</translation>
</message>
<message>
<source>Invalid inner header id size</source>
@@ -3661,12 +3756,12 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>無效的變數映射項目值資料</translation>
+ <translation>無效的變體映射項目值資料</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>無效的變體映射布林項目值長度</translation>
+ <translation>無效的變體映射 Bool 項目值長度</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
@@ -3706,35 +3801,39 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>(HMAC mismatch)</source>
- <translation>(HMAC 不符)</translation>
+ <translation>(HMAC 不符)</translation>
+ </message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>無法計算資料庫金鑰:%1</translation>
</message>
</context>
<context>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>無效的對稱式加密演算法。</translation>
+ <translation>無效的對稱加密演算法。</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>對稱式加密演算法的初始向量 (IV) 大小為無效。</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>無法計算主金鑰</translation>
+ <translation>無效的對稱加密初始向量大小。</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
<translation>無法序列化 KDF 參數變體映射</translation>
</message>
+ <message>
+ <source>Unable to calculate database key: %1</source>
+ <translation>無法計算資料庫金鑰:%1</translation>
+ </message>
</context>
<context>
<name>KdbxReader</name>
<message>
<source>Unsupported cipher</source>
- <translation>不支援的加密</translation>
+ <translation>不支援的加密法</translation>
</message>
<message>
<source>Invalid compression flags length</source>
@@ -3766,7 +3865,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>無效的內部隨機資料流密碼</translation>
+ <translation>無效的內部隨機串流加密法</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -3777,10 +3876,10 @@ If this reoccurs, then your database file may be corrupt.</source>
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>選擇的檔案是舊的 KeePass 1 資料庫 (.kdb)。
+ <translation>所選檔案為舊式 KeePass 1 資料庫 (.kdb)。
-您可以點選「資料庫」&gt; 「匯入 KeePass 1 資料庫...」。
-此操作為單向遷移。您將無法用舊的 KeePassX 0.4 版本開啟匯入後的資料庫。</translation>
+您可以點擊「資料庫」 &gt; 「匯入 KeePass 1 資料庫...」來匯入它。
+這是單向遷移。你無法用舊的 KeePassX 0.4 的版本開啟已匯入的資料庫。</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
@@ -3788,11 +3887,11 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>無效的密碼 uuid 長度:%1 (長度=%2)</translation>
+ <translation>無效的加密法 UUID 長度: %1 (length=%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>無法分析 UUID:%1</translation>
+ <translation>無法剖析 UUID: %1</translation>
</message>
<message>
<source>Failed to read database file.</source>
@@ -3807,7 +3906,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>No root group</source>
- <translation>無根權限群組</translation>
+ <translation>沒有根群組</translation>
</message>
<message>
<source>Missing icon uuid or data</source>
@@ -3815,7 +3914,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>缺少自訂資料鍵或值</translation>
+ <translation>缺少自定義的資料鍵或值</translation>
</message>
<message>
<source>Multiple group elements</source>
@@ -3859,7 +3958,7 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>History element in history entry</source>
- <translation>歷史項目中的歷史元素</translation>
+ <translation>歷史記錄項目中的歷史元素</translation>
</message>
<message>
<source>No entry uuid found</source>
@@ -3871,17 +3970,13 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>找到重複的自訂屬性</translation>
+ <translation>找到重複的自定義屬性</translation>
</message>
<message>
<source>Entry string key or value missing</source>
<translation>缺少項目字串或值</translation>
</message>
<message>
- <source>Duplicate attachment found</source>
- <translation>找到重複的附件</translation>
- </message>
- <message>
<source>Entry binary key or value missing</source>
<translation>缺少項目二進位金鑰或值</translation>
</message>
@@ -3924,7 +4019,30 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
Line %2, column %3</source>
<translation>XML 錯誤:
%1
-列 %2, 行 %3</translation>
+列 %2, 欄位 %3</translation>
+ </message>
+</context>
+<context>
+ <name>KeeAgentSettings</name>
+ <message>
+ <source>Invalid KeeAgent settings file structure.</source>
+ <translation>無效的 KeeAgent 設定檔架構。</translation>
+ </message>
+ <message>
+ <source>Private key is an attachment but no attachments provided.</source>
+ <translation>私密金鑰為附件,但附件未提供。</translation>
+ </message>
+ <message>
+ <source>Private key is empty</source>
+ <translation>私密金鑰為空</translation>
+ </message>
+ <message>
+ <source>File too large to be a private key</source>
+ <translation>檔案太大,無法作為私密金鑰</translation>
+ </message>
+ <message>
+ <source>Failed to open private key</source>
+ <translation>無法打開私密金鑰</translation>
</message>
</context>
<context>
@@ -3959,7 +4077,7 @@ Line %2, column %3</source>
<message>
<source>Unable to read encryption IV</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>無法讀取加密用初始向量 (IV)</translation>
+ <translation>無法讀取加密 IV</translation>
</message>
<message>
<source>Invalid number of groups</source>
@@ -3987,11 +4105,7 @@ Line %2, column %3</source>
</message>
<message>
<source>Root</source>
- <translation>根</translation>
- </message>
- <message>
- <source>Unable to calculate master key</source>
- <translation>無法計算主金鑰</translation>
+ <translation>根群組</translation>
</message>
<message>
<source>Key transformation failed</source>
@@ -4095,6 +4209,10 @@ If this reoccurs, then your database file may be corrupt.</source>
<translation>所提供的憑證無效,請再嘗試一遍。
若此情形一再發生,代表您的資料庫檔案可能已損毀。</translation>
</message>
+ <message>
+ <source>Unable to calculate database key</source>
+ <translation>無法計算資料庫金鑰</translation>
+ </message>
</context>
<context>
<name>KeeShare</name>
@@ -4179,7 +4297,7 @@ If this reoccurs, then your database file may be corrupt.</source>
<message>
<source>%1 set, click to change or remove</source>
<comment>Change or remove a key component</comment>
- <translation>%1已設定,點選以更改或移除</translation>
+ <translation>%1 已設定,點選以更改或移除</translation>
</message>
</context>
<context>
@@ -4194,25 +4312,16 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;您可以加入一份包含隨機字元的金鑰檔案以提升安全性。&lt;/p&gt;&lt;p&gt;您必須將其保密,切莫丟失,否則將會被鎖在外頭!&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;您可以加入一份包含隨機字元的金鑰檔案以提升安全性。&lt;/p&gt;&lt;p&gt;您必須將其保密,切莫丟失,否則您將會被鎖在外頭!&lt;/p&gt;</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>舊式金鑰檔案格式</translation>
- </message>
- <message>
- <source>You are using a legacy key file format which may become
-unsupported in the future.
-
-Please go to the master key settings and generate a new key file.</source>
- <translation>你正在使用未來將不再支援的舊式金鑰檔案格式。
-
-請至主密碼設定產生新的金鑰。</translation>
+ <translation>舊版金鑰檔案格式</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>載入金鑰檔案「%1」失敗
+ <translation>載入金鑰檔案 &apos;%1&apos; 時出錯
訊息:%2</translation>
</message>
<message>
@@ -4229,7 +4338,7 @@ Message: %2</source>
</message>
<message>
<source>Error creating key file</source>
- <translation>建立金鑰檔案錯誤</translation>
+ <translation>建立金鑰檔案時出錯</translation>
</message>
<message>
<source>Unable to create key file: %1</source>
@@ -4245,7 +4354,7 @@ Message: %2</source>
</message>
<message>
<source>Browse for key file</source>
- <translation>瀏覧金鑰檔案</translation>
+ <translation>瀏覽金鑰檔案</translation>
</message>
<message>
<source>Browse...</source>
@@ -4275,7 +4384,17 @@ Message: %2</source>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
<translation>所選擇的金鑰檔案像是一份密碼資料庫檔案。金鑰檔案必須是一個永不變更的靜態檔案,否則您將永遠失去資料庫的存取權。
-真的要以此檔案繼續嗎?</translation>
+您確定要以此檔案繼續?</translation>
+ </message>
+ <message>
+ <source>You are using a legacy key file format which may become
+unsupported in the future.
+
+Generate a new key file in the database security settings.</source>
+ <translation>您使用的金鑰檔案格式為舊版本,將來有可能
+不再被支援。
+
+請到資料庫的安全設定產生一個新金鑰檔案。</translation>
</message>
</context>
<context>
@@ -4285,18 +4404,10 @@ Are you sure you want to continue with this file?</source>
<translation>資料庫 (&amp;D)</translation>
</message>
<message>
- <source>&amp;Recent databases</source>
- <translation>最近的資料庫 (&amp;R)</translation>
- </message>
- <message>
<source>&amp;Help</source>
<translation>幫助 (&amp;H)</translation>
</message>
<message>
- <source>E&amp;ntries</source>
- <translation>項目 (&amp;N)</translation>
- </message>
- <message>
<source>&amp;Groups</source>
<translation>群組 (&amp;G)</translation>
</message>
@@ -4313,46 +4424,10 @@ Are you sure you want to continue with this file?</source>
<translation>關於 (&amp;A)</translation>
</message>
<message>
- <source>&amp;Open database...</source>
- <translation>開啟資料庫 (&amp;O)…</translation>
- </message>
- <message>
- <source>&amp;Save database</source>
- <translation>儲存資料庫 (&amp;S)</translation>
- </message>
- <message>
- <source>&amp;Close database</source>
- <translation>關閉資料庫 (&amp;C)</translation>
- </message>
- <message>
- <source>&amp;Delete entry</source>
- <translation>刪除項目 (&amp;D)</translation>
- </message>
- <message>
- <source>&amp;Edit group</source>
- <translation>編輯群組 (&amp;E)</translation>
- </message>
- <message>
- <source>&amp;Delete group</source>
- <translation>刪除群組 (&amp;D)</translation>
- </message>
- <message>
- <source>Sa&amp;ve database as...</source>
- <translation>將資料庫儲存為 (&amp;V)…</translation>
- </message>
- <message>
<source>Database settings</source>
<translation>資料庫設定</translation>
</message>
<message>
- <source>&amp;Clone entry</source>
- <translation>複製項目 (&amp;C)</translation>
- </message>
- <message>
- <source>Copy &amp;username</source>
- <translation>複製使用者名稱 (&amp;U)</translation>
- </message>
- <message>
<source>Copy username to clipboard</source>
<translation>將使用者名稱複製到剪貼簿</translation>
</message>
@@ -4365,10 +4440,6 @@ Are you sure you want to continue with this file?</source>
<translation>設定 (&amp;S)</translation>
</message>
<message>
- <source>&amp;Lock databases</source>
- <translation>鎖定資料庫 (&amp;L)</translation>
- </message>
- <message>
<source>&amp;Title</source>
<translation>標題 (&amp;T)</translation>
</message>
@@ -4378,29 +4449,21 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>&amp;URL</source>
- <translation>網址 (&amp;U)</translation>
+ <translation>&amp;URL</translation>
</message>
<message>
<source>Copy URL to clipboard</source>
- <translation>將網址複製到剪貼簿</translation>
+ <translation>將 URL 複製到剪貼簿</translation>
</message>
<message>
<source>&amp;Notes</source>
- <translation>附註 (&amp;N)</translation>
+ <translation>備註 (&amp;N)</translation>
</message>
<message>
<source>Copy notes to clipboard</source>
<translation>將備註複製到剪貼簿</translation>
</message>
<message>
- <source>&amp;Export to CSV file...</source>
- <translation>匯出到 CSV 檔案 (&amp;E)…</translation>
- </message>
- <message>
- <source>Set up TOTP...</source>
- <translation>設置 TOTP...</translation>
- </message>
- <message>
<source>Copy &amp;TOTP</source>
<translation>複製 &amp;TOTP</translation>
</message>
@@ -4410,7 +4473,7 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Clear history</source>
- <translation>清除歷史</translation>
+ <translation>清除歷史記錄</translation>
</message>
<message>
<source>Access error for config file %1</source>
@@ -4430,25 +4493,21 @@ Are you sure you want to continue with this file?</source>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>請觸摸你 YubiKey 上的按鈕!</translation>
+ <translation>請接觸您 YubiKey 上的按鈕!</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>警告:你正在使用非穩定版本的 KeePassXC!
+ <translation>警告:您正在使用非穩定版本的 KeePassXC!
具有高風險的破壞可能,請備份你的資料庫。
-這個版本不是給一般使用者使用。</translation>
+這個版本並不適合生產用途。</translation>
</message>
<message>
<source>&amp;Donate</source>
<translation>捐贈 (&amp;D)</translation>
</message>
<message>
- <source>Report a &amp;bug</source>
- <translation>回報錯誤 (&amp;B)</translation>
- </message>
- <message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
<translation>警告:您的 Qt 版本可能會導致 KeePassXC 與螢幕鍵盤崩潰!
@@ -4459,98 +4518,42 @@ We recommend you use the AppImage available on our downloads page.</source>
<translation>匯入 (&amp;I)</translation>
</message>
<message>
- <source>Copy att&amp;ribute...</source>
- <translation>複製屬性 (&amp;R)…</translation>
- </message>
- <message>
- <source>TOTP...</source>
- <translation>限時單次密碼 (TOTP)…</translation>
- </message>
- <message>
- <source>&amp;New database...</source>
- <translation>新增資料庫 (&amp;N)…</translation>
- </message>
- <message>
<source>Create a new database</source>
<translation>建立新資料庫</translation>
</message>
<message>
- <source>&amp;Merge from database...</source>
- <translation>與資料庫合併 (&amp;M)…</translation>
- </message>
- <message>
<source>Merge from another KDBX database</source>
<translation>與其他 KDBX 資料庫合併</translation>
</message>
<message>
- <source>&amp;New entry</source>
- <translation>新增項目 (&amp;N)</translation>
- </message>
- <message>
<source>Add a new entry</source>
<translation>加入新項目</translation>
</message>
<message>
- <source>&amp;Edit entry</source>
- <translation>編輯項目 (&amp;E)</translation>
- </message>
- <message>
<source>View or edit entry</source>
<translation>檢視或編輯項目</translation>
</message>
<message>
- <source>&amp;New group</source>
- <translation>新增群組 (&amp;N)</translation>
- </message>
- <message>
<source>Add a new group</source>
<translation>加入新群組</translation>
</message>
<message>
- <source>Change master &amp;key...</source>
- <translation>更改主密碼 (&amp;K)…</translation>
- </message>
- <message>
- <source>&amp;Database settings...</source>
- <translation>資料庫設定 (&amp;D)…</translation>
- </message>
- <message>
- <source>Copy &amp;password</source>
- <translation>複製密碼 (&amp;P)</translation>
- </message>
- <message>
<source>Perform &amp;Auto-Type</source>
<translation>進行自動輸入 (&amp;A)</translation>
</message>
<message>
<source>Open &amp;URL</source>
- <translation>開啟網址 (&amp;U)</translation>
- </message>
- <message>
- <source>KeePass 1 database...</source>
- <translation>KeePass 1 資料庫...</translation>
+ <translation>開啟 &amp;URL</translation>
</message>
<message>
<source>Import a KeePass 1 database</source>
<translation>匯入 KeePass 1 資料庫</translation>
</message>
<message>
- <source>CSV file...</source>
- <translation>CSV 檔案...</translation>
- </message>
- <message>
<source>Import a CSV file</source>
<translation>匯入 CSV 檔案</translation>
</message>
<message>
- <source>Show TOTP...</source>
- <translation>顯示 TOTP…</translation>
- </message>
- <message>
- <source>Show TOTP QR Code...</source>
- <translation>顯示 TOTP QR 碼...</translation>
- </message>
- <message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
<translation>注意:您正在使用 KeePassXC 的預先發行版本!
@@ -4562,7 +4565,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>你希望在 KeePassXC 啟動時檢查更新嗎?</translation>
+ <translation>你是否要在 KeePassXC 啟動時檢查更新?</translation>
</message>
<message>
<source>You can always check for updates manually from the application menu.</source>
@@ -4573,14 +4576,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>匯出 (&amp;E)</translation>
</message>
<message>
- <source>&amp;Check for Updates...</source>
- <translation>檢查更新 (&amp;C)...</translation>
- </message>
- <message>
- <source>Downlo&amp;ad all favicons</source>
- <translation>下載所有收藏夾圖示 (&amp;A)</translation>
- </message>
- <message>
<source>Sort &amp;A-Z</source>
<translation>排序從 &amp;A 到 Z</translation>
</message>
@@ -4593,48 +4588,290 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>密碼產生器 (&amp;P)</translation>
</message>
<message>
- <source>Download favicon</source>
- <translation>下載收藏夾圖示</translation>
+ <source>Import a 1Password Vault</source>
+ <translation>匯入 1Password 保險庫</translation>
</message>
<message>
- <source>&amp;Export to HTML file...</source>
- <translation>匯出至 HTML 檔案 (&amp;E)...</translation>
+ <source>&amp;Getting Started</source>
+ <translation>開始使用 (&amp;G)</translation>
</message>
<message>
- <source>1Password Vault...</source>
- <translation>1Password 保險庫...</translation>
+ <source>&amp;User Guide</source>
+ <translation>使用者指南 (&amp;U)</translation>
</message>
<message>
- <source>Import a 1Password Vault</source>
- <translation>匯入 1Password 保險庫</translation>
+ <source>&amp;Keyboard Shortcuts</source>
+ <translation>鍵盤快捷鍵 (&amp;K)</translation>
</message>
<message>
- <source>&amp;Getting Started</source>
- <translation>開始使用 (&amp;G)</translation>
+ <source>&amp;Recent Databases</source>
+ <translation>最近的資料庫 (&amp;R)</translation>
</message>
<message>
- <source>Open Getting Started Guide PDF</source>
- <translation>開啟「開始使用」指南 PDF</translation>
+ <source>&amp;Entries</source>
+ <translation>項目 (&amp;E)</translation>
</message>
<message>
- <source>&amp;Online Help...</source>
- <translation>線上幫助 (&amp;O)...</translation>
+ <source>Copy Att&amp;ribute</source>
+ <translation>複製屬性 (&amp;R)</translation>
</message>
<message>
- <source>Go to online documentation (opens browser)</source>
- <translation>前往線上文件(開啟瀏覧器)</translation>
+ <source>TOTP</source>
+ <translation>TOTP</translation>
</message>
<message>
- <source>&amp;User Guide</source>
- <translation>使用者指南 (&amp;U)</translation>
+ <source>View</source>
+ <translation>顯示</translation>
</message>
<message>
- <source>Open User Guide PDF</source>
- <translation>開啟使用者指南 PDF</translation>
+ <source>Theme</source>
+ <translation>主題</translation>
</message>
<message>
- <source>&amp;Keyboard Shortcuts</source>
- <translation>鍵盤快捷鍵 (&amp;K)</translation>
+ <source>&amp;Check for Updates</source>
+ <translation>檢查更新 (&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Open Database…</source>
+ <translation>開啟資料庫 (&amp;O)…</translation>
+ </message>
+ <message>
+ <source>&amp;Save Database</source>
+ <translation>儲存資料庫 (&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Close Database</source>
+ <translation>關閉資料庫 (&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;New Database…</source>
+ <translation>新建資料庫 (&amp;N)…</translation>
+ </message>
+ <message>
+ <source>&amp;Merge From Database…</source>
+ <translation>從資料庫合併 (&amp;M)…</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry…</source>
+ <translation>新建項目 (&amp;N)…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Entry…</source>
+ <translation>編輯項目 (&amp;E)…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Entry…</source>
+ <translation>刪除項目 (&amp;D)…</translation>
+ </message>
+ <message>
+ <source>&amp;New Group…</source>
+ <translation>新建群組 (&amp;N)…</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Group…</source>
+ <translation>編輯群組 (&amp;E)…</translation>
+ </message>
+ <message>
+ <source>&amp;Delete Group…</source>
+ <translation>刪除群組 (&amp;D)…</translation>
+ </message>
+ <message>
+ <source>Download All &amp;Favicons…</source>
+ <translation>下載所有網站圖標 (&amp;F)…</translation>
+ </message>
+ <message>
+ <source>Sa&amp;ve Database As…</source>
+ <translation>儲存資料庫為 (&amp;V)…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Security…</source>
+ <translation>資料庫安全 (&amp;S)…</translation>
+ </message>
+ <message>
+ <source>Database &amp;Reports...</source>
+ <translation>資料庫報告 (&amp;R)...</translation>
+ </message>
+ <message>
+ <source>Statistics, health check, etc.</source>
+ <translation>資料統計與健康檢查等</translation>
+ </message>
+ <message>
+ <source>&amp;Database Settings…</source>
+ <translation>資料庫設定 (&amp;D)…</translation>
+ </message>
+ <message>
+ <source>&amp;Clone Entry…</source>
+ <translation>複製項目 (&amp;C)…</translation>
+ </message>
+ <message>
+ <source>Move u&amp;p</source>
+ <translation>上移 (&amp;P)</translation>
+ </message>
+ <message>
+ <source>Move entry one step up</source>
+ <translation>將項目向上移動一步</translation>
+ </message>
+ <message>
+ <source>Move do&amp;wn</source>
+ <translation>下移 (&amp;W)</translation>
+ </message>
+ <message>
+ <source>Move entry one step down</source>
+ <translation>將項目向下移動一步</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Username</source>
+ <translation>複製使用者名稱 (&amp;U)</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Password</source>
+ <translation>複製密碼 (&amp;P)</translation>
+ </message>
+ <message>
+ <source>Download &amp;Favicon</source>
+ <translation>下載網站圖標 (&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Lock Databases</source>
+ <translation>鎖定資料庫 (&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;CSV File…</source>
+ <translation>&amp;CSV 檔…</translation>
+ </message>
+ <message>
+ <source>&amp;HTML File…</source>
+ <translation>&amp;HTML 檔…</translation>
+ </message>
+ <message>
+ <source>KeePass 1 Database…</source>
+ <translation>KeePass 1 資料庫…</translation>
+ </message>
+ <message>
+ <source>1Password Vault…</source>
+ <translation>1Password 保險庫…</translation>
+ </message>
+ <message>
+ <source>CSV File…</source>
+ <translation>CSV 檔…</translation>
+ </message>
+ <message>
+ <source>Show TOTP</source>
+ <translation>顯示 TOTP</translation>
+ </message>
+ <message>
+ <source>Show QR Code</source>
+ <translation>顯示 QR 碼</translation>
+ </message>
+ <message>
+ <source>Set up TOTP…</source>
+ <translation>設定 TOTP…</translation>
+ </message>
+ <message>
+ <source>Report a &amp;Bug</source>
+ <translation>回報問題 (&amp;B)</translation>
+ </message>
+ <message>
+ <source>Open Getting Started Guide</source>
+ <translation>開啟「開始使用」指南</translation>
+ </message>
+ <message>
+ <source>&amp;Online Help</source>
+ <translation>線上幫助 (&amp;O)</translation>
+ </message>
+ <message>
+ <source>Go to online documentation</source>
+ <translation>前往線上文件</translation>
+ </message>
+ <message>
+ <source>Open User Guide</source>
+ <translation>開啟使用者指南</translation>
+ </message>
+ <message>
+ <source>Save Database Backup...</source>
+ <translation>儲存資料庫備份...</translation>
+ </message>
+ <message>
+ <source>Add key to SSH Agent</source>
+ <translation>加入金鑰至 SSH 代理</translation>
+ </message>
+ <message>
+ <source>Remove key from SSH Agent</source>
+ <translation>從 SSH 代理移除金鑰</translation>
+ </message>
+ <message>
+ <source>Compact Mode</source>
+ <translation>緊緻模式</translation>
+ </message>
+ <message>
+ <source>Automatic</source>
+ <translation>自動</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>淺色</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>深色</translation>
+ </message>
+ <message>
+ <source>Classic (Platform-native)</source>
+ <translation>經典(平台原生)</translation>
+ </message>
+ <message>
+ <source>Show Toolbar</source>
+ <translation>顯示工具列</translation>
+ </message>
+ <message>
+ <source>Show Preview Panel</source>
+ <translation>顯示預覽面板</translation>
+ </message>
+ <message>
+ <source>Don&apos;t show again for this version</source>
+ <translation>對此版本不再顯示</translation>
+ </message>
+ <message>
+ <source>Restart Application?</source>
+ <translation>重啟應用程式?</translation>
+ </message>
+ <message>
+ <source>You must restart the application to apply this setting. Would you like to restart now?</source>
+ <translation>必須重啟應用程式來套用此設定。您是否要現在重新啟動?</translation>
+ </message>
+</context>
+<context>
+ <name>ManageDatabase</name>
+ <message>
+ <source>Database settings</source>
+ <translation>資料庫設定</translation>
+ </message>
+ <message>
+ <source>Edit database settings</source>
+ <translation>編輯資料庫設定</translation>
+ </message>
+ <message>
+ <source>Unlock database</source>
+ <translation>解鎖資料庫</translation>
+ </message>
+ <message>
+ <source>Unlock database to show more information</source>
+ <translation>解鎖資料庫來顯示更多資訊</translation>
+ </message>
+ <message>
+ <source>Lock database</source>
+ <translation>鎖定資料庫</translation>
+ </message>
+</context>
+<context>
+ <name>ManageSession</name>
+ <message>
+ <source>Disconnect</source>
+ <translation>中斷連結</translation>
+ </message>
+ <message>
+ <source>Disconnect this application</source>
+ <translation>中斷此程式的連結</translation>
</message>
</context>
<context>
@@ -4653,7 +4890,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>舊項目從資料庫「%1」合併</translation>
+ <translation>較舊的項目從資料庫「%1」合併</translation>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
@@ -4693,22 +4930,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Adding missing icon %1</source>
- <translation>添加缺失的圖示 %1</translation>
+ <translation>加入缺失的圖示 %1</translation>
</message>
<message>
<source>Removed custom data %1 [%2]</source>
- <translation>移除自訂資料 %1 [%2]</translation>
+ <translation>移除自定義資料 %1 [%2]</translation>
</message>
<message>
<source>Adding custom data %1 [%2]</source>
- <translation>添加自訂資料 %1 [%2]</translation>
+ <translation>加入自定義資料 %1 [%2]</translation>
</message>
</context>
<context>
<name>NewDatabaseWizard</name>
<message>
<source>Create a new KeePassXC database...</source>
- <translation>建立新 KeePassXC 資料庫...</translation>
+ <translation>建立新的 KeePassXC 資料庫...</translation>
</message>
<message>
<source>Root</source>
@@ -4723,12 +4960,8 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>嚮導頁</translation>
</message>
<message>
- <source>En&amp;cryption Settings</source>
- <translation>加密設定 (&amp;C)</translation>
- </message>
- <message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>你可以在這裡調整資料庫加密設定。別擔心,你之後還能在資料庫設定中變更。</translation>
+ <translation>您可以在此調整資料庫的加密設定。別擔心,之後也可以到資料庫設定更改它們。</translation>
</message>
<message>
<source>Advanced Settings</source>
@@ -4738,38 +4971,49 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Simple Settings</source>
<translation>簡單設定</translation>
</message>
-</context>
-<context>
- <name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
<translation>加密設定</translation>
</message>
+</context>
+<context>
+ <name>NewDatabaseWizardPageDatabaseKey</name>
<message>
- <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>你可以在這裡調整資料庫加密設定。別擔心,你之後還能在資料庫設定中變更。</translation>
+ <source>Database Credentials</source>
+ <translation>資料庫憑證</translation>
+ </message>
+ <message>
+ <source>A set of credentials known only to you that protects your database.</source>
+ <translation>只有您知道的憑證組合才能保護您的資料庫。</translation>
</message>
</context>
<context>
- <name>NewDatabaseWizardPageMasterKey</name>
+ <name>NewDatabaseWizardPageEncryption</name>
<message>
- <source>Database Master Key</source>
- <translation>資料庫主密碼</translation>
+ <source>Encryption Settings</source>
+ <translation>加密設定</translation>
</message>
<message>
- <source>A master key known only to you protects your database.</source>
- <translation>只有你知道的密碼才能保護你的資料庫。</translation>
+ <source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
+ <translation>您可以在此調整資料庫的加密設定。別擔心,之後也可以到資料庫設定更改它們。</translation>
</message>
</context>
<context>
<name>NewDatabaseWizardPageMetaData</name>
<message>
<source>General Database Information</source>
- <translation>一般資料庫資訊</translation>
+ <translation>通用資料庫資訊</translation>
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>請為你的新資料庫填寫一個顯示名稱,及一個選擇性的說明:</translation>
+ <translation>請為您的新資料庫填寫一個顯示名稱,及一個選擇性的說明:</translation>
+ </message>
+</context>
+<context>
+ <name>NixUtils</name>
+ <message>
+ <source>Password Manager</source>
+ <translation>密碼管理員</translation>
</message>
</context>
<context>
@@ -4832,11 +5076,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unable to decode masterKey: %1</source>
- <translation>無法解碼主金鑰:%1</translation>
+ <translation>無法解碼主密鑰:%1</translation>
</message>
<message>
<source>Unable to derive master key: %1</source>
- <translation>無法推導主金鑰:%1</translation>
+ <translation>無法推導主密鑰:%1</translation>
</message>
</context>
<context>
@@ -4855,11 +5099,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Key file way too small.</source>
- <translation>金鑰檔案太小。</translation>
+ <translation>金鑰檔太小。</translation>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>金鑰檔案的魔術標頭 ID 無效</translation>
+ <translation>金鑰檔魔術標頭 ID 無效</translation>
</message>
<message>
<source>Found zero keys</source>
@@ -4871,7 +5115,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>金鑰檔案損壞,讀取私密金鑰失敗</translation>
+ <translation>金鑰檔損壞,讀取私密金鑰失敗</translation>
</message>
<message>
<source>No private key payload to decrypt</source>
@@ -4879,7 +5123,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Trying to run KDF without cipher</source>
- <translation>嘗試運行無密碼的 KDF</translation>
+ <translation>嘗試執行無密碼的 KDF</translation>
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
@@ -4907,7 +5151,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>編寫公開金鑰時出現意外的檔案結尾</translation>
+ <translation>寫入公開金鑰時出現意外的檔案結尾</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
@@ -4915,7 +5159,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>編寫私密金鑰時出現意外的檔案結尾</translation>
+ <translation>寫入私密金鑰時出現意外的檔案結尾</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
@@ -4927,11 +5171,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>加密的初始向量 (IV) 對 MD5 kdf 來說太短了</translation>
+ <translation>加密初始向量 (IV) 對 MD5 kdf 來說太短了</translation>
</message>
<message>
<source>Unknown KDF: %1</source>
- <translation>未知的金鑰推導函式 (KDF):%1</translation>
+ <translation>未知的 KDF:%1</translation>
</message>
<message>
<source>Unknown key type: %1</source>
@@ -4948,6 +5192,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Passwords match so far</source>
<translation>目前符合的密碼</translation>
</message>
+ <message>
+ <source>Toggle Password (%1)</source>
+ <translation>切換密碼 (%1)</translation>
+ </message>
+ <message>
+ <source>Generate Password (%1)</source>
+ <translation>生成密碼 (%1)</translation>
+ </message>
+ <message>
+ <source>Warning: Caps Lock enabled!</source>
+ <translation>警告:Caps Lock 已啟用!</translation>
+ </message>
</context>
<context>
<name>PasswordEditWidget</name>
@@ -4972,25 +5228,13 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>密碼不相符。</translation>
</message>
<message>
- <source>Generate master password</source>
- <translation>產生主密碼</translation>
- </message>
- <message>
<source>Password field</source>
<translation>密碼欄位</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>切換密碼可見性</translation>
- </message>
- <message>
<source>Repeat password field</source>
<translation>重複密碼欄位</translation>
</message>
- <message>
- <source>Toggle password generator</source>
- <translation>切換密碼產生器</translation>
- </message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -4999,10 +5243,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>%p%</translation>
</message>
<message>
- <source>Password:</source>
- <translation>密碼:</translation>
- </message>
- <message>
<source>strength</source>
<comment>Password strength</comment>
<translation>強度</translation>
@@ -5052,14 +5292,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>單詞分隔符號:</translation>
</message>
<message>
- <source>Copy</source>
- <translation>複製</translation>
- </message>
- <message>
- <source>Accept</source>
- <translation>接受</translation>
- </message>
- <message>
<source>Close</source>
<translation>關閉</translation>
</message>
@@ -5156,14 +5388,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
- <source>Switch to simple mode</source>
- <translation>切換至簡單模式</translation>
- </message>
- <message>
- <source>Simple</source>
- <translation>簡單</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>產生密碼時排除的字元集合</translation>
</message>
@@ -5184,14 +5408,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>排除以下字元:&quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
</message>
<message>
- <source>Word Co&amp;unt:</source>
- <translation>字數統計 (&amp;U):</translation>
- </message>
- <message>
- <source>Regenerate</source>
- <translation>重新產生</translation>
- </message>
- <message>
<source>Generated password</source>
<translation>已產生密碼</translation>
</message>
@@ -5240,10 +5456,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>複製密碼</translation>
</message>
<message>
- <source>Accept password</source>
- <translation>接受密碼</translation>
- </message>
- <message>
<source>lower case</source>
<translation>全部小寫</translation>
</message>
@@ -5256,8 +5468,44 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>首字母大寫</translation>
</message>
<message>
- <source>Toggle password visibility</source>
- <translation>切換密碼可見性</translation>
+ <source>Generate Password</source>
+ <translation>產生密碼</translation>
+ </message>
+ <message>
+ <source>Also choose from:</source>
+ <translation>也從此選擇:</translation>
+ </message>
+ <message>
+ <source>Additional characters to use for the generated password</source>
+ <translation>用於生成密碼的其他字元</translation>
+ </message>
+ <message>
+ <source>Additional characters</source>
+ <translation>其他字元</translation>
+ </message>
+ <message>
+ <source>Word Count:</source>
+ <translation>詞彙數:</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Apply Password</source>
+ <translation>套用密碼</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>清除</translation>
+ </message>
+ <message>
+ <source>Regenerate password (%1)</source>
+ <translation>重新生成密碼 (%1)</translation>
</message>
</context>
<context>
@@ -5270,6 +5518,58 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Statistics</source>
<translation>統計</translation>
</message>
+ <message>
+ <source>Very weak password</source>
+ <translation>極弱密碼</translation>
+ </message>
+ <message>
+ <source>Password entropy is %1 bits</source>
+ <translation>密碼熵值為 %1 位元</translation>
+ </message>
+ <message>
+ <source>Weak password</source>
+ <translation>弱密碼</translation>
+ </message>
+ <message>
+ <source>Used in %1/%2</source>
+ <translation>使用於 %1/%2</translation>
+ </message>
+ <message>
+ <source>Password is used %1 times</source>
+ <translation>密碼被使用 %1 次</translation>
+ </message>
+ <message>
+ <source>Password has expired</source>
+ <translation>密碼已過期</translation>
+ </message>
+ <message>
+ <source>Password expiry was %1</source>
+ <translation>密碼過期於 %1</translation>
+ </message>
+ <message>
+ <source>Password is about to expire</source>
+ <translation>密碼即將過期</translation>
+ </message>
+ <message>
+ <source>Password expires in %1 days</source>
+ <translation>密碼將於 %1 天後過期</translation>
+ </message>
+ <message>
+ <source>Password will expire soon</source>
+ <translation>密碼不久後將過期</translation>
+ </message>
+ <message>
+ <source>Password expires on %1</source>
+ <translation>密碼於 %1 過期</translation>
+ </message>
+ <message>
+ <source>Health Check</source>
+ <translation>健康檢查</translation>
+ </message>
+ <message>
+ <source>HIBP</source>
+ <translation>HIBP</translation>
+ </message>
</context>
<context>
<name>QMessageBox</name>
@@ -5287,7 +5587,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Empty</source>
- <translation>清空</translation>
+ <translation>空白</translation>
</message>
<message>
<source>Remove</source>
@@ -5350,7 +5650,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>No URL provided</source>
- <translation>未提供網址</translation>
+ <translation>未提供 URL</translation>
</message>
<message>
<source>No logins found</source>
@@ -5386,11 +5686,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>URL for the entry.</source>
- <translation>此項目的網址。</translation>
+ <translation>此項目的 URL。</translation>
</message>
<message>
<source>URL</source>
- <translation>網址</translation>
+ <translation>URL</translation>
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
@@ -5406,11 +5706,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Path of the entry to add.</source>
- <translation>欲加入的項目路徑。</translation>
- </message>
- <message>
- <source>Copy an entry&apos;s password to the clipboard.</source>
- <translation>將條目的密碼複製到剪貼簿。</translation>
+ <translation>要加入的項目路徑。</translation>
</message>
<message>
<source>Path of the entry to clip.</source>
@@ -5443,7 +5739,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Password for which to estimate the entropy.</source>
- <translation>用於估計資訊熵的密碼。</translation>
+ <translation>用於估計 entropy 的密碼。</translation>
</message>
<message>
<source>Perform advanced analysis on the password.</source>
@@ -5486,7 +5782,7 @@ Available commands:
</message>
<message>
<source>Search term.</source>
- <translation>搜尋字詞。</translation>
+ <translation>搜尋條件。</translation>
</message>
<message>
<source>Merge two databases.</source>
@@ -5498,7 +5794,7 @@ Available commands:
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation>對兩個資料庫檔案使用相同的憑證。</translation>
+ <translation>對兩個資料庫檔案使用相同的認證。</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
@@ -5554,7 +5850,7 @@ Available commands:
</message>
<message>
<source>Notes</source>
- <translation>附註</translation>
+ <translation>備註</translation>
</message>
<message>
<source>Last Modified</source>
@@ -5569,14 +5865,6 @@ Available commands:
<translation>瀏覽器整合</translation>
</message>
<message>
- <source>Press</source>
- <translation>按</translation>
- </message>
- <message>
- <source>Passive</source>
- <translation>被動</translation>
- </message>
- <message>
<source>SSH Agent</source>
<translation>SSH 代理</translation>
</message>
@@ -5586,7 +5874,7 @@ Available commands:
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>Diceware 密碼短語字數統計。</translation>
+ <translation>Diceware 密碼短語字數統計</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
@@ -5604,7 +5892,7 @@ Available commands:
</message>
<message>
<source>Enter password for new entry: </source>
- <translation>為新項目輸入密碼: </translation>
+ <translation>為新項目輸入密碼:</translation>
</message>
<message>
<source>Writing the database failed %1.</source>
@@ -5615,10 +5903,6 @@ Available commands:
<translation>成功加入項目 %1。</translation>
</message>
<message>
- <source>Copy the current TOTP to the clipboard.</source>
- <translation>複製目前 TOTP 至剪貼簿。</translation>
- </message>
- <message>
<source>Invalid timeout value %1.</source>
<translation>無效的超時值 %1。</translation>
</message>
@@ -5630,14 +5914,6 @@ Available commands:
<source>Entry with path %1 has no TOTP set up.</source>
<translation>路徑為 %1 的項目未設定 TOTP。</translation>
</message>
- <message>
- <source>Entry&apos;s current TOTP copied to the clipboard!</source>
- <translation>已複製項目目前的 TOTP 到剪貼簿!</translation>
- </message>
- <message>
- <source>Entry&apos;s password copied to the clipboard!</source>
- <translation>已複製項目密碼到剪貼簿!</translation>
- </message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
<translation><numerusform>將於 %1 秒後清空剪貼簿...</numerusform></translation>
@@ -5665,7 +5941,7 @@ Available commands:
</message>
<message>
<source>Enter new password for entry: </source>
- <translation>為項目輸入新密碼: </translation>
+ <translation>為項目輸入新密碼:</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
@@ -5681,7 +5957,7 @@ Available commands:
</message>
<message>
<source>Entropy %1</source>
- <translation>熵值 %1</translation>
+ <translation>熵值</translation>
</message>
<message>
<source>Log10 %1</source>
@@ -5693,7 +5969,7 @@ Available commands:
</message>
<message>
<source>Type: Bruteforce</source>
- <translation>類型:暴力破解</translation>
+ <translation>類型:暴力</translation>
</message>
<message>
<source>Type: Dictionary</source>
@@ -5737,7 +6013,7 @@ Available commands:
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>類型:字典+名單(重複)</translation>
+ <translation>(重複)</translation>
</message>
<message>
<source>Type: User Words(Rep)</source>
@@ -5797,11 +6073,11 @@ Available commands:
</message>
<message>
<source>Use extended ASCII</source>
- <translation>使用延伸 ASCII</translation>
+ <translation> 使用延伸 ASCII 碼</translation>
</message>
<message>
<source>Exclude character set</source>
- <translation>排除的字元集合</translation>
+ <translation>排除的字元組合</translation>
</message>
<message>
<source>chars</source>
@@ -5858,10 +6134,6 @@ Available commands:
<translation>沒有為剪貼簿操作定義程式</translation>
</message>
<message>
- <source>Unable to start program %1</source>
- <translation>無法開啟程式 %1</translation>
- </message>
- <message>
<source>file empty</source>
<translation>檔案為空</translation>
</message>
@@ -5870,18 +6142,6 @@ Available commands:
<translation>%1: (列, 行) %2,%3</translation>
</message>
<message>
- <source>AES: 256-bit</source>
- <translation>AES: 256 位元</translation>
- </message>
- <message>
- <source>Twofish: 256-bit</source>
- <translation>Twofish: 256 位元</translation>
- </message>
- <message>
- <source>ChaCha20: 256-bit</source>
- <translation>ChaCha20: 256 位元</translation>
- </message>
- <message>
<source>Argon2 (KDBX 4 – recommended)</source>
<translation>Argon2 (KDBX 4 – 推薦)</translation>
</message>
@@ -5929,7 +6189,7 @@ Available commands:
</message>
<message>
<source>Failed to save the database: %1.</source>
- <translation>儲存資料庫失敗:%1。</translation>
+ <translation>儲存資料庫失敗:%1</translation>
</message>
<message>
<source>Successfully created new database.</source>
@@ -5949,7 +6209,7 @@ Available commands:
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation>現有的單實例鎖定檔案無效。正在啟動新實例。</translation>
+ <translation>現有的單實例鎖定檔無效。正在啟動新實例。</translation>
</message>
<message>
<source>The lock file could not be created. Single-instance mode disabled.</source>
@@ -5965,7 +6225,7 @@ Available commands:
</message>
<message>
<source>path to a custom config file</source>
- <translation>自訂設定檔案的路徑</translation>
+ <translation>自定義設定檔的路徑</translation>
</message>
<message>
<source>key file of the database</source>
@@ -5973,7 +6233,7 @@ Available commands:
</message>
<message>
<source>read password of the database from stdin</source>
- <translation>從標準輸入 (stdin) 讀取資料庫密碼</translation>
+ <translation>從 stdin 讀取資料庫密碼</translation>
</message>
<message>
<source>Parent window handle</source>
@@ -5985,7 +6245,7 @@ Available commands:
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
- <translation>測試加密函式時發生重大錯誤。</translation>
+ <translation>測試加密函數時發生重大錯誤。</translation>
</message>
<message>
<source>KeePassXC - Error</source>
@@ -5993,7 +6253,7 @@ Available commands:
</message>
<message>
<source>Database password: </source>
- <translation>資料庫密碼: </translation>
+ <translation>資料庫密碼:</translation>
</message>
<message>
<source>Cannot create new group</source>
@@ -6089,7 +6349,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Path of the group to add.</source>
- <translation>欲加入的群組路徑。</translation>
+ <translation>要加入的群組路徑。</translation>
</message>
<message>
<source>Group %1 already exists!</source>
@@ -6132,12 +6392,8 @@ Kernel: %3 %4</source>
<translation>顯示此幫助。</translation>
</message>
<message>
- <source>Yubikey slot used to encrypt the database.</source>
- <translation>用來加密資料庫的 Yubikey 插槽。</translation>
- </message>
- <message>
<source>slot</source>
- <translation>插槽</translation>
+ <translation>槽位</translation>
</message>
<message>
<source>Invalid word count %1</source>
@@ -6152,10 +6408,6 @@ Kernel: %3 %4</source>
<translation>離開互動模式。</translation>
</message>
<message>
- <source>Format to use when exporting. Available choices are xml or csv. Defaults to xml.</source>
- <translation>匯出時使用的格式。可用選項為 xml 或 csv。預設為 xml。</translation>
- </message>
- <message>
<source>Exports the content of a database to standard output in the specified format.</source>
<translation>以指定格式匯出資料庫內容至標準輸出。</translation>
</message>
@@ -6196,10 +6448,6 @@ Kernel: %3 %4</source>
<translation>新資料庫的路徑。</translation>
</message>
<message>
- <source>Unable to import XML database export %1</source>
- <translation>無法匯入 XML 資料庫匯出 %1</translation>
- </message>
- <message>
<source>Successfully imported database.</source>
<translation>成功匯入資料庫。</translation>
</message>
@@ -6217,7 +6465,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Yubikey slot for the second database.</source>
- <translation>第二資料庫的 Yubikey 插槽。</translation>
+ <translation>第二資料庫的 Yubikey 槽位。</translation>
</message>
<message>
<source>Successfully merged %1 into %2.</source>
@@ -6289,11 +6537,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Invalid YubiKey slot %1</source>
- <translation>無效的 YubiKey 插槽 %1</translation>
- </message>
- <message>
- <source>Please touch the button on your YubiKey to unlock %1</source>
- <translation>請接觸您的 YubiKey 上面的按鈕以解鎖 %1</translation>
+ <translation>無效的 YubiKey 槽位 %1</translation>
</message>
<message>
<source>Enter password to encrypt database (optional): </source>
@@ -6305,16 +6549,12 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Secret Service Integration</source>
- <translation>秘密服務整合</translation>
+ <translation>保密服務整合</translation>
</message>
<message>
<source>User name</source>
<translation>使用者名稱</translation>
</message>
- <message>
- <source>%1[%2] Challenge Response - Slot %3 - %4</source>
- <translation>%1[%2] 挑戰應答 - 插槽 %3 - %4</translation>
- </message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation><numerusform>「%1」的密碼已被泄露 %2 次!</numerusform></translation>
@@ -6327,28 +6567,216 @@ Kernel: %3 %4</source>
<source>Show the protected attributes in clear text.</source>
<translation>以明文顯示被保護的屬性。</translation>
</message>
+ <message>
+ <source>Browser Plugin Failure</source>
+ <translation>瀏覽器插件失敗</translation>
+ </message>
+ <message>
+ <source>Could not save the native messaging script file for %1.</source>
+ <translation>無法為 %1 保存本地消息指令檔案。</translation>
+ </message>
+ <message>
+ <source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
+ <translation>複製給定屬性至剪貼簿。若未指定則預設為 &quot;password&quot;。</translation>
+ </message>
+ <message>
+ <source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
+ <translation>複製目前的 TOTP 至剪貼簿(等同於 &quot;-a totp&quot;)。</translation>
+ </message>
+ <message>
+ <source>Copy an entry&apos;s attribute to the clipboard.</source>
+ <translation>複製項目屬性至剪貼簿。</translation>
+ </message>
+ <message>
+ <source>ERROR: Please specify one of --attribute or --totp, not both.</source>
+ <translation>錯誤:請擇一指定 --attribute 或 --totp,不可同時使用。</translation>
+ </message>
+ <message>
+ <source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
+ <translation>錯誤:屬性 %1 有歧義,符合 %2。</translation>
+ </message>
+ <message>
+ <source>Attribute &quot;%1&quot; not found.</source>
+ <translation>找不到屬性「%1」。</translation>
+ </message>
+ <message>
+ <source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
+ <translation>項目的「%1」屬性已複製到剪貼簿!</translation>
+ </message>
+ <message>
+ <source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
+ <translation>Yubikey 槽位以及選用序號,用來存取資料庫(例如 1:7370001)。</translation>
+ </message>
+ <message>
+ <source>slot[:serial]</source>
+ <translation>槽位[:序號]</translation>
+ </message>
+ <message>
+ <source>Target decryption time in MS for the database.</source>
+ <translation>資料庫的目標解密時間,以「毫秒」計算。</translation>
+ </message>
+ <message>
+ <source>time</source>
+ <translation>時間</translation>
+ </message>
+ <message>
+ <source>Set the key file for the database.</source>
+ <translation>設定資料庫的金鑰檔。</translation>
+ </message>
+ <message>
+ <source>Set a password for the database.</source>
+ <translation>設定資料庫的密碼。</translation>
+ </message>
+ <message>
+ <source>Invalid decryption time %1.</source>
+ <translation>無效的解密時間 %1。</translation>
+ </message>
+ <message>
+ <source>Target decryption time must be between %1 and %2.</source>
+ <translation>目標解密時間必須落在 %1 與 %2 之間。</translation>
+ </message>
+ <message>
+ <source>Failed to set database password.</source>
+ <translation>設定資料庫密碼失敗。</translation>
+ </message>
+ <message>
+ <source>Benchmarking key derivation function for %1ms delay.</source>
+ <translation>效能測試:金鑰推導函式於 %1 毫秒的延遲。</translation>
+ </message>
+ <message>
+ <source>Setting %1 rounds for key derivation function.</source>
+ <translation>為金鑰推導函式設定 %1 個回合。</translation>
+ </message>
+ <message>
+ <source>error while setting database key derivation settings.</source>
+ <translation>進行金鑰推導函式設定時出錯。</translation>
+ </message>
+ <message>
+ <source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
+ <translation>匯出所用的格式。可用選項為 &apos;xml&apos; 或 &apos;csv&apos;。預設為 &apos;xml&apos;。</translation>
+ </message>
+ <message>
+ <source>Unable to import XML database: %1</source>
+ <translation>無法匯入 XML 資料庫: %1</translation>
+ </message>
+ <message>
+ <source>Show a database&apos;s information.</source>
+ <translation>顯示資料庫資訊。</translation>
+ </message>
+ <message>
+ <source>UUID: </source>
+ <translation>UUID:</translation>
+ </message>
+ <message>
+ <source>Name: </source>
+ <translation>名稱:</translation>
+ </message>
+ <message>
+ <source>Description: </source>
+ <translation>描述:</translation>
+ </message>
+ <message>
+ <source>Cipher: </source>
+ <translation>加密法:</translation>
+ </message>
+ <message>
+ <source>KDF: </source>
+ <translation>KDF:</translation>
+ </message>
+ <message>
+ <source>Recycle bin is enabled.</source>
+ <translation>回收桶已啟用。</translation>
+ </message>
+ <message>
+ <source>Recycle bin is not enabled.</source>
+ <translation>回收桶尚未啟用。</translation>
+ </message>
+ <message>
+ <source>Invalid command %1.</source>
+ <translation>無效的指令 %1。</translation>
+ </message>
+ <message>
+ <source>Invalid YubiKey serial %1</source>
+ <translation>無效的 YubiKey 序號 %1</translation>
+ </message>
+ <message>
+ <source>Please touch the button on your YubiKey to continue…</source>
+ <translation>請接觸您 YubiKey 上的按鈕以繼續…</translation>
+ </message>
+ <message>
+ <source>Do you want to create a database with an empty password? [y/N]: </source>
+ <translation>是否要建立使用空密碼的資料庫? [y/N]: </translation>
+ </message>
+ <message>
+ <source>Repeat password: </source>
+ <translation>重複密碼:</translation>
+ </message>
+ <message>
+ <source>Error: Passwords do not match.</source>
+ <translation>錯誤:密碼不符合。</translation>
+ </message>
+ <message>
+ <source>All clipping programs failed. Tried %1
+</source>
+ <translation>所有複製程式皆失敗。嘗試 %1
+</translation>
+ </message>
+ <message>
+ <source>AES (%1 rounds)</source>
+ <translation>AES (%1 個回合)</translation>
+ </message>
+ <message>
+ <source>Argon2 (%1 rounds, %2 KB)</source>
+ <translation>Argon2 (%1 個回合, %2 KB)</translation>
+ </message>
+ <message>
+ <source>AES 256-bit</source>
+ <translation>AES 256-bit</translation>
+ </message>
+ <message>
+ <source>Twofish 256-bit</source>
+ <translation>Twofish 256-bit</translation>
+ </message>
+ <message>
+ <source>ChaCha20 256-bit</source>
+ <translation>ChaCha20 256-bit</translation>
+ </message>
+ <message>
+ <source>Benchmark %1 delay</source>
+ <translation>效能測試 %1 延遲</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 ms</source>
+ <comment>milliseconds</comment>
+ <translation><numerusform>%1 毫秒</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 s</source>
+ <comment>seconds</comment>
+ <translation><numerusform>%1 秒</numerusform></translation>
+ </message>
</context>
<context>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
- <translation>進行壓縮時,內部 zlib 發生錯誤: </translation>
+ <translation>壓縮時出現內部 zlib 錯誤: </translation>
</message>
<message>
<source>Error writing to underlying device: </source>
- <translation>寫入底層裝置時出錯: </translation>
+ <translation>寫入底層裝置時出錯: </translation>
</message>
<message>
<source>Error opening underlying device: </source>
- <translation>開啟底層裝置時出錯: </translation>
+ <translation>開啟底層裝置時出錯: </translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
- <translation>讀取底層裝置時出錯: </translation>
+ <translation>從底層裝置讀取資料時出錯: </translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
- <translation>進行解壓縮時,內部 zlib 發生錯誤: </translation>
+ <translation>解壓縮時出現內部 zlib 錯誤: </translation>
</message>
</context>
<context>
@@ -6359,7 +6787,291 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Internal zlib error: </source>
- <translation>內部 zlib 發生錯誤: </translation>
+ <translation>內部 zlib 錯誤: </translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHealthcheck</name>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>也顯示已從報告排除的項目</translation>
+ </message>
+ <message>
+ <source>Hover over reason to show additional details. Double-click entries to edit.</source>
+ <translation>將游標懸浮於原因以顯示額外詳情。雙擊項目可編輯。</translation>
+ </message>
+ <message>
+ <source>Bad</source>
+ <comment>Password quality</comment>
+ <translation>糟糕</translation>
+ </message>
+ <message>
+ <source>Bad — password must be changed</source>
+ <translation>糟糕 — 密碼必須更改</translation>
+ </message>
+ <message>
+ <source>Poor</source>
+ <comment>Password quality</comment>
+ <translation>極弱</translation>
+ </message>
+ <message>
+ <source>Poor — password should be changed</source>
+ <translation>極弱 — 密碼應該更改</translation>
+ </message>
+ <message>
+ <source>Weak</source>
+ <comment>Password quality</comment>
+ <translation>較弱</translation>
+ </message>
+ <message>
+ <source>Weak — consider changing the password</source>
+ <translation>較弱 — 可考慮更改密碼</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (已排除)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>此項目已從報告排除</translation>
+ </message>
+ <message>
+ <source>Please wait, health data is being calculated...</source>
+ <translation>請稍候,正在計算健康資料...</translation>
+ </message>
+ <message>
+ <source>Congratulations, everything is healthy!</source>
+ <translation>恭喜,所有項目皆正常!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>標題</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>路徑</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>分數</translation>
+ </message>
+ <message>
+ <source>Reason</source>
+ <translation>原因</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>編輯項目...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>從報告排除</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetHibp</name>
+ <message>
+ <source>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</source>
+ <translation>注意:此報告需要傳送資訊至 Have I Been Pwned 線上服務 (https://haveibeenpwned.com)。若您選擇繼續,將計算您資料庫內密碼的加密雜湊值,並以安全連線傳送雜湊值前五個字元至此服務。從傳送資料沒辦法推算您的密碼,您的資料庫將安全無虞。但是,您傳送的密碼總數以及 IP 位址將會暴露給此服務。</translation>
+ </message>
+ <message>
+ <source>Perform Online Analysis</source>
+ <translation>執行線上分析</translation>
+ </message>
+ <message>
+ <source>Also show entries that have been excluded from reports</source>
+ <translation>也顯示已從報告排除的項目</translation>
+ </message>
+ <message>
+ <source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
+ <translation>此 KeePassXC 建置版本未包含網路功能。需要網路功能才能向 Have I Been Pwned 資料庫檢查您的密碼。</translation>
+ </message>
+ <message>
+ <source>Congratulations, no exposed passwords!</source>
+ <translation>恭喜,沒有任何泄露的密碼!</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>標題</translation>
+ </message>
+ <message>
+ <source>Path</source>
+ <translation>路徑</translation>
+ </message>
+ <message>
+ <source>Password exposed…</source>
+ <translation>已泄露的密碼…</translation>
+ </message>
+ <message>
+ <source> (Excluded)</source>
+ <translation> (已排除)</translation>
+ </message>
+ <message>
+ <source>This entry is being excluded from reports</source>
+ <translation>此項目已從報告排除</translation>
+ </message>
+ <message>
+ <source>once</source>
+ <translation>一次</translation>
+ </message>
+ <message>
+ <source>up to 10 times</source>
+ <translation>多達 10 次</translation>
+ </message>
+ <message>
+ <source>up to 100 times</source>
+ <translation>多達 100 次</translation>
+ </message>
+ <message>
+ <source>up to 1000 times</source>
+ <translation>多達 1000 次</translation>
+ </message>
+ <message>
+ <source>up to 10,000 times</source>
+ <translation>多達 10,000 次</translation>
+ </message>
+ <message>
+ <source>up to 100,000 times</source>
+ <translation>多達 100,000 次</translation>
+ </message>
+ <message>
+ <source>up to a million times</source>
+ <translation>多達一百萬次</translation>
+ </message>
+ <message>
+ <source>millions of times</source>
+ <translation>數百萬次</translation>
+ </message>
+ <message>
+ <source>Edit Entry...</source>
+ <translation>編輯項目...</translation>
+ </message>
+ <message>
+ <source>Exclude from reports</source>
+ <translation>從報告排除</translation>
+ </message>
+</context>
+<context>
+ <name>ReportsWidgetStatistics</name>
+ <message>
+ <source>Hover over lines with error icons for further information.</source>
+ <translation>將游標懸浮於錯誤圖示出現的欄位,可獲得更多資訊。</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>名稱</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>值</translation>
+ </message>
+ <message>
+ <source>Please wait, database statistics are being calculated...</source>
+ <translation>請稍候,正在計算並統計資料庫數據...</translation>
+ </message>
+ <message>
+ <source>Database name</source>
+ <translation>資料庫名稱</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>描述</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>位置</translation>
+ </message>
+ <message>
+ <source>Last saved</source>
+ <translation>最近儲存於</translation>
+ </message>
+ <message>
+ <source>Unsaved changes</source>
+ <translation>未儲存變更</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>是</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>否</translation>
+ </message>
+ <message>
+ <source>The database was modified, but the changes have not yet been saved to disk.</source>
+ <translation>資料庫已被更改,但變更尚未被儲存至磁碟。</translation>
+ </message>
+ <message>
+ <source>Number of groups</source>
+ <translation>群組數</translation>
+ </message>
+ <message>
+ <source>Number of entries</source>
+ <translation>項目數</translation>
+ </message>
+ <message>
+ <source>Number of expired entries</source>
+ <translation>已過期項目數</translation>
+ </message>
+ <message>
+ <source>The database contains entries that have expired.</source>
+ <translation>資料庫包含已過期的項目。</translation>
+ </message>
+ <message>
+ <source>Unique passwords</source>
+ <translation>獨特的密碼</translation>
+ </message>
+ <message>
+ <source>Non-unique passwords</source>
+ <translation>非獨特的密碼</translation>
+ </message>
+ <message>
+ <source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
+ <translation>超過 10% 的密碼被重複使用。請盡可能使用獨一無二的密碼。</translation>
+ </message>
+ <message>
+ <source>Maximum password reuse</source>
+ <translation>最大密碼重複使用次數</translation>
+ </message>
+ <message>
+ <source>Some passwords are used more than three times. Use unique passwords when possible.</source>
+ <translation>某些密碼被使用超過三次以上。請盡可能使用獨一無二的密碼。</translation>
+ </message>
+ <message>
+ <source>Number of short passwords</source>
+ <translation>過短密碼數</translation>
+ </message>
+ <message>
+ <source>Recommended minimum password length is at least 8 characters.</source>
+ <translation>建議最短密碼長度為至少 8 個字元。</translation>
+ </message>
+ <message>
+ <source>Number of weak passwords</source>
+ <translation>弱密碼數</translation>
+ </message>
+ <message>
+ <source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
+ <translation>建議使用足夠長度、亂度,且評價為「較好」或「極好」的密碼。</translation>
+ </message>
+ <message>
+ <source>Entries excluded from reports</source>
+ <translation>從報告排除的項目</translation>
+ </message>
+ <message>
+ <source>Excluding entries from reports, e. g. because they are known to have a poor password, isn&apos;t necessarily a problem but you should keep an eye on them.</source>
+ <translation>從報告排除項目(比如說,密碼較弱也沒關係)不一定會造成問題,但是,您仍應該不時留意這些項目。</translation>
+ </message>
+ <message>
+ <source>Average password length</source>
+ <translation>平均密碼長度</translation>
+ </message>
+ <message>
+ <source>%1 characters</source>
+ <translation>%1 字元</translation>
+ </message>
+ <message>
+ <source>Average password length is less than ten characters. Longer passwords provide more security.</source>
+ <translation>平均密碼長度小於 10 個字元。密碼越長,能提供的保護越多。</translation>
</message>
</context>
<context>
@@ -6374,11 +7086,11 @@ Kernel: %3 %4</source>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>代理未執行,無法加入身份。</translation>
+ <translation>代理尚未執行,無法加入身份。</translation>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>代理未執行,無法移除身份。</translation>
+ <translation>代理尚未執行,無法移除身份。</translation>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
@@ -6396,6 +7108,14 @@ Kernel: %3 %4</source>
<source>A confirmation request is not supported by the agent (check options).</source>
<translation>代理並未支援確認請求(請檢查選項)。</translation>
</message>
+ <message>
+ <source>Key identity ownership conflict. Refusing to add.</source>
+ <translation>金鑰身份擁有權發生衝突。拒絕加入。</translation>
+ </message>
+ <message>
+ <source>No agent running, cannot list identities.</source>
+ <translation>代理尚未執行,無法列舉身份。</translation>
+ </message>
</context>
<context>
<name>SearchHelpWidget</name>
@@ -6425,7 +7145,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>use regex in term</source>
- <translation>在條件中使用正規表示式 (regex)</translation>
+ <translation>條件使用 regex 正規表示式</translation>
</message>
<message>
<source>Fields</source>
@@ -6488,90 +7208,54 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Enable KeepassXC Freedesktop.org Secret Service integration</source>
- <translation>啟用 KeepassXC 與 Freedesktop.org 秘密服務 (Secret Service) 的整合</translation>
+ <translation>啟用 KeepassXC 與 Freedesktop.org 保密服務的整合</translation>
</message>
<message>
<source>General</source>
- <translation>一般</translation>
+ <translation>通用</translation>
</message>
<message>
<source>Show notification when credentials are requested</source>
- <translation>請求憑證時顯示通知</translation>
+ <translation>要求憑證時顯示通知</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;若資料庫內的回收桶已經啟用,項目會直接被移至回收桶。否則,項目將會被刪除且不做任何確認。&lt;/p&gt;&lt;p&gt;若有項目被其他項目引用,您仍將會收到通知。&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Don&apos;t confirm when entries are deleted by clients.</source>
- <translation>當項目被客戶端刪除時,不進行確認。</translation>
- </message>
- <message>
<source>Exposed database groups:</source>
<translation>開放的資料庫群組:</translation>
</message>
<message>
- <source>File Name</source>
- <translation>檔案名稱</translation>
- </message>
- <message>
- <source>Group</source>
- <translation>群組</translation>
- </message>
- <message>
- <source>Manage</source>
- <translation>管理</translation>
- </message>
- <message>
<source>Authorization</source>
<translation>認證</translation>
</message>
<message>
<source>These applications are currently connected:</source>
- <translation>這些應用程式目前已連線:</translation>
+ <translation>目前已連結的應用程式:</translation>
</message>
<message>
- <source>Application</source>
- <translation>應用程式</translation>
+ <source>Don&apos;t confirm when entries are deleted by clients</source>
+ <translation>項目被客戶端刪除時不做確認</translation>
</message>
<message>
- <source>Disconnect</source>
- <translation>中斷連線</translation>
+ <source>&lt;b&gt;Error:&lt;/b&gt; Failed to connect to DBus. Please check your DBus setup.</source>
+ <translation>&lt;b&gt;錯誤:&lt;/b&gt;連接 DBus 失敗。請檢查您的 DBus 設定。</translation>
</message>
<message>
- <source>Database settings</source>
- <translation>資料庫設定</translation>
+ <source>&lt;b&gt;Warning:&lt;/b&gt; </source>
+ <translation>&lt;b&gt;警告:&lt;/b&gt; </translation>
</message>
<message>
- <source>Edit database settings</source>
- <translation>編輯資料庫設定</translation>
- </message>
- <message>
- <source>Unlock database</source>
- <translation>解鎖資料庫</translation>
- </message>
- <message>
- <source>Unlock database to show more information</source>
- <translation>解鎖資料庫以顯示更多資訊</translation>
- </message>
- <message>
- <source>Lock database</source>
- <translation>鎖定資料庫</translation>
- </message>
- <message>
- <source>Unlock to show</source>
- <translation>解鎖以顯示</translation>
- </message>
- <message>
- <source>None</source>
- <translation>無</translation>
+ <source>Save current changes to activate the plugin and enable editing of this section.</source>
+ <translation>儲存目前變更,以啟用插件並編輯此區域。</translation>
</message>
</context>
<context>
<name>SettingsWidgetKeeShare</name>
<message>
<source>Active</source>
- <translation>啟用項</translation>
+ <translation>作用項</translation>
</message>
<message>
<source>Allow export</source>
@@ -6655,7 +7339,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Untrusted</source>
- <translation>不可信任</translation>
+ <translation>不信任</translation>
</message>
<message>
<source>Unknown</source>
@@ -6668,7 +7352,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>KeeShare key file</source>
- <translation>KeeShare 金鑰檔案</translation>
+ <translation>KeeShare 金鑰檔</translation>
</message>
<message>
<source>All files</source>
@@ -6716,7 +7400,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Import existing certificate</source>
- <translation>匯入已存證書</translation>
+ <translation>匯入既存證書</translation>
</message>
<message>
<source>Export own certificate</source>
@@ -6747,7 +7431,7 @@ Kernel: %3 %4</source>
<name>ShareExport</name>
<message>
<source>Overwriting signed share container is not supported - export prevented</source>
- <translation>不支援覆寫已簽署的分享容器 — 匯出已阻止</translation>
+ <translation>不支援覆寫已簽署的分享容器 - 匯出已阻止</translation>
</message>
<message>
<source>Could not write export container (%1)</source>
@@ -6771,7 +7455,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation>不支援覆寫未簽署的分享容器 — 匯出已阻止</translation>
+ <translation>不支援覆寫未簽署的分享容器 - 匯出已阻止</translation>
</message>
<message>
<source>Could not write export container</source>
@@ -6779,7 +7463,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Unexpected export error occurred</source>
- <translation>出現未預期的錯誤</translation>
+ <translation>出現未預期的匯出錯誤</translation>
</message>
</context>
<context>
@@ -6790,7 +7474,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
- <translation>我們無法確認分享容器的來源,因為它未被簽署過。真的要從 %1 匯入嗎?</translation>
+ <translation>我們無法確認分享容器的來源,因為它未被簽署過。真的要從 %1 匯入?</translation>
</message>
<message>
<source>Import from container with certificate</source>
@@ -6818,7 +7502,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Signed share container are not supported - import prevented</source>
- <translation>不支援已簽署的分享容器 — 匯入已阻止</translation>
+ <translation>不支援已簽署的分享容器 - 匯入已阻止</translation>
</message>
<message>
<source>File is not readable</source>
@@ -6837,12 +7521,8 @@ Kernel: %3 %4</source>
<translation>簽署已成功匯入</translation>
</message>
<message>
- <source>Unexpected error</source>
- <translation>未預期的錯誤</translation>
- </message>
- <message>
<source>Unsigned share container are not supported - import prevented</source>
- <translation>不支援未簽署的分享容器 — 匯入已阻止</translation>
+ <translation>不支援未簽署的分享容器 - 匯入已阻止</translation>
</message>
<message>
<source>Successful unsigned import</source>
@@ -6924,7 +7604,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation>建立 QR 碼時發生錯誤。</translation>
+ <translation>建立 QR 碼時出現錯誤。</translation>
</message>
<message>
<source>Closing in %1 seconds.</source>
@@ -6947,11 +7627,11 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Use custom settings</source>
- <translation>使用自訂設定</translation>
+ <translation>使用自定義設定</translation>
</message>
<message>
<source>Custom Settings</source>
- <translation>自訂設定</translation>
+ <translation>自定義設定</translation>
</message>
<message>
<source>Time step:</source>
@@ -6984,7 +7664,7 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Time step field</source>
- <translation>時間間隔</translation>
+ <translation>時間間隔欄位</translation>
</message>
<message>
<source> digits</source>
@@ -7006,7 +7686,14 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
- <translation>真的要刪除此項目的 TOTP 設定?</translation>
+ <translation>您確定要刪除此項目的 TOTP 設定?</translation>
+ </message>
+</context>
+<context>
+ <name>URLEdit</name>
+ <message>
+ <source>Invalid URL</source>
+ <translation>無效的 URL</translation>
</message>
</context>
<context>
@@ -7029,7 +7716,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
- <translation>接收更新資訊時發生錯誤。</translation>
+ <translation>接收更新資訊時出錯。</translation>
</message>
<message>
<source>Please try again later.</source>
@@ -7045,7 +7732,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation>KeePassXC %1 可供使用 — 目前版本為 %2。</translation>
+ <translation>KeePassXC %1 可供使用 — 您的版本為 %2。</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
@@ -7057,18 +7744,18 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
- <translation>KeePassXC %1 為目前可用最新版本</translation>
+ <translation>KeePassXC %1 目前為最新版本</translation>
</message>
</context>
<context>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>開始安全的保存你的密碼到 KeePassXC 資料庫</translation>
+ <translation>從現在開始,將您的密碼安全地保存到 KeePassXC 資料庫</translation>
</message>
<message>
<source>Create new database</source>
- <translation>建立新的資料庫</translation>
+ <translation>建立新資料庫</translation>
</message>
<message>
<source>Open existing database</source>
@@ -7100,6 +7787,53 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
</context>
<context>
+ <name>YubiKey</name>
+ <message>
+ <source>%1 [%2] Configured Slot - %3</source>
+ <translation>%1 [%2] 設定槽位 - %3</translation>
+ </message>
+ <message>
+ <source>%1 [%2] Challenge Response - Slot %3 - %4</source>
+ <translation>%1 [%2] 挑戰應答 - 槽位 %3 - %4</translation>
+ </message>
+ <message>
+ <source>Press</source>
+ <translation>按下</translation>
+ </message>
+ <message>
+ <source>Passive</source>
+ <translation>被動</translation>
+ </message>
+ <message>
+ <source>%1 Invalid slot specified - %2</source>
+ <translation>%1 無效的指定槽位 - %2</translation>
+ </message>
+ <message>
+ <source>The YubiKey interface has not been initialized.</source>
+ <translation>YubiKey 介面尚未初始化。</translation>
+ </message>
+ <message>
+ <source>Hardware key is currently in use.</source>
+ <translation>硬體金鑰目前正在使用當中。</translation>
+ </message>
+ <message>
+ <source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
+ <translation>找不到流水號為 %1 的硬體金鑰。請插入後繼續。</translation>
+ </message>
+ <message>
+ <source>Hardware key timed out waiting for user interaction.</source>
+ <translation>硬體金鑰等待使用者互動超時。</translation>
+ </message>
+ <message>
+ <source>A USB error ocurred when accessing the hardware key: %1</source>
+ <translation>存取硬體金鑰時出現 USB 錯誤:%1</translation>
+ </message>
+ <message>
+ <source>Failed to complete a challenge-response, the specific error was: %1</source>
+ <translation>無法完成挑戰應答,具體錯誤為:%1</translation>
+ </message>
+</context>
+<context>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
@@ -7111,23 +7845,31 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
- <translation>&lt;p&gt;若您擁有&lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;,您可以使用它以獲得額外保護。&lt;/p&gt;&lt;p&gt;YubiKey 要求將其中一個插槽編程為 &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 挑戰應答&lt;/a&gt;。&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;若您擁有&lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;,可以用它獲得額外保護。&lt;/p&gt;&lt;p&gt;需要將 YubiKey 其中一個槽位設置為 &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 挑戰應答&lt;/a&gt;。&lt;/p&gt;</translation>
</message>
<message>
- <source>No YubiKey detected, please ensure it&apos;s plugged in.</source>
- <translation>未偵測到 YubiKey,請確認是否插入裝置。</translation>
+ <source>Refresh hardware tokens</source>
+ <translation>更新硬體令牌</translation>
</message>
<message>
- <source>No YubiKey inserted.</source>
- <translation>YubiKey 尚未接入。</translation>
+ <source>Hardware key slot selection</source>
+ <translation>硬體金鑰槽位選擇</translation>
</message>
<message>
- <source>Refresh hardware tokens</source>
- <translation>更新硬體令牌</translation>
+ <source>Could not find any hardware keys!</source>
+ <translation>找不到任何硬體金鑰!</translation>
</message>
<message>
- <source>Hardware key slot selection</source>
- <translation>硬體金鑰插槽選擇</translation>
+ <source>Selected hardware key slot does not support challenge-response!</source>
+ <translation>所選的硬體金鑰槽位不支援挑戰應答!</translation>
+ </message>
+ <message>
+ <source>Detecting hardware keys…</source>
+ <translation>偵測硬體金鑰…</translation>
+ </message>
+ <message>
+ <source>No hardware keys detected</source>
+ <translation>未偵測到硬體金鑰</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/share/translations/update.sh b/share/translations/update.sh
index c8b7da40c..fab07fb00 100755
--- a/share/translations/update.sh
+++ b/share/translations/update.sh
@@ -53,12 +53,17 @@ if $UPDATE; then
fi
if $PUSH; then
- echo "Pushing English source files to Transifex..."
+ echo "Pushing source files to Transifex..."
tx push -s $@
echo
fi
if $PULL; then
+ echo "Removing stale translations..."
+ mv share/translations/keepassx_en.ts share/translations/keepassx_en.ts.bak
+ rm share/translations/*.ts
+ mv share/translations/keepassx_en.ts.bak share/translations/keepassx_en.ts
+
echo "Pulling translations from Transifex..."
tx pull -af --minimum-perc=40 $@
echo
diff --git a/share/windows/KPXC_ExitDlg.wxs b/share/windows/KPXC_ExitDlg.wxs
new file mode 100644
index 000000000..0ed4d3e8a
--- /dev/null
+++ b/share/windows/KPXC_ExitDlg.wxs
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
+
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI>
+ <Dialog Id="KPXC_ExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
+ <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.WixUIFinish)" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUICancel)" />
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.ExitDialogBitmap)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogDescription)" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogTitle)" />
+ <!-- Custom Controls for KPXC Installer -->
+ <Control Id="LaunchCheckBox" Type="CheckBox" X="80" Y="243" Width="100" Height="17" Property="LAUNCHAPPONEXIT" Hidden="yes" CheckBoxValue="1" Text="Launch KeePassXC">
+ <Condition Action="show">NOT Installed</Condition>
+ </Control>
+ </Dialog>
+
+ <InstallUISequence>
+ <Show Dialog="KPXC_ExitDialog" OnExit="success" Overridable="yes" />
+ </InstallUISequence>
+
+ <AdminUISequence>
+ <Show Dialog="KPXC_ExitDialog" OnExit="success" Overridable="yes" />
+ </AdminUISequence>
+ </UI>
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/share/windows/KPXC_InstallDir.wxs b/share/windows/KPXC_InstallDir.wxs
new file mode 100644
index 000000000..e56b95a22
--- /dev/null
+++ b/share/windows/KPXC_InstallDir.wxs
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
+
+
+
+<!--
+First-time install dialog sequence:
+ - WixUI_WelcomeDlg
+ - WixUI_LicenseAgreementDlg
+ - KPXC_InstallDirDlg
+ - WixUI_VerifyReadyDlg
+ - WixUI_DiskCostDlg
+
+Maintenance dialog sequence:
+ - WixUI_MaintenanceWelcomeDlg
+ - WixUI_MaintenanceTypeDlg
+ - KPXC_InstallDirDlg
+ - WixUI_VerifyReadyDlg
+
+Patch dialog sequence:
+ - WixUI_WelcomeDlg
+ - WixUI_VerifyReadyDlg
+
+-->
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI Id="KPXC_InstallDir">
+ <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
+ <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
+ <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
+
+ <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
+ <Property Id="WixUI_Mode" Value="InstallDir" />
+
+ <DialogRef Id="BrowseDlg" />
+ <DialogRef Id="DiskCostDlg" />
+ <DialogRef Id="ErrorDlg" />
+ <DialogRef Id="FatalError" />
+ <DialogRef Id="FilesInUse" />
+ <DialogRef Id="MsiRMFilesInUse" />
+ <DialogRef Id="PrepareDlg" />
+ <DialogRef Id="ProgressDlg" />
+ <DialogRef Id="ResumeDlg" />
+ <DialogRef Id="UserExit" />
+
+ <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
+ <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+
+ <Publish Dialog="KPXC_ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
+
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
+
+ <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="KPXC_InstallDirDlg">LicenseAccepted = "1"</Publish>
+
+ <Publish Dialog="KPXC_InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+ <Publish Dialog="KPXC_InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+ <Publish Dialog="KPXC_InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
+ <Publish Dialog="KPXC_InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+ <Publish Dialog="KPXC_InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
+ <Publish Dialog="KPXC_InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+ <Publish Dialog="KPXC_InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
+
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="KPXC_InstallDirDlg" Order="1">NOT Installed</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
+
+ <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+
+ <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+
+ <Property Id="ARPNOMODIFY" Value="1" />
+ </UI>
+
+ <UIRef Id="WixUI_Common" />
+ </Fragment>
+</Wix>
diff --git a/share/windows/KPXC_InstallDirDlg.wxs b/share/windows/KPXC_InstallDirDlg.wxs
new file mode 100644
index 000000000..bc4ed9df8
--- /dev/null
+++ b/share/windows/KPXC_InstallDirDlg.wxs
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
+
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI>
+ <Dialog Id="KPXC_InstallDirDlg" Width="370" Height="270" Title="!(loc.InstallDirDlg_Title)">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.InstallDirDlgDescription)" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.InstallDirDlgTitle)" />
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.InstallDirDlgBannerBitmap)" />
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+
+ <Control Id="FolderLabel" Type="Text" X="20" Y="60" Width="290" Height="30" NoPrefix="yes" Text="!(loc.InstallDirDlgFolderLabel)" />
+ <Control Id="Folder" Type="PathEdit" X="20" Y="100" Width="320" Height="18" Property="WIXUI_INSTALLDIR" Indirect="yes" />
+ <Control Id="ChangeFolder" Type="PushButton" X="20" Y="120" Width="56" Height="17" Text="!(loc.InstallDirDlgChange)" />
+ <!-- Custom Controls for KPXC Installer -->
+ <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="20" Y="150" Width="290" Height="17" Property="INSTALLDESKTOPSHORTCUT" CheckBoxValue="1" Text="Create a shortcut on the desktop" />
+ <Control Id="AutostartCheckBox" Type="CheckBox" X="20" Y="170" Width="290" Height="17" Property="AUTOSTARTPROGRAM" CheckBoxValue="1" Text="Autostart KeePassXC on login" />
+ </Dialog>
+ </UI>
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/share/windows/create-ico.sh b/share/windows/create-ico.sh
index 44ae06a04..d78592fe0 100644
--- a/share/windows/create-ico.sh
+++ b/share/windows/create-ico.sh
@@ -1,7 +1,11 @@
#!/usr/bin/env bash
+NC='\033[0m'
+RED='\033[0;31m'
+YELLOW='\033[0;33m'
+
if [[ -z "$1" ]]; then
- echo "You must include an SVG file to convert!"
+ echo -e "${RED}You must include an SVG file to convert!${NC}"
exit 1
fi
@@ -10,6 +14,11 @@ if [[ -z "outfile" ]]; then
outfile="logo.ico"
fi
+if ! command -v "inkscape" &> /dev/null; then
+ echo -e "${YELLOW}Could not find inkscape; $outfile not built!${NC}"
+ exit 0
+fi
+
echo "Generating $outfile from $1..."
size_list=(16 24 32 48 64 128 256)
for size in ${size_list[@]}; do
diff --git a/share/windows/wix-template.xml b/share/windows/wix-template.xml
index 9693d6344..eb49f872b 100644
--- a/share/windows/wix-template.xml
+++ b/share/windows/wix-template.xml
@@ -37,58 +37,75 @@
<?ifdef CPACK_WIX_UI_DIALOG?>
<WixVariable Id="WixUIDialogBmp" Value="$(var.CPACK_WIX_UI_DIALOG)"/>
<?endif?>
-
- <FeatureRef Id="ProductFeature">
- <ComponentRef Id="ApplicationShortcut" />
- </FeatureRef>
<UI>
<UIRef Id="$(var.CPACK_WIX_UI_REF)" />
- <Publish Dialog="ExitDialog"
- Control="Finish"
- Event="DoAction"
- Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
+ <Publish Dialog="KPXC_ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="LaunchApplication">LAUNCHAPPONEXIT</Publish>
</UI>
<?include "properties.wxi"?>
<?include "product_fragment.wxi"?>
+ <!-- Autostart via registry (optional) -->
+ <Component Id="Autostart" Guid="*" Directory="INSTALL_ROOT">
+ <RegistryValue Id="Autostart.rst" Root="HKCU" Action="write"
+ Key="Software\Microsoft\Windows\CurrentVersion\Run"
+ Name="$(var.CPACK_PACKAGE_NAME)"
+ Value="&quot;[#CM_FP_KeePassXC.exe]&quot;"
+ Type="string" />
+ <Condition>AUTOSTARTPROGRAM</Condition>
+ </Component>
+
<DirectoryRef Id="TARGETDIR">
+ <!-- Startmenu shortcut -->
<Directory Id="ProgramMenuFolder">
- <Directory Id="ApplicationProgramsFolder" Name="KeePassXC"/>
+ <Directory Id="ApplicationProgramsFolder" Name="KeePassXC">
+ <Component Id="ApplicationShortcut" Guid="*">
+ <Shortcut Id="ApplicationStartMenuShortcut"
+ Name="KeePassXC"
+ Target="[#CM_FP_KeePassXC.exe]"
+ WorkingDirectory="INSTALL_ROOT"/>
+ <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
+ <RegistryValue Root="HKCU" Key="Software\KeePassXC" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
+ </Component>
+ </Directory>
</Directory>
- </DirectoryRef>
- <DirectoryRef Id="ApplicationProgramsFolder">
- <Component Id="ApplicationShortcut" Guid="*">
- <Shortcut Id="ApplicationStartMenuShortcut"
- Name="KeePassXC"
- Target="[#CM_FP_KeePassXC.exe]"
- Icon="ProductIcon.ico"
- WorkingDirectory="INSTALL_ROOT"/>
- <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
- <RegistryValue Root="HKCU" Key="Software\KeePassXC" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
- </Component>
+ <!-- Desktop shortcut (optional) -->
+ <Directory Id="DesktopFolder" Name="Desktop">
+ <Component Id="DesktopShortcut" Guid="F8AFBA1C-296C-41AA-B968-60323A206665">
+ <Condition>INSTALLDESKTOPSHORTCUT</Condition>
+ <Shortcut Id="ApplicationDesktopShortcut"
+ Directory="DesktopFolder"
+ Name="KeePassXC"
+ Target="[#CM_FP_KeePassXC.exe]"
+ WorkingDirectory="INSTALL_ROOT" />
+ <RegistryValue Root="HKCU" Key="Software\KeePassXC" Name="DesktopShortcut" Type="integer" Value="1" KeyPath="yes"/>
+ </Component>
+ </Directory>
</DirectoryRef>
- <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
- <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.CPACK_PACKAGE_NAME)" />
+ <Property Id="AUTOSTARTPROGRAM" Value="1" />
+ <Property Id="LAUNCHAPPONEXIT" Value="1" />
+
+ <FeatureRef Id="ProductFeature">
+ <ComponentRef Id="ApplicationShortcut" />
+ <ComponentRef Id="Autostart" />
+ <ComponentRef Id="DesktopShortcut" />
+ </FeatureRef>
+
<Property Id="WixShellExecTarget" Value="[#CM_FP_KeePassXC.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
<Property Id="WixSilentExecCmdLine" Value='"Taskkill" /IM KeePassXC.exe' />
- <CustomAction Id="KillKeePassXCInstall" BinaryKey="WixCA" DllEntry="WixSilentExec" Execute="immediate" Return="ignore" />
- <CustomAction Id="KillKeePassXCUninstall" BinaryKey="WixCA" DllEntry="WixSilentExec" Execute="immediate" Return="ignore" />
+ <CustomAction Id="KillKeePassXC" BinaryKey="WixCA" DllEntry="WixSilentExec" Execute="immediate" Return="ignore" />
<Property Id="WixQuietExecCmdLine" Value='"Taskkill" /IM keepassxc-proxy.exe /F' />
- <CustomAction Id="KillProxyInstall" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="ignore" />
- <CustomAction Id="KillProxyUninstall" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="ignore" />
+ <CustomAction Id="KillProxy" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="ignore" />
<InstallExecuteSequence>
- <Custom Action="KillKeePassXCInstall" After="InstallInitialize" />
- <Custom Action="KillProxyInstall" After="InstallInitialize" />
- <Custom Action="KillKeePassXCUninstall" Before="InstallValidate">Installed</Custom>
- <Custom Action="KillProxyUninstall" Before="InstallValidate">Installed</Custom>
+ <Custom Action="KillKeePassXC" Before="InstallValidate" />
+ <Custom Action="KillProxy" Before="InstallValidate" />
</InstallExecuteSequence>
</Product>
</Wix>
diff --git a/share/wizard/background-pixmap.png b/share/wizard/background-pixmap.png
index e64d87041..0651b38f5 100644
--- a/share/wizard/background-pixmap.png
+++ b/share/wizard/background-pixmap.png
Binary files differ
diff --git a/share/wizard/wizard.qrc b/share/wizard/wizard.qrc
new file mode 100644
index 000000000..b2b568815
--- /dev/null
+++ b/share/wizard/wizard.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+ <qresource prefix="/wizard">
+ <file>background-pixmap.png</file>
+ </qresource>
+</RCC>
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 4d579dd9e..5f49d0092 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -1,5 +1,5 @@
name: keepassxc
-version: 2.5.4
+version: 2.6.0
grade: stable
summary: Community-driven port of the Windows application “KeePass Password Safe”
description: |
@@ -36,7 +36,7 @@ apps:
DISABLE_WAYLAND: 1
cli:
command: keepassxc-cli
- plugs: [gsettings, home, removable-media, raw-usb]
+ plugs: [x11, gsettings, home, removable-media, raw-usb]
proxy:
command: keepassxc-proxy
plugs: [home]
@@ -59,6 +59,7 @@ parts:
- libqt5x11extras5-dev
- libqt5svg5-dev
- qtbase5-dev
+ - qtbase5-private-dev
- qttools5-dev
- qttools5-dev-tools
- zlib1g-dev
@@ -70,6 +71,7 @@ parts:
- libargon2-0-dev
- libqrencode-dev
- libquazip5-dev
+ - asciidoctor
stage-packages:
- dbus
- qttranslations5-l10n # common translations
@@ -87,6 +89,7 @@ parts:
- qtwayland5
- qt5-gtk-platformtheme # for theming, font settings, cursor and to use gtk3 file chooser
- libqrencode3
+ - xclip
override-build: |
snapcraftctl build
sed -i 's|Icon=keepassxc|Icon=${SNAP}/usr/share/icons/hicolor/256x256/apps/keepassxc.png|g' $SNAPCRAFT_PART_INSTALL/usr/share/applications/org.keepassxc.KeePassXC.desktop
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1982a3c4c..2f8c3b156 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -19,6 +19,13 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
find_library(ZXCVBN_LIBRARIES zxcvbn)
if(NOT ZXCVBN_LIBRARIES)
add_library(zxcvbn STATIC zxcvbn/zxcvbn.c)
+ # Disable error-level shadow issues
+ if(CC_HAS_Wshadow_compatible_local)
+ set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-compatible-local")
+ endif()
+ if(CC_HAS_Wshadow_local)
+ set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-local")
+ endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn)
set(ZXCVBN_LIBRARIES zxcvbn)
endif(NOT ZXCVBN_LIBRARIES)
@@ -40,7 +47,6 @@ set(keepassx_SOURCES
core/EntryAttachments.cpp
core/EntryAttributes.cpp
core/EntrySearcher.cpp
- core/FilePath.cpp
core/FileWatcher.cpp
core/Group.cpp
core/HibpOffline.cpp
@@ -48,7 +54,9 @@ set(keepassx_SOURCES
core/Merger.cpp
core/Metadata.cpp
core/PasswordGenerator.cpp
+ core/PasswordHealth.cpp
core/PassphraseGenerator.cpp
+ core/Resources.cpp
core/SignalMultiplexer.cpp
core/ScreenLockListener.cpp
core/ScreenLockListenerPrivate.cpp
@@ -86,6 +94,12 @@ set(keepassx_SOURCES
format/OpVaultReaderAttachments.cpp
format/OpVaultReaderBandEntry.cpp
format/OpVaultReaderSections.cpp
+ gui/styles/styles.qrc
+ gui/styles/StateColorPalette.cpp
+ gui/styles/base/phantomcolor.cpp
+ gui/styles/base/BaseStyle.cpp
+ gui/styles/dark/DarkStyle.cpp
+ gui/styles/light/LightStyle.cpp
gui/AboutDialog.cpp
gui/Application.cpp
gui/CategoryListWidget.cpp
@@ -139,18 +153,25 @@ set(keepassx_SOURCES
gui/group/EditGroupWidget.cpp
gui/group/GroupModel.cpp
gui/group/GroupView.cpp
- gui/masterkey/KeyComponentWidget.cpp
- gui/masterkey/PasswordEditWidget.cpp
- gui/masterkey/YubiKeyEditWidget.cpp
- gui/masterkey/KeyFileEditWidget.cpp
+ gui/databasekey/KeyComponentWidget.cpp
+ gui/databasekey/PasswordEditWidget.cpp
+ gui/databasekey/YubiKeyEditWidget.cpp
+ gui/databasekey/KeyFileEditWidget.cpp
gui/dbsettings/DatabaseSettingsWidget.cpp
gui/dbsettings/DatabaseSettingsDialog.cpp
gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp
gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp
gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp
- gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp
- gui/dbsettings/DatabaseSettingsWidgetStatistics.cpp
- gui/dbsettings/DatabaseSettingsPageStatistics.cpp
+ gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp
+ gui/reports/ReportsWidget.cpp
+ gui/reports/ReportsDialog.cpp
+ gui/reports/ReportsWidgetHealthcheck.cpp
+ gui/reports/ReportsPageHealthcheck.cpp
+ gui/reports/ReportsWidgetHibp.cpp
+ gui/reports/ReportsPageHibp.cpp
+ gui/reports/ReportsWidgetStatistics.cpp
+ gui/reports/ReportsPageStatistics.cpp
+ gui/osutils/OSUtilsBase.cpp
gui/settings/SettingsWidget.cpp
gui/widgets/ElidedLabel.cpp
gui/widgets/PopupHelpWidget.cpp
@@ -158,7 +179,7 @@ set(keepassx_SOURCES
gui/wizard/NewDatabaseWizardPage.cpp
gui/wizard/NewDatabaseWizardPageMetaData.cpp
gui/wizard/NewDatabaseWizardPageEncryption.cpp
- gui/wizard/NewDatabaseWizardPageMasterKey.cpp
+ gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp
keys/CompositeKey.cpp
keys/FileKey.cpp
keys/PasswordKey.cpp
@@ -176,20 +197,22 @@ if(APPLE)
${keepassx_SOURCES}
core/ScreenLockListenerMac.cpp
core/MacPasteboard.cpp
- gui/macutils/MacUtils.cpp
- gui/macutils/AppKitImpl.mm
- gui/macutils/AppKit.h)
+ gui/osutils/macutils/MacUtils.cpp
+ gui/osutils/macutils/AppKitImpl.mm
+ gui/osutils/macutils/AppKit.h)
endif()
if(UNIX AND NOT APPLE)
set(keepassx_SOURCES
${keepassx_SOURCES}
core/ScreenLockListenerDBus.cpp
- gui/MainWindowAdaptor.cpp)
+ gui/MainWindowAdaptor.cpp
+ gui/osutils/nixutils/NixUtils.cpp)
endif()
if(MINGW)
set(keepassx_SOURCES
${keepassx_SOURCES}
- core/ScreenLockListenerWin.cpp)
+ core/ScreenLockListenerWin.cpp
+ gui/osutils/winutils/WinUtils.cpp)
endif()
if(MINGW OR (UNIX AND NOT APPLE))
set(keepassx_SOURCES
@@ -197,6 +220,10 @@ if(MINGW OR (UNIX AND NOT APPLE))
core/OSEventFilter.cpp)
endif()
+set(keepassx_SOURCES ${keepassx_SOURCES}
+ ../share/icons/icons.qrc
+ ../share/wizard/wizard.qrc)
+
set(keepassx_SOURCES_MAINEXE main.cpp)
add_feature_info(Auto-Type WITH_XC_AUTOTYPE "Automatic password typing")
@@ -213,7 +240,6 @@ if(APPLE)
add_feature_info(TouchID WITH_XC_TOUCHID "TouchID integration")
endif()
-set(BROWSER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/browser)
add_subdirectory(browser)
add_subdirectory(proxy)
if(WITH_XC_BROWSER)
@@ -270,6 +296,7 @@ endif()
if(WITH_XC_NETWORKING)
list(APPEND keepassx_SOURCES
+ core/HibpDownloader.cpp
core/IconDownloader.cpp
core/NetworkManager.cpp
gui/UpdateCheckDialog.cpp
@@ -305,9 +332,8 @@ target_link_libraries(keepassx_core
${YUBIKEY_LIBRARIES}
${ZXCVBN_LIBRARIES}
${ARGON2_LIBRARIES}
- ${GCRYPT_LIBRARIES}
- ${GPGERROR_LIBRARIES}
- ${ZLIB_LIBRARIES})
+ ${ZLIB_LIBRARIES}
+ )
if(WITH_XC_SSHAGENT)
target_link_libraries(keepassx_core sshagent)
@@ -330,7 +356,8 @@ if(HAIKU)
target_link_libraries(keepassx_core network)
endif()
if(UNIX AND NOT APPLE)
- target_link_libraries(keepassx_core Qt5::DBus)
+ target_link_libraries(keepassx_core Qt5::DBus X11)
+ include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
endif()
if(MINGW)
target_link_libraries(keepassx_core Wtsapi32.lib Ws2_32.lib)
@@ -349,6 +376,7 @@ if(MINGW)
endif()
add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles})
+target_link_libraries(keepassx_core ${GCRYPT_LIBRARIES} ${GPGERROR_LIBRARIES})
target_link_libraries(${PROGNAME} keepassx_core)
set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON)
@@ -391,10 +419,6 @@ install(TARGETS ${PROGNAME}
BUNDLE DESTINATION . COMPONENT Runtime
RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime)
-if(APPLE OR UNIX)
- install(FILES ../share/docs/man/keepassxc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
-endif()
-
if(MINGW)
if(${CMAKE_SIZEOF_VOID_P} EQUAL "8")
set(OUTPUT_FILE_POSTFIX "Win64")
@@ -439,9 +463,14 @@ if(MINGW)
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico")
set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp")
set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp")
+ set(CPACK_WIX_UI_REF "KPXC_InstallDir")
set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml")
set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml")
- set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org")
+ set(CPACK_WIX_EXTRA_SOURCES
+ "${CMAKE_SOURCE_DIR}/share/windows/KPXC_InstallDir.wxs"
+ "${CMAKE_SOURCE_DIR}/share/windows/KPXC_InstallDirDlg.wxs"
+ "${CMAKE_SOURCE_DIR}/share/windows/KPXC_ExitDlg.wxs")
+ set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org")
set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll")
include(CPack)
@@ -453,9 +482,11 @@ if(MINGW)
COMPONENT Runtime)
# Use windeployqt.exe to setup Qt dependencies
- set(WINDEPLOYQT_MODE "--release")
- if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")
- set(WINDEPLOYQT_MODE "--debug")
+ if(Qt5Core_VERSION VERSION_LESS "5.14.1")
+ set(WINDEPLOYQT_MODE "--release")
+ if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")
+ set(WINDEPLOYQT_MODE "--debug")
+ endif()
endif()
install(CODE "execute_process(COMMAND ${WINDEPLOYQT_EXE} ${PROGNAME}.exe ${WINDEPLOYQT_MODE} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX} OUTPUT_QUIET)"
@@ -465,8 +496,16 @@ if(MINGW)
install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs")
# install OpenSSL library
if(WITH_XC_NETWORKING)
- find_library(OPENSSL_DLL NAMES libssl-1_1.dll libssl-1_1-x64.dll PATH_SUFFIXES bin)
- find_library(CRYPTO_DLL NAMES libcrypto-1_1.dll libcrypto-1_1-x64.dll PATH_SUFFIXES bin)
+ find_file(OPENSSL_DLL NAMES libssl-1_1.dll libssl-1_1-x64.dll)
+ if (NOT OPENSSL_DLL)
+ message(FATAL_ERROR "Cannot find libssl dll, ensure openssl is properly installed.")
+ endif()
+
+ find_file(CRYPTO_DLL NAMES libcrypto-1_1.dll libcrypto-1_1-x64.dll)
+ if (NOT CRYPTO_DLL)
+ message(FATAL_ERROR "Cannot find libcrypto dll, ensure libgcrypt is properly installed.")
+ endif()
+
install(FILES ${OPENSSL_DLL} ${CRYPTO_DLL} DESTINATION ".")
endif()
endif()
diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp
index 80a2268ec..01ef9d762 100644
--- a/src/autotype/AutoType.cpp
+++ b/src/autotype/AutoType.cpp
@@ -31,14 +31,15 @@
#include "core/Config.h"
#include "core/Database.h"
#include "core/Entry.h"
-#include "core/FilePath.h"
#include "core/Group.h"
#include "core/ListDeleter.h"
+#include "core/Resources.h"
#include "core/Tools.h"
+#include "gui/MainWindow.h"
#include "gui/MessageBox.h"
#ifdef Q_OS_MAC
-#include "gui/macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
#endif
AutoType* AutoType::m_instance = nullptr;
@@ -51,6 +52,7 @@ AutoType::AutoType(QObject* parent, bool test)
, m_pluginLoader(new QPluginLoader(this))
, m_plugin(nullptr)
, m_executor(nullptr)
+ , m_windowState(WindowState::Normal)
, m_windowForGlobal(0)
{
// prevent crash when the plugin has unresolved symbols
@@ -63,7 +65,7 @@ AutoType::AutoType(QObject* parent, bool test)
pluginName += "test";
}
- QString pluginPath = filePath()->pluginPath(pluginName);
+ QString pluginPath = resources()->pluginPath(pluginName);
if (!pluginPath.isEmpty()) {
#ifdef WITH_XC_AUTOTYPE
@@ -227,6 +229,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
"KeePassXC."));
return;
}
+
macUtils()->raiseLastActiveWindow();
m_plugin->hideOwnWindow();
#else
@@ -234,7 +237,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
#endif
}
- Tools::wait(qMax(100, config()->get("AutoTypeStartDelay", 500).toInt()));
+ Tools::wait(qMax(100, config()->get(Config::AutoTypeStartDelay).toInt()));
// Used only for selected entry auto-type
if (!window) {
@@ -286,6 +289,18 @@ void AutoType::startGlobalAutoType()
{
m_windowForGlobal = m_plugin->activeWindow();
m_windowTitleForGlobal = m_plugin->activeWindowTitle();
+#ifdef Q_OS_MACOS
+ m_windowState = WindowState::Normal;
+ if (getMainWindow()) {
+ if (getMainWindow()->isMinimized()) {
+ m_windowState = WindowState::Minimized;
+ }
+ if (getMainWindow()->isHidden()) {
+ m_windowState = WindowState::Hidden;
+ }
+ }
+#endif
+
emit globalAutoTypeTriggered();
}
@@ -332,14 +347,17 @@ void AutoType::performGlobalAutoType(const QList<QSharedPointer<Database>>& dbLi
.append(m_windowTitleForGlobal));
msgBox->setIcon(QMessageBox::Information);
msgBox->setStandardButtons(QMessageBox::Ok);
- msgBox->show();
- msgBox->raise();
- msgBox->activateWindow();
+#ifdef Q_OS_MACOS
+ m_plugin->raiseOwnWindow();
+ Tools::wait(200);
+#endif
+ msgBox->exec();
+ restoreWindowState();
}
m_inGlobalAutoTypeDialog.unlock();
emit autotypeRejected();
- } else if ((matchList.size() == 1) && !config()->get("security/autotypeask").toBool()) {
+ } else if ((matchList.size() == 1) && !config()->get(Config::Security_AutoTypeAsk).toBool()) {
executeAutoTypeActions(matchList.first().entry, nullptr, matchList.first().sequence, m_windowForGlobal);
m_inGlobalAutoTypeDialog.unlock();
} else {
@@ -361,8 +379,23 @@ void AutoType::performGlobalAutoType(const QList<QSharedPointer<Database>>& dbLi
}
}
+void AutoType::restoreWindowState()
+{
+#ifdef Q_OS_MAC
+ if (getMainWindow()) {
+ if (m_windowState == WindowState::Minimized) {
+ getMainWindow()->showMinimized();
+ } else if (m_windowState == WindowState::Hidden) {
+ getMainWindow()->hideWindow();
+ }
+ }
+#endif
+}
+
void AutoType::performAutoTypeFromGlobal(AutoTypeMatch match)
{
+ restoreWindowState();
+
m_plugin->raiseWindow(m_windowForGlobal);
executeAutoTypeActions(match.entry, nullptr, match.sequence, m_windowForGlobal);
@@ -380,6 +413,7 @@ void AutoType::autoTypeRejectedFromGlobal()
m_windowForGlobal = 0;
m_windowTitleForGlobal.clear();
+ restoreWindowState();
emit autotypeRejected();
}
@@ -390,7 +424,7 @@ bool AutoType::parseActions(const QString& actionSequence, const Entry* entry, Q
{
QString tmpl;
bool inTmpl = false;
- m_autoTypeDelay = qMax(config()->get("AutoTypeDelay").toInt(), 0);
+ m_autoTypeDelay = qMax(config()->get(Config::AutoTypeDelay).toInt(), 0);
QString sequence = actionSequence;
sequence.replace("{{}", "{LEFTBRACE}");
@@ -617,12 +651,12 @@ QList<QString> AutoType::autoTypeSequences(const Entry* entry, const QString& wi
}
}
- if (config()->get("AutoTypeEntryTitleMatch").toBool()
+ if (config()->get(Config::AutoTypeEntryTitleMatch).toBool()
&& windowMatchesTitle(windowTitle, entry->resolvePlaceholder(entry->title()))) {
sequenceList.append(entry->effectiveAutoTypeSequence());
}
- if (config()->get("AutoTypeEntryURLMatch").toBool()
+ if (config()->get(Config::AutoTypeEntryURLMatch).toBool()
&& windowMatchesUrl(windowTitle, entry->resolvePlaceholder(entry->url()))) {
sequenceList.append(entry->effectiveAutoTypeSequence());
}
@@ -684,7 +718,7 @@ bool AutoType::checkSyntax(const QString& string)
QString allowRepetition = "(?:\\s\\d+)?";
// the ":" allows custom commands with syntax S:Field
// exclude BEEP otherwise will be checked as valid
- QString normalCommands = "(?!BEEP\\s)[A-Z:]*" + allowRepetition;
+ QString normalCommands = "(?!BEEP\\s)[A-Z:_]*" + allowRepetition;
QString specialLiterals = "[\\^\\%\\(\\)~\\{\\}\\[\\]\\+]" + allowRepetition;
QString functionKeys = "(?:F[1-9]" + allowRepetition + "|F1[0-2])" + allowRepetition;
QString numpad = "NUMPAD\\d" + allowRepetition;
diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h
index ad8607529..7f9e3ab22 100644
--- a/src/autotype/AutoType.h
+++ b/src/autotype/AutoType.h
@@ -73,6 +73,13 @@ private slots:
void unloadPlugin();
private:
+ enum WindowState
+ {
+ Normal,
+ Minimized,
+ Hidden
+ };
+
explicit AutoType(QObject* parent = nullptr, bool test = false);
~AutoType() override;
void loadPlugin(const QString& pluginPath);
@@ -86,6 +93,7 @@ private:
bool windowMatchesTitle(const QString& windowTitle, const QString& resolvedTitle);
bool windowMatchesUrl(const QString& windowTitle, const QString& resolvedUrl);
bool windowMatches(const QString& windowTitle, const QString& windowPattern);
+ void restoreWindowState();
QMutex m_inAutoType;
QMutex m_inGlobalAutoTypeDialog;
@@ -98,6 +106,7 @@ private:
static AutoType* m_instance;
QString m_windowTitleForGlobal;
+ WindowState m_windowState;
WId m_windowForGlobal;
Q_DISABLE_COPY(AutoType)
diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp
index 997858f0d..3b264b7bc 100644
--- a/src/autotype/AutoTypeSelectDialog.cpp
+++ b/src/autotype/AutoTypeSelectDialog.cpp
@@ -34,7 +34,7 @@
#include "autotype/AutoTypeSelectView.h"
#include "core/AutoTypeMatch.h"
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/entry/AutoTypeMatchModel.h"
AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent)
@@ -49,14 +49,14 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent)
setAttribute(Qt::WA_X11BypassTransientForHint);
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
setWindowTitle(tr("Auto-Type - KeePassXC"));
- setWindowIcon(filePath()->applicationIcon());
+ setWindowIcon(resources()->applicationIcon());
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
QRect screenGeometry = QApplication::screenAt(QCursor::pos())->availableGeometry();
#else
QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos());
#endif
- QSize size = config()->get("GUI/AutoTypeSelectDialogSize", QSize(600, 250)).toSize();
+ QSize size = config()->get(Config::GUI_AutoTypeSelectDialogSize).toSize();
size.setWidth(qMin(size.width(), screenGeometry.width()));
size.setHeight(qMin(size.height(), screenGeometry.height()));
resize(size);
@@ -111,7 +111,7 @@ void AutoTypeSelectDialog::setMatchList(const QList<AutoTypeMatch>& matchList)
void AutoTypeSelectDialog::done(int r)
{
- config()->set("GUI/AutoTypeSelectDialogSize", size());
+ config()->set(Config::GUI_AutoTypeSelectDialogSize, size());
QDialog::done(r);
}
diff --git a/src/autotype/mac/AutoTypeMac.cpp b/src/autotype/mac/AutoTypeMac.cpp
index fadc70e1c..1e52f58fe 100644
--- a/src/autotype/mac/AutoTypeMac.cpp
+++ b/src/autotype/mac/AutoTypeMac.cpp
@@ -17,7 +17,7 @@
*/
#include "AutoTypeMac.h"
-#include "gui/macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
#include "gui/MessageBox.h"
#include <ApplicationServices/ApplicationServices.h>
diff --git a/src/autotype/xcb/AutoTypeXCB.cpp b/src/autotype/xcb/AutoTypeXCB.cpp
index 94a132d40..d2d757b4e 100644
--- a/src/autotype/xcb/AutoTypeXCB.cpp
+++ b/src/autotype/xcb/AutoTypeXCB.cpp
@@ -485,10 +485,6 @@ KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key)
*/
void AutoTypePlatformX11::updateKeymap()
{
- int keycode, inx;
- int mod_index, mod_key;
- XModifierKeymap* modifiers;
-
if (m_xkb) {
XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
}
@@ -500,10 +496,9 @@ void AutoTypePlatformX11::updateKeymap()
m_keysymTable = XGetKeyboardMapping(m_dpy, m_minKeycode, m_maxKeycode - m_minKeycode + 1, &m_keysymPerKeycode);
/* determine the keycode to use for remapped keys */
- inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode;
if (m_remapKeycode == 0 || !isRemapKeycodeValid()) {
- for (keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) {
- inx = (keycode - m_minKeycode) * m_keysymPerKeycode;
+ for (int keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) {
+ int inx = (keycode - m_minKeycode) * m_keysymPerKeycode;
if (m_keysymTable[inx] == NoSymbol) {
m_remapKeycode = keycode;
m_currentRemapKeysym = NoSymbol;
@@ -513,11 +508,11 @@ void AutoTypePlatformX11::updateKeymap()
}
/* determine the keycode to use for modifiers */
- modifiers = XGetModifierMapping(m_dpy);
- for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) {
+ XModifierKeymap* modifiers = XGetModifierMapping(m_dpy);
+ for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) {
m_modifier_keycode[mod_index] = 0;
- for (mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) {
- keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key];
+ for (int mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) {
+ int keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key];
if (keycode) {
m_modifier_keycode[mod_index] = keycode;
break;
diff --git a/src/browser/BrowserAccessControlDialog.cpp b/src/browser/BrowserAccessControlDialog.cpp
index 2571610eb..3268ef2b1 100644
--- a/src/browser/BrowserAccessControlDialog.cpp
+++ b/src/browser/BrowserAccessControlDialog.cpp
@@ -25,29 +25,55 @@ BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent)
: QDialog(parent)
, m_ui(new Ui::BrowserAccessControlDialog())
{
- this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
+ setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
m_ui->setupUi(this);
- connect(m_ui->allowButton, SIGNAL(clicked()), this, SLOT(accept()));
- connect(m_ui->denyButton, SIGNAL(clicked()), this, SLOT(reject()));
+
+ connect(m_ui->allowButton, SIGNAL(clicked()), SLOT(accept()));
+ connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject()));
}
BrowserAccessControlDialog::~BrowserAccessControlDialog()
{
}
-void BrowserAccessControlDialog::setUrl(const QString& url)
+void BrowserAccessControlDialog::setItems(const QList<Entry*>& items, const QString& hostname, bool httpAuth)
{
- m_ui->label->setText(QString(tr("%1 has requested access to passwords for the following item(s).\n"
- "Please select whether you want to allow access."))
- .arg(QUrl(url).host()));
-}
+ m_ui->siteLabel->setText(m_ui->siteLabel->text().arg(hostname));
-void BrowserAccessControlDialog::setItems(const QList<Entry*>& items)
-{
- for (Entry* entry : items) {
- m_ui->itemsList->addItem(entry->title() + " - " + entry->username());
+ m_ui->rememberDecisionCheckBox->setVisible(!httpAuth);
+ m_ui->rememberDecisionCheckBox->setChecked(false);
+
+ m_ui->itemsTable->setRowCount(items.count());
+ m_ui->itemsTable->setColumnCount(2);
+
+ int row = 0;
+ for (const auto& entry : items) {
+ auto item = new QTableWidgetItem();
+ item->setText(entry->title() + " - " + entry->username());
+ item->setData(Qt::UserRole, row);
+ item->setCheckState(Qt::Checked);
+ item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
+ m_ui->itemsTable->setItem(row, 0, item);
+
+ auto disableButton = new QPushButton(tr("Disable for this site"));
+ disableButton->setAutoDefault(false);
+ connect(disableButton, &QAbstractButton::pressed, [&, item] {
+ emit disableAccess(item);
+ m_ui->itemsTable->removeRow(item->row());
+ if (m_ui->itemsTable->rowCount() == 0) {
+ reject();
+ }
+ });
+ m_ui->itemsTable->setCellWidget(row, 1, disableButton);
+
+ ++row;
}
+
+ m_ui->itemsTable->resizeColumnsToContents();
+ m_ui->itemsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
+
+ m_ui->allowButton->setFocus();
}
bool BrowserAccessControlDialog::remember() const
@@ -55,12 +81,26 @@ bool BrowserAccessControlDialog::remember() const
return m_ui->rememberDecisionCheckBox->isChecked();
}
-void BrowserAccessControlDialog::setRemember(bool r)
+QList<QTableWidgetItem*> BrowserAccessControlDialog::getSelectedEntries() const
{
- m_ui->rememberDecisionCheckBox->setChecked(r);
+ QList<QTableWidgetItem*> selected;
+ for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) {
+ auto item = m_ui->itemsTable->item(i, 0);
+ if (item->checkState() == Qt::Checked) {
+ selected.append(item);
+ }
+ }
+ return selected;
}
-void BrowserAccessControlDialog::setHTTPAuth(bool httpAuth)
+QList<QTableWidgetItem*> BrowserAccessControlDialog::getNonSelectedEntries() const
{
- m_ui->rememberDecisionCheckBox->setVisible(!httpAuth);
+ QList<QTableWidgetItem*> notSelected;
+ for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) {
+ auto item = m_ui->itemsTable->item(i, 0);
+ if (item->checkState() != Qt::Checked) {
+ notSelected.append(item);
+ }
+ }
+ return notSelected;
}
diff --git a/src/browser/BrowserAccessControlDialog.h b/src/browser/BrowserAccessControlDialog.h
index 79aba9c4b..1d42cf509 100644
--- a/src/browser/BrowserAccessControlDialog.h
+++ b/src/browser/BrowserAccessControlDialog.h
@@ -21,6 +21,7 @@
#include <QDialog>
#include <QScopedPointer>
+#include <QTableWidgetItem>
class Entry;
@@ -35,13 +36,16 @@ class BrowserAccessControlDialog : public QDialog
public:
explicit BrowserAccessControlDialog(QWidget* parent = nullptr);
- ~BrowserAccessControlDialog();
+ ~BrowserAccessControlDialog() override;
- void setUrl(const QString& url);
- void setItems(const QList<Entry*>& items);
+ void setItems(const QList<Entry*>& items, const QString& hostname, bool httpAuth);
bool remember() const;
- void setRemember(bool r);
- void setHTTPAuth(bool httpAuth);
+
+ QList<QTableWidgetItem*> getSelectedEntries() const;
+ QList<QTableWidgetItem*> getNonSelectedEntries() const;
+
+signals:
+ void disableAccess(QTableWidgetItem* item);
private:
QScopedPointer<Ui::BrowserAccessControlDialog> m_ui;
diff --git a/src/browser/BrowserAccessControlDialog.ui b/src/browser/BrowserAccessControlDialog.ui
index 55914bfec..bed26e6ab 100755
--- a/src/browser/BrowserAccessControlDialog.ui
+++ b/src/browser/BrowserAccessControlDialog.ui
@@ -6,29 +6,50 @@
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>221</height>
+ <width>405</width>
+ <height>200</height>
</rect>
</property>
<property name="windowTitle">
- <string>KeePassXC-Browser Confirm Access</string>
+ <string>KeePassXC - Browser Access Request</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="QLabel" name="label">
+ <widget class="QLabel" name="siteLabel">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
<property name="text">
- <string/>
+ <string>%1 is requesting access to the following entries:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
- <widget class="QListWidget" name="itemsList"/>
- </item>
- <item>
- <widget class="QCheckBox" name="rememberDecisionCheckBox">
- <property name="text">
- <string>Remember this decision</string>
+ <widget class="QTableWidget" name="itemsTable">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
</property>
+ <property name="showDropIndicator" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::NoSelection</enum>
+ </property>
+ <property name="cornerButtonEnabled">
+ <bool>false</bool>
+ </property>
+ <attribute name="horizontalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
</widget>
</item>
<item>
@@ -47,22 +68,41 @@
</spacer>
</item>
<item>
- <widget class="QPushButton" name="allowButton">
+ <widget class="QCheckBox" name="rememberDecisionCheckBox">
+ <property name="toolTip">
+ <string>Remember access to checked entries</string>
+ </property>
<property name="accessibleName">
- <string>Allow access</string>
+ <string>Remember access to checked entries</string>
</property>
<property name="text">
- <string>Allow</string>
+ <string>Remember</string>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="denyButton">
+ <widget class="QPushButton" name="allowButton">
<property name="accessibleName">
- <string>Deny access</string>
+ <string>Allow access to entries</string>
</property>
<property name="text">
- <string>Deny</string>
+ <string>Allow Selected</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string>Deny All</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
</property>
</widget>
</item>
diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp
index fec5b985a..361dc2a9c 100644
--- a/src/browser/BrowserAction.cpp
+++ b/src/browser/BrowserAction.cpp
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,9 +16,11 @@
*/
#include "BrowserAction.h"
+#include "BrowserService.h"
#include "BrowserSettings.h"
-#include "NativeMessagingBase.h"
+#include "BrowserShared.h"
#include "config-keepassx.h"
+#include "core/Global.h"
#include <QJsonDocument>
#include <QJsonParseError>
@@ -27,14 +28,31 @@
#include <sodium/crypto_box.h>
#include <sodium/randombytes.h>
-BrowserAction::BrowserAction(BrowserService& browserService)
- : m_mutex(QMutex::Recursive)
- , m_browserService(browserService)
- , m_associated(false)
+namespace
{
+ enum
+ {
+ ERROR_KEEPASS_DATABASE_NOT_OPENED = 1,
+ ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED = 2,
+ ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED = 3,
+ ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE = 4,
+ ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED = 5,
+ ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED = 6,
+ ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE = 7,
+ ERROR_KEEPASS_ASSOCIATION_FAILED = 8,
+ ERROR_KEEPASS_KEY_CHANGE_FAILED = 9,
+ ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED = 10,
+ ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND = 11,
+ ERROR_KEEPASS_INCORRECT_ACTION = 12,
+ ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED = 13,
+ ERROR_KEEPASS_NO_URL_PROVIDED = 14,
+ ERROR_KEEPASS_NO_LOGINS_FOUND = 15,
+ ERROR_KEEPASS_NO_GROUPS_FOUND = 16,
+ ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP = 17
+ };
}
-QJsonObject BrowserAction::readResponse(const QJsonObject& json)
+QJsonObject BrowserAction::processClientMessage(const QJsonObject& json)
{
if (json.isEmpty()) {
return getErrorReply("", ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED);
@@ -51,11 +69,10 @@ QJsonObject BrowserAction::readResponse(const QJsonObject& json)
return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION);
}
- QMutexLocker locker(&m_mutex);
- if (action.compare("change-public-keys", Qt::CaseSensitive) != 0 && !m_browserService.isDatabaseOpened()) {
+ if (action.compare("change-public-keys", Qt::CaseSensitive) != 0 && !browserService()->isDatabaseOpened()) {
if (m_clientPublicKey.isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED);
- } else if (!m_browserService.openDatabase(triggerUnlock)) {
+ } else if (!browserService()->openDatabase(triggerUnlock)) {
return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED);
}
}
@@ -98,7 +115,6 @@ QJsonObject BrowserAction::handleAction(const QJsonObject& json)
QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const QString& action)
{
- QMutexLocker locker(&m_mutex);
const QString nonce = json.value("nonce").toString();
const QString clientPublicKey = json.value("publicKey").toString();
@@ -130,7 +146,7 @@ QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const
QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
const QJsonObject decrypted = decryptMessage(encrypted, nonce);
@@ -153,7 +169,7 @@ QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const
// Update a legacy database hash if found
const QJsonArray hashes = decrypted.value("connectedKeys").toArray();
if (!hashes.isEmpty()) {
- const QString legacyHash = getLegacyDatabaseHash();
+ const QString legacyHash = browserService()->getDatabaseHash(true);
if (hashes.contains(legacyHash)) {
message["oldHash"] = legacyHash;
}
@@ -167,7 +183,7 @@ QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const
QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
const QJsonObject decrypted = decryptMessage(encrypted, nonce);
@@ -181,12 +197,11 @@ QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QStrin
return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED);
}
- QMutexLocker locker(&m_mutex);
if (key.compare(m_clientPublicKey, Qt::CaseSensitive) == 0) {
// Check for identification key. If it's not found, ensure backwards compatibility and use the current public
// key
const QString idKey = decrypted.value("idKey").toString();
- const QString id = m_browserService.storeKey((idKey.isEmpty() ? key : idKey));
+ const QString id = browserService()->storeKey((idKey.isEmpty() ? key : idKey));
if (id.isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED);
}
@@ -205,7 +220,7 @@ QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QStrin
QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
const QJsonObject decrypted = decryptMessage(encrypted, nonce);
@@ -220,8 +235,7 @@ QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QS
return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED);
}
- QMutexLocker locker(&m_mutex);
- const QString key = m_browserService.getKey(id);
+ const QString key = browserService()->getKey(id);
if (key.isEmpty() || key.compare(responseKey, Qt::CaseSensitive) != 0) {
return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED);
}
@@ -238,11 +252,10 @@ QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QS
QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
- QMutexLocker locker(&m_mutex);
if (!m_associated) {
return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED);
}
@@ -269,7 +282,7 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin
const QString submit = decrypted.value("submitUrl").toString();
const QString auth = decrypted.value("httpAuth").toString();
const bool httpAuth = auth.compare(TRUE_STR, Qt::CaseSensitive) == 0 ? true : false;
- const QJsonArray users = m_browserService.findMatchingEntries(id, url, submit, "", keyList, httpAuth);
+ const QJsonArray users = browserService()->findMatchingEntries(id, url, submit, "", keyList, httpAuth);
if (users.isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND);
@@ -311,11 +324,10 @@ QJsonObject BrowserAction::handleGeneratePassword(const QJsonObject& json, const
QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
- QMutexLocker locker(&m_mutex);
if (!m_associated) {
return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED);
}
@@ -339,11 +351,11 @@ QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString
const QString groupUuid = decrypted.value("groupUuid").toString();
const QString realm;
- BrowserService::ReturnValue result = BrowserService::ReturnValue::Success;
+ bool result = true;
if (uuid.isEmpty()) {
- m_browserService.addEntry(id, login, password, url, submitUrl, realm, group, groupUuid);
+ browserService()->addEntry(id, login, password, url, submitUrl, realm, group, groupUuid);
} else {
- result = m_browserService.updateEntry(id, uuid, login, password, url, submitUrl);
+ result = browserService()->updateEntry(id, uuid, login, password, url, submitUrl);
}
const QString newNonce = incrementNonce(nonce);
@@ -351,7 +363,7 @@ QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString
QJsonObject message = buildMessage(newNonce);
message["count"] = QJsonValue::Null;
message["entries"] = QJsonValue::Null;
- message["error"] = getReturnValue(result);
+ message["error"] = result ? QStringLiteral("success") : QStringLiteral("error");
message["hash"] = hash;
return buildResponse(action, message, newNonce);
@@ -359,7 +371,7 @@ QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString
QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
const QJsonObject decrypted = decryptMessage(encrypted, nonce);
@@ -374,8 +386,7 @@ QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QSt
QString command = decrypted.value("action").toString();
if (!command.isEmpty() && command.compare("lock-database", Qt::CaseSensitive) == 0) {
- QMutexLocker locker(&m_mutex);
- m_browserService.lockDatabase();
+ browserService()->lockDatabase();
const QString newNonce = incrementNonce(nonce);
QJsonObject message = buildMessage(newNonce);
@@ -388,11 +399,10 @@ QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QSt
QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
- QMutexLocker locker(&m_mutex);
if (!m_associated) {
return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED);
}
@@ -407,7 +417,7 @@ QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, cons
return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION);
}
- const QJsonObject groups = m_browserService.getDatabaseGroups();
+ const QJsonObject groups = browserService()->getDatabaseGroups();
if (groups.isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_NO_GROUPS_FOUND);
}
@@ -422,11 +432,10 @@ QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, cons
QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const QString& action)
{
- const QString hash = getDatabaseHash();
+ const QString hash = browserService()->getDatabaseHash();
const QString nonce = json.value("nonce").toString();
const QString encrypted = json.value("message").toString();
- QMutexLocker locker(&m_mutex);
if (!m_associated) {
return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED);
}
@@ -442,7 +451,7 @@ QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const Q
}
QString group = decrypted.value("groupName").toString();
- const QJsonObject newGroup = m_browserService.createNewGroup(group);
+ const QJsonObject newGroup = browserService()->createNewGroup(group);
if (newGroup.isEmpty() || newGroup["name"].toString().isEmpty() || newGroup["uuid"].toString().isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP);
}
@@ -524,38 +533,6 @@ QString BrowserAction::getErrorMessage(const int errorCode) const
}
}
-QString BrowserAction::getReturnValue(const BrowserService::ReturnValue returnValue) const
-{
- switch (returnValue) {
- case BrowserService::ReturnValue::Success:
- return QString("success");
- case BrowserService::ReturnValue::Error:
- return QString("error");
- case BrowserService::ReturnValue::Canceled:
- return QString("canceled");
- }
- return QString("error");
-}
-
-QString BrowserAction::getDatabaseHash()
-{
- QMutexLocker locker(&m_mutex);
- QByteArray hash =
- QCryptographicHash::hash(m_browserService.getDatabaseRootUuid().toUtf8(), QCryptographicHash::Sha256).toHex();
- return QString(hash);
-}
-
-QString BrowserAction::getLegacyDatabaseHash()
-{
- QMutexLocker locker(&m_mutex);
- QByteArray hash =
- QCryptographicHash::hash(
- (m_browserService.getDatabaseRootUuid() + m_browserService.getDatabaseRecycleBinUuid()).toUtf8(),
- QCryptographicHash::Sha256)
- .toHex();
- return QString(hash);
-}
-
QString BrowserAction::encryptMessage(const QJsonObject& message, const QString& nonce)
{
if (message.isEmpty() || nonce.isEmpty()) {
@@ -586,7 +563,6 @@ QJsonObject BrowserAction::decryptMessage(const QString& message, const QString&
QString BrowserAction::encrypt(const QString& plaintext, const QString& nonce)
{
- QMutexLocker locker(&m_mutex);
const QByteArray ma = plaintext.toUtf8();
const QByteArray na = base64Decode(nonce);
const QByteArray ca = base64Decode(m_clientPublicKey);
@@ -598,7 +574,7 @@ QString BrowserAction::encrypt(const QString& plaintext, const QString& nonce)
std::vector<unsigned char> sk(sa.cbegin(), sa.cend());
std::vector<unsigned char> e;
- e.resize(NATIVE_MSG_MAX_LENGTH);
+ e.resize(BrowserShared::NATIVEMSG_MAX_LENGTH);
if (m.empty() || n.empty() || ck.empty() || sk.empty()) {
return QString();
@@ -614,7 +590,6 @@ QString BrowserAction::encrypt(const QString& plaintext, const QString& nonce)
QByteArray BrowserAction::decrypt(const QString& encrypted, const QString& nonce)
{
- QMutexLocker locker(&m_mutex);
const QByteArray ma = base64Decode(encrypted);
const QByteArray na = base64Decode(nonce);
const QByteArray ca = base64Decode(m_clientPublicKey);
@@ -626,7 +601,7 @@ QByteArray BrowserAction::decrypt(const QString& encrypted, const QString& nonce
std::vector<unsigned char> sk(sa.cbegin(), sa.cend());
std::vector<unsigned char> d;
- d.resize(NATIVE_MSG_MAX_LENGTH);
+ d.resize(BrowserShared::NATIVEMSG_MAX_LENGTH);
if (m.empty() || n.empty() || ck.empty() || sk.empty()) {
return QByteArray();
diff --git a/src/browser/BrowserAction.h b/src/browser/BrowserAction.h
index a8af0915e..c65409dd8 100644
--- a/src/browser/BrowserAction.h
+++ b/src/browser/BrowserAction.h
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,42 +18,16 @@
#ifndef BROWSERACTION_H
#define BROWSERACTION_H
-#include "BrowserService.h"
#include <QJsonObject>
-#include <QMutex>
-#include <QObject>
-#include <QtCore>
+#include <QString>
-class BrowserAction : public QObject
+class BrowserAction
{
- Q_OBJECT
-
- enum
- {
- ERROR_KEEPASS_DATABASE_NOT_OPENED = 1,
- ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED = 2,
- ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED = 3,
- ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE = 4,
- ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED = 5,
- ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED = 6,
- ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE = 7,
- ERROR_KEEPASS_ASSOCIATION_FAILED = 8,
- ERROR_KEEPASS_KEY_CHANGE_FAILED = 9,
- ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED = 10,
- ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND = 11,
- ERROR_KEEPASS_INCORRECT_ACTION = 12,
- ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED = 13,
- ERROR_KEEPASS_NO_URL_PROVIDED = 14,
- ERROR_KEEPASS_NO_LOGINS_FOUND = 15,
- ERROR_KEEPASS_NO_GROUPS_FOUND = 16,
- ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP = 17
- };
-
public:
- BrowserAction(BrowserService& browserService);
+ explicit BrowserAction() = default;
~BrowserAction() = default;
- QJsonObject readResponse(const QJsonObject& json);
+ QJsonObject processClientMessage(const QJsonObject& json);
private:
QJsonObject handleAction(const QJsonObject& json);
@@ -73,9 +46,6 @@ private:
QJsonObject buildResponse(const QString& action, const QJsonObject& message, const QString& nonce);
QJsonObject getErrorReply(const QString& action, const int errorCode) const;
QString getErrorMessage(const int errorCode) const;
- QString getReturnValue(const BrowserService::ReturnValue returnValue) const;
- QString getDatabaseHash();
- QString getLegacyDatabaseHash();
QString encryptMessage(const QJsonObject& message, const QString& nonce);
QJsonObject decryptMessage(const QString& message, const QString& nonce);
@@ -90,12 +60,10 @@ private:
QString incrementNonce(const QString& nonce);
private:
- QMutex m_mutex;
- BrowserService& m_browserService;
QString m_clientPublicKey;
QString m_publicKey;
QString m_secretKey;
- bool m_associated;
+ bool m_associated = false;
friend class TestBrowser;
};
diff --git a/src/browser/BrowserClients.cpp b/src/browser/BrowserClients.cpp
deleted file mode 100644
index 083df3945..000000000
--- a/src/browser/BrowserClients.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "BrowserClients.h"
-#include <QJsonParseError>
-#include <QJsonValue>
-
-BrowserClients::BrowserClients(BrowserService& browserService)
- : m_mutex(QMutex::Recursive)
- , m_browserService(browserService)
-{
- m_clients.reserve(1000);
-}
-
-QJsonObject BrowserClients::readResponse(const QByteArray& arr)
-{
- QJsonObject json;
- const QJsonObject message = byteArrayToJson(arr);
- const QString clientID = getClientID(message);
-
- if (!clientID.isEmpty()) {
- const ClientPtr client = getClient(clientID);
- if (client->browserAction) {
- json = client->browserAction->readResponse(message);
- }
- }
-
- return json;
-}
-
-QJsonObject BrowserClients::byteArrayToJson(const QByteArray& arr) const
-{
- QJsonObject json;
- QJsonParseError err;
- QJsonDocument doc(QJsonDocument::fromJson(arr, &err));
- if (doc.isObject()) {
- json = doc.object();
- }
-
- return json;
-}
-
-QString BrowserClients::getClientID(const QJsonObject& json) const
-{
- return json["clientID"].toString();
-}
-
-BrowserClients::ClientPtr BrowserClients::getClient(const QString& clientID)
-{
- QMutexLocker locker(&m_mutex);
- for (const auto& i : m_clients) {
- if (i->clientID.compare(clientID, Qt::CaseSensitive) == 0) {
- return i;
- }
- }
-
- // clientID not found, create a new client
- QSharedPointer<BrowserAction> ba = QSharedPointer<BrowserAction>::create(m_browserService);
- ClientPtr client = ClientPtr::create(clientID, ba);
- m_clients.push_back(client);
- return m_clients.back();
-}
diff --git a/src/browser/BrowserClients.h b/src/browser/BrowserClients.h
deleted file mode 100644
index 1fa3dfe17..000000000
--- a/src/browser/BrowserClients.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef BROWSERCLIENTS_H
-#define BROWSERCLIENTS_H
-
-#include "BrowserAction.h"
-#include <QJsonObject>
-#include <QLocalSocket>
-#include <QMutex>
-#include <QSharedPointer>
-#include <QVector>
-
-class BrowserClients
-{
- struct Client
- {
- Client(const QString& id, QSharedPointer<BrowserAction> ba)
- : clientID(id)
- , browserAction(ba)
- {
- }
- QString clientID;
- QSharedPointer<BrowserAction> browserAction;
- };
-
- typedef QSharedPointer<Client> ClientPtr;
-
-public:
- BrowserClients(BrowserService& browserService);
- ~BrowserClients() = default;
-
- QJsonObject readResponse(const QByteArray& arr);
-
-private:
- QJsonObject byteArrayToJson(const QByteArray& arr) const;
- QString getClientID(const QJsonObject& json) const;
- ClientPtr getClient(const QString& clientID);
-
-private:
- QMutex m_mutex;
- QVector<ClientPtr> m_clients;
- BrowserService& m_browserService;
-};
-
-#endif // BROWSERCLIENTS_H
diff --git a/src/browser/BrowserHost.cpp b/src/browser/BrowserHost.cpp
new file mode 100644
index 000000000..ac4e996c3
--- /dev/null
+++ b/src/browser/BrowserHost.cpp
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "BrowserHost.h"
+#include "BrowserSettings.h"
+#include "BrowserShared.h"
+
+#include <QJsonDocument>
+#include <QLocalServer>
+#include <QLocalSocket>
+#include <QMutexLocker>
+#include <QtNetwork>
+
+#include "sodium.h"
+#include <iostream>
+
+#ifdef Q_OS_WIN
+#include <fcntl.h>
+#include <winsock2.h>
+
+#include <windows.h>
+#else
+#include <sys/socket.h>
+#include <sys/types.h>
+#endif
+
+BrowserHost::BrowserHost(QObject* parent)
+ : QObject(parent)
+{
+ m_localServer = new QLocalServer(this);
+ m_localServer->setSocketOptions(QLocalServer::UserAccessOption);
+ connect(m_localServer.data(), SIGNAL(newConnection()), this, SLOT(proxyConnected()));
+}
+
+BrowserHost::~BrowserHost()
+{
+ stop();
+}
+
+void BrowserHost::start()
+{
+ if (sodium_init() == -1) {
+ qWarning() << "Failed to start browser service: libsodium failed to initialize!";
+ return;
+ }
+
+ if (!m_localServer->isListening()) {
+ m_localServer->listen(BrowserShared::localServerPath());
+ }
+}
+
+void BrowserHost::stop()
+{
+ m_socketList.clear();
+ m_localServer->close();
+}
+
+void BrowserHost::proxyConnected()
+{
+ auto socket = m_localServer->nextPendingConnection();
+ if (socket) {
+ m_socketList.append(socket);
+ connect(socket, SIGNAL(readyRead()), this, SLOT(readProxyMessage()));
+ connect(socket, SIGNAL(disconnected()), this, SLOT(proxyDisconnected()));
+ }
+}
+
+void BrowserHost::readProxyMessage()
+{
+ QLocalSocket* socket = qobject_cast<QLocalSocket*>(QObject::sender());
+ if (!socket || socket->bytesAvailable() <= 0) {
+ return;
+ }
+
+ socket->setReadBufferSize(BrowserShared::NATIVEMSG_MAX_LENGTH);
+ int socketDesc = socket->socketDescriptor();
+ if (socketDesc) {
+ int max = BrowserShared::NATIVEMSG_MAX_LENGTH;
+ setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&max), sizeof(max));
+ }
+
+ QJsonParseError error;
+ auto json = QJsonDocument::fromJson(socket->readAll(), &error);
+ if (json.isNull()) {
+ qWarning() << "Failed to read proxy message: " << error.errorString();
+ return;
+ }
+
+ emit clientMessageReceived(json.object());
+}
+
+void BrowserHost::sendClientMessage(const QJsonObject& json)
+{
+ QString reply(QJsonDocument(json).toJson(QJsonDocument::Compact));
+ for (const auto socket : m_socketList) {
+ if (socket && socket->isValid() && socket->state() == QLocalSocket::ConnectedState) {
+ QByteArray arr = reply.toUtf8();
+ socket->write(arr.constData(), arr.length());
+ socket->flush();
+ }
+ }
+}
+
+void BrowserHost::proxyDisconnected()
+{
+ auto socket = qobject_cast<QLocalSocket*>(QObject::sender());
+ m_socketList.removeOne(socket);
+}
diff --git a/src/proxy/NativeMessagingHost.h b/src/browser/BrowserHost.h
index 5bedd9de5..ea8e07409 100644
--- a/src/proxy/NativeMessagingHost.h
+++ b/src/browser/BrowserHost.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,29 +18,37 @@
#ifndef NATIVEMESSAGINGHOST_H
#define NATIVEMESSAGINGHOST_H
-#include "NativeMessagingBase.h"
+#include <QJsonObject>
+#include <QObject>
+#include <QPointer>
-class NativeMessagingHost : public NativeMessagingBase
+class QLocalServer;
+class QLocalSocket;
+
+class BrowserHost : public QObject
{
Q_OBJECT
+
public:
- NativeMessagingHost();
- ~NativeMessagingHost() override;
+ explicit BrowserHost(QObject* parent = nullptr);
+ ~BrowserHost() override;
-public slots:
- void newLocalMessage();
- void deleteSocket();
- void socketStateChanged(QLocalSocket::LocalSocketState socketState);
+ void start();
+ void stop();
-private:
- void readNativeMessages() override;
- void readLength() override;
- bool readStdIn(const quint32 length) override;
+ void sendClientMessage(const QJsonObject& json);
-private:
- QLocalSocket* m_localSocket;
+signals:
+ void clientMessageReceived(const QJsonObject& json);
+
+private slots:
+ void proxyConnected();
+ void readProxyMessage();
+ void proxyDisconnected();
- Q_DISABLE_COPY(NativeMessagingHost)
+private:
+ QPointer<QLocalServer> m_localServer;
+ QList<QLocalSocket*> m_socketList;
};
#endif // NATIVEMESSAGINGHOST_H
diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp
index 42def203a..1f54e33ca 100644
--- a/src/browser/BrowserService.cpp
+++ b/src/browser/BrowserService.cpp
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2013 Francois Ferrand
* Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,8 +26,10 @@
#include <QUuid>
#include "BrowserAccessControlDialog.h"
+#include "BrowserAction.h"
#include "BrowserEntryConfig.h"
#include "BrowserEntrySaveDialog.h"
+#include "BrowserHost.h"
#include "BrowserService.h"
#include "BrowserSettings.h"
#include "core/Database.h"
@@ -39,16 +41,14 @@
#include "gui/MainWindow.h"
#include "gui/MessageBox.h"
#ifdef Q_OS_MACOS
-#include "gui/macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
#endif
const QString BrowserService::KEEPASSXCBROWSER_NAME = QStringLiteral("KeePassXC-Browser Settings");
const QString BrowserService::KEEPASSXCBROWSER_OLD_NAME = QStringLiteral("keepassxc-browser Settings");
-const QString BrowserService::ASSOCIATE_KEY_PREFIX = QStringLiteral("KPXC_BROWSER_");
static const QString KEEPASSXCBROWSER_GROUP_NAME = QStringLiteral("KeePassXC-Browser Passwords");
static int KEEPASSXCBROWSER_DEFAULT_ICON = 1;
// These are for the settings and password conversion
-const QString BrowserService::LEGACY_ASSOCIATE_KEY_PREFIX = QStringLiteral("Public Key: ");
static const QString KEEPASSHTTP_NAME = QStringLiteral("KeePassHttp Settings");
static const QString KEEPASSHTTP_GROUP_NAME = QStringLiteral("KeePassHttp Passwords");
// Extra entry related options saved in custom data
@@ -58,34 +58,45 @@ const QString BrowserService::OPTION_ONLY_HTTP_AUTH = QStringLiteral("BrowserOnl
// Multiple URL's
const QString BrowserService::ADDITIONAL_URL = QStringLiteral("KP2A_URL");
-BrowserService::BrowserService(DatabaseTabWidget* parent)
- : m_dbTabWidget(parent)
+Q_GLOBAL_STATIC(BrowserService, s_browserService);
+
+BrowserService::BrowserService()
+ : QObject()
+ , m_browserHost(new BrowserHost)
, m_dialogActive(false)
, m_bringToFrontRequested(false)
, m_prevWindowState(WindowState::Normal)
, m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224"))
{
- // Don't connect the signals when used from DatabaseSettingsWidgetBrowser (parent is nullptr)
- if (m_dbTabWidget) {
- connect(m_dbTabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), this, SLOT(databaseLocked(DatabaseWidget*)));
- connect(
- m_dbTabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), this, SLOT(databaseUnlocked(DatabaseWidget*)));
- connect(m_dbTabWidget,
- SIGNAL(activateDatabaseChanged(DatabaseWidget*)),
- this,
- SLOT(activateDatabaseChanged(DatabaseWidget*)));
+ connect(m_browserHost, &BrowserHost::clientMessageReceived, this, &BrowserService::processClientMessage);
+ setEnabled(browserSettings()->isEnabled());
+}
+
+BrowserService* BrowserService::instance()
+{
+ return s_browserService;
+}
+
+void BrowserService::setEnabled(bool enabled)
+{
+ if (enabled) {
+ // Update KeePassXC/keepassxc-proxy binary paths to Native Messaging scripts
+ if (browserSettings()->updateBinaryPath()) {
+ browserSettings()->updateBinaryPaths();
+ }
+
+ m_browserHost->start();
+ } else {
+ m_browserHost->stop();
}
}
bool BrowserService::isDatabaseOpened() const
{
- DatabaseWidget* dbWidget = m_dbTabWidget->currentDatabaseWidget();
- if (!dbWidget) {
- return false;
+ if (m_currentDatabaseWidget) {
+ return !m_currentDatabaseWidget->isLocked();
}
-
- return dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode
- || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode;
+ return false;
}
bool BrowserService::openDatabase(bool triggerUnlock)
@@ -94,19 +105,14 @@ bool BrowserService::openDatabase(bool triggerUnlock)
return false;
}
- DatabaseWidget* dbWidget = m_dbTabWidget->currentDatabaseWidget();
- if (!dbWidget) {
- return false;
- }
-
- if (dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode
- || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode) {
+ if (m_currentDatabaseWidget && !m_currentDatabaseWidget->isLocked()) {
return true;
}
if (triggerUnlock) {
m_bringToFrontRequested = true;
- raiseWindow(true);
+ updateWindowState();
+ emit requestUnlock();
}
return false;
@@ -114,19 +120,20 @@ bool BrowserService::openDatabase(bool triggerUnlock)
void BrowserService::lockDatabase()
{
- if (thread() != QThread::currentThread()) {
- QMetaObject::invokeMethod(this, "lockDatabase", Qt::BlockingQueuedConnection);
- }
-
- DatabaseWidget* dbWidget = m_dbTabWidget->currentDatabaseWidget();
- if (!dbWidget) {
- return;
+ if (m_currentDatabaseWidget) {
+ m_currentDatabaseWidget->lock();
}
+}
- if (dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode
- || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode) {
- dbWidget->lock();
+QString BrowserService::getDatabaseHash(bool legacy)
+{
+ if (legacy) {
+ return QCryptographicHash::hash(
+ (browserService()->getDatabaseRootUuid() + browserService()->getDatabaseRecycleBinUuid()).toUtf8(),
+ QCryptographicHash::Sha256)
+ .toHex();
}
+ return QCryptographicHash::hash(getDatabaseRootUuid().toUtf8(), QCryptographicHash::Sha256).toHex();
}
QString BrowserService::getDatabaseRootUuid()
@@ -180,9 +187,9 @@ QJsonArray BrowserService::getChildrenFromGroup(Group* group)
return groupList;
}
-QJsonObject BrowserService::getDatabaseGroups(const QSharedPointer<Database>& selectedDb)
+QJsonObject BrowserService::getDatabaseGroups()
{
- auto db = selectedDb ? selectedDb : getDatabase();
+ auto db = getDatabase();
if (!db) {
return {};
}
@@ -208,15 +215,6 @@ QJsonObject BrowserService::getDatabaseGroups(const QSharedPointer<Database>& se
QJsonObject BrowserService::createNewGroup(const QString& groupName)
{
- QJsonObject result;
- if (thread() != QThread::currentThread()) {
- QMetaObject::invokeMethod(this,
- "createNewGroup",
- Qt::BlockingQueuedConnection,
- Q_RETURN_ARG(QJsonObject, result),
- Q_ARG(QString, groupName));
- return result;
- }
auto db = getDatabase();
if (!db) {
@@ -232,6 +230,7 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
// Group already exists
if (group) {
+ QJsonObject result;
result["name"] = group->name();
result["uuid"] = Tools::uuidToHex(group->uuid());
return result;
@@ -245,7 +244,7 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
MessageBox::Yes | MessageBox::No);
if (dialogResult != MessageBox::Yes) {
- return result;
+ return {};
}
QString name, uuid;
@@ -279,6 +278,7 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
previousGroup = tempGroup;
}
+ QJsonObject result;
result["name"] = name;
result["uuid"] = uuid;
return result;
@@ -286,25 +286,18 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
QString BrowserService::storeKey(const QString& key)
{
- QString id;
-
- if (thread() != QThread::currentThread()) {
- QMetaObject::invokeMethod(
- this, "storeKey", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, id), Q_ARG(QString, key));
- return id;
- }
-
auto db = getDatabase();
if (!db) {
return {};
}
bool contains;
- MessageBox::Button dialogResult = MessageBox::Cancel;
+ auto dialogResult = MessageBox::Cancel;
+ QString id;
do {
QInputDialog keyDialog;
- connect(m_dbTabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), &keyDialog, SLOT(reject()));
+ connect(m_currentDatabaseWidget, SIGNAL(databaseLocked()), &keyDialog, SLOT(reject()));
keyDialog.setWindowTitle(tr("KeePassXC: New key association request"));
keyDialog.setLabelText(tr("You have received an association request for the following database:\n%1\n\n"
"Give the connection a unique name or ID, for example:\nchrome-laptop.")
@@ -324,7 +317,7 @@ QString BrowserService::storeKey(const QString& key)
return {};
}
- contains = db->metadata()->customData()->contains(ASSOCIATE_KEY_PREFIX + id);
+ contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id);
if (contains) {
dialogResult = MessageBox::warning(nullptr,
tr("KeePassXC: Overwrite existing key?"),
@@ -337,7 +330,9 @@ QString BrowserService::storeKey(const QString& key)
} while (contains && dialogResult == MessageBox::Cancel);
hideWindow();
- db->metadata()->customData()->set(ASSOCIATE_KEY_PREFIX + id, key);
+ db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + id, key);
+ db->metadata()->customData()->set(QString("%1_%2").arg(CustomData::Created, id),
+ Clock::currentDateTime().toString(Qt::SystemLocaleShortDate));
return id;
}
@@ -348,31 +343,17 @@ QString BrowserService::getKey(const QString& id)
return {};
}
- return db->metadata()->customData()->value(ASSOCIATE_KEY_PREFIX + id);
+ return db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + id);
}
-QJsonArray BrowserService::findMatchingEntries(const QString& id,
+QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
const QString& url,
const QString& submitUrl,
const QString& realm,
const StringPairList& keyList,
const bool httpAuth)
{
- QJsonArray result;
- if (thread() != QThread::currentThread()) {
- QMetaObject::invokeMethod(this,
- "findMatchingEntries",
- Qt::BlockingQueuedConnection,
- Q_RETURN_ARG(QJsonArray, result),
- Q_ARG(QString, id),
- Q_ARG(QString, url),
- Q_ARG(QString, submitUrl),
- Q_ARG(QString, realm),
- Q_ARG(StringPairList, keyList),
- Q_ARG(bool, httpAuth));
- return result;
- }
-
+ Q_UNUSED(dbid);
const bool alwaysAllowAccess = browserSettings()->alwaysAllowAccess();
const bool ignoreHttpAuth = browserSettings()->httpAuthPermission();
const QString host = QUrl(url).host();
@@ -417,23 +398,25 @@ QJsonArray BrowserService::findMatchingEntries(const QString& id,
}
// Confirm entries
- if (confirmEntries(pwEntriesToConfirm, url, host, submitUrl, realm, httpAuth)) {
- pwEntries.append(pwEntriesToConfirm);
+ QList<Entry*> selectedEntriesToConfirm = confirmEntries(pwEntriesToConfirm, url, host, submitHost, realm, httpAuth);
+ if (!selectedEntriesToConfirm.isEmpty()) {
+ pwEntries.append(selectedEntriesToConfirm);
}
if (pwEntries.isEmpty()) {
- return QJsonArray();
+ return {};
}
// Ensure that database is not locked when the popup was visible
if (!isDatabaseOpened()) {
- return QJsonArray();
+ return {};
}
// Sort results
pwEntries = sortEntries(pwEntries, host, submitUrl);
// Fill the list
+ QJsonArray result;
for (auto* entry : pwEntries) {
result.append(prepareEntry(entry));
}
@@ -441,7 +424,7 @@ QJsonArray BrowserService::findMatchingEntries(const QString& id,
return result;
}
-void BrowserService::addEntry(const QString& id,
+void BrowserService::addEntry(const QString& dbid,
const QString& login,
const QString& password,
const QString& url,
@@ -451,21 +434,8 @@ void BrowserService::addEntry(const QString& id,
const QString& groupUuid,
const QSharedPointer<Database>& selectedDb)
{
- if (thread() != QThread::currentThread()) {
- QMetaObject::invokeMethod(this,
- "addEntry",
- Qt::BlockingQueuedConnection,
- Q_ARG(QString, id),
- Q_ARG(QString, login),
- Q_ARG(QString, password),
- Q_ARG(QString, url),
- Q_ARG(QString, submitUrl),
- Q_ARG(QString, realm),
- Q_ARG(QString, group),
- Q_ARG(QString, groupUuid),
- Q_ARG(QSharedPointer<Database>, selectedDb));
- }
-
+ // TODO: select database based on this key id
+ Q_UNUSED(dbid);
auto db = selectedDb ? selectedDb : selectedDatabase();
if (!db) {
return;
@@ -507,37 +477,25 @@ void BrowserService::addEntry(const QString& id,
config.save(entry);
}
-BrowserService::ReturnValue BrowserService::updateEntry(const QString& id,
- const QString& uuid,
- const QString& login,
- const QString& password,
- const QString& url,
- const QString& submitUrl)
+bool BrowserService::updateEntry(const QString& dbid,
+ const QString& uuid,
+ const QString& login,
+ const QString& password,
+ const QString& url,
+ const QString& submitUrl)
{
- ReturnValue result = ReturnValue::Error;
- if (thread() != QThread::currentThread()) {
- QMetaObject::invokeMethod(this,
- "updateEntry",
- Qt::BlockingQueuedConnection,
- Q_RETURN_ARG(ReturnValue, result),
- Q_ARG(QString, id),
- Q_ARG(QString, uuid),
- Q_ARG(QString, login),
- Q_ARG(QString, password),
- Q_ARG(QString, url),
- Q_ARG(QString, submitUrl));
- }
-
+ // TODO: select database based on this key id
+ Q_UNUSED(dbid);
auto db = selectedDatabase();
if (!db) {
- return ReturnValue::Error;
+ return false;
}
Entry* entry = db->rootGroup()->findEntryByUuid(Tools::hexToUuid(uuid));
if (!entry) {
// If entry is not found for update, add a new one to the selected database
- addEntry(id, login, password, url, submitUrl, "", "", "", db);
- return ReturnValue::Success;
+ addEntry(dbid, login, password, url, submitUrl, "", "", "", db);
+ return true;
}
// Check if the entry password is a reference. If so, update the original entry instead
@@ -546,16 +504,17 @@ BrowserService::ReturnValue BrowserService::updateEntry(const QString& id,
if (!referenceUuid.isNull()) {
entry = db->rootGroup()->findEntryByUuid(referenceUuid);
if (!entry) {
- return ReturnValue::Error;
+ return false;
}
}
}
QString username = entry->username();
if (username.isEmpty()) {
- return ReturnValue::Error;
+ return false;
}
+ bool result = false;
if (username.compare(login, Qt::CaseSensitive) != 0
|| entry->password().compare(password, Qt::CaseSensitive) != 0) {
MessageBox::Button dialogResult = MessageBox::No;
@@ -577,9 +536,7 @@ BrowserService::ReturnValue BrowserService::updateEntry(const QString& id,
}
entry->setPassword(password);
entry->endUpdate();
- result = ReturnValue::Success;
- } else {
- result = ReturnValue::Canceled;
+ result = true;
}
hideWindow();
@@ -609,7 +566,8 @@ BrowserService::searchEntries(const QSharedPointer<Database>& db, const QString&
// Search for additional URL's starting with KP2A_URL
for (const auto& key : entry->attributes()->keys()) {
- if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), url, submitUrl)) {
+ if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), url, submitUrl)
+ && !entries.contains(entry)) {
entries.append(entry);
continue;
}
@@ -631,7 +589,7 @@ QList<Entry*> BrowserService::searchEntries(const QString& url, const QString& s
// Check if database is connected with KeePassXC-Browser
auto databaseConnected = [&](const QSharedPointer<Database>& db) {
for (const StringPair& keyPair : keyList) {
- QString key = db->metadata()->customData()->value(ASSOCIATE_KEY_PREFIX + keyPair.first);
+ QString key = db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + keyPair.first);
if (!key.isEmpty() && keyPair.second == key) {
return true;
}
@@ -642,17 +600,14 @@ QList<Entry*> BrowserService::searchEntries(const QString& url, const QString& s
// Get the list of databases to search
QList<QSharedPointer<Database>> databases;
if (browserSettings()->searchInAllDatabases()) {
- const int count = m_dbTabWidget->count();
- for (int i = 0; i < count; ++i) {
- if (auto* dbWidget = qobject_cast<DatabaseWidget*>(m_dbTabWidget->widget(i))) {
- if (const auto& db = dbWidget->database()) {
- if (databaseConnected(db)) {
- databases << db;
- }
- }
+ for (auto dbWidget : getMainWindow()->getOpenDatabases()) {
+ auto db = dbWidget->database();
+ if (db && databaseConnected(dbWidget->database())) {
+ databases << db;
}
}
- } else if (const auto& db = getDatabase()) {
+ } else {
+ const auto& db = getDatabase();
if (databaseConnected(db)) {
databases << db;
}
@@ -670,9 +625,8 @@ QList<Entry*> BrowserService::searchEntries(const QString& url, const QString& s
return entries;
}
-void BrowserService::convertAttributesToCustomData(const QSharedPointer<Database>& currentDb)
+void BrowserService::convertAttributesToCustomData(QSharedPointer<Database> db)
{
- auto db = currentDb ? currentDb : getDatabase();
if (!db) {
return;
}
@@ -702,7 +656,7 @@ void BrowserService::convertAttributesToCustomData(const QSharedPointer<Database
if (entry->title() == KEEPASSHTTP_NAME || entry->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive)) {
keyCounter += moveKeysToCustomData(entry, db);
- delete entry;
+ db->recycleEntry(entry);
}
progress.setValue(progress.value() + 1);
@@ -788,59 +742,69 @@ QList<Entry*> BrowserService::sortEntries(QList<Entry*>& pwEntries, const QStrin
return results;
}
-bool BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
- const QString& url,
- const QString& host,
- const QString& submitUrl,
- const QString& realm,
- const bool httpAuth)
+QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
+ const QString& url,
+ const QString& host,
+ const QString& submitHost,
+ const QString& realm,
+ const bool httpAuth)
{
if (pwEntriesToConfirm.isEmpty() || m_dialogActive) {
- return false;
+ return {};
}
m_dialogActive = true;
+ updateWindowState();
BrowserAccessControlDialog accessControlDialog;
- connect(m_dbTabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), &accessControlDialog, SLOT(reject()));
- accessControlDialog.setUrl(!submitUrl.isEmpty() ? submitUrl : url);
- accessControlDialog.setItems(pwEntriesToConfirm);
- accessControlDialog.setHTTPAuth(httpAuth);
- raiseWindow();
- accessControlDialog.show();
- accessControlDialog.activateWindow();
- accessControlDialog.raise();
+ connect(m_currentDatabaseWidget, SIGNAL(databaseLocked()), &accessControlDialog, SLOT(reject()));
- const QString submitHost = QUrl(submitUrl).host();
- int res = accessControlDialog.exec();
- if (accessControlDialog.remember()) {
- for (auto* entry : pwEntriesToConfirm) {
- BrowserEntryConfig config;
- config.load(entry);
- if (res == QDialog::Accepted) {
+ connect(&accessControlDialog, &BrowserAccessControlDialog::disableAccess, [&](QTableWidgetItem* item) {
+ auto entry = pwEntriesToConfirm[item->row()];
+ BrowserEntryConfig config;
+ config.load(entry);
+ config.deny(host);
+ if (!submitHost.isEmpty() && host != submitHost) {
+ config.deny(submitHost);
+ }
+ if (!realm.isEmpty()) {
+ config.setRealm(realm);
+ }
+ config.save(entry);
+ });
+
+ accessControlDialog.setItems(pwEntriesToConfirm, !submitHost.isEmpty() ? submitHost : url, httpAuth);
+
+ QList<Entry*> allowedEntries;
+ if (accessControlDialog.exec() == QDialog::Accepted) {
+ const auto selectedEntries = accessControlDialog.getSelectedEntries();
+ for (auto item : accessControlDialog.getSelectedEntries()) {
+ auto entry = pwEntriesToConfirm[item->row()];
+ if (accessControlDialog.remember()) {
+ BrowserEntryConfig config;
+ config.load(entry);
config.allow(host);
- if (!submitHost.isEmpty() && host != submitHost)
- config.allow(submitHost);
- } else if (res == QDialog::Rejected) {
- config.deny(host);
if (!submitHost.isEmpty() && host != submitHost) {
- config.deny(submitHost);
+ config.allow(submitHost);
}
+ if (!realm.isEmpty()) {
+ config.setRealm(realm);
+ }
+ config.save(entry);
}
- if (!realm.isEmpty()) {
- config.setRealm(realm);
- }
- config.save(entry);
+ allowedEntries.append(entry);
}
}
- m_dialogActive = false;
+#ifdef Q_OS_MAC
+ // Re-hide the application if it wasn't visible before
+ // only affects macOS because dialogs force the main window to show
hideWindow();
- if (res == QDialog::Accepted) {
- return true;
- }
+#endif
- return false;
+ m_dialogActive = false;
+
+ return allowedEntries;
}
QJsonObject BrowserService::prepareEntry(const Entry* entry)
@@ -850,6 +814,7 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry)
res["password"] = entry->resolveMultiplePlaceholders(entry->password());
res["name"] = entry->resolveMultiplePlaceholders(entry->title());
res["uuid"] = entry->resolveMultiplePlaceholders(entry->uuidToHex());
+ res["group"] = entry->resolveMultiplePlaceholders(entry->group()->name());
if (entry->hasTotp()) {
res["totp"] = entry->totp();
@@ -881,13 +846,14 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry)
BrowserService::Access
BrowserService::checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm)
{
+ if (entry->isExpired()) {
+ return browserSettings()->allowExpiredCredentials() ? Allowed : Denied;
+ }
+
BrowserEntryConfig config;
if (!config.load(entry)) {
return Unknown;
}
- if (entry->isExpired()) {
- return browserSettings()->allowExpiredCredentials() ? Allowed : Denied;
- }
if ((config.isAllowed(host)) && (submitHost.isEmpty() || config.isAllowed(submitHost))) {
return Allowed;
}
@@ -1096,10 +1062,8 @@ QString BrowserService::baseDomain(const QString& hostname) const
QSharedPointer<Database> BrowserService::getDatabase()
{
- if (DatabaseWidget* dbWidget = m_dbTabWidget->currentDatabaseWidget()) {
- if (const auto& db = dbWidget->database()) {
- return db;
- }
+ if (m_currentDatabaseWidget) {
+ return m_currentDatabaseWidget->database();
}
return {};
}
@@ -1107,22 +1071,15 @@ QSharedPointer<Database> BrowserService::getDatabase()
QSharedPointer<Database> BrowserService::selectedDatabase()
{
QList<DatabaseWidget*> databaseWidgets;
- for (int i = 0;; ++i) {
- auto* dbWidget = m_dbTabWidget->databaseWidgetFromIndex(i);
+ for (auto dbWidget : getMainWindow()->getOpenDatabases()) {
// Add only open databases
- if (dbWidget && dbWidget->database()->hasKey()
- && (dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode
- || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode)) {
- databaseWidgets.push_back(dbWidget);
- continue;
+ if (!dbWidget->isLocked()) {
+ databaseWidgets << dbWidget;
}
-
- // Break out if dbStruct.dbWidget is nullptr
- break;
}
BrowserEntrySaveDialog browserEntrySaveDialog;
- int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_dbTabWidget->currentDatabaseWidget());
+ int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_currentDatabaseWidget);
if (openDatabaseCount > 1) {
int res = browserEntrySaveDialog.exec();
if (res == QDialog::Accepted) {
@@ -1140,7 +1097,7 @@ QSharedPointer<Database> BrowserService::selectedDatabase()
return getDatabase();
}
-bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name) const
+bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name)
{
if (entry->attributes()->contains(name)) {
QString attr = entry->attributes()->value(name);
@@ -1155,17 +1112,18 @@ bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name)
return false;
}
-int BrowserService::moveKeysToCustomData(Entry* entry, const QSharedPointer<Database>& db) const
+int BrowserService::moveKeysToCustomData(Entry* entry, QSharedPointer<Database> db)
{
int keyCounter = 0;
for (const auto& key : entry->attributes()->keys()) {
- if (key.contains(LEGACY_ASSOCIATE_KEY_PREFIX)) {
+ if (key.contains(CustomData::BrowserLegacyKeyPrefix)) {
QString publicKey = key;
- publicKey.remove(LEGACY_ASSOCIATE_KEY_PREFIX);
+ publicKey.remove(CustomData::BrowserLegacyKeyPrefix);
// Add key to database custom data
- if (db && !db->metadata()->customData()->contains(ASSOCIATE_KEY_PREFIX + publicKey)) {
- db->metadata()->customData()->set(ASSOCIATE_KEY_PREFIX + publicKey, entry->attributes()->value(key));
+ if (db && !db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + publicKey)) {
+ db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + publicKey,
+ entry->attributes()->value(key));
++keyCounter;
}
}
@@ -1174,14 +1132,9 @@ int BrowserService::moveKeysToCustomData(Entry* entry, const QSharedPointer<Data
return keyCounter;
}
-bool BrowserService::checkLegacySettings()
+bool BrowserService::checkLegacySettings(QSharedPointer<Database> db)
{
- if (!browserSettings()->isEnabled() || browserSettings()->noMigrationPrompt()) {
- return false;
- }
-
- auto db = getDatabase();
- if (!db) {
+ if (!db || !browserSettings()->isEnabled() || browserSettings()->noMigrationPrompt()) {
return false;
}
@@ -1264,36 +1217,80 @@ void BrowserService::raiseWindow(const bool force)
#endif
}
+void BrowserService::updateWindowState()
+{
+ m_prevWindowState = WindowState::Normal;
+ if (getMainWindow()->isMinimized()) {
+ m_prevWindowState = WindowState::Minimized;
+ }
+#ifdef Q_OS_MACOS
+ if (macUtils()->isHidden()) {
+ m_prevWindowState = WindowState::Hidden;
+ }
+#else
+ if (getMainWindow()->isHidden()) {
+ m_prevWindowState = WindowState::Hidden;
+ }
+#endif
+}
+
void BrowserService::databaseLocked(DatabaseWidget* dbWidget)
{
if (dbWidget) {
- emit databaseLocked();
+ QJsonObject msg;
+ msg["action"] = QString("database-locked");
+ m_browserHost->sendClientMessage(msg);
}
}
void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget)
{
if (dbWidget) {
+#ifdef Q_OS_MAC
if (m_bringToFrontRequested) {
- hideWindow();
m_bringToFrontRequested = false;
+ hideWindow();
}
- emit databaseUnlocked();
+#endif
+
+ QJsonObject msg;
+ msg["action"] = QString("database-unlocked");
+ m_browserHost->sendClientMessage(msg);
- if (checkLegacySettings()) {
- convertAttributesToCustomData();
+ auto db = dbWidget->database();
+ if (checkLegacySettings(db)) {
+ convertAttributesToCustomData(db);
}
}
}
-void BrowserService::activateDatabaseChanged(DatabaseWidget* dbWidget)
+void BrowserService::activeDatabaseChanged(DatabaseWidget* dbWidget)
{
- if (dbWidget) {
- auto currentMode = dbWidget->currentMode();
- if (currentMode == DatabaseWidget::Mode::ViewMode || currentMode == DatabaseWidget::Mode::EditMode) {
- emit databaseUnlocked();
+ // Only emit these signals when we are not searching in all databases
+ if (dbWidget && !browserSettings()->searchInAllDatabases()) {
+ if (dbWidget->isLocked()) {
+ databaseLocked(dbWidget);
} else {
- emit databaseLocked();
+ databaseUnlocked(dbWidget);
}
}
+
+ m_currentDatabaseWidget = dbWidget;
+}
+
+void BrowserService::processClientMessage(const QJsonObject& message)
+{
+ auto clientID = message["clientID"].toString();
+ if (clientID.isEmpty()) {
+ return;
+ }
+
+ // Create a new client action if we haven't seen this id yet
+ if (!m_browserClients.contains(clientID)) {
+ m_browserClients.insert(clientID, QSharedPointer<BrowserAction>::create());
+ }
+
+ auto& action = m_browserClients.value(clientID);
+ auto response = action->processClientMessage(message);
+ m_browserHost->sendClientMessage(response);
}
diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h
index 495c9ac25..6567a44d0 100644
--- a/src/browser/BrowserService.h
+++ b/src/browser/BrowserService.h
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2013 Francois Ferrand
* Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,9 @@
#define BROWSERSERVICE_H
#include "core/Entry.h"
-#include "gui/DatabaseTabWidget.h"
#include <QObject>
+#include <QPointer>
+#include <QSharedPointer>
#include <QtCore>
typedef QPair<QString, QString> StringPair;
@@ -33,28 +34,32 @@ enum
max_length = 16 * 1024
};
+class DatabaseWidget;
+class BrowserHost;
+class BrowserAction;
+
class BrowserService : public QObject
{
Q_OBJECT
public:
- enum ReturnValue
- {
- Success,
- Error,
- Canceled
- };
+ explicit BrowserService();
+ static BrowserService* instance();
- explicit BrowserService(DatabaseTabWidget* parent);
+ void setEnabled(bool enabled);
+
+ QString getKey(const QString& id);
+ QString storeKey(const QString& key);
+ QString getDatabaseHash(bool legacy = false);
bool isDatabaseOpened() const;
bool openDatabase(bool triggerUnlock);
- QString getDatabaseRootUuid();
- QString getDatabaseRecycleBinUuid();
- QJsonObject getDatabaseGroups(const QSharedPointer<Database>& selectedDb = {});
+ void lockDatabase();
+
+ QJsonObject getDatabaseGroups();
QJsonObject createNewGroup(const QString& groupName);
- QString getKey(const QString& id);
- void addEntry(const QString& id,
+
+ void addEntry(const QString& dbid,
const QString& login,
const QString& password,
const QString& url,
@@ -63,43 +68,39 @@ public:
const QString& group,
const QString& groupUuid,
const QSharedPointer<Database>& selectedDb = {});
- QList<Entry*> searchEntries(const QSharedPointer<Database>& db, const QString& url, const QString& submitUrl);
- QList<Entry*> searchEntries(const QString& url, const QString& submitUrl, const StringPairList& keyList);
- void convertAttributesToCustomData(const QSharedPointer<Database>& currentDb = {});
+ bool updateEntry(const QString& dbid,
+ const QString& uuid,
+ const QString& login,
+ const QString& password,
+ const QString& url,
+ const QString& submitUrl);
+
+ QJsonArray findMatchingEntries(const QString& dbid,
+ const QString& url,
+ const QString& submitUrl,
+ const QString& realm,
+ const StringPairList& keyList,
+ const bool httpAuth = false);
+
+ static void convertAttributesToCustomData(QSharedPointer<Database> db);
-public:
static const QString KEEPASSXCBROWSER_NAME;
static const QString KEEPASSXCBROWSER_OLD_NAME;
- static const QString ASSOCIATE_KEY_PREFIX;
- static const QString LEGACY_ASSOCIATE_KEY_PREFIX;
static const QString OPTION_SKIP_AUTO_SUBMIT;
static const QString OPTION_HIDE_ENTRY;
static const QString OPTION_ONLY_HTTP_AUTH;
static const QString ADDITIONAL_URL;
+signals:
+ void requestUnlock();
+
public slots:
- QJsonArray findMatchingEntries(const QString& id,
- const QString& url,
- const QString& submitUrl,
- const QString& realm,
- const StringPairList& keyList,
- const bool httpAuth = false);
- QString storeKey(const QString& key);
- ReturnValue updateEntry(const QString& id,
- const QString& uuid,
- const QString& login,
- const QString& password,
- const QString& url,
- const QString& submitUrl);
void databaseLocked(DatabaseWidget* dbWidget);
void databaseUnlocked(DatabaseWidget* dbWidget);
- void activateDatabaseChanged(DatabaseWidget* dbWidget);
- void lockDatabase();
+ void activeDatabaseChanged(DatabaseWidget* dbWidget);
-signals:
- void databaseLocked();
- void databaseUnlocked();
- void databaseChanged();
+private slots:
+ void processClientMessage(const QJsonObject& message);
private:
enum Access
@@ -116,15 +117,17 @@ private:
Hidden
};
-private:
+ QList<Entry*> searchEntries(const QSharedPointer<Database>& db, const QString& url, const QString& submitUrl);
+ QList<Entry*> searchEntries(const QString& url, const QString& submitUrl, const StringPairList& keyList);
QList<Entry*> sortEntries(QList<Entry*>& pwEntries, const QString& host, const QString& submitUrl);
- bool confirmEntries(QList<Entry*>& pwEntriesToConfirm,
- const QString& url,
- const QString& host,
- const QString& submitUrl,
- const QString& realm,
- const bool httpAuth);
+ QList<Entry*> confirmEntries(QList<Entry*>& pwEntriesToConfirm,
+ const QString& url,
+ const QString& host,
+ const QString& submitUrl,
+ const QString& realm,
+ const bool httpAuth);
QJsonObject prepareEntry(const Entry* entry);
+ QJsonArray getChildrenFromGroup(Group* group);
Access checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm);
Group* getDefaultEntryGroup(const QSharedPointer<Database>& selectedDb = {});
int
@@ -135,21 +138,36 @@ private:
QString baseDomain(const QString& hostname) const;
QSharedPointer<Database> getDatabase();
QSharedPointer<Database> selectedDatabase();
- QJsonArray getChildrenFromGroup(Group* group);
- bool moveSettingsToCustomData(Entry* entry, const QString& name) const;
- int moveKeysToCustomData(Entry* entry, const QSharedPointer<Database>& db) const;
- bool checkLegacySettings();
+ QString getDatabaseRootUuid();
+ QString getDatabaseRecycleBinUuid();
+
+ bool checkLegacySettings(QSharedPointer<Database> db);
+
void hideWindow() const;
void raiseWindow(const bool force = false);
+ void updateWindowState();
+
+ static bool moveSettingsToCustomData(Entry* entry, const QString& name);
+ static int moveKeysToCustomData(Entry* entry, QSharedPointer<Database> db);
+
+ QPointer<BrowserHost> m_browserHost;
+ QHash<QString, QSharedPointer<BrowserAction>> m_browserClients;
-private:
- DatabaseTabWidget* const m_dbTabWidget;
bool m_dialogActive;
bool m_bringToFrontRequested;
WindowState m_prevWindowState;
QUuid m_keepassBrowserUUID;
+ QPointer<DatabaseWidget> m_currentDatabaseWidget;
+
+ Q_DISABLE_COPY(BrowserService);
+
friend class TestBrowser;
};
+static inline BrowserService* browserService()
+{
+ return BrowserService::instance();
+}
+
#endif // BROWSERSERVICE_H
diff --git a/src/browser/BrowserSettings.cpp b/src/browser/BrowserSettings.cpp
index 9cb4e0735..93b5c138b 100644
--- a/src/browser/BrowserSettings.cpp
+++ b/src/browser/BrowserSettings.cpp
@@ -19,6 +19,7 @@
#include "BrowserSettings.h"
#include "core/Config.h"
+#include "core/PasswordHealth.h"
BrowserSettings* BrowserSettings::m_instance(nullptr);
@@ -33,62 +34,62 @@ BrowserSettings* BrowserSettings::instance()
bool BrowserSettings::isEnabled()
{
- return config()->get("Browser/Enabled", false).toBool();
+ return config()->get(Config::Browser_Enabled).toBool();
}
void BrowserSettings::setEnabled(bool enabled)
{
- config()->set("Browser/Enabled", enabled);
+ config()->set(Config::Browser_Enabled, enabled);
}
bool BrowserSettings::showNotification()
{
- return config()->get("Browser/ShowNotification", true).toBool();
+ return config()->get(Config::Browser_ShowNotification).toBool();
}
void BrowserSettings::setShowNotification(bool showNotification)
{
- config()->set("Browser/ShowNotification", showNotification);
+ config()->set(Config::Browser_ShowNotification, showNotification);
}
bool BrowserSettings::bestMatchOnly()
{
- return config()->get("Browser/BestMatchOnly", false).toBool();
+ return config()->get(Config::Browser_BestMatchOnly).toBool();
}
void BrowserSettings::setBestMatchOnly(bool bestMatchOnly)
{
- config()->set("Browser/BestMatchOnly", bestMatchOnly);
+ config()->set(Config::Browser_BestMatchOnly, bestMatchOnly);
}
bool BrowserSettings::unlockDatabase()
{
- return config()->get("Browser/UnlockDatabase", true).toBool();
+ return config()->get(Config::Browser_UnlockDatabase).toBool();
}
void BrowserSettings::setUnlockDatabase(bool unlockDatabase)
{
- config()->set("Browser/UnlockDatabase", unlockDatabase);
+ config()->set(Config::Browser_UnlockDatabase, unlockDatabase);
}
bool BrowserSettings::matchUrlScheme()
{
- return config()->get("Browser/MatchUrlScheme", true).toBool();
+ return config()->get(Config::Browser_MatchUrlScheme).toBool();
}
void BrowserSettings::setMatchUrlScheme(bool matchUrlScheme)
{
- config()->set("Browser/MatchUrlScheme", matchUrlScheme);
+ config()->set(Config::Browser_MatchUrlScheme, matchUrlScheme);
}
bool BrowserSettings::sortByUsername()
{
- return config()->get("Browser/SortByUsername", false).toBool();
+ return config()->get(Config::Browser_SortByUsername).toBool();
}
void BrowserSettings::setSortByUsername(bool sortByUsername)
{
- config()->set("Browser/SortByUsername", sortByUsername);
+ config()->set(Config::Browser_SortByUsername, sortByUsername);
}
bool BrowserSettings::sortByTitle()
@@ -103,382 +104,359 @@ void BrowserSettings::setSortByTitle(bool sortByUsertitle)
bool BrowserSettings::alwaysAllowAccess()
{
- return config()->get("Browser/AlwaysAllowAccess", false).toBool();
+ return config()->get(Config::Browser_AlwaysAllowAccess).toBool();
}
void BrowserSettings::setAlwaysAllowAccess(bool alwaysAllowAccess)
{
- config()->set("Browser/AlwaysAllowAccess", alwaysAllowAccess);
+ config()->set(Config::Browser_AlwaysAllowAccess, alwaysAllowAccess);
}
bool BrowserSettings::alwaysAllowUpdate()
{
- return config()->get("Browser/AlwaysAllowUpdate", false).toBool();
+ return config()->get(Config::Browser_AlwaysAllowUpdate).toBool();
}
void BrowserSettings::setAlwaysAllowUpdate(bool alwaysAllowUpdate)
{
- config()->set("Browser/AlwaysAllowUpdate", alwaysAllowUpdate);
+ config()->set(Config::Browser_AlwaysAllowUpdate, alwaysAllowUpdate);
}
bool BrowserSettings::httpAuthPermission()
{
- return config()->get("Browser/HttpAuthPermission", false).toBool();
+ return config()->get(Config::Browser_HttpAuthPermission).toBool();
}
void BrowserSettings::setHttpAuthPermission(bool httpAuthPermission)
{
- config()->set("Browser/HttpAuthPermission", httpAuthPermission);
+ config()->set(Config::Browser_HttpAuthPermission, httpAuthPermission);
}
bool BrowserSettings::searchInAllDatabases()
{
- return config()->get("Browser/SearchInAllDatabases", false).toBool();
+ return config()->get(Config::Browser_SearchInAllDatabases).toBool();
}
void BrowserSettings::setSearchInAllDatabases(bool searchInAllDatabases)
{
- config()->set("Browser/SearchInAllDatabases", searchInAllDatabases);
+ config()->set(Config::Browser_SearchInAllDatabases, searchInAllDatabases);
}
bool BrowserSettings::supportKphFields()
{
- return config()->get("Browser/SupportKphFields", true).toBool();
+ return config()->get(Config::Browser_SupportKphFields).toBool();
}
void BrowserSettings::setSupportKphFields(bool supportKphFields)
{
- config()->set("Browser/SupportKphFields", supportKphFields);
+ config()->set(Config::Browser_SupportKphFields, supportKphFields);
}
bool BrowserSettings::noMigrationPrompt()
{
- return config()->get("Browser/NoMigrationPrompt", false).toBool();
+ return config()->get(Config::Browser_NoMigrationPrompt).toBool();
}
void BrowserSettings::setNoMigrationPrompt(bool prompt)
{
- config()->set("Browser/NoMigrationPrompt", prompt);
-}
-
-bool BrowserSettings::supportBrowserProxy()
-{
- return config()->get("Browser/SupportBrowserProxy", true).toBool();
-}
-
-void BrowserSettings::setSupportBrowserProxy(bool enabled)
-{
- config()->set("Browser/SupportBrowserProxy", enabled);
+ config()->set(Config::Browser_NoMigrationPrompt, prompt);
}
bool BrowserSettings::useCustomProxy()
{
- return config()->get("Browser/UseCustomProxy", false).toBool();
+ return config()->get(Config::Browser_UseCustomProxy).toBool();
}
void BrowserSettings::setUseCustomProxy(bool enabled)
{
- config()->set("Browser/UseCustomProxy", enabled);
+ config()->set(Config::Browser_UseCustomProxy, enabled);
}
QString BrowserSettings::customProxyLocation()
{
- if (!useCustomProxy()) {
- return QString();
- }
- return config()->get("Browser/CustomProxyLocation", "").toString();
+ return config()->get(Config::Browser_CustomProxyLocation).toString();
}
void BrowserSettings::setCustomProxyLocation(const QString& location)
{
- config()->set("Browser/CustomProxyLocation", location);
+ config()->set(Config::Browser_CustomProxyLocation, location);
}
-bool BrowserSettings::updateBinaryPath()
+bool BrowserSettings::customBrowserSupport()
{
- return config()->get("Browser/UpdateBinaryPath", true).toBool();
+ return config()->get(Config::Browser_UseCustomBrowser).toBool();
}
-void BrowserSettings::setUpdateBinaryPath(bool enabled)
-{
- config()->set("Browser/UpdateBinaryPath", enabled);
-}
-
-bool BrowserSettings::allowExpiredCredentials()
-{
- return config()->get("Browser/AllowExpiredCredentials", false).toBool();
-}
-
-void BrowserSettings::setAllowExpiredCredentials(bool enabled)
+void BrowserSettings::setCustomBrowserSupport(bool enabled)
{
- config()->set("Browser/AllowExpiredCredentials", enabled);
+ config()->set(Config::Browser_UseCustomBrowser, enabled);
}
-bool BrowserSettings::chromeSupport()
+int BrowserSettings::customBrowserType()
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::CHROME);
+ return config()->get(Config::Browser_CustomBrowserType).toInt();
}
-void BrowserSettings::setChromeSupport(bool enabled)
+void BrowserSettings::setCustomBrowserType(int type)
{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::CHROME, enabled, supportBrowserProxy(), customProxyLocation());
+ config()->set(Config::Browser_CustomBrowserType, type);
}
-bool BrowserSettings::chromiumSupport()
+QString BrowserSettings::customBrowserLocation()
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::CHROMIUM);
+ return config()->get(Config::Browser_CustomBrowserLocation).toString();
}
-void BrowserSettings::setChromiumSupport(bool enabled)
+void BrowserSettings::setCustomBrowserLocation(const QString& location)
{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::CHROMIUM, enabled, supportBrowserProxy(), customProxyLocation());
+ config()->set(Config::Browser_CustomBrowserLocation, location);
}
-bool BrowserSettings::firefoxSupport()
+QString BrowserSettings::proxyLocation()
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::FIREFOX);
+ return m_nativeMessageInstaller.getProxyPath();
}
-void BrowserSettings::setFirefoxSupport(bool enabled)
+#ifdef QT_DEBUG
+QString BrowserSettings::customExtensionId()
{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::FIREFOX, enabled, supportBrowserProxy(), customProxyLocation());
+ return config()->get(Config::Browser_CustomExtensionId).toString();
}
-bool BrowserSettings::vivaldiSupport()
+void BrowserSettings::setCustomExtensionId(const QString& id)
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::VIVALDI);
+ config()->set(Config::Browser_CustomExtensionId, id);
}
+#endif
-void BrowserSettings::setVivaldiSupport(bool enabled)
-{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::VIVALDI, enabled, supportBrowserProxy(), customProxyLocation());
-}
-
-bool BrowserSettings::braveSupport()
+bool BrowserSettings::updateBinaryPath()
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::BRAVE);
+ return config()->get(Config::Browser_UpdateBinaryPath).toBool();
}
-void BrowserSettings::setBraveSupport(bool enabled)
+void BrowserSettings::setUpdateBinaryPath(bool enabled)
{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::BRAVE, enabled, supportBrowserProxy(), customProxyLocation());
+ config()->set(Config::Browser_UpdateBinaryPath, enabled);
}
-bool BrowserSettings::torBrowserSupport()
+bool BrowserSettings::allowExpiredCredentials()
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::TOR_BROWSER);
+ return config()->get(Config::Browser_AllowExpiredCredentials).toBool();
}
-void BrowserSettings::setTorBrowserSupport(bool enabled)
+void BrowserSettings::setAllowExpiredCredentials(bool enabled)
{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::TOR_BROWSER, enabled, supportBrowserProxy(), customProxyLocation());
+ config()->set(Config::Browser_AllowExpiredCredentials, enabled);
}
-bool BrowserSettings::edgeSupport()
+bool BrowserSettings::browserSupport(BrowserShared::SupportedBrowsers browser)
{
- return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::EDGE);
+ return m_nativeMessageInstaller.isBrowserEnabled(browser);
}
-void BrowserSettings::setEdgeSupport(bool enabled)
+void BrowserSettings::setBrowserSupport(BrowserShared::SupportedBrowsers browser, bool enabled)
{
- m_hostInstaller.installBrowser(
- HostInstaller::SupportedBrowsers::EDGE, enabled, supportBrowserProxy(), customProxyLocation());
+ m_nativeMessageInstaller.setBrowserEnabled(browser, enabled);
}
bool BrowserSettings::passwordUseNumbers()
{
- return config()->get("generator/Numbers", PasswordGenerator::DefaultNumbers).toBool();
+ return config()->get(Config::PasswordGenerator_Numbers).toBool();
}
void BrowserSettings::setPasswordUseNumbers(bool useNumbers)
{
- config()->set("generator/Numbers", useNumbers);
+ config()->set(Config::PasswordGenerator_Numbers, useNumbers);
}
bool BrowserSettings::passwordUseLowercase()
{
- return config()->get("generator/LowerCase", PasswordGenerator::DefaultLower).toBool();
+ return config()->get(Config::PasswordGenerator_LowerCase).toBool();
}
void BrowserSettings::setPasswordUseLowercase(bool useLowercase)
{
- config()->set("generator/LowerCase", useLowercase);
+ config()->set(Config::PasswordGenerator_LowerCase, useLowercase);
}
bool BrowserSettings::passwordUseUppercase()
{
- return config()->get("generator/UpperCase", PasswordGenerator::DefaultUpper).toBool();
+ return config()->get(Config::PasswordGenerator_UpperCase).toBool();
}
void BrowserSettings::setPasswordUseUppercase(bool useUppercase)
{
- config()->set("generator/UpperCase", useUppercase);
+ config()->set(Config::PasswordGenerator_UpperCase, useUppercase);
}
bool BrowserSettings::passwordUseSpecial()
{
- return config()->get("generator/SpecialChars", PasswordGenerator::DefaultSpecial).toBool();
+ return config()->get(Config::PasswordGenerator_SpecialChars).toBool();
}
void BrowserSettings::setPasswordUseSpecial(bool useSpecial)
{
- config()->set("generator/SpecialChars", useSpecial);
+ config()->set(Config::PasswordGenerator_SpecialChars, useSpecial);
}
bool BrowserSettings::passwordUseBraces()
{
- return config()->get("generator/Braces", PasswordGenerator::DefaultBraces).toBool();
+ return config()->get(Config::PasswordGenerator_Braces).toBool();
}
void BrowserSettings::setPasswordUseBraces(bool useBraces)
{
- config()->set("generator/Braces", useBraces);
+ config()->set(Config::PasswordGenerator_Braces, useBraces);
}
bool BrowserSettings::passwordUsePunctuation()
{
- return config()->get("generator/Punctuation", PasswordGenerator::DefaultQuotes).toBool();
+ return config()->get(Config::PasswordGenerator_Punctuation).toBool();
}
void BrowserSettings::setPasswordUsePunctuation(bool usePunctuation)
{
- config()->set("generator/Punctuation", usePunctuation);
+ config()->set(Config::PasswordGenerator_Punctuation, usePunctuation);
}
bool BrowserSettings::passwordUseQuotes()
{
- return config()->get("generator/Quotes", PasswordGenerator::DefaultQuotes).toBool();
+ return config()->get(Config::PasswordGenerator_Quotes).toBool();
}
void BrowserSettings::setPasswordUseQuotes(bool useQuotes)
{
- config()->set("generator/Quotes", useQuotes);
+ config()->set(Config::PasswordGenerator_Quotes, useQuotes);
}
bool BrowserSettings::passwordUseDashes()
{
- return config()->get("generator/Dashes", PasswordGenerator::DefaultDashes).toBool();
+ return config()->get(Config::PasswordGenerator_Dashes).toBool();
}
void BrowserSettings::setPasswordUseDashes(bool useDashes)
{
- config()->set("generator/Dashes", useDashes);
+ config()->set(Config::PasswordGenerator_Dashes, useDashes);
}
bool BrowserSettings::passwordUseMath()
{
- return config()->get("generator/Math", PasswordGenerator::DefaultMath).toBool();
+ return config()->get(Config::PasswordGenerator_Math).toBool();
}
void BrowserSettings::setPasswordUseMath(bool useMath)
{
- config()->set("generator/Math", useMath);
+ config()->set(Config::PasswordGenerator_Math, useMath);
}
bool BrowserSettings::passwordUseLogograms()
{
- return config()->get("generator/Logograms", PasswordGenerator::DefaultLogograms).toBool();
+ return config()->get(Config::PasswordGenerator_Logograms).toBool();
}
void BrowserSettings::setPasswordUseLogograms(bool useLogograms)
{
- config()->set("generator/Logograms", useLogograms);
+ config()->set(Config::PasswordGenerator_Logograms, useLogograms);
}
bool BrowserSettings::passwordUseEASCII()
{
- return config()->get("generator/EASCII", PasswordGenerator::DefaultEASCII).toBool();
+ return config()->get(Config::PasswordGenerator_EASCII).toBool();
}
void BrowserSettings::setPasswordUseEASCII(bool useEASCII)
{
- config()->set("generator/EASCII", useEASCII);
+ config()->set(Config::PasswordGenerator_EASCII, useEASCII);
}
bool BrowserSettings::advancedMode()
{
- return config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool();
+ return config()->get(Config::PasswordGenerator_AdvancedMode).toBool();
}
void BrowserSettings::setAdvancedMode(bool advancedMode)
{
- config()->set("generator/AdvancedMode", advancedMode);
+ config()->set(Config::PasswordGenerator_AdvancedMode, advancedMode);
+}
+
+QString BrowserSettings::passwordAdditionalChars()
+{
+ return config()->get(Config::PasswordGenerator_AdditionalChars).toString();
+}
+
+void BrowserSettings::setPasswordAdditionalChars(const QString& chars)
+{
+ config()->set(Config::PasswordGenerator_AdditionalChars, chars);
}
QString BrowserSettings::passwordExcludedChars()
{
- return config()->get("generator/ExcludedChars", PasswordGenerator::DefaultExcludedChars).toString();
+ return config()->get(Config::PasswordGenerator_ExcludedChars).toString();
}
void BrowserSettings::setPasswordExcludedChars(const QString& chars)
{
- config()->set("generator/ExcludedChars", chars);
+ config()->set(Config::PasswordGenerator_ExcludedChars, chars);
}
int BrowserSettings::passPhraseWordCount()
{
- return config()->get("generator/WordCount", PassphraseGenerator::DefaultWordCount).toInt();
+ return config()->get(Config::PasswordGenerator_WordCount).toInt();
}
void BrowserSettings::setPassPhraseWordCount(int wordCount)
{
- config()->set("generator/WordCount", wordCount);
+ config()->set(Config::PasswordGenerator_WordCount, wordCount);
}
QString BrowserSettings::passPhraseWordSeparator()
{
- return config()->get("generator/WordSeparator", PassphraseGenerator::DefaultSeparator).toString();
+ return config()->get(Config::PasswordGenerator_WordSeparator).toString();
}
void BrowserSettings::setPassPhraseWordSeparator(const QString& separator)
{
- config()->set("generator/WordSeparator", separator);
+ config()->set(Config::PasswordGenerator_WordSeparator, separator);
}
int BrowserSettings::generatorType()
{
- return config()->get("generator/Type", 0).toInt();
+ return config()->get(Config::PasswordGenerator_Type).toInt();
}
void BrowserSettings::setGeneratorType(int type)
{
- config()->set("generator/Type", type);
+ config()->set(Config::PasswordGenerator_Type, type);
}
bool BrowserSettings::passwordEveryGroup()
{
- return config()->get("generator/EnsureEvery", PasswordGenerator::DefaultFromEveryGroup).toBool();
+ return config()->get(Config::PasswordGenerator_EnsureEvery).toBool();
}
void BrowserSettings::setPasswordEveryGroup(bool everyGroup)
{
- config()->get("generator/EnsureEvery", everyGroup);
+ config()->set(Config::PasswordGenerator_EnsureEvery, everyGroup);
}
bool BrowserSettings::passwordExcludeAlike()
{
- return config()->get("generator/ExcludeAlike", PasswordGenerator::DefaultLookAlike).toBool();
+ return config()->get(Config::PasswordGenerator_ExcludeAlike).toBool();
}
void BrowserSettings::setPasswordExcludeAlike(bool excludeAlike)
{
- config()->set("generator/ExcludeAlike", excludeAlike);
+ config()->set(Config::PasswordGenerator_ExcludeAlike, excludeAlike);
}
int BrowserSettings::passwordLength()
{
- return config()->get("generator/Length", PasswordGenerator::DefaultLength).toInt();
+ return config()->get(Config::PasswordGenerator_Length).toInt();
}
void BrowserSettings::setPasswordLength(int length)
{
- config()->set("generator/Length", length);
+ config()->set(Config::PasswordGenerator_Length, length);
m_passwordGenerator.setLength(length);
}
@@ -541,7 +519,7 @@ QJsonObject BrowserSettings::generatePassword()
m_passwordGenerator.setCharClasses(passwordCharClasses());
m_passwordGenerator.setFlags(passwordGeneratorFlags());
const QString pw = m_passwordGenerator.generatePassword();
- password["entropy"] = m_passwordGenerator.estimateEntropy(pw);
+ password["entropy"] = PasswordHealth(pw).entropy();
password["password"] = pw;
} else {
m_passPhraseGenerator.setWordCount(passPhraseWordCount());
@@ -552,13 +530,7 @@ QJsonObject BrowserSettings::generatePassword()
return password;
}
-void BrowserSettings::updateBinaryPaths(const QString& customProxyLocation)
-{
- bool isProxy = supportBrowserProxy();
- m_hostInstaller.updateBinaryPaths(isProxy, customProxyLocation);
-}
-
-bool BrowserSettings::checkIfProxyExists(QString& path)
+void BrowserSettings::updateBinaryPaths()
{
- return m_hostInstaller.checkIfProxyExists(supportBrowserProxy(), customProxyLocation(), path);
+ m_nativeMessageInstaller.updateBinaryPaths();
}
diff --git a/src/browser/BrowserSettings.h b/src/browser/BrowserSettings.h
index 395455cbc..4e457a929 100644
--- a/src/browser/BrowserSettings.h
+++ b/src/browser/BrowserSettings.h
@@ -20,7 +20,8 @@
#ifndef BROWSERSETTINGS_H
#define BROWSERSETTINGS_H
-#include "HostInstaller.h"
+#include "BrowserShared.h"
+#include "NativeMessageInstaller.h"
#include "core/PassphraseGenerator.h"
#include "core/PasswordGenerator.h"
@@ -58,31 +59,28 @@ public:
bool noMigrationPrompt();
void setNoMigrationPrompt(bool prompt);
- bool supportBrowserProxy();
- void setSupportBrowserProxy(bool enabled);
bool useCustomProxy();
void setUseCustomProxy(bool enabled);
QString customProxyLocation();
void setCustomProxyLocation(const QString& location);
+ QString proxyLocation();
+#ifdef QT_DEBUG
+ QString customExtensionId();
+ void setCustomExtensionId(const QString& id);
+#endif
bool updateBinaryPath();
void setUpdateBinaryPath(bool enabled);
bool allowExpiredCredentials();
void setAllowExpiredCredentials(bool enabled);
- bool chromeSupport();
- void setChromeSupport(bool enabled);
- bool chromiumSupport();
- void setChromiumSupport(bool enabled);
- bool firefoxSupport();
- void setFirefoxSupport(bool enabled);
- bool vivaldiSupport();
- void setVivaldiSupport(bool enabled);
- bool braveSupport();
- void setBraveSupport(bool enabled);
- bool torBrowserSupport();
- void setTorBrowserSupport(bool enabled);
- bool edgeSupport();
- void setEdgeSupport(bool enabled);
+ bool browserSupport(BrowserShared::SupportedBrowsers browser);
+ void setBrowserSupport(BrowserShared::SupportedBrowsers browser, bool enabled);
+ bool customBrowserSupport();
+ void setCustomBrowserSupport(bool enabled);
+ int customBrowserType();
+ void setCustomBrowserType(int type);
+ QString customBrowserLocation();
+ void setCustomBrowserLocation(const QString& location);
bool passwordUseNumbers();
void setPasswordUseNumbers(bool useNumbers);
bool passwordUseLowercase();
@@ -107,6 +105,8 @@ public:
void setPasswordUseEASCII(bool useEASCII);
bool advancedMode();
void setAdvancedMode(bool advancedMode);
+ QString passwordAdditionalChars();
+ void setPasswordAdditionalChars(const QString& chars);
QString passwordExcludedChars();
void setPasswordExcludedChars(const QString& chars);
int passPhraseWordCount();
@@ -124,15 +124,14 @@ public:
PasswordGenerator::CharClasses passwordCharClasses();
PasswordGenerator::GeneratorFlags passwordGeneratorFlags();
QJsonObject generatePassword();
- void updateBinaryPaths(const QString& customProxyLocation = QString());
- bool checkIfProxyExists(QString& path);
+ void updateBinaryPaths();
private:
static BrowserSettings* m_instance;
PasswordGenerator m_passwordGenerator;
PassphraseGenerator m_passPhraseGenerator;
- HostInstaller m_hostInstaller;
+ NativeMessageInstaller m_nativeMessageInstaller;
};
inline BrowserSettings* browserSettings()
diff --git a/src/browser/BrowserSettingsPage.cpp b/src/browser/BrowserSettingsPage.cpp
new file mode 100644
index 000000000..692854bf8
--- /dev/null
+++ b/src/browser/BrowserSettingsPage.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "BrowserSettingsPage.h"
+
+#include "BrowserService.h"
+#include "BrowserSettings.h"
+#include "BrowserSettingsWidget.h"
+#include "core/Resources.h"
+
+QString BrowserSettingsPage::name()
+{
+ return QObject::tr("Browser Integration");
+}
+
+QIcon BrowserSettingsPage::icon()
+{
+ return Resources::instance()->icon("internet-web-browser");
+}
+
+QWidget* BrowserSettingsPage::createWidget()
+{
+ return new BrowserSettingsWidget();
+}
+
+void BrowserSettingsPage::loadSettings(QWidget* widget)
+{
+ qobject_cast<BrowserSettingsWidget*>(widget)->loadSettings();
+}
+
+void BrowserSettingsPage::saveSettings(QWidget* widget)
+{
+ qobject_cast<BrowserSettingsWidget*>(widget)->saveSettings();
+ browserService()->setEnabled(browserSettings()->isEnabled());
+}
diff --git a/src/browser/BrowserSettingsPage.h b/src/browser/BrowserSettingsPage.h
new file mode 100644
index 000000000..9e669b194
--- /dev/null
+++ b/src/browser/BrowserSettingsPage.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_BROWSERSETTINGSPAGE_H
+#define KEEPASSXC_BROWSERSETTINGSPAGE_H
+
+#include "gui/ApplicationSettingsWidget.h"
+
+class BrowserSettingsPage : public ISettingsPage
+{
+public:
+ explicit BrowserSettingsPage() = default;
+ ~BrowserSettingsPage() override = default;
+
+ QString name() override;
+ QIcon icon() override;
+ QWidget* createWidget() override;
+ void loadSettings(QWidget* widget) override;
+ void saveSettings(QWidget* widget) override;
+};
+
+#endif // KEEPASSXC_BROWSERSETTINGSPAGE_H
diff --git a/src/browser/BrowserOptionDialog.cpp b/src/browser/BrowserSettingsWidget.cpp
index f12c42bb7..d0bdad1f1 100644
--- a/src/browser/BrowserOptionDialog.cpp
+++ b/src/browser/BrowserSettingsWidget.cpp
@@ -1,7 +1,5 @@
/*
- * Copyright (C) 2013 Francois Ferrand
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,18 +15,18 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "BrowserOptionDialog.h"
-#include "ui_BrowserOptionDialog.h"
+#include "BrowserSettingsWidget.h"
+#include "ui_BrowserSettingsWidget.h"
#include "BrowserSettings.h"
#include "config-keepassx.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include <QFileDialog>
-BrowserOptionDialog::BrowserOptionDialog(QWidget* parent)
+BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent)
: QWidget(parent)
- , m_ui(new Ui::BrowserOptionDialog())
+ , m_ui(new Ui::BrowserSettingsWidget())
{
m_ui->setupUi(this);
@@ -52,21 +50,31 @@ BrowserOptionDialog::BrowserOptionDialog(QWidget* parent)
snapInstructions));
// clang-format on
- m_ui->scriptWarningWidget->setVisible(false);
- m_ui->scriptWarningWidget->setAutoHideTimeout(-1);
-
- m_ui->warningWidget->showMessage(tr("<b>Warning:</b> The following options can be dangerous!"),
- MessageWidget::Warning);
m_ui->warningWidget->setCloseButtonVisible(false);
m_ui->warningWidget->setAutoHideTimeout(-1);
+ m_ui->warningWidget->setAnimate(false);
m_ui->tabWidget->setEnabled(m_ui->enableBrowserSupport->isChecked());
connect(m_ui->enableBrowserSupport, SIGNAL(toggled(bool)), m_ui->tabWidget, SLOT(setEnabled(bool)));
+ // Custom Browser option
+#ifdef Q_OS_WIN
+ // TODO: Custom browser is disabled on Windows
+ m_ui->customBrowserSupport->setVisible(false);
+ m_ui->customBrowserGroupBox->setVisible(false);
+#else
+ connect(m_ui->customBrowserLocationBrowseButton, SIGNAL(clicked()), SLOT(showCustomBrowserLocationFileDialog()));
+ connect(m_ui->customBrowserSupport, SIGNAL(toggled(bool)), m_ui->customBrowserGroupBox, SLOT(setEnabled(bool)));
+#endif
+
+ // Custom Proxy option
m_ui->customProxyLocation->setEnabled(m_ui->useCustomProxy->isChecked());
m_ui->customProxyLocationBrowseButton->setEnabled(m_ui->useCustomProxy->isChecked());
+
connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocation, SLOT(setEnabled(bool)));
connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocationBrowseButton, SLOT(setEnabled(bool)));
+ connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), SLOT(validateCustomProxyLocation()));
+ connect(m_ui->customProxyLocation, SIGNAL(editingFinished()), SLOT(validateCustomProxyLocation()));
connect(m_ui->customProxyLocationBrowseButton, SIGNAL(clicked()), this, SLOT(showProxyLocationFileDialog()));
#ifndef Q_OS_LINUX
@@ -84,13 +92,18 @@ BrowserOptionDialog::BrowserOptionDialog(QWidget* parent)
m_ui->firefoxSupport->setText("Firefox and Tor Browser");
#endif
m_ui->browserGlobalWarningWidget->setVisible(false);
+
+#ifndef QT_DEBUG
+ m_ui->customExtensionId->setVisible(false);
+ m_ui->customExtensionLabel->setVisible(false);
+#endif
}
-BrowserOptionDialog::~BrowserOptionDialog()
+BrowserSettingsWidget::~BrowserSettingsWidget()
{
}
-void BrowserOptionDialog::loadSettings()
+void BrowserSettingsWidget::loadSettings()
{
auto settings = browserSettings();
m_ui->enableBrowserSupport->setChecked(settings->isEnabled());
@@ -116,43 +129,42 @@ void BrowserOptionDialog::loadSettings()
m_ui->searchInAllDatabases->setChecked(settings->searchInAllDatabases());
m_ui->supportKphFields->setChecked(settings->supportKphFields());
m_ui->noMigrationPrompt->setChecked(settings->noMigrationPrompt());
- m_ui->supportBrowserProxy->setChecked(settings->supportBrowserProxy());
m_ui->useCustomProxy->setChecked(settings->useCustomProxy());
m_ui->customProxyLocation->setText(settings->customProxyLocation());
m_ui->updateBinaryPath->setChecked(settings->updateBinaryPath());
m_ui->allowExpiredCredentials->setChecked(settings->allowExpiredCredentials());
- m_ui->chromeSupport->setChecked(settings->chromeSupport());
- m_ui->chromiumSupport->setChecked(settings->chromiumSupport());
- m_ui->firefoxSupport->setChecked(settings->firefoxSupport());
- m_ui->edgeSupport->setChecked(settings->edgeSupport());
+ m_ui->chromeSupport->setChecked(settings->browserSupport(BrowserShared::CHROME));
+ m_ui->chromiumSupport->setChecked(settings->browserSupport(BrowserShared::CHROMIUM));
+ m_ui->firefoxSupport->setChecked(settings->browserSupport(BrowserShared::FIREFOX));
+ m_ui->edgeSupport->setChecked(settings->browserSupport(BrowserShared::EDGE));
#ifndef Q_OS_WIN
- m_ui->braveSupport->setChecked(settings->braveSupport());
- m_ui->vivaldiSupport->setChecked(settings->vivaldiSupport());
- m_ui->torBrowserSupport->setChecked(settings->torBrowserSupport());
+ m_ui->braveSupport->setChecked(settings->browserSupport(BrowserShared::BRAVE));
+ m_ui->vivaldiSupport->setChecked(settings->browserSupport(BrowserShared::VIVALDI));
+ m_ui->torBrowserSupport->setChecked(settings->browserSupport(BrowserShared::TOR_BROWSER));
#endif
#ifndef Q_OS_LINUX
m_ui->snapWarningLabel->setVisible(false);
#endif
-// TODO: Enable when Linux version is released
+// TODO: Enable Edge support when Linux version is released
#ifdef Q_OS_LINUX
m_ui->edgeSupport->setChecked(false);
m_ui->edgeSupport->setEnabled(false);
#endif
-#if defined(KEEPASSXC_DIST_APPIMAGE)
- m_ui->supportBrowserProxy->setChecked(true);
- m_ui->supportBrowserProxy->setEnabled(false);
-#elif defined(KEEPASSXC_DIST_SNAP)
+#ifdef KEEPASSXC_DIST_SNAP
// Disable settings that will not work
- m_ui->supportBrowserProxy->setChecked(true);
- m_ui->supportBrowserProxy->setEnabled(false);
m_ui->useCustomProxy->setChecked(false);
- m_ui->useCustomProxy->setEnabled(false);
+ m_ui->useCustomProxy->setVisible(false);
+ m_ui->customProxyLocation->setVisible(false);
+ m_ui->customProxyLocationBrowseButton->setVisible(false);
m_ui->browsersGroupBox->setVisible(false);
m_ui->browsersGroupBox->setEnabled(false);
m_ui->updateBinaryPath->setChecked(false);
- m_ui->updateBinaryPath->setEnabled(false);
+ m_ui->updateBinaryPath->setVisible(false);
+ // No custom browser for snaps
+ m_ui->customBrowserSupport->setVisible(false);
+ m_ui->customBrowserGroupBox->setVisible(false);
// Show notice to user
m_ui->browserGlobalWarningWidget->showMessage(tr("Please see special instructions for browser extension use below"),
MessageWidget::Warning);
@@ -160,23 +172,39 @@ void BrowserOptionDialog::loadSettings()
m_ui->browserGlobalWarningWidget->setAutoHideTimeout(-1);
#endif
- // Check for native messaging host location errors
- QString path;
- if (!settings->checkIfProxyExists(path)) {
- auto text =
- tr("<b>Warning</b>, the keepassxc-proxy application was not found!"
- "<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options."
- "<br />Browser integration WILL NOT WORK without the proxy application."
- "<br />Expected Path: %1")
- .arg(path);
- m_ui->scriptWarningWidget->showMessage(text, MessageWidget::Warning);
- m_ui->scriptWarningWidget->setVisible(true);
+ const auto customBrowserSet = settings->customBrowserSupport();
+ m_ui->customBrowserSupport->setChecked(customBrowserSet);
+ m_ui->customBrowserGroupBox->setEnabled(customBrowserSet);
+ m_ui->browserTypeComboBox->clear();
+ m_ui->browserTypeComboBox->addItem(tr("Firefox"), BrowserShared::SupportedBrowsers::FIREFOX);
+ m_ui->browserTypeComboBox->addItem(tr("Chromium"), BrowserShared::SupportedBrowsers::CHROMIUM);
+ auto typeIndex = m_ui->browserTypeComboBox->findData(settings->customBrowserType());
+ if (typeIndex >= 0) {
+ m_ui->browserTypeComboBox->setCurrentIndex(typeIndex);
+ }
+ m_ui->customBrowserLocation->setText(settings->customBrowserLocation());
+
+#ifdef QT_DEBUG
+ m_ui->customExtensionId->setText(settings->customExtensionId());
+#endif
+
+ validateCustomProxyLocation();
+}
+
+void BrowserSettingsWidget::validateCustomProxyLocation()
+{
+ auto path = m_ui->customProxyLocation->text();
+ if (m_ui->useCustomProxy->isChecked() && !QFile::exists(path)) {
+ m_ui->warningWidget->showMessage(tr("<b>Error:</b> The custom proxy location cannot be found!"
+ "<br/>Browser integration WILL NOT WORK without the proxy application."),
+ MessageWidget::Error);
} else {
- m_ui->scriptWarningWidget->setVisible(false);
+ m_ui->warningWidget->showMessage(tr("<b>Warning:</b> The following options can be dangerous!"),
+ MessageWidget::Warning);
}
}
-void BrowserOptionDialog::saveSettings()
+void BrowserSettingsWidget::saveSettings()
{
auto settings = browserSettings();
settings->setEnabled(m_ui->enableBrowserSupport->isChecked());
@@ -186,7 +214,6 @@ void BrowserOptionDialog::saveSettings()
settings->setMatchUrlScheme(m_ui->matchUrlScheme->isChecked());
settings->setSortByUsername(m_ui->sortByUsername->isChecked());
- settings->setSupportBrowserProxy(m_ui->supportBrowserProxy->isChecked());
settings->setUseCustomProxy(m_ui->useCustomProxy->isChecked());
settings->setCustomProxyLocation(m_ui->customProxyLocation->text());
@@ -199,18 +226,34 @@ void BrowserOptionDialog::saveSettings()
settings->setSupportKphFields(m_ui->supportKphFields->isChecked());
settings->setNoMigrationPrompt(m_ui->noMigrationPrompt->isChecked());
- settings->setChromeSupport(m_ui->chromeSupport->isChecked());
- settings->setChromiumSupport(m_ui->chromiumSupport->isChecked());
- settings->setFirefoxSupport(m_ui->firefoxSupport->isChecked());
- settings->setEdgeSupport(m_ui->edgeSupport->isChecked());
+#ifdef QT_DEBUG
+ settings->setCustomExtensionId(m_ui->customExtensionId->text());
+#endif
+
+ settings->setBrowserSupport(BrowserShared::CHROME, m_ui->chromeSupport->isChecked());
+ settings->setBrowserSupport(BrowserShared::CHROMIUM, m_ui->chromiumSupport->isChecked());
+ settings->setBrowserSupport(BrowserShared::FIREFOX, m_ui->firefoxSupport->isChecked());
+ settings->setBrowserSupport(BrowserShared::EDGE, m_ui->edgeSupport->isChecked());
#ifndef Q_OS_WIN
- settings->setBraveSupport(m_ui->braveSupport->isChecked());
- settings->setVivaldiSupport(m_ui->vivaldiSupport->isChecked());
- settings->setTorBrowserSupport(m_ui->torBrowserSupport->isChecked());
+ settings->setBrowserSupport(BrowserShared::BRAVE, m_ui->braveSupport->isChecked());
+ settings->setBrowserSupport(BrowserShared::VIVALDI, m_ui->vivaldiSupport->isChecked());
+ settings->setBrowserSupport(BrowserShared::TOR_BROWSER, m_ui->torBrowserSupport->isChecked());
+
+ // Custom browser settings
+ bool customBrowserEnabled = m_ui->customBrowserSupport->isChecked();
+ settings->setCustomBrowserType(m_ui->browserTypeComboBox->currentData().toInt());
+ settings->setCustomBrowserLocation(m_ui->customBrowserLocation->text());
+ settings->setCustomBrowserSupport(customBrowserEnabled);
+ settings->setBrowserSupport(BrowserShared::CUSTOM, customBrowserEnabled);
+
+ // If we disabled the custom browser support make sure to clear variables
+ if (!customBrowserEnabled) {
+ settings->setCustomBrowserLocation("");
+ }
#endif
}
-void BrowserOptionDialog::showProxyLocationFileDialog()
+void BrowserSettingsWidget::showProxyLocationFileDialog()
{
#ifdef Q_OS_WIN
QString fileTypeFilter(QString("%1 (*.exe);;%2 (*.*)").arg(tr("Executable Files"), tr("All Files")));
@@ -222,4 +265,15 @@ void BrowserOptionDialog::showProxyLocationFileDialog()
QFileInfo(QCoreApplication::applicationDirPath()).filePath(),
fileTypeFilter);
m_ui->customProxyLocation->setText(proxyLocation);
+ validateCustomProxyLocation();
+}
+
+void BrowserSettingsWidget::showCustomBrowserLocationFileDialog()
+{
+ auto location = QFileDialog::getExistingDirectory(this,
+ tr("Select native messaging host folder location"),
+ QFileInfo(QCoreApplication::applicationDirPath()).filePath());
+ if (!location.isEmpty()) {
+ m_ui->customBrowserLocation->setText(location);
+ }
}
diff --git a/src/browser/BrowserOptionDialog.h b/src/browser/BrowserSettingsWidget.h
index 5efb808e5..3f5ea5763 100644
--- a/src/browser/BrowserOptionDialog.h
+++ b/src/browser/BrowserSettingsWidget.h
@@ -1,7 +1,5 @@
/*
- * Copyright (C) 2013 Francois Ferrand
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,8 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef BROWSEROPTIONDIALOG_H
-#define BROWSEROPTIONDIALOG_H
+#ifndef BROWSERSETTINGSWIDGET_H
+#define BROWSERSETTINGSWIDGET_H
#include <QPointer>
#include <QScopedPointer>
@@ -26,16 +24,16 @@
namespace Ui
{
- class BrowserOptionDialog;
+ class BrowserSettingsWidget;
}
-class BrowserOptionDialog : public QWidget
+class BrowserSettingsWidget : public QWidget
{
Q_OBJECT
public:
- explicit BrowserOptionDialog(QWidget* parent = nullptr);
- ~BrowserOptionDialog();
+ explicit BrowserSettingsWidget(QWidget* parent = nullptr);
+ ~BrowserSettingsWidget();
public slots:
void loadSettings();
@@ -43,9 +41,11 @@ public slots:
private slots:
void showProxyLocationFileDialog();
+ void validateCustomProxyLocation();
+ void showCustomBrowserLocationFileDialog();
private:
- QScopedPointer<Ui::BrowserOptionDialog> m_ui;
+ QScopedPointer<Ui::BrowserSettingsWidget> m_ui;
};
-#endif // BROWSEROPTIONDIALOG_H
+#endif // BROWSERSETTINGSWIDGET_H
diff --git a/src/browser/BrowserOptionDialog.ui b/src/browser/BrowserSettingsWidget.ui
index 1c00da148..40064b541 100755..100644
--- a/src/browser/BrowserOptionDialog.ui
+++ b/src/browser/BrowserSettingsWidget.ui
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <class>BrowserOptionDialog</class>
- <widget class="QWidget" name="BrowserOptionDialog">
+ <class>BrowserSettingsWidget</class>
+ <widget class="QWidget" name="BrowserSettingsWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>523</width>
- <height>456</height>
+ <width>584</width>
+ <height>467</height>
</rect>
</property>
<property name="windowTitle">
@@ -50,16 +50,6 @@
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="MessageWidget" name="scriptWarningWidget" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item>
<widget class="QLabel" name="snapWarningLabel">
<property name="text">
<string>Browsers installed as snaps are currently not supported.</string>
@@ -94,23 +84,20 @@
<property name="horizontalSpacing">
<number>40</number>
</property>
- <item row="0" column="3">
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="vivaldiSupport">
+ <property name="text">
+ <string>Vivaldi</string>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>179</width>
- <height>20</height>
- </size>
+ <property name="checked">
+ <bool>false</bool>
</property>
- </spacer>
+ </widget>
</item>
- <item row="0" column="0">
- <widget class="QCheckBox" name="chromeSupport">
+ <item row="0" column="3">
+ <widget class="QCheckBox" name="edgeSupport">
<property name="text">
- <string>&amp;Google Chrome</string>
+ <string>&amp;Edge</string>
</property>
<property name="checked">
<bool>false</bool>
@@ -120,62 +107,65 @@
<item row="0" column="1">
<widget class="QCheckBox" name="firefoxSupport">
<property name="text">
- <string>&amp;Firefox</string>
+ <string>Firefox</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QCheckBox" name="chromiumSupport">
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="torBrowserSupport">
<property name="text">
- <string>&amp;Chromium</string>
+ <string>Tor Browser</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QCheckBox" name="vivaldiSupport">
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="braveSupport">
<property name="text">
- <string>&amp;Vivaldi</string>
+ <string>Brave</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="0" column="2">
- <widget class="QCheckBox" name="torBrowserSupport">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="chromeSupport">
<property name="text">
- <string>&amp;Tor Browser</string>
+ <string>Google Chrome</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="1" column="2">
- <widget class="QCheckBox" name="braveSupport">
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="chromiumSupport">
<property name="text">
- <string>&amp;Brave</string>
+ <string>Chromium</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="0" column="3">
- <widget class="QCheckBox" name="edgeSupport">
- <property name="text">
- <string>&amp;Edge</string>
+ <item row="0" column="4">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="checked">
- <bool>false</bool>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
</property>
- </widget>
+ </spacer>
</item>
</layout>
</widget>
@@ -199,7 +189,7 @@
<item>
<widget class="QCheckBox" name="showNotification">
<property name="text">
- <string extracomment="Credentials mean login data requested via browser extension">Show a &amp;notification when credentials are requested</string>
+ <string extracomment="Credentials mean login data requested via browser extension">Show a notification when credentials are requested</string>
</property>
<property name="checked">
<bool>true</bool>
@@ -209,7 +199,7 @@
<item>
<widget class="QCheckBox" name="unlockDatabase">
<property name="text">
- <string>Re&amp;quest to unlock the database if it is locked</string>
+ <string>Request to unlock the database if it is locked</string>
</property>
<property name="checked">
<bool>true</bool>
@@ -222,7 +212,7 @@
<string>Only entries with the same scheme (http://, https://, ...) are returned.</string>
</property>
<property name="text">
- <string>&amp;Match URL scheme (e.g., https://...)</string>
+ <string>Match URL scheme (e.g., https://...)</string>
</property>
</widget>
</item>
@@ -232,7 +222,7 @@
<string>Only returns the best matches for a specific URL instead of all entries for the whole domain.</string>
</property>
<property name="text">
- <string>&amp;Return only best-matching credentials</string>
+ <string>Return only best-matching credentials</string>
</property>
</widget>
</item>
@@ -242,21 +232,31 @@
<string>Returns expired credentials. String [expired] is added to the title.</string>
</property>
<property name="text">
- <string>&amp;Allow returning expired credentials.</string>
+ <string>Allow returning expired credentials</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="searchInAllDatabases">
+ <property name="toolTip">
+ <string>All databases connected to the extension will return matching credentials.</string>
+ </property>
+ <property name="text">
+ <string extracomment="Credentials mean login data requested via browser extension">Search in all opened databases for matching credentials</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="sortByTitle">
<property name="text">
- <string extracomment="Credentials mean login data requested via browser extension">Sort &amp;matching credentials by title</string>
+ <string extracomment="Credentials mean login data requested via browser extension">Sort matching credentials by title</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="sortByUsername">
<property name="text">
- <string extracomment="Credentials mean login data requested via browser extension">Sort matching credentials by &amp;username</string>
+ <string extracomment="Credentials mean login data requested via browser extension">Sort matching credentials by username</string>
</property>
</widget>
</item>
@@ -293,31 +293,21 @@
<item>
<widget class="QCheckBox" name="alwaysAllowAccess">
<property name="text">
- <string extracomment="Credentials mean login data requested via browser extension">Never &amp;ask before accessing credentials</string>
+ <string extracomment="Credentials mean login data requested via browser extension">Never ask before accessing credentials</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="alwaysAllowUpdate">
<property name="text">
- <string extracomment="Credentials mean login data requested via browser extension">Never ask before &amp;updating credentials</string>
+ <string extracomment="Credentials mean login data requested via browser extension">Never ask before updating credentials</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="httpAuthPermission">
<property name="text">
- <string extracomment="An extra HTTP Basic Auth setting">Do not ask permission for HTTP &amp;Basic Auth</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="searchInAllDatabases">
- <property name="toolTip">
- <string>All databases connected to the extension will return matching credentials.</string>
- </property>
- <property name="text">
- <string extracomment="Credentials mean login data requested via browser extension">Searc&amp;h in all opened databases for matching credentials</string>
+ <string extracomment="An extra HTTP Basic Auth setting">Do not ask permission for HTTP Basic Auth</string>
</property>
</widget>
</item>
@@ -327,7 +317,7 @@
<string>Automatically creating or updating string fields is not supported.</string>
</property>
<property name="text">
- <string>&amp;Return advanced string fields which start with &quot;KPH: &quot;</string>
+ <string>Return advanced string fields which start with &quot;KPH: &quot;</string>
</property>
</widget>
</item>
@@ -337,7 +327,7 @@
<string>Don't display the popup suggesting migration of legacy KeePassHTTP settings.</string>
</property>
<property name="text">
- <string>&amp;Do not prompt for KeePassHTTP settings migration.</string>
+ <string>Do not prompt for KeePassHTTP settings migration.</string>
</property>
</widget>
</item>
@@ -347,17 +337,7 @@
<string>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</string>
</property>
<property name="text">
- <string>Update &amp;native messaging manifest files at startup</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="supportBrowserProxy">
- <property name="toolTip">
- <string>Support a proxy application between KeePassXC and browser extension.</string>
- </property>
- <property name="text">
- <string>Use a &amp;proxy application between KeePassXC and browser extension</string>
+ <string>Update native messaging manifest files at startup</string>
</property>
</widget>
</item>
@@ -367,14 +347,42 @@
<string>Use a custom proxy location if you installed a proxy manually.</string>
</property>
<property name="text">
- <string comment="Meant is the proxy for KeePassXC-Browser">Use a &amp;custom proxy location</string>
+ <string comment="Meant is the proxy for KeePassXC-Browser">Use a custom proxy location:</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>15</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="QLineEdit" name="customProxyLocation">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>450</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="accessibleName">
<string>Custom proxy location field</string>
</property>
@@ -396,9 +404,205 @@
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</item>
<item>
+ <widget class="QCheckBox" name="customBrowserSupport">
+ <property name="text">
+ <string>Use a custom browser configuration location:</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="customBrowserGroupBox">
+ <property name="title">
+ <string/>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLabel" name="customBrowserLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">margin-right: 5px</string>
+ </property>
+ <property name="text">
+ <string>Browser type:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="browserTypeComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="accessibleName">
+ <string>Toolbar button style</string>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToContents</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="customBrowserLabel_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">margin-right: 5px</string>
+ </property>
+ <property name="text">
+ <string>Config Location:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="customBrowserLocation">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>350</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="accessibleName">
+ <string>Custom browser location field</string>
+ </property>
+ <property name="maxLength">
+ <number>999</number>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ <property name="placeholderText">
+ <string>~/.custom/config/Mozilla/native-messaging-hosts/</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="customBrowserLocationBrowseButton">
+ <property name="accessibleName">
+ <string>Browse for custom browser path</string>
+ </property>
+ <property name="text">
+ <string extracomment="Button for opening file dialog">Browse...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="customExtensionIdContainer" native="true">
+ <layout class="QHBoxLayout" name="customExtensionBox" stretch="0,0,1">
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="customExtensionLabel">
+ <property name="text">
+ <string>Custom extension ID:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="customExtensionId">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="accessibleName">
+ <string>Custom extension ID</string>
+ </property>
+ <property name="maxLength">
+ <number>999</number>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/browser/BrowserShared.cpp b/src/browser/BrowserShared.cpp
new file mode 100644
index 000000000..08b9fe537
--- /dev/null
+++ b/src/browser/BrowserShared.cpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "BrowserShared.h"
+#include "config-keepassx.h"
+
+#include <QCoreApplication>
+#include <QProcessEnvironment>
+#include <QStandardPaths>
+#include <QVariant>
+
+namespace BrowserShared
+{
+ QString localServerPath()
+ {
+ const auto serverName = QStringLiteral("/org.keepassxc.KeePassXC.BrowserServer");
+#if defined(KEEPASSXC_DIST_SNAP)
+ return QProcessEnvironment::systemEnvironment().value("SNAP_USER_COMMON") + serverName;
+#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
+ // Use XDG_RUNTIME_DIR instead of /tmp if it's available
+ QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
+ return path.isEmpty() ? QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName
+ : path + serverName;
+#elif defined(Q_OS_WIN)
+ // Windows uses named pipes
+ return serverName;
+#else // Q_OS_MACOS and others
+ return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName;
+#endif
+ }
+} // namespace BrowserShared
diff --git a/src/browser/BrowserShared.h b/src/browser/BrowserShared.h
new file mode 100644
index 000000000..e9542a74c
--- /dev/null
+++ b/src/browser/BrowserShared.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_BROWSERSHARED_H
+#define KEEPASSXC_BROWSERSHARED_H
+
+#include <QString>
+
+namespace BrowserShared
+{
+ constexpr int NATIVEMSG_MAX_LENGTH = 1024 * 1024;
+
+ enum SupportedBrowsers : int
+ {
+ CHROME = 0,
+ CHROMIUM,
+ FIREFOX,
+ VIVALDI,
+ TOR_BROWSER,
+ BRAVE,
+ EDGE,
+ CUSTOM,
+ MAX_SUPPORTED
+ };
+
+ QString localServerPath();
+} // namespace BrowserShared
+
+#endif // KEEPASSXC_BROWSERSHARED_H
diff --git a/src/browser/CMakeLists.txt b/src/browser/CMakeLists.txt
index 7e813eb5b..bb92511bc 100755
--- a/src/browser/CMakeLists.txt
+++ b/src/browser/CMakeLists.txt
@@ -20,15 +20,15 @@ if(WITH_XC_BROWSER)
set(keepassxcbrowser_SOURCES
BrowserAccessControlDialog.cpp
BrowserAction.cpp
- BrowserClients.cpp
BrowserEntryConfig.cpp
BrowserEntrySaveDialog.cpp
- BrowserOptionDialog.cpp
+ BrowserHost.cpp
+ BrowserSettingsPage.cpp
+ BrowserSettingsWidget.cpp
BrowserService.cpp
BrowserSettings.cpp
- HostInstaller.cpp
- NativeMessagingBase.cpp
- NativeMessagingHost.cpp
+ BrowserShared.cpp
+ NativeMessageInstaller.cpp
Variant.cpp)
add_library(keepassxcbrowser STATIC ${keepassxcbrowser_SOURCES})
diff --git a/src/browser/HostInstaller.cpp b/src/browser/HostInstaller.cpp
deleted file mode 100644
index f4ffae3b7..000000000
--- a/src/browser/HostInstaller.cpp
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "HostInstaller.h"
-#include "config-keepassx.h"
-
-#include <QCoreApplication>
-#include <QDir>
-#include <QFile>
-#include <QJsonArray>
-#include <QJsonDocument>
-#include <QMessageBox>
-#include <QProcessEnvironment>
-#include <QStandardPaths>
-
-HostInstaller::HostInstaller()
- : HOST_NAME("org.keepassxc.keepassxc_browser")
- , ALLOWED_EXTENSIONS(QStringList() << "keepassxc-browser@keepassxc.org")
- , ALLOWED_ORIGINS(QStringList() << "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/"
- << "chrome-extension://oboonakemofpalcgghocfoadofidjkkk/")
-#if defined(Q_OS_MACOS)
- , TARGET_DIR_CHROME("/Library/Application Support/Google/Chrome/NativeMessagingHosts")
- , TARGET_DIR_CHROMIUM("/Library/Application Support/Chromium/NativeMessagingHosts")
- , TARGET_DIR_FIREFOX("/Library/Application Support/Mozilla/NativeMessagingHosts")
- , TARGET_DIR_VIVALDI("/Library/Application Support/Vivaldi/NativeMessagingHosts")
- , TARGET_DIR_TOR_BROWSER("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts")
- , TARGET_DIR_BRAVE("/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts")
- , TARGET_DIR_EDGE("/Library/Application Support/Microsoft Edge/NativeMessagingHosts")
-#elif defined(Q_OS_WIN)
- // clang-format off
- , TARGET_DIR_CHROME("HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser")
- , TARGET_DIR_CHROMIUM("HKEY_CURRENT_USER\\Software\\Chromium\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser")
- // clang-format on
- , TARGET_DIR_FIREFOX("HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser")
- , TARGET_DIR_VIVALDI(TARGET_DIR_CHROME)
- , TARGET_DIR_TOR_BROWSER(TARGET_DIR_FIREFOX)
- , TARGET_DIR_BRAVE(TARGET_DIR_CHROME)
- , TARGET_DIR_EDGE(
- "HKEY_CURRENT_USER\\Software\\Microsoft\\Edge\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser")
-#else
- , TARGET_DIR_CHROME("/.config/google-chrome/NativeMessagingHosts")
- , TARGET_DIR_CHROMIUM("/.config/chromium/NativeMessagingHosts")
- , TARGET_DIR_FIREFOX("/.mozilla/native-messaging-hosts")
- , TARGET_DIR_VIVALDI("/.config/vivaldi/NativeMessagingHosts")
- , TARGET_DIR_TOR_BROWSER("/.tor-browser/app/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts")
- , TARGET_DIR_BRAVE("/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts")
- , TARGET_DIR_EDGE("/.config/microsoftedge/NativeMessagingHosts")
-#endif
-{
-}
-
-/**
- * Checks if the selected browser has native messaging host properly installed
- *
- * @param browser Selected browser
- * @return bool Script is installed correctly
- */
-bool HostInstaller::checkIfInstalled(SupportedBrowsers browser)
-{
- QString fileName = getPath(browser);
-#ifdef Q_OS_WIN
- QSettings settings(getTargetPath(browser), QSettings::NativeFormat);
- return registryEntryFound(settings);
-#else
- return QFile::exists(fileName);
-#endif
-}
-
-/**
- * Checks if keepassxc-proxy location is found
- *
- * @param proxy Is keepassxc-proxy enabled
- * @param location Custom proxy location
- * @param path The path is set here and returned to the caller
- * @return bool
- */
-bool HostInstaller::checkIfProxyExists(const bool& proxy, const QString& location, QString& path) const
-{
- QString fileName = getProxyPath(proxy, location);
- path = fileName;
- return QFile::exists(fileName);
-}
-
-/**
- * Installs native messaging JSON script for the selected browser
- *
- * @param browser Selected browser
- * @param enabled Is browser integration enabled
- * @param proxy Is keepassxc-proxy enabled
- * @param location Custom proxy location
- */
-void HostInstaller::installBrowser(SupportedBrowsers browser,
- const bool& enabled,
- const bool& proxy,
- const QString& location)
-{
- if (enabled) {
-#ifdef Q_OS_WIN
- // Create a registry key
- QSettings settings(getTargetPath(browser), QSettings::NativeFormat);
- settings.setValue("Default", getPath(browser));
-#endif
- // Always create the script file
- QJsonObject script = constructFile(browser, proxy, location);
- if (!saveFile(browser, script)) {
- QMessageBox::critical(nullptr,
- tr("KeePassXC: Cannot save file!"),
- tr("Cannot save the native messaging script file."),
- QMessageBox::Ok);
- }
- } else {
- // Remove the script file
- QString fileName = getPath(browser);
- QFile::remove(fileName);
-#ifdef Q_OS_WIN
- // Remove the registry entry
- QSettings settings(getTargetPath(browser), QSettings::NativeFormat);
- settings.remove("Default");
-#endif
- }
-}
-
-/**
- * Updates the paths to native messaging host for each browser that has been enabled
- *
- * @param proxy Is keepassxc-proxy enabled
- * @param location Custom proxy location
- */
-void HostInstaller::updateBinaryPaths(const bool& proxy, const QString& location)
-{
- for (int i = 0; i <= SupportedBrowsers::EDGE; ++i) {
- if (checkIfInstalled(static_cast<SupportedBrowsers>(i))) {
- installBrowser(static_cast<SupportedBrowsers>(i), true, proxy, location);
- }
- }
-}
-
-/**
- * Returns the target path for each browser. Windows uses a registry path instead of a file path
- *
- * @param browser Selected browser
- * @return QString Current target path for the selected browser
- */
-QString HostInstaller::getTargetPath(SupportedBrowsers browser) const
-{
- switch (browser) {
- case SupportedBrowsers::CHROME:
- return TARGET_DIR_CHROME;
- case SupportedBrowsers::CHROMIUM:
- return TARGET_DIR_CHROMIUM;
- case SupportedBrowsers::FIREFOX:
- return TARGET_DIR_FIREFOX;
- case SupportedBrowsers::VIVALDI:
- return TARGET_DIR_VIVALDI;
- case SupportedBrowsers::TOR_BROWSER:
- return TARGET_DIR_TOR_BROWSER;
- case SupportedBrowsers::BRAVE:
- return TARGET_DIR_BRAVE;
- case SupportedBrowsers::EDGE:
- return TARGET_DIR_EDGE;
- default:
- return QString();
- }
-}
-
-/**
- * Returns the browser name
- * Needed for Windows to separate Chromium- or Firefox-based scripts
- *
- * @param browser Selected browser
- * @return QString Name of the selected browser
- */
-QString HostInstaller::getBrowserName(SupportedBrowsers browser) const
-{
- switch (browser) {
- case SupportedBrowsers::CHROME:
- return "chrome";
- case SupportedBrowsers::CHROMIUM:
- return "chromium";
- case SupportedBrowsers::FIREFOX:
- return "firefox";
- case SupportedBrowsers::VIVALDI:
- return "vivaldi";
- case SupportedBrowsers::TOR_BROWSER:
- return "tor-browser";
- case SupportedBrowsers::BRAVE:
- return "brave";
- case SupportedBrowsers::EDGE:
- return "edge";
- default:
- return QString();
- }
-}
-
-/**
- * Returns the path of native messaging JSON script for the selected browser
- *
- * @param browser Selected browser
- * @return QString JSON script path for the selected browser
- */
-QString HostInstaller::getPath(SupportedBrowsers browser) const
-{
-#ifdef Q_OS_WIN
- // If portable settings file exists save the JSON scripts to application folder
- QString userPath;
- QString portablePath = QCoreApplication::applicationDirPath() + "/keepassxc.ini";
- if (QFile::exists(portablePath)) {
- userPath = QCoreApplication::applicationDirPath();
- } else {
- userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
- }
-
- QString winPath = QString("%1/%2_%3.json").arg(userPath, HOST_NAME, getBrowserName(browser));
- winPath.replace("/", "\\");
- return winPath;
-#else
- QString path = getTargetPath(browser);
- return QString("%1%2/%3.json").arg(QDir::homePath(), path, HOST_NAME);
-#endif
-}
-
-/**
- * Gets the installation directory for JSON script file (application install path)
- *
- * @param browser Selected browser
- * @return QString Install path
- */
-QString HostInstaller::getInstallDir(SupportedBrowsers browser) const
-{
- QString path = getTargetPath(browser);
-#ifdef Q_OS_WIN
- return QCoreApplication::applicationDirPath();
-#else
- return QString("%1%2").arg(QDir::homePath(), path);
-#endif
-}
-
-/**
- * Gets the path to keepassxc-proxy binary
- *
- * @param proxy Is keepassxc-proxy used with KeePassXC
- * @param location Custom proxy path
- * @return path Path to keepassxc-proxy
- */
-QString HostInstaller::getProxyPath(const bool& proxy, const QString& location) const
-{
- QString path;
-#ifdef KEEPASSXC_DIST_APPIMAGE
- if (proxy && !location.isEmpty()) {
- path = location;
- } else {
- path = QProcessEnvironment::systemEnvironment().value("APPIMAGE");
- }
-#else
- if (proxy) {
- if (!location.isEmpty()) {
- path = location;
- } else {
- path = QFileInfo(QCoreApplication::applicationFilePath()).absolutePath();
- path.append("/keepassxc-proxy");
-#ifdef Q_OS_WIN
- path.append(".exe");
-#endif
- }
- } else {
- path = QFileInfo(QCoreApplication::applicationFilePath()).absoluteFilePath();
- }
-#ifdef Q_OS_WIN
- path.replace("/", "\\");
-#endif
-
-#endif // #ifdef KEEPASSXC_DIST_APPIMAGE
- return path;
-}
-
-/**
- * Constructs the JSON script file used with native messaging
- *
- * @param browser Browser (Chromium- and Firefox-based browsers need a different parameters for the script)
- * @param proxy Is keepassxc-proxy used with KeePassXC
- * @param location Custom proxy location
- * @return script The JSON script file
- */
-QJsonObject HostInstaller::constructFile(SupportedBrowsers browser, const bool& proxy, const QString& location)
-{
- QString path = getProxyPath(proxy, location);
-
- QJsonObject script;
- script["name"] = HOST_NAME;
- script["description"] = QString("KeePassXC integration with native messaging support");
- script["path"] = path;
- script["type"] = QString("stdio");
-
- QJsonArray arr;
- if (browser == SupportedBrowsers::FIREFOX || browser == SupportedBrowsers::TOR_BROWSER) {
- for (const QString& extension : ALLOWED_EXTENSIONS) {
- arr.append(extension);
- }
- script["allowed_extensions"] = arr;
- } else {
- for (const QString& origin : ALLOWED_ORIGINS) {
- arr.append(origin);
- }
- script["allowed_origins"] = arr;
- }
-
- return script;
-}
-
-/**
- * Checks if a registry setting is found with default value
- *
- * @param settings Registry path
- * @return bool Is the registry value found
- */
-bool HostInstaller::registryEntryFound(const QSettings& settings)
-{
- return !settings.value("Default").isNull();
-}
-
-/**
- * Saves a JSON script file
- *
- * @param browser Selected browser
- * @param script JSON native messaging script object
- * @return bool Write succeeds
- */
-bool HostInstaller::saveFile(SupportedBrowsers browser, const QJsonObject& script)
-{
- QString path = getPath(browser);
- QString installDir = getInstallDir(browser);
- QDir dir(installDir);
- if (!dir.exists()) {
- QDir().mkpath(installDir);
- }
-
- QFile scriptFile(path);
- if (!scriptFile.open(QIODevice::WriteOnly)) {
- return false;
- }
-
- QJsonDocument doc(script);
- return scriptFile.write(doc.toJson()) >= 0;
-}
diff --git a/src/browser/HostInstaller.h b/src/browser/HostInstaller.h
deleted file mode 100644
index 2136d1c34..000000000
--- a/src/browser/HostInstaller.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef HOSTINSTALLER_H
-#define HOSTINSTALLER_H
-
-#include <QJsonObject>
-#include <QObject>
-#include <QSettings>
-
-class HostInstaller : public QObject
-{
- Q_OBJECT
-
-public:
- enum SupportedBrowsers : int
- {
- CHROME = 0,
- CHROMIUM = 1,
- FIREFOX = 2,
- VIVALDI = 3,
- TOR_BROWSER = 4,
- BRAVE = 5,
- EDGE = 6
- };
-
-public:
- HostInstaller();
- bool checkIfInstalled(SupportedBrowsers browser);
- bool checkIfProxyExists(const bool& proxy, const QString& location, QString& path) const;
- void installBrowser(SupportedBrowsers browser,
- const bool& enabled,
- const bool& proxy = false,
- const QString& location = "");
- void updateBinaryPaths(const bool& proxy, const QString& location = "");
-
-private:
- QString getTargetPath(SupportedBrowsers browser) const;
- QString getBrowserName(SupportedBrowsers browser) const;
- QString getPath(SupportedBrowsers browser) const;
- QString getInstallDir(SupportedBrowsers browser) const;
- QString getProxyPath(const bool& proxy, const QString& location) const;
- QJsonObject constructFile(SupportedBrowsers browser, const bool& proxy, const QString& location);
- bool registryEntryFound(const QSettings& settings);
- bool saveFile(SupportedBrowsers browser, const QJsonObject& script);
-
-private:
- const QString HOST_NAME;
- const QStringList ALLOWED_EXTENSIONS;
- const QStringList ALLOWED_ORIGINS;
- const QString TARGET_DIR_CHROME;
- const QString TARGET_DIR_CHROMIUM;
- const QString TARGET_DIR_FIREFOX;
- const QString TARGET_DIR_VIVALDI;
- const QString TARGET_DIR_TOR_BROWSER;
- const QString TARGET_DIR_BRAVE;
- const QString TARGET_DIR_EDGE;
-};
-
-#endif // HOSTINSTALLER_H
diff --git a/src/browser/NativeMessageInstaller.cpp b/src/browser/NativeMessageInstaller.cpp
new file mode 100644
index 000000000..8b038f619
--- /dev/null
+++ b/src/browser/NativeMessageInstaller.cpp
@@ -0,0 +1,329 @@
+/*
+ * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
+ * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "NativeMessageInstaller.h"
+#include "BrowserSettings.h"
+#include "config-keepassx.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QDir>
+#include <QFile>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QMessageBox>
+#include <QProcessEnvironment>
+#include <QSettings>
+#include <QStandardPaths>
+
+using namespace BrowserShared;
+
+namespace
+{
+ const QString HOST_NAME = QStringLiteral("org.keepassxc.keepassxc_browser");
+ const QStringList ALLOWED_EXTENSIONS = QStringList() << QStringLiteral("keepassxc-browser@keepassxc.org");
+ const QStringList ALLOWED_ORIGINS = QStringList()
+ << QStringLiteral("chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/")
+ << QStringLiteral("chrome-extension://oboonakemofpalcgghocfoadofidjkkk/");
+#if defined(Q_OS_MACOS)
+ const QString TARGET_DIR_CHROME = QStringLiteral("/Library/Application Support/Google/Chrome/NativeMessagingHosts");
+ const QString TARGET_DIR_CHROMIUM = QStringLiteral("/Library/Application Support/Chromium/NativeMessagingHosts");
+ const QString TARGET_DIR_FIREFOX = QStringLiteral("/Library/Application Support/Mozilla/NativeMessagingHosts");
+ const QString TARGET_DIR_VIVALDI = QStringLiteral("/Library/Application Support/Vivaldi/NativeMessagingHosts");
+ const QString TARGET_DIR_TOR_BROWSER =
+ QStringLiteral("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts");
+ const QString TARGET_DIR_BRAVE =
+ QStringLiteral("/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts");
+ const QString TARGET_DIR_EDGE = QStringLiteral("/Library/Application Support/Microsoft Edge/NativeMessagingHosts");
+#elif defined(Q_OS_WIN)
+ const QString TARGET_DIR_CHROME = QStringLiteral(
+ "HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser");
+ const QString TARGET_DIR_CHROMIUM =
+ QStringLiteral("HKEY_CURRENT_USER\\Software\\Chromium\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser");
+ const QString TARGET_DIR_FIREFOX =
+ QStringLiteral("HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser");
+ const QString TARGET_DIR_VIVALDI = TARGET_DIR_CHROME;
+ const QString TARGET_DIR_TOR_BROWSER = TARGET_DIR_FIREFOX;
+ const QString TARGET_DIR_BRAVE = TARGET_DIR_CHROME;
+ const QString TARGET_DIR_EDGE = QStringLiteral(
+ "HKEY_CURRENT_USER\\Software\\Microsoft\\Edge\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser");
+#else
+ const QString TARGET_DIR_CHROME = QStringLiteral("/google-chrome/NativeMessagingHosts");
+ const QString TARGET_DIR_CHROMIUM = QStringLiteral("/chromium/NativeMessagingHosts");
+ const QString TARGET_DIR_FIREFOX = QStringLiteral("/.mozilla/native-messaging-hosts");
+ const QString TARGET_DIR_VIVALDI = QStringLiteral("/vivaldi/NativeMessagingHosts");
+ const QString TARGET_DIR_TOR_BROWSER = QStringLiteral(
+ "/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts");
+ const QString TARGET_DIR_BRAVE = QStringLiteral("/BraveSoftware/Brave-Browser/NativeMessagingHosts");
+ const QString TARGET_DIR_EDGE = QStringLiteral("/microsoftedge/NativeMessagingHosts");
+#endif
+} // namespace
+
+/**
+ * Checks if the selected browser has native messaging host properly installed
+ *
+ * @param browser Selected browser
+ * @return bool Script is installed correctly
+ */
+bool NativeMessageInstaller::isBrowserEnabled(SupportedBrowsers browser)
+{
+#ifdef Q_OS_WIN
+ QSettings settings(getTargetPath(browser), QSettings::NativeFormat);
+ return !settings.value("Default").isNull();
+#else
+ return QFile::exists(getNativeMessagePath(browser));
+#endif
+}
+
+/**
+ * Installs native messaging JSON script for the selected browser
+ *
+ * @param browser Selected browser
+ * @param enabled Is browser integration enabled
+ */
+void NativeMessageInstaller::setBrowserEnabled(SupportedBrowsers browser, bool enabled)
+{
+ if (enabled) {
+#ifdef Q_OS_WIN
+ // Create a registry key
+ QSettings settings(getTargetPath(browser), QSettings::NativeFormat);
+ settings.setValue("Default", getNativeMessagePath(browser));
+#endif
+ // Always create the script file
+ if (!createNativeMessageFile(browser)) {
+ QMessageBox::critical(
+ nullptr,
+ QObject::tr("Browser Plugin Failure"),
+ QObject::tr("Could not save the native messaging script file for %1.").arg(getBrowserName(browser)),
+ QMessageBox::Ok);
+ }
+ } else {
+ // Remove the script file
+ const QString fileName = getNativeMessagePath(browser);
+ QFile::remove(fileName);
+#ifdef Q_OS_WIN
+ // Remove the registry entry
+ QSettings settings(getTargetPath(browser), QSettings::NativeFormat);
+ settings.remove("Default");
+#endif
+ }
+}
+
+/**
+ * Updates the paths to native messaging host for each browser that has been enabled
+ */
+void NativeMessageInstaller::updateBinaryPaths()
+{
+ for (int i = 0; i < SupportedBrowsers::MAX_SUPPORTED; ++i) {
+ if (isBrowserEnabled(static_cast<SupportedBrowsers>(i))) {
+ setBrowserEnabled(static_cast<SupportedBrowsers>(i), true);
+ }
+ }
+}
+
+/**
+ * Returns the target path for each browser. Windows uses a registry path instead of a file path
+ *
+ * @param browser Selected browser
+ * @return QString Current target path for the selected browser
+ */
+QString NativeMessageInstaller::getTargetPath(SupportedBrowsers browser) const
+{
+ switch (browser) {
+ case SupportedBrowsers::CHROME:
+ return TARGET_DIR_CHROME;
+ case SupportedBrowsers::CHROMIUM:
+ return TARGET_DIR_CHROMIUM;
+ case SupportedBrowsers::FIREFOX:
+ return TARGET_DIR_FIREFOX;
+ case SupportedBrowsers::VIVALDI:
+ return TARGET_DIR_VIVALDI;
+ case SupportedBrowsers::TOR_BROWSER:
+ return TARGET_DIR_TOR_BROWSER;
+ case SupportedBrowsers::BRAVE:
+ return TARGET_DIR_BRAVE;
+ case SupportedBrowsers::EDGE:
+ return TARGET_DIR_EDGE;
+ case SupportedBrowsers::CUSTOM:
+ return browserSettings()->customBrowserLocation();
+ default:
+ return {};
+ }
+}
+
+/**
+ * Returns the browser name
+ * Needed for Windows to separate Chromium- or Firefox-based scripts
+ *
+ * @param browser Selected browser
+ * @return QString Name of the selected browser
+ */
+QString NativeMessageInstaller::getBrowserName(SupportedBrowsers browser) const
+{
+ switch (browser) {
+ case SupportedBrowsers::CHROME:
+ return QStringLiteral("chrome");
+ case SupportedBrowsers::CHROMIUM:
+ return QStringLiteral("chromium");
+ case SupportedBrowsers::FIREFOX:
+ return QStringLiteral("firefox");
+ case SupportedBrowsers::VIVALDI:
+ return QStringLiteral("vivaldi");
+ case SupportedBrowsers::TOR_BROWSER:
+ return QStringLiteral("tor-browser");
+ case SupportedBrowsers::BRAVE:
+ return QStringLiteral("brave");
+ case SupportedBrowsers::EDGE:
+ return QStringLiteral("edge");
+ case SupportedBrowsers::CUSTOM:
+ return QStringLiteral("custom");
+ default:
+ return {};
+ }
+}
+
+/**
+ * Returns the path of native messaging JSON script for the selected browser
+ *
+ * @param browser Selected browser
+ * @return QString JSON script path for the selected browser
+ */
+QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) const
+{
+ QString basePath;
+#if defined(Q_OS_WIN)
+ // If portable settings file exists save the JSON scripts to the application folder
+ if (QFile::exists(QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc.ini"))) {
+ basePath = QCoreApplication::applicationDirPath();
+ } else {
+ basePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
+ }
+ return QStringLiteral("%1/%2_%3.json").arg(basePath, HOST_NAME, getBrowserName(browser));
+#elif defined(Q_OS_LINUX)
+ if (browser == SupportedBrowsers::TOR_BROWSER) {
+ // Tor Browser launcher stores its config in ~/.local/share/...
+ basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+ } else if (browser == SupportedBrowsers::FIREFOX) {
+ // Firefox stores its config in ~/
+ basePath = QDir::homePath();
+ } else {
+ basePath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ }
+#else
+ basePath = QDir::homePath();
+#endif
+ if (browser == SupportedBrowsers::CUSTOM) {
+ return QString("%1/%2.json").arg(getTargetPath(browser), HOST_NAME);
+ }
+
+ return QStringLiteral("%1%2/%3.json").arg(basePath, getTargetPath(browser), HOST_NAME);
+}
+
+/**
+ * Gets the path to keepassxc-proxy binary
+ *
+ * @param location Custom proxy path
+ * @return path Path to keepassxc-proxy
+ */
+QString NativeMessageInstaller::getProxyPath() const
+{
+ if (browserSettings()->useCustomProxy()) {
+ return browserSettings()->customProxyLocation();
+ }
+
+ QString path;
+#ifdef KEEPASSXC_DIST_APPIMAGE
+ path = QProcessEnvironment::systemEnvironment().value("APPIMAGE");
+#else
+ path = QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc-proxy");
+#ifdef Q_OS_WIN
+ path.append(QStringLiteral(".exe"));
+#endif // #ifdef Q_OS_WIN
+
+#endif // #ifdef KEEPASSXC_DIST_APPIMAGE
+ return QDir::toNativeSeparators(path);
+}
+
+/**
+ * Constructs the JSON script file used with native messaging
+ *
+ * @param browser Browser (Chromium- and Firefox-based browsers need a different parameters for the script)
+ * @param location Custom proxy location
+ * @return script The JSON script file
+ */
+QJsonObject NativeMessageInstaller::constructFile(SupportedBrowsers browser)
+{
+ QJsonObject script;
+ script["name"] = HOST_NAME;
+ script["description"] = QStringLiteral("KeePassXC integration with native messaging support");
+ script["path"] = getProxyPath();
+ script["type"] = QStringLiteral("stdio");
+
+ QJsonArray arr;
+ if (browser == SupportedBrowsers::FIREFOX || browser == SupportedBrowsers::TOR_BROWSER
+ || (browser == SupportedBrowsers::CUSTOM
+ && browserSettings()->customBrowserType() == SupportedBrowsers::FIREFOX)) {
+ for (const QString& extension : ALLOWED_EXTENSIONS) {
+ arr.append(extension);
+ }
+ script["allowed_extensions"] = arr;
+ } else {
+ for (const QString& origin : ALLOWED_ORIGINS) {
+ arr.append(origin);
+ }
+#ifdef QT_DEBUG
+ auto customId = browserSettings()->customExtensionId();
+ if (!customId.isEmpty()) {
+ arr.append(QString("chrome-extension://%1/").arg(customId));
+ }
+#endif
+ script["allowed_origins"] = arr;
+ }
+
+ return script;
+}
+
+/**
+ * Saves a JSON script file
+ *
+ * @param browser Selected browser
+ * @param script JSON native messaging script object
+ * @return bool Write succeeds
+ */
+bool NativeMessageInstaller::createNativeMessageFile(SupportedBrowsers browser)
+{
+ auto path = getNativeMessagePath(browser);
+
+ // Make the parent directory path if necessary
+ QDir().mkpath(QFileInfo(path).absolutePath());
+
+ QFile scriptFile(path);
+ if (!scriptFile.open(QIODevice::WriteOnly)) {
+ qWarning() << "Browser Plugin: Failed to open native message file for writing at " << scriptFile.fileName();
+ qWarning() << scriptFile.errorString();
+ return false;
+ }
+
+ QJsonDocument doc(constructFile(browser));
+ if (scriptFile.write(doc.toJson()) < 0) {
+ qWarning() << "Browser Plugin: Failed to write native message file at " << scriptFile.fileName();
+ qWarning() << scriptFile.errorString();
+ return false;
+ }
+ return true;
+}
diff --git a/src/browser/NativeMessageInstaller.h b/src/browser/NativeMessageInstaller.h
new file mode 100644
index 000000000..4c0e339ee
--- /dev/null
+++ b/src/browser/NativeMessageInstaller.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
+ * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NATIVEMESSAGEINSTALLER_H
+#define NATIVEMESSAGEINSTALLER_H
+
+#include "BrowserShared.h"
+#include <QJsonObject>
+
+class NativeMessageInstaller
+{
+public:
+ NativeMessageInstaller() = default;
+
+ void setBrowserEnabled(BrowserShared::SupportedBrowsers browser, bool enabled);
+ bool isBrowserEnabled(BrowserShared::SupportedBrowsers browser);
+
+ QString getProxyPath() const;
+ void updateBinaryPaths();
+
+private:
+ QString getTargetPath(BrowserShared::SupportedBrowsers browser) const;
+ QString getBrowserName(BrowserShared::SupportedBrowsers browser) const;
+ QString getNativeMessagePath(BrowserShared::SupportedBrowsers browser) const;
+ QJsonObject constructFile(BrowserShared::SupportedBrowsers browser);
+ bool createNativeMessageFile(BrowserShared::SupportedBrowsers browser);
+
+ Q_DISABLE_COPY(NativeMessageInstaller);
+};
+
+#endif // NATIVEMESSAGEINSTALLER_H
diff --git a/src/browser/NativeMessagingBase.cpp b/src/browser/NativeMessagingBase.cpp
deleted file mode 100644
index 208d28a1e..000000000
--- a/src/browser/NativeMessagingBase.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "NativeMessagingBase.h"
-#include <QStandardPaths>
-
-#include "config-keepassx.h"
-
-#if defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
-#include <sys/event.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-
-#ifdef Q_OS_LINUX
-#include <sys/epoll.h>
-#include <unistd.h>
-#endif
-
-#ifdef Q_OS_WIN
-#include <fcntl.h>
-#include <io.h>
-#endif
-
-NativeMessagingBase::NativeMessagingBase(const bool enabled)
-{
-#ifdef Q_OS_WIN
- Q_UNUSED(enabled);
- _setmode(_fileno(stdin), _O_BINARY);
- _setmode(_fileno(stdout), _O_BINARY);
-#else
- if (enabled) {
- m_notifier.reset(new QSocketNotifier(fileno(stdin), QSocketNotifier::Read, this));
- connect(m_notifier.data(), SIGNAL(activated(int)), this, SLOT(newNativeMessage()));
- }
-#endif
-}
-
-void NativeMessagingBase::newNativeMessage()
-{
-#if defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
- struct kevent ev[1];
- struct timespec ts = {5, 0};
-
- int fd = kqueue();
- if (fd == -1) {
- m_notifier->setEnabled(false);
- return;
- }
-
- EV_SET(ev, fileno(stdin), EVFILT_READ, EV_ADD, 0, 0, nullptr);
- if (kevent(fd, ev, 1, nullptr, 0, &ts) == -1) {
- m_notifier->setEnabled(false);
- ::close(fd);
- return;
- }
-
- int ret = kevent(fd, NULL, 0, ev, 1, &ts);
- if (ret < 1) {
- m_notifier->setEnabled(false);
- ::close(fd);
- return;
- }
-#elif defined(Q_OS_LINUX)
- int fd = epoll_create(5);
- struct epoll_event event;
- event.events = EPOLLIN;
- event.data.fd = 0;
- if (epoll_ctl(fd, EPOLL_CTL_ADD, 0, &event) != 0) {
- m_notifier->setEnabled(false);
- ::close(fd);
- return;
- }
-
- if (epoll_wait(fd, &event, 1, 5000) < 1) {
- m_notifier->setEnabled(false);
- ::close(fd);
- return;
- }
-#endif
- readLength();
-#ifndef Q_OS_WIN
- ::close(fd);
-#endif
-}
-
-void NativeMessagingBase::readNativeMessages()
-{
-#ifdef Q_OS_WIN
- quint32 length = 0;
- while (m_running.load() != 0 && !std::cin.eof()) {
- length = 0;
- std::cin.readsome(reinterpret_cast<char*>(&length), 4);
- readStdIn(length);
- QThread::msleep(100);
- }
-#endif
-}
-
-QString NativeMessagingBase::jsonToString(const QJsonObject& json) const
-{
- return QString(QJsonDocument(json).toJson(QJsonDocument::Compact));
-}
-
-void NativeMessagingBase::sendReply(const QJsonObject& json)
-{
- if (!json.isEmpty()) {
- sendReply(jsonToString(json));
- }
-}
-
-void NativeMessagingBase::sendReply(const QString& reply)
-{
- if (!reply.isEmpty()) {
- QByteArray bytes = reply.toUtf8();
- uint len = bytes.size();
- std::cout << char(((len >> 0) & 0xFF)) << char(((len >> 8) & 0xFF)) << char(((len >> 16) & 0xFF))
- << char(((len >> 24) & 0xFF));
- std::cout << reply.toStdString() << std::flush;
- }
-}
-
-QString NativeMessagingBase::getLocalServerPath() const
-{
- const QString serverPath = "/kpxc_server";
-#if defined(KEEPASSXC_DIST_SNAP)
- return QProcessEnvironment::systemEnvironment().value("SNAP_USER_COMMON") + serverPath;
-#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
- // Use XDG_RUNTIME_DIR instead of /tmp if it's available
- QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
- return path.isEmpty() ? QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverPath
- : path + serverPath;
-#else // Q_OS_MACOS, Q_OS_WIN and others
- return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverPath;
-#endif
-}
diff --git a/src/browser/NativeMessagingBase.h b/src/browser/NativeMessagingBase.h
deleted file mode 100644
index b68208c68..000000000
--- a/src/browser/NativeMessagingBase.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NATIVEMESSAGINGBASE_H
-#define NATIVEMESSAGINGBASE_H
-
-#include <QAtomicInt>
-#include <QFuture>
-#include <QJsonDocument>
-#include <QJsonObject>
-#include <QLocalServer>
-#include <QLocalSocket>
-#include <QMutex>
-#include <QObject>
-#include <QSocketNotifier>
-#include <QtConcurrent/QtConcurrent>
-#include <iostream>
-#include <unistd.h>
-
-#ifndef Q_OS_WIN
-#include <sys/socket.h>
-#include <sys/types.h>
-#endif
-
-static const int NATIVE_MSG_MAX_LENGTH = 1024 * 1024;
-
-class NativeMessagingBase : public QObject
-{
- Q_OBJECT
-
-public:
- explicit NativeMessagingBase(const bool enabled);
- ~NativeMessagingBase() = default;
-
-protected slots:
- void newNativeMessage();
-
-protected:
- virtual void readLength() = 0;
- virtual bool readStdIn(const quint32 length) = 0;
- virtual void readNativeMessages();
- QString jsonToString(const QJsonObject& json) const;
- void sendReply(const QJsonObject& json);
- void sendReply(const QString& reply);
- QString getLocalServerPath() const;
-
-protected:
- QAtomicInt m_running;
- QSharedPointer<QSocketNotifier> m_notifier;
- QFuture<void> m_future;
-};
-
-#endif // NATIVEMESSAGINGBASE_H
diff --git a/src/browser/NativeMessagingHost.cpp b/src/browser/NativeMessagingHost.cpp
deleted file mode 100644
index a6c321215..000000000
--- a/src/browser/NativeMessagingHost.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "NativeMessagingHost.h"
-#include "BrowserSettings.h"
-#include "sodium.h"
-#include <QMutexLocker>
-#include <QtNetwork>
-#include <iostream>
-
-#ifdef Q_OS_WIN
-#include <Winsock2.h>
-#endif
-
-NativeMessagingHost::NativeMessagingHost(DatabaseTabWidget* parent, const bool enabled)
- : NativeMessagingBase(enabled)
- , m_mutex(QMutex::Recursive)
- , m_browserService(parent)
- , m_browserClients(m_browserService)
-{
- m_localServer.reset(new QLocalServer(this));
- m_localServer->setSocketOptions(QLocalServer::UserAccessOption);
- m_running.store(0);
-
- if (browserSettings()->isEnabled() && m_running.load() == 0) {
- run();
- }
-
- connect(&m_browserService, SIGNAL(databaseLocked()), this, SLOT(databaseLocked()));
- connect(&m_browserService, SIGNAL(databaseUnlocked()), this, SLOT(databaseUnlocked()));
-}
-
-NativeMessagingHost::~NativeMessagingHost()
-{
- stop();
-}
-
-int NativeMessagingHost::init()
-{
- QMutexLocker locker(&m_mutex);
- return sodium_init();
-}
-
-void NativeMessagingHost::run()
-{
- QMutexLocker locker(&m_mutex);
- if (m_running.load() == 0 && init() == -1) {
- return;
- }
-
- // Update KeePassXC/keepassxc-proxy binary paths to Native Messaging scripts
- if (browserSettings()->updateBinaryPath()) {
- browserSettings()->updateBinaryPaths(
- browserSettings()->useCustomProxy() ? browserSettings()->customProxyLocation() : "");
- }
-
- m_running.store(1);
-#ifdef Q_OS_WIN
- m_future =
- QtConcurrent::run(this, static_cast<void (NativeMessagingHost::*)()>(&NativeMessagingHost::readNativeMessages));
-#endif
-
- if (browserSettings()->supportBrowserProxy()) {
- QString serverPath = getLocalServerPath();
- QFile::remove(serverPath);
-
- // Ensure that STDIN is not being listened when proxy is used
- if (m_notifier && m_notifier->isEnabled()) {
- m_notifier->setEnabled(false);
- }
-
- if (m_localServer->isListening()) {
- m_localServer->close();
- }
-
- m_localServer->listen(serverPath);
- connect(m_localServer.data(), SIGNAL(newConnection()), this, SLOT(newLocalConnection()));
- } else {
- m_localServer->close();
- }
-}
-
-void NativeMessagingHost::stop()
-{
- databaseLocked();
- QMutexLocker locker(&m_mutex);
- m_socketList.clear();
- m_running.testAndSetOrdered(1, 0);
- m_future.waitForFinished();
- m_localServer->close();
-}
-
-void NativeMessagingHost::readLength()
-{
- quint32 length = 0;
- std::cin.read(reinterpret_cast<char*>(&length), 4);
- if (!std::cin.eof() && length > 0) {
- readStdIn(length);
- } else {
- m_notifier->setEnabled(false);
- }
-}
-
-bool NativeMessagingHost::readStdIn(const quint32 length)
-{
- if (length <= 0) {
- return false;
- }
-
- QByteArray arr;
- arr.reserve(length);
-
- QMutexLocker locker(&m_mutex);
-
- for (quint32 i = 0; i < length; ++i) {
- int c = std::getchar();
- if (c == EOF) {
- // message ended prematurely, ignore it and return
- return false;
- }
- arr.append(static_cast<char>(c));
- }
-
- if (arr.length() > 0) {
- sendReply(m_browserClients.readResponse(arr));
- }
- return true;
-}
-
-void NativeMessagingHost::newLocalConnection()
-{
- QLocalSocket* socket = m_localServer->nextPendingConnection();
- if (socket) {
- connect(socket, SIGNAL(readyRead()), this, SLOT(newLocalMessage()));
- connect(socket, SIGNAL(disconnected()), this, SLOT(disconnectSocket()));
- }
-}
-
-void NativeMessagingHost::newLocalMessage()
-{
- QLocalSocket* socket = qobject_cast<QLocalSocket*>(QObject::sender());
- if (!socket || socket->bytesAvailable() <= 0) {
- return;
- }
-
- socket->setReadBufferSize(NATIVE_MSG_MAX_LENGTH);
- int socketDesc = socket->socketDescriptor();
- if (socketDesc) {
- int max = NATIVE_MSG_MAX_LENGTH;
- setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&max), sizeof(max));
- }
-
- QByteArray arr = socket->readAll();
- if (arr.isEmpty()) {
- return;
- }
-
- QMutexLocker locker(&m_mutex);
- if (!m_socketList.contains(socket)) {
- m_socketList.push_back(socket);
- }
-
- QString reply = jsonToString(m_browserClients.readResponse(arr));
- if (socket && socket->isValid() && socket->state() == QLocalSocket::ConnectedState) {
- QByteArray arr = reply.toUtf8();
- socket->write(arr.constData(), arr.length());
- socket->flush();
- }
-}
-
-void NativeMessagingHost::sendReplyToAllClients(const QJsonObject& json)
-{
- QString reply = jsonToString(json);
- QMutexLocker locker(&m_mutex);
- for (const auto socket : m_socketList) {
- if (socket && socket->isValid() && socket->state() == QLocalSocket::ConnectedState) {
- QByteArray arr = reply.toUtf8();
- socket->write(arr.constData(), arr.length());
- socket->flush();
- }
- }
-}
-
-void NativeMessagingHost::disconnectSocket()
-{
- QLocalSocket* socket(qobject_cast<QLocalSocket*>(QObject::sender()));
- QMutexLocker locker(&m_mutex);
- for (auto s : m_socketList) {
- if (s == socket) {
- m_socketList.removeOne(s);
- }
- }
-}
-
-void NativeMessagingHost::databaseLocked()
-{
- QJsonObject response;
- response["action"] = QString("database-locked");
- sendReplyToAllClients(response);
-}
-
-void NativeMessagingHost::databaseUnlocked()
-{
- QJsonObject response;
- response["action"] = QString("database-unlocked");
- sendReplyToAllClients(response);
-}
diff --git a/src/browser/NativeMessagingHost.h b/src/browser/NativeMessagingHost.h
deleted file mode 100644
index 9ce1dab60..000000000
--- a/src/browser/NativeMessagingHost.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NATIVEMESSAGINGHOST_H
-#define NATIVEMESSAGINGHOST_H
-
-#include "BrowserClients.h"
-#include "BrowserService.h"
-#include "NativeMessagingBase.h"
-#include "gui/DatabaseTabWidget.h"
-
-class NativeMessagingHost : public NativeMessagingBase
-{
- Q_OBJECT
-
- typedef QList<QLocalSocket*> SocketList;
-
-public:
- explicit NativeMessagingHost(DatabaseTabWidget* parent = nullptr, const bool enabled = false);
- ~NativeMessagingHost() override;
- int init();
- void run();
- void stop();
-
-signals:
- void quit();
-
-private:
- void readLength() override;
- bool readStdIn(const quint32 length) override;
- void sendReplyToAllClients(const QJsonObject& json);
-
-private slots:
- void databaseLocked();
- void databaseUnlocked();
- void newLocalConnection();
- void newLocalMessage();
- void disconnectSocket();
-
-private:
- QMutex m_mutex;
- BrowserService m_browserService;
- BrowserClients m_browserClients;
- QSharedPointer<QLocalServer> m_localServer;
- SocketList m_socketList;
-};
-
-#endif // NATIVEMESSAGINGHOST_H
diff --git a/src/cli/Add.cpp b/src/cli/Add.cpp
index 8f2fea742..b218df7e2 100644
--- a/src/cli/Add.cpp
+++ b/src/cli/Add.cpp
@@ -69,16 +69,15 @@ Add::Add()
int Add::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream inputTextStream(Utils::STDIN, QIODevice::ReadOnly);
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
auto& entryPath = args.at(1);
// Cannot use those 2 options at the same time!
if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) {
- errorTextStream << QObject::tr("Cannot generate a password and prompt at the same time!") << endl;
+ err << QObject::tr("Cannot generate a password and prompt at the same time!") << endl;
return EXIT_FAILURE;
}
@@ -94,7 +93,7 @@ int Add::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<Q
Entry* entry = database->rootGroup()->addEntryWithPath(entryPath);
if (!entry) {
- errorTextStream << QObject::tr("Could not create entry with path %1.").arg(entryPath) << endl;
+ err << QObject::tr("Could not create entry with path %1.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
@@ -108,9 +107,9 @@ int Add::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<Q
if (parser->isSet(Add::PasswordPromptOption)) {
if (!parser->isSet(Command::QuietOption)) {
- outputTextStream << QObject::tr("Enter password for new entry: ") << flush;
+ out << QObject::tr("Enter password for new entry: ") << flush;
}
- QString password = Utils::getPassword(parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT);
+ QString password = Utils::getPassword(parser->isSet(Command::QuietOption));
entry->setPassword(password);
} else if (parser->isSet(Add::GenerateOption)) {
QString password = passwordGenerator->generatePassword();
@@ -119,12 +118,12 @@ int Add::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<Q
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl;
+ err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
if (!parser->isSet(Command::QuietOption)) {
- outputTextStream << QObject::tr("Successfully added entry %1.").arg(entry->title()) << endl;
+ out << QObject::tr("Successfully added entry %1.").arg(entry->title()) << endl;
}
return EXIT_SUCCESS;
}
diff --git a/src/cli/AddGroup.cpp b/src/cli/AddGroup.cpp
index cd005cc3d..be6bfbf32 100644
--- a/src/cli/AddGroup.cpp
+++ b/src/cli/AddGroup.cpp
@@ -39,8 +39,8 @@ AddGroup::~AddGroup()
int AddGroup::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
const QString& groupPath = args.at(1);
@@ -51,13 +51,13 @@ int AddGroup::executeWithDatabase(QSharedPointer<Database> database, QSharedPoin
Group* group = database->rootGroup()->findGroupByPath(groupPath);
if (group) {
- errorTextStream << QObject::tr("Group %1 already exists!").arg(groupPath) << endl;
+ err << QObject::tr("Group %1 already exists!").arg(groupPath) << endl;
return EXIT_FAILURE;
}
Group* parentGroup = database->rootGroup()->findGroupByPath(parentGroupPath);
if (!parentGroup) {
- errorTextStream << QObject::tr("Group %1 not found.").arg(parentGroupPath) << endl;
+ err << QObject::tr("Group %1 not found.").arg(parentGroupPath) << endl;
return EXIT_FAILURE;
}
@@ -68,12 +68,12 @@ int AddGroup::executeWithDatabase(QSharedPointer<Database> database, QSharedPoin
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl;
+ err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
if (!parser->isSet(Command::QuietOption)) {
- outputTextStream << QObject::tr("Successfully added group %1.").arg(groupName) << endl;
+ out << QObject::tr("Successfully added group %1.").arg(groupName) << endl;
}
return EXIT_SUCCESS;
}
diff --git a/src/cli/Analyze.cpp b/src/cli/Analyze.cpp
index 6095e988b..64eac9e70 100644
--- a/src/cli/Analyze.cpp
+++ b/src/cli/Analyze.cpp
@@ -43,29 +43,27 @@ Analyze::Analyze()
int Analyze::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream inputTextStream(Utils::STDIN, QIODevice::ReadOnly);
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
QString hibpDatabase = parser->value(Analyze::HIBPDatabaseOption);
QFile hibpFile(hibpDatabase);
if (!hibpFile.open(QFile::ReadOnly)) {
- errorTextStream << QObject::tr("Failed to open HIBP file %1: %2").arg(hibpDatabase).arg(hibpFile.errorString())
- << endl;
+ err << QObject::tr("Failed to open HIBP file %1: %2").arg(hibpDatabase).arg(hibpFile.errorString()) << endl;
return EXIT_FAILURE;
}
- outputTextStream << QObject::tr("Evaluating database entries against HIBP file, this will take a while...") << endl;
+ out << QObject::tr("Evaluating database entries against HIBP file, this will take a while...") << endl;
QList<QPair<const Entry*, int>> findings;
QString error;
if (!HibpOffline::report(database, hibpFile, findings, &error)) {
- errorTextStream << error << endl;
+ err << error << endl;
return EXIT_FAILURE;
}
for (auto& finding : findings) {
- printHibpFinding(finding.first, finding.second, outputTextStream);
+ printHibpFinding(finding.first, finding.second, out);
}
return EXIT_SUCCESS;
diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt
index f5c90df8d..f49ef9e9c 100644
--- a/src/cli/CMakeLists.txt
+++ b/src/cli/CMakeLists.txt
@@ -30,6 +30,7 @@ set(cli_SOURCES
Generate.cpp
Help.cpp
Import.cpp
+ Info.cpp
List.cpp
Locate.cpp
Merge.cpp
@@ -51,13 +52,13 @@ endif()
add_executable(keepassxc-cli keepassxc-cli.cpp)
target_link_libraries(keepassxc-cli
+ ${GPGERROR_LIBRARIES}
cli
keepassx_core
Qt5::Core
${GCRYPT_LIBRARIES}
${sodium_LIBRARY_RELEASE}
${ARGON2_LIBRARIES}
- ${GPGERROR_LIBRARIES}
${ZLIB_LIBRARIES}
${ZXCVBN_LIBRARIES})
@@ -117,7 +118,3 @@ if(APPLE AND WITH_APP_BUNDLE)
COMMAND ${CMAKE_COMMAND} -E copy keepassxc-cli ${CLI_APP_DIR}/keepassxc-cli
COMMENT "Copying keepassxc-cli inside the application")
endif()
-
-if(APPLE OR UNIX)
- install(FILES ../../share/docs/man/keepassxc-cli.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
-endif()
diff --git a/src/cli/Clip.cpp b/src/cli/Clip.cpp
index 482ad8a13..1bd5cc4ba 100644
--- a/src/cli/Clip.cpp
+++ b/src/cli/Clip.cpp
@@ -17,7 +17,6 @@
#include <chrono>
#include <cstdlib>
-#include <stdio.h>
#include <thread>
#include "Clip.h"
@@ -28,14 +27,23 @@
#include "core/Entry.h"
#include "core/Group.h"
-const QCommandLineOption Clip::TotpOption = QCommandLineOption(QStringList() << "t"
- << "totp",
- QObject::tr("Copy the current TOTP to the clipboard."));
+const QCommandLineOption Clip::AttributeOption = QCommandLineOption(
+ QStringList() << "a"
+ << "attribute",
+ QObject::tr("Copy the given attribute to the clipboard. Defaults to \"password\" if not specified."),
+ "attr",
+ "password");
+
+const QCommandLineOption Clip::TotpOption =
+ QCommandLineOption(QStringList() << "t"
+ << "totp",
+ QObject::tr("Copy the current TOTP to the clipboard (equivalent to \"-a totp\")."));
Clip::Clip()
{
name = QString("clip");
- description = QObject::tr("Copy an entry's password to the clipboard.");
+ description = QObject::tr("Copy an entry's attribute to the clipboard.");
+ options.append(Clip::AttributeOption);
options.append(Clip::TotpOption);
positionalArguments.append(
{QString("entry"), QObject::tr("Path of the entry to clip.", "clip = copy to clipboard"), QString("")});
@@ -45,41 +53,63 @@ Clip::Clip()
int Clip::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
+
const QStringList args = parser->positionalArguments();
const QString& entryPath = args.at(1);
QString timeout;
if (args.size() == 3) {
timeout = args.at(2);
}
- bool clipTotp = parser->isSet(Clip::TotpOption);
- TextStream errorTextStream(Utils::STDERR);
int timeoutSeconds = 0;
if (!timeout.isEmpty() && timeout.toInt() <= 0) {
- errorTextStream << QObject::tr("Invalid timeout value %1.").arg(timeout) << endl;
+ err << QObject::tr("Invalid timeout value %1.").arg(timeout) << endl;
return EXIT_FAILURE;
} else if (!timeout.isEmpty()) {
timeoutSeconds = timeout.toInt();
}
- TextStream outputTextStream(parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
- QIODevice::WriteOnly);
Entry* entry = database->rootGroup()->findEntryByPath(entryPath);
if (!entry) {
- errorTextStream << QObject::tr("Entry %1 not found.").arg(entryPath) << endl;
+ err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl;
+ return EXIT_FAILURE;
+ }
+
+ if (parser->isSet(AttributeOption) && parser->isSet(TotpOption)) {
+ err << QObject::tr("ERROR: Please specify one of --attribute or --totp, not both.") << endl;
return EXIT_FAILURE;
}
+ QString selectedAttribute = parser->value(AttributeOption);
QString value;
- if (clipTotp) {
+ bool found = false;
+ if (parser->isSet(TotpOption) || selectedAttribute == "totp") {
if (!entry->hasTotp()) {
- errorTextStream << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl;
+ err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
+ found = true;
value = entry->totp();
} else {
- value = entry->password();
+ QStringList attrs = Utils::findAttributes(*entry->attributes(), selectedAttribute);
+ if (attrs.size() > 1) {
+ err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.")
+ .arg(selectedAttribute, QLocale().createSeparatedList(attrs))
+ << endl;
+ return EXIT_FAILURE;
+ } else if (attrs.size() == 1) {
+ found = true;
+ selectedAttribute = attrs[0];
+ value = entry->attributes()->value(selectedAttribute);
+ }
+ }
+
+ if (!found) {
+ out << QObject::tr("Attribute \"%1\" not found.").arg(selectedAttribute) << endl;
+ return EXIT_FAILURE;
}
int exitCode = Utils::clipText(value);
@@ -87,11 +117,7 @@ int Clip::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
return exitCode;
}
- if (clipTotp) {
- outputTextStream << QObject::tr("Entry's current TOTP copied to the clipboard!") << endl;
- } else {
- outputTextStream << QObject::tr("Entry's password copied to the clipboard!") << endl;
- }
+ out << QObject::tr("Entry's \"%1\" attribute copied to the clipboard!").arg(selectedAttribute) << endl;
if (!timeoutSeconds) {
return exitCode;
@@ -99,15 +125,15 @@ int Clip::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
QString lastLine = "";
while (timeoutSeconds > 0) {
- outputTextStream << '\r' << QString(lastLine.size(), ' ') << '\r';
+ out << '\r' << QString(lastLine.size(), ' ') << '\r';
lastLine = QObject::tr("Clearing the clipboard in %1 second(s)...", "", timeoutSeconds).arg(timeoutSeconds);
- outputTextStream << lastLine << flush;
+ out << lastLine << flush;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
--timeoutSeconds;
}
Utils::clipText("");
- outputTextStream << '\r' << QString(lastLine.size(), ' ') << '\r';
- outputTextStream << QObject::tr("Clipboard cleared!") << endl;
+ out << '\r' << QString(lastLine.size(), ' ') << '\r';
+ out << QObject::tr("Clipboard cleared!") << endl;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Clip.h b/src/cli/Clip.h
index b171c8689..291e63295 100644
--- a/src/cli/Clip.h
+++ b/src/cli/Clip.h
@@ -27,6 +27,7 @@ public:
int executeWithDatabase(QSharedPointer<Database> db, QSharedPointer<QCommandLineParser> parser) override;
+ static const QCommandLineOption AttributeOption;
static const QCommandLineOption TotpOption;
};
diff --git a/src/cli/Command.cpp b/src/cli/Command.cpp
index 4d3bf8270..260d9b2b1 100644
--- a/src/cli/Command.cpp
+++ b/src/cli/Command.cpp
@@ -19,6 +19,7 @@
#include <cstdlib>
#include <utility>
+#include <QFileInfo>
#include <QMap>
#include "Command.h"
@@ -37,6 +38,7 @@
#include "Generate.h"
#include "Help.h"
#include "Import.h"
+#include "Info.h"
#include "List.h"
#include "Locate.h"
#include "Merge.h"
@@ -71,8 +73,8 @@ const QCommandLineOption Command::NoPasswordOption =
const QCommandLineOption Command::YubiKeyOption =
QCommandLineOption(QStringList() << "y"
<< "yubikey",
- QObject::tr("Yubikey slot used to encrypt the database."),
- QObject::tr("slot"));
+ QObject::tr("Yubikey slot and optional serial used to access the database (e.g., 1:7370001)."),
+ QObject::tr("slot[:serial]"));
namespace
{
@@ -120,29 +122,37 @@ QString Command::getDescriptionLine()
QString Command::getHelpText()
{
- return buildParser(this)->helpText().replace("[options]", name + " [options]");
+ auto help = buildParser(this)->helpText();
+ // Fix spacing of options parameter
+ help.replace(QStringLiteral("[options]"), name + QStringLiteral(" [options]"));
+ // Remove application directory from command line example
+ auto appname = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
+ auto regex = QRegularExpression(QStringLiteral(" .*%1").arg(QRegularExpression::escape(appname)));
+ help.replace(regex, appname.prepend(" "));
+
+ return help;
}
QSharedPointer<QCommandLineParser> Command::getCommandLineParser(const QStringList& arguments)
{
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& err = Utils::STDERR;
QSharedPointer<QCommandLineParser> parser = buildParser(this);
if (!parser->parse(arguments)) {
- errorTextStream << parser->errorText() << "\n\n";
- errorTextStream << getHelpText();
+ err << parser->errorText() << "\n\n";
+ err << getHelpText();
return {};
}
if (parser->positionalArguments().size() < positionalArguments.size()) {
- errorTextStream << getHelpText();
+ err << getHelpText();
return {};
}
if (parser->positionalArguments().size() > (positionalArguments.size() + optionalArguments.size())) {
- errorTextStream << getHelpText();
+ err << getHelpText();
return {};
}
if (parser->isSet(HelpOption)) {
- errorTextStream << getHelpText();
+ err << getHelpText();
return {};
}
return parser;
@@ -160,7 +170,8 @@ namespace Commands
s_commands.insert(QStringLiteral("analyze"), QSharedPointer<Command>(new Analyze()));
s_commands.insert(QStringLiteral("clip"), QSharedPointer<Command>(new Clip()));
s_commands.insert(QStringLiteral("close"), QSharedPointer<Command>(new Close()));
- s_commands.insert(QStringLiteral("create"), QSharedPointer<Command>(new Create()));
+ s_commands.insert(QStringLiteral("db-create"), QSharedPointer<Command>(new Create()));
+ s_commands.insert(QStringLiteral("db-info"), QSharedPointer<Command>(new Info()));
s_commands.insert(QStringLiteral("diceware"), QSharedPointer<Command>(new Diceware()));
s_commands.insert(QStringLiteral("edit"), QSharedPointer<Command>(new Edit()));
s_commands.insert(QStringLiteral("estimate"), QSharedPointer<Command>(new Estimate()));
diff --git a/src/cli/Create.cpp b/src/cli/Create.cpp
index fbdebaf47..f72c2b7a5 100644
--- a/src/cli/Create.cpp
+++ b/src/cli/Create.cpp
@@ -30,12 +30,31 @@
#include "keys/CompositeKey.h"
#include "keys/Key.h"
+const QCommandLineOption Create::DecryptionTimeOption =
+ QCommandLineOption(QStringList() << "t"
+ << "decryption-time",
+ QObject::tr("Target decryption time in MS for the database."),
+ QObject::tr("time"));
+
+const QCommandLineOption Create::SetKeyFileOption =
+ QCommandLineOption(QStringList() << "k"
+ << "set-key-file",
+ QObject::tr("Set the key file for the database."),
+ QObject::tr("path"));
+
+const QCommandLineOption Create::SetPasswordOption =
+ QCommandLineOption(QStringList() << "p"
+ << "set-password",
+ QObject::tr("Set a password for the database."));
+
Create::Create()
{
- name = QString("create");
+ name = QString("db-create");
description = QObject::tr("Create a new database.");
positionalArguments.append({QString("database"), QObject::tr("Path of the database."), QString("")});
- options.append(Command::KeyFileOption);
+ options.append(Create::SetKeyFileOption);
+ options.append(Create::SetPasswordOption);
+ options.append(Create::DecryptionTimeOption);
}
/**
@@ -53,14 +72,14 @@ Create::Create()
*/
int Create::execute(const QStringList& arguments)
{
- QTextStream out(Utils::STDOUT, QIODevice::WriteOnly);
- QTextStream err(Utils::STDERR, QIODevice::WriteOnly);
-
QSharedPointer<QCommandLineParser> parser = getCommandLineParser(arguments);
if (parser.isNull()) {
return EXIT_FAILURE;
}
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
+
const QStringList args = parser->positionalArguments();
const QString& databaseFilename = args.at(0);
@@ -69,23 +88,45 @@ int Create::execute(const QStringList& arguments)
return EXIT_FAILURE;
}
+ // Validate the decryption time before asking for a password.
+ QString decryptionTimeValue = parser->value(Create::DecryptionTimeOption);
+ int decryptionTime = 0;
+ if (decryptionTimeValue.length() != 0) {
+ decryptionTime = decryptionTimeValue.toInt();
+ if (decryptionTime <= 0) {
+ err << QObject::tr("Invalid decryption time %1.").arg(decryptionTimeValue) << endl;
+ return EXIT_FAILURE;
+ }
+ if (decryptionTime < Kdf::MIN_ENCRYPTION_TIME || decryptionTime > Kdf::MAX_ENCRYPTION_TIME) {
+ err << QObject::tr("Target decryption time must be between %1 and %2.")
+ .arg(QString::number(Kdf::MIN_ENCRYPTION_TIME), QString::number(Kdf::MAX_ENCRYPTION_TIME))
+ << endl;
+ return EXIT_FAILURE;
+ }
+ }
+
auto key = QSharedPointer<CompositeKey>::create();
- auto password = Utils::getPasswordFromStdin();
- if (!password.isNull()) {
- key->addKey(password);
+ if (parser->isSet(Create::SetPasswordOption)) {
+ auto passwordKey = Utils::getConfirmedPassword();
+ if (passwordKey.isNull()) {
+ err << QObject::tr("Failed to set database password.") << endl;
+ return EXIT_FAILURE;
+ }
+ key->addKey(passwordKey);
}
- QSharedPointer<FileKey> fileKey;
- if (parser->isSet(Command::KeyFileOption)) {
- if (!loadFileKey(parser->value(Command::KeyFileOption), fileKey)) {
+ if (parser->isSet(Create::SetKeyFileOption)) {
+ QSharedPointer<FileKey> fileKey;
+
+ if (!loadFileKey(parser->value(Create::SetKeyFileOption), fileKey)) {
err << QObject::tr("Loading the key file failed") << endl;
return EXIT_FAILURE;
}
- }
- if (!fileKey.isNull()) {
- key->addKey(fileKey);
+ if (!fileKey.isNull()) {
+ key->addKey(fileKey);
+ }
}
if (key->isEmpty()) {
@@ -96,6 +137,23 @@ int Create::execute(const QStringList& arguments)
QSharedPointer<Database> db(new Database);
db->setKey(key);
+ if (decryptionTime != 0) {
+ auto kdf = db->kdf();
+ Q_ASSERT(kdf);
+
+ out << QObject::tr("Benchmarking key derivation function for %1ms delay.").arg(decryptionTimeValue) << endl;
+ int rounds = kdf->benchmark(decryptionTime);
+ out << QObject::tr("Setting %1 rounds for key derivation function.").arg(QString::number(rounds)) << endl;
+ kdf->setRounds(rounds);
+
+ bool ok = db->changeKdf(kdf);
+
+ if (!ok) {
+ err << QObject::tr("error while setting database key derivation settings.") << endl;
+ return EXIT_FAILURE;
+ }
+ }
+
QString errorMessage;
if (!db->saveAs(databaseFilename, &errorMessage, true, false)) {
err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl;
@@ -120,8 +178,7 @@ int Create::execute(const QStringList& arguments)
*/
bool Create::loadFileKey(const QString& path, QSharedPointer<FileKey>& fileKey)
{
- QTextStream err(Utils::STDERR, QIODevice::WriteOnly);
-
+ auto& err = Utils::STDERR;
QString error;
fileKey = QSharedPointer<FileKey>(new FileKey());
diff --git a/src/cli/Create.h b/src/cli/Create.h
index 1c5696a6e..0eb36fd55 100644
--- a/src/cli/Create.h
+++ b/src/cli/Create.h
@@ -28,6 +28,10 @@ public:
Create();
int execute(const QStringList& arguments) override;
+ static const QCommandLineOption SetKeyFileOption;
+ static const QCommandLineOption SetPasswordOption;
+ static const QCommandLineOption DecryptionTimeOption;
+
private:
bool loadFileKey(const QString& path, QSharedPointer<FileKey>& fileKey);
};
diff --git a/src/cli/DatabaseCommand.cpp b/src/cli/DatabaseCommand.cpp
index 56e565baa..08104c120 100644
--- a/src/cli/DatabaseCommand.cpp
+++ b/src/cli/DatabaseCommand.cpp
@@ -57,8 +57,7 @@ int DatabaseCommand::execute(const QStringList& arguments)
#else
"",
#endif
- parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
- Utils::STDERR);
+ parser->isSet(Command::QuietOption));
if (!db) {
return EXIT_FAILURE;
}
diff --git a/src/cli/Diceware.cpp b/src/cli/Diceware.cpp
index ef1e10a80..d0deb9072 100644
--- a/src/cli/Diceware.cpp
+++ b/src/cli/Diceware.cpp
@@ -51,8 +51,8 @@ int Diceware::execute(const QStringList& arguments)
return EXIT_FAILURE;
}
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
PassphraseGenerator dicewareGenerator;
@@ -60,7 +60,7 @@ int Diceware::execute(const QStringList& arguments)
if (wordCount.isEmpty()) {
dicewareGenerator.setWordCount(PassphraseGenerator::DefaultWordCount);
} else if (wordCount.toInt() <= 0) {
- errorTextStream << QObject::tr("Invalid word count %1").arg(wordCount) << endl;
+ err << QObject::tr("Invalid word count %1").arg(wordCount) << endl;
return EXIT_FAILURE;
} else {
dicewareGenerator.setWordCount(wordCount.toInt());
@@ -74,12 +74,12 @@ int Diceware::execute(const QStringList& arguments)
if (!dicewareGenerator.isValid()) {
// We already validated the word count input so if the generator is invalid, it
// must be because the word list is too small.
- errorTextStream << QObject::tr("The word list is too small (< 1000 items)") << endl;
+ err << QObject::tr("The word list is too small (< 1000 items)") << endl;
return EXIT_FAILURE;
}
QString password = dicewareGenerator.generatePassphrase();
- outputTextStream << password << endl;
+ out << password << endl;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Edit.cpp b/src/cli/Edit.cpp
index 30dccf15e..6fd1b0369 100644
--- a/src/cli/Edit.cpp
+++ b/src/cli/Edit.cpp
@@ -60,16 +60,15 @@ Edit::Edit()
int Edit::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
- QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
const QString& entryPath = args.at(1);
// Cannot use those 2 options at the same time!
if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) {
- errorTextStream << QObject::tr("Cannot generate a password and prompt at the same time!") << endl;
+ err << QObject::tr("Cannot generate a password and prompt at the same time!") << endl;
return EXIT_FAILURE;
}
@@ -86,7 +85,7 @@ int Edit::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
Entry* entry = database->rootGroup()->findEntryByPath(entryPath);
if (!entry) {
- errorTextStream << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl;
+ err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
@@ -95,7 +94,7 @@ int Edit::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
QString title = parser->value(Edit::TitleOption);
bool prompt = parser->isSet(Add::PasswordPromptOption);
if (username.isEmpty() && url.isEmpty() && title.isEmpty() && !prompt && !generate) {
- errorTextStream << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << endl;
+ err << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
@@ -114,8 +113,8 @@ int Edit::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
}
if (prompt) {
- outputTextStream << QObject::tr("Enter new password for entry: ") << flush;
- QString password = Utils::getPassword(parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT);
+ out << QObject::tr("Enter new password for entry: ") << flush;
+ QString password = Utils::getPassword(parser->isSet(Command::QuietOption));
entry->setPassword(password);
} else if (generate) {
QString password = passwordGenerator->generatePassword();
@@ -126,10 +125,10 @@ int Edit::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl;
+ err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
- outputTextStream << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << endl;
+ out << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << endl;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Estimate.cpp b/src/cli/Estimate.cpp
index a84e23963..5576e2362 100644
--- a/src/cli/Estimate.cpp
+++ b/src/cli/Estimate.cpp
@@ -19,6 +19,7 @@
#include "cli/Utils.h"
#include "cli/TextStream.h"
+#include "core/PasswordHealth.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -47,12 +48,11 @@ Estimate::Estimate()
static void estimate(const char* pwd, bool advanced)
{
- TextStream out(Utils::STDOUT, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
- double e = 0.0;
int len = static_cast<int>(strlen(pwd));
if (!advanced) {
- e = ZxcvbnMatch(pwd, nullptr, nullptr);
+ const auto e = PasswordHealth(pwd).entropy();
// clang-format off
out << QObject::tr("Length %1").arg(len, 0) << '\t'
<< QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t'
@@ -62,7 +62,7 @@ static void estimate(const char* pwd, bool advanced)
int ChkLen = 0;
ZxcMatch_t *info, *p;
double m = 0.0;
- e = ZxcvbnMatch(pwd, nullptr, &info);
+ const auto e = ZxcvbnMatch(pwd, nullptr, &info);
for (p = info; p; p = p->Next) {
m += p->Entrpy;
}
@@ -163,14 +163,14 @@ int Estimate::execute(const QStringList& arguments)
return EXIT_FAILURE;
}
- TextStream inputTextStream(Utils::STDIN, QIODevice::ReadOnly);
+ auto& in = Utils::STDIN;
const QStringList args = parser->positionalArguments();
QString password;
if (args.size() == 1) {
password = args.at(0);
} else {
- password = inputTextStream.readLine();
+ password = in.readLine();
}
estimate(password.toLatin1(), parser->isSet(Estimate::AdvancedOption));
diff --git a/src/cli/Export.cpp b/src/cli/Export.cpp
index 8f63323d7..930324daa 100644
--- a/src/cli/Export.cpp
+++ b/src/cli/Export.cpp
@@ -25,11 +25,11 @@
#include "core/Database.h"
#include "format/CsvExporter.h"
-const QCommandLineOption Export::FormatOption =
- QCommandLineOption(QStringList() << "f"
- << "format",
- QObject::tr("Format to use when exporting. Available choices are xml or csv. Defaults to xml."),
- QStringLiteral("xml|csv"));
+const QCommandLineOption Export::FormatOption = QCommandLineOption(
+ QStringList() << "f"
+ << "format",
+ QObject::tr("Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'."),
+ QStringLiteral("xml|csv"));
Export::Export()
{
@@ -40,23 +40,23 @@ Export::Export()
int Export::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ TextStream out(Utils::STDOUT.device());
+ auto& err = Utils::STDERR;
QString format = parser->value(Export::FormatOption);
- if (format.isEmpty() || format == QStringLiteral("xml")) {
+ if (format.isEmpty() || format.startsWith(QStringLiteral("xml"), Qt::CaseInsensitive)) {
QByteArray xmlData;
QString errorMessage;
if (!database->extract(xmlData, &errorMessage)) {
- errorTextStream << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << endl;
+ err << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
- outputTextStream << xmlData.constData() << endl;
- } else if (format == QStringLiteral("csv")) {
+ out.write(xmlData.constData());
+ } else if (format.startsWith(QStringLiteral("csv"), Qt::CaseInsensitive)) {
CsvExporter csvExporter;
- outputTextStream << csvExporter.exportDatabase(database);
+ out << csvExporter.exportDatabase(database);
} else {
- errorTextStream << QObject::tr("Unsupported format %1").arg(format) << endl;
+ err << QObject::tr("Unsupported format %1").arg(format) << endl;
return EXIT_FAILURE;
}
diff --git a/src/cli/Generate.cpp b/src/cli/Generate.cpp
index dc4add242..c4761e6f2 100644
--- a/src/cli/Generate.cpp
+++ b/src/cli/Generate.cpp
@@ -80,13 +80,13 @@ Generate::Generate()
*/
QSharedPointer<PasswordGenerator> Generate::createGenerator(QSharedPointer<QCommandLineParser> parser)
{
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& err = Utils::STDERR;
QSharedPointer<PasswordGenerator> passwordGenerator = QSharedPointer<PasswordGenerator>(new PasswordGenerator());
QString passwordLength = parser->value(Generate::PasswordLengthOption);
if (passwordLength.isEmpty()) {
passwordGenerator->setLength(PasswordGenerator::DefaultLength);
} else if (passwordLength.toInt() <= 0) {
- errorTextStream << QObject::tr("Invalid password length %1").arg(passwordLength) << endl;
+ err << QObject::tr("Invalid password length %1").arg(passwordLength) << endl;
return QSharedPointer<PasswordGenerator>(nullptr);
} else {
passwordGenerator->setLength(passwordLength.toInt());
@@ -126,7 +126,7 @@ QSharedPointer<PasswordGenerator> Generate::createGenerator(QSharedPointer<QComm
passwordGenerator->setExcludedChars(parser->value(Generate::ExcludeCharsOption));
if (!passwordGenerator->isValid()) {
- errorTextStream << QObject::tr("Invalid password generator after applying all options") << endl;
+ err << QObject::tr("Invalid password generator after applying all options") << endl;
return QSharedPointer<PasswordGenerator>(nullptr);
}
@@ -145,9 +145,9 @@ int Generate::execute(const QStringList& arguments)
return EXIT_FAILURE;
}
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
QString password = passwordGenerator->generatePassword();
- outputTextStream << password << endl;
+ out << password << endl;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Help.cpp b/src/cli/Help.cpp
index 193f55dd7..07a3f085f 100644
--- a/src/cli/Help.cpp
+++ b/src/cli/Help.cpp
@@ -29,7 +29,7 @@ Help::Help()
int Help::execute(const QStringList& arguments)
{
- TextStream out(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
QSharedPointer<Command> command;
if (arguments.size() > 1 && (command = Commands::getCommand(arguments.at(1)))) {
out << command->getHelpText();
@@ -39,5 +39,6 @@ int Help::execute(const QStringList& arguments)
out << cmd->getDescriptionLine();
}
}
+ out.flush();
return EXIT_SUCCESS;
}
diff --git a/src/cli/Import.cpp b/src/cli/Import.cpp
index 0907f00ab..930158988 100644
--- a/src/cli/Import.cpp
+++ b/src/cli/Import.cpp
@@ -55,28 +55,29 @@ int Import::execute(const QStringList& arguments)
return EXIT_FAILURE;
}
- TextStream outputTextStream(parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
- QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
const QString& xmlExportPath = args.at(0);
const QString& dbPath = args.at(1);
if (QFileInfo::exists(dbPath)) {
- errorTextStream << QObject::tr("File %1 already exists.").arg(dbPath) << endl;
+ err << QObject::tr("File %1 already exists.").arg(dbPath) << endl;
return EXIT_FAILURE;
}
auto key = QSharedPointer<CompositeKey>::create();
- auto password = Utils::getPasswordFromStdin();
- if (!password.isNull()) {
- key->addKey(password);
+ auto passwordKey = Utils::getConfirmedPassword();
+ if (passwordKey.isNull()) {
+ err << QObject::tr("Failed to set database password.") << endl;
+ return EXIT_FAILURE;
}
+ key->addKey(passwordKey);
if (key->isEmpty()) {
- errorTextStream << QObject::tr("No key is set. Aborting database creation.") << endl;
+ err << QObject::tr("No key is set. Aborting database creation.") << endl;
return EXIT_FAILURE;
}
@@ -86,15 +87,15 @@ int Import::execute(const QStringList& arguments)
db.setKey(key);
if (!db.import(xmlExportPath, &errorMessage)) {
- errorTextStream << QObject::tr("Unable to import XML database export %1").arg(errorMessage) << endl;
+ err << QObject::tr("Unable to import XML database: %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
if (!db.saveAs(dbPath, &errorMessage, true, false)) {
- errorTextStream << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl;
+ err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
- outputTextStream << QObject::tr("Successfully imported database.") << endl;
+ out << QObject::tr("Successfully imported database.") << endl;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Info.cpp b/src/cli/Info.cpp
new file mode 100644
index 000000000..c57472770
--- /dev/null
+++ b/src/cli/Info.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <cstdlib>
+#include <stdio.h>
+
+#include "Info.h"
+#include "Utils.h"
+
+#include "core/Database.h"
+#include "core/Global.h"
+#include "core/Metadata.h"
+#include "format/KeePass2.h"
+
+Info::Info()
+{
+ name = QString("db-show");
+ description = QObject::tr("Show a database's information.");
+}
+
+int Info::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser>)
+{
+ auto& out = Utils::STDOUT;
+
+ out << QObject::tr("UUID: ") << database->uuid().toString() << endl;
+ out << QObject::tr("Name: ") << database->metadata()->name() << endl;
+ out << QObject::tr("Description: ") << database->metadata()->description() << endl;
+ for (auto& cipher : asConst(KeePass2::CIPHERS)) {
+ if (cipher.first == database->cipher()) {
+ out << QObject::tr("Cipher: ") << cipher.second << endl;
+ }
+ }
+ out << QObject::tr("KDF: ") << database->kdf()->toString() << endl;
+ if (database->metadata()->recycleBinEnabled()) {
+ out << QObject::tr("Recycle bin is enabled.") << endl;
+ } else {
+ out << QObject::tr("Recycle bin is not enabled.") << endl;
+ }
+ return EXIT_SUCCESS;
+}
diff --git a/src/cli/Info.h b/src/cli/Info.h
new file mode 100644
index 000000000..1961a7b5f
--- /dev/null
+++ b/src/cli/Info.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_INFO_H
+#define KEEPASSXC_INFO_H
+
+#include "DatabaseCommand.h"
+
+class Info : public DatabaseCommand
+{
+public:
+ Info();
+
+ int executeWithDatabase(QSharedPointer<Database> db, QSharedPointer<QCommandLineParser> parser);
+};
+
+#endif // KEEPASSXC_INFO_H
diff --git a/src/cli/List.cpp b/src/cli/List.cpp
index d068cdf53..ba00a7162 100644
--- a/src/cli/List.cpp
+++ b/src/cli/List.cpp
@@ -47,8 +47,8 @@ List::List()
int List::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
bool recursive = parser->isSet(List::RecursiveOption);
@@ -56,17 +56,17 @@ int List::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
// No group provided, defaulting to root group.
if (args.size() == 1) {
- outputTextStream << database->rootGroup()->print(recursive, flatten) << flush;
+ out << database->rootGroup()->print(recursive, flatten) << flush;
return EXIT_SUCCESS;
}
const QString& groupPath = args.at(1);
Group* group = database->rootGroup()->findGroupByPath(groupPath);
if (!group) {
- errorTextStream << QObject::tr("Cannot find group %1.").arg(groupPath) << endl;
+ err << QObject::tr("Cannot find group %1.").arg(groupPath) << endl;
return EXIT_FAILURE;
}
- outputTextStream << group->print(recursive, flatten) << flush;
+ out << group->print(recursive, flatten) << flush;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Locate.cpp b/src/cli/Locate.cpp
index 9b574852d..a7a1e06f2 100644
--- a/src/cli/Locate.cpp
+++ b/src/cli/Locate.cpp
@@ -38,20 +38,20 @@ Locate::Locate()
int Locate::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
const QString& searchTerm = args.at(1);
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
QStringList results = database->rootGroup()->locate(searchTerm);
if (results.isEmpty()) {
- errorTextStream << "No results for that search term." << endl;
+ err << "No results for that search term." << endl;
return EXIT_FAILURE;
}
for (const QString& result : asConst(results)) {
- outputTextStream << result << endl;
+ out << result << endl;
}
return EXIT_SUCCESS;
}
diff --git a/src/cli/Merge.cpp b/src/cli/Merge.cpp
index 5855eff46..ce7ecc558 100644
--- a/src/cli/Merge.cpp
+++ b/src/cli/Merge.cpp
@@ -61,9 +61,8 @@ Merge::Merge()
int Merge::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
- QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
@@ -76,8 +75,7 @@ int Merge::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer
!parser->isSet(Merge::NoPasswordFromOption),
parser->value(Merge::KeyFileFromOption),
parser->value(Merge::YubiKeyFromOption),
- parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
- Utils::STDERR);
+ parser->isSet(Command::QuietOption));
if (!db2) {
return EXIT_FAILURE;
}
@@ -85,7 +83,7 @@ int Merge::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer
db2 = QSharedPointer<Database>::create();
QString errorMessage;
if (!db2->open(fromDatabasePath, database->key(), &errorMessage, false)) {
- errorTextStream << QObject::tr("Error reading merge file:\n%1").arg(errorMessage);
+ err << QObject::tr("Error reading merge file:\n%1").arg(errorMessage);
return EXIT_FAILURE;
}
}
@@ -94,19 +92,18 @@ int Merge::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer
QStringList changeList = merger.merge();
for (auto& mergeChange : changeList) {
- outputTextStream << "\t" << mergeChange << endl;
+ out << "\t" << mergeChange << endl;
}
if (!changeList.isEmpty() && !parser->isSet(Merge::DryRunOption)) {
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << endl;
+ err << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
- outputTextStream << QObject::tr("Successfully merged %1 into %2.").arg(fromDatabasePath, toDatabasePath)
- << endl;
+ out << QObject::tr("Successfully merged %1 into %2.").arg(fromDatabasePath, toDatabasePath) << endl;
} else {
- outputTextStream << QObject::tr("Database was not modified by merge operation.") << endl;
+ out << QObject::tr("Database was not modified by merge operation.") << endl;
}
return EXIT_SUCCESS;
diff --git a/src/cli/Move.cpp b/src/cli/Move.cpp
index 7a18383ed..74070372d 100644
--- a/src/cli/Move.cpp
+++ b/src/cli/Move.cpp
@@ -40,8 +40,8 @@ Move::~Move()
int Move::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
const QString& entryPath = args.at(1);
@@ -49,18 +49,18 @@ int Move::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
Entry* entry = database->rootGroup()->findEntryByPath(entryPath);
if (!entry) {
- errorTextStream << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl;
+ err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
Group* destinationGroup = database->rootGroup()->findGroupByPath(destinationPath);
if (!destinationGroup) {
- errorTextStream << QObject::tr("Could not find group with path %1.").arg(destinationPath) << endl;
+ err << QObject::tr("Could not find group with path %1.").arg(destinationPath) << endl;
return EXIT_FAILURE;
}
if (destinationGroup == entry->parent()) {
- errorTextStream << QObject::tr("Entry is already in group %1.").arg(destinationPath) << endl;
+ err << QObject::tr("Entry is already in group %1.").arg(destinationPath) << endl;
return EXIT_FAILURE;
}
@@ -70,11 +70,10 @@ int Move::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl;
+ err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
- outputTextStream << QObject::tr("Successfully moved entry %1 to group %2.").arg(entry->title(), destinationPath)
- << endl;
+ out << QObject::tr("Successfully moved entry %1 to group %2.").arg(entry->title(), destinationPath) << endl;
return EXIT_SUCCESS;
}
diff --git a/src/cli/Remove.cpp b/src/cli/Remove.cpp
index e0dc0d58a..6a3a87b00 100644
--- a/src/cli/Remove.cpp
+++ b/src/cli/Remove.cpp
@@ -37,15 +37,13 @@ Remove::Remove()
int Remove::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- bool quiet = parser->isSet(Command::QuietOption);
- auto& entryPath = parser->positionalArguments().at(1);
-
- TextStream outputTextStream(quiet ? Utils::DEVNULL : Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
+ auto& entryPath = parser->positionalArguments().at(1);
QPointer<Entry> entry = database->rootGroup()->findEntryByPath(entryPath);
if (!entry) {
- errorTextStream << QObject::tr("Entry %1 not found.").arg(entryPath) << endl;
+ err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
@@ -61,14 +59,14 @@ int Remove::executeWithDatabase(QSharedPointer<Database> database, QSharedPointe
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl;
+ err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
if (recycled) {
- outputTextStream << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << endl;
+ out << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << endl;
} else {
- outputTextStream << QObject::tr("Successfully deleted entry %1.").arg(entryTitle) << endl;
+ out << QObject::tr("Successfully deleted entry %1.").arg(entryTitle) << endl;
}
return EXIT_SUCCESS;
diff --git a/src/cli/RemoveGroup.cpp b/src/cli/RemoveGroup.cpp
index b65ae1974..5ebac16f9 100644
--- a/src/cli/RemoveGroup.cpp
+++ b/src/cli/RemoveGroup.cpp
@@ -41,21 +41,20 @@ RemoveGroup::~RemoveGroup()
int RemoveGroup::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- bool quiet = parser->isSet(Command::QuietOption);
- QString groupPath = parser->positionalArguments().at(1);
+ auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT;
+ auto& err = Utils::STDERR;
- TextStream outputTextStream(quiet ? Utils::DEVNULL : Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ QString groupPath = parser->positionalArguments().at(1);
// Recursive option means were looking for a group to remove.
QPointer<Group> group = database->rootGroup()->findGroupByPath(groupPath);
if (!group) {
- errorTextStream << QObject::tr("Group %1 not found.").arg(groupPath) << endl;
+ err << QObject::tr("Group %1 not found.").arg(groupPath) << endl;
return EXIT_FAILURE;
}
if (group == database->rootGroup()) {
- errorTextStream << QObject::tr("Cannot remove root group from database.") << endl;
+ err << QObject::tr("Cannot remove root group from database.") << endl;
return EXIT_FAILURE;
}
@@ -70,14 +69,14 @@ int RemoveGroup::executeWithDatabase(QSharedPointer<Database> database, QSharedP
QString errorMessage;
if (!database->save(&errorMessage, true, false)) {
- errorTextStream << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl;
+ err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
if (recycled) {
- outputTextStream << QObject::tr("Successfully recycled group %1.").arg(groupPath) << endl;
+ out << QObject::tr("Successfully recycled group %1.").arg(groupPath) << endl;
} else {
- outputTextStream << QObject::tr("Successfully deleted group %1.").arg(groupPath) << endl;
+ out << QObject::tr("Successfully deleted group %1.").arg(groupPath) << endl;
}
return EXIT_SUCCESS;
diff --git a/src/cli/Show.cpp b/src/cli/Show.cpp
index 646d5d90d..02ec4677e 100644
--- a/src/cli/Show.cpp
+++ b/src/cli/Show.cpp
@@ -27,6 +27,8 @@
#include "core/Global.h"
#include "core/Group.h"
+#include <QLocale>
+
const QCommandLineOption Show::TotpOption = QCommandLineOption(QStringList() << "t"
<< "totp",
QObject::tr("Show the entry's current TOTP."));
@@ -57,8 +59,8 @@ Show::Show()
int Show::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<QCommandLineParser> parser)
{
- TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly);
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
const QStringList args = parser->positionalArguments();
const QString& entryPath = args.at(1);
@@ -68,45 +70,50 @@ int Show::executeWithDatabase(QSharedPointer<Database> database, QSharedPointer<
Entry* entry = database->rootGroup()->findEntryByPath(entryPath);
if (!entry) {
- errorTextStream << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl;
+ err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
if (showTotp && !entry->hasTotp()) {
- errorTextStream << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl;
+ err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl;
return EXIT_FAILURE;
}
// If no attributes specified, output the default attribute set.
- bool showAttributeNames = attributes.isEmpty() && !showTotp;
- if (attributes.isEmpty() && !showTotp) {
+ bool showDefaultAttributes = attributes.isEmpty() && !showTotp;
+ if (showDefaultAttributes) {
attributes = EntryAttributes::DefaultAttributes;
}
// Iterate over the attributes and output them line-by-line.
- bool sawUnknownAttribute = false;
+ bool encounteredError = false;
for (const QString& attributeName : asConst(attributes)) {
- if (!entry->attributes()->contains(attributeName)) {
- sawUnknownAttribute = true;
- errorTextStream << QObject::tr("ERROR: unknown attribute %1.").arg(attributeName) << endl;
+ QStringList attrs = Utils::findAttributes(*entry->attributes(), attributeName);
+ if (attrs.isEmpty()) {
+ encounteredError = true;
+ err << QObject::tr("ERROR: unknown attribute %1.").arg(attributeName) << endl;
+ continue;
+ } else if (attrs.size() > 1) {
+ encounteredError = true;
+ err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.")
+ .arg(attributeName, QLocale().createSeparatedList(attrs))
+ << endl;
continue;
}
- if (showAttributeNames) {
- outputTextStream << attributeName << ": ";
+ QString canonicalName = attrs[0];
+ if (showDefaultAttributes) {
+ out << canonicalName << ": ";
}
- if (entry->attributes()->isProtected(attributeName) && showAttributeNames && !showProtectedAttributes) {
- outputTextStream << "PROTECTED" << endl;
+ if (entry->attributes()->isProtected(canonicalName) && showDefaultAttributes && !showProtectedAttributes) {
+ out << "PROTECTED" << endl;
} else {
- outputTextStream << entry->resolveMultiplePlaceholders(entry->attributes()->value(attributeName)) << endl;
+ out << entry->resolveMultiplePlaceholders(entry->attributes()->value(canonicalName)) << endl;
}
}
if (showTotp) {
- if (showAttributeNames) {
- outputTextStream << "TOTP: ";
- }
- outputTextStream << entry->totp() << endl;
+ out << entry->totp() << endl;
}
- return sawUnknownAttribute ? EXIT_FAILURE : EXIT_SUCCESS;
+ return encounteredError ? EXIT_FAILURE : EXIT_SUCCESS;
}
diff --git a/src/cli/TextStream.cpp b/src/cli/TextStream.cpp
index 938fd6292..5757f90e9 100644
--- a/src/cli/TextStream.cpp
+++ b/src/cli/TextStream.cpp
@@ -58,6 +58,15 @@ TextStream::TextStream(const QByteArray& array, QIODevice::OpenMode openMode)
detectCodec();
}
+void TextStream::write(const char* str)
+{
+ // Workaround for an issue with QTextStream. Its operator<<(const char *string) will encode the
+ // string with a non-UTF-8 encoding. We work around this by wrapping the input string into
+ // a QString, thus enforcing UTF-8. More info:
+ // https://code.qt.io/cgit/qt/qtbase.git/commit?id=cec8cdba4d1b856e17c8743ba8803349d42dc701
+ *this << QString(str);
+}
+
void TextStream::detectCodec()
{
QString codecName = "UTF-8";
diff --git a/src/cli/TextStream.h b/src/cli/TextStream.h
index 2dc116352..0091ec108 100644
--- a/src/cli/TextStream.h
+++ b/src/cli/TextStream.h
@@ -43,6 +43,8 @@ public:
explicit TextStream(QByteArray* array, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
explicit TextStream(const QByteArray& array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
+ void write(const char* str);
+
private:
void detectCodec();
};
diff --git a/src/cli/Utils.cpp b/src/cli/Utils.cpp
index 9988b60f9..e25ffe02d 100644
--- a/src/cli/Utils.cpp
+++ b/src/cli/Utils.cpp
@@ -17,6 +17,10 @@
#include "Utils.h"
+#ifdef WITH_XC_YUBIKEY
+#include "keys/YkChallengeResponseKeyCLI.h"
+#endif
+
#ifdef Q_OS_WIN
#include <windows.h>
#else
@@ -30,29 +34,33 @@
namespace Utils
{
- /**
- * STDOUT file handle for the CLI.
- */
- FILE* STDOUT = stdout;
+ QTextStream STDOUT;
+ QTextStream STDERR;
+ QTextStream STDIN;
+ QTextStream DEVNULL;
- /**
- * STDERR file handle for the CLI.
- */
- FILE* STDERR = stderr;
+ void setDefaultTextStreams()
+ {
+ auto fd = new QFile();
+ fd->open(stdout, QIODevice::WriteOnly);
+ STDOUT.setDevice(fd);
- /**
- * STDIN file handle for the CLI.
- */
- FILE* STDIN = stdin;
+ fd = new QFile();
+ fd->open(stderr, QIODevice::WriteOnly);
+ STDERR.setDevice(fd);
-/**
- * DEVNULL file handle for the CLI.
- */
+ fd = new QFile();
+ fd->open(stdin, QIODevice::ReadOnly);
+ STDIN.setDevice(fd);
+
+ fd = new QFile();
#ifdef Q_OS_WIN
- FILE* DEVNULL = fopen("nul", "w");
+ fd->open(fopen("nul", "w"), QIODevice::WriteOnly);
#else
- FILE* DEVNULL = fopen("/dev/null", "w");
+ fd->open(fopen("/dev/null", "w"), QIODevice::WriteOnly);
#endif
+ DEVNULL.setDevice(fd);
+ }
void setStdinEcho(bool enable = true)
{
@@ -82,33 +90,14 @@ namespace Utils
#endif
}
- namespace Test
- {
- QStringList nextPasswords = {};
-
- /**
- * Set the next password returned by \link getPassword() instead of reading it from STDIN.
- * Multiple calls to this method will fill a queue of passwords.
- * This function is intended for testing purposes.
- *
- * @param password password to return next
- */
- void setNextPassword(const QString& password)
- {
- nextPasswords.append(password);
- }
- } // namespace Test
-
QSharedPointer<Database> unlockDatabase(const QString& databaseFilename,
const bool isPasswordProtected,
const QString& keyFilename,
const QString& yubiKeySlot,
- FILE* outputDescriptor,
- FILE* errorDescriptor)
+ bool quiet)
{
+ auto& err = quiet ? DEVNULL : STDERR;
auto compositeKey = QSharedPointer<CompositeKey>::create();
- TextStream out(outputDescriptor);
- TextStream err(errorDescriptor);
QFileInfo dbFileInfo(databaseFilename);
if (dbFileInfo.canonicalFilePath().isEmpty()) {
@@ -127,8 +116,8 @@ namespace Utils
}
if (isPasswordProtected) {
- out << QObject::tr("Enter password to unlock %1: ").arg(databaseFilename) << flush;
- QString line = Utils::getPassword(outputDescriptor);
+ err << QObject::tr("Enter password to unlock %1: ").arg(databaseFilename) << flush;
+ QString line = Utils::getPassword(quiet);
auto passwordKey = QSharedPointer<PasswordKey>::create();
passwordKey->setPassword(line);
compositeKey->addKey(passwordKey);
@@ -156,25 +145,28 @@ namespace Utils
#ifdef WITH_XC_YUBIKEY
if (!yubiKeySlot.isEmpty()) {
+ unsigned int serial = 0;
+ int slot;
+
bool ok = false;
- int slot = yubiKeySlot.toInt(&ok, 10);
+ auto parts = yubiKeySlot.split(":");
+ slot = parts[0].toInt(&ok);
+
if (!ok || (slot != 1 && slot != 2)) {
- err << QObject::tr("Invalid YubiKey slot %1").arg(yubiKeySlot) << endl;
+ err << QObject::tr("Invalid YubiKey slot %1").arg(parts[0]) << endl;
return {};
}
- QString errorMessage;
- bool blocking = YubiKey::instance()->checkSlotIsBlocking(slot, errorMessage);
- if (!errorMessage.isEmpty()) {
- err << errorMessage << endl;
- return {};
+ if (parts.size() > 1) {
+ serial = parts[1].toUInt(&ok, 10);
+ if (!ok) {
+ err << QObject::tr("Invalid YubiKey serial %1").arg(parts[1]) << endl;
+ return {};
+ }
}
auto key = QSharedPointer<YkChallengeResponseKeyCLI>(new YkChallengeResponseKeyCLI(
- slot,
- blocking,
- QObject::tr("Please touch the button on your YubiKey to unlock %1").arg(databaseFilename),
- outputDescriptor));
+ {serial, slot}, QObject::tr("Please touch the button on your YubiKey to continue…"), err));
compositeKey->addChallengeResponseKey(key);
}
#else
@@ -197,19 +189,10 @@ namespace Utils
*
* @return the password
*/
- QString getPassword(FILE* outputDescriptor)
+ QString getPassword(bool quiet)
{
- TextStream out(outputDescriptor, QIODevice::WriteOnly);
-
- // return preset password if one is set
- if (!Test::nextPasswords.isEmpty()) {
- auto password = Test::nextPasswords.takeFirst();
- // simulate user entering newline
- out << endl;
- return password;
- }
-
- static TextStream in(STDIN, QIODevice::ReadOnly);
+ auto& in = STDIN;
+ auto& out = quiet ? DEVNULL : STDERR;
setStdinEcho(false);
QString line = in.readLine();
@@ -225,17 +208,35 @@ namespace Utils
* @return Pointer to the PasswordKey or null if passwordkey is skipped
* by user
*/
- QSharedPointer<PasswordKey> getPasswordFromStdin()
+ QSharedPointer<PasswordKey> getConfirmedPassword()
{
+ auto& err = STDERR;
+ auto& in = STDIN;
+
QSharedPointer<PasswordKey> passwordKey;
- QTextStream out(Utils::STDOUT, QIODevice::WriteOnly);
- out << QObject::tr("Enter password to encrypt database (optional): ");
- out.flush();
- QString password = Utils::getPassword();
+ err << QObject::tr("Enter password to encrypt database (optional): ");
+ err.flush();
+ auto password = Utils::getPassword();
- if (!password.isEmpty()) {
- passwordKey = QSharedPointer<PasswordKey>(new PasswordKey(password));
+ if (password.isEmpty()) {
+ err << QObject::tr("Do you want to create a database with an empty password? [y/N]: ");
+ err.flush();
+ auto ans = in.readLine();
+ if (ans.toLower().startsWith("y")) {
+ passwordKey = QSharedPointer<PasswordKey>::create("");
+ }
+ err << endl;
+ } else {
+ err << QObject::tr("Repeat password: ");
+ err.flush();
+ auto repeat = Utils::getPassword();
+
+ if (password == repeat) {
+ passwordKey = QSharedPointer<PasswordKey>::create(password);
+ } else {
+ err << QObject::tr("Error: Passwords do not match.") << endl;
+ }
}
return passwordKey;
@@ -247,50 +248,65 @@ namespace Utils
*/
int clipText(const QString& text)
{
- TextStream err(Utils::STDERR);
+ auto& err = STDERR;
- QString programName = "";
- QStringList arguments;
+ // List of programs and their arguments
+ QList<QPair<QString, QString>> clipPrograms;
#ifdef Q_OS_UNIX
- programName = "xclip";
- arguments << "-i"
- << "-selection"
- << "clipboard";
+ if (QProcessEnvironment::systemEnvironment().contains("WAYLAND_DISPLAY")) {
+ clipPrograms << qMakePair(QStringLiteral("wl-copy"), QStringLiteral(""));
+ } else {
+ clipPrograms << qMakePair(QStringLiteral("xclip"), QStringLiteral("-selection clipboard -i"));
+ }
#endif
#ifdef Q_OS_MACOS
- programName = "pbcopy";
+ clipPrograms << qMakePair(QStringLiteral("pbcopy"), QStringLiteral(""));
#endif
#ifdef Q_OS_WIN
- programName = "clip";
+ clipPrograms << qMakePair(QStringLiteral("clip"), QStringLiteral(""));
#endif
- if (programName.isEmpty()) {
+ if (clipPrograms.isEmpty()) {
err << QObject::tr("No program defined for clipboard manipulation");
err.flush();
return EXIT_FAILURE;
}
- QScopedPointer<QProcess> clipProcess(new QProcess(nullptr));
- clipProcess->start(programName, arguments);
- clipProcess->waitForStarted();
+ QStringList failedProgramNames;
- if (clipProcess->state() != QProcess::Running) {
- err << QObject::tr("Unable to start program %1").arg(programName);
- err.flush();
- return EXIT_FAILURE;
- }
+ for (auto prog : clipPrograms) {
+ QScopedPointer<QProcess> clipProcess(new QProcess(nullptr));
+
+ // Skip empty parts, otherwise the program may clip the empty string
+ QStringList progArgs = prog.second.split(" ", QString::SkipEmptyParts);
+
+ clipProcess->start(prog.first, progArgs);
+ clipProcess->waitForStarted();
+
+ if (clipProcess->state() != QProcess::Running) {
+ failedProgramNames.append(prog.first);
+ continue;
+ }
- if (clipProcess->write(text.toLatin1()) == -1) {
- qDebug("Unable to write to process : %s", qPrintable(clipProcess->errorString()));
+ if (clipProcess->write(text.toLatin1()) == -1) {
+ qDebug("Unable to write to process : %s", qPrintable(clipProcess->errorString()));
+ }
+ clipProcess->waitForBytesWritten();
+ clipProcess->closeWriteChannel();
+ clipProcess->waitForFinished();
+
+ if (clipProcess->exitCode() == EXIT_SUCCESS) {
+ return EXIT_SUCCESS;
+ }
}
- clipProcess->waitForBytesWritten();
- clipProcess->closeWriteChannel();
- clipProcess->waitForFinished();
- return clipProcess->exitCode();
+ // No clipping program worked
+ err << QObject::tr("All clipping programs failed. Tried %1\n").arg(failedProgramNames.join(", "));
+ err.flush();
+ return EXIT_FAILURE;
}
/**
@@ -331,4 +347,21 @@ namespace Utils
return result;
}
+ QStringList findAttributes(const EntryAttributes& attributes, const QString& name)
+ {
+ QStringList result;
+ if (attributes.hasKey(name)) {
+ result.append(name);
+ return result;
+ }
+
+ for (const QString& key : attributes.keys()) {
+ if (key.compare(name, Qt::CaseSensitivity::CaseInsensitive) == 0) {
+ result.append(key);
+ }
+ }
+
+ return result;
+ }
+
} // namespace Utils
diff --git a/src/cli/Utils.h b/src/cli/Utils.h
index b7fa63acf..0cd5c0bea 100644
--- a/src/cli/Utils.h
+++ b/src/cli/Utils.h
@@ -20,41 +20,40 @@
#include "cli/TextStream.h"
#include "core/Database.h"
+#include "core/EntryAttributes.h"
#include "keys/CompositeKey.h"
#include "keys/FileKey.h"
#include "keys/PasswordKey.h"
#include <QtCore/qglobal.h>
-#ifdef WITH_XC_YUBIKEY
-#include "keys/YkChallengeResponseKey.h"
-#include "keys/YkChallengeResponseKeyCLI.h"
-#include "keys/drivers/YubiKey.h"
-#endif
-
namespace Utils
{
- extern FILE* STDOUT;
- extern FILE* STDERR;
- extern FILE* STDIN;
- extern FILE* DEVNULL;
+ extern QTextStream STDOUT;
+ extern QTextStream STDERR;
+ extern QTextStream STDIN;
+ extern QTextStream DEVNULL;
+
+ void setDefaultTextStreams();
void setStdinEcho(bool enable);
- QString getPassword(FILE* outputDescriptor = STDOUT);
- QSharedPointer<PasswordKey> getPasswordFromStdin();
+ QString getPassword(bool quiet = false);
+ QSharedPointer<PasswordKey> getConfirmedPassword();
int clipText(const QString& text);
QSharedPointer<Database> unlockDatabase(const QString& databaseFilename,
const bool isPasswordProtected = true,
const QString& keyFilename = {},
const QString& yubiKeySlot = {},
- FILE* outputDescriptor = STDOUT,
- FILE* errorDescriptor = STDERR);
+ bool quiet = false);
QStringList splitCommandString(const QString& command);
- namespace Test
- {
- void setNextPassword(const QString& password);
- }
+ /**
+ * If `attributes` contains an attribute named `name` (case-sensitive),
+ * returns a list containing only `name`. Otherwise, returns the list of
+ * all attribute names in `attributes` matching the given name
+ * (case-insensitive).
+ */
+ QStringList findAttributes(const EntryAttributes& attributes, const QString& name);
}; // namespace Utils
#endif // KEEPASSXC_UTILS_H
diff --git a/src/cli/keepassxc-cli.cpp b/src/cli/keepassxc-cli.cpp
index 179b79a43..a9b276fda 100644
--- a/src/cli/keepassxc-cli.cpp
+++ b/src/cli/keepassxc-cli.cpp
@@ -118,13 +118,14 @@ private:
void enterInteractiveMode(const QStringList& arguments)
{
+ auto& err = Utils::STDERR;
// Replace command list with interactive version
Commands::setupCommands(true);
- Open o;
+ Open openCmd;
QStringList openArgs(arguments);
openArgs.removeFirst();
- o.execute(openArgs);
+ openCmd.execute(openArgs);
QScopedPointer<LineReader> reader;
#if defined(USE_READLINE)
@@ -133,12 +134,10 @@ void enterInteractiveMode(const QStringList& arguments)
reader.reset(new SimpleLineReader());
#endif
- QSharedPointer<Database> currentDatabase(o.currentDatabase);
+ QSharedPointer<Database> currentDatabase(openCmd.currentDatabase);
QString command;
while (true) {
- TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly);
-
QString prompt;
if (currentDatabase) {
prompt += currentDatabase->metadata()->name();
@@ -159,7 +158,7 @@ void enterInteractiveMode(const QStringList& arguments)
auto cmd = Commands::getCommand(args[0]);
if (!cmd) {
- errorTextStream << QObject::tr("Unknown command %1").arg(args[0]) << "\n";
+ err << QObject::tr("Unknown command %1").arg(args[0]) << "\n";
continue;
} else if (cmd->name == "quit" || cmd->name == "exit") {
break;
@@ -186,9 +185,12 @@ int main(int argc, char** argv)
QCoreApplication::setApplicationVersion(KEEPASSXC_VERSION);
Bootstrap::bootstrap();
+ Utils::setDefaultTextStreams();
Commands::setupCommands(false);
- TextStream out(stdout);
+ auto& out = Utils::STDOUT;
+ auto& err = Utils::STDERR;
+
QStringList arguments;
for (int i = 0; i < argc; ++i) {
arguments << QString(argv[i]);
@@ -223,6 +225,7 @@ int main(int argc, char** argv)
out << debugInfo << endl;
return EXIT_SUCCESS;
}
+ // showHelp exits the application immediately.
parser.showHelp();
}
@@ -234,10 +237,9 @@ int main(int argc, char** argv)
auto command = Commands::getCommand(commandName);
if (!command) {
- qCritical("Invalid command %s.", qPrintable(commandName));
- // showHelp exits the application immediately, so we need to set the
- // exit code here.
- parser.showHelp(EXIT_FAILURE);
+ err << QObject::tr("Invalid command %1.").arg(commandName) << endl;
+ err << parser.helpText();
+ return EXIT_FAILURE;
}
// Removing the first argument (keepassxc).
diff --git a/src/core/Alloc.cpp b/src/core/Alloc.cpp
index 625386a3f..6c798e728 100644
--- a/src/core/Alloc.cpp
+++ b/src/core/Alloc.cpp
@@ -79,14 +79,17 @@ void operator delete[](void* ptr) noexcept
::operator delete(ptr);
}
+// clang-format versions less than 10.0 refuse to put a space before "noexcept"
+// clang-format off
/**
* Custom insecure delete operator that does not zero out memory before
* freeing a buffer. Can be used for better performance.
*/
-void operator delete(void* ptr, bool)noexcept
+void operator delete(void* ptr, bool) noexcept
{
std::free(ptr);
}
+// clang-format on
void operator delete[](void* ptr, bool) noexcept
{
diff --git a/src/core/Bootstrap.cpp b/src/core/Bootstrap.cpp
index 46aff92d5..cdf5e334a 100644
--- a/src/core/Bootstrap.cpp
+++ b/src/core/Bootstrap.cpp
@@ -70,9 +70,9 @@ namespace Bootstrap
#ifdef QT_NO_DEBUG
disableCoreDumps();
#endif
+
setupSearchPaths();
applyEarlyQNetworkAccessManagerWorkaround();
- Translator::installTranslators();
}
/**
@@ -83,14 +83,17 @@ namespace Bootstrap
void bootstrapApplication()
{
bootstrap();
- MessageBox::initializeButtonDefs();
+ Translator::installTranslators();
-#ifdef KEEPASSXC_DIST_SNAP
- // snap: force fallback theme to avoid using system theme (gtk integration)
- // with missing actions just like on Windows and macOS
- QIcon::setThemeSearchPaths(QStringList() << ":/icons");
+#ifdef Q_OS_WIN
+ // Qt on Windows uses "MS Shell Dlg 2" as the default font for many widgets, which resolves
+ // to Tahoma 8pt, whereas the correct font would be "Segoe UI" 9pt.
+ // Apparently, some widgets are already using the correct font. Thanks, MuseScore for this neat fix!
+ QApplication::setFont(QApplication::font("QMessageBox"));
#endif
+ MessageBox::initializeButtonDefs();
+
#ifdef Q_OS_MACOS
// Don't show menu icons on OSX
QApplication::setAttribute(Qt::AA_DontShowIconsInMenus);
@@ -105,24 +108,20 @@ namespace Bootstrap
void restoreMainWindowState(MainWindow& mainWindow)
{
// start minimized if configured
- if (config()->get("GUI/MinimizeOnStartup").toBool()) {
-#ifdef Q_OS_WIN
- mainWindow.showMinimized();
-#else
+ if (config()->get(Config::GUI_MinimizeOnStartup).toBool()) {
mainWindow.hideWindow();
-#endif
} else {
mainWindow.bringToFront();
}
- if (config()->get("OpenPreviousDatabasesOnStartup").toBool()) {
- const QStringList fileNames = config()->get("LastOpenedDatabases").toStringList();
+ if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) {
+ const QStringList fileNames = config()->get(Config::LastOpenedDatabases).toStringList();
for (const QString& filename : fileNames) {
if (!filename.isEmpty() && QFile::exists(filename)) {
mainWindow.openDatabase(filename);
}
}
- auto lastActiveFile = config()->get("LastActiveDatabase").toString();
+ auto lastActiveFile = config()->get(Config::LastActiveDatabase).toString();
if (!lastActiveFile.isEmpty()) {
mainWindow.openDatabase(lastActiveFile);
}
diff --git a/src/core/Clock.cpp b/src/core/Clock.cpp
index be9e91dcf..5704d4bff 100644
--- a/src/core/Clock.cpp
+++ b/src/core/Clock.cpp
@@ -34,6 +34,11 @@ uint Clock::currentSecondsSinceEpoch()
return instance().currentDateTimeImpl().toTime_t();
}
+qint64 Clock::currentMilliSecondsSinceEpoch()
+{
+ return instance().currentDateTimeImpl().toMSecsSinceEpoch();
+}
+
QDateTime Clock::serialized(const QDateTime& dateTime)
{
auto time = dateTime.time();
diff --git a/src/core/Clock.h b/src/core/Clock.h
index 8f81b0961..4d1ee2537 100644
--- a/src/core/Clock.h
+++ b/src/core/Clock.h
@@ -28,6 +28,7 @@ public:
static QDateTime currentDateTime();
static uint currentSecondsSinceEpoch();
+ static qint64 currentMilliSecondsSinceEpoch();
static QDateTime serialized(const QDateTime& dateTime);
diff --git a/src/core/Compare.cpp b/src/core/Compare.cpp
index 12e5029b7..5dccdd781 100644
--- a/src/core/Compare.cpp
+++ b/src/core/Compare.cpp
@@ -15,24 +15,3 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "Compare.h"
-
-#include <QColor>
-
-bool operator<(const QColor& lhs, const QColor& rhs)
-{
- const QColor adaptedLhs = lhs.toCmyk();
- const QColor adaptedRhs = rhs.toCmyk();
- const int iCyan = compare(adaptedLhs.cyanF(), adaptedRhs.cyanF());
- if (iCyan != 0) {
- return iCyan;
- }
- const int iMagenta = compare(adaptedLhs.magentaF(), adaptedRhs.magentaF());
- if (iMagenta != 0) {
- return iMagenta;
- }
- const int iYellow = compare(adaptedLhs.yellowF(), adaptedRhs.yellowF());
- if (iYellow != 0) {
- return iYellow;
- }
- return compare(adaptedLhs.blackF(), adaptedRhs.blackF()) < 0;
-}
diff --git a/src/core/Compare.h b/src/core/Compare.h
index 5124caf6e..921893859 100644
--- a/src/core/Compare.h
+++ b/src/core/Compare.h
@@ -34,14 +34,6 @@ enum CompareItemOption
Q_DECLARE_FLAGS(CompareItemOptions, CompareItemOption)
Q_DECLARE_OPERATORS_FOR_FLAGS(CompareItemOptions)
-class QColor;
-/*!
- * \return true when both color match
- *
- * Comparison converts both into the cmyk-model
- */
-bool operator<(const QColor& lhs, const QColor& rhs);
-
template <typename Type> inline short compareGeneric(const Type& lhs, const Type& rhs, CompareItemOptions)
{
if (lhs != rhs) {
diff --git a/src/core/Config.cpp b/src/core/Config.cpp
index 445e587f8..6d55df8c7 100644
--- a/src/core/Config.cpp
+++ b/src/core/Config.cpp
@@ -1,6 +1,6 @@
/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,40 +17,209 @@
*/
#include "Config.h"
+#include "Global.h"
#include <QCoreApplication>
#include <QDir>
+#include <QHash>
#include <QSettings>
+#include <QSize>
#include <QStandardPaths>
#include <QTemporaryFile>
-/*
- * Map of configuration file settings that are either deprecated, or have
- * had their name changed. Entries in the map are of the form
- * {oldName, newName}
- * Set newName to empty string to remove the setting from the file.
- */
-static const QMap<QString, QString> deprecationMap = {
- // >2.3.4
- {QStringLiteral("security/hidepassworddetails"), QStringLiteral("security/HidePasswordPreviewPanel")},
- // >2.3.4
- {QStringLiteral("GUI/HideDetailsView"), QStringLiteral("GUI/HidePreviewPanel")},
- // >2.3.4
- {QStringLiteral("GUI/DetailSplitterState"), QStringLiteral("GUI/PreviewSplitterState")},
- // >2.3.4
- {QStringLiteral("security/IconDownloadFallbackToGoogle"), QStringLiteral("security/IconDownloadFallback")},
-};
+#define CONFIG_VERSION 1
+#define QS QStringLiteral
-Config* Config::m_instance(nullptr);
+enum ConfigType
+{
+ Local,
+ Roaming
+};
-QVariant Config::get(const QString& key)
+struct ConfigDirective
{
- return m_settings->value(key, m_defaults.value(key));
-}
+ QString name;
+ ConfigType type;
+ QVariant defaultValue;
+};
+
+// clang-format off
+
+/**
+ * Map of legal config values, their type and default value.
+ */
+static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
+ // General
+ {Config::SingleInstance,{QS("SingleInstance"), Roaming, true}},
+ {Config::RememberLastDatabases,{QS("RememberLastDatabases"), Roaming, true}},
+ {Config::NumberOfRememberedLastDatabases,{QS("NumberOfRememberedLastDatabases"), Roaming, 5}},
+ {Config::RememberLastKeyFiles,{QS("RememberLastKeyFiles"), Roaming, true}},
+ {Config::OpenPreviousDatabasesOnStartup,{QS("OpenPreviousDatabasesOnStartup"), Roaming, true}},
+ {Config::AutoSaveAfterEveryChange,{QS("AutoSaveAfterEveryChange"), Roaming, true}},
+ {Config::AutoReloadOnChange,{QS("AutoReloadOnChange"), Roaming, true}},
+ {Config::AutoSaveOnExit,{QS("AutoSaveOnExit"), Roaming, true}},
+ {Config::BackupBeforeSave,{QS("BackupBeforeSave"), Roaming, false}},
+ {Config::UseAtomicSaves,{QS("UseAtomicSaves"), Roaming, true}},
+ {Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}},
+ {Config::MinimizeOnOpenUrl,{QS("MinimizeOnOpenUrl"), Roaming, false}},
+ {Config::HideWindowOnCopy,{QS("HideWindowOnCopy"), Roaming, false}},
+ {Config::MinimizeOnCopy,{QS("MinimizeOnCopy"), Roaming, true}},
+ {Config::MinimizeAfterUnlock,{QS("MinimizeAfterUnlock"), Roaming, false}},
+ {Config::DropToBackgroundOnCopy,{QS("DropToBackgroundOnCopy"), Roaming, false}},
+ {Config::UseGroupIconOnEntryCreation,{QS("UseGroupIconOnEntryCreation"), Roaming, true}},
+ {Config::AutoTypeEntryTitleMatch,{QS("AutoTypeEntryTitleMatch"), Roaming, true}},
+ {Config::AutoTypeEntryURLMatch,{QS("AutoTypeEntryURLMatch"), Roaming, true}},
+ {Config::AutoTypeDelay,{QS("AutoTypeDelay"), Roaming, 25}},
+ {Config::AutoTypeStartDelay,{QS("AutoTypeStartDelay"), Roaming, 500}},
+ {Config::GlobalAutoTypeKey,{QS("GlobalAutoTypeKey"), Roaming, 0}},
+ {Config::GlobalAutoTypeModifiers,{QS("GlobalAutoTypeModifiers"), Roaming, 0}},
+ {Config::TrackNonDataChanges,{QS("TrackNonDataChanges"), Roaming, false}},
+ {Config::FaviconDownloadTimeout,{QS("FaviconDownloadTimeout"), Roaming, 10}},
+ {Config::UpdateCheckMessageShown,{QS("UpdateCheckMessageShown"), Roaming, false}},
+ {Config::UseTouchID,{QS("UseTouchID"), Roaming, false}},
+
+ {Config::LastDatabases, {QS("LastDatabases"), Local, {}}},
+ {Config::LastKeyFiles, {QS("LastKeyFiles"), Local, {}}},
+ {Config::LastChallengeResponse, {QS("LastChallengeResponse"), Local, {}}},
+ {Config::LastActiveDatabase, {QS("LastActiveDatabase"), Local, {}}},
+ {Config::LastOpenedDatabases, {QS("LastOpenedDatabases"), Local, {}}},
+ {Config::LastDir, {QS("LastDir"), Local, QDir::homePath()}},
+ {Config::LastAttachmentDir, {QS("LastAttachmentDir"), Local, {}}},
+
+ // GUI
+ {Config::GUI_Language, {QS("GUI/Language"), Roaming, QS("system")}},
+ {Config::GUI_HideToolbar, {QS("GUI/HideToolbar"), Roaming, false}},
+ {Config::GUI_MovableToolbar, {QS("GUI/MovableToolbar"), Roaming, false}},
+ {Config::GUI_HidePreviewPanel, {QS("GUI/HidePreviewPanel"), Roaming, false}},
+ {Config::GUI_ToolButtonStyle, {QS("GUI/ToolButtonStyle"), Roaming, Qt::ToolButtonIconOnly}},
+ {Config::GUI_ShowTrayIcon, {QS("GUI/ShowTrayIcon"), Roaming, false}},
+ {Config::GUI_TrayIconAppearance, {QS("GUI/TrayIconAppearance"), Roaming, {}}},
+ {Config::GUI_MinimizeToTray, {QS("GUI/MinimizeToTray"), Roaming, false}},
+ {Config::GUI_MinimizeOnStartup, {QS("GUI/MinimizeOnStartup"), Roaming, false}},
+ {Config::GUI_MinimizeOnClose, {QS("GUI/MinimizeOnClose"), Roaming, false}},
+ {Config::GUI_HideUsernames, {QS("GUI/HideUsernames"), Roaming, false}},
+ {Config::GUI_AdvancedSettings, {QS("GUI/AdvancedSettings"), Roaming, false}},
+ {Config::GUI_MonospaceNotes, {QS("GUI/MonospaceNotes"), Roaming, false}},
+ {Config::GUI_ApplicationTheme, {QS("GUI/ApplicationTheme"), Roaming, QS("auto")}},
+ {Config::GUI_CompactMode, {QS("GUI/CompactMode"), Roaming, false}},
+ {Config::GUI_CheckForUpdates, {QS("GUI/CheckForUpdates"), Roaming, true}},
+ {Config::GUI_CheckForUpdatesNextCheck, {QS("GUI/CheckForUpdatesNextCheck"), Local, 0}},
+ {Config::GUI_CheckForUpdatesIncludeBetas, {QS("GUI/CheckForUpdatesIncludeBetas"), Roaming, false}},
+
+ {Config::GUI_MainWindowGeometry, {QS("GUI/MainWindowGeometry"), Local, {}}},
+ {Config::GUI_MainWindowState, {QS("GUI/MainWindowState"), Local, {}}},
+ {Config::GUI_ListViewState, {QS("GUI/ListViewState"), Local, {}}},
+ {Config::GUI_SearchViewState, {QS("GUI/SearchViewState"), Local, {}}},
+ {Config::GUI_SplitterState, {QS("GUI/SplitterState"), Local, {}}},
+ {Config::GUI_PreviewSplitterState, {QS("GUI/PreviewSplitterState"), Local, {}}},
+ {Config::GUI_AutoTypeSelectDialogSize, {QS("GUI/AutoTypeSelectDialogSize"), Local, QSize(600, 250)}},
+
+ // Security
+ {Config::Security_ClearClipboard, {QS("Security/ClearClipboard"), Roaming, true}},
+ {Config::Security_ClearClipboardTimeout, {QS("Security/ClearClipboardTimeout"), Roaming, 10}},
+ {Config::Security_ClearSearch, {QS("Security/ClearSearch"), Roaming, true}},
+ {Config::Security_ClearSearchTimeout, {QS("Security/ClearSearchTimeout"), Roaming, 5}},
+ {Config::Security_HideNotes, {QS("Security/Security_HideNotes"), Roaming, false}},
+ {Config::Security_LockDatabaseIdle, {QS("Security/LockDatabaseIdle"), Roaming, false}},
+ {Config::Security_LockDatabaseIdleSeconds, {QS("Security/LockDatabaseIdleSeconds"), Roaming, 240}},
+ {Config::Security_LockDatabaseMinimize, {QS("Security/LockDatabaseMinimize"), Roaming, false}},
+ {Config::Security_LockDatabaseScreenLock, {QS("Security/LockDatabaseScreenLock"), Roaming, true}},
+ {Config::Security_RelockAutoType, {QS("Security/RelockAutoType"), Roaming, false}},
+ {Config::Security_PasswordsRepeatVisible, {QS("Security/PasswordsRepeatVisible"), Roaming, true}},
+ {Config::Security_PasswordsHidden, {QS("Security/PasswordsHidden"), Roaming, true}},
+ {Config::Security_PasswordEmptyPlaceholder, {QS("Security/PasswordEmptyPlaceholder"), Roaming, false}},
+ {Config::Security_HidePasswordPreviewPanel, {QS("Security/HidePasswordPreviewPanel"), Roaming, true}},
+ {Config::Security_AutoTypeAsk, {QS("Security/AutotypeAsk"), Roaming, true}},
+ {Config::Security_IconDownloadFallback, {QS("Security/IconDownloadFallback"), Roaming, false}},
+ {Config::Security_ResetTouchId, {QS("Security/ResetTouchId"), Roaming, false}},
+ {Config::Security_ResetTouchIdTimeout, {QS("Security/ResetTouchIdTimeout"), Roaming, 30}},
+ {Config::Security_ResetTouchIdScreenlock,{QS("Security/ResetTouchIdScreenlock"), Roaming, true}},
+
+ // Browser
+ {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}},
+ {Config::Browser_ShowNotification, {QS("Browser/ShowNotification"), Roaming, true}},
+ {Config::Browser_BestMatchOnly, {QS("Browser/BestMatchOnly"), Roaming, false}},
+ {Config::Browser_UnlockDatabase, {QS("Browser/UnlockDatabase"), Roaming, true}},
+ {Config::Browser_MatchUrlScheme, {QS("Browser/MatchUrlScheme"), Roaming, true}},
+ {Config::Browser_SortByUsername, {QS("Browser/SortByUsername"), Roaming, false}},
+ {Config::Browser_SupportBrowserProxy, {QS("Browser/SupportBrowserProxy"), Roaming, true}},
+ {Config::Browser_UseCustomProxy, {QS("Browser/UseCustomProxy"), Roaming, false}},
+ {Config::Browser_CustomProxyLocation, {QS("Browser/CustomProxyLocation"), Roaming, {}}},
+ {Config::Browser_UpdateBinaryPath, {QS("Browser/UpdateBinaryPath"), Roaming, true}},
+ {Config::Browser_AllowExpiredCredentials, {QS("Browser/AllowExpiredCredentials"), Roaming, false}},
+ {Config::Browser_AlwaysAllowAccess, {QS("Browser/AlwaysAllowAccess"), Roaming, false}},
+ {Config::Browser_AlwaysAllowUpdate, {QS("Browser/AlwaysAllowUpdate"), Roaming, false}},
+ {Config::Browser_HttpAuthPermission, {QS("Browser/HttpAuthPermission"), Roaming, false}},
+ {Config::Browser_SearchInAllDatabases, {QS("Browser/SearchInAllDatabases"), Roaming, false}},
+ {Config::Browser_SupportKphFields, {QS("Browser/SupportKphFields"), Roaming, true}},
+ {Config::Browser_NoMigrationPrompt, {QS("Browser/NoMigrationPrompt"), Roaming, false}},
+ {Config::Browser_UseCustomBrowser, {QS("Browser/UseCustomBrowser"), Local, false}},
+ {Config::Browser_CustomBrowserType, {QS("Browser/CustomBrowserType"), Local, -1}},
+ {Config::Browser_CustomBrowserLocation, {QS("Browser/CustomBrowserLocation"), Local, {}}},
+#ifdef QT_DEBUG
+ {Config::Browser_CustomExtensionId, {QS("Browser/CustomExtensionId"), Local, {}}},
+#endif
+
+ // SSHAgent
+ {Config::SSHAgent_Enabled, {QS("SSHAgent/Enabled"), Roaming, false}},
+ {Config::SSHAgent_UseOpenSSH, {QS("SSHAgent/UseOpenSSH"), Roaming, false}},
+ {Config::SSHAgent_AuthSockOverride, {QS("SSHAgent/AuthSockOverride"), Local, {}}},
-QVariant Config::get(const QString& key, const QVariant& defaultValue)
+ // FdoSecrets
+ {Config::FdoSecrets_Enabled, {QS("FdoSecrets/Enabled"), Roaming, false}},
+ {Config::FdoSecrets_ShowNotification, {QS("FdoSecrets/ShowNotification"), Roaming, true}},
+ {Config::FdoSecrets_NoConfirmDeleteItem, {QS("FdoSecrets/NoConfirmDeleteItem"), Roaming, false}},
+
+ // KeeShare
+ {Config::KeeShare_QuietSuccess, {QS("KeeShare/QuietSuccess"), Roaming, false}},
+ {Config::KeeShare_Own, {QS("KeeShare/Own"), Roaming, {}}},
+ {Config::KeeShare_Foreign, {QS("KeeShare/Foreign"), Roaming, {}}},
+ {Config::KeeShare_Active, {QS("KeeShare/Active"), Roaming, {}}},
+ {Config::KeeShare_LastDir, {QS("KeeShare/LastDir"), Local, QDir::homePath()}},
+ {Config::KeeShare_LastKeyDir, {QS("KeeShare/LastKeyDir"), Local, QDir::homePath()}},
+ {Config::KeeShare_LastShareDir, {QS("KeeShare/LastShareDir"), Local, QDir::homePath()}},
+
+ // PasswordGenerator
+ {Config::PasswordGenerator_LowerCase, {QS("PasswordGenerator/LowerCase"), Roaming, true}},
+ {Config::PasswordGenerator_UpperCase, {QS("PasswordGenerator/UpperCase"), Roaming, true}},
+ {Config::PasswordGenerator_Numbers, {QS("PasswordGenerator/Numbers"), Roaming, true}},
+ {Config::PasswordGenerator_EASCII, {QS("PasswordGenerator/EASCII"), Roaming, false}},
+ {Config::PasswordGenerator_AdvancedMode, {QS("PasswordGenerator/AdvancedMode"), Roaming, false}},
+ {Config::PasswordGenerator_SpecialChars, {QS("PasswordGenerator/SpecialChars"), Roaming, true}},
+ {Config::PasswordGenerator_Braces, {QS("PasswordGenerator/Braces"), Roaming, false}},
+ {Config::PasswordGenerator_Punctuation, {QS("PasswordGenerator/Punctuation"), Roaming, false}},
+ {Config::PasswordGenerator_Quotes, {QS("PasswordGenerator/Quotes"), Roaming, false}},
+ {Config::PasswordGenerator_Dashes, {QS("PasswordGenerator/Dashes"), Roaming, false}},
+ {Config::PasswordGenerator_Math, {QS("PasswordGenerator/Math"), Roaming, false}},
+ {Config::PasswordGenerator_Logograms, {QS("PasswordGenerator/Logograms"), Roaming, false}},
+ {Config::PasswordGenerator_AdditionalChars, {QS("PasswordGenerator/AdditionalChars"), Roaming, {}}},
+ {Config::PasswordGenerator_ExcludedChars, {QS("PasswordGenerator/ExcludedChars"), Roaming, {}}},
+ {Config::PasswordGenerator_ExcludeAlike, {QS("PasswordGenerator/ExcludeAlike"), Roaming, true}},
+ {Config::PasswordGenerator_EnsureEvery, {QS("PasswordGenerator/EnsureEvery"), Roaming, true}},
+ {Config::PasswordGenerator_Length, {QS("PasswordGenerator/Length"), Roaming, 20}},
+ {Config::PasswordGenerator_WordCount, {QS("PasswordGenerator/WordCount"), Roaming, 7}},
+ {Config::PasswordGenerator_WordSeparator, {QS("PasswordGenerator/WordSeparator"), Roaming, QS(" ")}},
+ {Config::PasswordGenerator_WordList, {QS("PasswordGenerator/WordList"), Roaming, QS("eff_large.wordlist")}},
+ {Config::PasswordGenerator_WordCase, {QS("PasswordGenerator/WordCase"), Roaming, 0}},
+ {Config::PasswordGenerator_Type, {QS("PasswordGenerator/Type"), Roaming, 0}},
+
+ // Messages
+ {Config::Messages_NoLegacyKeyFileWarning, {QS("Messages/NoLegacyKeyFileWarning"), Roaming, false}},
+ {Config::Messages_Qt55CompatibilityWarning, {QS("Messages/Qt55CompatibilityWarning"), Local, false}},
+ {Config::Messages_HidePreReleaseWarning, {QS("Messages/HidePreReleaseWarning"), Local, {}}}};
+
+// clang-format on
+
+QPointer<Config> Config::m_instance(nullptr);
+
+QVariant Config::get(ConfigKey key)
{
- return m_settings->value(key, defaultValue);
+ auto cfg = configStrings[key];
+ auto defaultValue = configStrings[key].defaultValue;
+ if (m_localSettings && cfg.type == Local) {
+ return m_localSettings->value(cfg.name, defaultValue);
+ }
+ return m_settings->value(cfg.name, defaultValue);
}
bool Config::hasAccessError()
@@ -63,18 +232,32 @@ QString Config::getFileName()
return m_settings->fileName();
}
-void Config::set(const QString& key, const QVariant& value)
+void Config::set(ConfigKey key, const QVariant& value)
{
- if (m_settings->contains(key) && m_settings->value(key) == value) {
+ if (get(key) == value) {
return;
}
- const bool surpressSignal = !m_settings->contains(key) && m_defaults.value(key) == value;
- m_settings->setValue(key, value);
+ auto cfg = configStrings[key];
+ if (cfg.type == Local && m_localSettings) {
+ m_localSettings->setValue(cfg.name, value);
+ } else {
+ m_settings->setValue(cfg.name, value);
+ }
- if (!surpressSignal) {
- emit changed(key);
+ emit changed(key);
+}
+
+void Config::remove(ConfigKey key)
+{
+ auto cfg = configStrings[key];
+ if (cfg.type == Local && m_localSettings) {
+ m_localSettings->remove(cfg.name);
+ } else {
+ m_settings->remove(cfg.name);
}
+
+ emit changed(key);
}
/**
@@ -87,38 +270,153 @@ void Config::set(const QString& key, const QVariant& value)
void Config::sync()
{
m_settings->sync();
+ if (m_localSettings) {
+ m_localSettings->sync();
+ }
}
void Config::resetToDefaults()
{
- for (const auto& setting : m_defaults.keys()) {
- m_settings->setValue(setting, m_defaults.value(setting));
+ m_settings->clear();
+ if (m_localSettings) {
+ m_localSettings->clear();
}
}
-void Config::upgrade()
+/**
+ * Map of configuration file settings that are either deprecated, or have
+ * had their name changed to their new config enum values.
+ *
+ * Set a value to Deleted to remove the setting.
+ */
+static const QHash<QString, Config::ConfigKey> deprecationMap = {
+ // 2.3.4
+ {QS("security/hidepassworddetails"), Config::Security_HidePasswordPreviewPanel},
+ {QS("GUI/HideDetailsView"), Config::GUI_HidePreviewPanel},
+ {QS("GUI/DetailSplitterState"), Config::GUI_PreviewSplitterState},
+ {QS("security/IconDownloadFallbackToGoogle"), Config::Security_IconDownloadFallback},
+
+ // 2.6.0
+ {QS("IgnoreGroupExpansion"), Config::TrackNonDataChanges},
+ {QS("security/autotypeask"), Config::Security_AutoTypeAsk},
+ {QS("security/clearclipboard"), Config::Security_ClearClipboard},
+ {QS("security/clearclipboardtimeout"), Config::Security_ClearClipboardTimeout},
+ {QS("security/clearsearch"), Config::Security_ClearSearch},
+ {QS("security/clearsearchtimeout"), Config::Security_ClearSearchTimeout},
+ {QS("security/lockdatabaseidle"), Config::Security_LockDatabaseIdle},
+ {QS("security/lockdatabaseidlesec"), Config::Security_LockDatabaseIdleSeconds},
+ {QS("security/lockdatabaseminimize"), Config::Security_LockDatabaseMinimize},
+ {QS("security/lockdatabasescreenlock"), Config::Security_LockDatabaseScreenLock},
+ {QS("security/relockautotype"), Config::Security_RelockAutoType},
+ {QS("security/IconDownloadFallback"), Config::Security_IconDownloadFallback},
+ {QS("security/passwordscleartext"), Config::Security_PasswordsHidden},
+ {QS("security/passwordemptynodots"), Config::Security_PasswordEmptyPlaceholder},
+ {QS("security/HidePasswordPreviewPanel"), Config::Security_HidePasswordPreviewPanel},
+ {QS("security/passwordsrepeat"), Config::Security_PasswordsRepeatVisible},
+ {QS("security/hidenotes"), Config::Security_HideNotes},
+ {QS("security/resettouchid"), Config::Security_ResetTouchId},
+ {QS("security/resettouchidtimeout"), Config::Security_ResetTouchIdTimeout},
+ {QS("security/resettouchidscreenlock"), Config::Security_ResetTouchIdScreenlock},
+ {QS("KeeShare/Settings.own"), Config::KeeShare_Own},
+ {QS("KeeShare/Settings.foreign"), Config::KeeShare_Foreign},
+ {QS("KeeShare/Settings.active"), Config::KeeShare_Active},
+ {QS("SSHAgent"), Config::SSHAgent_Enabled},
+ {QS("SSHAgentOpenSSH"), Config::SSHAgent_UseOpenSSH},
+ {QS("SSHAuthSockOverride"), Config::SSHAgent_AuthSockOverride},
+ {QS("generator/LowerCase"), Config::PasswordGenerator_LowerCase},
+ {QS("generator/UpperCase"), Config::PasswordGenerator_UpperCase},
+ {QS("generator/Numbers"), Config::PasswordGenerator_Numbers},
+ {QS("generator/EASCII"), Config::PasswordGenerator_EASCII},
+ {QS("generator/AdvancedMode"), Config::PasswordGenerator_AdvancedMode},
+ {QS("generator/SpecialChars"), Config::PasswordGenerator_SpecialChars},
+ {QS("generator/AdditionalChars"), Config::PasswordGenerator_AdditionalChars},
+ {QS("generator/Braces"), Config::PasswordGenerator_Braces},
+ {QS("generator/Punctuation"), Config::PasswordGenerator_Punctuation},
+ {QS("generator/Quotes"), Config::PasswordGenerator_Quotes},
+ {QS("generator/Dashes"), Config::PasswordGenerator_Dashes},
+ {QS("generator/Math"), Config::PasswordGenerator_Math},
+ {QS("generator/Logograms"), Config::PasswordGenerator_Logograms},
+ {QS("generator/ExcludedChars"), Config::PasswordGenerator_ExcludedChars},
+ {QS("generator/ExcludeAlike"), Config::PasswordGenerator_ExcludeAlike},
+ {QS("generator/EnsureEvery"), Config::PasswordGenerator_EnsureEvery},
+ {QS("generator/Length"), Config::PasswordGenerator_Length},
+ {QS("generator/WordCount"), Config::PasswordGenerator_WordCount},
+ {QS("generator/WordSeparator"), Config::PasswordGenerator_WordSeparator},
+ {QS("generator/WordList"), Config::PasswordGenerator_WordList},
+ {QS("generator/WordCase"), Config::PasswordGenerator_WordCase},
+ {QS("generator/Type"), Config::PasswordGenerator_Type},
+ {QS("QtErrorMessageShown"), Config::Messages_Qt55CompatibilityWarning},
+ {QS("GUI/HidePasswords"), Config::Deleted},
+ {QS("GUI/DarkTrayIcon"), Config::Deleted}};
+
+/**
+ * Migrate settings from previous versions.
+ */
+void Config::migrate()
{
- const auto keys = deprecationMap.keys();
- for (const auto& setting : keys) {
+ int previousVersion = m_settings->value("ConfigVersion").toInt();
+ if (CONFIG_VERSION <= previousVersion) {
+ return;
+ }
+
+ // Update renamed keys and drop obsolete keys
+ for (const auto& setting : deprecationMap.keys()) {
+ QVariant value;
if (m_settings->contains(setting)) {
- if (!deprecationMap.value(setting).isEmpty()) {
- // Add entry with new name and old entry's value
- m_settings->setValue(deprecationMap.value(setting), m_settings->value(setting));
+ if (setting == QS("IgnoreGroupExpansion") || setting == QS("security/passwordsrepeat")
+ || setting == QS("security/passwordscleartext") || setting == QS("security/passwordemptynodots")) {
+ // Keep user's original setting for boolean settings whose meanings were reversed
+ value = !m_settings->value(setting).toBool();
+ } else {
+ value = m_settings->value(setting);
}
m_settings->remove(setting);
+ } else if (m_localSettings && m_localSettings->contains(setting)) {
+ value = m_localSettings->value(setting);
+ m_localSettings->remove(setting);
+ } else {
+ continue;
+ }
+
+ if (deprecationMap[setting] == Config::Deleted) {
+ continue;
}
+
+ set(deprecationMap[setting], value);
}
- // > 2.3.4
- if (m_settings->value("AutoSaveAfterEveryChange").toBool()) {
- m_settings->setValue("AutoSaveOnExit", true);
+ // Move local settings to separate file
+ if (m_localSettings) {
+ for (const auto& setting : asConst(configStrings)) {
+ if (setting.type == Local && m_settings->contains(setting.name)) {
+ m_localSettings->setValue(setting.name, m_settings->value(setting.name));
+ m_settings->remove(setting.name);
+ }
+ }
}
- // Setting defaults for 'hide window on copy' behavior, keeping the user's original setting
- if (m_settings->value("HideWindowOnCopy").isNull()) {
- m_settings->setValue("HideWindowOnCopy", m_settings->value("MinimizeOnCopy").toBool());
- m_settings->setValue("MinimizeOnCopy", true);
+ // Detailed version migrations
+
+ // pre 2.6.0 (no versioned configs)
+ if (previousVersion < 1) {
+
+ // 2.3.4
+ if (get(AutoSaveAfterEveryChange).toBool()) {
+ set(AutoSaveOnExit, true);
+ }
+
+ // Setting defaults for 'hide window on copy' behavior, keeping the user's original setting
+ if (get(HideWindowOnCopy).isNull()) {
+ set(HideWindowOnCopy, get(MinimizeOnCopy).toBool());
+ set(MinimizeOnCopy, true);
+ }
+
+ // Reset database columns if upgrading from pre 2.6.0
+ remove(GUI_ListViewState);
}
+
+ m_settings->setValue("ConfigVersion", CONFIG_VERSION);
+ sync();
}
Config::Config(const QString& fileName, QObject* parent)
@@ -130,108 +428,65 @@ Config::Config(const QString& fileName, QObject* parent)
Config::Config(QObject* parent)
: QObject(parent)
{
- // Check if portable config is present. If not, find it in user's directory
- QString portablePath = QCoreApplication::applicationDirPath() + "/keepassxc.ini";
- if (QFile::exists(portablePath)) {
- init(portablePath);
- } else {
- QString userPath;
- QString homePath = QDir::homePath();
-
-#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
- // we can't use QStandardPaths on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME
- QByteArray env = qgetenv("XDG_CONFIG_HOME");
- if (env.isEmpty()) {
- userPath = homePath;
- userPath += "/.config";
- } else if (env[0] == '/') {
- userPath = QFile::decodeName(env);
- } else {
- userPath = homePath;
- userPath += '/';
- userPath += QFile::decodeName(env);
- }
+ // Check if we are running in portable mode, if so store the config files local to the app
+ auto portablePath = QCoreApplication::applicationDirPath().append("/%1");
+ if (QFile::exists(portablePath.arg(".portable"))) {
+ init(portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini"));
+ return;
+ }
+
+ QString configPath;
+ QString localConfigPath;
- userPath += "/keepassxc/";
+#if defined(Q_OS_WIN)
+ configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+ localConfigPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
+#elif defined(Q_OS_MACOS)
+ configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+ localConfigPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
#else
- userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
- // storageLocation() appends the application name ("/keepassxc") to the end
- userPath += "/";
+ // On case-sensitive Operating Systems, force use of lowercase app directories
+ configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc";
+ localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
#endif
+ configPath += "/keepassxc";
+ localConfigPath += "/keepassxc";
+
#ifdef QT_DEBUG
- userPath += "keepassxc_debug.ini";
-#else
- userPath += "keepassxc.ini";
+ configPath += "_debug";
+ localConfigPath += "_debug";
#endif
- init(userPath);
- }
+ configPath += ".ini";
+ localConfigPath += ".ini";
+
+ init(QDir::toNativeSeparators(configPath), QDir::toNativeSeparators(localConfigPath));
}
Config::~Config()
{
}
-void Config::init(const QString& fileName)
+void Config::init(const QString& configFileName, const QString& localConfigFileName)
{
- m_settings.reset(new QSettings(fileName, QSettings::IniFormat));
- upgrade();
- connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync);
+ // Upgrade from previous KeePassXC version which stores its config
+ // in AppData/Local on Windows instead of AppData/Roaming.
+ // Move file to correct location before continuing.
+ if (!localConfigFileName.isEmpty() && QFile::exists(localConfigFileName) && !QFile::exists(configFileName)) {
+ QDir().mkpath(QFileInfo(configFileName).absolutePath());
+ QFile::copy(localConfigFileName, configFileName);
+ QFile::remove(localConfigFileName);
+ QDir().rmdir(QFileInfo(localConfigFileName).absolutePath());
+ }
+
+ m_settings.reset(new QSettings(configFileName, QSettings::IniFormat));
+ if (!localConfigFileName.isEmpty() && configFileName != localConfigFileName) {
+ m_localSettings.reset(new QSettings(localConfigFileName, QSettings::IniFormat));
+ }
- m_defaults.insert("SingleInstance", true);
- m_defaults.insert("RememberLastDatabases", true);
- m_defaults.insert("NumberOfRememberedLastDatabases", 5);
- m_defaults.insert("RememberLastKeyFiles", true);
- m_defaults.insert("OpenPreviousDatabasesOnStartup", true);
- m_defaults.insert("AutoSaveAfterEveryChange", true);
- m_defaults.insert("AutoReloadOnChange", true);
- m_defaults.insert("AutoSaveOnExit", true);
- m_defaults.insert("BackupBeforeSave", false);
- m_defaults.insert("UseAtomicSaves", true);
- m_defaults.insert("SearchLimitGroup", false);
- m_defaults.insert("MinimizeOnOpenUrl", false);
- m_defaults.insert("HideWindowOnCopy", false);
- m_defaults.insert("MinimizeOnCopy", true);
- m_defaults.insert("MinimizeAfterUnlock", false);
- m_defaults.insert("DropToBackgroundOnCopy", false);
- m_defaults.insert("UseGroupIconOnEntryCreation", false);
- m_defaults.insert("AutoTypeEntryTitleMatch", true);
- m_defaults.insert("AutoTypeEntryURLMatch", true);
- m_defaults.insert("AutoTypeDelay", 25);
- m_defaults.insert("AutoTypeStartDelay", 500);
- m_defaults.insert("UseGroupIconOnEntryCreation", true);
- m_defaults.insert("IgnoreGroupExpansion", true);
- m_defaults.insert("FaviconDownloadTimeout", 10);
- m_defaults.insert("security/clearclipboard", true);
- m_defaults.insert("security/clearclipboardtimeout", 10);
- m_defaults.insert("security/clearsearch", true);
- m_defaults.insert("security/clearsearchtimeout", 5);
- m_defaults.insert("security/lockdatabaseidle", false);
- m_defaults.insert("security/lockdatabaseidlesec", 240);
- m_defaults.insert("security/lockdatabaseminimize", false);
- m_defaults.insert("security/lockdatabasescreenlock", true);
- m_defaults.insert("security/passwordsrepeat", false);
- m_defaults.insert("security/passwordscleartext", false);
- m_defaults.insert("security/passwordemptynodots", true);
- m_defaults.insert("security/HidePasswordPreviewPanel", true);
- m_defaults.insert("security/autotypeask", true);
- m_defaults.insert("security/IconDownloadFallback", false);
- m_defaults.insert("security/resettouchid", false);
- m_defaults.insert("security/resettouchidtimeout", 30);
- m_defaults.insert("security/resettouchidscreenlock", true);
- m_defaults.insert("GUI/Language", "system");
- m_defaults.insert("GUI/HideToolbar", false);
- m_defaults.insert("GUI/MovableToolbar", false);
- m_defaults.insert("GUI/ToolButtonStyle", Qt::ToolButtonIconOnly);
- m_defaults.insert("GUI/ShowTrayIcon", false);
- m_defaults.insert("GUI/DarkTrayIcon", false);
- m_defaults.insert("GUI/MinimizeToTray", false);
- m_defaults.insert("GUI/MinimizeOnClose", false);
- m_defaults.insert("GUI/HideUsernames", false);
- m_defaults.insert("GUI/HidePasswords", true);
- m_defaults.insert("GUI/AdvancedSettings", false);
- m_defaults.insert("GUI/MonospaceNotes", false);
+ migrate();
+ connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync);
}
Config* Config::instance()
@@ -245,13 +500,17 @@ Config* Config::instance()
void Config::createConfigFromFile(const QString& file)
{
- Q_ASSERT(!m_instance);
+ if (m_instance) {
+ delete m_instance;
+ }
m_instance = new Config(file, qApp);
}
void Config::createTempFileInstance()
{
- Q_ASSERT(!m_instance);
+ if (m_instance) {
+ delete m_instance;
+ }
auto* tmpFile = new QTemporaryFile();
bool openResult = tmpFile->open();
Q_ASSERT(openResult);
@@ -259,3 +518,5 @@ void Config::createTempFileInstance()
m_instance = new Config(tmpFile->fileName(), qApp);
tmpFile->setParent(m_instance);
}
+
+#undef QS
diff --git a/src/core/Config.h b/src/core/Config.h
index d65b3256b..9363873c9 100644
--- a/src/core/Config.h
+++ b/src/core/Config.h
@@ -1,6 +1,6 @@
/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,6 +19,7 @@
#ifndef KEEPASSX_CONFIG_H
#define KEEPASSX_CONFIG_H
+#include <QPointer>
#include <QScopedPointer>
#include <QVariant>
@@ -31,11 +32,167 @@ class Config : public QObject
public:
Q_DISABLE_COPY(Config)
+ enum ConfigKey
+ {
+ SingleInstance,
+ RememberLastDatabases,
+ NumberOfRememberedLastDatabases,
+ RememberLastKeyFiles,
+ OpenPreviousDatabasesOnStartup,
+ AutoSaveAfterEveryChange,
+ AutoReloadOnChange,
+ AutoSaveOnExit,
+ BackupBeforeSave,
+ UseAtomicSaves,
+ SearchLimitGroup,
+ MinimizeOnOpenUrl,
+ HideWindowOnCopy,
+ MinimizeOnCopy,
+ MinimizeAfterUnlock,
+ DropToBackgroundOnCopy,
+ UseGroupIconOnEntryCreation,
+ AutoTypeEntryTitleMatch,
+ AutoTypeEntryURLMatch,
+ AutoTypeDelay,
+ AutoTypeStartDelay,
+ GlobalAutoTypeKey,
+ GlobalAutoTypeModifiers,
+ TrackNonDataChanges,
+ FaviconDownloadTimeout,
+ UpdateCheckMessageShown,
+ UseTouchID,
+
+ LastDatabases,
+ LastKeyFiles,
+ LastChallengeResponse,
+ LastActiveDatabase,
+ LastOpenedDatabases,
+ LastDir,
+ LastAttachmentDir,
+
+ GUI_Language,
+ GUI_HideToolbar,
+ GUI_MovableToolbar,
+ GUI_HidePreviewPanel,
+ GUI_ToolButtonStyle,
+ GUI_ShowTrayIcon,
+ GUI_TrayIconAppearance,
+ GUI_MinimizeToTray,
+ GUI_MinimizeOnStartup,
+ GUI_MinimizeOnClose,
+ GUI_HideUsernames,
+ GUI_AdvancedSettings,
+ GUI_MonospaceNotes,
+ GUI_ApplicationTheme,
+ GUI_CompactMode,
+ GUI_CheckForUpdates,
+ GUI_CheckForUpdatesIncludeBetas,
+
+ GUI_MainWindowGeometry,
+ GUI_MainWindowState,
+ GUI_ListViewState,
+ GUI_SearchViewState,
+ GUI_PreviewSplitterState,
+ GUI_SplitterState,
+ GUI_AutoTypeSelectDialogSize,
+ GUI_CheckForUpdatesNextCheck,
+
+ Security_ClearClipboard,
+ Security_ClearClipboardTimeout,
+ Security_ClearSearch,
+ Security_ClearSearchTimeout,
+ Security_HideNotes,
+ Security_LockDatabaseIdle,
+ Security_LockDatabaseIdleSeconds,
+ Security_LockDatabaseMinimize,
+ Security_LockDatabaseScreenLock,
+ Security_RelockAutoType,
+ Security_PasswordsRepeatVisible,
+ Security_PasswordsHidden,
+ Security_PasswordEmptyPlaceholder,
+ Security_HidePasswordPreviewPanel,
+ Security_AutoTypeAsk,
+ Security_IconDownloadFallback,
+ Security_ResetTouchId,
+ Security_ResetTouchIdTimeout,
+ Security_ResetTouchIdScreenlock,
+
+ Browser_Enabled,
+ Browser_ShowNotification,
+ Browser_BestMatchOnly,
+ Browser_UnlockDatabase,
+ Browser_MatchUrlScheme,
+ Browser_SortByUsername,
+ Browser_SupportBrowserProxy,
+ Browser_UseCustomProxy,
+ Browser_CustomProxyLocation,
+ Browser_UpdateBinaryPath,
+ Browser_AllowExpiredCredentials,
+ Browser_AlwaysAllowAccess,
+ Browser_AlwaysAllowUpdate,
+ Browser_HttpAuthPermission,
+ Browser_SearchInAllDatabases,
+ Browser_SupportKphFields,
+ Browser_NoMigrationPrompt,
+ Browser_UseCustomBrowser,
+ Browser_CustomBrowserType,
+ Browser_CustomBrowserLocation,
+#ifdef QT_DEBUG
+ Browser_CustomExtensionId,
+#endif
+
+ SSHAgent_Enabled,
+ SSHAgent_UseOpenSSH,
+ SSHAgent_AuthSockOverride,
+
+ FdoSecrets_Enabled,
+ FdoSecrets_ShowNotification,
+ FdoSecrets_NoConfirmDeleteItem,
+
+ KeeShare_QuietSuccess,
+ KeeShare_Own,
+ KeeShare_Foreign,
+ KeeShare_Active,
+ KeeShare_LastDir,
+ KeeShare_LastKeyDir,
+ KeeShare_LastShareDir,
+
+ PasswordGenerator_LowerCase,
+ PasswordGenerator_UpperCase,
+ PasswordGenerator_Numbers,
+ PasswordGenerator_EASCII,
+ PasswordGenerator_AdvancedMode,
+ PasswordGenerator_SpecialChars,
+ PasswordGenerator_AdditionalChars,
+ PasswordGenerator_Braces,
+ PasswordGenerator_Punctuation,
+ PasswordGenerator_Quotes,
+ PasswordGenerator_Dashes,
+ PasswordGenerator_Math,
+ PasswordGenerator_Logograms,
+ PasswordGenerator_ExcludedChars,
+ PasswordGenerator_ExcludeAlike,
+ PasswordGenerator_EnsureEvery,
+ PasswordGenerator_Length,
+ PasswordGenerator_WordCount,
+ PasswordGenerator_WordSeparator,
+ PasswordGenerator_WordList,
+ PasswordGenerator_WordCase,
+ PasswordGenerator_Type,
+
+ Messages_NoLegacyKeyFileWarning,
+ Messages_Qt55CompatibilityWarning,
+ Messages_HidePreReleaseWarning,
+
+ // Special internal value
+ Deleted
+ };
+
~Config() override;
- QVariant get(const QString& key);
- QVariant get(const QString& key, const QVariant& defaultValue);
+ QVariant get(ConfigKey key);
QString getFileName();
- void set(const QString& key, const QVariant& value);
+ void set(ConfigKey key, const QVariant& value);
+ void remove(ConfigKey key);
bool hasAccessError();
void sync();
void resetToDefaults();
@@ -45,17 +202,18 @@ public:
static void createTempFileInstance();
signals:
- void changed(const QString& key);
+ void changed(ConfigKey key);
private:
- Config(const QString& fileName, QObject* parent);
+ Config(const QString& fileName, QObject* parent = nullptr);
explicit Config(QObject* parent);
- void init(const QString& fileName);
- void upgrade();
+ void init(const QString& configFileName, const QString& localConfigFileName = "");
+ void migrate();
- static Config* m_instance;
+ static QPointer<Config> m_instance;
QScopedPointer<QSettings> m_settings;
+ QScopedPointer<QSettings> m_localSettings;
QHash<QString, QVariant> m_defaults;
};
diff --git a/src/core/CsvParser.cpp b/src/core/CsvParser.cpp
index 7e4929481..adda56e49 100644
--- a/src/core/CsvParser.cpp
+++ b/src/core/CsvParser.cpp
@@ -67,15 +67,17 @@ bool CsvParser::parse(QFile* device)
appendStatusMsg(QObject::tr("NULL device"), true);
return false;
}
- if (!readFile(device))
+ if (!readFile(device)) {
return false;
+ }
return parseFile();
}
bool CsvParser::readFile(QFile* device)
{
- if (device->isOpen())
+ if (device->isOpen()) {
device->close();
+ }
device->open(QIODevice::ReadOnly);
if (!Tools::readAllFromDevice(device, m_array)) {
@@ -86,8 +88,9 @@ bool CsvParser::readFile(QFile* device)
m_array.replace("\r\n", "\n");
m_array.replace("\r", "\n");
- if (0 == m_array.size())
+ if (0 == m_array.size()) {
appendStatusMsg(QObject::tr("file empty").append("\n"));
+ }
m_isFileLoaded = true;
}
return m_isFileLoaded;
@@ -124,8 +127,9 @@ bool CsvParser::parseFile()
{
parseRecord();
while (!m_isEof) {
- if (!skipEndline())
+ if (!skipEndline()) {
appendStatusMsg(QObject::tr("malformed string"), true);
+ }
m_currRow++;
m_currCol = 1;
parseRecord();
@@ -146,15 +150,17 @@ void CsvParser::parseRecord()
getChar(m_ch);
} while (isSeparator(m_ch) && !m_isEof);
- if (!m_isEof)
+ if (!m_isEof) {
ungetChar();
+ }
if (isEmptyRow(row)) {
row.clear();
return;
}
m_table.push_back(row);
- if (m_maxCols < row.size())
+ if (m_maxCols < row.size()) {
m_maxCols = row.size();
+ }
m_currCol++;
}
@@ -163,10 +169,11 @@ void CsvParser::parseField(CsvRow& row)
QString field;
peek(m_ch);
if (!isTerminator(m_ch)) {
- if (isQualifier(m_ch))
+ if (isQualifier(m_ch)) {
parseQuoted(field);
- else
+ } else {
parseSimple(field);
+ }
}
row.push_back(field);
}
@@ -179,8 +186,9 @@ void CsvParser::parseSimple(QString& s)
s.append(c);
getChar(c);
}
- if (!m_isEof)
+ if (!m_isEof) {
ungetChar();
+ }
}
void CsvParser::parseQuoted(QString& s)
@@ -189,17 +197,20 @@ void CsvParser::parseQuoted(QString& s)
getChar(m_ch);
parseEscaped(s);
// getChar(m_ch);
- if (!isQualifier(m_ch))
+ if (!isQualifier(m_ch)) {
appendStatusMsg(QObject::tr("missing closing quote"), true);
+ }
}
void CsvParser::parseEscaped(QString& s)
{
parseEscapedText(s);
- while (processEscapeMark(s, m_ch))
+ while (processEscapeMark(s, m_ch)) {
parseEscapedText(s);
- if (!m_isEof)
+ }
+ if (!m_isEof) {
ungetChar();
+ }
}
void CsvParser::parseEscapedText(QString& s)
@@ -233,8 +244,9 @@ bool CsvParser::processEscapeMark(QString& s, QChar c)
}
} else {
// double quote syntax, e.g. ""
- if (!isQualifier(c))
+ if (!isQualifier(c)) {
return false;
+ }
peek(c2);
if (!m_isEof) { // not EOF, can read one char
if (isQualifier(c2)) {
@@ -294,16 +306,18 @@ void CsvParser::ungetChar()
void CsvParser::peek(QChar& c)
{
getChar(c);
- if (!m_isEof)
+ if (!m_isEof) {
ungetChar();
+ }
}
bool CsvParser::isQualifier(const QChar& c) const
{
- if (true == m_isBackslashSyntax && (c != m_qualifier))
+ if (true == m_isBackslashSyntax && (c != m_qualifier)) {
return (c == '\\');
- else
+ } else {
return (c == m_qualifier);
+ }
}
bool CsvParser::isComment()
@@ -312,12 +326,13 @@ bool CsvParser::isComment()
QChar c2;
qint64 pos = m_ts.pos();
- do
+ do {
getChar(c2);
- while ((isSpace(c2) || isTab(c2)) && (!m_isEof));
+ } while ((isSpace(c2) || isTab(c2)) && (!m_isEof));
- if (c2 == m_comment)
+ if (c2 == m_comment) {
result = true;
+ }
m_ts.seek(pos);
return result;
}
@@ -330,9 +345,11 @@ bool CsvParser::isText(QChar c) const
bool CsvParser::isEmptyRow(const CsvRow& row) const
{
CsvRow::const_iterator it = row.constBegin();
- for (; it != row.constEnd(); ++it)
- if (((*it) != "\n") && ((*it) != ""))
+ for (; it != row.constEnd(); ++it) {
+ if (((*it) != "\n") && ((*it) != "")) {
return false;
+ }
+ }
return true;
}
diff --git a/src/core/CustomData.cpp b/src/core/CustomData.cpp
index f009176a0..b421ec3a0 100644
--- a/src/core/CustomData.cpp
+++ b/src/core/CustomData.cpp
@@ -20,7 +20,10 @@
#include "core/Global.h"
-const QString CustomData::LastModified = "_LAST_MODIFIED";
+const QString CustomData::LastModified = QStringLiteral("_LAST_MODIFIED");
+const QString CustomData::Created = QStringLiteral("_CREATED");
+const QString CustomData::BrowserKeyPrefix = QStringLiteral("KPXC_BROWSER_");
+const QString CustomData::BrowserLegacyKeyPrefix = QStringLiteral("Public Key: ");
CustomData::CustomData(QObject* parent)
: QObject(parent)
@@ -127,6 +130,11 @@ QDateTime CustomData::getLastModified() const
return {};
}
+bool CustomData::isProtectedCustomData(const QString& key) const
+{
+ return key.startsWith(CustomData::BrowserKeyPrefix) || key.startsWith(CustomData::Created);
+}
+
bool CustomData::operator==(const CustomData& other) const
{
return (m_data == other.m_data);
diff --git a/src/core/CustomData.h b/src/core/CustomData.h
index 126d4d84e..93b78c46a 100644
--- a/src/core/CustomData.h
+++ b/src/core/CustomData.h
@@ -43,10 +43,14 @@ public:
int dataSize() const;
void copyDataFrom(const CustomData* other);
QDateTime getLastModified() const;
+ bool isProtectedCustomData(const QString& key) const;
bool operator==(const CustomData& other) const;
bool operator!=(const CustomData& other) const;
static const QString LastModified;
+ static const QString Created;
+ static const QString BrowserKeyPrefix;
+ static const QString BrowserLegacyKeyPrefix;
signals:
void customDataModified();
diff --git a/src/core/Database.cpp b/src/core/Database.cpp
index fcd48f1e2..a315adf96 100644
--- a/src/core/Database.cpp
+++ b/src/core/Database.cpp
@@ -18,6 +18,7 @@
#include "Database.h"
+#include "core/AsyncTask.h"
#include "core/Clock.h"
#include "core/FileWatcher.h"
#include "core/Group.h"
@@ -48,7 +49,7 @@ Database::Database()
{
setRootGroup(new Group());
rootGroup()->setUuid(QUuid::createUuid());
- rootGroup()->setName(tr("Root", "Root group name"));
+ rootGroup()->setName(tr("Passwords", "Root group name"));
m_modifiedTimer.setSingleShot(true);
s_uuidMap.insert(m_uuid, this);
@@ -57,7 +58,7 @@ Database::Database()
connect(&m_modifiedTimer, SIGNAL(timeout()), SIGNAL(databaseModified()));
connect(this, SIGNAL(databaseOpened()), SLOT(updateCommonUsernames()));
connect(this, SIGNAL(databaseSaved()), SLOT(updateCommonUsernames()));
- connect(m_fileWatcher, SIGNAL(fileChanged()), SIGNAL(databaseFileChanged()));
+ connect(m_fileWatcher, &FileWatcher::fileChanged, this, &Database::databaseFileChanged);
m_modified = false;
m_emitModified = true;
@@ -111,13 +112,6 @@ bool Database::open(QSharedPointer<const CompositeKey> key, QString* error, bool
*/
bool Database::open(const QString& filePath, QSharedPointer<const CompositeKey> key, QString* error, bool readOnly)
{
- if (isInitialized() && m_modified) {
- emit databaseDiscarded();
- }
-
- m_initialized = false;
- setEmitModified(false);
-
QFile dbFile(filePath);
if (!dbFile.exists()) {
if (error) {
@@ -126,17 +120,22 @@ bool Database::open(const QString& filePath, QSharedPointer<const CompositeKey>
return false;
}
- if (!readOnly && !dbFile.open(QIODevice::ReadWrite)) {
- readOnly = true;
- }
-
- if (!dbFile.isOpen() && !dbFile.open(QIODevice::ReadOnly)) {
+ // Don't autodetect read-only mode, as it triggers an upstream bug.
+ // See https://github.com/keepassxreboot/keepassxc/issues/803
+ // if (!readOnly && !dbFile.open(QIODevice::ReadWrite)) {
+ // readOnly = true;
+ // }
+ //
+ // if (!dbFile.isOpen() && !dbFile.open(QIODevice::ReadOnly)) {
+ if (!dbFile.open(QIODevice::ReadOnly)) {
if (error) {
*error = tr("Unable to open file %1.").arg(filePath);
}
return false;
}
+ setEmitModified(false);
+
KeePass2Reader reader;
if (!reader.readDatabase(&dbFile, std::move(key), this)) {
if (error) {
@@ -151,7 +150,6 @@ bool Database::open(const QString& filePath, QSharedPointer<const CompositeKey>
markAsClean();
- m_initialized = true;
emit databaseOpened();
m_fileWatcher->start(canonicalFilePath(), 30, 1);
setEmitModified(true);
@@ -159,6 +157,15 @@ bool Database::open(const QString& filePath, QSharedPointer<const CompositeKey>
return true;
}
+bool Database::isSaving()
+{
+ bool locked = m_saveMutex.tryLock();
+ if (locked) {
+ m_saveMutex.unlock();
+ }
+ return !locked;
+}
+
/**
* Save the database to the current file path. It is an error to call this function
* if no file path has been defined.
@@ -201,6 +208,25 @@ bool Database::save(QString* error, bool atomic, bool backup)
*/
bool Database::saveAs(const QString& filePath, QString* error, bool atomic, bool backup)
{
+ // Disallow overlapping save operations
+ if (isSaving()) {
+ if (error) {
+ *error = tr("Database save is already in progress.");
+ }
+ return false;
+ }
+
+ // Never save an uninitialized database
+ if (!isInitialized()) {
+ if (error) {
+ *error = tr("Could not save, database has not been initialized!");
+ }
+ return false;
+ }
+
+ // Prevent destructive operations while saving
+ QMutexLocker locker(&m_saveMutex);
+
if (filePath == m_data.filePath) {
// Disallow saving to the same file if read-only
if (m_data.isReadOnly) {
@@ -225,12 +251,17 @@ bool Database::saveAs(const QString& filePath, QString* error, bool atomic, bool
setReadOnly(false);
m_fileWatcher->stop();
- auto& canonicalFilePath = QFileInfo::exists(filePath) ? QFileInfo(filePath).canonicalFilePath() : filePath;
- bool ok = performSave(canonicalFilePath, error, atomic, backup);
+ QFileInfo fileInfo(filePath);
+ auto realFilePath = fileInfo.exists() ? fileInfo.canonicalFilePath() : fileInfo.absoluteFilePath();
+ bool isNewFile = !QFile::exists(realFilePath);
+ bool ok = AsyncTask::runAndWaitForFuture([&] { return performSave(realFilePath, error, atomic, backup); });
if (ok) {
markAsClean();
setFilePath(filePath);
- m_fileWatcher->start(canonicalFilePath, 30, 1);
+ if (isNewFile) {
+ QFile::setPermissions(realFilePath, QFile::ReadUser | QFile::WriteUser);
+ }
+ m_fileWatcher->start(realFilePath, 30, 1);
} else {
// Saving failed, don't rewatch file since it does not represent our database
markAsModified();
@@ -277,6 +308,7 @@ bool Database::performSave(const QString& filePath, QString* error, bool atomic,
}
// Delete the original db and move the temp file in place
+ auto perms = QFile::permissions(filePath);
QFile::remove(filePath);
// Note: call into the QFile rename instead of QTemporaryFile
@@ -285,6 +317,7 @@ bool Database::performSave(const QString& filePath, QString* error, bool atomic,
if (tempFile.QFile::rename(filePath)) {
// successfully saved the database
tempFile.setAutoRemove(false);
+ QFile::setPermissions(filePath, perms);
return true;
} else if (!backup || !restoreDatabase(filePath)) {
// Failed to copy new database in place, and
@@ -317,8 +350,8 @@ bool Database::writeDatabase(QIODevice* device, QString* error)
}
PasswordKey oldTransformedKey;
- if (m_data.hasKey) {
- oldTransformedKey.setHash(m_data.transformedMasterKey->rawKey());
+ if (m_data.key->isEmpty()) {
+ oldTransformedKey.setHash(m_data.transformedDatabaseKey->rawKey());
}
KeePass2Writer writer;
@@ -333,7 +366,7 @@ bool Database::writeDatabase(QIODevice* device, QString* error)
return false;
}
- QByteArray newKey = m_data.transformedMasterKey->rawKey();
+ QByteArray newKey = m_data.transformedDatabaseKey->rawKey();
Q_ASSERT(!newKey.isEmpty());
Q_ASSERT(newKey != oldTransformedKey.rawKey());
if (newKey.isEmpty() || newKey == oldTransformedKey.rawKey()) {
@@ -389,30 +422,29 @@ bool Database::import(const QString& xmlExportPath, QString* error)
void Database::releaseData()
{
- s_uuidMap.remove(m_uuid);
- m_uuid = QUuid();
+ // Prevent data release while saving
+ QMutexLocker locker(&m_saveMutex);
if (m_modified) {
emit databaseDiscarded();
}
+ setEmitModified(false);
+ m_modified = false;
+ m_modifiedTimer.stop();
+
+ s_uuidMap.remove(m_uuid);
+ m_uuid = QUuid();
+
m_data.clear();
+ m_metadata->clear();
- if (m_rootGroup && m_rootGroup->parent() == this) {
- delete m_rootGroup;
- }
- if (m_metadata) {
- delete m_metadata;
- }
- if (m_fileWatcher) {
- delete m_fileWatcher;
- }
+ setRootGroup(new Group());
+
+ m_fileWatcher->stop();
m_deletedObjects.clear();
m_commonUsernames.clear();
-
- m_initialized = false;
- m_modified = false;
}
/**
@@ -428,9 +460,12 @@ bool Database::backupDatabase(const QString& filePath)
auto match = re.match(filePath);
auto backupFilePath = filePath;
+ auto perms = QFile::permissions(filePath);
backupFilePath = backupFilePath.replace(re, "") + ".old" + match.captured(1);
QFile::remove(backupFilePath);
- return QFile::copy(filePath, backupFilePath);
+ bool res = QFile::copy(filePath, backupFilePath);
+ QFile::setPermissions(backupFilePath, perms);
+ return res;
}
/**
@@ -446,11 +481,13 @@ bool Database::restoreDatabase(const QString& filePath)
static auto re = QRegularExpression("^(.*?)(\\.[^.]+)?$");
auto match = re.match(filePath);
+ auto perms = QFile::permissions(filePath);
auto backupFilePath = match.captured(1) + ".old" + match.captured(2);
// Only try to restore if the backup file actually exists
if (QFile::exists(backupFilePath)) {
QFile::remove(filePath);
return QFile::copy(backupFilePath, filePath);
+ QFile::setPermissions(filePath, perms);
}
return false;
}
@@ -466,22 +503,14 @@ void Database::setReadOnly(bool readOnly)
}
/**
- * Returns true if database has been fully decrypted and populated, i.e. if
- * it's not just an empty default instance.
+ * Returns true if the database key exists, has subkeys, and the
+ * root group exists
*
* @return true if database has been fully initialized
*/
bool Database::isInitialized() const
{
- return m_initialized;
-}
-
-/**
- * @param initialized true to mark database as initialized
- */
-void Database::setInitialized(bool initialized)
-{
- m_initialized = initialized;
+ return m_data.key && !m_data.key->isEmpty() && m_rootGroup;
}
Group* Database::rootGroup()
@@ -505,7 +534,7 @@ void Database::setRootGroup(Group* group)
{
Q_ASSERT(group);
- if (isInitialized() && m_modified) {
+ if (isInitialized() && isModified()) {
emit databaseDiscarded();
}
@@ -633,9 +662,9 @@ Database::CompressionAlgorithm Database::compressionAlgorithm() const
return m_data.compressionAlgorithm;
}
-QByteArray Database::transformedMasterKey() const
+QByteArray Database::transformedDatabaseKey() const
{
- return m_data.transformedMasterKey->rawKey();
+ return m_data.transformedDatabaseKey->rawKey();
}
QByteArray Database::challengeResponseKey() const
@@ -645,10 +674,11 @@ QByteArray Database::challengeResponseKey() const
bool Database::challengeMasterSeed(const QByteArray& masterSeed)
{
+ m_keyError.clear();
if (m_data.key) {
m_data.masterSeed->setHash(masterSeed);
QByteArray response;
- bool ok = m_data.key->challenge(masterSeed, response);
+ bool ok = m_data.key->challenge(masterSeed, response, &m_keyError);
if (ok && !response.isEmpty()) {
m_data.challengeResponseKey->setHash(response);
} else if (ok && response.isEmpty()) {
@@ -689,11 +719,11 @@ bool Database::setKey(const QSharedPointer<const CompositeKey>& key,
bool transformKey)
{
Q_ASSERT(!m_data.isReadOnly);
+ m_keyError.clear();
if (!key) {
m_data.key.reset();
- m_data.transformedMasterKey.reset(new PasswordKey());
- m_data.hasKey = false;
+ m_data.transformedDatabaseKey.reset(new PasswordKey());
return true;
}
@@ -702,59 +732,37 @@ bool Database::setKey(const QSharedPointer<const CompositeKey>& key,
Q_ASSERT(!m_data.kdf->seed().isEmpty());
}
- PasswordKey oldTransformedMasterKey;
- if (m_data.hasKey) {
- oldTransformedMasterKey.setHash(m_data.transformedMasterKey->rawKey());
+ PasswordKey oldTransformedDatabaseKey;
+ if (m_data.key && !m_data.key->isEmpty()) {
+ oldTransformedDatabaseKey.setHash(m_data.transformedDatabaseKey->rawKey());
}
- QByteArray transformedMasterKey;
+ QByteArray transformedDatabaseKey;
if (!transformKey) {
- transformedMasterKey = QByteArray(oldTransformedMasterKey.rawKey());
- } else if (!key->transform(*m_data.kdf, transformedMasterKey)) {
+ transformedDatabaseKey = QByteArray(oldTransformedDatabaseKey.rawKey());
+ } else if (!key->transform(*m_data.kdf, transformedDatabaseKey, &m_keyError)) {
return false;
}
m_data.key = key;
- if (!transformedMasterKey.isEmpty()) {
- m_data.transformedMasterKey->setHash(transformedMasterKey);
+ if (!transformedDatabaseKey.isEmpty()) {
+ m_data.transformedDatabaseKey->setHash(transformedDatabaseKey);
}
- m_data.hasKey = true;
if (updateChangedTime) {
- m_metadata->setMasterKeyChanged(Clock::currentDateTimeUtc());
+ m_metadata->setDatabaseKeyChanged(Clock::currentDateTimeUtc());
}
- if (oldTransformedMasterKey.rawKey() != m_data.transformedMasterKey->rawKey()) {
+ if (oldTransformedDatabaseKey.rawKey() != m_data.transformedDatabaseKey->rawKey()) {
markAsModified();
}
return true;
}
-bool Database::hasKey() const
+QString Database::keyError()
{
- return m_data.hasKey;
-}
-
-bool Database::verifyKey(const QSharedPointer<CompositeKey>& key) const
-{
- Q_ASSERT(hasKey());
-
- if (!m_data.challengeResponseKey->rawKey().isEmpty()) {
- QByteArray result;
-
- if (!key->challenge(m_data.masterSeed->rawKey(), result)) {
- // challenge failed, (YubiKey?) removed?
- return false;
- }
-
- if (m_data.challengeResponseKey->rawKey() != result) {
- // wrong response from challenged device(s)
- return false;
- }
- }
-
- return (m_data.key->rawKey() == key->rawKey());
+ return m_keyError;
}
QVariantMap& Database::publicCustomData()
@@ -840,9 +848,9 @@ void Database::setEmitModified(bool value)
m_emitModified = value;
}
-bool Database::isModified() const
+bool Database::isModified(bool includeNonDataChanges) const
{
- return m_modified;
+ return m_modified || (includeNonDataChanges && m_hasNonDataChange);
}
void Database::markAsModified()
@@ -859,11 +867,17 @@ void Database::markAsClean()
bool emitSignal = m_modified;
m_modified = false;
m_modifiedTimer.stop();
+ m_hasNonDataChange = false;
if (emitSignal) {
emit databaseSaved();
}
}
+void Database::markNonDataChange()
+{
+ m_hasNonDataChange = true;
+}
+
/**
* @param uuid UUID of the database
* @return pointer to the database or nullptr if no such database exists
@@ -894,16 +908,16 @@ bool Database::changeKdf(const QSharedPointer<Kdf>& kdf)
Q_ASSERT(!m_data.isReadOnly);
kdf->randomizeSeed();
- QByteArray transformedMasterKey;
+ QByteArray transformedDatabaseKey;
if (!m_data.key) {
m_data.key = QSharedPointer<CompositeKey>::create();
}
- if (!m_data.key->transform(*kdf, transformedMasterKey)) {
+ if (!m_data.key->transform(*kdf, transformedDatabaseKey)) {
return false;
}
setKdf(kdf);
- m_data.transformedMasterKey->setHash(transformedMasterKey);
+ m_data.transformedDatabaseKey->setHash(transformedDatabaseKey);
markAsModified();
return true;
diff --git a/src/core/Database.h b/src/core/Database.h
index d3d88e7d2..86d7e0898 100644
--- a/src/core/Database.h
+++ b/src/core/Database.h
@@ -21,6 +21,7 @@
#include <QDateTime>
#include <QHash>
+#include <QMutex>
#include <QPointer>
#include <QScopedPointer>
#include <QTimer>
@@ -80,11 +81,11 @@ public:
void releaseData();
bool isInitialized() const;
- void setInitialized(bool initialized);
- bool isModified() const;
+ bool isModified(bool includeNonDataChanges = false) const;
void setEmitModified(bool value);
bool isReadOnly() const;
void setReadOnly(bool readOnly);
+ bool isSaving();
QUuid uuid() const;
QString filePath() const;
@@ -113,15 +114,14 @@ public:
QList<QString> commonUsernames();
- bool hasKey() const;
QSharedPointer<const CompositeKey> key() const;
bool setKey(const QSharedPointer<const CompositeKey>& key,
bool updateChangedTime = true,
bool updateTransformSalt = false,
bool transformKey = true);
+ QString keyError();
QByteArray challengeResponseKey() const;
bool challengeMasterSeed(const QByteArray& masterSeed);
- bool verifyKey(const QSharedPointer<CompositeKey>& key) const;
const QUuid& cipher() const;
void setCipher(const QUuid& cipher);
Database::CompressionAlgorithm compressionAlgorithm() const;
@@ -130,7 +130,7 @@ public:
QSharedPointer<Kdf> kdf() const;
void setKdf(QSharedPointer<Kdf> kdf);
bool changeKdf(const QSharedPointer<Kdf>& kdf);
- QByteArray transformedMasterKey() const;
+ QByteArray transformedDatabaseKey() const;
static Database* databaseByUuid(const QUuid& uuid);
@@ -138,6 +138,7 @@ public slots:
void markAsModified();
void markAsClean();
void updateCommonUsernames(int topN = 10);
+ void markNonDataChange();
signals:
void filePathChanged(const QString& oldPath, const QString& newPath);
@@ -163,10 +164,9 @@ private:
CompressionAlgorithm compressionAlgorithm = CompressionGZip;
QScopedPointer<PasswordKey> masterSeed;
- QScopedPointer<PasswordKey> transformedMasterKey;
+ QScopedPointer<PasswordKey> transformedDatabaseKey;
QScopedPointer<PasswordKey> challengeResponseKey;
- bool hasKey = false;
QSharedPointer<const CompositeKey> key;
QSharedPointer<Kdf> kdf = QSharedPointer<AesKdf>::create(true);
@@ -174,7 +174,7 @@ private:
DatabaseData()
: masterSeed(new PasswordKey())
- , transformedMasterKey(new PasswordKey())
+ , transformedDatabaseKey(new PasswordKey())
, challengeResponseKey(new PasswordKey())
{
kdf->randomizeSeed();
@@ -185,10 +185,9 @@ private:
filePath.clear();
masterSeed.reset();
- transformedMasterKey.reset();
+ transformedDatabaseKey.reset();
challengeResponseKey.reset();
- hasKey = false;
key.reset();
kdf.reset();
@@ -208,10 +207,12 @@ private:
QPointer<Group> m_rootGroup;
QList<DeletedObject> m_deletedObjects;
QTimer m_modifiedTimer;
+ QMutex m_saveMutex;
QPointer<FileWatcher> m_fileWatcher;
- bool m_initialized = false;
bool m_modified = false;
bool m_emitModified;
+ bool m_hasNonDataChange = false;
+ QString m_keyError;
QList<QString> m_commonUsernames;
diff --git a/src/core/DatabaseIcons.cpp b/src/core/DatabaseIcons.cpp
index 6219d41f5..7b4499026 100644
--- a/src/core/DatabaseIcons.cpp
+++ b/src/core/DatabaseIcons.cpp
@@ -17,138 +17,109 @@
#include "DatabaseIcons.h"
-#include "core/FilePath.h"
+#include "core/Config.h"
+#include "core/Global.h"
+#include "core/Resources.h"
+#include "gui/MainWindow.h"
+
+#include <QDir>
+#include <QImageReader>
+#include <QPainter>
+#include <QPixmapCache>
DatabaseIcons* DatabaseIcons::m_instance(nullptr);
-const int DatabaseIcons::IconCount(69);
-const int DatabaseIcons::ExpiredIconIndex(45);
-const int DatabaseIcons::SharedIconIndex(1);
-const int DatabaseIcons::UnsharedIconIndex(45);
-
-// clang-format off
-const char* const DatabaseIcons::m_indexToName[] = {
- "C00_Password.png",
- "C01_Package_Network.png",
- "C02_MessageBox_Warning.png",
- "C03_Server.png",
- "C04_Klipper.png",
- "C05_Edu_Languages.png",
- "C06_KCMDF.png",
- "C07_Kate.png",
- "C08_Socket.png",
- "C09_Identity.png",
- "C10_Kontact.png",
- "C11_Camera.png",
- "C12_IRKickFlash.png",
- "C13_KGPG_Key3.png",
- "C14_Laptop_Power.png",
- "C15_Scanner.png",
- "C16_Mozilla_Firebird.png",
- "C17_CDROM_Unmount.png",
- "C18_Display.png",
- "C19_Mail_Generic.png",
- "C20_Misc.png",
- "C21_KOrganizer.png",
- "C22_ASCII.png",
- "C23_Icons.png",
- "C24_Connect_Established.png",
- "C25_Folder_Mail.png",
- "C26_FileSave.png",
- "C27_NFS_Unmount.png",
- "C28_QuickTime.png",
- "C29_KGPG_Term.png",
- "C30_Konsole.png",
- "C31_FilePrint.png",
- "C32_FSView.png",
- "C33_Run.png",
- "C34_Configure.png",
- "C35_KRFB.png",
- "C36_Ark.png",
- "C37_KPercentage.png",
- "C38_Samba_Unmount.png",
- "C39_History.png",
- "C40_Mail_Find.png",
- "C41_VectorGfx.png",
- "C42_KCMMemory.png",
- "C43_EditTrash.png",
- "C44_KNotes.png",
- "C45_Cancel.png",
- "C46_Help.png",
- "C47_KPackage.png",
- "C48_Folder.png",
- "C49_Folder_Blue_Open.png",
- "C50_Folder_Tar.png",
- "C51_Decrypted.png",
- "C52_Encrypted.png",
- "C53_Apply.png",
- "C54_Signature.png",
- "C55_Thumbnail.png",
- "C56_KAddressBook.png",
- "C57_View_Text.png",
- "C58_KGPG.png",
- "C59_Package_Development.png",
- "C60_KFM_Home.png",
- "C61_Services.png",
- "C62_Tux.png",
- "C63_Feather.png",
- "C64_Apple.png",
- "C65_W.png",
- "C66_Money.png",
- "C67_Certificate.png",
- "C68_BlackBerry.png"
-};
-// clang-format on
-
-QImage DatabaseIcons::icon(int index)
+
+namespace
{
- if (index < 0 || index >= IconCount) {
- qWarning("DatabaseIcons::icon: invalid icon index %d", index);
- return QImage();
- }
+ const QString iconDir = QStringLiteral(":/icons/database/");
+ QStringList iconList;
+
+ const QString badgeDir = QStringLiteral(":/icons/badges/");
+ QStringList badgeList;
+} // namespace
+
+DatabaseIcons::DatabaseIcons()
+{
+ // Set the pixmap cache limit to 20 MB
+ QPixmapCache::setCacheLimit(20480);
- if (!m_iconCache[index].isNull()) {
- return m_iconCache[index];
- } else {
- QString iconPath = QString("icons/database/").append(m_indexToName[index]);
- QImage icon(filePath()->dataPath(iconPath));
+ iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name);
+ badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name);
- m_iconCache[index] = icon;
- return icon;
+ // Set this early and once to ensure consistent icon size until app restart
+ m_compactMode = config()->get(Config::GUI_CompactMode).toBool();
+}
+
+DatabaseIcons* DatabaseIcons::instance()
+{
+ if (!m_instance) {
+ m_instance = new DatabaseIcons();
}
+
+ return m_instance;
}
-QPixmap DatabaseIcons::iconPixmap(int index)
+QPixmap DatabaseIcons::icon(int index, IconSize size)
{
- if (index < 0 || index >= IconCount) {
- qWarning("DatabaseIcons::iconPixmap: invalid icon index %d", index);
- return QPixmap();
+ if (index < 0 || index >= count()) {
+ qWarning("DatabaseIcons::icon: invalid icon index %d", index);
+ return {};
+ }
+
+ auto cacheKey = QString::number(index);
+ auto icon = m_iconCache.value(cacheKey);
+ if (icon.isNull()) {
+ icon.addFile(iconDir + iconList[index]);
+ icon.addPixmap(icon.pixmap(iconSize(IconSize::Default)));
+ icon.addPixmap(icon.pixmap(iconSize(IconSize::Medium)));
+ icon.addPixmap(icon.pixmap(iconSize(IconSize::Large)));
+ m_iconCache.insert(cacheKey, icon);
}
- QPixmap pixmap;
+ return icon.pixmap(iconSize(size));
+}
+
+QPixmap DatabaseIcons::applyBadge(const QPixmap& basePixmap, Badges badgeIndex)
+{
+ const auto cacheKey = QStringLiteral("badgedicon-%1-%2").arg(basePixmap.cacheKey()).arg(badgeIndex);
+ QPixmap pixmap = basePixmap;
+ if (badgeIndex < 0 || badgeIndex >= badgeList.size()) {
+ qWarning("DatabaseIcons: Out-of-range badge index given to applyBadge: %d", badgeIndex);
+ } else if (!QPixmapCache::find(cacheKey, &pixmap)) {
+ int baseSize = basePixmap.width();
+ int badgeSize =
+ baseSize <= iconSize(IconSize::Default) * basePixmap.devicePixelRatio() ? baseSize * 0.6 : baseSize * 0.5;
+ QPoint badgePos(baseSize - badgeSize, baseSize - badgeSize);
+ badgePos /= basePixmap.devicePixelRatio();
+
+ QImageReader reader(badgeDir + badgeList[badgeIndex]);
+ reader.setScaledSize({badgeSize, badgeSize});
+ auto badge = QPixmap::fromImageReader(&reader);
+ badge.setDevicePixelRatio(basePixmap.devicePixelRatio());
+
+ QPainter painter(&pixmap);
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ painter.drawPixmap(badgePos, badge);
- if (!QPixmapCache::find(m_pixmapCacheKeys[index], &pixmap)) {
- pixmap = QPixmap::fromImage(icon(index));
- m_pixmapCacheKeys[index] = QPixmapCache::insert(pixmap);
+ QPixmapCache::insert(cacheKey, pixmap);
}
return pixmap;
}
-DatabaseIcons::DatabaseIcons()
+int DatabaseIcons::count()
{
- Q_STATIC_ASSERT(sizeof(m_indexToName) == IconCount * sizeof(m_indexToName[0]));
-
- m_iconCache.reserve(IconCount);
- m_iconCache.resize(IconCount);
- m_pixmapCacheKeys.reserve(IconCount);
- m_pixmapCacheKeys.resize(IconCount);
+ return iconList.size();
}
-DatabaseIcons* DatabaseIcons::instance()
+int DatabaseIcons::iconSize(IconSize size)
{
- if (!m_instance) {
- m_instance = new DatabaseIcons();
+ switch (size) {
+ case Medium:
+ return m_compactMode ? 26 : 30;
+ case Large:
+ return m_compactMode ? 30 : 36;
+ default:
+ return m_compactMode ? 16 : 22;
}
-
- return m_instance;
}
diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h
index ecd38fd8a..2abb8a485 100644
--- a/src/core/DatabaseIcons.h
+++ b/src/core/DatabaseIcons.h
@@ -18,32 +18,35 @@
#ifndef KEEPASSX_DATABASEICONS_H
#define KEEPASSX_DATABASEICONS_H
-#include <QImage>
-#include <QPixmap>
-#include <QPixmapCache>
-#include <QVector>
+#include "core/Global.h"
+#include <QIcon>
class DatabaseIcons
{
public:
- QImage icon(int index);
- QPixmap iconPixmap(int index);
-
static DatabaseIcons* instance();
- static const int IconCount;
- static const int ExpiredIconIndex;
- static const int SharedIconIndex;
- static const int UnsharedIconIndex;
+ static constexpr int ExpiredIconIndex = 45;
+
+ enum Badges
+ {
+ ShareActive = 0,
+ ShareInactive,
+ Expired
+ };
+
+ QPixmap icon(int index, IconSize size = IconSize::Default);
+ QPixmap applyBadge(const QPixmap& basePixmap, Badges badgeIndex);
+ int count();
+
+ int iconSize(IconSize size);
private:
DatabaseIcons();
static DatabaseIcons* m_instance;
-
- static const char* const m_indexToName[];
- QVector<QImage> m_iconCache;
- QVector<QPixmapCache::Key> m_pixmapCacheKeys;
+ QHash<QString, QIcon> m_iconCache;
+ bool m_compactMode;
Q_DISABLE_COPY(DatabaseIcons)
};
diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp
index 1b05b9e6e..65a271c2e 100644
--- a/src/core/Entry.cpp
+++ b/src/core/Entry.cpp
@@ -163,7 +163,7 @@ const QString Entry::uuidToHex() const
QImage Entry::icon() const
{
if (m_data.customIcon.isNull()) {
- return databaseIcons()->icon(m_data.iconNumber);
+ return databaseIcons()->icon(m_data.iconNumber).toImage();
} else {
Q_ASSERT(database());
@@ -175,27 +175,23 @@ QImage Entry::icon() const
}
}
-QPixmap Entry::iconPixmap() const
+QPixmap Entry::iconPixmap(IconSize size) const
{
+ QPixmap icon(size, size);
if (m_data.customIcon.isNull()) {
- return databaseIcons()->iconPixmap(m_data.iconNumber);
+ icon = databaseIcons()->icon(m_data.iconNumber, size);
+ } else {
+ Q_ASSERT(database());
+ if (database()) {
+ icon = database()->metadata()->customIconPixmap(m_data.customIcon, size);
+ }
}
- Q_ASSERT(database());
- if (database()) {
- return database()->metadata()->customIconPixmap(m_data.customIcon);
+ if (isExpired()) {
+ icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired);
}
- return QPixmap();
-}
-QPixmap Entry::iconScaledPixmap() const
-{
- if (m_data.customIcon.isNull()) {
- // built-in icons are 16x16 so don't need to be scaled
- return databaseIcons()->iconPixmap(m_data.iconNumber);
- }
- Q_ASSERT(database());
- return database()->metadata()->customIconScaledPixmap(m_data.customIcon);
+ return icon;
}
int Entry::iconNumber() const
@@ -208,12 +204,12 @@ const QUuid& Entry::iconUuid() const
return m_data.customIcon;
}
-QColor Entry::foregroundColor() const
+QString Entry::foregroundColor() const
{
return m_data.foregroundColor;
}
-QColor Entry::backgroundColor() const
+QString Entry::backgroundColor() const
{
return m_data.backgroundColor;
}
@@ -336,6 +332,23 @@ QString Entry::attribute(const QString& key) const
return m_attributes->value(key);
}
+int Entry::size() const
+{
+ int size = 0;
+ const QRegularExpression delimiter(",|:|;");
+
+ size += this->attributes()->attributesSize();
+ size += this->autoTypeAssociations()->associationsSize();
+ size += this->attachments()->attachmentsSize();
+ size += this->customData()->dataSize();
+ const QStringList tags = this->tags().split(delimiter, QString::SkipEmptyParts);
+ for (const QString& tag : tags) {
+ size += tag.toUtf8().size();
+ }
+
+ return size;
+}
+
bool Entry::isExpired() const
{
return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc();
@@ -508,14 +521,14 @@ void Entry::setIcon(const QUuid& uuid)
}
}
-void Entry::setForegroundColor(const QColor& color)
+void Entry::setForegroundColor(const QString& colorStr)
{
- set(m_data.foregroundColor, color);
+ set(m_data.foregroundColor, colorStr);
}
-void Entry::setBackgroundColor(const QColor& color)
+void Entry::setBackgroundColor(const QString& colorStr)
{
- set(m_data.backgroundColor, color);
+ set(m_data.backgroundColor, colorStr);
}
void Entry::setOverrideUrl(const QString& url)
@@ -650,6 +663,7 @@ void Entry::truncateHistory()
return;
}
+ bool changed = false;
int histMaxItems = db->metadata()->historyMaxItems();
if (histMaxItems > -1) {
int historyCount = 0;
@@ -661,6 +675,7 @@ void Entry::truncateHistory()
if (historyCount > histMaxItems) {
delete entry;
i.remove();
+ changed = true;
}
}
}
@@ -672,29 +687,26 @@ void Entry::truncateHistory()
QMutableListIterator<Entry*> i(m_history);
i.toBack();
- const QRegularExpression delimiter(",|:|;");
while (i.hasPrevious()) {
Entry* historyItem = i.previous();
// don't calculate size if it's already above the maximum
if (size <= histMaxSize) {
- size += historyItem->attributes()->attributesSize();
- size += historyItem->autoTypeAssociations()->associationsSize();
- size += historyItem->attachments()->attachmentsSize();
- size += historyItem->customData()->dataSize();
- const QStringList tags = historyItem->tags().split(delimiter, QString::SkipEmptyParts);
- for (const QString& tag : tags) {
- size += tag.toUtf8().size();
- }
+ size += historyItem->size();
foundAttachments += historyItem->attachments()->values();
}
if (size > histMaxSize) {
delete historyItem;
i.remove();
+ changed = true;
}
}
}
+
+ if (changed) {
+ emit entryModified();
+ }
}
bool Entry::equals(const Entry* other, CompareItemOptions options) const
@@ -779,8 +791,9 @@ Entry* Entry::clone(CloneFlags flags) const
entry->m_data.timeInfo.setLocationChanged(now);
}
- if (flags & CloneRenameTitle)
+ if (flags & CloneRenameTitle) {
entry->setTitle(tr("%1 - Clone").arg(entry->title()));
+ }
entry->setUpdateTimeinfo(true);
@@ -893,6 +906,10 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe
return url();
}
return resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1);
+ case PlaceholderType::DbDir: {
+ QFileInfo fileInfo(database()->filePath());
+ return fileInfo.absoluteDir().absolutePath();
+ }
case PlaceholderType::UrlWithoutScheme:
case PlaceholderType::UrlScheme:
case PlaceholderType::UrlHost:
@@ -915,11 +932,84 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe
}
case PlaceholderType::Reference:
return resolveReferencePlaceholderRecursive(placeholder, maxDepth);
+ case PlaceholderType::DateTimeSimple:
+ case PlaceholderType::DateTimeYear:
+ case PlaceholderType::DateTimeMonth:
+ case PlaceholderType::DateTimeDay:
+ case PlaceholderType::DateTimeHour:
+ case PlaceholderType::DateTimeMinute:
+ case PlaceholderType::DateTimeSecond:
+ case PlaceholderType::DateTimeUtcSimple:
+ case PlaceholderType::DateTimeUtcYear:
+ case PlaceholderType::DateTimeUtcMonth:
+ case PlaceholderType::DateTimeUtcDay:
+ case PlaceholderType::DateTimeUtcHour:
+ case PlaceholderType::DateTimeUtcMinute:
+ case PlaceholderType::DateTimeUtcSecond:
+ return resolveMultiplePlaceholdersRecursive(resolveDateTimePlaceholder(typeOfPlaceholder), maxDepth - 1);
}
return placeholder;
}
+QString Entry::resolveDateTimePlaceholder(Entry::PlaceholderType placeholderType) const
+{
+ QDateTime time = Clock::currentDateTime();
+ QDateTime time_utc = Clock::currentDateTimeUtc();
+ QString date_formatted{};
+
+ switch (placeholderType) {
+ case PlaceholderType::DateTimeSimple:
+ date_formatted = time.toString("yyyyMMddhhmmss");
+ break;
+ case PlaceholderType::DateTimeYear:
+ date_formatted = time.toString("yyyy");
+ break;
+ case PlaceholderType::DateTimeMonth:
+ date_formatted = time.toString("MM");
+ break;
+ case PlaceholderType::DateTimeDay:
+ date_formatted = time.toString("dd");
+ break;
+ case PlaceholderType::DateTimeHour:
+ date_formatted = time.toString("hh");
+ break;
+ case PlaceholderType::DateTimeMinute:
+ date_formatted = time.toString("mm");
+ break;
+ case PlaceholderType::DateTimeSecond:
+ date_formatted = time.toString("ss");
+ break;
+ case PlaceholderType::DateTimeUtcSimple:
+ date_formatted = time_utc.toString("yyyyMMddhhmmss");
+ break;
+ case PlaceholderType::DateTimeUtcYear:
+ date_formatted = time_utc.toString("yyyy");
+ break;
+ case PlaceholderType::DateTimeUtcMonth:
+ date_formatted = time_utc.toString("MM");
+ break;
+ case PlaceholderType::DateTimeUtcDay:
+ date_formatted = time_utc.toString("dd");
+ break;
+ case PlaceholderType::DateTimeUtcHour:
+ date_formatted = time_utc.toString("hh");
+ break;
+ case PlaceholderType::DateTimeUtcMinute:
+ date_formatted = time_utc.toString("mm");
+ break;
+ case PlaceholderType::DateTimeUtcSecond:
+ date_formatted = time_utc.toString("ss");
+ break;
+ default: {
+ Q_ASSERT_X(false, "Entry::resolveDateTimePlaceholder", "Bad DateTime placeholder type");
+ break;
+ }
+ }
+
+ return date_formatted;
+}
+
QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const
{
if (maxDepth <= 0) {
@@ -979,6 +1069,20 @@ QString Entry::referenceFieldValue(EntryReferenceType referenceType) const
return QString();
}
+void Entry::moveUp()
+{
+ if (m_group) {
+ m_group->moveEntryUp(this);
+ }
+}
+
+void Entry::moveDown()
+{
+ if (m_group) {
+ m_group->moveEntryDown(this);
+ }
+}
+
Group* Entry::group()
{
return m_group;
@@ -1003,9 +1107,8 @@ void Entry::setGroup(Group* group)
m_group->database()->addDeletedObject(m_uuid);
// copy custom icon to the new database
- if (!iconUuid().isNull() && group->database()
- && m_group->database()->metadata()->containsCustomIcon(iconUuid())
- && !group->database()->metadata()->containsCustomIcon(iconUuid())) {
+ if (!iconUuid().isNull() && group->database() && m_group->database()->metadata()->hasCustomIcon(iconUuid())
+ && !group->database()->metadata()->hasCustomIcon(iconUuid())) {
group->database()->metadata()->addCustomIcon(iconUuid(), icon());
}
}
@@ -1075,8 +1178,9 @@ QString Entry::resolvePlaceholder(const QString& placeholder) const
QString Entry::resolveUrlPlaceholder(const QString& str, Entry::PlaceholderType placeholderType) const
{
- if (str.isEmpty())
+ if (str.isEmpty()) {
return QString();
+ }
const QUrl qurl(str);
switch (placeholderType) {
@@ -1139,7 +1243,22 @@ Entry::PlaceholderType Entry::placeholderType(const QString& placeholder) const
{QStringLiteral("{URL:FRAGMENT}"), PlaceholderType::UrlFragment},
{QStringLiteral("{URL:USERINFO}"), PlaceholderType::UrlUserInfo},
{QStringLiteral("{URL:USERNAME}"), PlaceholderType::UrlUserName},
- {QStringLiteral("{URL:PASSWORD}"), PlaceholderType::UrlPassword}};
+ {QStringLiteral("{URL:PASSWORD}"), PlaceholderType::UrlPassword},
+ {QStringLiteral("{DT_SIMPLE}"), PlaceholderType::DateTimeSimple},
+ {QStringLiteral("{DT_YEAR}"), PlaceholderType::DateTimeYear},
+ {QStringLiteral("{DT_MONTH}"), PlaceholderType::DateTimeMonth},
+ {QStringLiteral("{DT_DAY}"), PlaceholderType::DateTimeDay},
+ {QStringLiteral("{DT_HOUR}"), PlaceholderType::DateTimeHour},
+ {QStringLiteral("{DT_MINUTE}"), PlaceholderType::DateTimeMinute},
+ {QStringLiteral("{DT_SECOND}"), PlaceholderType::DateTimeSecond},
+ {QStringLiteral("{DT_UTC_SIMPLE}"), PlaceholderType::DateTimeUtcSimple},
+ {QStringLiteral("{DT_UTC_YEAR}"), PlaceholderType::DateTimeUtcYear},
+ {QStringLiteral("{DT_UTC_MONTH}"), PlaceholderType::DateTimeUtcMonth},
+ {QStringLiteral("{DT_UTC_DAY}"), PlaceholderType::DateTimeUtcDay},
+ {QStringLiteral("{DT_UTC_HOUR}"), PlaceholderType::DateTimeUtcHour},
+ {QStringLiteral("{DT_UTC_MINUTE}"), PlaceholderType::DateTimeUtcMinute},
+ {QStringLiteral("{DT_UTC_SECOND}"), PlaceholderType::DateTimeUtcSecond},
+ {QStringLiteral("{DB_DIR}"), PlaceholderType::DbDir}};
return placeholders.value(placeholder.toUpper(), PlaceholderType::Unknown);
}
diff --git a/src/core/Entry.h b/src/core/Entry.h
index 49ec6f027..cbaf3e2c0 100644
--- a/src/core/Entry.h
+++ b/src/core/Entry.h
@@ -19,7 +19,6 @@
#ifndef KEEPASSX_ENTRY_H
#define KEEPASSX_ENTRY_H
-#include <QColor>
#include <QImage>
#include <QMap>
#include <QPixmap>
@@ -32,6 +31,7 @@
#include "core/CustomData.h"
#include "core/EntryAttachments.h"
#include "core/EntryAttributes.h"
+#include "core/Global.h"
#include "core/TimeInfo.h"
class Database;
@@ -57,8 +57,8 @@ struct EntryData
{
int iconNumber;
QUuid customIcon;
- QColor foregroundColor;
- QColor backgroundColor;
+ QString foregroundColor;
+ QString backgroundColor;
QString overrideUrl;
QString tags;
bool autoTypeEnabled;
@@ -82,12 +82,11 @@ public:
const QUuid& uuid() const;
const QString uuidToHex() const;
QImage icon() const;
- QPixmap iconPixmap() const;
- QPixmap iconScaledPixmap() const;
+ QPixmap iconPixmap(IconSize size = IconSize::Default) const;
int iconNumber() const;
const QUuid& iconUuid() const;
- QColor foregroundColor() const;
- QColor backgroundColor() const;
+ QString foregroundColor() const;
+ QString backgroundColor() const;
QString overrideUrl() const;
QString tags() const;
const TimeInfo& timeInfo() const;
@@ -108,6 +107,7 @@ public:
QString attribute(const QString& key) const;
QString totp() const;
QSharedPointer<Totp::Settings> totpSettings() const;
+ int size() const;
bool hasTotp() const;
bool isExpired() const;
@@ -132,8 +132,8 @@ public:
void setUuid(const QUuid& uuid);
void setIcon(int iconNumber);
void setIcon(const QUuid& uuid);
- void setForegroundColor(const QColor& color);
- void setBackgroundColor(const QColor& color);
+ void setForegroundColor(const QString& color);
+ void setBackgroundColor(const QString& color);
void setOverrideUrl(const QString& url);
void setTags(const QString& tags);
void setTimeInfo(const TimeInfo& timeInfo);
@@ -191,7 +191,22 @@ public:
UrlUserName,
UrlPassword,
Reference,
- CustomAttribute
+ CustomAttribute,
+ DateTimeSimple,
+ DateTimeYear,
+ DateTimeMonth,
+ DateTimeDay,
+ DateTimeHour,
+ DateTimeMinute,
+ DateTimeSecond,
+ DateTimeUtcSimple,
+ DateTimeUtcYear,
+ DateTimeUtcMonth,
+ DateTimeUtcDay,
+ DateTimeUtcHour,
+ DateTimeUtcMinute,
+ DateTimeUtcSecond,
+ DbDir
};
/**
@@ -207,6 +222,7 @@ public:
QString resolveMultiplePlaceholders(const QString& str) const;
QString resolvePlaceholder(const QString& str) const;
QString resolveUrlPlaceholder(const QString& str, PlaceholderType placeholderType) const;
+ QString resolveDateTimePlaceholder(PlaceholderType placeholderType) const;
PlaceholderType placeholderType(const QString& placeholder) const;
QString resolveUrl(const QString& url) const;
@@ -217,6 +233,9 @@ public:
void beginUpdate();
bool endUpdate();
+ void moveUp();
+ void moveDown();
+
Group* group();
const Group* group() const;
void setGroup(Group* group);
diff --git a/src/core/EntrySearcher.cpp b/src/core/EntrySearcher.cpp
index 21b86a7a1..3b9472c6f 100644
--- a/src/core/EntrySearcher.cpp
+++ b/src/core/EntrySearcher.cpp
@@ -21,8 +21,9 @@
#include "core/Group.h"
#include "core/Tools.h"
-EntrySearcher::EntrySearcher(bool caseSensitive)
+EntrySearcher::EntrySearcher(bool caseSensitive, bool skipProtected)
: m_caseSensitive(caseSensitive)
+ , m_skipProtected(skipProtected)
, m_termParser(R"re(([-!*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re")
// Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string
{
@@ -54,7 +55,6 @@ QList<Entry*> EntrySearcher::search(const QList<SearchTerm>& searchTerms, const
QList<Entry*> EntrySearcher::search(const QString& searchString, const Group* baseGroup, bool forceSearch)
{
Q_ASSERT(baseGroup);
-
parseSearchTerms(searchString);
return repeat(baseGroup, forceSearch);
}
@@ -73,7 +73,7 @@ QList<Entry*> EntrySearcher::repeat(const Group* baseGroup, bool forceSearch)
QList<Entry*> results;
for (const auto group : baseGroup->groupsRecursive(true)) {
if (forceSearch || group->resolveSearchingEnabled()) {
- for (auto* entry : group->entries()) {
+ for (const auto entry : group->entries()) {
if (searchEntryImpl(entry)) {
results.append(entry);
}
@@ -137,19 +137,23 @@ void EntrySearcher::setCaseSensitive(bool state)
m_caseSensitive = state;
}
-bool EntrySearcher::isCaseSensitive()
+bool EntrySearcher::isCaseSensitive() const
{
return m_caseSensitive;
}
-bool EntrySearcher::searchEntryImpl(Entry* entry)
+bool EntrySearcher::searchEntryImpl(const Entry* entry)
{
// Pre-load in case they are needed
auto attributes_keys = entry->attributes()->customKeys();
auto attributes = QStringList(attributes_keys + entry->attributes()->values(attributes_keys));
auto attachments = QStringList(entry->attachments()->keys());
+ // Build a group hierarchy to allow searching for e.g. /group1/subgroup*
+ auto hierarchy = entry->group()->hierarchy().join('/').prepend("/");
- bool found;
+ // By default, empty term matches every entry.
+ // However when skipping protected fields, we will recject everything instead
+ bool found = !m_skipProtected;
for (const auto& term : m_searchTerms) {
switch (term.field) {
case Field::Title:
@@ -159,6 +163,9 @@ bool EntrySearcher::searchEntryImpl(Entry* entry)
found = term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch();
break;
case Field::Password:
+ if (m_skipProtected) {
+ continue;
+ }
found = term.regex.match(entry->resolvePlaceholder(entry->password())).hasMatch();
break;
case Field::Url:
@@ -174,13 +181,20 @@ bool EntrySearcher::searchEntryImpl(Entry* entry)
found = !attachments.filter(term.regex).empty();
break;
case Field::AttributeValue:
- // skip protected attributes
- if (entry->attributes()->isProtected(term.word)) {
+ if (m_skipProtected && entry->attributes()->isProtected(term.word)) {
continue;
}
found = entry->attributes()->contains(term.word)
&& term.regex.match(entry->attributes()->value(term.word)).hasMatch();
break;
+ case Field::Group:
+ // Match against the full hierarchy if the word contains a '/' otherwise just the group name
+ if (term.word.contains('/')) {
+ found = term.regex.match(hierarchy).hasMatch();
+ } else {
+ found = term.regex.match(entry->group()->name()).hasMatch();
+ }
+ break;
default:
// Terms without a specific field try to match title, username, url, and notes
found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch()
@@ -189,13 +203,18 @@ bool EntrySearcher::searchEntryImpl(Entry* entry)
|| term.regex.match(entry->notes()).hasMatch();
}
- // Short circuit if we failed to match or we matched and are excluding this term
- if ((!found && !term.exclude) || (found && term.exclude)) {
+ // negate the result if exclude:
+ // * if found and not excluding, the entry matches
+ // * if didn't found but excluding, the entry also matches
+ found = (found && !term.exclude) || (!found && term.exclude);
+
+ // short circuit if we failed the match
+ if (!found) {
return false;
}
}
- return true;
+ return found;
}
void EntrySearcher::parseSearchTerms(const QString& searchString)
@@ -209,7 +228,8 @@ void EntrySearcher::parseSearchTerms(const QString& searchString)
{QStringLiteral("title"), Field::Title},
{QStringLiteral("u"), Field::Username}, // u: stands for username rather than url
{QStringLiteral("url"), Field::Url},
- {QStringLiteral("username"), Field::Username}};
+ {QStringLiteral("username"), Field::Username},
+ {QStringLiteral("group"), Field::Group}};
m_searchTerms.clear();
auto results = m_termParser.globalMatch(searchString);
diff --git a/src/core/EntrySearcher.h b/src/core/EntrySearcher.h
index 2300fcf29..d1b17557b 100644
--- a/src/core/EntrySearcher.h
+++ b/src/core/EntrySearcher.h
@@ -38,7 +38,8 @@ public:
Notes,
AttributeKV,
Attachment,
- AttributeValue
+ AttributeValue,
+ Group
};
struct SearchTerm
@@ -50,7 +51,7 @@ public:
bool exclude;
};
- explicit EntrySearcher(bool caseSensitive = false);
+ explicit EntrySearcher(bool caseSensitive = false, bool skipProtected = false);
QList<Entry*> search(const QList<SearchTerm>& searchTerms, const Group* baseGroup, bool forceSearch = false);
QList<Entry*> search(const QString& searchString, const Group* baseGroup, bool forceSearch = false);
@@ -61,13 +62,14 @@ public:
QList<Entry*> repeatEntries(const QList<Entry*>& entries);
void setCaseSensitive(bool state);
- bool isCaseSensitive();
+ bool isCaseSensitive() const;
private:
- bool searchEntryImpl(Entry* entry);
+ bool searchEntryImpl(const Entry* entry);
void parseSearchTerms(const QString& searchString);
bool m_caseSensitive;
+ bool m_skipProtected;
QRegularExpression m_termParser;
QList<SearchTerm> m_searchTerms;
diff --git a/src/core/FilePath.cpp b/src/core/FilePath.cpp
deleted file mode 100644
index 5b0322707..000000000
--- a/src/core/FilePath.cpp
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- * Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 or (at your option)
- * version 3 of the License.
- *
- * 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "FilePath.h"
-
-#include <QCoreApplication>
-#include <QDir>
-#include <QLibrary>
-
-#include "config-keepassx.h"
-#include "core/Config.h"
-#include "core/Global.h"
-
-FilePath* FilePath::m_instance(nullptr);
-
-QString FilePath::dataPath(const QString& name)
-{
- if (name.isEmpty() || name.startsWith('/')) {
- return m_dataPath + name;
- } else {
- return m_dataPath + "/" + name;
- }
-}
-
-QString FilePath::pluginPath(const QString& name)
-{
- QStringList pluginPaths;
-
- QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype");
- const QStringList buildDirEntryList = buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
- for (const QString& dir : buildDirEntryList) {
- pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir;
- }
-
- // for TestAutoType
- pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test";
-
-#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)
- pluginPaths << QCoreApplication::applicationDirPath() + "/../PlugIns";
-#endif
-
- pluginPaths << QCoreApplication::applicationDirPath();
-
- QString configuredPluginDir = KEEPASSX_PLUGIN_DIR;
- if (configuredPluginDir != ".") {
- if (QDir(configuredPluginDir).isAbsolute()) {
- pluginPaths << configuredPluginDir;
- } else {
- QString relativePluginDir =
- QString("%1/../%2").arg(QCoreApplication::applicationDirPath(), configuredPluginDir);
- pluginPaths << QDir(relativePluginDir).canonicalPath();
-
- QString absolutePluginDir = QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, configuredPluginDir);
- pluginPaths << QDir(absolutePluginDir).canonicalPath();
- }
- }
-
- QStringList dirFilter;
- dirFilter << QString("*%1*").arg(name);
-
- for (const QString& path : asConst(pluginPaths)) {
- const QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files);
-
- for (const QString& file : fileCandidates) {
- QString filePath = path + "/" + file;
-
- if (QLibrary::isLibrary(filePath)) {
- return filePath;
- }
- }
- }
-
- return QString();
-}
-
-QString FilePath::wordlistPath(const QString& name)
-{
- return dataPath("wordlists/" + name);
-}
-
-QIcon FilePath::applicationIcon()
-{
-#ifdef KEEPASSXC_DIST_SNAP
- return icon("apps", "keepassxc", false);
-#else
- return icon("apps", "keepassxc");
-#endif
-}
-
-QIcon FilePath::trayIcon()
-{
- bool darkIcon = useDarkIcon();
-
-#ifdef KEEPASSXC_DIST_SNAP
- return (darkIcon) ? icon("apps", "keepassxc-dark", false) : icon("apps", "keepassxc", false);
-#else
- return (darkIcon) ? icon("apps", "keepassxc-dark") : icon("apps", "keepassxc");
-#endif
-}
-
-QIcon FilePath::trayIconLocked()
-{
-#ifdef KEEPASSXC_DIST_SNAP
- return icon("apps", "keepassxc-locked", false);
-#else
- return icon("apps", "keepassxc-locked");
-#endif
-}
-
-QIcon FilePath::trayIconUnlocked()
-{
- bool darkIcon = useDarkIcon();
-
-#ifdef KEEPASSXC_DIST_SNAP
- return darkIcon ? icon("apps", "keepassxc-dark", false) : icon("apps", "keepassxc-unlocked", false);
-#else
- return darkIcon ? icon("apps", "keepassxc-dark") : icon("apps", "keepassxc-unlocked");
-#endif
-}
-
-QIcon FilePath::icon(const QString& category, const QString& name, bool fromTheme)
-{
- QString combinedName = category + "/" + name;
-
- QIcon icon = m_iconCache.value(combinedName);
-
- if (!icon.isNull()) {
- return icon;
- }
-
- if (fromTheme) {
- icon = QIcon::fromTheme(name);
- }
-
- if (icon.isNull()) {
- const QList<int> pngSizes = {16, 22, 24, 32, 48, 64, 128};
- QString filename;
- for (int size : pngSizes) {
- filename =
- QString("%1/icons/application/%2x%2/%3.png").arg(m_dataPath, QString::number(size), combinedName);
- if (QFile::exists(filename)) {
- icon.addFile(filename, QSize(size, size));
- }
- }
- filename = QString("%1/icons/application/scalable/%2.svg").arg(m_dataPath, combinedName);
- if (QFile::exists(filename)) {
- icon.addFile(filename);
- }
- }
-
- m_iconCache.insert(combinedName, icon);
-
- return icon;
-}
-
-QIcon FilePath::onOffIcon(const QString& category, const QString& name)
-{
- QString combinedName = category + "/" + name;
- QString cacheName = "onoff/" + combinedName;
-
- QIcon icon = m_iconCache.value(cacheName);
-
- if (!icon.isNull()) {
- return icon;
- }
-
- for (int i = 0; i < 2; i++) {
- QIcon::State state;
- QString stateName;
-
- if (i == 0) {
- state = QIcon::Off;
- stateName = "off";
- } else {
- state = QIcon::On;
- stateName = "on";
- }
-
- const QList<int> pngSizes = {16, 22, 24, 32, 48, 64, 128};
- QString filename;
- for (int size : pngSizes) {
- filename = QString("%1/icons/application/%2x%2/%3-%4.png")
- .arg(m_dataPath, QString::number(size), combinedName, stateName);
- if (QFile::exists(filename)) {
- icon.addFile(filename, QSize(size, size), QIcon::Normal, state);
- }
- }
- filename = QString("%1/icons/application/scalable/%2-%3.svg").arg(m_dataPath, combinedName, stateName);
- if (QFile::exists(filename)) {
- icon.addFile(filename, QSize(), QIcon::Normal, state);
- }
- }
-
- m_iconCache.insert(cacheName, icon);
-
- return icon;
-}
-
-FilePath::FilePath()
-{
- const QString appDirPath = QCoreApplication::applicationDirPath();
- bool isDataDirAbsolute = QDir::isAbsolutePath(KEEPASSX_DATA_DIR);
- Q_UNUSED(isDataDirAbsolute);
-
- if (false) {
- }
-#ifdef QT_DEBUG
- else if (testSetDir(QString(KEEPASSX_SOURCE_DIR) + "/share")) {
- }
-#endif
-#if defined(Q_OS_UNIX) && !(defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE))
- else if (isDataDirAbsolute && testSetDir(KEEPASSX_DATA_DIR)) {
- } else if (!isDataDirAbsolute && testSetDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR))) {
- } else if (!isDataDirAbsolute && testSetDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR))) {
- }
-#endif
-#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)
- else if (testSetDir(appDirPath + "/../Resources")) {
- }
-#endif
-#ifdef Q_OS_WIN
- else if (testSetDir(appDirPath + "/share")) {
- }
-#endif
- // Last ditch test when running in the build directory (mainly for travis tests)
- else if (testSetDir(QString(KEEPASSX_SOURCE_DIR) + "/share")) {
- }
-
- if (m_dataPath.isEmpty()) {
- qWarning("FilePath::DataPath: can't find data dir");
- } else {
- m_dataPath = QDir::cleanPath(m_dataPath);
- }
-}
-
-bool FilePath::testSetDir(const QString& dir)
-{
- if (QFile::exists(dir + "/icons/database/C00_Password.png")) {
- m_dataPath = dir;
- return true;
- } else {
- return false;
- }
-}
-
-bool FilePath::useDarkIcon()
-{
- return config()->get("GUI/DarkTrayIcon").toBool();
-}
-
-FilePath* FilePath::instance()
-{
- if (!m_instance) {
- m_instance = new FilePath();
- }
-
- return m_instance;
-}
diff --git a/src/core/FileWatcher.cpp b/src/core/FileWatcher.cpp
index 0bc5e3444..2d37734aa 100644
--- a/src/core/FileWatcher.cpp
+++ b/src/core/FileWatcher.cpp
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,30 +18,28 @@
#include "FileWatcher.h"
#include "core/AsyncTask.h"
-#include "core/Clock.h"
#include <QCryptographicHash>
-#include <QFileInfo>
#ifdef Q_OS_LINUX
#include <sys/vfs.h>
#endif
-namespace
-{
- const int FileChangeDelay = 200;
-} // namespace
-
FileWatcher::FileWatcher(QObject* parent)
: QObject(parent)
{
connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(checkFileChanged()));
connect(&m_fileChecksumTimer, SIGNAL(timeout()), SLOT(checkFileChanged()));
- connect(&m_fileChangeDelayTimer, SIGNAL(timeout()), SIGNAL(fileChanged()));
+ connect(&m_fileChangeDelayTimer, &QTimer::timeout, this, [this] { emit fileChanged(m_filePath); });
m_fileChangeDelayTimer.setSingleShot(true);
m_fileIgnoreDelayTimer.setSingleShot(true);
}
+FileWatcher::~FileWatcher()
+{
+ stop();
+}
+
void FileWatcher::start(const QString& filePath, int checksumIntervalSeconds, int checksumSizeKibibytes)
{
stop();
@@ -82,6 +79,7 @@ void FileWatcher::stop()
}
m_filePath.clear();
m_fileChecksum.clear();
+ m_fileChecksumTimer.stop();
m_fileChangeDelayTimer.stop();
}
@@ -120,8 +118,7 @@ void FileWatcher::checkFileChanged()
// Prevent reentrance
m_ignoreFileChange = true;
- // Only trigger the change notice if there is a checksum mismatch
- auto checksum = calculateChecksum();
+ auto checksum = AsyncTask::runAndWaitForFuture([this]() -> QByteArray { return calculateChecksum(); });
if (checksum != m_fileChecksum) {
m_fileChecksum = checksum;
m_fileChangeDelayTimer.start(0);
@@ -132,205 +129,17 @@ void FileWatcher::checkFileChanged()
QByteArray FileWatcher::calculateChecksum()
{
- return AsyncTask::runAndWaitForFuture([this]() -> QByteArray {
- QFile file(m_filePath);
- if (file.open(QFile::ReadOnly)) {
- QCryptographicHash hash(QCryptographicHash::Sha256);
- if (m_fileChecksumSizeBytes > 0) {
- hash.addData(file.read(m_fileChecksumSizeBytes));
- } else {
- hash.addData(&file);
- }
- return hash.result();
- }
- // If we fail to open the file return the last known checksum, this
- // prevents unnecessary merge requests on intermittent network shares
- return m_fileChecksum;
- });
-}
-
-BulkFileWatcher::BulkFileWatcher(QObject* parent)
- : QObject(parent)
-{
- connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(handleFileChanged(QString)));
- connect(&m_fileWatcher, SIGNAL(directoryChanged(QString)), SLOT(handleDirectoryChanged(QString)));
- connect(&m_watchedFilesIgnoreTimer, SIGNAL(timeout()), this, SLOT(observeFileChanges()));
- connect(&m_pendingSignalsTimer, SIGNAL(timeout()), this, SLOT(emitSignals()));
- m_watchedFilesIgnoreTimer.setSingleShot(true);
- m_pendingSignalsTimer.setSingleShot(true);
-}
-
-void BulkFileWatcher::clear()
-{
- for (const QString& path : m_fileWatcher.files() + m_fileWatcher.directories()) {
- const QFileInfo info(path);
- m_fileWatcher.removePath(info.absoluteFilePath());
- m_fileWatcher.removePath(info.absolutePath());
- }
- m_watchedPaths.clear();
- m_watchedFilesInDirectory.clear();
- m_watchedFilesIgnored.clear();
-}
-
-void BulkFileWatcher::removePath(const QString& path)
-{
- const QFileInfo info(path);
- const QString filePath = info.absoluteFilePath();
- const QString directoryPath = info.absolutePath();
- m_watchedFilesInDirectory[directoryPath].remove(filePath);
- m_fileWatcher.removePath(filePath);
- m_watchedPaths.remove(filePath);
- if (m_watchedFilesInDirectory[directoryPath].isEmpty()) {
- m_fileWatcher.removePath(directoryPath);
- m_watchedPaths.remove(directoryPath);
- m_watchedFilesInDirectory.remove(directoryPath);
- }
-}
-
-void BulkFileWatcher::addPath(const QString& path)
-{
- const QFileInfo info(path);
- const QString filePath = info.absoluteFilePath();
- const QString directoryPath = info.absolutePath();
- if (!m_watchedPaths.value(filePath)) {
- const bool fileSuccess = m_fileWatcher.addPath(filePath);
- m_watchedPaths[filePath] = fileSuccess;
- }
- if (!m_watchedPaths.value(directoryPath)) {
- const bool directorySuccess = m_fileWatcher.addPath(directoryPath);
- m_watchedPaths[directoryPath] = directorySuccess;
- }
- m_watchedFilesInDirectory[directoryPath][filePath] = info.exists() ? info.lastModified().toMSecsSinceEpoch() : 0;
-}
-
-void BulkFileWatcher::handleFileChanged(const QString& path)
-{
- const QFileInfo info(path);
- const QString filePath = info.absoluteFilePath();
- const QString directoryPath = info.absolutePath();
- const QMap<QString, qint64>& watchedFiles = m_watchedFilesInDirectory[directoryPath];
- const qint64 lastModificationTime = info.lastModified().toMSecsSinceEpoch();
- const bool created = watchedFiles[filePath] == 0 && info.exists();
- const bool deleted = watchedFiles[filePath] != 0 && !info.exists();
- const bool changed = !created && !deleted && lastModificationTime != watchedFiles[filePath];
-
- addPath(path);
-
- if (m_watchedFilesIgnored[info.canonicalFilePath()] > Clock::currentDateTimeUtc()) {
- // changes are blocked
- return;
- }
- if (created) {
- qDebug("File created %s", qPrintable(path));
- scheduleSignal(Created, filePath);
- }
- if (changed) {
- qDebug("File changed %s", qPrintable(path));
- scheduleSignal(Updated, filePath);
- }
- if (deleted) {
- qDebug("File removed %s", qPrintable(path));
- scheduleSignal(Removed, filePath);
- }
-}
-
-void BulkFileWatcher::handleDirectoryChanged(const QString& path)
-{
- qDebug("Directory changed %s", qPrintable(path));
- const QFileInfo directoryInfo(path);
- const QString directoryPath = directoryInfo.absoluteFilePath();
- QMap<QString, qint64>& watchedFiles = m_watchedFilesInDirectory[directoryPath];
- for (const QString& filename : watchedFiles.keys()) {
- const QFileInfo fileInfo(filename);
- const QString filePath = fileInfo.absoluteFilePath();
- const qint64 previousModificationTime = watchedFiles[filePath];
- const qint64 lastModificationTime = fileInfo.lastModified().toMSecsSinceEpoch();
- if (!fileInfo.exists() && previousModificationTime != 0) {
- qDebug("Remove watch file %s", qPrintable(fileInfo.absoluteFilePath()));
- m_fileWatcher.removePath(filePath);
- m_watchedPaths.remove(filePath);
- watchedFiles.remove(filePath);
- scheduleSignal(Removed, filePath);
- }
- if (previousModificationTime == 0 && fileInfo.exists()) {
- qDebug("Add watch file %s", qPrintable(fileInfo.absoluteFilePath()));
- if (!m_watchedPaths.value(filePath)) {
- const bool success = m_fileWatcher.addPath(filePath);
- m_watchedPaths[filePath] = success;
- watchedFiles[filePath] = lastModificationTime;
- }
- scheduleSignal(Created, filePath);
- }
- if (fileInfo.exists() && previousModificationTime != lastModificationTime) {
- // this case is handled using
- qDebug("Refresh watch file %s", qPrintable(fileInfo.absoluteFilePath()));
- m_fileWatcher.removePath(fileInfo.absolutePath());
- m_fileWatcher.addPath(fileInfo.absolutePath());
- scheduleSignal(Updated, filePath);
- }
- m_watchedFilesInDirectory[directoryPath][filePath] = fileInfo.exists() ? lastModificationTime : 0;
- }
-}
-
-void BulkFileWatcher::emitSignals()
-{
- QMap<QString, QList<Signal>> queued;
- m_pendingSignals.swap(queued);
- for (const auto& path : queued.keys()) {
- const auto& signal = queued[path];
- if (signal.last() == Removed) {
- qDebug("Emit %s removed", qPrintable(path));
- emit fileRemoved(path);
- continue;
- }
- if (signal.first() == Created) {
- qDebug("Emit %s created", qPrintable(path));
- emit fileCreated(path);
- continue;
- }
- qDebug("Emit %s changed", qPrintable(path));
- emit fileChanged(path);
- }
-}
-
-void BulkFileWatcher::scheduleSignal(Signal signal, const QString& path)
-{
- // we need to collect signals since the file watcher API may send multiple signals for a "single" change
- // therefore we wait until the event loop finished before starting to import any changes
- const QString filePath = QFileInfo(path).absoluteFilePath();
- m_pendingSignals[filePath] << signal;
-
- if (!m_pendingSignalsTimer.isActive()) {
- m_pendingSignalsTimer.start();
- }
-}
-
-void BulkFileWatcher::ignoreFileChanges(const QString& path)
-{
- const QFileInfo info(path);
- m_watchedFilesIgnored[info.canonicalFilePath()] = Clock::currentDateTimeUtc().addMSecs(FileChangeDelay);
-}
-
-void BulkFileWatcher::observeFileChanges(bool delayed)
-{
- int timeout = 0;
- if (delayed) {
- timeout = FileChangeDelay;
- } else {
- const QDateTime current = Clock::currentDateTimeUtc();
- for (const QString& key : m_watchedFilesIgnored.keys()) {
- if (m_watchedFilesIgnored[key] < current) {
- // We assume that there was no concurrent change of the database
- // during our block - so no need to reimport
- qDebug("Remove block from %s", qPrintable(key));
- m_watchedFilesIgnored.remove(key);
- continue;
- }
- qDebug("Keep block from %s", qPrintable(key));
- timeout = qMin(timeout, static_cast<int>(current.msecsTo(m_watchedFilesIgnored[key])));
+ QFile file(m_filePath);
+ if (file.open(QFile::ReadOnly)) {
+ QCryptographicHash hash(QCryptographicHash::Sha256);
+ if (m_fileChecksumSizeBytes > 0) {
+ hash.addData(file.read(m_fileChecksumSizeBytes));
+ } else {
+ hash.addData(&file);
}
+ return hash.result();
}
- if (timeout > 0 && !m_watchedFilesIgnoreTimer.isActive()) {
- m_watchedFilesIgnoreTimer.start(timeout);
- }
+ // If we fail to open the file return the last known checksum, this
+ // prevents unnecessary merge requests on intermittent network shares
+ return m_fileChecksum;
}
diff --git a/src/core/FileWatcher.h b/src/core/FileWatcher.h
index 9b55badc1..27159d17a 100644
--- a/src/core/FileWatcher.h
+++ b/src/core/FileWatcher.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,9 +19,7 @@
#define KEEPASSXC_FILEWATCHER_H
#include <QFileSystemWatcher>
-#include <QSet>
#include <QTimer>
-#include <QVariant>
class FileWatcher : public QObject
{
@@ -29,6 +27,7 @@ class FileWatcher : public QObject
public:
explicit FileWatcher(QObject* parent = nullptr);
+ ~FileWatcher() override;
void start(const QString& path, int checksumIntervalSeconds = 0, int checksumSizeKibibytes = -1);
void stop();
@@ -36,7 +35,7 @@ public:
bool hasSameFileChecksum();
signals:
- void fileChanged();
+ void fileChanged(const QString& path);
public slots:
void pause();
@@ -59,53 +58,4 @@ private:
bool m_ignoreFileChange = false;
};
-class BulkFileWatcher : public QObject
-{
- Q_OBJECT
-
- enum Signal
- {
- Created,
- Updated,
- Removed
- };
-
-public:
- explicit BulkFileWatcher(QObject* parent = nullptr);
-
- void clear();
-
- void removePath(const QString& path);
- void addPath(const QString& path);
-
- void ignoreFileChanges(const QString& path);
-
-signals:
- void fileCreated(QString);
- void fileChanged(QString);
- void fileRemoved(QString);
-
-public slots:
- void observeFileChanges(bool delayed = false);
-
-private slots:
- void handleFileChanged(const QString& path);
- void handleDirectoryChanged(const QString& path);
- void emitSignals();
-
-private:
- void scheduleSignal(Signal event, const QString& path);
-
-private:
- QMap<QString, bool> m_watchedPaths;
- QMap<QString, QDateTime> m_watchedFilesIgnored;
- QFileSystemWatcher m_fileWatcher;
- QMap<QString, QMap<QString, qint64>> m_watchedFilesInDirectory;
- // needed for Import/Export-References to prevent update after self-write
- QTimer m_watchedFilesIgnoreTimer;
- // needed to tolerate multiple signals for same event
- QTimer m_pendingSignalsTimer;
- QMap<QString, QList<Signal>> m_pendingSignals;
-};
-
#endif // KEEPASSXC_FILEWATCHER_H
diff --git a/src/core/Global.h b/src/core/Global.h
index 0821687e3..aebdb4559 100644
--- a/src/core/Global.h
+++ b/src/core/Global.h
@@ -46,6 +46,13 @@
static const auto TRUE_STR = QStringLiteral("true");
static const auto FALSE_STR = QStringLiteral("false");
+enum IconSize
+{
+ Default,
+ Medium,
+ Large
+};
+
template <typename T> struct AddConst
{
typedef const T Type;
diff --git a/src/core/Group.cpp b/src/core/Group.cpp
index 2c0d67091..d9782a7cc 100644
--- a/src/core/Group.cpp
+++ b/src/core/Group.cpp
@@ -17,6 +17,7 @@
*/
#include "Group.h"
+#include "config-keepassx.h"
#include "core/Clock.h"
#include "core/Config.h"
@@ -25,6 +26,10 @@
#include "core/Metadata.h"
#include "core/Tools.h"
+#ifdef WITH_XC_KEESHARE
+#include "keeshare/KeeShare.h"
+#endif
+
#include <QtConcurrent>
const int Group::DefaultIconNumber = 48;
@@ -48,6 +53,7 @@ Group::Group()
connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(groupModified()));
connect(this, SIGNAL(groupModified()), SLOT(updateTimeinfo()));
+ connect(this, SIGNAL(groupNonDataChange()), SLOT(updateTimeinfo()));
}
Group::~Group()
@@ -127,10 +133,9 @@ QString Group::notes() const
QImage Group::icon() const
{
if (m_data.customIcon.isNull()) {
- return databaseIcons()->icon(m_data.iconNumber);
+ return databaseIcons()->icon(m_data.iconNumber).toImage();
} else {
Q_ASSERT(m_db);
-
if (m_db) {
return m_db->metadata()->customIcon(m_data.customIcon);
} else {
@@ -139,35 +144,28 @@ QImage Group::icon() const
}
}
-QPixmap Group::iconPixmap() const
+QPixmap Group::iconPixmap(IconSize size) const
{
+ QPixmap icon(size, size);
if (m_data.customIcon.isNull()) {
- return databaseIcons()->iconPixmap(m_data.iconNumber);
+ icon = databaseIcons()->icon(m_data.iconNumber, size);
} else {
Q_ASSERT(m_db);
-
if (m_db) {
- return m_db->metadata()->customIconPixmap(m_data.customIcon);
- } else {
- return QPixmap();
+ icon = m_db->metadata()->customIconPixmap(m_data.customIcon, size);
}
}
-}
-
-QPixmap Group::iconScaledPixmap() const
-{
- if (m_data.customIcon.isNull()) {
- // built-in icons are 16x16 so don't need to be scaled
- return databaseIcons()->iconPixmap(m_data.iconNumber);
- } else {
- Q_ASSERT(m_db);
- if (m_db) {
- return m_db->metadata()->customIconScaledPixmap(m_data.customIcon);
- } else {
- return QPixmap();
- }
+ if (isExpired()) {
+ icon = databaseIcons()->applyBadge(icon, DatabaseIcons::Badges::Expired);
+ }
+#ifdef WITH_XC_KEESHARE
+ else if (KeeShare::isShared(this)) {
+ icon = KeeShare::indicatorBadge(this, icon);
}
+#endif
+
+ return icon;
}
int Group::iconNumber() const
@@ -364,11 +362,11 @@ void Group::setExpanded(bool expanded)
{
if (m_data.isExpanded != expanded) {
m_data.isExpanded = expanded;
- if (config()->get("IgnoreGroupExpansion").toBool()) {
- updateTimeinfo();
- return;
+ if (config()->get(Config::TrackNonDataChanges).toBool()) {
+ emit groupModified();
+ } else {
+ emit groupNonDataChange();
}
- emit groupModified();
}
}
@@ -451,8 +449,8 @@ void Group::setParent(Group* parent, int index)
recCreateDelObjects();
// copy custom icon to the new database
- if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->containsCustomIcon(iconUuid())
- && !parent->m_db->metadata()->containsCustomIcon(iconUuid())) {
+ if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->hasCustomIcon(iconUuid())
+ && !parent->m_db->metadata()->hasCustomIcon(iconUuid())) {
parent->m_db->metadata()->addCustomIcon(iconUuid(), icon());
}
}
@@ -964,17 +962,44 @@ void Group::removeEntry(Entry* entry)
emit entryRemoved(entry);
}
+void Group::moveEntryUp(Entry* entry)
+{
+ int row = m_entries.indexOf(entry);
+ if (row <= 0) {
+ return;
+ }
+
+ emit entryAboutToMoveUp(row);
+ m_entries.move(row, row - 1);
+ emit entryMovedUp();
+ if (config()->get(Config::TrackNonDataChanges).toBool()) {
+ emit groupModified();
+ } else {
+ emit groupNonDataChange();
+ }
+}
+
+void Group::moveEntryDown(Entry* entry)
+{
+ int row = m_entries.indexOf(entry);
+ if (row >= m_entries.size() - 1) {
+ return;
+ }
+
+ emit entryAboutToMoveDown(row);
+ m_entries.move(row, row + 1);
+ emit entryMovedDown();
+ if (config()->get(Config::TrackNonDataChanges).toBool()) {
+ emit groupModified();
+ } else {
+ emit groupNonDataChange();
+ }
+}
+
void Group::connectDatabaseSignalsRecursive(Database* db)
{
if (m_db) {
- disconnect(SIGNAL(groupDataChanged(Group*)), m_db);
- disconnect(SIGNAL(groupAboutToRemove(Group*)), m_db);
- disconnect(SIGNAL(groupRemoved()), m_db);
- disconnect(SIGNAL(groupAboutToAdd(Group*, int)), m_db);
- disconnect(SIGNAL(groupAdded()), m_db);
- disconnect(SIGNAL(aboutToMove(Group*, Group*, int)), m_db);
- disconnect(SIGNAL(groupMoved()), m_db);
- disconnect(SIGNAL(groupModified()), m_db);
+ disconnect(m_db);
}
for (Entry* entry : asConst(m_entries)) {
@@ -996,6 +1021,7 @@ void Group::connectDatabaseSignalsRecursive(Database* db)
connect(this, SIGNAL(aboutToMove(Group*,Group*,int)), db, SIGNAL(groupAboutToMove(Group*,Group*,int)));
connect(this, SIGNAL(groupMoved()), db, SIGNAL(groupMoved()));
connect(this, SIGNAL(groupModified()), db, SLOT(markAsModified()));
+ connect(this, SIGNAL(groupNonDataChange()), db, SLOT(markNonDataChange()));
// clang-format on
}
@@ -1119,7 +1145,7 @@ void Group::applyGroupIconOnCreateTo(Entry* entry)
{
Q_ASSERT(entry);
- if (!config()->get("UseGroupIconOnEntryCreation").toBool()) {
+ if (!config()->get(Config::UseGroupIconOnEntryCreation).toBool()) {
return;
}
diff --git a/src/core/Group.h b/src/core/Group.h
index cfeb9feee..8ff33d8d0 100644
--- a/src/core/Group.h
+++ b/src/core/Group.h
@@ -21,12 +21,12 @@
#include <QImage>
#include <QPixmap>
-#include <QPixmapCache>
#include <QPointer>
#include "core/CustomData.h"
#include "core/Database.h"
#include "core/Entry.h"
+#include "core/Global.h"
#include "core/TimeInfo.h"
class Group : public QObject
@@ -85,8 +85,7 @@ public:
QString name() const;
QString notes() const;
QImage icon() const;
- QPixmap iconPixmap() const;
- QPixmap iconScaledPixmap() const;
+ QPixmap iconPixmap(IconSize size = IconSize::Default) const;
int iconNumber() const;
const QUuid& iconUuid() const;
const TimeInfo& timeInfo() const;
@@ -167,6 +166,8 @@ public:
void addEntry(Entry* entry);
void removeEntry(Entry* entry);
+ void moveEntryUp(Entry* entry);
+ void moveEntryDown(Entry* entry);
void applyGroupIconOnCreateTo(Entry* entry);
void applyGroupIconTo(Entry* entry);
@@ -185,10 +186,15 @@ signals:
void aboutToMove(Group* group, Group* toGroup, int index);
void groupMoved();
void groupModified();
+ void groupNonDataChange();
void entryAboutToAdd(Entry* entry);
void entryAdded(Entry* entry);
void entryAboutToRemove(Entry* entry);
void entryRemoved(Entry* entry);
+ void entryAboutToMoveUp(int row);
+ void entryMovedUp();
+ void entryAboutToMoveDown(int row);
+ void entryMovedDown();
void entryDataChanged(Entry* entry);
private slots:
diff --git a/src/core/HibpDownloader.cpp b/src/core/HibpDownloader.cpp
new file mode 100644
index 000000000..53189af91
--- /dev/null
+++ b/src/core/HibpDownloader.cpp
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "HibpDownloader.h"
+#include "core/Config.h"
+#include "core/Global.h"
+#include "core/NetworkManager.h"
+
+#include <QCryptographicHash>
+#include <QUrl>
+#include <QtNetwork>
+
+namespace
+{
+ /*
+ * Return the SHA1 hash of the specified password in upper-case hex.
+ *
+ * The result is always exactly 40 characters long.
+ */
+ QString sha1Hex(const QString& password)
+ {
+ // Get the binary SHA1
+ const auto sha1 = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Sha1);
+ return sha1.toHex().toUpper();
+ }
+
+ /*
+ * Search a password's hash in the output of the HIBP web service.
+ *
+ * Returns the number of times the password is found in breaches, or
+ * 0 if the password is not in the HIBP result.
+ */
+ int pwnCount(const QString& password, const QString& hibpResult)
+ {
+ // The first 5 characters of the hash are in the URL already,
+ // the HIBP result contains the remainder
+ auto pos = hibpResult.indexOf(sha1Hex(password).mid(5));
+ if (pos < 0) {
+ return 0;
+ }
+
+ // Skip past the sha1 and ':'
+ pos += 36;
+
+ // Find where the count ends
+ auto end = hibpResult.indexOf('\n', pos);
+ if (end < 0) {
+ end = hibpResult.size();
+ }
+
+ // Extract the count, remove remaining whitespace, and convert to int
+ return hibpResult.midRef(pos, end - pos).trimmed().toInt();
+ }
+} // namespace
+
+HibpDownloader::HibpDownloader(QObject* parent)
+ : QObject(parent)
+{
+}
+
+HibpDownloader::~HibpDownloader()
+{
+ abort();
+}
+
+/*
+ * Add one password to the list list of passwords to check.
+ *
+ * Invoke this function once for every password to check,
+ * then call validate().
+ */
+void HibpDownloader::add(const QString& password)
+{
+ if (!m_pwdsToTry.contains(password)) {
+ m_pwdsToTry << password;
+ }
+}
+
+/*
+ * Start validating the passwords against HIBP.
+ */
+void HibpDownloader::validate()
+{
+ for (auto password : m_pwdsToTry) {
+ // The URL we query is https://api.pwnedpasswords.com/range/XXXXX,
+ // where XXXXX is the first five bytes of the hex representation of
+ // the password's SHA1.
+ const auto url = QString("https://api.pwnedpasswords.com/range/") + sha1Hex(password).left(5);
+
+ // HIBP requires clients to specify a user agent in the request
+ // (https://haveibeenpwned.com/API/v3#UserAgent); however, in order
+ // to minimize the amount of information we expose about ourselves,
+ // we don't add the KeePassXC version number or platform.
+ auto request = QNetworkRequest(url);
+ request.setRawHeader("User-Agent", "KeePassXC");
+
+ // Finally, submit the request to HIBP.
+ auto reply = getNetMgr()->get(request);
+ connect(reply, &QNetworkReply::finished, this, &HibpDownloader::fetchFinished);
+ connect(reply, &QIODevice::readyRead, this, &HibpDownloader::fetchReadyRead);
+ m_replies.insert(reply, {password, {}});
+ }
+
+ m_pwdsToTry.clear();
+}
+
+int HibpDownloader::passwordsToValidate() const
+{
+ return m_pwdsToTry.size();
+}
+
+int HibpDownloader::passwordsRemaining() const
+{
+ return m_replies.size();
+}
+
+/*
+ * Abort the current online activity (if any).
+ */
+void HibpDownloader::abort()
+{
+ for (auto reply : m_replies.keys()) {
+ reply->abort();
+ reply->deleteLater();
+ }
+ m_replies.clear();
+}
+
+/*
+ * Called when new data has been loaded from the HIBP server.
+ */
+void HibpDownloader::fetchReadyRead()
+{
+ const auto reply = qobject_cast<QNetworkReply*>(sender());
+ auto entry = m_replies.find(reply);
+ if (entry != m_replies.end()) {
+ entry->second += reply->readAll();
+ }
+}
+
+/*
+ * Called after all data has been loaded from the HIBP server.
+ */
+void HibpDownloader::fetchFinished()
+{
+ const auto reply = qobject_cast<QNetworkReply*>(sender());
+ const auto entry = m_replies.find(reply);
+ if (entry == m_replies.end()) {
+ return;
+ }
+
+ // Get result status
+ const auto ok = reply->error() == QNetworkReply::NoError;
+ const auto err = reply->errorString();
+
+ const auto password = entry->first;
+ const auto hibpReply = entry->second;
+
+ reply->deleteLater();
+ m_replies.remove(reply);
+
+ // If there was an error, assume it's permanent and abort
+ // (don't process the rest of the password list).
+ if (!ok) {
+ auto msg = tr("Online password validation failed") + ":\n" + err;
+ if (!hibpReply.isEmpty()) {
+ msg += "\n" + hibpReply;
+ }
+ abort();
+ emit fetchFailed(msg);
+ return;
+ }
+
+ // Current password validated, send the result to the caller
+ emit hibpResult(password, pwnCount(password, hibpReply));
+}
diff --git a/src/core/HibpDownloader.h b/src/core/HibpDownloader.h
new file mode 100644
index 000000000..04c109bae
--- /dev/null
+++ b/src/core/HibpDownloader.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_HIBPDOWNLOADER_H
+#define KEEPASSXC_HIBPDOWNLOADER_H
+
+#include "config-keepassx.h"
+#include <QHash>
+#include <QObject>
+#include <QTimer>
+
+#ifndef WITH_XC_NETWORKING
+#error This file requires KeePassXC to be built with network support.
+#endif
+
+class QNetworkReply;
+
+/*
+ * Check if a password has been hacked by looking it up on the
+ * "Have I Been Pwned" website (https://haveibeenpwned.com/)
+ * in the background.
+ *
+ * Usage: Pass the password to check to the ctor and process
+ * the `finished` signal to get the result. Process the
+ * `failed` signal to handle errors.
+ */
+class HibpDownloader : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit HibpDownloader(QObject* parent = nullptr);
+ ~HibpDownloader() override;
+
+ void add(const QString& password);
+ void validate();
+ int passwordsToValidate() const;
+ int passwordsRemaining() const;
+
+signals:
+ void hibpResult(const QString& password, int count);
+ void fetchFailed(const QString& error);
+
+public slots:
+ void abort();
+
+private slots:
+ void fetchFinished();
+ void fetchReadyRead();
+
+private:
+ void fetchPassword(const QString& password);
+
+ QStringList m_pwdsToTry; // The list of remaining passwords to validate
+ QHash<QNetworkReply*, QPair<QString, QByteArray>> m_replies;
+};
+
+#endif // KEEPASSXC_HIBPDOWNLOADER_H
diff --git a/src/core/IconDownloader.cpp b/src/core/IconDownloader.cpp
index fe346becd..1cb030c1e 100644
--- a/src/core/IconDownloader.cpp
+++ b/src/core/IconDownloader.cpp
@@ -20,6 +20,7 @@
#include "core/NetworkManager.h"
#include <QHostInfo>
+#include <QImageReader>
#include <QtNetwork>
#define MAX_REDIRECTS 5
@@ -103,7 +104,7 @@ void IconDownloader::setUrl(const QString& entryUrl)
}
// Start with the "fallback" url (if enabled) to try to get the best favicon
- if (config()->get("security/IconDownloadFallback", false).toBool()) {
+ if (config()->get(Config::Security_IconDownloadFallback).toBool()) {
QUrl fallbackUrl = QUrl("https://icons.duckduckgo.com");
fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(fullyQualifiedDomain) + ".ico");
m_urlsToTry.append(fallbackUrl);
@@ -126,8 +127,12 @@ void IconDownloader::setUrl(const QString& entryUrl)
void IconDownloader::download()
{
+ if (m_urlsToTry.isEmpty()) {
+ return;
+ }
+
if (!m_timeout.isActive()) {
- int timeout = config()->get("FaviconDownloadTimeout", 10).toInt();
+ int timeout = config()->get(Config::FaviconDownloadTimeout).toInt();
m_timeout.start(timeout * 1000);
// Use the first URL to start the download process
@@ -184,7 +189,7 @@ void IconDownloader::fetchFinished()
}
} else {
// No redirect, and we theoretically have some icon data now.
- image.loadFromData(m_bytesReceived);
+ image = parseImage(m_bytesReceived);
}
}
@@ -202,3 +207,33 @@ void IconDownloader::fetchFinished()
emit finished(url, image);
}
}
+
+/**
+ * Parse fetched image bytes.
+ *
+ * Parses the given byte array into a QImage. Unlike QImage::loadFromData(), this method
+ * tries to extract the highest resolution image from .ICO files.
+ *
+ * @param imageBytes raw image bytes
+ * @return parsed image
+ */
+QImage IconDownloader::parseImage(QByteArray& imageBytes) const
+{
+ QBuffer buff(&imageBytes);
+ buff.open(QIODevice::ReadOnly);
+ QImageReader reader(&buff);
+
+ if (reader.imageCount() <= 0) {
+ return reader.read();
+ }
+
+ QImage img;
+ for (int i = 0; i < reader.imageCount(); ++i) {
+ if (img.isNull() || reader.size().width() > img.size().width()) {
+ img = reader.read();
+ }
+ reader.jumpToNextImage();
+ }
+
+ return img;
+}
diff --git a/src/core/IconDownloader.h b/src/core/IconDownloader.h
index e2b8c4f2d..008e57aab 100644
--- a/src/core/IconDownloader.h
+++ b/src/core/IconDownloader.h
@@ -50,6 +50,7 @@ private slots:
private:
void fetchFavicon(const QUrl& url);
+ QImage parseImage(QByteArray& imageBytes) const;
QString m_url;
QUrl m_fetchUrl;
diff --git a/src/core/Merger.cpp b/src/core/Merger.cpp
index 4cce997bf..83b1e5a44 100644
--- a/src/core/Merger.cpp
+++ b/src/core/Merger.cpp
@@ -612,12 +612,11 @@ Merger::ChangeList Merger::mergeMetadata(const MergeContext& context)
auto* sourceMetadata = context.m_sourceDb->metadata();
auto* targetMetadata = context.m_targetDb->metadata();
- const auto keys = sourceMetadata->customIcons().keys();
- for (QUuid customIconId : keys) {
- if (!targetMetadata->containsCustomIcon(customIconId)) {
- QImage customIcon = sourceMetadata->customIcon(customIconId);
- targetMetadata->addCustomIcon(customIconId, customIcon);
- changes << tr("Adding missing icon %1").arg(QString::fromLatin1(customIconId.toRfc4122().toHex()));
+ for (const auto& iconUuid : sourceMetadata->customIconsOrder()) {
+ if (!targetMetadata->hasCustomIcon(iconUuid)) {
+ QImage customIcon = sourceMetadata->customIcon(iconUuid);
+ targetMetadata->addCustomIcon(iconUuid, customIcon);
+ changes << tr("Adding missing icon %1").arg(QString::fromLatin1(iconUuid.toRfc4122().toHex()));
}
}
@@ -632,7 +631,9 @@ Merger::ChangeList Merger::mergeMetadata(const MergeContext& context)
// Check missing keys from source. Remove those from target
for (const auto& key : targetCustomDataKeys) {
- if (!sourceMetadata->customData()->contains(key)) {
+ // Do not remove protected custom data
+ if (!sourceMetadata->customData()->contains(key)
+ && !sourceMetadata->customData()->isProtectedCustomData(key)) {
auto value = targetMetadata->customData()->value(key);
targetMetadata->customData()->remove(key);
changes << tr("Removed custom data %1 [%2]").arg(key, value);
diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp
index ff1ee71e7..4cad498f6 100644
--- a/src/core/Metadata.cpp
+++ b/src/core/Metadata.cpp
@@ -16,9 +16,11 @@
*/
#include "Metadata.h"
+#include <QApplication>
#include <QtCore/QCryptographicHash>
#include "core/Clock.h"
+#include "core/DatabaseIcons.h"
#include "core/Entry.h"
#include "core/Group.h"
#include "core/Tools.h"
@@ -31,7 +33,13 @@ Metadata::Metadata(QObject* parent)
, m_customData(new CustomData(this))
, m_updateDatetime(true)
{
- m_data.generator = "KeePassXC";
+ init();
+ connect(m_customData, SIGNAL(customDataModified()), SIGNAL(metadataModified()));
+}
+
+void Metadata::init()
+{
+ m_data.generator = QStringLiteral("KeePassXC");
m_data.maintenanceHistoryDays = 365;
m_data.masterKeyChangeRec = -1;
m_data.masterKeyChangeForce = -1;
@@ -52,8 +60,16 @@ Metadata::Metadata(QObject* parent)
m_entryTemplatesGroupChanged = now;
m_masterKeyChanged = now;
m_settingsChanged = now;
+}
- connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(metadataModified()));
+void Metadata::clear()
+{
+ init();
+ m_customIcons.clear();
+ m_customIconsRaw.clear();
+ m_customIconsOrder.clear();
+ m_customIconsHashes.clear();
+ m_customData->clear();
}
template <class P, class V> bool Metadata::set(P& property, const V& value)
@@ -131,7 +147,7 @@ int Metadata::maintenanceHistoryDays() const
return m_data.maintenanceHistoryDays;
}
-QColor Metadata::color() const
+QString Metadata::color() const
{
return m_data.color;
}
@@ -163,67 +179,33 @@ bool Metadata::protectNotes() const
QImage Metadata::customIcon(const QUuid& uuid) const
{
- return m_customIcons.value(uuid);
+ return m_customIconsRaw.value(uuid);
}
-QPixmap Metadata::customIconPixmap(const QUuid& uuid) const
+QPixmap Metadata::customIconPixmap(const QUuid& uuid, IconSize size) const
{
- QPixmap pixmap;
-
- if (!m_customIcons.contains(uuid)) {
- return pixmap;
- }
-
- QPixmapCache::Key& cacheKey = m_customIconCacheKeys[uuid];
-
- if (!QPixmapCache::find(cacheKey, &pixmap)) {
- pixmap = QPixmap::fromImage(m_customIcons.value(uuid));
- cacheKey = QPixmapCache::insert(pixmap);
- }
-
- return pixmap;
-}
-
-QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid) const
-{
- QPixmap pixmap;
-
- if (!m_customIcons.contains(uuid)) {
- return pixmap;
- }
-
- QPixmapCache::Key& cacheKey = m_customIconScaledCacheKeys[uuid];
-
- if (!QPixmapCache::find(cacheKey, &pixmap)) {
- QImage image = m_customIcons.value(uuid).scaled(16, 16, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
- pixmap = QPixmap::fromImage(image);
- cacheKey = QPixmapCache::insert(pixmap);
+ if (!hasCustomIcon(uuid)) {
+ return {};
}
-
- return pixmap;
-}
-
-bool Metadata::containsCustomIcon(const QUuid& uuid) const
-{
- return m_customIcons.contains(uuid);
+ return m_customIcons.value(uuid).pixmap(databaseIcons()->iconSize(size));
}
-QHash<QUuid, QImage> Metadata::customIcons() const
-{
- return m_customIcons;
-}
-
-QHash<QUuid, QPixmap> Metadata::customIconsScaledPixmaps() const
+QHash<QUuid, QPixmap> Metadata::customIconsPixmaps(IconSize size) const
{
QHash<QUuid, QPixmap> result;
for (const QUuid& uuid : m_customIconsOrder) {
- result.insert(uuid, customIconScaledPixmap(uuid));
+ result.insert(uuid, customIconPixmap(uuid, size));
}
return result;
}
+bool Metadata::hasCustomIcon(const QUuid& uuid) const
+{
+ return m_customIconsRaw.contains(uuid);
+}
+
QList<QUuid> Metadata::customIconsOrder() const
{
return m_customIconsOrder;
@@ -269,17 +251,17 @@ const Group* Metadata::lastTopVisibleGroup() const
return m_lastTopVisibleGroup;
}
-QDateTime Metadata::masterKeyChanged() const
+QDateTime Metadata::databaseKeyChanged() const
{
return m_masterKeyChanged;
}
-int Metadata::masterKeyChangeRec() const
+int Metadata::databaseKeyChangeRec() const
{
return m_data.masterKeyChangeRec;
}
-int Metadata::masterKeyChangeForce() const
+int Metadata::databaseKeyChangeForce() const
{
return m_data.masterKeyChangeForce;
}
@@ -347,7 +329,7 @@ void Metadata::setMaintenanceHistoryDays(int value)
set(m_data.maintenanceHistoryDays, value);
}
-void Metadata::setColor(const QColor& value)
+void Metadata::setColor(const QString& value)
{
set(m_data.color, value);
}
@@ -377,57 +359,54 @@ void Metadata::setProtectNotes(bool value)
set(m_data.protectNotes, value);
}
-void Metadata::addCustomIcon(const QUuid& uuid, const QImage& icon)
+void Metadata::addCustomIcon(const QUuid& uuid, const QImage& image)
{
Q_ASSERT(!uuid.isNull());
- Q_ASSERT(!m_customIcons.contains(uuid));
+ Q_ASSERT(!m_customIconsRaw.contains(uuid));
- m_customIcons[uuid] = icon;
- // reset cache in case there is also an icon with that uuid
- m_customIconCacheKeys[uuid] = QPixmapCache::Key();
- m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key();
+ m_customIconsRaw[uuid] = image;
// remove all uuids to prevent duplicates in release mode
m_customIconsOrder.removeAll(uuid);
m_customIconsOrder.append(uuid);
// Associate image hash to uuid
- QByteArray hash = hashImage(icon);
+ QByteArray hash = hashImage(image);
m_customIconsHashes[hash] = uuid;
- Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
- emit metadataModified();
-}
-
-void Metadata::addCustomIconScaled(const QUuid& uuid, const QImage& icon)
-{
- QImage iconScaled;
-
- // scale down to 128x128 if icon is larger
- if (icon.width() > 128 || icon.height() > 128) {
- iconScaled = icon.scaled(QSize(128, 128), Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count());
+
+ // TODO: This check can go away when we move all QIcon handling outside of core
+ // On older versions of Qt, loading a QPixmap from QImage outside of a GUI
+ // environment causes ASAN to fail and crash on nullptr violation
+ static bool isGui = qApp->inherits("QGuiApplication");
+ if (isGui) {
+ // Generate QIcon with pre-baked resolutions
+ auto basePixmap = QPixmap::fromImage(image).scaled(128, 128, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ QIcon icon(basePixmap);
+ icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Default)));
+ icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Medium)));
+ icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Large)));
+ m_customIcons.insert(uuid, icon);
} else {
- iconScaled = icon;
+ m_customIcons.insert(uuid, QIcon());
}
- addCustomIcon(uuid, iconScaled);
+ emit metadataModified();
}
void Metadata::removeCustomIcon(const QUuid& uuid)
{
Q_ASSERT(!uuid.isNull());
- Q_ASSERT(m_customIcons.contains(uuid));
+ Q_ASSERT(m_customIconsRaw.contains(uuid));
// Remove hash record only if this is the same uuid
- QByteArray hash = hashImage(m_customIcons[uuid]);
+ QByteArray hash = hashImage(m_customIconsRaw[uuid]);
if (m_customIconsHashes.contains(hash) && m_customIconsHashes[hash] == uuid) {
m_customIconsHashes.remove(hash);
}
m_customIcons.remove(uuid);
- QPixmapCache::remove(m_customIconCacheKeys.value(uuid));
- m_customIconCacheKeys.remove(uuid);
- QPixmapCache::remove(m_customIconScaledCacheKeys.value(uuid));
- m_customIconScaledCacheKeys.remove(uuid);
+ m_customIconsRaw.remove(uuid);
m_customIconsOrder.removeAll(uuid);
- Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
+ Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count());
emit metadataModified();
}
@@ -440,9 +419,9 @@ QUuid Metadata::findCustomIcon(const QImage& candidate)
void Metadata::copyCustomIcons(const QSet<QUuid>& iconList, const Metadata* otherMetadata)
{
for (const QUuid& uuid : iconList) {
- Q_ASSERT(otherMetadata->containsCustomIcon(uuid));
+ Q_ASSERT(otherMetadata->hasCustomIcon(uuid));
- if (!containsCustomIcon(uuid) && otherMetadata->containsCustomIcon(uuid)) {
+ if (!hasCustomIcon(uuid) && otherMetadata->hasCustomIcon(uuid)) {
addCustomIcon(uuid, otherMetadata->customIcon(uuid));
}
}
@@ -495,7 +474,7 @@ void Metadata::setLastTopVisibleGroup(Group* group)
set(m_lastTopVisibleGroup, group);
}
-void Metadata::setMasterKeyChanged(const QDateTime& value)
+void Metadata::setDatabaseKeyChanged(const QDateTime& value)
{
Q_ASSERT(value.timeSpec() == Qt::UTC);
m_masterKeyChanged = value;
diff --git a/src/core/Metadata.h b/src/core/Metadata.h
index 01abcb809..dc09b3cca 100644
--- a/src/core/Metadata.h
+++ b/src/core/Metadata.h
@@ -18,16 +18,18 @@
#ifndef KEEPASSX_METADATA_H
#define KEEPASSX_METADATA_H
-#include <QColor>
#include <QDateTime>
#include <QHash>
+#include <QIcon>
#include <QImage>
#include <QPixmap>
#include <QPixmapCache>
#include <QPointer>
+#include <QSize>
#include <QUuid>
#include "core/CustomData.h"
+#include "core/Global.h"
class Database;
class Group;
@@ -49,7 +51,7 @@ public:
QString defaultUserName;
QDateTime defaultUserNameChanged;
int maintenanceHistoryDays;
- QColor color;
+ QString color;
bool recycleBinEnabled;
int historyMaxItems;
int historyMaxSize;
@@ -63,6 +65,9 @@ public:
bool protectNotes;
};
+ void init();
+ void clear();
+
QString generator() const;
QString name() const;
QDateTime nameChanged() const;
@@ -72,20 +77,18 @@ public:
QDateTime defaultUserNameChanged() const;
QDateTime settingsChanged() const;
int maintenanceHistoryDays() const;
- QColor color() const;
+ QString color() const;
bool protectTitle() const;
bool protectUsername() const;
bool protectPassword() const;
bool protectUrl() const;
bool protectNotes() const;
QImage customIcon(const QUuid& uuid) const;
- QPixmap customIconPixmap(const QUuid& uuid) const;
- QPixmap customIconScaledPixmap(const QUuid& uuid) const;
- bool containsCustomIcon(const QUuid& uuid) const;
- QHash<QUuid, QImage> customIcons() const;
+ bool hasCustomIcon(const QUuid& uuid) const;
+ QPixmap customIconPixmap(const QUuid& uuid, IconSize size = IconSize::Default) const;
+ QHash<QUuid, QPixmap> customIconsPixmaps(IconSize size = IconSize::Default) const;
QList<QUuid> customIconsOrder() const;
bool recycleBinEnabled() const;
- QHash<QUuid, QPixmap> customIconsScaledPixmaps() const;
Group* recycleBin();
const Group* recycleBin() const;
QDateTime recycleBinChanged() const;
@@ -93,9 +96,9 @@ public:
QDateTime entryTemplatesGroupChanged() const;
const Group* lastSelectedGroup() const;
const Group* lastTopVisibleGroup() const;
- QDateTime masterKeyChanged() const;
- int masterKeyChangeRec() const;
- int masterKeyChangeForce() const;
+ QDateTime databaseKeyChanged() const;
+ int databaseKeyChangeRec() const;
+ int databaseKeyChangeForce() const;
int historyMaxItems() const;
int historyMaxSize() const;
CustomData* customData();
@@ -113,14 +116,13 @@ public:
void setDefaultUserNameChanged(const QDateTime& value);
void setSettingsChanged(const QDateTime& value);
void setMaintenanceHistoryDays(int value);
- void setColor(const QColor& value);
+ void setColor(const QString& value);
void setProtectTitle(bool value);
void setProtectUsername(bool value);
void setProtectPassword(bool value);
void setProtectUrl(bool value);
void setProtectNotes(bool value);
- void addCustomIcon(const QUuid& uuid, const QImage& icon);
- void addCustomIconScaled(const QUuid& uuid, const QImage& icon);
+ void addCustomIcon(const QUuid& uuid, const QImage& image);
void removeCustomIcon(const QUuid& uuid);
void copyCustomIcons(const QSet<QUuid>& iconList, const Metadata* otherMetadata);
QUuid findCustomIcon(const QImage& candidate);
@@ -131,7 +133,7 @@ public:
void setEntryTemplatesGroupChanged(const QDateTime& value);
void setLastSelectedGroup(Group* group);
void setLastTopVisibleGroup(Group* group);
- void setMasterKeyChanged(const QDateTime& value);
+ void setDatabaseKeyChanged(const QDateTime& value);
void setMasterKeyChangeRec(int value);
void setMasterKeyChangeForce(int value);
void setHistoryMaxItems(int value);
@@ -140,7 +142,7 @@ public:
/*
* Copy all attributes from other except:
* - Group pointers/uuids
- * - Master key changed date
+ * - Database key changed date
* - Custom icons
* - Custom fields
* - Settings changed date
@@ -158,9 +160,8 @@ private:
MetadataData m_data;
- QHash<QUuid, QImage> m_customIcons;
- mutable QHash<QUuid, QPixmapCache::Key> m_customIconCacheKeys;
- mutable QHash<QUuid, QPixmapCache::Key> m_customIconScaledCacheKeys;
+ QHash<QUuid, QIcon> m_customIcons;
+ QHash<QUuid, QImage> m_customIconsRaw;
QList<QUuid> m_customIconsOrder;
QHash<QByteArray, QUuid> m_customIconsHashes;
diff --git a/src/core/PassphraseGenerator.cpp b/src/core/PassphraseGenerator.cpp
index b14886a1a..57dd2bb57 100644
--- a/src/core/PassphraseGenerator.cpp
+++ b/src/core/PassphraseGenerator.cpp
@@ -21,7 +21,7 @@
#include <QTextStream>
#include <cmath>
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "crypto/Random.h"
const char* PassphraseGenerator::DefaultSeparator = " ";
@@ -80,7 +80,7 @@ void PassphraseGenerator::setWordList(const QString& path)
void PassphraseGenerator::setDefaultWordList()
{
- const QString path = filePath()->wordlistPath(PassphraseGenerator::DefaultWordList);
+ const QString path = resources()->wordlistPath(PassphraseGenerator::DefaultWordList);
setWordList(path);
}
diff --git a/src/core/PasswordGenerator.cpp b/src/core/PasswordGenerator.cpp
index e203af672..efe647880 100644
--- a/src/core/PasswordGenerator.cpp
+++ b/src/core/PasswordGenerator.cpp
@@ -19,23 +19,19 @@
#include "PasswordGenerator.h"
#include "crypto/Random.h"
-#include <zxcvbn.h>
+const char* PasswordGenerator::DefaultAdditionalChars = "";
const char* PasswordGenerator::DefaultExcludedChars = "";
PasswordGenerator::PasswordGenerator()
: m_length(0)
, m_classes(nullptr)
, m_flags(nullptr)
+ , m_additional(PasswordGenerator::DefaultAdditionalChars)
, m_excluded(PasswordGenerator::DefaultExcludedChars)
{
}
-double PasswordGenerator::estimateEntropy(const QString& password)
-{
- return ZxcvbnMatch(password.toLatin1(), nullptr, nullptr);
-}
-
void PasswordGenerator::setLength(int length)
{
if (length <= 0) {
@@ -59,6 +55,11 @@ void PasswordGenerator::setFlags(const GeneratorFlags& flags)
m_flags = flags;
}
+void PasswordGenerator::setAdditionalChars(const QString& chars)
+{
+ m_additional = chars;
+}
+
void PasswordGenerator::setExcludedChars(const QString& chars)
{
m_excluded = chars;
@@ -113,7 +114,7 @@ QString PasswordGenerator::generatePassword() const
bool PasswordGenerator::isValid() const
{
- if (m_classes == 0) {
+ if (m_classes == 0 && m_additional.isEmpty()) {
return false;
} else if (m_length == 0) {
return false;
@@ -265,6 +266,15 @@ QVector<PasswordGroup> PasswordGenerator::passwordGroups() const
passwordGroups.append(group);
}
+ if (!m_additional.isEmpty()) {
+ PasswordGroup group;
+
+ for (auto ch : m_additional) {
+ group.append(ch);
+ }
+
+ passwordGroups.append(group);
+ }
// Loop over character groups and remove excluded characters from them;
// remove empty groups
diff --git a/src/core/PasswordGenerator.h b/src/core/PasswordGenerator.h
index 22627d25b..308142563 100644
--- a/src/core/PasswordGenerator.h
+++ b/src/core/PasswordGenerator.h
@@ -57,32 +57,19 @@ public:
public:
PasswordGenerator();
- double estimateEntropy(const QString& password);
void setLength(int length);
void setCharClasses(const CharClasses& classes);
void setFlags(const GeneratorFlags& flags);
+ void setAdditionalChars(const QString& chars);
void setExcludedChars(const QString& chars);
bool isValid() const;
QString generatePassword() const;
- static const int DefaultLength = 16;
+ static const int DefaultLength = 32;
+ static const char* DefaultAdditionalChars;
static const char* DefaultExcludedChars;
- static constexpr bool DefaultLower = (DefaultCharset & LowerLetters) != 0;
- static constexpr bool DefaultUpper = (DefaultCharset & UpperLetters) != 0;
- static constexpr bool DefaultNumbers = (DefaultCharset & Numbers) != 0;
- static constexpr bool DefaultSpecial = (DefaultCharset & SpecialCharacters) != 0;
- static constexpr bool DefaultAdvancedMode = (DefaultFlags & AdvancedMode) != 0;
- static constexpr bool DefaultBraces = (DefaultCharset & Braces) != 0;
- static constexpr bool DefaultPunctuation = (DefaultCharset & Punctuation) != 0;
- static constexpr bool DefaultQuotes = (DefaultCharset & Quotes) != 0;
- static constexpr bool DefaultDashes = (DefaultCharset & Dashes) != 0;
- static constexpr bool DefaultMath = (DefaultCharset & Math) != 0;
- static constexpr bool DefaultLogograms = (DefaultCharset & Logograms) != 0;
- static constexpr bool DefaultEASCII = (DefaultCharset & EASCII) != 0;
- static constexpr bool DefaultLookAlike = (DefaultFlags & ExcludeLookAlike) != 0;
- static constexpr bool DefaultFromEveryGroup = (DefaultFlags & CharFromEveryGroup) != 0;
private:
QVector<PasswordGroup> passwordGroups() const;
@@ -91,6 +78,7 @@ private:
int m_length;
CharClasses m_classes;
GeneratorFlags m_flags;
+ QString m_additional;
QString m_excluded;
Q_DISABLE_COPY(PasswordGenerator)
diff --git a/src/core/PasswordHealth.cpp b/src/core/PasswordHealth.cpp
new file mode 100644
index 000000000..6fdbf6c36
--- /dev/null
+++ b/src/core/PasswordHealth.cpp
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QApplication>
+#include <QString>
+
+#include "Database.h"
+#include "Entry.h"
+#include "Group.h"
+#include "PasswordHealth.h"
+#include "zxcvbn.h"
+
+// Define the static member variable with the custom field name
+const QString PasswordHealth::OPTION_KNOWN_BAD = QStringLiteral("KnownBad");
+
+PasswordHealth::PasswordHealth(double entropy)
+ : m_score(entropy)
+ , m_entropy(entropy)
+{
+ switch (quality()) {
+ case Quality::Bad:
+ case Quality::Poor:
+ m_scoreReasons << QApplication::tr("Very weak password");
+ m_scoreDetails << QApplication::tr("Password entropy is %1 bits").arg(QString::number(m_entropy, 'f', 2));
+ break;
+
+ case Quality::Weak:
+ m_scoreReasons << QApplication::tr("Weak password");
+ m_scoreDetails << QApplication::tr("Password entropy is %1 bits").arg(QString::number(m_entropy, 'f', 2));
+ break;
+
+ default:
+ // No reason or details for good and excellent passwords
+ break;
+ }
+}
+
+PasswordHealth::PasswordHealth(QString pwd)
+ : PasswordHealth(ZxcvbnMatch(pwd.toLatin1(), nullptr, nullptr))
+{
+}
+
+void PasswordHealth::setScore(int score)
+{
+ m_score = score;
+}
+
+void PasswordHealth::adjustScore(int amount)
+{
+ m_score += amount;
+}
+
+QString PasswordHealth::scoreReason() const
+{
+ return m_scoreReasons.join("\n");
+}
+
+void PasswordHealth::addScoreReason(QString reason)
+{
+ m_scoreReasons << reason;
+}
+
+QString PasswordHealth::scoreDetails() const
+{
+ return m_scoreDetails.join("\n");
+}
+
+void PasswordHealth::addScoreDetails(QString details)
+{
+ m_scoreDetails.append(details);
+}
+
+PasswordHealth::Quality PasswordHealth::quality() const
+{
+ if (m_score <= 0) {
+ return Quality::Bad;
+ } else if (m_score < 40) {
+ return Quality::Poor;
+ } else if (m_score < 65) {
+ return Quality::Weak;
+ } else if (m_score < 100) {
+ return Quality::Good;
+ }
+ return Quality::Excellent;
+}
+
+/**
+ * This class provides additional information about password health
+ * than can be derived from the password itself (re-use, expiry).
+ */
+HealthChecker::HealthChecker(QSharedPointer<Database> db)
+{
+ // Build the cache of re-used passwords
+ for (const auto* entry : db->rootGroup()->entriesRecursive()) {
+ if (!entry->isRecycled()) {
+ m_reuse[entry->password()]
+ << QApplication::tr("Used in %1/%2").arg(entry->group()->hierarchy().join('/'), entry->title());
+ }
+ }
+}
+
+/**
+ * Call operator of the Health Checker class.
+ *
+ * Returns the health of the password in `entry`, considering
+ * password entropy, re-use, expiration, etc.
+ */
+QSharedPointer<PasswordHealth> HealthChecker::evaluate(const Entry* entry) const
+{
+ // Pointer sanity check
+ if (!entry) {
+ return {};
+ }
+
+ // First analyse the password itself
+ const auto pwd = entry->password();
+ auto health = QSharedPointer<PasswordHealth>(new PasswordHealth(pwd));
+
+ // Second, if the password is in the database more than once,
+ // reduce the score accordingly
+ const auto& used = m_reuse[pwd];
+ const auto count = used.size();
+ if (count > 1) {
+ constexpr auto penalty = 15;
+ health->adjustScore(-penalty * (count - 1));
+ health->addScoreReason(QApplication::tr("Password is used %1 times").arg(QString::number(count)));
+ // Add the first 20 uses of the password to prevent the details display from growing too large
+ for (int i = 0; i < used.size(); ++i) {
+ health->addScoreDetails(used[i]);
+ if (i == 19) {
+ health->addScoreDetails("…");
+ break;
+ }
+ }
+
+ // Don't allow re-used passwords to be considered "good"
+ // no matter how great their entropy is.
+ if (health->score() > 64) {
+ health->setScore(64);
+ }
+ }
+
+ // Third, if the password has already expired, reduce score to 0;
+ // or, if the password is going to expire in the next 30 days,
+ // reduce score by 2 points per day.
+ if (entry->isExpired()) {
+ health->setScore(0);
+ health->addScoreReason(QApplication::tr("Password has expired"));
+ health->addScoreDetails(QApplication::tr("Password expiry was %1")
+ .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate)));
+ } else if (entry->timeInfo().expires()) {
+ const auto days = QDateTime::currentDateTime().daysTo(entry->timeInfo().expiryTime());
+ if (days <= 30) {
+ // First bring the score down into the "weak" range
+ // so that the entry appears in Health Check. Then
+ // reduce the score by 2 points for every day that
+ // we get closer to expiry. days<=0 has already
+ // been handled above ("isExpired()").
+ if (health->score() > 60) {
+ health->setScore(60);
+ }
+ health->adjustScore((30 - days) * -2);
+ health->addScoreReason(days <= 2 ? QApplication::tr("Password is about to expire")
+ : days <= 10 ? QApplication::tr("Password expires in %1 days").arg(days)
+ : QApplication::tr("Password will expire soon"));
+ health->addScoreDetails(QApplication::tr("Password expires on %1")
+ .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate)));
+ }
+ }
+
+ // Return the result
+ return health;
+}
diff --git a/src/core/PasswordHealth.h b/src/core/PasswordHealth.h
new file mode 100644
index 000000000..ef3249380
--- /dev/null
+++ b/src/core/PasswordHealth.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSX_PASSWORDHEALTH_H
+#define KEEPASSX_PASSWORDHEALTH_H
+
+#include <QHash>
+#include <QSharedPointer>
+#include <QStringList>
+
+class Database;
+class Entry;
+
+/**
+ * Health status of a single password.
+ *
+ * @see HealthChecker
+ */
+class PasswordHealth
+{
+public:
+ explicit PasswordHealth(double entropy);
+ explicit PasswordHealth(QString pwd);
+
+ /*
+ * The password score is defined to be the greater the better
+ * (more secure) the password is. It doesn't have a dimension,
+ * there are no defined maximum or minimum values, and score
+ * values may change with different versions of the software.
+ */
+ int score() const
+ {
+ return m_score;
+ }
+
+ void setScore(int score);
+ void adjustScore(int amount);
+
+ /*
+ * A text description for the password's quality assessment
+ * (translated into the application language), and additional
+ * information. Empty if nothing is wrong with the password.
+ * May contain more than line, separated by '\n'.
+ */
+ QString scoreReason() const;
+ void addScoreReason(QString reason);
+
+ QString scoreDetails() const;
+ void addScoreDetails(QString details);
+
+ /*
+ * The password quality assessment (based on the score).
+ */
+ enum class Quality
+ {
+ Bad,
+ Poor,
+ Weak,
+ Good,
+ Excellent
+ };
+ Quality quality() const;
+
+ /*
+ * The password's raw entropy value, in bits.
+ */
+ double entropy() const
+ {
+ return m_entropy;
+ }
+
+ /**
+ * Name of custom data field that holds the "this is a known
+ * bad password" flag. Legal values of the field are TRUE_STR
+ * and FALSE_STR, the default (used if the field doesn't exist)
+ * is false.
+ */
+ static const QString OPTION_KNOWN_BAD;
+
+private:
+ int m_score = 0;
+ double m_entropy = 0.0;
+ QStringList m_scoreReasons;
+ QStringList m_scoreDetails;
+};
+
+/**
+ * Password health check for all entries of a database.
+ *
+ * @see PasswordHealth
+ */
+class HealthChecker
+{
+public:
+ explicit HealthChecker(QSharedPointer<Database>);
+
+ // Get the health status of an entry in the database
+ QSharedPointer<PasswordHealth> evaluate(const Entry* entry) const;
+
+private:
+ // To determine password re-use: first = password, second = entries that use it
+ QHash<QString, QStringList> m_reuse;
+};
+
+#endif // KEEPASSX_PASSWORDHEALTH_H
diff --git a/src/core/Resources.cpp b/src/core/Resources.cpp
new file mode 100644
index 000000000..ad1ff5fa0
--- /dev/null
+++ b/src/core/Resources.cpp
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Resources.h"
+
+#include <QBitmap>
+#include <QDir>
+#include <QLibrary>
+#include <QPainter>
+#include <QStyle>
+
+#include "config-keepassx.h"
+#include "core/Config.h"
+#include "core/Global.h"
+#include "gui/MainWindow.h"
+#include "gui/osutils/OSUtils.h"
+
+Resources* Resources::m_instance(nullptr);
+
+QString Resources::dataPath(const QString& name) const
+{
+ if (name.isEmpty() || name.startsWith('/')) {
+ return m_dataPath + name;
+ }
+ return m_dataPath + "/" + name;
+}
+
+QString Resources::pluginPath(const QString& name) const
+{
+ QStringList pluginPaths;
+
+ QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype");
+ const QStringList buildDirEntryList = buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+ for (const QString& dir : buildDirEntryList) {
+ pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir;
+ }
+
+ // for TestAutoType
+ pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test";
+
+#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)
+ pluginPaths << QCoreApplication::applicationDirPath() + "/../PlugIns";
+#endif
+
+ pluginPaths << QCoreApplication::applicationDirPath();
+
+ QString configuredPluginDir = KEEPASSX_PLUGIN_DIR;
+ if (configuredPluginDir != ".") {
+ if (QDir(configuredPluginDir).isAbsolute()) {
+ pluginPaths << configuredPluginDir;
+ } else {
+ QString relativePluginDir =
+ QStringLiteral("%1/../%2").arg(QCoreApplication::applicationDirPath(), configuredPluginDir);
+ pluginPaths << QDir(relativePluginDir).canonicalPath();
+
+ QString absolutePluginDir = QStringLiteral("%1/%2").arg(KEEPASSX_PREFIX_DIR, configuredPluginDir);
+ pluginPaths << QDir(absolutePluginDir).canonicalPath();
+ }
+ }
+
+ QStringList dirFilter;
+ dirFilter << QStringLiteral("*%1*").arg(name);
+
+ for (const QString& path : asConst(pluginPaths)) {
+ const QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files);
+
+ for (const QString& file : fileCandidates) {
+ QString filePath = path + "/" + file;
+
+ if (QLibrary::isLibrary(filePath)) {
+ return filePath;
+ }
+ }
+ }
+
+ return {};
+}
+
+QString Resources::wordlistPath(const QString& name) const
+{
+ return dataPath(QStringLiteral("wordlists/%1").arg(name));
+}
+
+QIcon Resources::applicationIcon()
+{
+ return icon("keepassxc", false);
+}
+
+QString Resources::trayIconAppearance() const
+{
+ auto iconAppearance = config()->get(Config::GUI_TrayIconAppearance).toString();
+ if (iconAppearance.isNull()) {
+#ifdef Q_OS_MACOS
+ iconAppearance = osUtils->isDarkMode() ? "monochrome-light" : "monochrome-dark";
+#else
+ iconAppearance = "monochrome-light";
+#endif
+ }
+ return iconAppearance;
+}
+
+QIcon Resources::trayIcon()
+{
+ return trayIconUnlocked();
+}
+
+QIcon Resources::trayIconLocked()
+{
+ auto iconApperance = trayIconAppearance();
+
+ if (iconApperance == "monochrome-light") {
+ return icon("keepassxc-monochrome-light-locked", false);
+ }
+ if (iconApperance == "monochrome-dark") {
+ return icon("keepassxc-monochrome-dark-locked", false);
+ }
+ return icon("keepassxc-locked", false);
+}
+
+QIcon Resources::trayIconUnlocked()
+{
+ auto iconApperance = trayIconAppearance();
+
+ if (iconApperance == "monochrome-light") {
+ return icon("keepassxc-monochrome-light", false);
+ }
+ if (iconApperance == "monochrome-dark") {
+ return icon("keepassxc-monochrome-dark", false);
+ }
+ return icon("keepassxc", false);
+}
+
+QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideColor)
+{
+ QIcon icon = m_iconCache.value(name);
+
+ if (!icon.isNull() && !overrideColor.isValid()) {
+ return icon;
+ }
+
+ icon = QIcon::fromTheme(name);
+ if (getMainWindow() && recolor) {
+ QImage img = icon.pixmap(128, 128).toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ icon = {};
+
+ QPainter painter(&img);
+ painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
+
+ if (!overrideColor.isValid()) {
+ QPalette palette = getMainWindow()->palette();
+ painter.fillRect(0, 0, img.width(), img.height(), palette.color(QPalette::Normal, QPalette::WindowText));
+ icon.addPixmap(QPixmap::fromImage(img), QIcon::Normal);
+
+ painter.fillRect(0, 0, img.width(), img.height(), palette.color(QPalette::Active, QPalette::ButtonText));
+ icon.addPixmap(QPixmap::fromImage(img), QIcon::Active);
+
+ painter.fillRect(
+ 0, 0, img.width(), img.height(), palette.color(QPalette::Active, QPalette::HighlightedText));
+ icon.addPixmap(QPixmap::fromImage(img), QIcon::Selected);
+
+ painter.fillRect(0, 0, img.width(), img.height(), palette.color(QPalette::Disabled, QPalette::WindowText));
+ icon.addPixmap(QPixmap::fromImage(img), QIcon::Disabled);
+ } else {
+ painter.fillRect(0, 0, img.width(), img.height(), overrideColor);
+ icon.addPixmap(QPixmap::fromImage(img), QIcon::Normal);
+ }
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
+ icon.setIsMask(true);
+#endif
+ }
+
+ if (!overrideColor.isValid()) {
+ m_iconCache.insert(name, icon);
+ }
+
+ return icon;
+}
+
+QIcon Resources::onOffIcon(const QString& name, bool recolor)
+{
+ QString cacheName = "onoff/" + name;
+
+ QIcon icon = m_iconCache.value(cacheName);
+
+ if (!icon.isNull()) {
+ return icon;
+ }
+
+ QIcon on = Resources::icon(name + "-on", recolor);
+ for (const auto& size : on.availableSizes()) {
+ icon.addPixmap(on.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::On);
+ icon.addPixmap(on.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::On);
+ icon.addPixmap(on.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::On);
+ }
+ QIcon off = Resources::icon(name + "-off", recolor);
+ for (const auto& size : off.availableSizes()) {
+ icon.addPixmap(off.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::Off);
+ icon.addPixmap(off.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::Off);
+ icon.addPixmap(off.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::Off);
+ }
+
+ m_iconCache.insert(cacheName, icon);
+
+ return icon;
+}
+
+Resources::Resources()
+{
+ const QString appDirPath = QCoreApplication::applicationDirPath();
+#if defined(Q_OS_UNIX) && !(defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE))
+ trySetResourceDir(KEEPASSX_DATA_DIR) || trySetResourceDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR))
+ || trySetResourceDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR));
+#elif defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)
+ trySetResourceDir(appDirPath + QStringLiteral("/../Resources"));
+#elif defined(Q_OS_WIN)
+ trySetResourceDir(appDirPath + QStringLiteral("/share"));
+#endif
+
+ if (m_dataPath.isEmpty()) {
+ // Last ditch check if we are running from inside the src or test build directory
+ trySetResourceDir(appDirPath + QStringLiteral("/../share"))
+ || trySetResourceDir(appDirPath + QStringLiteral("/../../share"));
+ }
+
+ if (m_dataPath.isEmpty()) {
+ qWarning("Resources::DataPath: can't find data dir");
+ }
+}
+
+bool Resources::trySetResourceDir(const QString& path)
+{
+ QDir dir(path);
+ if (dir.exists()) {
+ m_dataPath = dir.canonicalPath();
+ return true;
+ }
+ return false;
+}
+
+Resources* Resources::instance()
+{
+ if (!m_instance) {
+ m_instance = new Resources();
+
+ Q_INIT_RESOURCE(icons);
+ QIcon::setThemeSearchPaths(QStringList{":/icons"} << QIcon::themeSearchPaths());
+ QIcon::setThemeName("application");
+ }
+
+ return m_instance;
+}
diff --git a/src/core/FilePath.h b/src/core/Resources.h
index b304b5f14..b76818150 100644
--- a/src/core/FilePath.h
+++ b/src/core/Resources.h
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
@@ -15,44 +16,45 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEEPASSX_FILEPATH_H
-#define KEEPASSX_FILEPATH_H
+#ifndef KEEPASSX_RESOURCES_H
+#define KEEPASSX_RESOURCES_H
+#include <QColor>
#include <QHash>
#include <QIcon>
#include <QString>
-class FilePath
+class Resources
{
public:
- QString dataPath(const QString& name);
- QString pluginPath(const QString& name);
- QString wordlistPath(const QString& name);
+ QString dataPath(const QString& name) const;
+ QString pluginPath(const QString& name) const;
+ QString wordlistPath(const QString& name) const;
QIcon applicationIcon();
QIcon trayIcon();
QIcon trayIconLocked();
QIcon trayIconUnlocked();
- QIcon icon(const QString& category, const QString& name, bool fromTheme = true);
- QIcon onOffIcon(const QString& category, const QString& name);
+ QString trayIconAppearance() const;
+ QIcon icon(const QString& name, bool recolor = true, const QColor& overrideColor = QColor::Invalid);
+ QIcon onOffIcon(const QString& name, bool recolor = true);
- static FilePath* instance();
+ static Resources* instance();
private:
- FilePath();
- bool testSetDir(const QString& dir);
- bool useDarkIcon();
+ Resources();
+ bool trySetResourceDir(const QString& path);
- static FilePath* m_instance;
+ static Resources* m_instance;
QString m_dataPath;
QHash<QString, QIcon> m_iconCache;
- Q_DISABLE_COPY(FilePath)
+ Q_DISABLE_COPY(Resources)
};
-inline FilePath* filePath()
+inline Resources* resources()
{
- return FilePath::instance();
+ return Resources::instance();
}
-#endif // KEEPASSX_FILEPATH_H
+#endif // KEEPASSX_RESOURCES_H
diff --git a/src/core/ScreenLockListenerDBus.cpp b/src/core/ScreenLockListenerDBus.cpp
index 5c57861bd..66970aee3 100644
--- a/src/core/ScreenLockListenerDBus.cpp
+++ b/src/core/ScreenLockListenerDBus.cpp
@@ -19,7 +19,9 @@
#include <QDBusConnection>
#include <QDBusInterface>
+#include <QDBusMessage>
#include <QDBusReply>
+#include <QDebug>
#include <QProcessEnvironment>
ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget* parent)
@@ -57,12 +59,14 @@ ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget* parent)
SLOT(logindPrepareForSleep(bool)));
QString sessionId = QProcessEnvironment::systemEnvironment().value("XDG_SESSION_ID");
- systemBus.connect("", // service
- QString("/org/freedesktop/login1/session/") + sessionId, // path
- "org.freedesktop.login1.Session", // interface
- "Lock", // signal name
- this, // receiver
- SLOT(unityLocked()));
+ QDBusInterface loginManager("org.freedesktop.login1", // service
+ "/org/freedesktop/login1", // path
+ "org.freedesktop.login1.Manager", // interface
+ systemBus);
+ if (loginManager.isValid()) {
+ QList<QVariant> args = {sessionId};
+ loginManager.callWithCallback("GetSession", args, this, SLOT(login1SessionObjectReceived(QDBusMessage)));
+ }
sessionBus.connect("com.canonical.Unity", // service
"/com/canonical/Unity/Session", // path
@@ -72,6 +76,28 @@ ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget* parent)
SLOT(unityLocked()));
}
+void ScreenLockListenerDBus::login1SessionObjectReceived(QDBusMessage response)
+{
+ if (response.arguments().isEmpty()) {
+ qDebug() << "org.freedesktop.login1.Manager.GetSession did not return results";
+ return;
+ }
+ QVariant arg0 = response.arguments().at(0);
+ if (!arg0.canConvert<QDBusObjectPath>()) {
+ qDebug() << "org.freedesktop.login1.Manager.GetSession did not return a QDBusObjectPath";
+ return;
+ }
+ QDBusObjectPath path = arg0.value<QDBusObjectPath>();
+ QDBusConnection systemBus = QDBusConnection::systemBus();
+
+ systemBus.connect("", // service
+ path.path(), // path
+ "org.freedesktop.login1.Session", // interface
+ "Lock", // signal name
+ this, // receiver
+ SLOT(unityLocked()));
+}
+
void ScreenLockListenerDBus::gnomeSessionStatusChanged(uint status)
{
if (status != 0) {
diff --git a/src/core/ScreenLockListenerDBus.h b/src/core/ScreenLockListenerDBus.h
index ab73a8cf3..59120eed3 100644
--- a/src/core/ScreenLockListenerDBus.h
+++ b/src/core/ScreenLockListenerDBus.h
@@ -18,6 +18,7 @@
#ifndef SCREENLOCKLISTENERDBUS_H
#define SCREENLOCKLISTENERDBUS_H
#include "ScreenLockListenerPrivate.h"
+#include <QDBusMessage>
#include <QObject>
#include <QWidget>
@@ -32,6 +33,7 @@ private slots:
void logindPrepareForSleep(bool beforeSleep);
void unityLocked();
void freedesktopScreenSaver(bool status);
+ void login1SessionObjectReceived(QDBusMessage);
};
#endif // SCREENLOCKLISTENERDBUS_H
diff --git a/src/core/ScreenLockListenerWin.h b/src/core/ScreenLockListenerWin.h
index 523ae5d0b..ba7c98cd3 100644
--- a/src/core/ScreenLockListenerWin.h
+++ b/src/core/ScreenLockListenerWin.h
@@ -29,7 +29,7 @@ class ScreenLockListenerWin : public ScreenLockListenerPrivate, public QAbstract
public:
explicit ScreenLockListenerWin(QWidget* parent = nullptr);
~ScreenLockListenerWin();
- virtual bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override;
+ bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override;
private:
void* m_powerNotificationHandle;
diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp
index 5d42bc799..1b3eafcca 100644
--- a/src/core/Tools.cpp
+++ b/src/core/Tools.cpp
@@ -113,8 +113,9 @@ namespace Tools
extensions += "\n- " + QObject::tr("Secret Service Integration");
#endif
- if (extensions.isEmpty())
+ if (extensions.isEmpty()) {
extensions = " " + QObject::tr("None");
+ }
debugInfo.append(QObject::tr("Enabled extensions:").append(extensions).append("\n"));
return debugInfo;
@@ -324,6 +325,29 @@ namespace Tools
return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1()));
}
+ QString envSubstitute(const QString& filepath, QProcessEnvironment environment)
+ {
+ QString subbed = filepath;
+
+#if defined(Q_OS_WIN)
+ QRegularExpression varRe("\\%([A-Za-z][A-Za-z0-9_]*)\\%");
+#else
+ QRegularExpression varRe("\\$([A-Za-z][A-Za-z0-9_]*)");
+ subbed.replace("~", environment.value("HOME"));
+#endif
+
+ QRegularExpressionMatch match;
+
+ do {
+ match = varRe.match(subbed);
+ if (match.hasMatch()) {
+ subbed.replace(match.capturedStart(), match.capturedLength(), environment.value(match.captured(1)));
+ }
+ } while (match.hasMatch());
+
+ return subbed;
+ }
+
Buffer::Buffer()
: raw(nullptr)
, size(0)
diff --git a/src/core/Tools.h b/src/core/Tools.h
index 455b879c2..e56a25189 100644
--- a/src/core/Tools.h
+++ b/src/core/Tools.h
@@ -22,6 +22,7 @@
#include "core/Global.h"
#include <QObject>
+#include <QProcessEnvironment>
#include <QString>
#include <QUuid>
@@ -48,6 +49,8 @@ namespace Tools
bool useWildcards = false,
bool exactMatch = false,
bool caseSensitive = false);
+ QString envSubstitute(const QString& filepath,
+ QProcessEnvironment environment = QProcessEnvironment::systemEnvironment());
template <typename RandomAccessIterator, typename T>
RandomAccessIterator binaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T& value)
diff --git a/src/core/Translator.cpp b/src/core/Translator.cpp
index 4e3f568cb..ff7dafde5 100644
--- a/src/core/Translator.cpp
+++ b/src/core/Translator.cpp
@@ -27,7 +27,7 @@
#include "config-keepassx.h"
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
/**
* Install all KeePassXC and Qt translators.
@@ -35,7 +35,7 @@
void Translator::installTranslators()
{
QStringList languages;
- QString languageSetting = config()->get("GUI/Language").toString();
+ QString languageSetting = config()->get(Config::GUI_Language).toString();
if (languageSetting.isEmpty() || languageSetting == "system") {
// NOTE: this is a workaround for the terrible way Qt loads languages
// using the QLocale::uiLanguages() approach. Instead, we search each
@@ -49,22 +49,9 @@ void Translator::installTranslators()
// Always try to load english last
languages << "en_US";
- const QStringList paths = {
-#ifdef QT_DEBUG
- QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR),
-#endif
- filePath()->dataPath("translations")};
-
- bool translationsLoaded = false;
- for (const QString& path : paths) {
- installQtTranslator(languages, path);
- if (installTranslator(languages, path)) {
- translationsLoaded = true;
- break;
- }
- }
-
- if (!translationsLoaded) {
+ const auto path = resources()->dataPath("translations");
+ installQtTranslator(languages, path);
+ if (!installTranslator(languages, path)) {
// couldn't load configured language or fallback
qWarning("Couldn't load translations.");
}
@@ -117,40 +104,31 @@ bool Translator::installQtTranslator(const QStringList& languages, const QString
*/
QList<QPair<QString, QString>> Translator::availableLanguages()
{
- const QStringList paths = {
-#ifdef QT_DEBUG
- QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR),
-#endif
- filePath()->dataPath("translations")};
-
QList<QPair<QString, QString>> languages;
languages.append(QPair<QString, QString>("system", "System default"));
QRegularExpression regExp("^keepassx_([a-zA-Z_]+)\\.qm$", QRegularExpression::CaseInsensitiveOption);
- for (const QString& path : paths) {
- const QStringList fileList = QDir(path).entryList();
- for (const QString& filename : fileList) {
- QRegularExpressionMatch match = regExp.match(filename);
- if (match.hasMatch()) {
- QString langcode = match.captured(1);
- if (langcode == "en") {
- continue;
- }
-
- QLocale locale(langcode);
- QString languageStr = QLocale::languageToString(locale.language());
- if (langcode == "la") {
- // langcode "la" (Latin) is translated into "C" by QLocale::languageToString()
- languageStr = "Latin";
- }
- QString countryStr;
- if (langcode.contains("_")) {
- countryStr = QString(" (%1)").arg(QLocale::countryToString(locale.country()));
- }
+ const QStringList fileList = QDir(resources()->dataPath("translations")).entryList();
+ for (const QString& filename : fileList) {
+ QRegularExpressionMatch match = regExp.match(filename);
+ if (match.hasMatch()) {
+ QString langcode = match.captured(1);
+ if (langcode == "en") {
+ continue;
+ }
- QPair<QString, QString> language(langcode, languageStr + countryStr);
- languages.append(language);
+ QLocale locale(langcode);
+ QString languageStr = QLocale::languageToString(locale.language());
+ if (langcode == "la") {
+ // langcode "la" (Latin) is translated into "C" by QLocale::languageToString()
+ languageStr = "Latin";
}
+ if (langcode.contains("_")) {
+ languageStr += QString(" (%1)").arg(QLocale::countryToString(locale.country()));
+ }
+
+ QPair<QString, QString> language(langcode, languageStr);
+ languages.append(language);
}
}
diff --git a/src/crypto/kdf/AesKdf.cpp b/src/crypto/kdf/AesKdf.cpp
index 0b2130cfe..d1daf1e5d 100644
--- a/src/crypto/kdf/AesKdf.cpp
+++ b/src/crypto/kdf/AesKdf.cpp
@@ -125,3 +125,8 @@ int AesKdf::benchmarkImpl(int msec) const
return static_cast<int>(rounds * (static_cast<float>(msec) / timer.elapsed()));
}
+
+QString AesKdf::toString() const
+{
+ return QObject::tr("AES (%1 rounds)").arg(QString::number(rounds()));
+}
diff --git a/src/crypto/kdf/AesKdf.h b/src/crypto/kdf/AesKdf.h
index 84156e6fb..d71fbb1d1 100644
--- a/src/crypto/kdf/AesKdf.h
+++ b/src/crypto/kdf/AesKdf.h
@@ -30,6 +30,7 @@ public:
QVariantMap writeParameters() override;
bool transform(const QByteArray& raw, QByteArray& result) const override;
QSharedPointer<Kdf> clone() const override;
+ QString toString() const override;
protected:
int benchmarkImpl(int msec) const override;
diff --git a/src/crypto/kdf/Argon2Kdf.cpp b/src/crypto/kdf/Argon2Kdf.cpp
index 0d449b5b5..31995fdd0 100644
--- a/src/crypto/kdf/Argon2Kdf.cpp
+++ b/src/crypto/kdf/Argon2Kdf.cpp
@@ -211,3 +211,8 @@ int Argon2Kdf::benchmarkImpl(int msec) const
return 1;
}
+
+QString Argon2Kdf::toString() const
+{
+ return QObject::tr("Argon2 (%1 rounds, %2 KB)").arg(QString::number(rounds()), QString::number(memory()));
+}
diff --git a/src/crypto/kdf/Argon2Kdf.h b/src/crypto/kdf/Argon2Kdf.h
index 73b7f8529..6a16ee96e 100644
--- a/src/crypto/kdf/Argon2Kdf.h
+++ b/src/crypto/kdf/Argon2Kdf.h
@@ -36,6 +36,7 @@ public:
bool setMemory(quint64 kibibytes);
quint32 parallelism() const;
bool setParallelism(quint32 threads);
+ QString toString() const override;
protected:
int benchmarkImpl(int msec) const override;
diff --git a/src/crypto/kdf/Kdf.cpp b/src/crypto/kdf/Kdf.cpp
index b4c4427c8..6a4c7fc62 100644
--- a/src/crypto/kdf/Kdf.cpp
+++ b/src/crypto/kdf/Kdf.cpp
@@ -71,16 +71,19 @@ void Kdf::randomizeSeed()
int Kdf::benchmark(int msec) const
{
- BenchmarkThread thread1(msec, this);
- BenchmarkThread thread2(msec, this);
+ // Run the benchmark twice using half the time for each run
+ BenchmarkThread thread(msec / 2, this);
+ int rounds = 0;
- thread1.start();
- thread2.start();
+ thread.start();
+ thread.wait();
+ rounds += thread.rounds();
- thread1.wait();
- thread2.wait();
+ thread.start();
+ thread.wait();
+ rounds += thread.rounds();
- return qMax(1, (thread1.rounds() + thread2.rounds()) / 2);
+ return qMax(1, rounds);
}
Kdf::BenchmarkThread::BenchmarkThread(int msec, const Kdf* kdf)
diff --git a/src/crypto/kdf/Kdf.h b/src/crypto/kdf/Kdf.h
index 368fb16f7..da9a2526c 100644
--- a/src/crypto/kdf/Kdf.h
+++ b/src/crypto/kdf/Kdf.h
@@ -44,8 +44,23 @@ public:
virtual bool transform(const QByteArray& raw, QByteArray& result) const = 0;
virtual QSharedPointer<Kdf> clone() const = 0;
+ virtual QString toString() const = 0;
+
int benchmark(int msec) const;
+ /*
+ * Default target encryption time, in MS.
+ */
+ static const int DEFAULT_ENCRYPTION_TIME = 1000;
+ /*
+ * Minimum target encryption time, in MS.
+ */
+ static const int MIN_ENCRYPTION_TIME = 100;
+ /*
+ * Maximum target encryption time, in MS.
+ */
+ static const int MAX_ENCRYPTION_TIME = 5000;
+
protected:
virtual int benchmarkImpl(int msec) const = 0;
diff --git a/src/crypto/ssh/bcrypt_pbkdf.cpp b/src/crypto/ssh/bcrypt_pbkdf.cpp
index fed4cdb29..a57e2dab1 100644
--- a/src/crypto/ssh/bcrypt_pbkdf.cpp
+++ b/src/crypto/ssh/bcrypt_pbkdf.cpp
@@ -82,7 +82,7 @@ bcrypt_hash(const quint8* sha2pass, const quint8* sha2salt, quint8* out)
cdata[i] = Blowfish_stream2word(ciphertext, sizeof(ciphertext),
&j);
for (i = 0; i < 64; i++)
- blf_enc(&state, cdata, sizeof(cdata) / sizeof(uint64_t));
+ blf_enc(&state, cdata, BCRYPT_WORDS / 2);
/* copy out */
for (i = 0; i < BCRYPT_WORDS; i++) {
diff --git a/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp b/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp
index afd888ed2..737c558d3 100644
--- a/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp
+++ b/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp
@@ -19,7 +19,7 @@
#include "fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
QString DatabaseSettingsPageFdoSecrets::name()
{
@@ -28,7 +28,7 @@ QString DatabaseSettingsPageFdoSecrets::name()
QIcon DatabaseSettingsPageFdoSecrets::icon()
{
- return filePath()->icon(QStringLiteral("apps"), QStringLiteral("freedesktop"));
+ return resources()->icon(QStringLiteral("freedesktop"));
}
QWidget* DatabaseSettingsPageFdoSecrets::createWidget()
diff --git a/src/fdosecrets/FdoSecretsPlugin.cpp b/src/fdosecrets/FdoSecretsPlugin.cpp
index 646f85301..96d76e345 100644
--- a/src/fdosecrets/FdoSecretsPlugin.cpp
+++ b/src/fdosecrets/FdoSecretsPlugin.cpp
@@ -24,16 +24,27 @@
#include "gui/DatabaseTabWidget.h"
+#include <QFile>
+
#include <utility>
using FdoSecrets::Service;
+// TODO: Only used for testing. Need to split service functions away from settings page.
+QPointer<FdoSecretsPlugin> g_fdoSecretsPlugin;
+
FdoSecretsPlugin::FdoSecretsPlugin(DatabaseTabWidget* tabWidget)
: m_dbTabs(tabWidget)
{
+ g_fdoSecretsPlugin = this;
FdoSecrets::registerDBusTypes();
}
+FdoSecretsPlugin* FdoSecretsPlugin::getPlugin()
+{
+ return g_fdoSecretsPlugin;
+}
+
QWidget* FdoSecretsPlugin::createWidget()
{
return new SettingsWidgetFdoSecrets(this);
@@ -56,7 +67,7 @@ void FdoSecretsPlugin::updateServiceState()
if (!m_secretService && m_dbTabs) {
m_secretService.reset(new Service(this, m_dbTabs));
connect(m_secretService.data(), &Service::error, this, [this](const QString& msg) {
- emit error(tr("Fdo Secret Service: %1").arg(msg));
+ emit error(tr("<b>Fdo Secret Service:</b> %1").arg(msg));
});
if (!m_secretService->initialize()) {
m_secretService.reset();
@@ -95,3 +106,29 @@ void FdoSecretsPlugin::emitRequestShowNotification(const QString& msg, const QSt
}
emit requestShowNotification(msg, title, 10000);
}
+
+QString FdoSecretsPlugin::reportExistingService() const
+{
+ auto pidStr = tr("Unknown", "Unknown PID");
+ auto exeStr = tr("Unknown", "Unknown executable path");
+
+ // try get pid
+ auto pid = QDBusConnection::sessionBus().interface()->servicePid(DBUS_SERVICE_SECRET);
+ if (pid.isValid()) {
+ pidStr = QString::number(pid.value());
+
+ // try get the first part of the cmdline, which usually is the executable name/path
+ QFile proc(QStringLiteral("/proc/%1/cmdline").arg(pid.value()));
+ if (proc.open(QFile::ReadOnly)) {
+ auto parts = proc.readAll().split('\0');
+ if (parts.length() >= 1) {
+ exeStr = QString::fromLocal8Bit(parts[0]).trimmed();
+ }
+ }
+ }
+ auto otherService = tr("<i>PID: %1, Executable: %2</i>", "<i>PID: 1234, Executable: /path/to/exe</i>")
+ .arg(pidStr, exeStr.toHtmlEscaped());
+ return tr("Another secret service is running (%1).<br/>"
+ "Please stop/remove it before re-enabling the Secret Service Integration.")
+ .arg(otherService);
+}
diff --git a/src/fdosecrets/FdoSecretsPlugin.h b/src/fdosecrets/FdoSecretsPlugin.h
index 828c0bd76..d0008b80a 100644
--- a/src/fdosecrets/FdoSecretsPlugin.h
+++ b/src/fdosecrets/FdoSecretsPlugin.h
@@ -18,7 +18,7 @@
#ifndef KEEPASSXC_FDOSECRETSPLUGIN_H
#define KEEPASSXC_FDOSECRETSPLUGIN_H
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/ApplicationSettingsWidget.h"
#include <QPointer>
@@ -45,7 +45,7 @@ public:
QIcon icon() override
{
- return FilePath::instance()->icon("apps", "freedesktop");
+ return Resources::instance()->icon("freedesktop");
}
QWidget* createWidget() override;
@@ -64,6 +64,15 @@ public:
*/
DatabaseTabWidget* dbTabs() const;
+ /**
+ * Check the running secret service and returns info about it
+ * @return html string suitable to be shown in the UI
+ */
+ QString reportExistingService() const;
+
+ // TODO: Only used for testing. Need to split service functions away from settings page.
+ static FdoSecretsPlugin* getPlugin();
+
public slots:
void emitRequestSwitchToDatabases();
void emitRequestShowNotification(const QString& msg, const QString& title = {});
diff --git a/src/fdosecrets/FdoSecretsSettings.cpp b/src/fdosecrets/FdoSecretsSettings.cpp
index 36c41705f..20eff4a08 100644
--- a/src/fdosecrets/FdoSecretsSettings.cpp
+++ b/src/fdosecrets/FdoSecretsSettings.cpp
@@ -24,11 +24,6 @@
namespace Keys
{
-
- constexpr auto FdoSecretsEnabled = "FdoSecrets/Enabled";
- constexpr auto FdoSecretsShowNotification = "FdoSecrets/ShowNotification";
- constexpr auto FdoSecretsNoConfirmDeleteItem = "FdoSecrets/NoConfirmDeleteItem";
-
namespace Db
{
constexpr auto FdoSecretsExposedGroup = "FDO_SECRETS_EXPOSED_GROUP";
@@ -51,32 +46,32 @@ namespace FdoSecrets
bool FdoSecretsSettings::isEnabled() const
{
- return config()->get(Keys::FdoSecretsEnabled, false).toBool();
+ return config()->get(Config::FdoSecrets_Enabled).toBool();
}
void FdoSecretsSettings::setEnabled(bool enabled)
{
- config()->set(Keys::FdoSecretsEnabled, enabled);
+ config()->set(Config::FdoSecrets_Enabled, enabled);
}
bool FdoSecretsSettings::showNotification() const
{
- return config()->get(Keys::FdoSecretsShowNotification, true).toBool();
+ return config()->get(Config::FdoSecrets_ShowNotification).toBool();
}
void FdoSecretsSettings::setShowNotification(bool show)
{
- config()->set(Keys::FdoSecretsShowNotification, show);
+ config()->set(Config::FdoSecrets_ShowNotification, show);
}
bool FdoSecretsSettings::noConfirmDeleteItem() const
{
- return config()->get(Keys::FdoSecretsNoConfirmDeleteItem, false).toBool();
+ return config()->get(Config::FdoSecrets_NoConfirmDeleteItem).toBool();
}
void FdoSecretsSettings::setNoConfirmDeleteItem(bool noConfirm)
{
- config()->set(Keys::FdoSecretsNoConfirmDeleteItem, noConfirm);
+ config()->set(Config::FdoSecrets_NoConfirmDeleteItem, noConfirm);
}
QUuid FdoSecretsSettings::exposedGroup(const QSharedPointer<Database>& db) const
diff --git a/src/fdosecrets/README.md b/src/fdosecrets/README.md
index 22278860c..bd28754a1 100644
--- a/src/fdosecrets/README.md
+++ b/src/fdosecrets/README.md
@@ -9,7 +9,7 @@ can connect and access the exposed database in KeePassXC.
## Configurable settings
* The user can specify if a database is exposed on DBus, and which group is exposed.
-* Whether to show desktop notification is shown when an entry is retrived.
+* Whether to show desktop notification is shown when an entry is retrieved.
* Whether to skip confirmation for entries deleted from DBus
## Implemented Attributes on Item Object
diff --git a/src/fdosecrets/objects/Collection.cpp b/src/fdosecrets/objects/Collection.cpp
index c2fb29a08..c0bb8ff34 100644
--- a/src/fdosecrets/objects/Collection.cpp
+++ b/src/fdosecrets/objects/Collection.cpp
@@ -75,6 +75,8 @@ namespace FdoSecrets
m_registered = false;
}
+ Q_ASSERT(m_backend);
+
// make sure we have updated copy of the filepath, which is used to identify the database.
m_backendPath = m_backend->database()->filePath();
@@ -245,19 +247,11 @@ namespace FdoSecrets
QList<EntrySearcher::SearchTerm> terms;
for (auto it = attributes.constBegin(); it != attributes.constEnd(); ++it) {
- if (it.key() == EntryAttributes::PasswordKey) {
- continue;
- }
terms << attributeToTerm(it.key(), it.value());
}
- // empty terms causes EntrySearcher returns everything
- if (terms.isEmpty()) {
- return QList<Item*>{};
- }
-
QList<Item*> items;
- const auto foundEntries = EntrySearcher().search(terms, m_exposedGroup);
+ const auto foundEntries = EntrySearcher(false, true).search(terms, m_exposedGroup);
items.reserve(foundEntries.size());
for (const auto& entry : foundEntries) {
items << m_entryToItem.value(entry);
@@ -310,13 +304,13 @@ namespace FdoSecrets
QString itemPath;
StringStringMap attributes;
- // check existing item using attributes
auto iterAttr = properties.find(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes"));
if (iterAttr != properties.end()) {
- attributes = qdbus_cast<StringStringMap>(iterAttr.value().value<QDBusArgument>());
+ attributes = iterAttr.value().value<StringStringMap>();
itemPath = attributes.value(ItemAttributes::PathKey);
+ // check existing item using attributes
auto existings = searchItems(attributes);
if (existings.isError()) {
return existings;
@@ -440,6 +434,16 @@ namespace FdoSecrets
QString Collection::name() const
{
+ if (m_backendPath.isEmpty()) {
+ // This is a newly created db without saving to file.
+ // This name is also used to register dbus path.
+ // For simplicity, we don't monitor the name change.
+ // So the dbus object path is not updated if the db name
+ // changes. This should not be a problem because once the database
+ // gets saved, the dbus path will be updated to use filename and
+ // everything back to normal.
+ return m_backend->database()->metadata()->name();
+ }
return QFileInfo(m_backendPath).baseName();
}
@@ -486,7 +490,6 @@ namespace FdoSecrets
// When the group object is normally deleted due to ~Database, the databaseReplaced
// signal should be first emitted, and we will clean up connection in reloadDatabase,
// so this handler won't be triggered.
- QPointer<Database> db = m_backend->database().data();
connect(m_exposedGroup.data(), &Group::groupAboutToRemove, this, [this](Group* toBeRemoved) {
if (backendLocked()) {
return;
@@ -544,8 +547,9 @@ namespace FdoSecrets
}
// repopulate
- Q_ASSERT(!backendLocked());
- populateContents();
+ if (!backendLocked()) {
+ populateContents();
+ }
}
void Collection::onEntryAdded(Entry* entry, bool emitSignal)
@@ -598,11 +602,11 @@ namespace FdoSecrets
return qobject_cast<Service*>(parent());
}
- void Collection::doLock()
+ bool Collection::doLock()
{
Q_ASSERT(m_backend);
- m_backend->lock();
+ return m_backend->lock();
}
void Collection::doUnlock()
@@ -614,6 +618,11 @@ namespace FdoSecrets
void Collection::doDelete()
{
+ if (!m_backend) {
+ // I'm already deleted
+ return;
+ }
+
emit collectionAboutToDelete();
unregisterCurrentPath();
@@ -623,7 +632,11 @@ namespace FdoSecrets
removeAlias(a).okOrDie();
}
+ // cleanup connection on Database
cleanupConnections();
+ // cleanup connection on Backend itself
+ m_backend->disconnect(this);
+ parent()->disconnect(this);
m_exposedGroup = nullptr;
diff --git a/src/fdosecrets/objects/Collection.h b/src/fdosecrets/objects/Collection.h
index 0be8b4239..da6dcb389 100644
--- a/src/fdosecrets/objects/Collection.h
+++ b/src/fdosecrets/objects/Collection.h
@@ -59,9 +59,9 @@ namespace FdoSecrets
createItem(const QVariantMap& properties, const SecretStruct& secret, bool replace, PromptBase*& prompt);
signals:
- void itemCreated(const Item* item);
- void itemDeleted(const Item* item);
- void itemChanged(const Item* item);
+ void itemCreated(Item* item);
+ void itemDeleted(Item* item);
+ void itemChanged(Item* item);
void collectionChanged();
void collectionAboutToDelete();
@@ -102,7 +102,7 @@ namespace FdoSecrets
public slots:
// expose some methods for Prmopt to use
- void doLock();
+ bool doLock();
void doUnlock();
// will remove self
void doDelete();
diff --git a/src/fdosecrets/objects/DBusObject.h b/src/fdosecrets/objects/DBusObject.h
index 539a2dfd7..4cdaf5ced 100644
--- a/src/fdosecrets/objects/DBusObject.h
+++ b/src/fdosecrets/objects/DBusObject.h
@@ -51,6 +51,11 @@ namespace FdoSecrets
return m_objectPath;
}
+ QDBusAbstractAdaptor& dbusAdaptor() const
+ {
+ return *m_dbusAdaptor;
+ }
+
protected:
void registerWithPath(const QString& path, QDBusAbstractAdaptor* adaptor);
@@ -74,11 +79,6 @@ namespace FdoSecrets
QString callingPeerName() const;
- template <typename Adaptor> Adaptor& dbusAdaptor() const
- {
- return *static_cast<Adaptor*>(m_dbusAdaptor);
- }
-
DBusObject* p() const
{
return qobject_cast<DBusObject*>(parent());
diff --git a/src/fdosecrets/objects/DBusTypes.cpp b/src/fdosecrets/objects/DBusTypes.cpp
index fff25124e..c249eaeed 100644
--- a/src/fdosecrets/objects/DBusTypes.cpp
+++ b/src/fdosecrets/objects/DBusTypes.cpp
@@ -35,6 +35,16 @@ namespace FdoSecrets
qRegisterMetaType<ObjectPathSecretMap>();
qDBusRegisterMetaType<ObjectPathSecretMap>();
+ QMetaType::registerConverter<QDBusArgument, StringStringMap>([](const QDBusArgument& arg) {
+ if (arg.currentSignature() != "a{ss}") {
+ return StringStringMap{};
+ }
+ // QDBusArgument is COW and qdbus_cast modifies it by detaching even it is const.
+ // we don't want to modify the instance (arg) stored in the qvariant so we create a copy
+ const auto copy = arg; // NOLINT(performance-unnecessary-copy-initialization)
+ return qdbus_cast<StringStringMap>(copy);
+ });
+
// NOTE: this is already registered by Qt in qtextratypes.h
// qRegisterMetaType<QList<QDBusObjectPath > >();
// qDBusRegisterMetaType<QList<QDBusObjectPath> >();
diff --git a/src/fdosecrets/objects/Item.cpp b/src/fdosecrets/objects/Item.cpp
index f3b8bceb7..d58cbcc2c 100644
--- a/src/fdosecrets/objects/Item.cpp
+++ b/src/fdosecrets/objects/Item.cpp
@@ -26,6 +26,7 @@
#include "core/Entry.h"
#include "core/EntryAttributes.h"
#include "core/Group.h"
+#include "core/Metadata.h"
#include "core/Tools.h"
#include <QMimeDatabase>
@@ -274,8 +275,8 @@ namespace FdoSecrets
return ret;
}
- auto attributes = qdbus_cast<StringStringMap>(
- properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes")).value<QDBusArgument>());
+ auto attributes =
+ properties.value(QStringLiteral(DBUS_INTERFACE_SECRET_ITEM ".Attributes")).value<StringStringMap>();
ret = setAttributes(attributes);
if (ret.isError()) {
return ret;
@@ -350,6 +351,13 @@ namespace FdoSecrets
return pathComponents.join('/');
}
+ bool Item::isDeletePermanent() const
+ {
+ auto recycleBin = backend()->database()->metadata()->recycleBin();
+ return (recycleBin && recycleBin->findEntryByUuid(backend()->uuid()))
+ || !backend()->database()->metadata()->recycleBinEnabled();
+ }
+
void setEntrySecret(Entry* entry, const QByteArray& data, const QString& contentType)
{
auto mimeName = contentType.split(';').takeFirst().trimmed();
@@ -369,7 +377,8 @@ namespace FdoSecrets
}
if (!mimeType.isValid() || !mimeType.inherits(QStringLiteral("text/plain")) || !codec) {
- // we can't handle this content type, save the data as attachment
+ // we can't handle this content type, save the data as attachment, and clear the password field
+ entry->setPassword("");
entry->attachments()->set(FDO_SECRETS_DATA, data);
entry->attributes()->set(FDO_SECRETS_CONTENT_TYPE, contentType);
return;
@@ -393,8 +402,13 @@ namespace FdoSecrets
if (entry->attachments()->hasKey(FDO_SECRETS_DATA)) {
ss.value = entry->attachments()->value(FDO_SECRETS_DATA);
- Q_ASSERT(entry->attributes()->hasKey(FDO_SECRETS_CONTENT_TYPE));
- ss.contentType = entry->attributes()->value(FDO_SECRETS_CONTENT_TYPE);
+ if (entry->attributes()->hasKey(FDO_SECRETS_CONTENT_TYPE)) {
+ ss.contentType = entry->attributes()->value(FDO_SECRETS_CONTENT_TYPE);
+ } else {
+ // the entry is somehow corrupted, maybe the user deleted it.
+ // set to binary and hope for the best...
+ ss.contentType = QStringLiteral("application/octet-stream");
+ }
return ss;
}
diff --git a/src/fdosecrets/objects/Item.h b/src/fdosecrets/objects/Item.h
index 39e83de74..99601d950 100644
--- a/src/fdosecrets/objects/Item.h
+++ b/src/fdosecrets/objects/Item.h
@@ -79,6 +79,14 @@ namespace FdoSecrets
*/
QString path() const;
+ /**
+ * If the containing db does not have recycle bin enabled,
+ * or the entry is already in the recycle bin (not possible for item, though),
+ * the delete is permanent
+ * @return true if delete is permanent
+ */
+ bool isDeletePermanent() const;
+
public slots:
void doDelete();
diff --git a/src/fdosecrets/objects/Prompt.cpp b/src/fdosecrets/objects/Prompt.cpp
index 6a2458a4f..cb3cb4f48 100644
--- a/src/fdosecrets/objects/Prompt.cpp
+++ b/src/fdosecrets/objects/Prompt.cpp
@@ -65,7 +65,7 @@ namespace FdoSecrets
DBusReturn<void> PromptBase::dismiss()
{
- emit completed(true, {});
+ emit completed(true, "");
return {};
}
@@ -95,7 +95,7 @@ namespace FdoSecrets
// only need to delete in backend, collection will react itself.
auto accepted = service()->doCloseDatabase(m_collection->backend());
- emit completed(!accepted, {});
+ emit completed(!accepted, "");
return {};
}
@@ -125,11 +125,17 @@ namespace FdoSecrets
}
emit collectionCreated(coll);
- emit completed(false, coll->objectPath().path());
+ emit completed(false, QVariant::fromValue(coll->objectPath()));
return {};
}
+ DBusReturn<void> CreateCollectionPrompt::dismiss()
+ {
+ emit completed(true, QVariant::fromValue(QDBusObjectPath{"/"}));
+ return {};
+ }
+
LockCollectionsPrompt::LockCollectionsPrompt(Service* parent, const QList<Collection*>& colls)
: PromptBase(parent)
{
@@ -153,16 +159,23 @@ namespace FdoSecrets
MessageBox::OverrideParent override(findWindow(windowId));
- QList<QDBusObjectPath> locked;
for (const auto& c : asConst(m_collections)) {
if (c) {
- c->doLock();
- locked << c->objectPath();
+ if (!c->doLock()) {
+ return dismiss();
+ }
+ m_locked << c->objectPath();
}
}
- emit completed(false, QVariant::fromValue(locked));
+ emit completed(false, QVariant::fromValue(m_locked));
+
+ return {};
+ }
+ DBusReturn<void> LockCollectionsPrompt::dismiss()
+ {
+ emit completed(true, QVariant::fromValue(m_locked));
return {};
}
@@ -191,6 +204,7 @@ namespace FdoSecrets
for (const auto& c : asConst(m_collections)) {
if (c) {
+ // doUnlock is nonblocking
connect(c, &Collection::doneUnlockCollection, this, &UnlockCollectionsPrompt::collectionUnlockFinished);
c->doUnlock();
}
@@ -226,6 +240,11 @@ namespace FdoSecrets
emit completed(m_unlocked.isEmpty(), QVariant::fromValue(m_unlocked));
}
}
+ DBusReturn<void> UnlockCollectionsPrompt::dismiss()
+ {
+ emit completed(true, QVariant::fromValue(m_unlocked));
+ return {};
+ }
DeleteItemPrompt::DeleteItemPrompt(Service* parent, Item* item)
: PromptBase(parent)
@@ -250,14 +269,18 @@ namespace FdoSecrets
// delete item's backend. Item will be notified after the backend is deleted.
if (m_item) {
if (FdoSecrets::settings()->noConfirmDeleteItem()) {
- MessageBox::setNextAnswer(MessageBox::Move);
+ // based on permanent or not, different button is used
+ if (m_item->isDeletePermanent()) {
+ MessageBox::setNextAnswer(MessageBox::Delete);
+ } else {
+ MessageBox::setNextAnswer(MessageBox::Move);
+ }
}
m_item->collection()->doDeleteEntries({m_item->backend()});
}
- emit completed(false, {});
+ emit completed(false, "");
return {};
}
-
} // namespace FdoSecrets
diff --git a/src/fdosecrets/objects/Prompt.h b/src/fdosecrets/objects/Prompt.h
index fee1cb9fb..683642df5 100644
--- a/src/fdosecrets/objects/Prompt.h
+++ b/src/fdosecrets/objects/Prompt.h
@@ -73,6 +73,7 @@ namespace FdoSecrets
explicit CreateCollectionPrompt(Service* parent);
DBusReturn<void> prompt(const QString& windowId) override;
+ DBusReturn<void> dismiss() override;
signals:
void collectionCreated(Collection* coll);
@@ -85,9 +86,11 @@ namespace FdoSecrets
explicit LockCollectionsPrompt(Service* parent, const QList<Collection*>& colls);
DBusReturn<void> prompt(const QString& windowId) override;
+ DBusReturn<void> dismiss() override;
private:
QList<QPointer<Collection>> m_collections;
+ QList<QDBusObjectPath> m_locked;
};
class UnlockCollectionsPrompt : public PromptBase
@@ -97,6 +100,7 @@ namespace FdoSecrets
explicit UnlockCollectionsPrompt(Service* parent, const QList<Collection*>& coll);
DBusReturn<void> prompt(const QString& windowId) override;
+ DBusReturn<void> dismiss() override;
private slots:
void collectionUnlockFinished(bool accepted);
diff --git a/src/fdosecrets/objects/Service.cpp b/src/fdosecrets/objects/Service.cpp
index 5408f4cb2..892ba68a4 100644
--- a/src/fdosecrets/objects/Service.cpp
+++ b/src/fdosecrets/objects/Service.cpp
@@ -59,9 +59,8 @@ namespace FdoSecrets
bool Service::initialize()
{
if (!QDBusConnection::sessionBus().registerService(QStringLiteral(DBUS_SERVICE_SECRET))) {
- qDebug() << "Another secret service is running";
- emit error(tr("Failed to register DBus service at %1: another secret service is running.")
- .arg(QLatin1Literal(DBUS_SERVICE_SECRET)));
+ emit error(tr("Failed to register DBus service at %1.<br/>").arg(QLatin1String(DBUS_SERVICE_SECRET))
+ + m_plugin->reportExistingService());
return false;
}
@@ -472,14 +471,14 @@ namespace FdoSecrets
return collection;
}
- void Service::doSwitchToChangeDatabaseSettings(DatabaseWidget* dbWidget)
+ void Service::doSwitchToDatabaseSettings(DatabaseWidget* dbWidget)
{
if (dbWidget->isLocked()) {
return;
}
// switch selected to current
m_databases->setCurrentWidget(dbWidget);
- m_databases->changeDatabaseSettings();
+ m_databases->showDatabaseSettings();
// open settings (switch from app settings to m_dbTabs)
m_plugin->emitRequestSwitchToDatabases();
diff --git a/src/fdosecrets/objects/Service.h b/src/fdosecrets/objects/Service.h
index 5de48da1c..4e0eeb0ff 100644
--- a/src/fdosecrets/objects/Service.h
+++ b/src/fdosecrets/objects/Service.h
@@ -110,7 +110,7 @@ namespace FdoSecrets
public slots:
bool doCloseDatabase(DatabaseWidget* dbWidget);
Collection* doNewDatabase();
- void doSwitchToChangeDatabaseSettings(DatabaseWidget* dbWidget);
+ void doSwitchToDatabaseSettings(DatabaseWidget* dbWidget);
/**
* Async, connect to signal doneUnlockDatabaseInDialog for finish notification
diff --git a/src/fdosecrets/objects/Session.cpp b/src/fdosecrets/objects/Session.cpp
index ad9ac4075..4845752a1 100644
--- a/src/fdosecrets/objects/Session.cpp
+++ b/src/fdosecrets/objects/Session.cpp
@@ -68,9 +68,9 @@ namespace FdoSecrets
incomplete = false;
std::unique_ptr<CipherPair> cipher{};
- if (algorithm == QLatin1Literal("plain")) {
+ if (algorithm == QLatin1String(PlainCipher::Algorithm)) {
cipher.reset(new PlainCipher);
- } else if (algorithm == QLatin1Literal("dh-ietf1024-sha256-aes128-cbc-pkcs7")) {
+ } else if (algorithm == QLatin1String(DhIetf1024Sha256Aes128CbcPkcs7::Algorithm)) {
QByteArray clientPublicKey = input.toByteArray();
cipher.reset(new DhIetf1024Sha256Aes128CbcPkcs7(clientPublicKey));
} else {
diff --git a/src/fdosecrets/objects/SessionCipher.cpp b/src/fdosecrets/objects/SessionCipher.cpp
index dcdbc1932..26f080c3b 100644
--- a/src/fdosecrets/objects/SessionCipher.cpp
+++ b/src/fdosecrets/objects/SessionCipher.cpp
@@ -43,6 +43,9 @@ namespace
namespace FdoSecrets
{
+ // XXX: remove the redundant definitions once we are at C++17
+ constexpr char PlainCipher::Algorithm[];
+ constexpr char DhIetf1024Sha256Aes128CbcPkcs7::Algorithm[];
DhIetf1024Sha256Aes128CbcPkcs7::DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes)
: m_valid(false)
@@ -51,13 +54,24 @@ namespace FdoSecrets
auto clientPub = MpiFromBytes(clientPublicKeyBytes, false);
// generate server side private, 128 bytes
- GcryptMPI serverPrivate(gcry_mpi_snew(KEY_SIZE_BYTES * 8));
- gcry_mpi_randomize(serverPrivate.get(), KEY_SIZE_BYTES * 8, GCRY_STRONG_RANDOM);
+ GcryptMPI serverPrivate = nullptr;
+ if (NextPrivKey) {
+ serverPrivate = std::move(NextPrivKey);
+ } else {
+ serverPrivate.reset(gcry_mpi_snew(KEY_SIZE_BYTES * 8));
+ gcry_mpi_randomize(serverPrivate.get(), KEY_SIZE_BYTES * 8, GCRY_STRONG_RANDOM);
+ }
// generate server side public key
- GcryptMPI serverPublic(gcry_mpi_snew(KEY_SIZE_BYTES * 8));
- // the generator of Second Oakley Group is 2
- gcry_mpi_powm(serverPublic.get(), GCRYMPI_CONST_TWO, serverPrivate.get(), IETF1024_SECOND_OAKLEY_GROUP_P.get());
+ GcryptMPI serverPublic = nullptr;
+ if (NextPubKey) {
+ serverPublic = std::move(NextPubKey);
+ } else {
+ serverPublic.reset(gcry_mpi_snew(KEY_SIZE_BYTES * 8));
+ // the generator of Second Oakley Group is 2
+ gcry_mpi_powm(
+ serverPublic.get(), GCRYMPI_CONST_TWO, serverPrivate.get(), IETF1024_SECOND_OAKLEY_GROUP_P.get());
+ }
initialize(std::move(clientPub), std::move(serverPublic), std::move(serverPrivate));
}
@@ -216,4 +230,13 @@ namespace FdoSecrets
return m_publicKey;
}
+ void DhIetf1024Sha256Aes128CbcPkcs7::fixNextServerKeys(GcryptMPI priv, GcryptMPI pub)
+ {
+ NextPrivKey = std::move(priv);
+ NextPubKey = std::move(pub);
+ }
+
+ GcryptMPI DhIetf1024Sha256Aes128CbcPkcs7::NextPrivKey = nullptr;
+ GcryptMPI DhIetf1024Sha256Aes128CbcPkcs7::NextPubKey = nullptr;
+
} // namespace FdoSecrets
diff --git a/src/fdosecrets/objects/SessionCipher.h b/src/fdosecrets/objects/SessionCipher.h
index 124636fdd..4d656c0af 100644
--- a/src/fdosecrets/objects/SessionCipher.h
+++ b/src/fdosecrets/objects/SessionCipher.h
@@ -22,6 +22,7 @@
#include "fdosecrets/objects/Session.h"
class TestFdoSecrets;
+class TestGuiFdoSecrets;
namespace FdoSecrets
{
@@ -42,6 +43,8 @@ namespace FdoSecrets
{
Q_DISABLE_COPY(PlainCipher)
public:
+ static constexpr const char Algorithm[] = "plain";
+
PlainCipher() = default;
SecretStruct encrypt(const SecretStruct& input) override
{
@@ -113,6 +116,8 @@ namespace FdoSecrets
}
public:
+ static constexpr const char Algorithm[] = "dh-ietf1024-sha256-aes128-cbc-pkcs7";
+
explicit DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes);
SecretStruct encrypt(const SecretStruct& input) override;
@@ -124,8 +129,17 @@ namespace FdoSecrets
QVariant negotiationOutput() const override;
private:
+ /**
+ * For test only, fix the server side private and public key.
+ */
+ static void fixNextServerKeys(GcryptMPI priv, GcryptMPI pub);
+ static GcryptMPI NextPrivKey;
+ static GcryptMPI NextPubKey;
+
+ private:
Q_DISABLE_COPY(DhIetf1024Sha256Aes128CbcPkcs7);
friend class ::TestFdoSecrets;
+ friend class ::TestGuiFdoSecrets;
};
} // namespace FdoSecrets
diff --git a/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp b/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp
index 16a780de7..7c7e3abe5 100644
--- a/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp
+++ b/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.cpp
@@ -168,8 +168,7 @@ void DatabaseSettingsWidgetFdoSecrets::settingsWarning()
m_ui->warningWidget->hideMessage();
} else {
m_ui->groupBox->setEnabled(false);
- m_ui->warningWidget->showMessage(tr("Enable fd.o Secret Service to access these settings."),
- MessageWidget::Warning);
+ m_ui->warningWidget->showMessage(tr("Enable Secret Service to access these settings."), MessageWidget::Warning);
m_ui->warningWidget->setCloseButtonVisible(false);
m_ui->warningWidget->setAutoHideTimeout(-1);
}
diff --git a/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui b/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui
index 6bacb32b6..24c820e08 100644
--- a/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui
+++ b/src/fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.ui
@@ -11,6 +11,18 @@
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
<item>
<widget class="MessageWidget" name="warningWidget" native="true"/>
</item>
@@ -23,7 +35,7 @@
<item>
<widget class="QRadioButton" name="radioDonotExpose">
<property name="text">
- <string>Don't e&amp;xpose this database</string>
+ <string>Don't expose this database</string>
</property>
<property name="checked">
<bool>true</bool>
@@ -36,7 +48,7 @@
<item>
<widget class="QRadioButton" name="radioExpose">
<property name="text">
- <string>Expose entries &amp;under this group:</string>
+ <string>Expose entries under this group:</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
diff --git a/src/fdosecrets/widgets/SettingsModels.cpp b/src/fdosecrets/widgets/SettingsModels.cpp
index edcb275c8..1382f1f0e 100644
--- a/src/fdosecrets/widgets/SettingsModels.cpp
+++ b/src/fdosecrets/widgets/SettingsModels.cpp
@@ -24,7 +24,7 @@
#include "core/Database.h"
#include "core/DatabaseIcons.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/DatabaseTabWidget.h"
#include "gui/DatabaseWidget.h"
@@ -130,7 +130,7 @@ namespace FdoSecrets
case Qt::DisplayRole:
return tr("Unlock to show");
case Qt::DecorationRole:
- return filePath()->icon(QStringLiteral("apps"), QStringLiteral("object-locked"), true);
+ return resources()->icon(QStringLiteral("object-locked"));
case Qt::FontRole: {
QFont font;
font.setItalic(true);
@@ -147,8 +147,7 @@ namespace FdoSecrets
case Qt::DisplayRole:
return group->name();
case Qt::DecorationRole:
- return group->isExpired() ? databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex)
- : group->iconScaledPixmap();
+ return group->iconPixmap();
case Qt::FontRole:
if (group->isExpired()) {
QFont font;
@@ -165,7 +164,7 @@ namespace FdoSecrets
case Qt::DisplayRole:
return tr("None");
case Qt::DecorationRole:
- return filePath()->icon(QStringLiteral("apps"), QStringLiteral("paint-none"), true);
+ return resources()->icon(QStringLiteral("paint-none"));
default:
return {};
}
@@ -335,9 +334,7 @@ namespace FdoSecrets
{
switch (role) {
case Qt::EditRole: {
- auto v = QVariant::fromValue(sess);
- qDebug() << v << v.type() << v.userType();
- return v;
+ return QVariant::fromValue(sess);
}
default:
return {};
diff --git a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp
index 59399cdec..9938def17 100644
--- a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp
+++ b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.cpp
@@ -23,10 +23,12 @@
#include "fdosecrets/objects/Session.h"
#include "fdosecrets/widgets/SettingsModels.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/DatabaseWidget.h"
#include <QAction>
+#include <QDBusConnection>
+#include <QDBusConnectionInterface>
#include <QHeaderView>
#include <QItemEditorFactory>
#include <QStyledItemDelegate>
@@ -61,7 +63,7 @@ namespace
// db settings
m_dbSettingsAct = new QAction(tr("Database settings"), this);
- m_dbSettingsAct->setIcon(filePath()->icon(QStringLiteral("actions"), QStringLiteral("document-edit")));
+ m_dbSettingsAct->setIcon(resources()->icon(QStringLiteral("document-edit")));
m_dbSettingsAct->setToolTip(tr("Edit database settings"));
m_dbSettingsAct->setEnabled(false);
connect(m_dbSettingsAct, &QAction::triggered, this, [this]() {
@@ -69,13 +71,13 @@ namespace
return;
}
auto db = m_dbWidget;
- m_plugin->serviceInstance()->doSwitchToChangeDatabaseSettings(m_dbWidget);
+ m_plugin->serviceInstance()->doSwitchToDatabaseSettings(m_dbWidget);
});
addAction(m_dbSettingsAct);
// unlock/lock
m_lockAct = new QAction(tr("Unlock database"), this);
- m_lockAct->setIcon(filePath()->icon(QStringLiteral("actions"), QStringLiteral("object-locked"), false));
+ m_lockAct->setIcon(resources()->icon(QStringLiteral("object-locked")));
m_lockAct->setToolTip(tr("Unlock database to show more information"));
connect(m_lockAct, &QAction::triggered, this, [this]() {
if (!m_dbWidget) {
@@ -133,14 +135,13 @@ namespace
}
connect(m_dbWidget, &DatabaseWidget::databaseLocked, this, [this]() {
m_lockAct->setText(tr("Unlock database"));
- m_lockAct->setIcon(filePath()->icon(QStringLiteral("actions"), QStringLiteral("object-locked"), false));
+ m_lockAct->setIcon(resources()->icon(QStringLiteral("object-locked")));
m_lockAct->setToolTip(tr("Unlock database to show more information"));
m_dbSettingsAct->setEnabled(false);
});
connect(m_dbWidget, &DatabaseWidget::databaseUnlocked, this, [this]() {
m_lockAct->setText(tr("Lock database"));
- m_lockAct->setIcon(
- filePath()->icon(QStringLiteral("actions"), QStringLiteral("object-unlocked"), false));
+ m_lockAct->setIcon(resources()->icon(QStringLiteral("object-unlocked")));
m_lockAct->setToolTip(tr("Lock database"));
m_dbSettingsAct->setEnabled(true);
});
@@ -173,7 +174,7 @@ namespace
addWidget(spacer);
m_disconnectAct = new QAction(tr("Disconnect"), this);
- m_disconnectAct->setIcon(filePath()->icon(QStringLiteral("actions"), QStringLiteral("dialog-close")));
+ m_disconnectAct->setIcon(resources()->icon(QStringLiteral("dialog-close")));
m_disconnectAct->setToolTip(tr("Disconnect this application"));
connect(m_disconnectAct, &QAction::triggered, this, [this]() {
if (m_session) {
@@ -237,6 +238,8 @@ SettingsWidgetFdoSecrets::SettingsWidgetFdoSecrets(FdoSecretsPlugin* plugin, QWi
, m_plugin(plugin)
{
m_ui->setupUi(this);
+ m_ui->warningMsg->setHidden(true);
+ m_ui->warningMsg->setCloseButtonVisible(false);
auto sessModel = new SettingsSessionModel(plugin, this);
m_ui->tableSessions->setModel(sessModel);
@@ -261,8 +264,17 @@ SettingsWidgetFdoSecrets::SettingsWidgetFdoSecrets(FdoSecretsPlugin* plugin, QWi
dbViewHeader->setSectionResizeMode(1, QHeaderView::Stretch); // group
dbViewHeader->setSectionResizeMode(2, QHeaderView::ResizeToContents); // manage button
- m_ui->tabWidget->setEnabled(m_ui->enableFdoSecretService->isChecked());
- connect(m_ui->enableFdoSecretService, &QCheckBox::toggled, m_ui->tabWidget, &QTabWidget::setEnabled);
+ // prompt the user to save settings before the sections are enabled
+ connect(m_plugin, &FdoSecretsPlugin::secretServiceStarted, this, &SettingsWidgetFdoSecrets::updateServiceState);
+ connect(m_plugin, &FdoSecretsPlugin::secretServiceStopped, this, &SettingsWidgetFdoSecrets::updateServiceState);
+ connect(m_ui->enableFdoSecretService, &QCheckBox::toggled, this, &SettingsWidgetFdoSecrets::updateServiceState);
+ updateServiceState();
+
+ // background checking
+ m_checkTimer.setInterval(2000);
+ connect(&m_checkTimer, &QTimer::timeout, this, &SettingsWidgetFdoSecrets::checkDBusName);
+ connect(m_plugin, &FdoSecretsPlugin::secretServiceStarted, &m_checkTimer, &QTimer::stop);
+ connect(m_plugin, SIGNAL(secretServiceStopped()), &m_checkTimer, SLOT(start()));
}
void SettingsWidgetFdoSecrets::setupView(QAbstractItemView* view,
@@ -301,4 +313,54 @@ void SettingsWidgetFdoSecrets::saveSettings()
FdoSecrets::settings()->setNoConfirmDeleteItem(m_ui->noConfirmDeleteItem->isChecked());
}
+void SettingsWidgetFdoSecrets::showEvent(QShowEvent* event)
+{
+ QWidget::showEvent(event);
+ QTimer::singleShot(0, this, &SettingsWidgetFdoSecrets::checkDBusName);
+ m_checkTimer.start();
+}
+
+void SettingsWidgetFdoSecrets::hideEvent(QHideEvent* event)
+{
+ QWidget::hideEvent(event);
+ m_checkTimer.stop();
+}
+
+void SettingsWidgetFdoSecrets::checkDBusName()
+{
+ if (m_plugin->serviceInstance()) {
+ // only need checking if the service is not started or failed to start.
+ return;
+ }
+
+ auto reply = QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral(DBUS_SERVICE_SECRET));
+ if (!reply.isValid()) {
+ m_ui->warningMsg->showMessage(
+ tr("<b>Error:</b> Failed to connect to DBus. Please check your DBus setup."), MessageWidget::Error, -1);
+ m_ui->enableFdoSecretService->setChecked(false);
+ m_ui->enableFdoSecretService->setEnabled(false);
+ return;
+ }
+ if (reply.value()) {
+ m_ui->warningMsg->showMessage(
+ tr("<b>Warning:</b> ") + m_plugin->reportExistingService(), MessageWidget::Warning, -1);
+ m_ui->enableFdoSecretService->setChecked(false);
+ m_ui->enableFdoSecretService->setEnabled(false);
+ return;
+ }
+ m_ui->warningMsg->hideMessage();
+ m_ui->enableFdoSecretService->setEnabled(true);
+}
+
+void SettingsWidgetFdoSecrets::updateServiceState()
+{
+ m_ui->tabWidget->setEnabled(m_plugin->serviceInstance() != nullptr);
+ if (m_ui->enableFdoSecretService->isChecked() && !m_plugin->serviceInstance()) {
+ m_ui->tabWidget->setToolTip(
+ tr("Save current changes to activate the plugin and enable editing of this section."));
+ } else {
+ m_ui->tabWidget->setToolTip("");
+ }
+}
+
#include "SettingsWidgetFdoSecrets.moc"
diff --git a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h
index 2bf58f826..c323b3900 100644
--- a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h
+++ b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.h
@@ -18,7 +18,10 @@
#ifndef KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H
#define KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H
+#include "gui/MessageWidget.h"
+
#include <QScopedPointer>
+#include <QTimer>
#include <QWidget>
class QAbstractItemView;
@@ -50,6 +53,14 @@ public slots:
void loadSettings();
void saveSettings();
+private slots:
+ void checkDBusName();
+ void updateServiceState();
+
+protected:
+ void showEvent(QShowEvent* event) override;
+ void hideEvent(QHideEvent* event) override;
+
private:
void setupView(QAbstractItemView* view, int manageColumn, int editorTypeId, QItemEditorCreatorBase* creator);
@@ -57,6 +68,7 @@ private:
QScopedPointer<Ui::SettingsWidgetFdoSecrets> m_ui;
QScopedPointer<QItemEditorFactory> m_factory;
FdoSecretsPlugin* m_plugin;
+ QTimer m_checkTimer;
};
#endif // KEEPASSXC_SETTINGSWIDGETFDOSECRETS_H
diff --git a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui
index 660181f5d..abc15d56e 100644
--- a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui
+++ b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui
@@ -14,8 +14,20 @@
<string>Options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
<item>
- <widget class="QWidget" name="warningMsg" native="true"/>
+ <widget class="MessageWidget" name="warningMsg" native="true"/>
</item>
<item>
<widget class="QCheckBox" name="enableFdoSecretService">
@@ -47,7 +59,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
- <string>Don't confirm when entries are deleted by clients.</string>
+ <string>Don't confirm when entries are deleted by clients</string>
</property>
</widget>
</item>
@@ -132,6 +144,14 @@
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>MessageWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/MessageWidget.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections/>
</ui>
diff --git a/src/format/HtmlExporter.cpp b/src/format/HtmlExporter.cpp
index 152f2933a..812af7868 100644
--- a/src/format/HtmlExporter.cpp
+++ b/src/format/HtmlExporter.cpp
@@ -21,6 +21,7 @@
#include <QFile>
#include "core/Database.h"
+#include "core/Global.h"
#include "core/Group.h"
#include "core/Metadata.h"
@@ -28,8 +29,9 @@ namespace
{
QString PixmapToHTML(const QPixmap& pixmap)
{
- if (pixmap.isNull())
+ if (pixmap.isNull()) {
return "";
+ }
// Based on https://stackoverflow.com/a/6621278
QByteArray a;
@@ -141,7 +143,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat
// Header line
auto header = QString("<hr><h2>");
- header.append(PixmapToHTML(group.iconScaledPixmap()));
+ header.append(PixmapToHTML(group.iconPixmap(IconSize::Medium)));
header.append("&nbsp;");
header.append(path);
header.append("</h2>\n");
@@ -165,7 +167,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat
auto item = QString("<div class=\"entry\"><h3>");
// Begin formatting this item into HTML
- item.append(PixmapToHTML(entry->iconScaledPixmap()));
+ item.append(PixmapToHTML(entry->iconPixmap(IconSize::Medium)));
item.append("&nbsp;");
item.append(entry->title().toHtmlEscaped());
item.append("</h3>\n"
@@ -176,7 +178,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat
if (!u.isEmpty()) {
item.append("<tr><th>");
item.append(QObject::tr("User name"));
- item.append("</t><td class=\"username\">");
+ item.append("</th><td class=\"username\">");
item.append(entry->username().toHtmlEscaped());
item.append("</td></tr>");
}
diff --git a/src/format/Kdbx3Reader.cpp b/src/format/Kdbx3Reader.cpp
index 9196bc616..35244f618 100644
--- a/src/format/Kdbx3Reader.cpp
+++ b/src/format/Kdbx3Reader.cpp
@@ -18,6 +18,7 @@
#include "Kdbx3Reader.h"
+#include "core/AsyncTask.h"
#include "core/Endian.h"
#include "core/Group.h"
#include "crypto/CryptoHash.h"
@@ -47,20 +48,21 @@ bool Kdbx3Reader::readDatabaseImpl(QIODevice* device,
return false;
}
- if (!db->setKey(key, false)) {
- raiseError(tr("Unable to calculate master key"));
+ bool ok = AsyncTask::runAndWaitForFuture([&] { return db->setKey(key, false); });
+ if (!ok) {
+ raiseError(tr("Unable to calculate database key"));
return false;
}
if (!db->challengeMasterSeed(m_masterSeed)) {
- raiseError(tr("Unable to issue challenge-response."));
+ raiseError(tr("Unable to issue challenge-response: %1").arg(db->keyError()));
return false;
}
CryptoHash hash(CryptoHash::Sha256);
hash.addData(m_masterSeed);
hash.addData(db->challengeResponseKey());
- hash.addData(db->transformedMasterKey());
+ hash.addData(db->transformedDatabaseKey());
QByteArray finalKey = hash.result();
SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher());
diff --git a/src/format/Kdbx3Writer.cpp b/src/format/Kdbx3Writer.cpp
index 0728dc294..b1c1b820a 100644
--- a/src/format/Kdbx3Writer.cpp
+++ b/src/format/Kdbx3Writer.cpp
@@ -42,21 +42,21 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db)
QByteArray endOfHeader = "\r\n\r\n";
if (!db->challengeMasterSeed(masterSeed)) {
- raiseError(tr("Unable to issue challenge-response."));
+ raiseError(tr("Unable to issue challenge-response: %1").arg(db->keyError()));
return false;
}
if (!db->setKey(db->key(), false, true)) {
- raiseError(tr("Unable to calculate master key"));
+ raiseError(tr("Unable to calculate database key"));
return false;
}
- // generate transformed master key
+ // generate transformed database key
CryptoHash hash(CryptoHash::Sha256);
hash.addData(masterSeed);
hash.addData(db->challengeResponseKey());
- Q_ASSERT(!db->transformedMasterKey().isEmpty());
- hash.addData(db->transformedMasterKey());
+ Q_ASSERT(!db->transformedDatabaseKey().isEmpty());
+ hash.addData(db->transformedDatabaseKey());
QByteArray finalKey = hash.result();
// write header
diff --git a/src/format/Kdbx4Reader.cpp b/src/format/Kdbx4Reader.cpp
index d0914a04e..baeab903c 100644
--- a/src/format/Kdbx4Reader.cpp
+++ b/src/format/Kdbx4Reader.cpp
@@ -19,6 +19,7 @@
#include <QBuffer>
+#include "core/AsyncTask.h"
#include "core/Endian.h"
#include "core/Group.h"
#include "crypto/CryptoHash.h"
@@ -47,14 +48,15 @@ bool Kdbx4Reader::readDatabaseImpl(QIODevice* device,
return false;
}
- if (!db->setKey(key, false, false)) {
- raiseError(tr("Unable to calculate master key"));
+ bool ok = AsyncTask::runAndWaitForFuture([&] { return db->setKey(key, false, false); });
+ if (!ok) {
+ raiseError(tr("Unable to calculate database key: %1").arg(db->keyError()));
return false;
}
CryptoHash hash(CryptoHash::Sha256);
hash.addData(m_masterSeed);
- hash.addData(db->transformedMasterKey());
+ hash.addData(db->transformedDatabaseKey());
QByteArray finalKey = hash.result();
QByteArray headerSha256 = device->read(32);
@@ -69,7 +71,7 @@ bool Kdbx4Reader::readDatabaseImpl(QIODevice* device,
}
// clang-format off
- QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, db->transformedMasterKey());
+ QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, db->transformedDatabaseKey());
if (headerHmac != CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256)) {
raiseError(tr("Invalid credentials were provided, please try again.\n"
"If this reoccurs, then your database file may be corrupt.") + " " + tr("(HMAC mismatch)"));
diff --git a/src/format/Kdbx4Writer.cpp b/src/format/Kdbx4Writer.cpp
index 03d549cf0..1810d9aa7 100644
--- a/src/format/Kdbx4Writer.cpp
+++ b/src/format/Kdbx4Writer.cpp
@@ -53,15 +53,15 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db)
QByteArray endOfHeader = "\r\n\r\n";
if (!db->setKey(db->key(), false, true)) {
- raiseError(tr("Unable to calculate master key"));
+ raiseError(tr("Unable to calculate database key: %1").arg(db->keyError()));
return false;
}
- // generate transformed master key
+ // generate transformed database key
CryptoHash hash(CryptoHash::Sha256);
hash.addData(masterSeed);
- Q_ASSERT(!db->transformedMasterKey().isEmpty());
- hash.addData(db->transformedMasterKey());
+ Q_ASSERT(!db->transformedDatabaseKey().isEmpty());
+ hash.addData(db->transformedDatabaseKey());
QByteArray finalKey = hash.result();
// write header
@@ -109,7 +109,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db)
QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256);
// write HMAC-authenticated cipher stream
- QByteArray hmacKey = KeePass2::hmacKey(masterSeed, db->transformedMasterKey());
+ QByteArray hmacKey = KeePass2::hmacKey(masterSeed, db->transformedDatabaseKey());
QByteArray headerHmac =
CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256);
CHECK_RETURN_FALSE(writeData(device, headerHash));
diff --git a/src/format/KdbxWriter.h b/src/format/KdbxWriter.h
index 6d759bad2..d5e214a51 100644
--- a/src/format/KdbxWriter.h
+++ b/src/format/KdbxWriter.h
@@ -77,8 +77,7 @@ protected:
{
Q_ASSERT(static_cast<unsigned long>(data.size()) < (1ull << (sizeof(SizedQInt) * 8)));
- QByteArray fieldIdArr;
- fieldIdArr[0] = static_cast<char>(fieldId);
+ QByteArray fieldIdArr(1, static_cast<char>(fieldId));
CHECK_RETURN_FALSE(writeData(device, fieldIdArr));
CHECK_RETURN_FALSE(writeData(
device, Endian::sizedIntToBytes<SizedQInt>(static_cast<SizedQInt>(data.size()), KeePass2::BYTEORDER)));
diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp
index ab2b9aeb7..8466dde7f 100644
--- a/src/format/KdbxXmlReader.cpp
+++ b/src/format/KdbxXmlReader.cpp
@@ -262,7 +262,7 @@ void KdbxXmlReader::parseMeta()
} else if (m_xml.name() == "Color") {
m_meta->setColor(readColor());
} else if (m_xml.name() == "MasterKeyChanged") {
- m_meta->setMasterKeyChanged(readDateTime());
+ m_meta->setDatabaseKeyChanged(readDateTime());
} else if (m_xml.name() == "MasterKeyChangeRec") {
m_meta->setMasterKeyChangeRec(readNumber());
} else if (m_xml.name() == "MasterKeyChangeForce") {
@@ -368,7 +368,7 @@ void KdbxXmlReader::parseIcon()
if (uuidSet && iconSet) {
// Check for duplicate UUID (corruption)
- if (m_meta->containsCustomIcon(uuid)) {
+ if (m_meta->hasCustomIcon(uuid)) {
uuid = QUuid::createUuid();
}
m_meta->addCustomIcon(uuid, icon);
@@ -513,9 +513,9 @@ Group* KdbxXmlReader::parseGroup()
raiseError(tr("Invalid group icon number"));
}
iconId = 0;
- } else if (iconId >= DatabaseIcons::IconCount) {
+ } else if (iconId >= databaseIcons()->count()) {
qWarning("KdbxXmlReader::parseGroup: icon id \"%d\" not supported", iconId);
- iconId = DatabaseIcons::IconCount - 1;
+ iconId = databaseIcons()->count() - 1;
}
group->setIcon(iconId);
@@ -875,11 +875,13 @@ QPair<QString, QString> KdbxXmlReader::parseEntryBinary(Entry* entry)
}
if (keySet && valueSet) {
- if (entry->attachments()->hasKey(key)) {
- raiseError(tr("Duplicate attachment found"));
- } else {
- entry->attachments()->set(key, value);
+ if (entry->attachments()->hasKey(key) && entry->attachments()->value(key) != value) {
+ // NOTE: This only impacts KDBX 3.x databases
+ // Prepend a random string to the key to make it unique and prevent data loss
+ key = key.prepend(QUuid::createUuid().toString().mid(1, 8) + "_");
+ qWarning("Duplicate attachment name found, renamed to: %s", qPrintable(key));
}
+ entry->attachments()->set(key, value);
} else {
raiseError(tr("Entry binary key or value missing"));
}
@@ -1047,22 +1049,21 @@ QDateTime KdbxXmlReader::readDateTime()
return Clock::currentDateTimeUtc();
}
-QColor KdbxXmlReader::readColor()
+QString KdbxXmlReader::readColor()
{
QString colorStr = readString();
if (colorStr.isEmpty()) {
- return {};
+ return colorStr;
}
if (colorStr.length() != 7 || colorStr[0] != '#') {
if (m_strictMode) {
raiseError(tr("Invalid color value"));
}
- return {};
+ return colorStr;
}
- QColor color;
for (int i = 0; i <= 2; ++i) {
QString rgbPartStr = colorStr.mid(1 + 2 * i, 2);
bool ok;
@@ -1071,19 +1072,11 @@ QColor KdbxXmlReader::readColor()
if (m_strictMode) {
raiseError(tr("Invalid color rgb part"));
}
- return {};
- }
-
- if (i == 0) {
- color.setRed(rgbPart);
- } else if (i == 1) {
- color.setGreen(rgbPart);
- } else {
- color.setBlue(rgbPart);
+ return colorStr;
}
}
- return color;
+ return colorStr;
}
int KdbxXmlReader::readNumber()
diff --git a/src/format/KdbxXmlReader.h b/src/format/KdbxXmlReader.h
index 2ec9c9f66..562343971 100644
--- a/src/format/KdbxXmlReader.h
+++ b/src/format/KdbxXmlReader.h
@@ -83,7 +83,7 @@ protected:
virtual QString readString(bool& isProtected, bool& protectInMemory);
virtual bool readBool();
virtual QDateTime readDateTime();
- virtual QColor readColor();
+ virtual QString readColor();
virtual int readNumber();
virtual QUuid readUuid();
virtual QByteArray readBinary();
diff --git a/src/format/KdbxXmlWriter.cpp b/src/format/KdbxXmlWriter.cpp
index 7aa79c47d..701c246bd 100644
--- a/src/format/KdbxXmlWriter.cpp
+++ b/src/format/KdbxXmlWriter.cpp
@@ -111,10 +111,10 @@ void KdbxXmlWriter::writeMetadata()
writeString("DefaultUserName", m_meta->defaultUserName());
writeDateTime("DefaultUserNameChanged", m_meta->defaultUserNameChanged());
writeNumber("MaintenanceHistoryDays", m_meta->maintenanceHistoryDays());
- writeColor("Color", m_meta->color());
- writeDateTime("MasterKeyChanged", m_meta->masterKeyChanged());
- writeNumber("MasterKeyChangeRec", m_meta->masterKeyChangeRec());
- writeNumber("MasterKeyChangeForce", m_meta->masterKeyChangeForce());
+ writeString("Color", m_meta->color());
+ writeDateTime("MasterKeyChanged", m_meta->databaseKeyChanged());
+ writeNumber("MasterKeyChangeRec", m_meta->databaseKeyChangeRec());
+ writeNumber("MasterKeyChangeForce", m_meta->databaseKeyChangeForce());
writeMemoryProtection();
writeCustomIcons();
writeBool("RecycleBinEnabled", m_meta->recycleBinEnabled());
@@ -346,8 +346,8 @@ void KdbxXmlWriter::writeEntry(const Entry* entry)
if (!entry->iconUuid().isNull()) {
writeUuid("CustomIconUUID", entry->iconUuid());
}
- writeColor("ForegroundColor", entry->foregroundColor());
- writeColor("BackgroundColor", entry->backgroundColor());
+ writeString("ForegroundColor", entry->foregroundColor());
+ writeString("BackgroundColor", entry->backgroundColor());
writeString("OverrideURL", entry->overrideUrl());
writeString("Tags", entry->tags());
writeTimes(entry->timeInfo());
@@ -532,18 +532,6 @@ void KdbxXmlWriter::writeBinary(const QString& qualifiedName, const QByteArray&
writeString(qualifiedName, QString::fromLatin1(ba.toBase64()));
}
-void KdbxXmlWriter::writeColor(const QString& qualifiedName, const QColor& color)
-{
- QString colorStr;
-
- if (color.isValid()) {
- colorStr = QString("#%1%2%3").arg(
- colorPartToString(color.red()), colorPartToString(color.green()), colorPartToString(color.blue()));
- }
-
- writeString(qualifiedName, colorStr);
-}
-
void KdbxXmlWriter::writeTriState(const QString& qualifiedName, Group::TriState triState)
{
QString value;
diff --git a/src/format/KdbxXmlWriter.h b/src/format/KdbxXmlWriter.h
index 1a367a263..eaad9f211 100644
--- a/src/format/KdbxXmlWriter.h
+++ b/src/format/KdbxXmlWriter.h
@@ -18,7 +18,6 @@
#ifndef KEEPASSX_KDBXXMLWRITER_H
#define KEEPASSX_KDBXXMLWRITER_H
-#include <QColor>
#include <QDateTime>
#include <QImage>
#include <QXmlStreamWriter>
@@ -74,7 +73,6 @@ private:
void writeUuid(const QString& qualifiedName, const Group* group);
void writeUuid(const QString& qualifiedName, const Entry* entry);
void writeBinary(const QString& qualifiedName, const QByteArray& ba);
- void writeColor(const QString& qualifiedName, const QColor& color);
void writeTriState(const QString& qualifiedName, Group::TriState triState);
QString colorPartToString(int value);
QString stripInvalidXml10Chars(QString str);
diff --git a/src/format/KeePass1Reader.cpp b/src/format/KeePass1Reader.cpp
index 0319b1b2d..80e84d8cd 100644
--- a/src/format/KeePass1Reader.cpp
+++ b/src/format/KeePass1Reader.cpp
@@ -242,7 +242,7 @@ KeePass1Reader::readDatabase(QIODevice* device, const QString& password, QIODevi
}
if (!db->setKey(key)) {
- raiseError(tr("Unable to calculate master key"));
+ raiseError(tr("Unable to calculate database key"));
return {};
}
diff --git a/src/format/KeePass2.cpp b/src/format/KeePass2.cpp
index fbc393030..dc50ca001 100644
--- a/src/format/KeePass2.cpp
+++ b/src/format/KeePass2.cpp
@@ -48,9 +48,9 @@ const QString KeePass2::KDFPARAM_ARGON2_SECRET("K");
const QString KeePass2::KDFPARAM_ARGON2_ASSOCDATA("A");
const QList<QPair<QUuid, QString>> KeePass2::CIPHERS{
- qMakePair(KeePass2::CIPHER_AES256, QObject::tr("AES: 256-bit")),
- qMakePair(KeePass2::CIPHER_TWOFISH, QObject::tr("Twofish: 256-bit")),
- qMakePair(KeePass2::CIPHER_CHACHA20, QObject::tr("ChaCha20: 256-bit"))};
+ qMakePair(KeePass2::CIPHER_AES256, QObject::tr("AES 256-bit")),
+ qMakePair(KeePass2::CIPHER_TWOFISH, QObject::tr("Twofish 256-bit")),
+ qMakePair(KeePass2::CIPHER_CHACHA20, QObject::tr("ChaCha20 256-bit"))};
const QList<QPair<QUuid, QString>> KeePass2::KDFS{
qMakePair(KeePass2::KDF_ARGON2, QObject::tr("Argon2 (KDBX 4 – recommended)")),
diff --git a/src/format/OpVaultReader.cpp b/src/format/OpVaultReader.cpp
index cc72653fd..a64b009de 100644
--- a/src/format/OpVaultReader.cpp
+++ b/src/format/OpVaultReader.cpp
@@ -66,6 +66,8 @@ Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password)
return nullptr;
}
+ auto vaultName = opdataDir.dirName();
+
auto key = QSharedPointer<CompositeKey>::create();
key->addKey(QSharedPointer<PasswordKey>::create(password));
@@ -73,12 +75,12 @@ Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password)
db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2));
db->setCipher(KeePass2::CIPHER_AES256);
db->setKey(key, true, false);
- db->metadata()->setName(opdataDir.dirName());
+ db->metadata()->setName(vaultName);
auto rootGroup = db->rootGroup();
rootGroup->setTimeInfo({});
rootGroup->setUpdateTimeinfo(false);
- rootGroup->setName("OPVault Root Group");
+ rootGroup->setName(vaultName.remove(".opvault"));
rootGroup->setUuid(QUuid::createUuid());
populateCategoryGroups(rootGroup);
@@ -110,7 +112,6 @@ Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password)
for (QChar ch : bandChars) {
QFile bandFile(defaultDir.filePath(bandPattern.arg(ch)));
if (!bandFile.exists()) {
- qWarning() << "Skipping missing file \"" << bandFile.fileName() << "\"";
continue;
}
// https://support.1password.com/opvault-design/#band-files
@@ -137,13 +138,20 @@ Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password)
continue;
}
// https://support.1password.com/opvault-design/#items
- Entry* entry = processBandEntry(bandEnt, defaultDir, rootGroup);
+ auto entry = processBandEntry(bandEnt, defaultDir, rootGroup);
if (!entry) {
qWarning() << "Unable to process Band Entry " << uuid;
}
}
}
+ // Remove empty categories (groups)
+ for (auto group : rootGroup->children()) {
+ if (group->isEmpty()) {
+ delete group;
+ }
+ }
+
zeroKeys();
return db.take();
}
diff --git a/src/format/OpVaultReaderAttachments.cpp b/src/format/OpVaultReaderAttachments.cpp
index 49367e306..00b3f283b 100644
--- a/src/format/OpVaultReaderAttachments.cpp
+++ b/src/format/OpVaultReaderAttachments.cpp
@@ -125,22 +125,8 @@ bool OpVaultReader::readAttachment(const QString& filePath,
return false;
}
- if (!metadata.contains("contentsSize")) {
- qWarning() << "Expected attachment metadata to contain \"contentsSize\" but nope: " << metadata;
- return false;
- } else if (!metadata["contentsSize"].isDouble()) {
- qWarning() << "Expected attachment metadata to contain numeric \"contentsSize\" but nope: " << metadata;
- return false;
- }
- int bytesLen = metadata["contentsSize"].toInt();
- const QByteArray encData = file.readAll();
- if (encData.size() < bytesLen) {
- qCritical() << "Unable to read all of the attachment payload; wanted " << bytesLen << "but got"
- << encData.size();
- return false;
- }
-
OpData01 att01;
+ const QByteArray encData = file.readAll();
if (!att01.decode(encData, itemKey, itemHmacKey)) {
qCritical() << "Unable to decipher attachment payload: " << att01.errorString();
return false;
diff --git a/src/format/OpVaultReaderBandEntry.cpp b/src/format/OpVaultReaderBandEntry.cpp
index 22af783d5..f684561b8 100644
--- a/src/format/OpVaultReaderBandEntry.cpp
+++ b/src/format/OpVaultReaderBandEntry.cpp
@@ -27,6 +27,7 @@
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
+#include <QScopedPointer>
#include <QUuid>
bool OpVaultReader::decryptBandEntry(const QJsonObject& bandEntry,
@@ -112,9 +113,12 @@ Entry* OpVaultReader::processBandEntry(const QJsonObject& bandEntry, const QDir&
return nullptr;
}
- const auto entry = new Entry();
+ QScopedPointer<Entry> entry(new Entry());
- if (bandEntry.contains("category")) {
+ if (bandEntry.contains("trashed") && bandEntry["trashed"].toBool()) {
+ // Send this entry to the recycle bin
+ rootGroup->database()->recycleEntry(entry.data());
+ } else if (bandEntry.contains("category")) {
const QJsonValue& categoryValue = bandEntry["category"];
if (categoryValue.isString()) {
bool found = false;
@@ -162,8 +166,7 @@ Entry* OpVaultReader::processBandEntry(const QJsonObject& bandEntry, const QDir&
}
entry->setUuid(Tools::hexToUuid(uuid));
- if (!fillAttributes(entry, bandEntry)) {
- delete entry;
+ if (!fillAttributes(entry.data(), bandEntry)) {
return nullptr;
}
@@ -184,7 +187,7 @@ Entry* OpVaultReader::processBandEntry(const QJsonObject& bandEntry, const QDir&
entry->setPassword(data.value("password").toString());
}
- for (const auto& fieldValue : data.value("fields").toArray()) {
+ for (const auto fieldValue : data.value("fields").toArray()) {
if (!fieldValue.isObject()) {
continue;
}
@@ -208,11 +211,11 @@ Entry* OpVaultReader::processBandEntry(const QJsonObject& bandEntry, const QDir&
}
const QJsonObject& section = sectionValue.toObject();
- fillFromSection(entry, section);
+ fillFromSection(entry.data(), section);
}
- fillAttachments(entry, attachmentDir, entryKey, entryHmacKey);
- return entry;
+ fillAttachments(entry.data(), attachmentDir, entryKey, entryHmacKey);
+ return entry.take();
}
bool OpVaultReader::fillAttributes(Entry* entry, const QJsonObject& bandEntry)
@@ -225,9 +228,9 @@ bool OpVaultReader::fillAttributes(Entry* entry, const QJsonObject& bandEntry)
return false;
}
- QByteArray overviewJsonBytes = entOver01.getClearText();
- QJsonDocument overviewDoc = QJsonDocument::fromJson(overviewJsonBytes);
- QJsonObject overviewJson = overviewDoc.object();
+ auto overviewJsonBytes = entOver01.getClearText();
+ auto overviewDoc = QJsonDocument::fromJson(overviewJsonBytes);
+ auto overviewJson = overviewDoc.object();
QString title = overviewJson.value("title").toString();
entry->setTitle(title);
@@ -236,26 +239,20 @@ bool OpVaultReader::fillAttributes(Entry* entry, const QJsonObject& bandEntry)
entry->setUrl(url);
int i = 1;
- for (const auto& urlV : overviewJson["URLs"].toArray()) {
- auto urlName = QString("URL_%1").arg(i);
- auto urlValue = urlV.toString();
- if (urlV.isObject()) {
- const auto& urlObj = urlV.toObject();
- if (urlObj["l"].isString() && urlObj["u"].isString()) {
- urlName = urlObj["l"].toString();
- urlValue = urlObj["u"].toString();
- } else {
- continue;
+ for (const auto urlV : overviewJson["URLs"].toArray()) {
+ const auto& urlObj = urlV.toObject();
+ if (urlObj.contains("u")) {
+ auto newUrl = urlObj["u"].toString();
+ if (newUrl != url) {
+ // Add this url if it isn't the base one
+ entry->attributes()->set(QString("KP2A_URL_%1").arg(i), newUrl);
+ ++i;
}
}
- if (!urlValue.isEmpty() && urlValue != url) {
- entry->attributes()->set(urlName, urlValue);
- ++i;
- }
}
QStringList tagsList;
- for (const auto& tagV : overviewJson["tags"].toArray()) {
+ for (const auto tagV : overviewJson["tags"].toArray()) {
if (tagV.isString()) {
tagsList << tagV.toString();
}
diff --git a/src/format/OpVaultReaderSections.cpp b/src/format/OpVaultReaderSections.cpp
index 4dcf80e48..e59dd9f02 100644
--- a/src/format/OpVaultReaderSections.cpp
+++ b/src/format/OpVaultReaderSections.cpp
@@ -31,10 +31,29 @@
#include <QUrlQuery>
#include <QUuid>
+namespace
+{
+ QDateTime resolveDate(const QString& kind, const QJsonValue& value)
+ {
+ QDateTime date;
+ if (kind == "monthYear") {
+ // 1Password programmers are sadistic...
+ auto dateValue = QString::number(value.toInt());
+ date = QDateTime::fromString(dateValue, "yyyyMM");
+ date.setTimeSpec(Qt::UTC);
+ } else if (value.isString()) {
+ date = QDateTime::fromTime_t(value.toString().toUInt(), Qt::UTC);
+ } else {
+ date = QDateTime::fromTime_t(value.toInt(), Qt::UTC);
+ }
+ return date;
+ }
+} // namespace
+
void OpVaultReader::fillFromSection(Entry* entry, const QJsonObject& section)
{
const auto uuid = entry->uuid();
- const QString& sectionName = section["name"].toString();
+ QString sectionName = section["name"].toString();
if (!section.contains("fields")) {
auto sectionNameLC = sectionName.toLower();
@@ -47,6 +66,12 @@ void OpVaultReader::fillFromSection(Entry* entry, const QJsonObject& section)
qWarning() << R"(Skipping non-Array "fields" in UUID ")" << uuid << "\"\n";
return;
}
+
+ // If we have a default section name then replace with the section title if not empty
+ if (sectionName.startsWith("Section_") && !section["title"].toString().isEmpty()) {
+ sectionName = section["title"].toString();
+ }
+
QJsonArray sectionFields = section["fields"].toArray();
for (const QJsonValue sectionField : sectionFields) {
if (!sectionField.isObject()) {
@@ -68,7 +93,7 @@ void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionNam
// Ignore "a" and "inputTraits" fields, they don't apply to KPXC
auto attrName = resolveAttributeName(sectionName, field["n"].toString(), field["t"].toString());
- auto attrValue = field.value("v").toVariant().toString();
+ auto attrValue = field.value("v").toString();
auto kind = field["k"].toString();
if (attrName.startsWith("TOTP_")) {
@@ -82,30 +107,37 @@ void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionNam
query.addQueryItem("period", QString("%1").arg(Totp::DEFAULT_STEP));
}
attrValue = query.toString(QUrl::FullyEncoded);
- }
- entry->setTotp(Totp::parseSettings(attrValue));
- } else if (attrName.startsWith("expir", Qt::CaseInsensitive)) {
- QDateTime expiry;
- if (kind == "date") {
- expiry = QDateTime::fromTime_t(attrValue.toUInt(), Qt::UTC);
+ entry->setTotp(Totp::parseSettings(attrValue));
} else {
- expiry = QDateTime::fromString(attrValue, "yyyyMM");
- expiry.setTimeSpec(Qt::UTC);
+ entry->setTotp(Totp::parseSettings({}, attrValue));
}
+ } else if (attrName.startsWith("expir", Qt::CaseInsensitive)) {
+ QDateTime expiry = resolveDate(kind, field.value("v"));
if (expiry.isValid()) {
entry->setExpiryTime(expiry);
entry->setExpires(true);
+ } else {
+ qWarning() << QString("[%1] Invalid expiration date found: %2").arg(entry->title(), attrValue);
}
} else {
- if (kind == "date") {
- auto date = QDateTime::fromTime_t(attrValue.toUInt(), Qt::UTC);
+ if (kind == "date" || kind == "monthYear") {
+ QDateTime date = resolveDate(kind, field.value("v"));
if (date.isValid()) {
- attrValue = date.toString();
+ entry->attributes()->set(attrName, date.toString(Qt::SystemLocaleShortDate));
+ } else {
+ qWarning()
+ << QString("[%1] Invalid date attribute found: %2 = %3").arg(entry->title(), attrName, attrValue);
}
+ } else if (kind == "address") {
+ // Expand address into multiple attributes
+ auto addrFields = field.value("v").toObject().toVariantMap();
+ for (auto part : addrFields.keys()) {
+ entry->attributes()->set(attrName + QString("_%1").arg(part), addrFields.value(part).toString());
+ }
+ } else {
+ entry->attributes()->set(attrName, attrValue, (kind == "password" || kind == "concealed"));
}
-
- entry->attributes()->set(attrName, attrValue, (kind == "password" || kind == "concealed"));
}
}
@@ -118,7 +150,7 @@ QString OpVaultReader::resolveAttributeName(const QString& section, const QStrin
auto lowName = name.toLower();
auto lowText = text.toLower();
- if (section.isEmpty()) {
+ if (section.isEmpty() || name.startsWith("address")) {
// Empty section implies these are core attributes
// try to find username, password, url
if (lowName == "password" || lowText == "password") {
diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp
index 4b9fe5f85..b97d62590 100644
--- a/src/gui/AboutDialog.cpp
+++ b/src/gui/AboutDialog.cpp
@@ -20,7 +20,7 @@
#include "ui_AboutDialog.h"
#include "config-keepassx.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "core/Tools.h"
#include "crypto/Crypto.h"
@@ -30,11 +30,10 @@ static const QString aboutMaintainers = R"(
<p><ul>
<li>Jonathan White (<a href="https://github.com/droidmonkey">droidmonkey</a>)</li>
<li>Janek Bevendorff (<a href="https://github.com/phoerious">phoerious</a>)</li>
- <li><a href="https://github.com/TheZ3ro">TheZ3ro</a></li>
- <li>Louis-Bertrand (<a href="https://github.com/louib">louib</a>)</li>
- <li>Weslly Honorato (<a href="https://github.com/weslly">weslly</a>)</li>
- <li>Toni Spets (<a href="https://github.com/hifi">hifi</a>)</li>
<li>Sami V&auml;nttinen (<a href="https://github.com/varjolintu">varjolintu</a>)</li>
+ <li>Toni Spets (<a href="https://github.com/hifi">hifi</a>)</li>
+ <li>Louis-Bertrand (<a href="https://github.com/louib">louib</a>)</li>
+ <li><a href="https://github.com/TheZ3ro">TheZ3ro</a> (retired)</li>
</ul></p>
)";
@@ -57,64 +56,68 @@ static const QString aboutContributors = R"(
<li>Riley Moses</li>
<li>Korbinian Schildmann</li>
<li>Andreas (nitrohorse)</li>
+ <li>Kernellinux</li>
+ <li>Micha Ober</li>
+ <li>PublicByte</li>
</ul>
<h3>Notable Code Contributions:</h3>
<ul>
<li>droidmonkey</li>
<li>phoerious</li>
- <li>TheZ3ro</li>
- <li>louib</li>
- <li>weslly</li>
- <li>varjolintu (KeePassXC-Browser)</li>
+ <li>louib (CLI)</li>
+ <li>varjolintu (Browser Integration)</li>
<li>hifi (SSH Agent)</li>
<li>ckieschnick (KeeShare)</li>
<li>seatedscribe (CSV Import)</li>
- <li>Aetf (Secret Storage Server)</li>
+ <li>Aetf (FdoSecrets Storage Server)</li>
+ <li>weslly (macOS improvements)</li>
<li>brainplot (many improvements)</li>
<li>kneitinger (many improvements)</li>
<li>frostasm (many improvements)</li>
<li>fonic (Entry Table View)</li>
<li>kylemanna (YubiKey)</li>
<li>c4rlo (Offline HIBP Checker)</li>
- <li>wolframroesler (HTML Exporter)</li>
+ <li>wolframroesler (HTML Export, Statistics, Password Health, HIBP integration)</li>
<li>mdaniel (OpVault Importer)</li>
- <li>keithbennett (KeePassHTTP)</li>
- <li>Typz (KeePassHTTP)</li>
- <li>denk-mal (KeePassHTTP)</li>
<li>angelsl (KDBX 4)</li>
+ <li>TheZ3ro (retired lead)</li>
<li>debfx (KeePassX)</li>
<li>BlueIce (KeePassX)</li>
</ul>
<h3>Patreon Supporters:</h3>
<ul>
+ <li>Igor Zinovik</li>
<li>Alexanderjb</li>
- <li>Andreas Kollmann</li>
<li>Richard Ames</li>
- <li>Christian Rasmussen</li>
- <li>Gregory Werbin</li>
- <li>Nuutti Toivola</li>
<li>SLmanDR</li>
- <li>Ashura</li>
+ <li>Christian Rasmussen</li>
<li>Tyler Gass</li>
- <li>Lionel Laské</li>
- <li>Dmitrii Galinskii</li>
- <li>Sergei Maximov</li>
- <li>John-Ivar</li>
- <li>Clayton Casciato</li>
- <li>John</li>
+ <li>Nuutti Toivola</li>
+ <li>Gregory Werbin</li>
+ <li>Lionel Laské</li>
+ <li>Ivar</li>
<li>Darren</li>
<li>Brad</li>
<li>Mathieu Peltier</li>
+ <li>gonczor</li>
<li>Oleksii Aleksieiev</li>
- <li>Daniel Epp</li>
<li>Gernot Premper</li>
<li>Julian Stier</li>
- <li>gonczor</li>
+ <li>Daniel Epp</li>
<li>Ruben Schade</li>
<li>Esteban Martinez</li>
+ <li>Niels Ganser</li>
<li>turin231</li>
<li>judd</li>
- <li>Niels Ganser</li>
+ <li>Tarek Sherif</li>
+ <li>Bernhard</li>
+ <li>William Komanetsky</li>
+ <li>Clark Henry</li>
+ <li>Justin Carroll</li>
+ <li>Shintaro Matsushima</li>
+ <li>Larry Siden</li>
+ <li>Thammachart Chinvarapon</li>
+ <li>Patrick Evans</li>
</ul>
<h3>Translations:</h3>
<ul>
@@ -207,7 +210,7 @@ AboutDialog::AboutDialog(QWidget* parent)
nameLabelFont.setPointSize(nameLabelFont.pointSize() + 4);
m_ui->nameLabel->setFont(nameLabelFont);
- m_ui->iconLabel->setPixmap(filePath()->applicationIcon().pixmap(48));
+ m_ui->iconLabel->setPixmap(resources()->applicationIcon().pixmap(48));
QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo());
m_ui->debugInfo->setPlainText(debugInfo);
@@ -218,6 +221,8 @@ AboutDialog::AboutDialog(QWidget* parent)
setAttribute(Qt::WA_DeleteOnClose);
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close()));
connect(m_ui->copyToClipboard, SIGNAL(clicked()), SLOT(copyToClipboard()));
+
+ m_ui->buttonBox->button(QDialogButtonBox::Close)->setDefault(true);
}
AboutDialog::~AboutDialog()
diff --git a/src/gui/AboutDialog.ui b/src/gui/AboutDialog.ui
index 8bd8ea01f..348c79cf7 100644
--- a/src/gui/AboutDialog.ui
+++ b/src/gui/AboutDialog.ui
@@ -231,7 +231,7 @@
<x>0</x>
<y>0</y>
<width>466</width>
- <height>246</height>
+ <height>242</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
@@ -336,6 +336,12 @@
</item>
</layout>
</widget>
+ <tabstops>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>scrollArea</tabstop>
+ <tabstop>debugInfo</tabstop>
+ <tabstop>copyToClipboard</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp
index b79f2c30a..625540c1d 100644
--- a/src/gui/Application.cpp
+++ b/src/gui/Application.cpp
@@ -18,8 +18,14 @@
*/
#include "Application.h"
-#include "MainWindow.h"
+
+#include "autotype/AutoType.h"
#include "core/Config.h"
+#include "core/Global.h"
+#include "gui/MainWindow.h"
+#include "gui/osutils/OSUtils.h"
+#include "gui/styles/dark/DarkStyle.h"
+#include "gui/styles/light/LightStyle.h"
#include <QFileInfo>
#include <QFileOpenEvent>
@@ -28,9 +34,6 @@
#include <QStandardPaths>
#include <QtNetwork/QLocalSocket>
-#include "autotype/AutoType.h"
-#include "core/Global.h"
-
#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
#include "core/OSEventFilter.h"
#endif
@@ -96,7 +99,7 @@ Application::Application(int& argc, char** argv)
m_lockServer.listen(m_socketName);
break;
case QLockFile::LockFailedError: {
- if (config()->get("SingleInstance").toBool()) {
+ if (config()->get(Config::SingleInstance).toBool()) {
// Attempt to connect to the existing instance
QLocalSocket client;
for (int i = 0; i < 3; ++i) {
@@ -139,6 +142,32 @@ Application::~Application()
}
}
+void Application::applyTheme()
+{
+ QString appTheme = config()->get(Config::GUI_ApplicationTheme).toString();
+ if (appTheme == "auto") {
+ if (osUtils->isDarkMode()) {
+ setStyle(new DarkStyle);
+ m_darkTheme = true;
+ } else {
+ setStyle(new LightStyle);
+ }
+ } else if (appTheme == "light") {
+ setStyle(new LightStyle);
+ } else if (appTheme == "dark") {
+ setStyle(new DarkStyle);
+ m_darkTheme = true;
+ } else {
+ // Classic mode, don't check for dark theme on Windows
+ // because Qt 5.x does not support it
+#ifndef Q_OS_WIN
+ m_darkTheme = osUtils->isDarkMode();
+#endif
+ }
+
+ setPalette(style()->standardPalette());
+}
+
bool Application::event(QEvent* event)
{
// Handle Apple QFileOpenEvent from finder (double click on .kdbx file)
@@ -257,7 +286,7 @@ bool Application::isAlreadyRunning() const
// In DEBUG mode we can run unlimited instances
return false;
#endif
- return config()->get("SingleInstance").toBool() && m_alreadyRunning;
+ return config()->get(Config::SingleInstance).toBool() && m_alreadyRunning;
}
bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames)
@@ -281,3 +310,21 @@ bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames)
const bool disconnected = client.waitForDisconnected(WaitTimeoutMSec);
return writeOk && disconnected;
}
+
+bool Application::isDarkTheme() const
+{
+ return m_darkTheme;
+}
+
+void Application::restart()
+{
+ // Disable single instance
+ m_lockServer.close();
+ if (m_lockFile) {
+ m_lockFile->unlock();
+ delete m_lockFile;
+ m_lockFile = nullptr;
+ }
+
+ exit(RESTART_EXITCODE);
+}
diff --git a/src/gui/Application.h b/src/gui/Application.h
index 9a3ef756b..9f694f8c3 100644
--- a/src/gui/Application.h
+++ b/src/gui/Application.h
@@ -31,6 +31,8 @@ class OSEventFilter;
class QLockFile;
class QSocketNotifier;
+constexpr int RESTART_EXITCODE = -1;
+
class Application : public QApplication
{
Q_OBJECT
@@ -39,11 +41,16 @@ public:
Application(int& argc, char** argv);
~Application() override;
+ void applyTheme();
+
bool event(QEvent* event) override;
bool isAlreadyRunning() const;
+ bool isDarkTheme() const;
bool sendFileNamesToRunningInstance(const QStringList& fileNames);
+ void restart();
+
signals:
void openFile(const QString& filename);
void anotherInstanceStarted();
@@ -68,6 +75,7 @@ private:
static int unixSignalSocket[2];
#endif
bool m_alreadyRunning;
+ bool m_darkTheme = false;
QLockFile* m_lockFile;
QLocalServer m_lockServer;
QString m_socketName;
@@ -76,4 +84,6 @@ private:
#endif
};
+#define kpxcApp qobject_cast<Application*>(Application::instance())
+
#endif // KEEPASSX_APPLICATION_H
diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp
index d3cc994f8..691115368 100644
--- a/src/gui/ApplicationSettingsWidget.cpp
+++ b/src/gui/ApplicationSettingsWidget.cpp
@@ -24,9 +24,10 @@
#include "autotype/AutoType.h"
#include "core/Config.h"
-#include "core/FilePath.h"
#include "core/Global.h"
+#include "core/Resources.h"
#include "core/Translator.h"
+#include "gui/osutils/OSUtils.h"
#include "MessageBox.h"
#include "touchid/TouchID.h"
@@ -91,8 +92,8 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
m_secUi->setupUi(m_secWidget);
m_generalUi->setupUi(m_generalWidget);
- addPage(tr("General"), FilePath::instance()->icon("categories", "preferences-other"), m_generalWidget);
- addPage(tr("Security"), FilePath::instance()->icon("status", "security-high"), m_secWidget);
+ addPage(tr("General"), Resources::instance()->icon("preferences-other"), m_generalWidget);
+ addPage(tr("Security"), Resources::instance()->icon("security-high"), m_secWidget);
if (!autoType()->isAvailable()) {
m_generalUi->generalSettingsTabWidget->removeTab(1);
@@ -105,7 +106,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool)));
connect(m_generalUi->hideWindowOnCopyCheckBox, SIGNAL(toggled(bool)), SLOT(hideWindowOnCopyCheckBoxToggled(bool)));
connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool)));
- connect(m_generalUi->toolbarHideCheckBox, SIGNAL(toggled(bool)), SLOT(toolbarSettingsToggled(bool)));
connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool)));
connect(m_generalUi->resetSettingsButton, SIGNAL(clicked()), SLOT(resetSettings()));
@@ -172,46 +172,44 @@ void ApplicationSettingsWidget::loadSettings()
#ifdef QT_DEBUG
m_generalUi->singleInstanceCheckBox->setEnabled(false);
+ m_generalUi->launchAtStartup->setEnabled(false);
#endif
- m_generalUi->singleInstanceCheckBox->setChecked(config()->get("SingleInstance").toBool());
- m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get("RememberLastDatabases").toBool());
- m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get("RememberLastKeyFiles").toBool());
+ m_generalUi->singleInstanceCheckBox->setChecked(config()->get(Config::SingleInstance).toBool());
+ m_generalUi->launchAtStartup->setChecked(osUtils->isLaunchAtStartupEnabled());
+ m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get(Config::RememberLastDatabases).toBool());
+ m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get(Config::RememberLastKeyFiles).toBool());
m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(
- config()->get("OpenPreviousDatabasesOnStartup").toBool());
- m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get("AutoSaveAfterEveryChange").toBool());
- m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get("AutoSaveOnExit").toBool());
- m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get("BackupBeforeSave").toBool());
- m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get("UseAtomicSaves").toBool());
- m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get("AutoReloadOnChange").toBool());
- m_generalUi->minimizeAfterUnlockCheckBox->setChecked(config()->get("MinimizeAfterUnlock").toBool());
- m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get("MinimizeOnOpenUrl").toBool());
- m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get("HideWindowOnCopy").toBool());
- m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get("MinimizeOnCopy").toBool());
- m_generalUi->dropToBackgroundOnCopyRadioButton->setChecked(config()->get("DropToBackgroundOnCopy").toBool());
- m_generalUi->useGroupIconOnEntryCreationCheckBox->setChecked(config()->get("UseGroupIconOnEntryCreation").toBool());
- m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get("AutoTypeEntryTitleMatch").toBool());
- m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get("AutoTypeEntryURLMatch").toBool());
- m_generalUi->ignoreGroupExpansionCheckBox->setChecked(config()->get("IgnoreGroupExpansion").toBool());
- m_generalUi->faviconTimeoutSpinBox->setValue(config()->get("FaviconDownloadTimeout").toInt());
-
- if (!m_generalUi->hideWindowOnCopyCheckBox->isChecked()) {
- hideWindowOnCopyCheckBoxToggled(false);
- }
+ config()->get(Config::OpenPreviousDatabasesOnStartup).toBool());
+ m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get(Config::AutoSaveAfterEveryChange).toBool());
+ m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get(Config::AutoSaveOnExit).toBool());
+ m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get(Config::BackupBeforeSave).toBool());
+ m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get(Config::UseAtomicSaves).toBool());
+ m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool());
+ m_generalUi->minimizeAfterUnlockCheckBox->setChecked(config()->get(Config::MinimizeAfterUnlock).toBool());
+ m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get(Config::MinimizeOnOpenUrl).toBool());
+ m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get(Config::HideWindowOnCopy).toBool());
+ hideWindowOnCopyCheckBoxToggled(m_generalUi->hideWindowOnCopyCheckBox->isChecked());
+ m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get(Config::MinimizeOnCopy).toBool());
+ m_generalUi->dropToBackgroundOnCopyRadioButton->setChecked(config()->get(Config::DropToBackgroundOnCopy).toBool());
+ m_generalUi->useGroupIconOnEntryCreationCheckBox->setChecked(
+ config()->get(Config::UseGroupIconOnEntryCreation).toBool());
+ m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryTitleMatch).toBool());
+ m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryURLMatch).toBool());
+ m_generalUi->trackNonDataChangesCheckBox->setChecked(config()->get(Config::TrackNonDataChanges).toBool());
+ m_generalUi->faviconTimeoutSpinBox->setValue(config()->get(Config::FaviconDownloadTimeout).toInt());
m_generalUi->languageComboBox->clear();
QList<QPair<QString, QString>> languages = Translator::availableLanguages();
for (const auto& language : languages) {
m_generalUi->languageComboBox->addItem(language.second, language.first);
}
- int defaultIndex = m_generalUi->languageComboBox->findData(config()->get("GUI/Language"));
+ int defaultIndex = m_generalUi->languageComboBox->findData(config()->get(Config::GUI_Language));
if (defaultIndex > 0) {
m_generalUi->languageComboBox->setCurrentIndex(defaultIndex);
}
- m_generalUi->previewHideCheckBox->setChecked(config()->get("GUI/HidePreviewPanel").toBool());
- m_generalUi->toolbarHideCheckBox->setChecked(config()->get("GUI/HideToolbar").toBool());
- m_generalUi->toolbarMovableCheckBox->setChecked(config()->get("GUI/MovableToolbar").toBool());
- m_generalUi->monospaceNotesCheckBox->setChecked(config()->get("GUI/MonospaceNotes").toBool());
+ m_generalUi->toolbarMovableCheckBox->setChecked(config()->get(Config::GUI_MovableToolbar).toBool());
+ m_generalUi->monospaceNotesCheckBox->setChecked(config()->get(Config::GUI_MonospaceNotes).toBool());
m_generalUi->toolButtonStyleComboBox->clear();
m_generalUi->toolButtonStyleComboBox->addItem(tr("Icon only"), Qt::ToolButtonIconOnly);
@@ -219,55 +217,71 @@ void ApplicationSettingsWidget::loadSettings()
m_generalUi->toolButtonStyleComboBox->addItem(tr("Text beside icon"), Qt::ToolButtonTextBesideIcon);
m_generalUi->toolButtonStyleComboBox->addItem(tr("Text under icon"), Qt::ToolButtonTextUnderIcon);
m_generalUi->toolButtonStyleComboBox->addItem(tr("Follow style"), Qt::ToolButtonFollowStyle);
- int toolButtonStyleIndex = m_generalUi->toolButtonStyleComboBox->findData(config()->get("GUI/ToolButtonStyle"));
+ int toolButtonStyleIndex =
+ m_generalUi->toolButtonStyleComboBox->findData(config()->get(Config::GUI_ToolButtonStyle));
if (toolButtonStyleIndex > 0) {
m_generalUi->toolButtonStyleComboBox->setCurrentIndex(toolButtonStyleIndex);
}
- m_generalUi->systrayShowCheckBox->setChecked(config()->get("GUI/ShowTrayIcon").toBool());
- m_generalUi->systrayDarkIconCheckBox->setChecked(config()->get("GUI/DarkTrayIcon").toBool());
- m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get("GUI/MinimizeToTray").toBool());
- m_generalUi->minimizeOnCloseCheckBox->setChecked(config()->get("GUI/MinimizeOnClose").toBool());
- m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get("GUI/MinimizeOnStartup").toBool());
- m_generalUi->checkForUpdatesOnStartupCheckBox->setChecked(config()->get("GUI/CheckForUpdates").toBool());
+ m_generalUi->systrayShowCheckBox->setChecked(config()->get(Config::GUI_ShowTrayIcon).toBool());
+ systrayToggled(m_generalUi->systrayShowCheckBox->isChecked());
+ m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get(Config::GUI_MinimizeToTray).toBool());
+ m_generalUi->minimizeOnCloseCheckBox->setChecked(config()->get(Config::GUI_MinimizeOnClose).toBool());
+ m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get(Config::GUI_MinimizeOnStartup).toBool());
+ m_generalUi->checkForUpdatesOnStartupCheckBox->setChecked(config()->get(Config::GUI_CheckForUpdates).toBool());
+ checkUpdatesToggled(m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked());
m_generalUi->checkForUpdatesIncludeBetasCheckBox->setChecked(
- config()->get("GUI/CheckForUpdatesIncludeBetas").toBool());
- m_generalUi->autoTypeAskCheckBox->setChecked(config()->get("security/autotypeask").toBool());
+ config()->get(Config::GUI_CheckForUpdatesIncludeBetas).toBool());
+
+ m_generalUi->autoTypeAskCheckBox->setChecked(config()->get(Config::Security_AutoTypeAsk).toBool());
if (autoType()->isAvailable()) {
- m_globalAutoTypeKey = static_cast<Qt::Key>(config()->get("GlobalAutoTypeKey").toInt());
+ m_globalAutoTypeKey = static_cast<Qt::Key>(config()->get(Config::GlobalAutoTypeKey).toInt());
m_globalAutoTypeModifiers =
- static_cast<Qt::KeyboardModifiers>(config()->get("GlobalAutoTypeModifiers").toInt());
+ static_cast<Qt::KeyboardModifiers>(config()->get(Config::GlobalAutoTypeModifiers).toInt());
if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) {
m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers);
}
m_generalUi->autoTypeShortcutWidget->setAttribute(Qt::WA_MacShowFocusRect, true);
- m_generalUi->autoTypeDelaySpinBox->setValue(config()->get("AutoTypeDelay").toInt());
- m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get("AutoTypeStartDelay").toInt());
+ m_generalUi->autoTypeDelaySpinBox->setValue(config()->get(Config::AutoTypeDelay).toInt());
+ m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get(Config::AutoTypeStartDelay).toInt());
}
- m_secUi->clearClipboardCheckBox->setChecked(config()->get("security/clearclipboard").toBool());
- m_secUi->clearClipboardSpinBox->setValue(config()->get("security/clearclipboardtimeout").toInt());
-
- m_secUi->clearSearchCheckBox->setChecked(config()->get("security/clearsearch").toBool());
- m_secUi->clearSearchSpinBox->setValue(config()->get("security/clearsearchtimeout").toInt());
-
- m_secUi->lockDatabaseIdleCheckBox->setChecked(config()->get("security/lockdatabaseidle").toBool());
- m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get("security/lockdatabaseidlesec").toInt());
- m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get("security/lockdatabaseminimize").toBool());
- m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked(config()->get("security/lockdatabasescreenlock").toBool());
- m_secUi->relockDatabaseAutoTypeCheckBox->setChecked(config()->get("security/relockautotype").toBool());
- m_secUi->fallbackToSearch->setChecked(config()->get("security/IconDownloadFallback").toBool());
-
- m_secUi->passwordCleartextCheckBox->setChecked(config()->get("security/passwordscleartext").toBool());
- m_secUi->passwordShowDotsCheckBox->setChecked(config()->get("security/passwordemptynodots").toBool());
- m_secUi->passwordPreviewCleartextCheckBox->setChecked(config()->get("security/HidePasswordPreviewPanel").toBool());
- m_secUi->passwordRepeatCheckBox->setChecked(config()->get("security/passwordsrepeat").toBool());
- m_secUi->hideNotesCheckBox->setChecked(config()->get("security/hidenotes").toBool());
+ m_generalUi->trayIconAppearance->clear();
+ m_generalUi->trayIconAppearance->addItem(tr("Monochrome (light)"), "monochrome-light");
+ m_generalUi->trayIconAppearance->addItem(tr("Monochrome (dark)"), "monochrome-dark");
+ m_generalUi->trayIconAppearance->addItem(tr("Colorful"), "colorful");
+ int trayIconIndex = m_generalUi->trayIconAppearance->findData(resources()->trayIconAppearance());
+ if (trayIconIndex > 0) {
+ m_generalUi->trayIconAppearance->setCurrentIndex(trayIconIndex);
+ }
- m_secUi->touchIDResetCheckBox->setChecked(config()->get("security/resettouchid").toBool());
- m_secUi->touchIDResetSpinBox->setValue(config()->get("security/resettouchidtimeout").toInt());
- m_secUi->touchIDResetOnScreenLockCheckBox->setChecked(config()->get("security/resettouchidscreenlock").toBool());
+ m_secUi->clearClipboardCheckBox->setChecked(config()->get(Config::Security_ClearClipboard).toBool());
+ m_secUi->clearClipboardSpinBox->setValue(config()->get(Config::Security_ClearClipboardTimeout).toInt());
+
+ m_secUi->clearSearchCheckBox->setChecked(config()->get(Config::Security_ClearSearch).toBool());
+ m_secUi->clearSearchSpinBox->setValue(config()->get(Config::Security_ClearSearchTimeout).toInt());
+
+ m_secUi->lockDatabaseIdleCheckBox->setChecked(config()->get(Config::Security_LockDatabaseIdle).toBool());
+ m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get(Config::Security_LockDatabaseIdleSeconds).toInt());
+ m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get(Config::Security_LockDatabaseMinimize).toBool());
+ m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked(
+ config()->get(Config::Security_LockDatabaseScreenLock).toBool());
+ m_secUi->relockDatabaseAutoTypeCheckBox->setChecked(config()->get(Config::Security_RelockAutoType).toBool());
+ m_secUi->fallbackToSearch->setChecked(config()->get(Config::Security_IconDownloadFallback).toBool());
+
+ m_secUi->passwordsHiddenCheckBox->setChecked(config()->get(Config::Security_PasswordsHidden).toBool());
+ m_secUi->passwordShowDotsCheckBox->setChecked(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool());
+ m_secUi->passwordPreviewCleartextCheckBox->setChecked(
+ config()->get(Config::Security_HidePasswordPreviewPanel).toBool());
+ m_secUi->passwordsRepeatVisibleCheckBox->setChecked(
+ config()->get(Config::Security_PasswordsRepeatVisible).toBool());
+ m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool());
+
+ m_secUi->touchIDResetCheckBox->setChecked(config()->get(Config::Security_ResetTouchId).toBool());
+ m_secUi->touchIDResetSpinBox->setValue(config()->get(Config::Security_ResetTouchIdTimeout).toInt());
+ m_secUi->touchIDResetOnScreenLockCheckBox->setChecked(
+ config()->get(Config::Security_ResetTouchIdScreenlock).toBool());
for (const ExtraPage& page : asConst(m_extraPages)) {
page.loadSettings();
@@ -285,89 +299,91 @@ void ApplicationSettingsWidget::saveSettings()
return;
}
- config()->set("SingleInstance", m_generalUi->singleInstanceCheckBox->isChecked());
- config()->set("RememberLastDatabases", m_generalUi->rememberLastDatabasesCheckBox->isChecked());
- config()->set("RememberLastKeyFiles", m_generalUi->rememberLastKeyFilesCheckBox->isChecked());
- config()->set("OpenPreviousDatabasesOnStartup", m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked());
- config()->set("AutoSaveAfterEveryChange", m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked());
- config()->set("AutoSaveOnExit", m_generalUi->autoSaveOnExitCheckBox->isChecked());
- config()->set("BackupBeforeSave", m_generalUi->backupBeforeSaveCheckBox->isChecked());
- config()->set("UseAtomicSaves", m_generalUi->useAtomicSavesCheckBox->isChecked());
- config()->set("AutoReloadOnChange", m_generalUi->autoReloadOnChangeCheckBox->isChecked());
- config()->set("MinimizeAfterUnlock", m_generalUi->minimizeAfterUnlockCheckBox->isChecked());
- config()->set("MinimizeOnOpenUrl", m_generalUi->minimizeOnOpenUrlCheckBox->isChecked());
- config()->set("HideWindowOnCopy", m_generalUi->hideWindowOnCopyCheckBox->isChecked());
- config()->set("MinimizeOnCopy", m_generalUi->minimizeOnCopyRadioButton->isChecked());
- config()->set("DropToBackgroundOnCopy", m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked());
- config()->set("UseGroupIconOnEntryCreation", m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked());
- config()->set("IgnoreGroupExpansion", m_generalUi->ignoreGroupExpansionCheckBox->isChecked());
- config()->set("AutoTypeEntryTitleMatch", m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked());
- config()->set("AutoTypeEntryURLMatch", m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked());
- int currentLangIndex = m_generalUi->languageComboBox->currentIndex();
- config()->set("FaviconDownloadTimeout", m_generalUi->faviconTimeoutSpinBox->value());
-
- config()->set("GUI/Language", m_generalUi->languageComboBox->itemData(currentLangIndex).toString());
-
- config()->set("GUI/HidePreviewPanel", m_generalUi->previewHideCheckBox->isChecked());
- config()->set("GUI/HideToolbar", m_generalUi->toolbarHideCheckBox->isChecked());
- config()->set("GUI/MovableToolbar", m_generalUi->toolbarMovableCheckBox->isChecked());
- config()->set("GUI/MonospaceNotes", m_generalUi->monospaceNotesCheckBox->isChecked());
-
- int currentToolButtonStyleIndex = m_generalUi->toolButtonStyleComboBox->currentIndex();
- config()->set("GUI/ToolButtonStyle",
- m_generalUi->toolButtonStyleComboBox->itemData(currentToolButtonStyleIndex).toString());
-
- config()->set("GUI/ShowTrayIcon", m_generalUi->systrayShowCheckBox->isChecked());
- config()->set("GUI/DarkTrayIcon", m_generalUi->systrayDarkIconCheckBox->isChecked());
- config()->set("GUI/MinimizeToTray", m_generalUi->systrayMinimizeToTrayCheckBox->isChecked());
- config()->set("GUI/MinimizeOnClose", m_generalUi->minimizeOnCloseCheckBox->isChecked());
- config()->set("GUI/MinimizeOnStartup", m_generalUi->systrayMinimizeOnStartup->isChecked());
- config()->set("GUI/CheckForUpdates", m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked());
- config()->set("GUI/CheckForUpdatesIncludeBetas", m_generalUi->checkForUpdatesIncludeBetasCheckBox->isChecked());
-
- config()->set("security/autotypeask", m_generalUi->autoTypeAskCheckBox->isChecked());
+#ifndef QT_DEBUG
+ osUtils->setLaunchAtStartup(m_generalUi->launchAtStartup->isChecked());
+#endif
+
+ config()->set(Config::SingleInstance, m_generalUi->singleInstanceCheckBox->isChecked());
+ config()->set(Config::RememberLastDatabases, m_generalUi->rememberLastDatabasesCheckBox->isChecked());
+ config()->set(Config::RememberLastKeyFiles, m_generalUi->rememberLastKeyFilesCheckBox->isChecked());
+ config()->set(Config::OpenPreviousDatabasesOnStartup,
+ m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked());
+ config()->set(Config::AutoSaveAfterEveryChange, m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked());
+ config()->set(Config::AutoSaveOnExit, m_generalUi->autoSaveOnExitCheckBox->isChecked());
+ config()->set(Config::BackupBeforeSave, m_generalUi->backupBeforeSaveCheckBox->isChecked());
+ config()->set(Config::UseAtomicSaves, m_generalUi->useAtomicSavesCheckBox->isChecked());
+ config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked());
+ config()->set(Config::MinimizeAfterUnlock, m_generalUi->minimizeAfterUnlockCheckBox->isChecked());
+ config()->set(Config::MinimizeOnOpenUrl, m_generalUi->minimizeOnOpenUrlCheckBox->isChecked());
+ config()->set(Config::HideWindowOnCopy, m_generalUi->hideWindowOnCopyCheckBox->isChecked());
+ config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked());
+ config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked());
+ config()->set(Config::UseGroupIconOnEntryCreation, m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked());
+ config()->set(Config::TrackNonDataChanges, m_generalUi->trackNonDataChangesCheckBox->isChecked());
+ config()->set(Config::AutoTypeEntryTitleMatch, m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked());
+ config()->set(Config::AutoTypeEntryURLMatch, m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked());
+ config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value());
+
+ config()->set(Config::GUI_Language, m_generalUi->languageComboBox->currentData().toString());
+ config()->set(Config::GUI_MovableToolbar, m_generalUi->toolbarMovableCheckBox->isChecked());
+ config()->set(Config::GUI_MonospaceNotes, m_generalUi->monospaceNotesCheckBox->isChecked());
+
+ config()->set(Config::GUI_ToolButtonStyle, m_generalUi->toolButtonStyleComboBox->currentData().toString());
+
+ config()->set(Config::GUI_ShowTrayIcon, m_generalUi->systrayShowCheckBox->isChecked());
+ config()->set(Config::GUI_TrayIconAppearance, m_generalUi->trayIconAppearance->currentData().toString());
+ config()->set(Config::GUI_MinimizeToTray, m_generalUi->systrayMinimizeToTrayCheckBox->isChecked());
+ config()->set(Config::GUI_MinimizeOnClose, m_generalUi->minimizeOnCloseCheckBox->isChecked());
+ config()->set(Config::GUI_MinimizeOnStartup, m_generalUi->systrayMinimizeOnStartup->isChecked());
+ config()->set(Config::GUI_CheckForUpdates, m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked());
+ config()->set(Config::GUI_CheckForUpdatesIncludeBetas,
+ m_generalUi->checkForUpdatesIncludeBetasCheckBox->isChecked());
+
+ config()->set(Config::Security_AutoTypeAsk, m_generalUi->autoTypeAskCheckBox->isChecked());
if (autoType()->isAvailable()) {
- config()->set("GlobalAutoTypeKey", m_generalUi->autoTypeShortcutWidget->key());
- config()->set("GlobalAutoTypeModifiers", static_cast<int>(m_generalUi->autoTypeShortcutWidget->modifiers()));
- config()->set("AutoTypeDelay", m_generalUi->autoTypeDelaySpinBox->value());
- config()->set("AutoTypeStartDelay", m_generalUi->autoTypeStartDelaySpinBox->value());
+ config()->set(Config::GlobalAutoTypeKey, m_generalUi->autoTypeShortcutWidget->key());
+ config()->set(Config::GlobalAutoTypeModifiers,
+ static_cast<int>(m_generalUi->autoTypeShortcutWidget->modifiers()));
+ config()->set(Config::AutoTypeDelay, m_generalUi->autoTypeDelaySpinBox->value());
+ config()->set(Config::AutoTypeStartDelay, m_generalUi->autoTypeStartDelaySpinBox->value());
}
- config()->set("security/clearclipboard", m_secUi->clearClipboardCheckBox->isChecked());
- config()->set("security/clearclipboardtimeout", m_secUi->clearClipboardSpinBox->value());
+ config()->set(Config::Security_ClearClipboard, m_secUi->clearClipboardCheckBox->isChecked());
+ config()->set(Config::Security_ClearClipboardTimeout, m_secUi->clearClipboardSpinBox->value());
- config()->set("security/clearsearch", m_secUi->clearSearchCheckBox->isChecked());
- config()->set("security/clearsearchtimeout", m_secUi->clearSearchSpinBox->value());
+ config()->set(Config::Security_ClearSearch, m_secUi->clearSearchCheckBox->isChecked());
+ config()->set(Config::Security_ClearSearchTimeout, m_secUi->clearSearchSpinBox->value());
- config()->set("security/lockdatabaseidle", m_secUi->lockDatabaseIdleCheckBox->isChecked());
- config()->set("security/lockdatabaseidlesec", m_secUi->lockDatabaseIdleSpinBox->value());
- config()->set("security/lockdatabaseminimize", m_secUi->lockDatabaseMinimizeCheckBox->isChecked());
- config()->set("security/lockdatabasescreenlock", m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked());
- config()->set("security/relockautotype", m_secUi->relockDatabaseAutoTypeCheckBox->isChecked());
- config()->set("security/IconDownloadFallback", m_secUi->fallbackToSearch->isChecked());
+ config()->set(Config::Security_LockDatabaseIdle, m_secUi->lockDatabaseIdleCheckBox->isChecked());
+ config()->set(Config::Security_LockDatabaseIdleSeconds, m_secUi->lockDatabaseIdleSpinBox->value());
+ config()->set(Config::Security_LockDatabaseMinimize, m_secUi->lockDatabaseMinimizeCheckBox->isChecked());
+ config()->set(Config::Security_LockDatabaseScreenLock, m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked());
+ config()->set(Config::Security_RelockAutoType, m_secUi->relockDatabaseAutoTypeCheckBox->isChecked());
+ config()->set(Config::Security_IconDownloadFallback, m_secUi->fallbackToSearch->isChecked());
- config()->set("security/passwordscleartext", m_secUi->passwordCleartextCheckBox->isChecked());
- config()->set("security/passwordemptynodots", m_secUi->passwordShowDotsCheckBox->isChecked());
+ config()->set(Config::Security_PasswordsHidden, m_secUi->passwordsHiddenCheckBox->isChecked());
+ config()->set(Config::Security_PasswordEmptyPlaceholder, m_secUi->passwordShowDotsCheckBox->isChecked());
- config()->set("security/HidePasswordPreviewPanel", m_secUi->passwordPreviewCleartextCheckBox->isChecked());
- config()->set("security/passwordsrepeat", m_secUi->passwordRepeatCheckBox->isChecked());
- config()->set("security/hidenotes", m_secUi->hideNotesCheckBox->isChecked());
+ config()->set(Config::Security_HidePasswordPreviewPanel, m_secUi->passwordPreviewCleartextCheckBox->isChecked());
+ config()->set(Config::Security_PasswordsRepeatVisible, m_secUi->passwordsRepeatVisibleCheckBox->isChecked());
+ config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked());
- config()->set("security/resettouchid", m_secUi->touchIDResetCheckBox->isChecked());
- config()->set("security/resettouchidtimeout", m_secUi->touchIDResetSpinBox->value());
- config()->set("security/resettouchidscreenlock", m_secUi->touchIDResetOnScreenLockCheckBox->isChecked());
+ config()->set(Config::Security_ResetTouchId, m_secUi->touchIDResetCheckBox->isChecked());
+ config()->set(Config::Security_ResetTouchIdTimeout, m_secUi->touchIDResetSpinBox->value());
+ config()->set(Config::Security_ResetTouchIdScreenlock, m_secUi->touchIDResetOnScreenLockCheckBox->isChecked());
// Security: clear storage if related settings are disabled
- if (!config()->get("RememberLastDatabases").toBool()) {
- config()->set("LastDatabases", {});
- config()->set("OpenPreviousDatabasesOnStartup", {});
- config()->set("LastActiveDatabase", {});
- config()->set("LastAttachmentDir", {});
+ if (!config()->get(Config::RememberLastDatabases).toBool()) {
+ config()->remove(Config::LastDatabases);
+ config()->remove(Config::OpenPreviousDatabasesOnStartup);
+ config()->remove(Config::LastActiveDatabase);
+ config()->remove(Config::LastAttachmentDir);
}
- if (!config()->get("RememberLastKeyFiles").toBool()) {
- config()->set("LastKeyFiles", {});
- config()->set("LastDir", "");
+ if (!config()->get(Config::RememberLastKeyFiles).toBool()) {
+ config()->remove(Config::LastKeyFiles);
+ config()->remove(Config::LastChallengeResponse);
+ config()->remove(Config::LastDir);
}
for (const ExtraPage& page : asConst(m_extraPages)) {
@@ -398,12 +414,12 @@ void ApplicationSettingsWidget::resetSettings()
config()->resetToDefaults();
// Clear recently used data
- config()->set("LastDatabases", {});
- config()->set("OpenPreviousDatabasesOnStartup", {});
- config()->set("LastActiveDatabase", {});
- config()->set("LastAttachmentDir", {});
- config()->set("LastKeyFiles", {});
- config()->set("LastDir", "");
+ config()->remove(Config::LastDatabases);
+ config()->remove(Config::OpenPreviousDatabasesOnStartup);
+ config()->remove(Config::LastActiveDatabase);
+ config()->remove(Config::LastAttachmentDir);
+ config()->remove(Config::LastKeyFiles);
+ config()->remove(Config::LastDir);
// Save the Extra Pages (these are NOT reset)
for (const ExtraPage& page : asConst(m_extraPages)) {
@@ -442,17 +458,11 @@ void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked)
void ApplicationSettingsWidget::systrayToggled(bool checked)
{
- m_generalUi->systrayDarkIconCheckBox->setEnabled(checked);
+ m_generalUi->trayIconAppearance->setEnabled(checked);
+ m_generalUi->trayIconAppearanceLabel->setEnabled(checked);
m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked);
}
-void ApplicationSettingsWidget::toolbarSettingsToggled(bool checked)
-{
- m_generalUi->toolbarMovableCheckBox->setEnabled(!checked);
- m_generalUi->toolButtonStyleComboBox->setEnabled(!checked);
- m_generalUi->toolButtonStyleLabel->setEnabled(!checked);
-}
-
void ApplicationSettingsWidget::rememberDatabasesToggled(bool checked)
{
if (!checked) {
diff --git a/src/gui/ApplicationSettingsWidget.h b/src/gui/ApplicationSettingsWidget.h
index 63487e1b5..f36e5ef12 100644
--- a/src/gui/ApplicationSettingsWidget.h
+++ b/src/gui/ApplicationSettingsWidget.h
@@ -60,7 +60,6 @@ private slots:
void autoSaveToggled(bool checked);
void hideWindowOnCopyCheckBoxToggled(bool checked);
void systrayToggled(bool checked);
- void toolbarSettingsToggled(bool checked);
void rememberDatabasesToggled(bool checked);
void checkUpdatesToggled(bool checked);
diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui
index 3c6de499a..7324c5ab7 100644
--- a/src/gui/ApplicationSettingsWidgetGeneral.ui
+++ b/src/gui/ApplicationSettingsWidgetGeneral.ui
@@ -6,11 +6,11 @@
<rect>
<x>0</x>
<y>0</y>
- <width>684</width>
- <height>951</height>
+ <width>605</width>
+ <height>1279</height>
</rect>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_3">
+ <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0">
<property name="leftMargin">
<number>0</number>
</property>
@@ -32,741 +32,775 @@
<attribute name="title">
<string>Basic Settings</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
<item>
- <widget class="QGroupBox" name="startupGroup">
- <property name="title">
- <string>Startup</string>
+ <widget class="QScrollArea" name="scrollArea">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <item>
- <widget class="QCheckBox" name="singleInstanceCheckBox">
- <property name="text">
- <string>Start only a single instance of KeePassXC</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="systrayMinimizeOnStartup">
- <property name="text">
- <string>Minimize window at application startup</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="minimizeAfterUnlockCheckBox">
- <property name="text">
- <string>Minimize window after unlocking database</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
- <property name="text">
- <string>Remember previously used databases</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="rememberDbSubLayout_2">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMaximumSize</enum>
- </property>
- <item>
- <spacer name="toolbarMovableSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="openPreviousDatabasesOnStartupCheckBox">
- <property name="text">
- <string>Load previously open databases on startup</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="rememberDbSubLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMaximumSize</enum>
- </property>
- <item>
- <spacer name="toolbarMovableSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="rememberLastKeyFilesCheckBox">
- <property name="text">
- <string>Remember database key files and security dongles</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QCheckBox" name="checkForUpdatesOnStartupCheckBox">
- <property name="text">
- <string>Check for updates at application startup once per week</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="checkUpdatesSubLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <spacer name="checkUpdatesSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="checkForUpdatesIncludeBetasCheckBox">
- <property name="text">
- <string>Include beta releases when checking for updates</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="saveGroup">
- <property name="title">
- <string>File Management</string>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <item>
- <widget class="QCheckBox" name="useAtomicSavesCheckBox">
- <property name="text">
- <string>Safely save database files (may be incompatible with Dropbox, etc)</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="backupBeforeSaveCheckBox">
- <property name="text">
- <string>Backup database file before saving</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoSaveAfterEveryChangeCheckBox">
- <property name="text">
- <string>Automatically save after every change</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoSaveOnExitCheckBox">
- <property name="text">
- <string>Automatically save on exit</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="ignoreGroupExpansionCheckBox">
- <property name="text">
- <string>Don't mark database as modified for non-data changes (e.g., expanding groups)</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoReloadOnChangeCheckBox">
- <property name="text">
- <string>Automatically reload the database when modified externally</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="entryGroup">
- <property name="title">
- <string>Entry Management</string>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_6">
- <item>
- <widget class="QCheckBox" name="useGroupIconOnEntryCreationCheckBox">
- <property name="text">
- <string>Use group icon on entry creation</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="previewHideCheckBox">
- <property name="text">
- <string>Hide the entry preview panel</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="minimizeOnOpenUrlCheckBox">
- <property name="text">
- <string>Minimize when opening a URL</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="hideWindowOnCopyCheckBox">
- <property name="text">
- <string>Hide window when copying to clipboard</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="hideWindowLayout_1">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <spacer name="hideWindowSpacer_1">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QRadioButton" name="minimizeOnCopyRadioButton">
- <property name="text">
- <string>Minimize</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="hideWindowLayout_2">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <spacer name="hideWindowSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QRadioButton" name="dropToBackgroundOnCopyRadioButton">
- <property name="text">
- <string>Drop to background</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,1">
- <item>
- <widget class="QLabel" name="faviconTimeoutLabel">
- <property name="text">
- <string>Favicon download timeout:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="faviconTimeoutSpinBox">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="accessibleName">
- <string>Website icon download timeout in seconds</string>
- </property>
- <property name="suffix">
- <string comment="Seconds"> sec</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>60</number>
- </property>
- <property name="value">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="generalGroup">
- <property name="title">
- <string>General</string>
+ <property name="horizontalScrollBarPolicy">
+ <enum>Qt::ScrollBarAlwaysOff</enum>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_7">
- <item>
- <widget class="QCheckBox" name="toolbarHideCheckBox">
- <property name="text">
- <string>Hide toolbar (icons)</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="toolbarMovableLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMaximumSize</enum>
- </property>
- <item>
- <spacer name="toolbarMovableSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="toolbarMovableCheckBox">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Movable toolbar</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="toolButtonStyleLayout" stretch="0,0,0,1">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <spacer name="toolButtonStyleSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item alignment="Qt::AlignRight">
- <widget class="QLabel" name="toolButtonStyleLabel">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="styleSheet">
- <string notr="true">margin-right: 5px</string>
- </property>
- <property name="text">
- <string>Button style:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="toolButtonStyleComboBox">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="accessibleName">
- <string>Toolbar button style</string>
- </property>
- <property name="sizeAdjustPolicy">
- <enum>QComboBox::AdjustToContents</enum>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QCheckBox" name="monospaceNotesCheckBox">
- <property name="text">
- <string>Use monospaced font for Notes</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="minimizeOnCloseCheckBox">
- <property name="text">
- <string>Minimize instead of app exit</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="systrayShowCheckBox">
- <property name="text">
- <string>Show a system tray icon</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMaximumSize</enum>
- </property>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="systrayDarkIconCheckBox">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Dark system tray icon</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QWidget" name="systraySettings" native="true">
- <layout class="QVBoxLayout" name="systrayLayout">
- <property name="leftMargin">
- <number>0</number>
+ <property name="widgetResizable">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="scrollAreaWidgetContents">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>581</width>
+ <height>1235</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_8">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="startupGroup">
+ <property name="title">
+ <string>Startup</string>
</property>
- <property name="topMargin">
- <number>0</number>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QCheckBox" name="singleInstanceCheckBox">
+ <property name="text">
+ <string>Start only a single instance of KeePassXC</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="launchAtStartup">
+ <property name="text">
+ <string>Automatically launch KeePassXC at system startup</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="systrayMinimizeOnStartup">
+ <property name="text">
+ <string>Minimize window at application startup</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="minimizeAfterUnlockCheckBox">
+ <property name="text">
+ <string>Minimize window after unlocking database</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
+ <property name="text">
+ <string>Remember previously used databases</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="rememberDbSubLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <item>
+ <spacer name="toolbarMovableSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="openPreviousDatabasesOnStartupCheckBox">
+ <property name="text">
+ <string>Load previously open databases on startup</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="rememberDbSubLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <item>
+ <spacer name="toolbarMovableSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="rememberLastKeyFilesCheckBox">
+ <property name="text">
+ <string>Remember database key files and security dongles</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkForUpdatesOnStartupCheckBox">
+ <property name="text">
+ <string>Check for updates at application startup once per week</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="checkUpdatesSubLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="checkUpdatesSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkForUpdatesIncludeBetasCheckBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Include beta releases when checking for updates</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="saveGroup">
+ <property name="title">
+ <string>File Management</string>
</property>
- <property name="rightMargin">
- <number>0</number>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <widget class="QCheckBox" name="autoSaveAfterEveryChangeCheckBox">
+ <property name="text">
+ <string>Automatically save after every change</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="autoSaveOnExitCheckBox">
+ <property name="text">
+ <string>Automatically save on exit</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="trackNonDataChangesCheckBox">
+ <property name="text">
+ <string>Mark database as modified for non-data changes (e.g., expanding groups)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="backupBeforeSaveCheckBox">
+ <property name="text">
+ <string>Backup database file before saving</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="autoReloadOnChangeCheckBox">
+ <property name="text">
+ <string>Automatically reload the database when modified externally</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="useAtomicSavesCheckBox">
+ <property name="text">
+ <string>Safely save database files (disable if experiencing problems with Dropbox, etc.)</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="entryGroup">
+ <property name="title">
+ <string>Entry Management</string>
</property>
- <property name="bottomMargin">
- <number>0</number>
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <widget class="QCheckBox" name="useGroupIconOnEntryCreationCheckBox">
+ <property name="text">
+ <string>Use group icon on entry creation</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="minimizeOnOpenUrlCheckBox">
+ <property name="text">
+ <string>Minimize when opening a URL</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="hideWindowOnCopyCheckBox">
+ <property name="text">
+ <string>Hide window when copying to clipboard</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="hideWindowLayout_1">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="hideWindowSpacer_1">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="minimizeOnCopyRadioButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Minimize</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="hideWindowLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="hideWindowSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="dropToBackgroundOnCopyRadioButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Drop to background</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="faviconTimeoutLabel">
+ <property name="text">
+ <string>Favicon download timeout:</string>
+ </property>
+ <property name="buddy">
+ <cstring>faviconTimeoutSpinBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="faviconTimeoutSpinBox">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="accessibleName">
+ <string>Website icon download timeout in seconds</string>
+ </property>
+ <property name="suffix">
+ <string comment="Seconds"> sec</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>60</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="generalGroup">
+ <property name="title">
+ <string>User Interface</string>
</property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMaximumSize</enum>
- </property>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="toolButtonStyleComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="accessibleName">
+ <string>Toolbar button style</string>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToContents</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="toolbarMovableCheckBox">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Movable toolbar</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="languageComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="accessibleName">
+ <string>Language selection</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="languageLabel_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Language:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>languageComboBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="languageLabel_3">
+ <property name="text">
+ <string>(restart program to activate)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="toolButtonStyleLabel">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">margin-right: 5px</string>
+ </property>
+ <property name="text">
+ <string>Toolbar button style:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>toolButtonStyleComboBox</cstring>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="monospaceNotesCheckBox">
+ <property name="text">
+ <string>Use monospaced font for notes</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="minimizeOnCloseCheckBox">
+ <property name="text">
+ <string>Minimize instead of app exit</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="systrayShowCheckBox">
+ <property name="text">
+ <string>Show a system tray icon</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item row="0" column="0">
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="3">
+ <widget class="QComboBox" name="trayIconAppearance">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="trayIconAppearanceLabel">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Tray icon type:</string>
+ </property>
+ <property name="buddy">
+ <cstring>trayIconAppearance</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="4">
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="2">
+ <spacer name="verticalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>6</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QWidget" name="systraySettings" native="true">
+ <layout class="QVBoxLayout" name="systrayLayout">
+ <property name="leftMargin">
+ <number>0</number>
</property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="systrayMinimizeToTrayCheckBox">
- <property name="enabled">
- <bool>false</bool>
+ <property name="topMargin">
+ <number>0</number>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <property name="rightMargin">
+ <number>0</number>
</property>
- <property name="text">
- <string>Hide window to system tray when minimized</string>
+ <property name="bottomMargin">
+ <number>0</number>
</property>
- </widget>
- </item>
- </layout>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="systrayMinimizeToTrayCheckBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Hide window to system tray when minimized</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="resetSettingsSubLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <item>
+ <widget class="QPushButton" name="resetSettingsButton">
+ <property name="text">
+ <string>Reset settings to default…</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="spacer4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
</item>
</layout>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="languageLabelLayout_2" stretch="0,0,0,1">
- <property name="spacing">
- <number>8</number>
- </property>
- <item alignment="Qt::AlignRight">
- <widget class="QLabel" name="languageLabel_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Language:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="languageComboBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="accessibleName">
- <string>Language selection</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="languageLabel_3">
- <property name="text">
- <string>(restart program to activate)</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="spacer3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>15</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="resetSettingsSubLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMaximumSize</enum>
- </property>
- <item>
- <widget class="QPushButton" name="resetSettingsButton">
- <property name="text">
- <string>Reset Settings to Default</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="spacer4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>50</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
<widget class="QWidget" name="tabAutotype">
@@ -774,6 +808,18 @@
<string>Auto-Type</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="leftMargin">
+ <number>10</number>
+ </property>
+ <property name="topMargin">
+ <number>10</number>
+ </property>
+ <property name="rightMargin">
+ <number>10</number>
+ </property>
+ <property name="bottomMargin">
+ <number>10</number>
+ </property>
<item>
<widget class="QCheckBox" name="autoTypeEntryTitleMatchCheckBox">
<property name="text">
@@ -799,21 +845,46 @@
</widget>
</item>
<item>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="topMargin">
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="horizontalSpacing">
<number>10</number>
</property>
- <item row="1" column="0">
- <widget class="QLabel" name="autoTypeShortcutLabel">
+ <property name="verticalSpacing">
+ <number>8</number>
+ </property>
+ <item row="2" column="0">
+ <widget class="QLabel" name="autoTypeDelayLabel">
<property name="text">
- <string>Global Auto-Type shortcut</string>
+ <string>Auto-Type typing delay:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>autoTypeDelaySpinBox</cstring>
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="0" column="1">
<widget class="ShortcutWidget" name="autoTypeShortcutWidget">
<property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -823,17 +894,10 @@
</property>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QLabel" name="autoTypeDelayLabel">
- <property name="text">
- <string>Auto-Type typing delay</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
+ <item row="2" column="1">
<widget class="QSpinBox" name="autoTypeDelaySpinBox">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -855,17 +919,10 @@
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="autoTypeStartDelayLabel">
- <property name="text">
- <string>Auto-Type start delay</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
+ <item row="1" column="1">
<widget class="QSpinBox" name="autoTypeStartDelaySpinBox">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -893,6 +950,45 @@
</property>
</widget>
</item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="autoTypeShortcutLabel">
+ <property name="text">
+ <string>Global Auto-Type shortcut:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>autoTypeShortcutWidget</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="autoTypeStartDelayLabel">
+ <property name="text">
+ <string>Auto-Type start delay:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>autoTypeStartDelaySpinBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</item>
<item>
@@ -903,7 +999,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>40</height>
+ <height>0</height>
</size>
</property>
</spacer>
@@ -921,6 +1017,46 @@
<header>autotype/ShortcutWidget.h</header>
</customwidget>
</customwidgets>
+ <tabstops>
+ <tabstop>generalSettingsTabWidget</tabstop>
+ <tabstop>scrollArea</tabstop>
+ <tabstop>singleInstanceCheckBox</tabstop>
+ <tabstop>launchAtStartup</tabstop>
+ <tabstop>systrayMinimizeOnStartup</tabstop>
+ <tabstop>minimizeAfterUnlockCheckBox</tabstop>
+ <tabstop>rememberLastDatabasesCheckBox</tabstop>
+ <tabstop>openPreviousDatabasesOnStartupCheckBox</tabstop>
+ <tabstop>rememberLastKeyFilesCheckBox</tabstop>
+ <tabstop>checkForUpdatesOnStartupCheckBox</tabstop>
+ <tabstop>checkForUpdatesIncludeBetasCheckBox</tabstop>
+ <tabstop>autoSaveAfterEveryChangeCheckBox</tabstop>
+ <tabstop>autoSaveOnExitCheckBox</tabstop>
+ <tabstop>trackNonDataChangesCheckBox</tabstop>
+ <tabstop>backupBeforeSaveCheckBox</tabstop>
+ <tabstop>autoReloadOnChangeCheckBox</tabstop>
+ <tabstop>useAtomicSavesCheckBox</tabstop>
+ <tabstop>useGroupIconOnEntryCreationCheckBox</tabstop>
+ <tabstop>minimizeOnOpenUrlCheckBox</tabstop>
+ <tabstop>hideWindowOnCopyCheckBox</tabstop>
+ <tabstop>minimizeOnCopyRadioButton</tabstop>
+ <tabstop>dropToBackgroundOnCopyRadioButton</tabstop>
+ <tabstop>faviconTimeoutSpinBox</tabstop>
+ <tabstop>languageComboBox</tabstop>
+ <tabstop>toolButtonStyleComboBox</tabstop>
+ <tabstop>monospaceNotesCheckBox</tabstop>
+ <tabstop>toolbarMovableCheckBox</tabstop>
+ <tabstop>minimizeOnCloseCheckBox</tabstop>
+ <tabstop>systrayShowCheckBox</tabstop>
+ <tabstop>trayIconAppearance</tabstop>
+ <tabstop>systrayMinimizeToTrayCheckBox</tabstop>
+ <tabstop>resetSettingsButton</tabstop>
+ <tabstop>autoTypeEntryTitleMatchCheckBox</tabstop>
+ <tabstop>autoTypeEntryURLMatchCheckBox</tabstop>
+ <tabstop>autoTypeAskCheckBox</tabstop>
+ <tabstop>autoTypeShortcutWidget</tabstop>
+ <tabstop>autoTypeStartDelaySpinBox</tabstop>
+ <tabstop>autoTypeDelaySpinBox</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/gui/ApplicationSettingsWidgetSecurity.ui b/src/gui/ApplicationSettingsWidgetSecurity.ui
index 2310bd07d..bd4af19fa 100644
--- a/src/gui/ApplicationSettingsWidgetSecurity.ui
+++ b/src/gui/ApplicationSettingsWidgetSecurity.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>595</width>
- <height>541</height>
+ <height>567</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -223,23 +223,23 @@
</widget>
</item>
<item>
- <widget class="QCheckBox" name="passwordRepeatCheckBox">
+ <widget class="QCheckBox" name="passwordsRepeatVisibleCheckBox">
<property name="text">
- <string>Don't require password repeat when it is visible</string>
+ <string>Require password repeat when it is visible</string>
</property>
</widget>
</item>
<item>
- <widget class="QCheckBox" name="passwordCleartextCheckBox">
+ <widget class="QCheckBox" name="passwordsHiddenCheckBox">
<property name="text">
- <string>Don't hide passwords when editing them</string>
+ <string>Hide passwords when editing them</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="passwordShowDotsCheckBox">
<property name="text">
- <string>Don't use placeholder for empty password fields</string>
+ <string>Use placeholder for empty password fields</string>
</property>
</widget>
</item>
@@ -297,13 +297,18 @@
<tabstops>
<tabstop>clearClipboardCheckBox</tabstop>
<tabstop>clearClipboardSpinBox</tabstop>
+ <tabstop>lockDatabaseIdleCheckBox</tabstop>
+ <tabstop>lockDatabaseIdleSpinBox</tabstop>
+ <tabstop>clearSearchCheckBox</tabstop>
+ <tabstop>clearSearchSpinBox</tabstop>
+ <tabstop>touchIDResetCheckBox</tabstop>
<tabstop>touchIDResetSpinBox</tabstop>
<tabstop>lockDatabaseOnScreenLockCheckBox</tabstop>
<tabstop>touchIDResetOnScreenLockCheckBox</tabstop>
<tabstop>lockDatabaseMinimizeCheckBox</tabstop>
<tabstop>relockDatabaseAutoTypeCheckBox</tabstop>
- <tabstop>passwordRepeatCheckBox</tabstop>
- <tabstop>passwordCleartextCheckBox</tabstop>
+ <tabstop>passwordsRepeatVisibleCheckBox</tabstop>
+ <tabstop>passwordsHiddenCheckBox</tabstop>
<tabstop>passwordShowDotsCheckBox</tabstop>
<tabstop>passwordPreviewCleartextCheckBox</tabstop>
<tabstop>hideNotesCheckBox</tabstop>
diff --git a/src/gui/CategoryListWidget.cpp b/src/gui/CategoryListWidget.cpp
index c57b19bc0..d0c60dc52 100644
--- a/src/gui/CategoryListWidget.cpp
+++ b/src/gui/CategoryListWidget.cpp
@@ -20,6 +20,7 @@
#include <QListWidget>
#include <QPainter>
+#include <QProxyStyle>
#include <QScrollBar>
#include <QSize>
#include <QStyledItemDelegate>
@@ -158,9 +159,7 @@ CategoryListWidgetDelegate::CategoryListWidgetDelegate(QListWidget* parent)
}
}
-#ifdef Q_OS_WIN
-#include <QProxyStyle>
-class WindowsCorrectedStyle : public QProxyStyle
+class IconSelectionCorrectedStyle : public QProxyStyle
{
public:
void drawPrimitive(PrimitiveElement element,
@@ -169,24 +168,44 @@ public:
const QWidget* widget) const override
{
painter->save();
-
- if (PE_PanelItemViewItem == element) {
- // Qt on Windows draws selection backgrounds only for the actual text/icon
- // bounding box, not over the full width of a list item.
- // We therefore need to translate and stretch the painter before we can
- // tell Qt to draw its native styles.
- // Since we are scaling horizontally, we also need to move the right and left
- // edge pixels outside the drawing area to avoid thick border lines.
- QRect itemRect = subElementRect(QStyle::SE_ItemViewItemFocusRect, option, widget).adjusted(1, 0, 1, 0);
- painter->scale(static_cast<float>(option->rect.width()) / itemRect.width(), 1.0);
- painter->translate(option->rect.left() - itemRect.left() + 1, 0);
+ if (widget && PE_PanelItemViewItem == element) {
+ // Qt on Windows and the Fusion/Phantom base styles draw selection backgrounds only for
+ // the actual text/icon bounding box, not over the full width of a list item.
+ // State_On is relevant only for the Windows hack below.
+ if (option->state & State_HasFocus || option->state & State_On) {
+ painter->fillRect(option->rect, widget->palette().color(QPalette::Active, QPalette::Highlight));
+ } else if (option->state & State_Selected) {
+ painter->fillRect(option->rect, widget->palette().color(QPalette::Inactive, QPalette::Highlight));
+ }
+ } else if (PE_FrameFocusRect == element) {
+ // don't draw the native focus rect
+ } else {
+ QProxyStyle::drawPrimitive(element, option, painter, widget);
}
- QProxyStyle::drawPrimitive(element, option, painter, widget);
painter->restore();
}
-};
+
+#ifdef Q_OS_WIN
+ void drawControl(ControlElement element,
+ const QStyleOption* option,
+ QPainter* painter,
+ const QWidget* widget) const override
+ {
+ // Qt on Windows swallows State_HasFocus somewhere in its intestines,
+ // so we abuse State_On here to indicate the selection focus and
+ // hack into the text colour palette. Forgive me.
+ if (QStyle::CE_ItemViewItem == element && option->state & State_HasFocus) {
+ QStyleOptionViewItem newOpt(*qstyleoption_cast<const QStyleOptionViewItem*>(option));
+ newOpt.state |= State_On;
+ newOpt.palette.setColor(QPalette::All, QPalette::Text, widget->palette().color(QPalette::HighlightedText));
+ QProxyStyle::drawControl(element, &newOpt, painter, widget);
+ return;
+ }
+ QProxyStyle::drawControl(element, option, painter, widget);
+ }
#endif
+};
void CategoryListWidgetDelegate::paint(QPainter* painter,
const QStyleOptionViewItem& option,
@@ -203,12 +222,7 @@ void CategoryListWidgetDelegate::paint(QPainter* painter,
opt.decorationAlignment = Qt::AlignHCenter | Qt::AlignVCenter;
opt.decorationPosition = QStyleOptionViewItem::Top;
-#ifdef Q_OS_WIN
- QScopedPointer<QStyle> style(new WindowsCorrectedStyle());
-#else
- QStyle* style = opt.widget ? opt.widget->style() : QApplication::style();
-#endif
-
+ QScopedPointer<QStyle> style(new IconSelectionCorrectedStyle());
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
QRect fontRect = painter->fontMetrics().boundingRect(
@@ -216,7 +230,16 @@ void CategoryListWidgetDelegate::paint(QPainter* painter,
int paddingTop = fontRect.height() < 30 ? 15 : 10;
int left = opt.rect.left() + opt.rect.width() / 2 - iconSize.width() / 2;
- painter->drawPixmap(left, opt.rect.top() + paddingTop, icon.pixmap(iconSize));
+
+ auto mode = QIcon::Normal;
+ if ((opt.state & QStyle::State_Enabled) == 0) {
+ mode = QIcon::Disabled;
+ } else if (opt.state & QStyle::State_HasFocus) {
+ mode = QIcon::Selected;
+ } else if (opt.state & QStyle::State_Active) {
+ mode = QIcon::Active;
+ }
+ painter->drawPixmap(left, opt.rect.top() + paddingTop, icon.pixmap(iconSize, mode));
painter->restore();
}
@@ -238,7 +261,6 @@ int CategoryListWidgetDelegate::minWidth() const
// add some padding
maxWidth += 10;
-
return maxWidth < m_size.height() ? m_size.height() : maxWidth;
}
@@ -252,5 +274,5 @@ QSize CategoryListWidgetDelegate::sizeHint(const QStyleOptionViewItem& option, c
w = m_listWidget->width();
}
- return QSize(w, m_size.height());
+ return {w, m_size.height()};
}
diff --git a/src/gui/CategoryListWidget.ui b/src/gui/CategoryListWidget.ui
index f16165cdb..f21f47187 100644
--- a/src/gui/CategoryListWidget.ui
+++ b/src/gui/CategoryListWidget.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>182</width>
+ <width>256</width>
<height>418</height>
</rect>
</property>
@@ -113,8 +113,8 @@
</layout>
</widget>
<tabstops>
- <tabstop>categoryList</tabstop>
<tabstop>scrollUp</tabstop>
+ <tabstop>categoryList</tabstop>
<tabstop>scrollDown</tabstop>
</tabstops>
<resources/>
diff --git a/src/gui/Clipboard.cpp b/src/gui/Clipboard.cpp
index 10f959531..ae5d8290f 100644
--- a/src/gui/Clipboard.cpp
+++ b/src/gui/Clipboard.cpp
@@ -67,8 +67,8 @@ void Clipboard::setText(const QString& text, bool clear)
}
#endif
- if (clear && config()->get("security/clearclipboard").toBool()) {
- int timeout = config()->get("security/clearclipboardtimeout").toInt();
+ if (clear && config()->get(Config::Security_ClearClipboard).toBool()) {
+ int timeout = config()->get(Config::Security_ClearClipboardTimeout).toInt();
if (timeout > 0) {
m_lastCopied = text;
m_timer->start(timeout * 1000);
diff --git a/src/gui/CloneDialog.cpp b/src/gui/CloneDialog.cpp
index e91df62c7..2441b3f17 100644
--- a/src/gui/CloneDialog.cpp
+++ b/src/gui/CloneDialog.cpp
@@ -21,7 +21,7 @@
#include "config-keepassx.h"
#include "core/Database.h"
#include "core/Entry.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "crypto/Crypto.h"
#include "gui/DatabaseWidget.h"
diff --git a/src/gui/DatabaseOpenDialog.cpp b/src/gui/DatabaseOpenDialog.cpp
index 620d3652b..5e6e41b7a 100644
--- a/src/gui/DatabaseOpenDialog.cpp
+++ b/src/gui/DatabaseOpenDialog.cpp
@@ -31,7 +31,10 @@ DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent)
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint | Qt::ForeignWindow);
#endif
connect(m_view, SIGNAL(dialogFinished(bool)), this, SLOT(complete(bool)));
- setLayout(m_view->layout());
+ auto* layout = new QVBoxLayout();
+ layout->setMargin(0);
+ setLayout(layout);
+ layout->addWidget(m_view);
setMinimumWidth(700);
}
diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp
index c610a773d..4dbe9dc9d 100644
--- a/src/gui/DatabaseOpenWidget.cpp
+++ b/src/gui/DatabaseOpenWidget.cpp
@@ -21,7 +21,7 @@
#include "core/Config.h"
#include "core/Database.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "crypto/Random.h"
#include "format/KeePass2Reader.h"
#include "gui/FileDialog.h"
@@ -37,7 +37,11 @@
#include <QDesktopServices>
#include <QFont>
#include <QSharedPointer>
-#include <QtConcurrentRun>
+
+namespace
+{
+ constexpr int clearFormsDelay = 30000;
+}
DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
: DialogyWidget(parent)
@@ -48,52 +52,60 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
m_ui->messageWidget->setHidden(true);
+ m_hideTimer.setInterval(clearFormsDelay);
+ m_hideTimer.setSingleShot(true);
+ connect(&m_hideTimer, &QTimer::timeout, this, [this] {
+ // Reset the password field after being hidden for a set time
+ m_ui->editPassword->setText("");
+ m_ui->editPassword->setShowPassword(false);
+ });
+
QFont font;
font.setPointSize(font.pointSize() + 4);
font.setBold(true);
m_ui->labelHeadline->setFont(font);
m_ui->labelHeadline->setText(tr("Unlock KeePassXC Database"));
- m_ui->comboKeyFile->lineEdit()->addAction(m_ui->keyFileClearIcon, QLineEdit::TrailingPosition);
-
- m_ui->buttonTogglePassword->setIcon(filePath()->onOffIcon("actions", "password-show"));
- connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), m_ui->editPassword, SLOT(setShowPassword(bool)));
- connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), m_ui->editPassword, SLOT(setFocus()));
connect(m_ui->buttonBrowseFile, SIGNAL(clicked()), SLOT(browseKeyFile()));
connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase()));
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject()));
- m_ui->hardwareKeyLabelHelp->setIcon(filePath()->icon("actions", "system-help").pixmap(QSize(12, 12)));
+ m_ui->hardwareKeyLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12)));
connect(m_ui->hardwareKeyLabelHelp, SIGNAL(clicked(bool)), SLOT(openHardwareKeyHelp()));
- m_ui->keyFileLabelHelp->setIcon(filePath()->icon("actions", "system-help").pixmap(QSize(12, 12)));
+ m_ui->keyFileLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12)));
connect(m_ui->keyFileLabelHelp, SIGNAL(clicked(bool)), SLOT(openKeyFileHelp()));
- connect(m_ui->comboKeyFile->lineEdit(), SIGNAL(textChanged(QString)), SLOT(handleKeyFileComboEdited()));
- connect(m_ui->comboKeyFile, SIGNAL(currentIndexChanged(int)), SLOT(handleKeyFileComboChanged()));
- m_ui->keyFileClearIcon->setIcon(filePath()->icon("actions", "edit-clear-locationbar-rtl"));
+ connect(m_ui->keyFileLineEdit, SIGNAL(textChanged(QString)), SLOT(keyFileTextChanged()));
+ m_ui->keyFileLineEdit->addAction(m_ui->keyFileClearIcon, QLineEdit::TrailingPosition);
+ m_ui->keyFileClearIcon->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
m_ui->keyFileClearIcon->setVisible(false);
- connect(m_ui->keyFileClearIcon, SIGNAL(triggered(bool)), SLOT(clearKeyFileEdit()));
+ connect(m_ui->keyFileClearIcon, SIGNAL(triggered(bool)), SLOT(clearKeyFileText()));
#ifdef WITH_XC_YUBIKEY
- m_ui->yubikeyProgress->setVisible(false);
- QSizePolicy sp = m_ui->yubikeyProgress->sizePolicy();
+ m_ui->hardwareKeyProgress->setVisible(false);
+ QSizePolicy sp = m_ui->hardwareKeyProgress->sizePolicy();
sp.setRetainSizeWhenHidden(true);
- m_ui->yubikeyProgress->setSizePolicy(sp);
+ m_ui->hardwareKeyProgress->setSizePolicy(sp);
- connect(m_ui->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollYubikey()));
+ connect(m_ui->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollHardwareKey()));
+ connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection);
+
+ connect(YubiKey::instance(), &YubiKey::userInteractionRequest, this, [this] {
+ // Show the press notification if we are in an independent window (e.g., DatabaseOpenDialog)
+ if (window() != getMainWindow()) {
+ m_ui->messageWidget->showMessage(tr("Please touch the button on your YubiKey!"),
+ MessageWidget::Information,
+ MessageWidget::DisableAutoHide);
+ }
+ });
+ connect(YubiKey::instance(), &YubiKey::challengeCompleted, this, [this] { m_ui->messageWidget->hide(); });
#else
m_ui->hardwareKeyLabel->setVisible(false);
m_ui->hardwareKeyLabelHelp->setVisible(false);
m_ui->buttonRedetectYubikey->setVisible(false);
- m_ui->comboChallengeResponse->setVisible(false);
- m_ui->yubikeyProgress->setVisible(false);
-#endif
-
-#ifdef Q_OS_MACOS
- // add random padding to layouts to align widgets properly
- m_ui->dialogButtonsLayout->setContentsMargins(10, 0, 15, 0);
- m_ui->gridLayout->setContentsMargins(10, 0, 0, 0);
+ m_ui->challengeResponseCombo->setVisible(false);
+ m_ui->hardwareKeyProgress->setVisible(false);
#endif
#ifndef WITH_XC_TOUCHID
@@ -113,68 +125,56 @@ void DatabaseOpenWidget::showEvent(QShowEvent* event)
{
DialogyWidget::showEvent(event);
m_ui->editPassword->setFocus();
-
-#ifdef WITH_XC_YUBIKEY
- // showEvent() may be called twice, so make sure we are only polling once
- if (!m_yubiKeyBeingPolled) {
- // clang-format off
- connect(YubiKey::instance(), SIGNAL(detected(int,bool)), SLOT(yubikeyDetected(int,bool)), Qt::QueuedConnection);
- connect(YubiKey::instance(), SIGNAL(detectComplete()), SLOT(yubikeyDetectComplete()), Qt::QueuedConnection);
- connect(YubiKey::instance(), SIGNAL(notFound()), SLOT(noYubikeyFound()), Qt::QueuedConnection);
- // clang-format on
-
- pollYubikey();
- m_yubiKeyBeingPolled = true;
- }
-#endif
+ m_hideTimer.stop();
}
void DatabaseOpenWidget::hideEvent(QHideEvent* event)
{
DialogyWidget::hideEvent(event);
-#ifdef WITH_XC_YUBIKEY
- // Don't listen to any Yubikey events if we are hidden
- disconnect(YubiKey::instance(), nullptr, this, nullptr);
- m_yubiKeyBeingPolled = false;
-#endif
-
- if (isVisible()) {
- return;
+ // Schedule form clearing if we are hidden
+ if (!isVisible()) {
+ m_hideTimer.start();
}
-
- clearForms();
}
void DatabaseOpenWidget::load(const QString& filename)
{
+ clearForms();
+
m_filename = filename;
m_ui->fileNameLabel->setRawText(m_filename);
- m_ui->comboKeyFile->addItem(tr("Select key file..."), -1);
- m_ui->comboKeyFile->setCurrentIndex(0);
m_ui->keyFileClearIcon->setVisible(false);
- m_keyFileComboEdited = false;
- if (config()->get("RememberLastKeyFiles").toBool()) {
- QHash<QString, QVariant> lastKeyFiles = config()->get("LastKeyFiles").toHash();
+ if (config()->get(Config::RememberLastKeyFiles).toBool()) {
+ auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash();
if (lastKeyFiles.contains(m_filename)) {
- m_ui->comboKeyFile->addItem(lastKeyFiles[m_filename].toString());
- m_ui->comboKeyFile->setCurrentIndex(1);
+ m_ui->keyFileLineEdit->setText(lastKeyFiles[m_filename].toString());
}
}
- QHash<QString, QVariant> useTouchID = config()->get("UseTouchID").toHash();
+ QHash<QString, QVariant> useTouchID = config()->get(Config::UseTouchID).toHash();
m_ui->checkTouchID->setChecked(useTouchID.value(m_filename, false).toBool());
+
+#ifdef WITH_XC_YUBIKEY
+ // Only auto-poll for hardware keys if we previously used one with this database file
+ if (config()->get(Config::RememberLastKeyFiles).toBool()) {
+ auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash();
+ if (lastChallengeResponse.contains(m_filename)) {
+ pollHardwareKey();
+ }
+ }
+#endif
}
void DatabaseOpenWidget::clearForms()
{
m_ui->editPassword->setText("");
- m_ui->comboKeyFile->clear();
- m_ui->comboKeyFile->setEditText("");
+ m_ui->editPassword->setShowPassword(false);
+ m_ui->keyFileLineEdit->clear();
m_ui->checkTouchID->setChecked(false);
- m_ui->buttonTogglePassword->setChecked(false);
+ m_ui->challengeResponseCombo->clear();
m_db.reset();
}
@@ -183,23 +183,28 @@ QSharedPointer<Database> DatabaseOpenWidget::database()
return m_db;
}
+QString DatabaseOpenWidget::filename()
+{
+ return m_filename;
+}
+
void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile)
{
m_ui->editPassword->setText(pw);
- m_ui->comboKeyFile->setCurrentIndex(-1);
- m_ui->comboKeyFile->setEditText(keyFile);
+ m_ui->keyFileLineEdit->setText(keyFile);
openDatabase();
}
void DatabaseOpenWidget::openDatabase()
{
- QSharedPointer<CompositeKey> masterKey = databaseKey();
- if (!masterKey) {
+ m_ui->messageWidget->hide();
+
+ QSharedPointer<CompositeKey> databaseKey = buildDatabaseKey();
+ if (!databaseKey) {
return;
}
m_ui->editPassword->setShowPassword(false);
- m_ui->buttonTogglePassword->setChecked(false);
QCoreApplication::processEvents();
m_db.reset(new Database());
@@ -208,11 +213,31 @@ void DatabaseOpenWidget::openDatabase()
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
m_ui->passwordFormFrame->setEnabled(false);
QCoreApplication::processEvents();
- bool ok = m_db->open(m_filename, masterKey, &error, false);
+ bool ok = m_db->open(m_filename, databaseKey, &error, false);
QApplication::restoreOverrideCursor();
m_ui->passwordFormFrame->setEnabled(true);
- if (!ok) {
+ if (ok) {
+#ifdef WITH_XC_TOUCHID
+ QHash<QString, QVariant> useTouchID = config()->get(Config::UseTouchID).toHash();
+
+ // check if TouchID can & should be used to unlock the database next time
+ if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable()) {
+ // encrypt and store key blob
+ if (TouchID::getInstance().storeKey(m_filename, PasswordKey(m_ui->editPassword->text()).rawKey())) {
+ useTouchID.insert(m_filename, true);
+ }
+ } else {
+ // when TouchID not available or unchecked, reset for the current database
+ TouchID::getInstance().reset(m_filename);
+ useTouchID.insert(m_filename, false);
+ }
+
+ config()->set(Config::UseTouchID, useTouchID);
+#endif
+ emit dialogFinished(true);
+ clearForms();
+ } else {
if (m_ui->editPassword->text().isEmpty() && !m_retryUnlockWithEmptyPassword) {
QScopedPointer<QMessageBox> msgBox(new QMessageBox(this));
msgBox->setIcon(QMessageBox::Critical);
@@ -232,40 +257,12 @@ void DatabaseOpenWidget::openDatabase()
return;
}
}
+
m_retryUnlockWithEmptyPassword = false;
m_ui->messageWidget->showMessage(error, MessageWidget::MessageType::Error);
// Focus on the password field and select the input for easy retry
m_ui->editPassword->selectAll();
m_ui->editPassword->setFocus();
- return;
- }
-
- if (m_db) {
-#ifdef WITH_XC_TOUCHID
- QHash<QString, QVariant> useTouchID = config()->get("UseTouchID").toHash();
-
- // check if TouchID can & should be used to unlock the database next time
- if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable()) {
- // encrypt and store key blob
- if (TouchID::getInstance().storeKey(m_filename, PasswordKey(m_ui->editPassword->text()).rawKey())) {
- useTouchID.insert(m_filename, true);
- }
- } else {
- // when TouchID not available or unchecked, reset for the current database
- TouchID::getInstance().reset(m_filename);
- useTouchID.insert(m_filename, false);
- }
-
- config()->set("UseTouchID", useTouchID);
-#endif
-
- if (m_ui->messageWidget->isVisible()) {
- m_ui->messageWidget->animatedHide();
- }
- emit dialogFinished(true);
- } else {
- m_ui->messageWidget->showMessage(error, MessageWidget::Error);
- m_ui->editPassword->setText("");
#ifdef WITH_XC_TOUCHID
// unable to unlock database, reset TouchID for the current database
@@ -274,12 +271,12 @@ void DatabaseOpenWidget::openDatabase()
}
}
-QSharedPointer<CompositeKey> DatabaseOpenWidget::databaseKey()
+QSharedPointer<CompositeKey> DatabaseOpenWidget::buildDatabaseKey()
{
- auto masterKey = QSharedPointer<CompositeKey>::create();
+ auto databaseKey = QSharedPointer<CompositeKey>::create();
if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) {
- masterKey->addKey(QSharedPointer<PasswordKey>::create(m_ui->editPassword->text()));
+ databaseKey->addKey(QSharedPointer<PasswordKey>::create(m_ui->editPassword->text()));
}
#ifdef WITH_XC_TOUCHID
@@ -287,7 +284,7 @@ QSharedPointer<CompositeKey> DatabaseOpenWidget::databaseKey()
if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable()
&& m_ui->editPassword->text().isEmpty()) {
// clear empty password from composite key
- masterKey->clear();
+ databaseKey->clear();
// try to get, decrypt and use PasswordKey
QSharedPointer<QByteArray> passwordKey = TouchID::getInstance().getKey(m_filename);
@@ -296,23 +293,23 @@ QSharedPointer<CompositeKey> DatabaseOpenWidget::databaseKey()
if (passwordKey.isNull())
return QSharedPointer<CompositeKey>();
- masterKey->addKey(PasswordKey::fromRawKey(*passwordKey));
+ databaseKey->addKey(PasswordKey::fromRawKey(*passwordKey));
}
}
#endif
- QHash<QString, QVariant> lastKeyFiles = config()->get("LastKeyFiles").toHash();
+ auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash();
lastKeyFiles.remove(m_filename);
auto key = QSharedPointer<FileKey>::create();
- QString keyFilename = m_ui->comboKeyFile->currentText();
- if (!m_ui->comboKeyFile->currentText().isEmpty() && m_keyFileComboEdited) {
+ QString keyFilename = m_ui->keyFileLineEdit->text();
+ if (!keyFilename.isEmpty()) {
QString errorMsg;
if (!key->load(keyFilename, &errorMsg)) {
m_ui->messageWidget->showMessage(tr("Failed to open key file: %1").arg(errorMsg), MessageWidget::Error);
return {};
}
- if (key->type() != FileKey::Hashed && !config()->get("Messages/NoLegacyKeyFileWarning").toBool()) {
+ if (key->type() != FileKey::Hashed && !config()->get(Config::Messages_NoLegacyKeyFileWarning).toBool()) {
QMessageBox legacyWarning;
legacyWarning.setWindowTitle(tr("Legacy key file format"));
legacyWarning.setText(tr("You are using a legacy key file format which may become\n"
@@ -323,42 +320,40 @@ QSharedPointer<CompositeKey> DatabaseOpenWidget::databaseKey()
legacyWarning.setDefaultButton(QMessageBox::Ok);
legacyWarning.setCheckBox(new QCheckBox(tr("Don't show this warning again")));
- connect(legacyWarning.checkBox(), &QCheckBox::stateChanged, [](int state) {
- config()->set("Messages/NoLegacyKeyFileWarning", state == Qt::CheckState::Checked);
+ connect(legacyWarning.checkBox(), &QCheckBox::stateChanged, this, [](int state) {
+ config()->set(Config::Messages_NoLegacyKeyFileWarning, state == Qt::CheckState::Checked);
});
legacyWarning.exec();
}
- masterKey->addKey(key);
- lastKeyFiles[m_filename] = keyFilename;
+ databaseKey->addKey(key);
+ lastKeyFiles.insert(m_filename, keyFilename);
}
- if (config()->get("RememberLastKeyFiles").toBool()) {
- config()->set("LastKeyFiles", lastKeyFiles);
+ if (config()->get(Config::RememberLastKeyFiles).toBool()) {
+ config()->set(Config::LastKeyFiles, lastKeyFiles);
}
#ifdef WITH_XC_YUBIKEY
- QHash<QString, QVariant> lastChallengeResponse = config()->get("LastChallengeResponse").toHash();
+ auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash();
lastChallengeResponse.remove(m_filename);
- int selectionIndex = m_ui->comboChallengeResponse->currentIndex();
+ int selectionIndex = m_ui->challengeResponseCombo->currentIndex();
if (selectionIndex > 0) {
- int comboPayload = m_ui->comboChallengeResponse->itemData(selectionIndex).toInt();
-
- // read blocking mode from LSB and slot index number from second LSB
- bool blocking = comboPayload & 1;
- int slot = comboPayload >> 1;
- auto crKey = QSharedPointer<YkChallengeResponseKey>(new YkChallengeResponseKey(slot, blocking));
- masterKey->addChallengeResponseKey(crKey);
- lastChallengeResponse[m_filename] = true;
+ auto slot = m_ui->challengeResponseCombo->itemData(selectionIndex).value<YubiKeySlot>();
+ auto crKey = QSharedPointer<YkChallengeResponseKey>(new YkChallengeResponseKey(slot));
+ databaseKey->addChallengeResponseKey(crKey);
+
+ // Qt doesn't read custom types in settings so stuff into a QString
+ lastChallengeResponse.insert(m_filename, QStringLiteral("%1:%2").arg(slot.first).arg(slot.second));
}
- if (config()->get("RememberLastKeyFiles").toBool()) {
- config()->set("LastChallengeResponse", lastChallengeResponse);
+ if (config()->get(Config::RememberLastKeyFiles).toBool()) {
+ config()->set(Config::LastChallengeResponse, lastChallengeResponse);
}
#endif
- return masterKey;
+ return databaseKey;
}
void DatabaseOpenWidget::reject()
@@ -369,7 +364,7 @@ void DatabaseOpenWidget::reject()
void DatabaseOpenWidget::browseKeyFile()
{
QString filters = QString("%1 (*);;%2 (*.key)").arg(tr("All files"), tr("Key files"));
- if (!config()->get("RememberLastKeyFiles").toBool()) {
+ if (!config()->get(Config::RememberLastKeyFiles).toBool()) {
fileDialog()->setNextForgetDialog();
}
QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters);
@@ -384,69 +379,76 @@ void DatabaseOpenWidget::browseKeyFile()
}
if (!filename.isEmpty()) {
- m_ui->comboKeyFile->setCurrentIndex(-1);
- m_ui->comboKeyFile->setEditText(filename);
+ m_ui->keyFileLineEdit->setText(filename);
}
}
-void DatabaseOpenWidget::clearKeyFileEdit()
+void DatabaseOpenWidget::clearKeyFileText()
{
- m_ui->comboKeyFile->setCurrentIndex(0);
- // make sure that handler is called even if 0 was the current index already
- handleKeyFileComboChanged();
+ m_ui->keyFileLineEdit->clear();
}
-void DatabaseOpenWidget::handleKeyFileComboEdited()
+void DatabaseOpenWidget::keyFileTextChanged()
{
- m_keyFileComboEdited = true;
- m_ui->keyFileClearIcon->setVisible(true);
+ m_ui->keyFileClearIcon->setVisible(!m_ui->keyFileLineEdit->text().isEmpty());
}
-void DatabaseOpenWidget::handleKeyFileComboChanged()
+void DatabaseOpenWidget::pollHardwareKey()
{
- m_keyFileComboEdited = m_ui->comboKeyFile->currentIndex() != 0;
- m_ui->keyFileClearIcon->setVisible(m_keyFileComboEdited);
-}
+ if (m_pollingHardwareKey) {
+ return;
+ }
+
+ m_ui->challengeResponseCombo->clear();
+ m_ui->challengeResponseCombo->addItem(tr("Detecting hardware keys…"));
-void DatabaseOpenWidget::pollYubikey()
-{
m_ui->buttonRedetectYubikey->setEnabled(false);
- m_ui->comboChallengeResponse->setEnabled(false);
- m_ui->comboChallengeResponse->clear();
- m_ui->comboChallengeResponse->addItem(tr("Select slot..."), -1);
- m_ui->yubikeyProgress->setVisible(true);
+ m_ui->challengeResponseCombo->setEnabled(false);
+ m_ui->hardwareKeyProgress->setVisible(true);
+ m_pollingHardwareKey = true;
- // YubiKey init is slow, detect asynchronously to not block the UI
- QtConcurrent::run(YubiKey::instance(), &YubiKey::detect);
+ YubiKey::instance()->findValidKeys();
}
-void DatabaseOpenWidget::yubikeyDetected(int slot, bool blocking)
+void DatabaseOpenWidget::hardwareKeyResponse(bool found)
{
- YkChallengeResponseKey yk(slot, blocking);
- // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB
- m_ui->comboChallengeResponse->addItem(yk.getName(), QVariant((slot << 1) | blocking));
+ m_ui->challengeResponseCombo->clear();
+ m_ui->buttonRedetectYubikey->setEnabled(true);
+ m_ui->hardwareKeyProgress->setVisible(false);
+ m_pollingHardwareKey = false;
- if (config()->get("RememberLastKeyFiles").toBool()) {
- QHash<QString, QVariant> lastChallengeResponse = config()->get("LastChallengeResponse").toHash();
+ if (!found) {
+ m_ui->challengeResponseCombo->addItem(tr("No hardware keys detected"));
+ m_ui->challengeResponseCombo->setEnabled(false);
+ return;
+ } else {
+ m_ui->challengeResponseCombo->addItem(tr("Select hardware key…"));
+ }
+
+ YubiKeySlot lastUsedSlot;
+ if (config()->get(Config::RememberLastKeyFiles).toBool()) {
+ auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash();
if (lastChallengeResponse.contains(m_filename)) {
- m_ui->comboChallengeResponse->setCurrentIndex(1);
+ // Qt doesn't read custom types in settings so extract from QString
+ auto split = lastChallengeResponse.value(m_filename).toString().split(":");
+ if (split.size() > 1) {
+ lastUsedSlot = YubiKeySlot(split[0].toUInt(), split[1].toInt());
+ }
}
}
-}
-void DatabaseOpenWidget::yubikeyDetectComplete()
-{
- m_ui->comboChallengeResponse->setEnabled(true);
- m_ui->buttonRedetectYubikey->setEnabled(true);
- m_ui->yubikeyProgress->setVisible(false);
- m_yubiKeyBeingPolled = false;
-}
+ int selectedIndex = 0;
+ for (auto& slot : YubiKey::instance()->foundKeys()) {
+ // add detected YubiKey to combo box
+ m_ui->challengeResponseCombo->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot));
+ // Select this YubiKey + Slot if we used it in the past
+ if (lastUsedSlot == slot) {
+ selectedIndex = m_ui->challengeResponseCombo->count() - 1;
+ }
+ }
-void DatabaseOpenWidget::noYubikeyFound()
-{
- m_ui->buttonRedetectYubikey->setEnabled(true);
- m_ui->yubikeyProgress->setVisible(false);
- m_yubiKeyBeingPolled = false;
+ m_ui->challengeResponseCombo->setCurrentIndex(selectedIndex);
+ m_ui->challengeResponseCombo->setEnabled(true);
}
void DatabaseOpenWidget::openHardwareKeyHelp()
diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h
index aa0a4315b..6d2b688ca 100644
--- a/src/gui/DatabaseOpenWidget.h
+++ b/src/gui/DatabaseOpenWidget.h
@@ -20,6 +20,7 @@
#define KEEPASSX_DATABASEOPENWIDGET_H
#include <QScopedPointer>
+#include <QTimer>
#include "gui/DialogyWidget.h"
#include "keys/CompositeKey.h"
@@ -40,20 +41,23 @@ public:
explicit DatabaseOpenWidget(QWidget* parent = nullptr);
~DatabaseOpenWidget();
void load(const QString& filename);
+ QString filename();
void clearForms();
void enterKey(const QString& pw, const QString& keyFile);
QSharedPointer<Database> database();
-public slots:
- void pollYubikey();
-
signals:
void dialogFinished(bool accepted);
protected:
void showEvent(QShowEvent* event) override;
void hideEvent(QHideEvent* event) override;
- QSharedPointer<CompositeKey> databaseKey();
+ QSharedPointer<CompositeKey> buildDatabaseKey();
+
+ const QScopedPointer<Ui::DatabaseOpenWidget> m_ui;
+ QSharedPointer<Database> m_db;
+ QString m_filename;
+ bool m_retryUnlockWithEmptyPassword = false;
protected slots:
virtual void openDatabase();
@@ -61,24 +65,17 @@ protected slots:
private slots:
void browseKeyFile();
- void clearKeyFileEdit();
- void handleKeyFileComboEdited();
- void handleKeyFileComboChanged();
- void yubikeyDetected(int slot, bool blocking);
- void yubikeyDetectComplete();
- void noYubikeyFound();
+ void clearKeyFileText();
+ void keyFileTextChanged();
+ void pollHardwareKey();
+ void hardwareKeyResponse(bool found);
void openHardwareKeyHelp();
void openKeyFileHelp();
-protected:
- const QScopedPointer<Ui::DatabaseOpenWidget> m_ui;
- QSharedPointer<Database> m_db;
- QString m_filename;
- bool m_retryUnlockWithEmptyPassword = false;
-
private:
- bool m_yubiKeyBeingPolled = false;
- bool m_keyFileComboEdited = false;
+ bool m_pollingHardwareKey = false;
+ QTimer m_hideTimer;
+
Q_DISABLE_COPY(DatabaseOpenWidget)
};
diff --git a/src/gui/DatabaseOpenWidget.ui b/src/gui/DatabaseOpenWidget.ui
index 60b2feadc..a7510baba 100644
--- a/src/gui/DatabaseOpenWidget.ui
+++ b/src/gui/DatabaseOpenWidget.ui
@@ -2,6 +2,14 @@
<ui version="4.0">
<class>DatabaseOpenWidget</class>
<widget class="QWidget" name="DatabaseOpenWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>588</width>
+ <height>448</height>
+ </rect>
+ </property>
<property name="accessibleName">
<string>Unlock KeePassXC Database</string>
</property>
@@ -99,7 +107,7 @@
</spacer>
</item>
<item>
- <widget class="QFrame" name="horizontalFrame">
+ <widget class="QFrame" name="loginFrame">
<property name="minimumSize">
<size>
<width>550</width>
@@ -157,31 +165,14 @@
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="passwordLayout">
- <item>
- <widget class="PasswordEdit" name="editPassword">
- <property name="accessibleName">
- <string>Password field</string>
- </property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="buttonTogglePassword">
- <property name="toolTip">
- <string>Toggle password visibility</string>
- </property>
- <property name="accessibleName">
- <string>Toggle password visibility</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="PasswordEdit" name="editPassword">
+ <property name="accessibleName">
+ <string>Password field</string>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
</item>
<item>
<spacer name="verticalSpacer_4">
@@ -235,13 +226,64 @@
<property name="topMargin">
<number>3</number>
</property>
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="keyFileLabel">
+ <property name="text">
+ <string>Key File:</string>
+ </property>
+ <property name="buddy">
+ <cstring>keyFileLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="keyFileLabelHelp">
+ <property name="cursor">
+ <cursorShape>PointingHandCursor</cursorShape>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::ClickFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>&lt;p&gt;In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave this field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</string>
+ </property>
+ <property name="accessibleName">
+ <string>Key file help</string>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">QToolButton {
+ border: none;
+ background: none;
+}</string>
+ </property>
+ <property name="text">
+ <string>?</string>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>12</width>
+ <height>12</height>
+ </size>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
<item row="1" column="3">
<layout class="QGridLayout" name="gridLayout">
<property name="spacing">
<number>0</number>
</property>
<item row="1" column="2">
- <widget class="QProgressBar" name="yubikeyProgress">
+ <widget class="QProgressBar" name="hardwareKeyProgress">
<property name="maximumSize">
<size>
<width>16777215</width>
@@ -263,7 +305,7 @@
</widget>
</item>
<item row="0" column="2">
- <widget class="QComboBox" name="comboChallengeResponse">
+ <widget class="QComboBox" name="challengeResponseCombo">
<property name="enabled">
<bool>false</bool>
</property>
@@ -283,18 +325,80 @@
</item>
</layout>
</item>
- <item row="0" column="4">
- <widget class="QPushButton" name="buttonBrowseFile">
- <property name="toolTip">
- <string>Browse for key file</string>
- </property>
- <property name="accessibleName">
- <string>Browse for key file</string>
- </property>
- <property name="text">
- <string>Browse...</string>
+ <item row="1" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <property name="spacing">
+ <number>2</number>
</property>
- </widget>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="hardwareKeyLabel">
+ <property name="text">
+ <string>Hardware Key:</string>
+ </property>
+ <property name="buddy">
+ <cstring>challengeResponseCombo</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="hardwareKeyLabelHelp">
+ <property name="cursor">
+ <cursorShape>PointingHandCursor</cursorShape>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::ClickFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
+&lt;p&gt;Click for more information...&lt;/p&gt;</string>
+ </property>
+ <property name="accessibleName">
+ <string>Hardware key help</string>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">QToolButton {
+ border: none;
+ background: none;
+}</string>
+ </property>
+ <property name="text">
+ <string notr="true">?</string>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>12</width>
+ <height>12</height>
+ </size>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
<item row="0" column="3">
<layout class="QGridLayout" name="gridLayout_2">
@@ -302,10 +406,7 @@
<number>0</number>
</property>
<item row="0" column="1">
- <widget class="QComboBox" name="comboKeyFile">
- <property name="enabled">
- <bool>true</bool>
- </property>
+ <widget class="QLineEdit" name="keyFileLineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -313,128 +414,64 @@
</sizepolicy>
</property>
<property name="accessibleName">
- <string>Key file selection</string>
- </property>
- <property name="editable">
- <bool>true</bool>
+ <string>Key file to unlock the database</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="1" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item row="0" column="4">
+ <widget class="QPushButton" name="buttonBrowseFile">
+ <property name="toolTip">
+ <string>Browse for key file</string>
+ </property>
+ <property name="accessibleName">
+ <string>Browse for key file</string>
+ </property>
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
- <number>5</number>
+ <number>0</number>
</property>
<item>
- <widget class="QLabel" name="hardwareKeyLabel">
- <property name="text">
- <string>Hardware Key:</string>
- </property>
- <property name="buddy">
- <cstring>comboChallengeResponse</cstring>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="hardwareKeyLabelHelp">
- <property name="cursor">
- <cursorShape>PointingHandCursor</cursorShape>
+ <widget class="QPushButton" name="buttonRedetectYubikey">
+ <property name="enabled">
+ <bool>true</bool>
</property>
<property name="toolTip">
- <string>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
-&lt;p&gt;Click for more information...&lt;/p&gt;</string>
+ <string>Refresh hardware tokens</string>
</property>
<property name="accessibleName">
- <string>Hardware key help</string>
- </property>
- <property name="styleSheet">
- <string notr="true">QToolButton {
- border: none;
- background: none;
-}</string>
+ <string>Refresh hardware tokens</string>
</property>
<property name="text">
- <string notr="true">?</string>
- </property>
- <property name="iconSize">
- <size>
- <width>12</width>
- <height>12</height>
- </size>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
+ <string>Refresh</string>
</property>
</widget>
</item>
- </layout>
- </item>
- <item row="0" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <property name="spacing">
- <number>5</number>
- </property>
<item>
- <widget class="QLabel" name="keyFileLabel">
- <property name="text">
- <string>Key File:</string>
+ <spacer name="verticalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="buddy">
- <cstring>comboKeyFile</cstring>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="keyFileLabelHelp">
- <property name="cursor">
- <cursorShape>PointingHandCursor</cursorShape>
- </property>
- <property name="toolTip">
- <string>&lt;p&gt;In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.&lt;/p&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; your *.kdbx database file!&lt;br&gt;If you do not have a key file, leave the field empty.&lt;/p&gt;&lt;p&gt;Click for more information...&lt;/p&gt;</string>
- </property>
- <property name="accessibleName">
- <string>Key file help</string>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
</property>
- <property name="styleSheet">
- <string notr="true">QToolButton {
- border: none;
- background: none;
-}</string>
- </property>
- <property name="text">
- <string>?</string>
- </property>
- <property name="iconSize">
+ <property name="sizeHint" stdset="0">
<size>
- <width>12</width>
- <height>12</height>
+ <width>0</width>
+ <height>2</height>
</size>
</property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- </widget>
+ </spacer>
</item>
</layout>
</item>
- <item row="1" column="4">
- <widget class="QPushButton" name="buttonRedetectYubikey">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="toolTip">
- <string>Refresh hardware tokens</string>
- </property>
- <property name="accessibleName">
- <string>Refresh hardware tokens</string>
- </property>
- <property name="text">
- <string>Refresh</string>
- </property>
- </widget>
- </item>
</layout>
</item>
</layout>
@@ -549,11 +586,6 @@
</widget>
<customwidgets>
<customwidget>
- <class>PasswordEdit</class>
- <extends>QLineEdit</extends>
- <header>gui/PasswordEdit.h</header>
- </customwidget>
- <customwidget>
<class>MessageWidget</class>
<extends>QWidget</extends>
<header>gui/MessageWidget.h</header>
@@ -564,14 +596,17 @@
<extends>QLabel</extends>
<header>gui/widgets/ElidedLabel.h</header>
</customwidget>
+ <customwidget>
+ <class>PasswordEdit</class>
+ <extends>QLineEdit</extends>
+ <header>gui/PasswordEdit.h</header>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>editPassword</tabstop>
- <tabstop>buttonTogglePassword</tabstop>
- <tabstop>comboKeyFile</tabstop>
+ <tabstop>keyFileLineEdit</tabstop>
<tabstop>buttonBrowseFile</tabstop>
- <tabstop>hardwareKeyLabelHelp</tabstop>
- <tabstop>comboChallengeResponse</tabstop>
+ <tabstop>challengeResponseCombo</tabstop>
<tabstop>buttonRedetectYubikey</tabstop>
<tabstop>checkTouchID</tabstop>
</tabstops>
diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp
index c37e6c5ea..34fe4db72 100644
--- a/src/gui/DatabaseTabWidget.cpp
+++ b/src/gui/DatabaseTabWidget.cpp
@@ -41,7 +41,7 @@
#include "gui/entry/EntryView.h"
#include "gui/group/GroupView.h"
#ifdef Q_OS_MACOS
-#include "gui/macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
#endif
#include "gui/wizard/NewDatabaseWizard.h"
@@ -49,7 +49,7 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent)
: QTabWidget(parent)
, m_dbWidgetStateSync(new DatabaseWidgetStateSync(this))
, m_dbWidgetPendingLock(nullptr)
- , m_databaseOpenDialog(new DatabaseOpenDialog())
+ , m_databaseOpenDialog(new DatabaseOpenDialog(this))
{
auto* tabBar = new DragTabBar(this);
setTabBar(tabBar);
@@ -80,8 +80,10 @@ void DatabaseTabWidget::toggleTabbar()
{
if (count() > 1) {
tabBar()->show();
+ emit tabVisibilityChanged(true);
} else {
tabBar()->hide();
+ emit tabVisibilityChanged(false);
}
}
@@ -273,7 +275,11 @@ void DatabaseTabWidget::importKeePass1Database()
void DatabaseTabWidget::importOpVaultDatabase()
{
- QString fileName = fileDialog()->getExistingDirectory(this, "Open .opvault database");
+#ifdef Q_MACOS
+ QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), {}, "OPVault (*.opvault)");
+#else
+ QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault"));
+#endif
if (fileName.isEmpty()) {
return;
@@ -351,13 +357,17 @@ bool DatabaseTabWidget::closeDatabaseTab(DatabaseWidget* dbWidget)
*/
bool DatabaseTabWidget::closeAllDatabaseTabs()
{
- while (count() > 0) {
- if (!closeDatabaseTab(0)) {
- return false;
+ // Attempt to lock all databases first to prevent closing only a portion of tabs
+ if (lockDatabases()) {
+ while (count() > 0) {
+ if (!closeDatabaseTab(0)) {
+ return false;
+ }
}
+ return true;
}
- return true;
+ return false;
}
bool DatabaseTabWidget::saveDatabase(int index)
@@ -383,6 +393,20 @@ bool DatabaseTabWidget::saveDatabaseAs(int index)
return ok;
}
+bool DatabaseTabWidget::saveDatabaseBackup(int index)
+{
+ if (index == -1) {
+ index = currentIndex();
+ }
+
+ auto* dbWidget = databaseWidgetFromIndex(index);
+ bool ok = dbWidget->saveBackup();
+ if (ok) {
+ updateLastDatabases(dbWidget->database()->filePath());
+ }
+ return ok;
+}
+
void DatabaseTabWidget::closeDatabaseFromSender()
{
auto* dbWidget = qobject_cast<DatabaseWidget*>(sender());
@@ -452,12 +476,17 @@ bool DatabaseTabWidget::warnOnExport()
return ans == MessageBox::Yes;
}
-void DatabaseTabWidget::changeMasterKey()
+void DatabaseTabWidget::showDatabaseSecurity()
+{
+ currentDatabaseWidget()->switchToDatabaseSecurity();
+}
+
+void DatabaseTabWidget::showDatabaseReports()
{
- currentDatabaseWidget()->switchToMasterKeyChange();
+ currentDatabaseWidget()->switchToDatabaseReports();
}
-void DatabaseTabWidget::changeDatabaseSettings()
+void DatabaseTabWidget::showDatabaseSettings()
{
currentDatabaseWidget()->switchToDatabaseSettings();
}
@@ -590,15 +619,27 @@ DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget()
return qobject_cast<DatabaseWidget*>(currentWidget());
}
-void DatabaseTabWidget::lockDatabases()
+/**
+ * Attempt to lock all open databases
+ *
+ * @return return true if all databases are locked
+ */
+bool DatabaseTabWidget::lockDatabases()
{
- for (int i = 0, c = count(); i < c; ++i) {
+ int numLocked = 0;
+ int c = count();
+ for (int i = 0; i < c; ++i) {
auto dbWidget = databaseWidgetFromIndex(i);
- if (dbWidget->lock() && dbWidget->database()->filePath().isEmpty()) {
- // If we locked a database without a file close the tab
- closeDatabaseTab(dbWidget);
+ if (dbWidget->lock()) {
+ ++numLocked;
+ if (dbWidget->database()->filePath().isEmpty()) {
+ // If we locked a database without a file close the tab
+ closeDatabaseTab(dbWidget);
+ }
}
}
+
+ return numLocked == c;
}
/**
@@ -645,11 +686,11 @@ void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget,
*/
void DatabaseTabWidget::relockPendingDatabase()
{
- if (!m_dbWidgetPendingLock || !config()->get("security/relockautotype").toBool()) {
+ if (!m_dbWidgetPendingLock || !config()->get(Config::Security_RelockAutoType).toBool()) {
return;
}
- if (m_dbWidgetPendingLock->isLocked() || !m_dbWidgetPendingLock->database()->hasKey()) {
+ if (m_dbWidgetPendingLock->isLocked() || !m_dbWidgetPendingLock->database()->isInitialized()) {
m_dbWidgetPendingLock = nullptr;
return;
}
@@ -660,17 +701,17 @@ void DatabaseTabWidget::relockPendingDatabase()
void DatabaseTabWidget::updateLastDatabases(const QString& filename)
{
- if (!config()->get("RememberLastDatabases").toBool()) {
- config()->set("LastDatabases", QVariant());
+ if (!config()->get(Config::RememberLastDatabases).toBool()) {
+ config()->remove(Config::LastDatabases);
} else {
- QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList();
+ QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList();
lastDatabases.prepend(filename);
lastDatabases.removeDuplicates();
- while (lastDatabases.count() > config()->get("NumberOfRememberedLastDatabases").toInt()) {
+ while (lastDatabases.count() > config()->get(Config::NumberOfRememberedLastDatabases).toInt()) {
lastDatabases.removeLast();
}
- config()->set("LastDatabases", lastDatabases);
+ config()->set(Config::LastDatabases, lastDatabases);
}
}
@@ -709,9 +750,17 @@ void DatabaseTabWidget::performGlobalAutoType()
if (!unlockedDatabases.isEmpty()) {
autoType()->performGlobalAutoType(unlockedDatabases);
} else if (count() > 0) {
- if (config()->get("security/relockautotype").toBool()) {
+ if (config()->get(Config::Security_RelockAutoType).toBool()) {
m_dbWidgetPendingLock = currentDatabaseWidget();
}
unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::AutoType);
}
}
+
+void DatabaseTabWidget::performBrowserUnlock()
+{
+ auto dbWidget = currentDatabaseWidget();
+ if (dbWidget && dbWidget->isLocked()) {
+ unlockDatabaseInDialog(dbWidget, DatabaseOpenDialog::Intent::Browser);
+ }
+}
diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h
index 5c55bc63c..e59681ea7 100644
--- a/src/gui/DatabaseTabWidget.h
+++ b/src/gui/DatabaseTabWidget.h
@@ -68,18 +68,21 @@ public slots:
void importOpVaultDatabase();
bool saveDatabase(int index = -1);
bool saveDatabaseAs(int index = -1);
+ bool saveDatabaseBackup(int index = -1);
void exportToCsv();
void exportToHtml();
- void lockDatabases();
+ bool lockDatabases();
void closeDatabaseFromSender();
void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent);
void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent, const QString& filePath);
void relockPendingDatabase();
- void changeMasterKey();
- void changeDatabaseSettings();
+ void showDatabaseSecurity();
+ void showDatabaseReports();
+ void showDatabaseSettings();
void performGlobalAutoType();
+ void performBrowserUnlock();
signals:
void databaseOpened(DatabaseWidget* dbWidget);
@@ -88,6 +91,7 @@ signals:
void databaseLocked(DatabaseWidget* dbWidget);
void activateDatabaseChanged(DatabaseWidget* dbWidget);
void tabNameChanged();
+ void tabVisibilityChanged(bool tabsVisible);
void messageGlobal(const QString&, MessageWidget::MessageType type);
void messageDismissGlobal();
void databaseUnlockDialogFinished(bool accepted, DatabaseWidget* dbWidget);
@@ -104,7 +108,7 @@ private:
QPointer<DatabaseWidgetStateSync> m_dbWidgetStateSync;
QPointer<DatabaseWidget> m_dbWidgetPendingLock;
- QScopedPointer<DatabaseOpenDialog> m_databaseOpenDialog;
+ QPointer<DatabaseOpenDialog> m_databaseOpenDialog;
};
#endif // KEEPASSX_DATABASETABWIDGET_H
diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp
index 990cf4e34..61f2b2163 100644
--- a/src/gui/DatabaseWidget.cpp
+++ b/src/gui/DatabaseWidget.cpp
@@ -25,21 +25,23 @@
#include <QFile>
#include <QHBoxLayout>
#include <QHeaderView>
+#include <QHostInfo>
#include <QKeyEvent>
#include <QLabel>
#include <QLineEdit>
#include <QProcess>
#include <QSplitter>
+#include <QTextEdit>
#include "autotype/AutoType.h"
#include "core/Config.h"
#include "core/Database.h"
#include "core/EntrySearcher.h"
-#include "core/FilePath.h"
#include "core/FileWatcher.h"
#include "core/Group.h"
#include "core/Merger.h"
#include "core/Metadata.h"
+#include "core/Resources.h"
#include "core/Tools.h"
#include "format/KeePass2Reader.h"
#include "gui/Clipboard.h"
@@ -49,6 +51,7 @@
#include "gui/EntryPreviewWidget.h"
#include "gui/FileDialog.h"
#include "gui/KeePass1OpenWidget.h"
+#include "gui/MainWindow.h"
#include "gui/MessageBox.h"
#include "gui/OpVaultOpenWidget.h"
#include "gui/TotpDialog.h"
@@ -59,6 +62,7 @@
#include "gui/entry/EntryView.h"
#include "gui/group/EditGroupWidget.h"
#include "gui/group/GroupView.h"
+#include "gui/reports/ReportsDialog.h"
#include "keeshare/KeeShare.h"
#include "touchid/TouchID.h"
@@ -88,6 +92,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
, m_editEntryWidget(new EditEntryWidget(this))
, m_editGroupWidget(new EditGroupWidget(this))
, m_historyEditEntryWidget(new EditEntryWidget(this))
+ , m_reportsDialog(new ReportsDialog(this))
, m_databaseSettingDialog(new DatabaseSettingsDialog(this))
, m_databaseOpenWidget(new DatabaseOpenWidget(this))
, m_keepass1OpenWidget(new KeePass1OpenWidget(this))
@@ -165,6 +170,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
m_editEntryWidget->setObjectName("editEntryWidget");
m_editGroupWidget->setObjectName("editGroupWidget");
m_csvImportWizard->setObjectName("csvImportWizard");
+ m_reportsDialog->setObjectName("reportsDialog");
m_databaseSettingDialog->setObjectName("databaseSettingsDialog");
m_databaseOpenWidget->setObjectName("databaseOpenWidget");
m_keepass1OpenWidget->setObjectName("keepass1OpenWidget");
@@ -173,6 +179,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
addChildWidget(m_mainWidget);
addChildWidget(m_editEntryWidget);
addChildWidget(m_editGroupWidget);
+ addChildWidget(m_reportsDialog);
addChildWidget(m_databaseSettingDialog);
addChildWidget(m_historyEditEntryWidget);
addChildWidget(m_databaseOpenWidget);
@@ -187,8 +194,9 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
connect(m_previewView, SIGNAL(errorOccurred(QString)), SLOT(showErrorMessage(QString)));
connect(m_previewView, SIGNAL(entryUrlActivated(Entry*)), SLOT(openUrlForEntry(Entry*)));
connect(m_entryView, SIGNAL(viewStateChanged()), SIGNAL(entryViewStateChanged()));
- connect(m_groupView, SIGNAL(groupSelectionChanged(Group*)), SLOT(onGroupChanged(Group*)));
- connect(m_groupView, SIGNAL(groupSelectionChanged(Group*)), SIGNAL(groupChanged()));
+ connect(m_groupView, SIGNAL(groupSelectionChanged()), SLOT(onGroupChanged()));
+ connect(m_groupView, SIGNAL(groupSelectionChanged()), SIGNAL(groupChanged()));
+ connect(m_groupView, &GroupView::groupFocused, this, [this] { m_previewView->setGroup(currentGroup()); });
connect(m_entryView, SIGNAL(entryActivated(Entry*,EntryModel::ModelColumn)),
SLOT(entryActivationSignalReceived(Entry*,EntryModel::ModelColumn)));
connect(m_entryView, SIGNAL(entrySelectionChanged(Entry*)), SLOT(onEntryChanged(Entry*)));
@@ -196,6 +204,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
connect(m_editEntryWidget, SIGNAL(historyEntryActivated(Entry*)), SLOT(switchToHistoryView(Entry*)));
connect(m_historyEditEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchBackToEntryEdit()));
connect(m_editGroupWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool)));
+ connect(m_reportsDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool)));
connect(m_databaseSettingDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool)));
connect(m_databaseOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool)));
connect(m_keepass1OpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool)));
@@ -209,12 +218,12 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
m_blockAutoSave = false;
m_EntrySearcher = new EntrySearcher(false);
- m_searchLimitGroup = config()->get("SearchLimitGroup", false).toBool();
+ m_searchLimitGroup = config()->get(Config::SearchLimitGroup).toBool();
#ifdef WITH_XC_SSHAGENT
- if (config()->get("SSHAgent", false).toBool()) {
- connect(this, SIGNAL(databaseLocked()), SSHAgent::instance(), SLOT(databaseModeChanged()));
- connect(this, SIGNAL(databaseUnlocked()), SSHAgent::instance(), SLOT(databaseModeChanged()));
+ if (sshAgent()->isEnabled()) {
+ connect(this, SIGNAL(databaseLockRequested()), sshAgent(), SLOT(databaseLocked()));
+ connect(this, SIGNAL(databaseUnlocked()), sshAgent(), SLOT(databaseUnlocked()));
}
#endif
@@ -249,15 +258,15 @@ QSharedPointer<Database> DatabaseWidget::database() const
DatabaseWidget::Mode DatabaseWidget::currentMode() const
{
if (currentWidget() == nullptr) {
- return DatabaseWidget::Mode::None;
+ return Mode::None;
} else if (currentWidget() == m_mainWidget) {
- return DatabaseWidget::Mode::ViewMode;
+ return Mode::ViewMode;
} else if (currentWidget() == m_databaseOpenWidget || currentWidget() == m_keepass1OpenWidget) {
- return DatabaseWidget::Mode::LockedMode;
+ return Mode::LockedMode;
} else if (currentWidget() == m_csvImportWizard) {
- return DatabaseWidget::Mode::ImportMode;
+ return Mode::ImportMode;
} else {
- return DatabaseWidget::Mode::EditMode;
+ return Mode::EditMode;
}
}
@@ -266,11 +275,26 @@ bool DatabaseWidget::isLocked() const
return currentMode() == Mode::LockedMode;
}
+bool DatabaseWidget::isSaving() const
+{
+ return m_db->isSaving();
+}
+
+bool DatabaseWidget::isSorted() const
+{
+ return m_entryView->isSorted();
+}
+
bool DatabaseWidget::isSearchActive() const
{
return m_entryView->inSearchMode();
}
+bool DatabaseWidget::isEntryViewActive() const
+{
+ return currentWidget() == m_mainWidget;
+}
+
bool DatabaseWidget::isEntryEditActive() const
{
return currentWidget() == m_editEntryWidget;
@@ -604,9 +628,45 @@ bool DatabaseWidget::confirmDeleteEntries(QList<Entry*> entries, bool permanent)
}
}
-void DatabaseWidget::setFocus()
+void DatabaseWidget::setFocus(Qt::FocusReason reason)
{
- m_entryView->setFocus();
+ if (reason == Qt::BacktabFocusReason) {
+ m_previewView->setFocus();
+ } else {
+ m_groupView->setFocus();
+ }
+}
+
+void DatabaseWidget::focusOnEntries()
+{
+ if (isEntryViewActive()) {
+ m_entryView->setFocus();
+ }
+}
+
+void DatabaseWidget::focusOnGroups()
+{
+ if (isEntryViewActive()) {
+ m_groupView->setFocus();
+ }
+}
+
+void DatabaseWidget::moveEntryUp()
+{
+ auto currentEntry = currentSelectedEntry();
+ if (currentEntry) {
+ currentEntry->moveUp();
+ m_entryView->setCurrentEntry(currentEntry);
+ }
+}
+
+void DatabaseWidget::moveEntryDown()
+{
+ auto currentEntry = currentSelectedEntry();
+ if (currentEntry) {
+ currentEntry->moveDown();
+ m_entryView->setCurrentEntry(currentEntry);
+ }
}
void DatabaseWidget::copyTitle()
@@ -627,6 +687,14 @@ void DatabaseWidget::copyUsername()
void DatabaseWidget::copyPassword()
{
+ // QTextEdit does not properly trap Ctrl+C copy shortcut
+ // if a text edit has focus pass the copy operation to it
+ auto textEdit = qobject_cast<QTextEdit*>(focusWidget());
+ if (textEdit) {
+ textEdit->copy();
+ return;
+ }
+
auto currentEntry = currentSelectedEntry();
if (currentEntry) {
setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->password()));
@@ -670,15 +738,59 @@ void DatabaseWidget::showTotpKeyQrCode()
void DatabaseWidget::setClipboardTextAndMinimize(const QString& text)
{
clipboard()->setText(text);
- if (config()->get("HideWindowOnCopy").toBool()) {
- if (config()->get("MinimizeOnCopy").toBool()) {
- window()->showMinimized();
- } else if (config()->get("DropToBackgroundOnCopy").toBool()) {
+ if (config()->get(Config::HideWindowOnCopy).toBool()) {
+ if (config()->get(Config::MinimizeOnCopy).toBool()) {
+ getMainWindow()->minimizeOrHide();
+ } else if (config()->get(Config::DropToBackgroundOnCopy).toBool()) {
window()->lower();
}
}
}
+#ifdef WITH_XC_SSHAGENT
+void DatabaseWidget::addToAgent()
+{
+ Entry* currentEntry = m_entryView->currentEntry();
+ Q_ASSERT(currentEntry);
+ if (!currentEntry) {
+ return;
+ }
+
+ KeeAgentSettings settings;
+ if (!settings.fromEntry(currentEntry)) {
+ return;
+ }
+
+ OpenSSHKey key;
+ if (settings.toOpenSSHKey(currentEntry, key, true)) {
+ SSHAgent::instance()->addIdentity(key, settings, database()->uuid());
+ } else {
+ m_messageWidget->showMessage(key.errorString(), MessageWidget::Error);
+ }
+}
+
+void DatabaseWidget::removeFromAgent()
+{
+ Entry* currentEntry = m_entryView->currentEntry();
+ Q_ASSERT(currentEntry);
+ if (!currentEntry) {
+ return;
+ }
+
+ KeeAgentSettings settings;
+ if (!settings.fromEntry(currentEntry)) {
+ return;
+ }
+
+ OpenSSHKey key;
+ if (settings.toOpenSSHKey(currentEntry, key, false)) {
+ SSHAgent::instance()->removeIdentity(key);
+ } else {
+ m_messageWidget->showMessage(key.errorString(), MessageWidget::Error);
+ }
+}
+#endif
+
void DatabaseWidget::performAutoType()
{
auto currentEntry = currentSelectedEntry();
@@ -776,17 +888,19 @@ void DatabaseWidget::openUrlForEntry(Entry* entry)
if (launch) {
QProcess::startDetached(cmdString.mid(6));
- if (config()->get("MinimizeOnOpenUrl").toBool()) {
- window()->showMinimized();
+ if (config()->get(Config::MinimizeOnOpenUrl).toBool()) {
+ getMainWindow()->minimizeOrHide();
}
}
+ } else if (cmdString.startsWith("kdbx://")) {
+ openDatabaseFromEntry(entry, false);
} else {
QUrl url = QUrl::fromUserInput(entry->resolveMultiplePlaceholders(entry->url()));
if (!url.isEmpty()) {
QDesktopServices::openUrl(url);
- if (config()->get("MinimizeOnOpenUrl").toBool()) {
- window()->showMinimized();
+ if (config()->get(Config::MinimizeOnOpenUrl).toBool()) {
+ getMainWindow()->minimizeOrHide();
}
}
}
@@ -861,6 +975,8 @@ int DatabaseWidget::addChildWidget(QWidget* w)
void DatabaseWidget::switchToMainView(bool previousDialogAccepted)
{
+ setCurrentWidget(m_mainWidget);
+
if (m_newGroup) {
if (previousDialogAccepted) {
m_newGroup->setParent(m_newParent);
@@ -886,12 +1002,10 @@ void DatabaseWidget::switchToMainView(bool previousDialogAccepted)
m_entryView->setFocus();
}
- setCurrentWidget(m_mainWidget);
-
if (sender() == m_entryView || sender() == m_editEntryWidget) {
onEntryChanged(m_entryView->currentEntry());
} else if (sender() == m_groupView || sender() == m_editGroupWidget) {
- onGroupChanged(m_groupView->currentGroup());
+ onGroupChanged();
}
}
@@ -966,8 +1080,8 @@ void DatabaseWidget::loadDatabase(bool accepted)
processAutoOpen();
m_saveAttempts = 0;
emit databaseUnlocked();
- if (config()->get("MinimizeAfterUnlock").toBool()) {
- window()->showMinimized();
+ if (config()->get(Config::MinimizeAfterUnlock).toBool()) {
+ getMainWindow()->minimizeOrHide();
}
} else {
if (m_databaseOpenWidget->database()) {
@@ -1105,6 +1219,12 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod
}
}
+void DatabaseWidget::switchToDatabaseReports()
+{
+ m_reportsDialog->load(m_db);
+ setCurrentWidget(m_reportsDialog);
+}
+
void DatabaseWidget::switchToDatabaseSettings()
{
m_databaseSettingDialog->load(m_db);
@@ -1113,7 +1233,9 @@ void DatabaseWidget::switchToDatabaseSettings()
void DatabaseWidget::switchToOpenDatabase()
{
- switchToOpenDatabase(m_db->filePath());
+ if (currentWidget() != m_databaseOpenWidget || m_databaseOpenWidget->filename() != m_db->filePath()) {
+ switchToOpenDatabase(m_db->filePath());
+ }
}
void DatabaseWidget::switchToOpenDatabase(const QString& filePath)
@@ -1185,10 +1307,10 @@ void DatabaseWidget::sortGroupsDesc()
m_groupView->sortGroups(true);
}
-void DatabaseWidget::switchToMasterKeyChange()
+void DatabaseWidget::switchToDatabaseSecurity()
{
switchToDatabaseSettings();
- m_databaseSettingDialog->showMasterKeySettings();
+ m_databaseSettingDialog->showDatabaseKeySettings();
}
void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile)
@@ -1253,8 +1375,10 @@ void DatabaseWidget::setSearchLimitGroup(bool state)
refreshSearch();
}
-void DatabaseWidget::onGroupChanged(Group* group)
+void DatabaseWidget::onGroupChanged()
{
+ auto group = m_groupView->currentGroup();
+
// Intercept group changes if in search mode
if (isSearchActive() && m_searchLimitGroup) {
search(m_lastSearchText);
@@ -1279,7 +1403,7 @@ void DatabaseWidget::onGroupChanged(Group* group)
void DatabaseWidget::onDatabaseModified()
{
- if (!m_blockAutoSave && config()->get("AutoSaveAfterEveryChange").toBool() && !m_db->isReadOnly()) {
+ if (!m_blockAutoSave && config()->get(Config::AutoSaveAfterEveryChange).toBool() && !m_db->isReadOnly()) {
save();
} else {
// Only block once, then reset
@@ -1295,13 +1419,11 @@ QString DatabaseWidget::getCurrentSearch()
void DatabaseWidget::endSearch()
{
if (isSearchActive()) {
- emit listModeAboutToActivate();
-
// Show the normal entry view of the current group
+ emit listModeAboutToActivate();
m_entryView->displayGroup(currentGroup());
- onGroupChanged(currentGroup());
-
emit listModeActivated();
+ m_entryView->setFirstEntryActive();
}
m_searchingLabel->setVisible(false);
@@ -1362,12 +1484,43 @@ void DatabaseWidget::showEvent(QShowEvent* event)
event->accept();
}
+bool DatabaseWidget::focusNextPrevChild(bool next)
+{
+ // [parent] <-> GroupView <-> EntryView <-> EntryPreview <-> [parent]
+ if (next) {
+ if (m_groupView->hasFocus()) {
+ m_entryView->setFocus();
+ return true;
+ } else if (m_entryView->hasFocus()) {
+ m_previewView->setFocus();
+ return true;
+ }
+ } else {
+ if (m_previewView->hasFocus()) {
+ m_entryView->setFocus();
+ return true;
+ } else if (m_entryView->hasFocus()) {
+ m_groupView->setFocus();
+ return true;
+ }
+ }
+
+ // Defer to the parent widget to make a decision
+ return QStackedWidget::focusNextPrevChild(next);
+}
+
bool DatabaseWidget::lock()
{
if (isLocked()) {
return true;
}
+ // Don't try to lock the database while saving, this will cause a deadlock
+ if (m_db->isSaving()) {
+ QTimer::singleShot(200, this, SLOT(lock()));
+ return false;
+ }
+
emit databaseLockRequested();
clipboard()->clearCopiedText();
@@ -1383,10 +1536,11 @@ bool DatabaseWidget::lock()
}
}
- if (m_db->isModified()) {
+ if (m_db->isModified(true)) {
bool saved = false;
// Attempt to save on exit, but don't block locking if it fails
- if (config()->get("AutoSaveOnExit").toBool() || config()->get("AutoSaveAfterEveryChange").toBool()) {
+ if (config()->get(Config::AutoSaveOnExit).toBool()
+ || config()->get(Config::AutoSaveAfterEveryChange).toBool()) {
saved = save();
}
@@ -1444,7 +1598,7 @@ void DatabaseWidget::reloadDatabaseFile()
m_blockAutoSave = true;
- if (!config()->get("AutoReloadOnChange").toBool()) {
+ if (!config()->get(Config::AutoReloadOnChange).toBool()) {
// Ask if we want to reload the db
auto result = MessageBox::question(this,
tr("File has changed"),
@@ -1466,7 +1620,7 @@ void DatabaseWidget::reloadDatabaseFile()
QString error;
auto db = QSharedPointer<Database>::create(m_db->filePath());
if (db->open(database()->key(), &error)) {
- if (m_db->isModified()) {
+ if (m_db->isModified(true)) {
// Ask if we want to merge changes into new database
auto result = MessageBox::question(
this,
@@ -1513,6 +1667,11 @@ int DatabaseWidget::numberOfSelectedEntries() const
return m_entryView->numberOfSelectedEntries();
}
+int DatabaseWidget::currentEntryIndex() const
+{
+ return m_entryView->currentEntryIndex();
+}
+
QStringList DatabaseWidget::customEntryAttributes() const
{
Entry* entry = m_entryView->currentEntry();
@@ -1543,11 +1702,6 @@ bool DatabaseWidget::isGroupSelected() const
return m_groupView->currentGroup();
}
-bool DatabaseWidget::currentEntryHasFocus()
-{
- return m_entryView->numberOfSelectedEntries() > 0 && m_entryView->hasFocus();
-}
-
bool DatabaseWidget::currentEntryHasTitle()
{
auto currentEntry = currentSelectedEntry();
@@ -1598,6 +1752,19 @@ bool DatabaseWidget::currentEntryHasTotp()
return currentEntry->hasTotp();
}
+#ifdef WITH_XC_SSHAGENT
+bool DatabaseWidget::currentEntryHasSshKey()
+{
+ Entry* currentEntry = m_entryView->currentEntry();
+ Q_ASSERT(currentEntry);
+ if (!currentEntry) {
+ return false;
+ }
+
+ return KeeAgentSettings::inEntryAttachments(currentEntry->attachments());
+}
+#endif
+
bool DatabaseWidget::currentEntryHasNotes()
{
auto currentEntry = currentSelectedEntry();
@@ -1654,9 +1821,9 @@ bool DatabaseWidget::save()
m_groupView->setDisabled(true);
QApplication::processEvents();
- bool useAtomicSaves = config()->get("UseAtomicSaves", true).toBool();
+ bool useAtomicSaves = config()->get(Config::UseAtomicSaves).toBool();
QString errorMessage;
- bool ok = m_db->save(&errorMessage, useAtomicSaves, config()->get("BackupBeforeSave").toBool());
+ bool ok = m_db->save(&errorMessage, useAtomicSaves, config()->get(Config::BackupBeforeSave).toBool());
// Return control
m_entryView->setDisabled(false);
@@ -1682,7 +1849,7 @@ bool DatabaseWidget::save()
MessageBox::Disable | MessageBox::Cancel,
MessageBox::Disable);
if (result == MessageBox::Disable) {
- config()->set("UseAtomicSaves", false);
+ config()->set(Config::UseAtomicSaves, false);
return save();
}
}
@@ -1702,14 +1869,75 @@ bool DatabaseWidget::save()
*/
bool DatabaseWidget::saveAs()
{
+ // Never allow saving a locked database; it causes corruption
+ Q_ASSERT(!isLocked());
+ // Release build interlock
+ if (isLocked()) {
+ // We return true since a save is not required
+ return true;
+ }
+
+ QString oldFilePath = m_db->filePath();
+ if (!QFileInfo::exists(oldFilePath)) {
+ oldFilePath =
+ QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/" + tr("Passwords").append(".kdbx"));
+ }
+ const QString newFilePath = fileDialog()->getSaveFileName(
+ this, tr("Save database as"), oldFilePath, tr("KeePass 2 Database").append(" (*.kdbx)"), nullptr, nullptr);
+
+ bool ok = false;
+ if (!newFilePath.isEmpty()) {
+ auto focusWidget = qApp->focusWidget();
+
+ // Lock out interactions
+ m_entryView->setDisabled(true);
+ m_groupView->setDisabled(true);
+ QApplication::processEvents();
+
+ QString errorMessage;
+ ok = m_db->saveAs(newFilePath,
+ &errorMessage,
+ config()->get(Config::UseAtomicSaves).toBool(),
+ config()->get(Config::BackupBeforeSave).toBool());
+
+ // Return control
+ m_entryView->setDisabled(false);
+ m_groupView->setDisabled(false);
+
+ if (focusWidget) {
+ focusWidget->setFocus();
+ }
+
+ if (!ok) {
+ showMessage(tr("Writing the database failed: %1").arg(errorMessage),
+ MessageWidget::Error,
+ true,
+ MessageWidget::LongAutoHideTimeout);
+ }
+ }
+
+ return ok;
+}
+
+/**
+ * Save copy of database under a new user-selected filename.
+ *
+ * @return true on success
+ */
+bool DatabaseWidget::saveBackup()
+{
while (true) {
QString oldFilePath = m_db->filePath();
if (!QFileInfo::exists(oldFilePath)) {
- oldFilePath = QDir::toNativeSeparators(config()->get("LastDir", QDir::homePath()).toString() + "/"
+ oldFilePath = QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/"
+ tr("Passwords").append(".kdbx"));
}
- const QString newFilePath = fileDialog()->getSaveFileName(
- this, tr("Save database as"), oldFilePath, tr("KeePass 2 Database").append(" (*.kdbx)"), nullptr, nullptr);
+ const QString newFilePath = fileDialog()->getSaveFileName(this,
+ tr("Save database backup"),
+ oldFilePath,
+ tr("KeePass 2 Database").append(" (*.kdbx)"),
+ nullptr,
+ nullptr);
if (!newFilePath.isEmpty()) {
// Ensure we don't recurse back into this function
@@ -1717,11 +1945,19 @@ bool DatabaseWidget::saveAs()
m_db->setFilePath(newFilePath);
m_saveAttempts = 0;
+ bool modified = m_db->isModified();
+
if (!save()) {
// Failed to save, try again
+ m_db->setFilePath(oldFilePath);
continue;
}
+ m_db->setFilePath(oldFilePath);
+ if (modified) {
+ // Source database is marked as clean when copy is saved, even if source has unsaved changes
+ m_db->markAsModified();
+ }
return true;
}
@@ -1788,38 +2024,73 @@ void DatabaseWidget::processAutoOpen()
if (entry->url().isEmpty() || (entry->password().isEmpty() && entry->username().isEmpty())) {
continue;
}
- QFileInfo filepath;
- QFileInfo keyfile;
- if (entry->url().startsWith("file://")) {
- QUrl url(entry->url());
- filepath.setFile(url.toLocalFile());
- } else {
- filepath.setFile(entry->url());
- if (filepath.isRelative()) {
- QFileInfo currentpath(m_db->filePath());
- filepath.setFile(currentpath.absoluteDir(), entry->url());
+ // Support ifDevice advanced entry, a comma separated list of computer names
+ // that control whether to perform AutoOpen on this entry or not. Can be
+ // negated using '!'
+ auto ifDevice = entry->attribute("ifDevice");
+ if (!ifDevice.isEmpty()) {
+ bool loadDb = false;
+ auto hostName = QHostInfo::localHostName();
+ for (auto& dev : ifDevice.split(",")) {
+ dev = dev.trimmed();
+ if (dev.startsWith("!") && dev.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) {
+ // Machine name matched an exclusion, don't load this database
+ loadDb = false;
+ break;
+ } else if (dev.compare(hostName, Qt::CaseInsensitive) == 0) {
+ loadDb = true;
+ }
+ }
+ if (!loadDb) {
+ continue;
}
}
- if (!filepath.isFile()) {
- continue;
+ openDatabaseFromEntry(entry);
+ }
+}
+
+void DatabaseWidget::openDatabaseFromEntry(const Entry* entry, bool inBackground)
+{
+ auto keyFile = entry->resolveMultiplePlaceholders(entry->username());
+ auto password = entry->resolveMultiplePlaceholders(entry->password());
+ auto databaseUrl = entry->resolveMultiplePlaceholders(entry->url());
+ if (databaseUrl.startsWith("kdbx://")) {
+ databaseUrl = databaseUrl.mid(7);
+ }
+
+ QFileInfo dbFileInfo;
+ if (databaseUrl.startsWith("file://")) {
+ QUrl url(databaseUrl);
+ dbFileInfo.setFile(url.toLocalFile());
+ } else {
+ dbFileInfo.setFile(databaseUrl);
+ if (dbFileInfo.isRelative()) {
+ QFileInfo currentpath(m_db->filePath());
+ dbFileInfo.setFile(currentpath.absoluteDir(), databaseUrl);
}
+ }
- if (!entry->username().isEmpty()) {
- if (entry->username().startsWith("file://")) {
- QUrl keyfileUrl(entry->username());
- keyfile.setFile(keyfileUrl.toLocalFile());
- } else {
- keyfile.setFile(entry->username());
- if (keyfile.isRelative()) {
- QFileInfo currentpath(m_db->filePath());
- keyfile.setFile(currentpath.absoluteDir(), entry->username());
- }
+ if (!dbFileInfo.isFile()) {
+ showErrorMessage(tr("Could not find database file: %1").arg(databaseUrl));
+ return;
+ }
+
+ QFileInfo keyFileInfo;
+ if (!keyFile.isEmpty()) {
+ if (keyFile.startsWith("file://")) {
+ QUrl keyfileUrl(keyFile);
+ keyFileInfo.setFile(keyfileUrl.toLocalFile());
+ } else {
+ keyFileInfo.setFile(keyFile);
+ if (keyFileInfo.isRelative()) {
+ QFileInfo currentpath(m_db->filePath());
+ keyFileInfo.setFile(currentpath.absoluteDir(), keyFile);
}
}
-
- // Request to open the database file in the background with a password and keyfile
- emit requestOpenDatabase(filepath.canonicalFilePath(), true, entry->password(), keyfile.canonicalFilePath());
}
+
+ // Request to open the database file in the background with a password and keyfile
+ emit requestOpenDatabase(dbFileInfo.canonicalFilePath(), inBackground, password, keyFileInfo.canonicalFilePath());
}
diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h
index 9f0c5c976..a31dfd37b 100644
--- a/src/gui/DatabaseWidget.h
+++ b/src/gui/DatabaseWidget.h
@@ -34,6 +34,7 @@ class DatabaseOpenWidget;
class KeePass1OpenWidget;
class OpVaultOpenWidget;
class DatabaseSettingsDialog;
+class ReportsDialog;
class Database;
class FileWatcher;
class EditEntryWidget;
@@ -75,11 +76,16 @@ public:
explicit DatabaseWidget(const QString& filePath, QWidget* parent = nullptr);
~DatabaseWidget();
+ void setFocus(Qt::FocusReason reason);
+
QSharedPointer<Database> database() const;
DatabaseWidget::Mode currentMode() const;
bool isLocked() const;
+ bool isSaving() const;
+ bool isSorted() const;
bool isSearchActive() const;
+ bool isEntryViewActive() const;
bool isEntryEditActive() const;
bool isGroupEditActive() const;
@@ -94,6 +100,7 @@ public:
bool isGroupSelected() const;
bool isRecycleBinSelected() const;
int numberOfSelectedEntries() const;
+ int currentEntryIndex() const;
QStringList customEntryAttributes() const;
bool isEditWidgetModified() const;
@@ -102,13 +109,15 @@ public:
bool isPasswordsHidden() const;
void setPasswordsHidden(bool hide);
void clearAllWidgets();
- bool currentEntryHasFocus();
bool currentEntryHasTitle();
bool currentEntryHasUsername();
bool currentEntryHasPassword();
bool currentEntryHasUrl();
bool currentEntryHasNotes();
bool currentEntryHasTotp();
+#ifdef WITH_XC_SSHAGENT
+ bool currentEntryHasSshKey();
+#endif
QByteArray entryViewState() const;
bool setEntryViewState(const QByteArray& state) const;
@@ -151,13 +160,17 @@ public slots:
bool lock();
bool save();
bool saveAs();
+ bool saveBackup();
void replaceDatabase(QSharedPointer<Database> db);
void createEntry();
void cloneEntry();
void deleteSelectedEntries();
void deleteEntries(QList<Entry*> entries);
- void setFocus();
+ void focusOnEntries();
+ void focusOnGroups();
+ void moveEntryUp();
+ void moveEntryDown();
void copyTitle();
void copyUsername();
void copyPassword();
@@ -168,6 +181,10 @@ public slots:
void showTotpKeyQrCode();
void copyTotp();
void setupTotp();
+#ifdef WITH_XC_SSHAGENT
+ void addToAgent();
+ void removeFromAgent();
+#endif
void performAutoType();
void openUrl();
void downloadSelectedFavicons();
@@ -180,7 +197,8 @@ public slots:
void switchToGroupEdit();
void sortGroupsAsc();
void sortGroupsDesc();
- void switchToMasterKeyChange();
+ void switchToDatabaseSecurity();
+ void switchToDatabaseReports();
void switchToDatabaseSettings();
void switchToOpenDatabase();
void switchToOpenDatabase(const QString& filePath);
@@ -208,6 +226,7 @@ public slots:
protected:
void closeEvent(QCloseEvent* event) override;
void showEvent(QShowEvent* event) override;
+ bool focusNextPrevChild(bool next) override;
private slots:
void entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column);
@@ -219,7 +238,7 @@ private slots:
void emitGroupContextMenuRequested(const QPoint& pos);
void emitEntryContextMenuRequested(const QPoint& pos);
void onEntryChanged(Entry* entry);
- void onGroupChanged(Group* group);
+ void onGroupChanged();
void onDatabaseModified();
void connectDatabaseSignals();
void loadDatabase(bool accepted);
@@ -234,6 +253,7 @@ private:
int addChildWidget(QWidget* w);
void setClipboardTextAndMinimize(const QString& text);
void processAutoOpen();
+ void openDatabaseFromEntry(const Entry* entry, bool inBackground = true);
bool confirmDeleteEntries(QList<Entry*> entries, bool permanent);
void performIconDownloads(const QList<Entry*>& entries, bool force = false);
Entry* currentSelectedEntry();
@@ -251,6 +271,7 @@ private:
QPointer<EditEntryWidget> m_editEntryWidget;
QPointer<EditGroupWidget> m_editGroupWidget;
QPointer<EditEntryWidget> m_historyEditEntryWidget;
+ QPointer<ReportsDialog> m_reportsDialog;
QPointer<DatabaseSettingsDialog> m_databaseSettingDialog;
QPointer<DatabaseOpenWidget> m_databaseOpenWidget;
QPointer<KeePass1OpenWidget> m_keepass1OpenWidget;
diff --git a/src/gui/DatabaseWidgetStateSync.cpp b/src/gui/DatabaseWidgetStateSync.cpp
index 5579b30cd..e984e3d5f 100644
--- a/src/gui/DatabaseWidgetStateSync.cpp
+++ b/src/gui/DatabaseWidgetStateSync.cpp
@@ -27,12 +27,12 @@ DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent)
, m_activeDbWidget(nullptr)
, m_blockUpdates(false)
{
- m_mainSplitterSizes = variantToIntList(config()->get("GUI/SplitterState"));
- m_previewSplitterSizes = variantToIntList(config()->get("GUI/PreviewSplitterState"));
- m_hideUsernames = config()->get("GUI/HideUsernames").toBool();
- m_hidePasswords = config()->get("GUI/HidePasswords").toBool();
- m_listViewState = config()->get("GUI/ListViewState").toByteArray();
- m_searchViewState = config()->get("GUI/SearchViewState").toByteArray();
+ m_mainSplitterSizes = variantToIntList(config()->get(Config::GUI_SplitterState));
+ m_previewSplitterSizes = variantToIntList(config()->get(Config::GUI_PreviewSplitterState));
+ m_hideUsernames = config()->get(Config::GUI_HideUsernames).toBool();
+ m_hidePasswords = true;
+ m_listViewState = config()->get(Config::GUI_ListViewState).toByteArray();
+ m_searchViewState = config()->get(Config::GUI_SearchViewState).toByteArray();
connect(qApp, &QCoreApplication::aboutToQuit, this, &DatabaseWidgetStateSync::sync);
}
@@ -46,12 +46,11 @@ DatabaseWidgetStateSync::~DatabaseWidgetStateSync()
*/
void DatabaseWidgetStateSync::sync()
{
- config()->set("GUI/SplitterState", intListToVariant(m_mainSplitterSizes));
- config()->set("GUI/PreviewSplitterState", intListToVariant(m_previewSplitterSizes));
- config()->set("GUI/HideUsernames", m_hideUsernames);
- config()->set("GUI/HidePasswords", m_hidePasswords);
- config()->set("GUI/ListViewState", m_listViewState);
- config()->set("GUI/SearchViewState", m_searchViewState);
+ config()->set(Config::GUI_SplitterState, intListToVariant(m_mainSplitterSizes));
+ config()->set(Config::GUI_PreviewSplitterState, intListToVariant(m_previewSplitterSizes));
+ config()->set(Config::GUI_HideUsernames, m_hideUsernames);
+ config()->set(Config::GUI_ListViewState, m_listViewState);
+ config()->set(Config::GUI_SearchViewState, m_searchViewState);
config()->sync();
}
@@ -101,9 +100,7 @@ void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget)
*
* NOTE:
* If m_listViewState is empty, the list view has been activated for the first
- * time after starting with a clean (or invalid) config. Thus, save the current
- * state. Without this, m_listViewState would remain empty until there is an
- * actual view state change (e.g. column is resized)
+ * time after starting with a clean (or invalid) config.
*/
void DatabaseWidgetStateSync::restoreListView()
{
@@ -112,8 +109,6 @@ void DatabaseWidgetStateSync::restoreListView()
if (!m_listViewState.isEmpty()) {
m_activeDbWidget->setEntryViewState(m_listViewState);
- } else {
- m_listViewState = m_activeDbWidget->entryViewState();
}
m_blockUpdates = false;
diff --git a/src/gui/DialogyWidget.cpp b/src/gui/DialogyWidget.cpp
index 597bcc59d..070393933 100644
--- a/src/gui/DialogyWidget.cpp
+++ b/src/gui/DialogyWidget.cpp
@@ -24,6 +24,7 @@
DialogyWidget::DialogyWidget(QWidget* parent)
: QWidget(parent)
{
+ setAutoFillBackground(true);
}
void DialogyWidget::keyPressEvent(QKeyEvent* e)
diff --git a/src/gui/EditWidget.cpp b/src/gui/EditWidget.cpp
index f7030c9d7..68a8d7d4a 100644
--- a/src/gui/EditWidget.cpp
+++ b/src/gui/EditWidget.cpp
@@ -22,7 +22,7 @@
#include <QPushButton>
#include <QScrollArea>
-#include "core/FilePath.h"
+#include "core/Resources.h"
EditWidget::EditWidget(QWidget* parent)
: DialogyWidget(parent)
@@ -70,7 +70,16 @@ void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* w
void EditWidget::setPageHidden(QWidget* widget, bool hidden)
{
- int index = m_ui->stackedWidget->indexOf(widget);
+ int index = -1;
+
+ for (int i = 0; i < m_ui->stackedWidget->count(); i++) {
+ auto* scrollArea = qobject_cast<QScrollArea*>(m_ui->stackedWidget->widget(i));
+ if (scrollArea && scrollArea->widget() == widget) {
+ index = i;
+ break;
+ }
+ }
+
if (index != -1) {
m_ui->categoryList->setCategoryHidden(index, hidden);
}
diff --git a/src/gui/EditWidget.ui b/src/gui/EditWidget.ui
index b8ac5f3eb..8bbec46bc 100644
--- a/src/gui/EditWidget.ui
+++ b/src/gui/EditWidget.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>612</width>
- <height>255</height>
+ <width>527</width>
+ <height>391</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -15,11 +15,27 @@
<widget class="MessageWidget" name="messageWidget" native="true"/>
</item>
<item>
- <widget class="QLabel" name="headerLabel">
- <property name="text">
- <string/>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <property name="leftMargin">
+ <number>2</number>
</property>
- </widget>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <property name="rightMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="headerLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
<item>
<spacer name="verticalSpacer">
@@ -39,6 +55,9 @@
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
+ <property name="spacing">
+ <number>18</number>
+ </property>
<item>
<widget class="CategoryListWidget" name="categoryList" native="true">
<property name="sizePolicy">
diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp
index 83bc0fc35..e348e8803 100644
--- a/src/gui/EditWidgetIcons.cpp
+++ b/src/gui/EditWidgetIcons.cpp
@@ -35,6 +35,7 @@
IconStruct::IconStruct()
: uuid(QUuid())
, number(0)
+ , applyTo(ApplyIconToOptions::THIS_ONLY)
{
}
@@ -131,7 +132,7 @@ void EditWidgetIcons::load(const QUuid& currentUuid,
m_currentUuid = currentUuid;
setUrl(url);
- m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps(),
+ m_customIconModel->setIcons(database->metadata()->customIconsPixmaps(IconSize::Default),
database->metadata()->customIconsOrder());
QUuid iconUuid = iconStruct.uuid;
@@ -162,7 +163,7 @@ void EditWidgetIcons::setShowApplyIconToButton(bool state)
QMenu* EditWidgetIcons::createApplyIconToMenu()
{
auto* applyIconToMenu = new QMenu(this);
- QAction* defaultAction = applyIconToMenu->addAction(tr("Apply to this only"));
+ QAction* defaultAction = applyIconToMenu->addAction(tr("Apply to this group only"));
defaultAction->setData(QVariant::fromValue(ApplyIconToOptions::THIS_ONLY));
applyIconToMenu->setDefaultAction(defaultAction);
applyIconToMenu->addSeparator();
@@ -202,7 +203,7 @@ void EditWidgetIcons::iconReceived(const QString& url, const QImage& icon)
Q_UNUSED(url);
if (icon.isNull()) {
QString message(tr("Unable to fetch favicon."));
- if (!config()->get("security/IconDownloadFallback", false).toBool()) {
+ if (!config()->get(Config::Security_IconDownloadFallback).toBool()) {
message.append("\n").append(
tr("You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security"));
}
@@ -293,7 +294,7 @@ bool EditWidgetIcons::addCustomIcon(const QImage& icon)
if (uuid.isNull()) {
uuid = QUuid::createUuid();
m_db->metadata()->addCustomIcon(uuid, scaledicon);
- m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps(),
+ m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default),
m_db->metadata()->customIconsOrder());
added = true;
}
@@ -377,7 +378,7 @@ void EditWidgetIcons::removeCustomIcon()
// Remove the icon from the database
m_db->metadata()->removeCustomIcon(iconUuid);
- m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps(),
+ m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default),
m_db->metadata()->customIconsOrder());
// Reset the current icon view
diff --git a/src/gui/EditWidgetIcons.ui b/src/gui/EditWidgetIcons.ui
index 9648cca08..b23f5fba3 100644
--- a/src/gui/EditWidgetIcons.ui
+++ b/src/gui/EditWidgetIcons.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>437</width>
- <height>300</height>
+ <height>316</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -26,7 +26,7 @@
<item>
<widget class="QRadioButton" name="defaultIconsRadio">
<property name="text">
- <string>&amp;Use default icon</string>
+ <string>Use default icon</string>
</property>
</widget>
</item>
@@ -48,17 +48,33 @@
<enum>QListView::Adjust</enum>
</property>
<property name="spacing">
- <number>8</number>
+ <number>4</number>
</property>
<property name="viewMode">
- <enum>QListView::IconMode</enum>
+ <enum>QListView::ListMode</enum>
</property>
</widget>
</item>
<item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="QRadioButton" name="customIconsRadio">
<property name="text">
- <string>Use custo&amp;m icon</string>
+ <string>Use custom icon</string>
</property>
</widget>
</item>
@@ -80,10 +96,10 @@
<enum>QListView::Adjust</enum>
</property>
<property name="spacing">
- <number>8</number>
+ <number>4</number>
</property>
<property name="viewMode">
- <enum>QListView::IconMode</enum>
+ <enum>QListView::ListMode</enum>
</property>
</widget>
</item>
@@ -151,7 +167,7 @@
<string notr="true">padding: 4px 10px</string>
</property>
<property name="text">
- <string>Apply icon &amp;to ...</string>
+ <string>Apply icon to...</string>
</property>
</widget>
</item>
@@ -166,6 +182,7 @@
<tabstop>customIconsView</tabstop>
<tabstop>addButton</tabstop>
<tabstop>deleteButton</tabstop>
+ <tabstop>faviconButton</tabstop>
<tabstop>applyIconToPushButton</tabstop>
</tabstops>
<resources/>
diff --git a/src/gui/EditWidgetProperties.ui b/src/gui/EditWidgetProperties.ui
index d80bf1584..0caa9ef27 100644
--- a/src/gui/EditWidgetProperties.ui
+++ b/src/gui/EditWidgetProperties.ui
@@ -6,11 +6,11 @@
<rect>
<x>0</x>
<y>0</y>
- <width>614</width>
- <height>328</height>
+ <width>364</width>
+ <height>408</height>
</rect>
</property>
- <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0">
<property name="spacing">
<number>5</number>
</property>
@@ -27,18 +27,21 @@
<number>0</number>
</property>
<item>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="verticalSpacing">
+ <number>8</number>
</property>
- <item row="1" column="0">
+ <item row="0" column="0">
<widget class="QLabel" name="labelCreated">
<property name="text">
<string>Created:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="0" column="1">
<widget class="QLineEdit" name="createdEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -54,14 +57,17 @@
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="1" column="0">
<widget class="QLabel" name="labelModfied">
<property name="text">
<string>Modified:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="1" column="1">
<widget class="QLineEdit" name="modifiedEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -77,14 +83,17 @@
</property>
</widget>
</item>
- <item row="3" column="0">
+ <item row="2" column="0">
<widget class="QLabel" name="labelAccessed">
<property name="text">
<string>Accessed:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="2" column="1">
<widget class="QLineEdit" name="accessedEdit">
<property name="accessibleName">
<string>Datetime accessed</string>
@@ -94,14 +103,17 @@
</property>
</widget>
</item>
- <item row="4" column="0">
+ <item row="3" column="0">
<widget class="QLabel" name="labelUuid">
<property name="text">
<string>Uuid:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
- <item row="4" column="1">
+ <item row="3" column="1">
<widget class="QLineEdit" name="uuidEdit">
<property name="accessibleName">
<string>Unique ID</string>
@@ -114,6 +126,22 @@
</layout>
</item>
<item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Plugin Data</string>
diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp
index 2e2e37dbc..b873800a8 100644
--- a/src/gui/EntryPreviewWidget.cpp
+++ b/src/gui/EntryPreviewWidget.cpp
@@ -24,7 +24,7 @@
#include <QDir>
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "entry/EntryAttachmentsModel.h"
#include "gui/Clipboard.h"
#if defined(WITH_XC_KEESHARE)
@@ -48,12 +48,12 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent)
m_ui->setupUi(this);
// Entry
- m_ui->entryTotpButton->setIcon(filePath()->icon("actions", "chronometer"));
- m_ui->entryCloseButton->setIcon(filePath()->icon("actions", "dialog-close"));
+ m_ui->entryTotpButton->setIcon(resources()->icon("chronometer"));
+ m_ui->entryCloseButton->setIcon(resources()->icon("dialog-close"));
m_ui->entryPasswordLabel->setFont(Font::fixedFont());
- m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
- m_ui->toggleEntryNotesButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
- m_ui->toggleGroupNotesButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
+ m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show"));
+ m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show"));
+ m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show"));
m_ui->entryAttachmentsWidget->setReadOnly(true);
m_ui->entryAttachmentsWidget->setButtonsVisible(false);
@@ -77,11 +77,19 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent)
connect(m_ui->entryTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection);
connect(&m_totpTimer, SIGNAL(timeout()), SLOT(updateTotpLabel()));
+ connect(config(), &Config::changed, this, [this](Config::ConfigKey key) {
+ if (key == Config::GUI_HidePreviewPanel) {
+ setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool());
+ }
+ });
+
// Group
- m_ui->groupCloseButton->setIcon(filePath()->icon("actions", "dialog-close"));
+ m_ui->groupCloseButton->setIcon(resources()->icon("dialog-close"));
connect(m_ui->groupCloseButton, SIGNAL(clicked()), SLOT(hide()));
connect(m_ui->groupTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection);
+ setFocusProxy(m_ui->entryTabWidget);
+
#if !defined(WITH_XC_KEESHARE)
removeTab(m_ui->groupTabWidget, m_ui->groupShareTab);
#endif
@@ -106,7 +114,7 @@ void EntryPreviewWidget::setEntry(Entry* selectedEntry)
updateEntryAdvancedTab();
updateEntryAutotypeTab();
- setVisible(!config()->get("GUI/HidePreviewPanel").toBool());
+ setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool());
m_ui->stackedWidget->setCurrentWidget(m_ui->pageEntry);
const int tabIndex = m_ui->entryTabWidget->isTabEnabled(m_selectedTabEntry) ? m_selectedTabEntry : GeneralTabIndex;
@@ -129,7 +137,7 @@ void EntryPreviewWidget::setGroup(Group* selectedGroup)
updateGroupSharingTab();
#endif
- setVisible(!config()->get("GUI/HidePreviewPanel").toBool());
+ setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool());
m_ui->stackedWidget->setCurrentWidget(m_ui->pageGroup);
const int tabIndex = m_ui->groupTabWidget->isTabEnabled(m_selectedTabGroup) ? m_selectedTabGroup : GeneralTabIndex;
@@ -160,7 +168,7 @@ void EntryPreviewWidget::updateEntryHeaderLine()
Q_ASSERT(m_currentEntry);
const QString title = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->title());
m_ui->entryTitleLabel->setRawText(hierarchy(m_currentEntry->group(), title));
- m_ui->entryIcon->setPixmap(preparePixmap(m_currentEntry->iconPixmap(), 16));
+ m_ui->entryIcon->setPixmap(m_currentEntry->iconPixmap(IconSize::Large));
}
void EntryPreviewWidget::updateEntryTotp()
@@ -186,7 +194,7 @@ void EntryPreviewWidget::setPasswordVisible(bool state)
if (state) {
m_ui->entryPasswordLabel->setText(password);
m_ui->entryPasswordLabel->setCursorPosition(0);
- } else if (password.isEmpty() && config()->get("security/passwordemptynodots").toBool()) {
+ } else if (password.isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) {
m_ui->entryPasswordLabel->setText("");
} else {
m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6));
@@ -222,7 +230,7 @@ void EntryPreviewWidget::updateEntryGeneralTab()
m_ui->entryUsernameLabel->setText(m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->username()));
m_ui->entryUsernameLabel->setCursorPosition(0);
- if (config()->get("security/HidePasswordPreviewPanel").toBool()) {
+ if (config()->get(Config::Security_HidePasswordPreviewPanel).toBool()) {
// Hide password
setPasswordVisible(false);
// Show the password toggle button if there are dots in the label
@@ -234,7 +242,7 @@ void EntryPreviewWidget::updateEntryGeneralTab()
m_ui->togglePasswordButton->setVisible(false);
}
- if (config()->get("security/hidenotes").toBool()) {
+ if (config()->get(Config::Security_HideNotes).toBool()) {
setEntryNotesVisible(false);
m_ui->toggleEntryNotesButton->setVisible(!m_ui->entryNotesTextEdit->toPlainText().isEmpty());
m_ui->toggleEntryNotesButton->setChecked(false);
@@ -243,7 +251,7 @@ void EntryPreviewWidget::updateEntryGeneralTab()
m_ui->toggleEntryNotesButton->setVisible(false);
}
- if (config()->get("GUI/MonospaceNotes", false).toBool()) {
+ if (config()->get(Config::GUI_MonospaceNotes).toBool()) {
m_ui->entryNotesTextEdit->setFont(Font::fixedFont());
} else {
m_ui->entryNotesTextEdit->setFont(Font::defaultFont());
@@ -313,7 +321,7 @@ void EntryPreviewWidget::updateGroupHeaderLine()
{
Q_ASSERT(m_currentGroup);
m_ui->groupTitleLabel->setRawText(hierarchy(m_currentGroup, {}));
- m_ui->groupIcon->setPixmap(preparePixmap(m_currentGroup->iconPixmap(), 32));
+ m_ui->groupIcon->setPixmap(m_currentGroup->iconPixmap(IconSize::Large));
}
void EntryPreviewWidget::updateGroupGeneralTab()
@@ -330,7 +338,7 @@ void EntryPreviewWidget::updateGroupGeneralTab()
groupTime.expires() ? groupTime.expiryTime().toString(Qt::DefaultLocaleShortDate) : tr("Never");
m_ui->groupExpirationLabel->setText(expiresText);
- if (config()->get("security/hidenotes").toBool()) {
+ if (config()->get(Config::Security_HideNotes).toBool()) {
setGroupNotesVisible(false);
m_ui->toggleGroupNotesButton->setVisible(!m_ui->groupNotesTextEdit->toPlainText().isEmpty());
m_ui->toggleGroupNotesButton->setChecked(false);
@@ -339,7 +347,7 @@ void EntryPreviewWidget::updateGroupGeneralTab()
m_ui->toggleGroupNotesButton->setVisible(false);
}
- if (config()->get("GUI/MonospaceNotes", false).toBool()) {
+ if (config()->get(Config::GUI_MonospaceNotes).toBool()) {
m_ui->groupNotesTextEdit->setFont(Font::fixedFont());
} else {
m_ui->groupNotesTextEdit->setFont(Font::defaultFont());
@@ -397,19 +405,8 @@ void EntryPreviewWidget::setTabEnabled(QTabWidget* tabWidget, QWidget* widget, b
tabWidget->setTabEnabled(tabIndex, enabled);
}
-QPixmap EntryPreviewWidget::preparePixmap(const QPixmap& pixmap, int size)
-{
- if (pixmap.width() > size || pixmap.height() > size) {
- return pixmap.scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
- }
- return pixmap;
-}
-
QString EntryPreviewWidget::hierarchy(const Group* group, const QString& title)
{
- const QString separator("] > [");
- QStringList hierarchy = group->hierarchy();
- QString groupList = QString("[%1]").arg(hierarchy.join(separator));
-
- return title.isEmpty() ? groupList : QString("%1 > %2").arg(groupList, title);
+ QString groupList = QString("%1").arg(group->hierarchy().join(" / "));
+ return title.isEmpty() ? groupList : QStringLiteral("%1 / %2").arg(groupList, title);
}
diff --git a/src/gui/EntryPreviewWidget.h b/src/gui/EntryPreviewWidget.h
index e1a7aff38..17bd62eb6 100644
--- a/src/gui/EntryPreviewWidget.h
+++ b/src/gui/EntryPreviewWidget.h
@@ -72,7 +72,6 @@ private:
void removeTab(QTabWidget* tabWidget, QWidget* widget);
void setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled);
- static QPixmap preparePixmap(const QPixmap& pixmap, int size);
static QString hierarchy(const Group* group, const QString& title);
const QScopedPointer<Ui::EntryPreviewWidget> m_ui;
diff --git a/src/gui/EntryPreviewWidget.ui b/src/gui/EntryPreviewWidget.ui
index 4ac3702d5..d78b04a43 100644
--- a/src/gui/EntryPreviewWidget.ui
+++ b/src/gui/EntryPreviewWidget.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>566</width>
- <height>169</height>
+ <height>247</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
@@ -46,49 +46,62 @@
<number>0</number>
</property>
<item>
- <layout class="QHBoxLayout" name="entryHorizontalLayout" stretch="0,1,0,0,0">
+ <layout class="QHBoxLayout" name="entryHorizontalLayout" stretch="0,0,0,0">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="leftMargin">
- <number>9</number>
+ <number>5</number>
+ </property>
+ <property name="topMargin">
+ <number>3</number>
+ </property>
+ <property name="bottomMargin">
+ <number>3</number>
</property>
<item>
- <widget class="QLabel" name="entryIcon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>16</width>
- <height>0</height>
- </size>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="ElidedLabel" name="entryTitleLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>12</number>
</property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- </font>
- </property>
- <property name="textFormat">
- <enum>Qt::AutoText</enum>
- </property>
- </widget>
+ <item>
+ <widget class="QLabel" name="entryIcon">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>16</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ElidedLabel" name="entryTitleLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>12</pointsize>
+ </font>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::AutoText</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
<item>
<widget class="QLabel" name="entryTotpLabel">
@@ -106,9 +119,6 @@
</item>
<item>
<widget class="QToolButton" name="entryTotpButton">
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
<property name="toolTip">
<string>Display current TOTP value</string>
</property>
@@ -122,9 +132,6 @@
</item>
<item>
<widget class="QToolButton" name="entryCloseButton">
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
<property name="toolTip">
<string>Close</string>
</property>
@@ -137,9 +144,6 @@
</item>
<item>
<widget class="QTabWidget" name="entryTabWidget">
- <property name="focusPolicy">
- <enum>Qt::ClickFocus</enum>
- </property>
<property name="currentIndex">
<number>0</number>
</property>
@@ -766,43 +770,56 @@
<number>0</number>
</property>
<item>
- <layout class="QHBoxLayout" name="groupHorizontalLayout" stretch="0,0,0">
+ <layout class="QHBoxLayout" name="groupHorizontalLayout" stretch="0,0">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="leftMargin">
- <number>9</number>
+ <number>5</number>
+ </property>
+ <property name="topMargin">
+ <number>3</number>
+ </property>
+ <property name="bottomMargin">
+ <number>3</number>
</property>
<item>
- <widget class="QLabel" name="groupIcon">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="ElidedLabel" name="groupTitleLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <property name="spacing">
+ <number>12</number>
</property>
- <property name="font">
- <font>
- <pointsize>12</pointsize>
- </font>
- </property>
- <property name="textFormat">
- <enum>Qt::AutoText</enum>
- </property>
- </widget>
+ <item>
+ <widget class="QLabel" name="groupIcon">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ElidedLabel" name="groupTitleLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>12</pointsize>
+ </font>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::AutoText</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
<item>
<widget class="QToolButton" name="groupCloseButton">
@@ -1146,13 +1163,14 @@
</customwidget>
</customwidgets>
<tabstops>
- <tabstop>entryCloseButton</tabstop>
<tabstop>entryTotpButton</tabstop>
+ <tabstop>entryCloseButton</tabstop>
+ <tabstop>entryTabWidget</tabstop>
<tabstop>togglePasswordButton</tabstop>
<tabstop>toggleEntryNotesButton</tabstop>
- <tabstop>entryAutotypeTree</tabstop>
- <tabstop>groupCloseButton</tabstop>
<tabstop>groupTabWidget</tabstop>
+ <tabstop>toggleGroupNotesButton</tabstop>
+ <tabstop>groupCloseButton</tabstop>
</tabstops>
<resources/>
<connections/>
diff --git a/src/gui/FileDialog.cpp b/src/gui/FileDialog.cpp
index 12f582775..df713c44b 100644
--- a/src/gui/FileDialog.cpp
+++ b/src/gui/FileDialog.cpp
@@ -21,6 +21,20 @@
#include <QDir>
+namespace
+{
+ QString modFilter(const QString& filter)
+ {
+#ifdef Q_OS_MACOS
+ // Fix macOS bug that causes the file dialog to freeze when a dot is included in the filters
+ // See https://github.com/keepassxreboot/keepassxc/issues/3895#issuecomment-586724167
+ auto mod = filter;
+ return mod.replace("*.", "*");
+#endif
+ return filter;
+ }
+} // namespace
+
FileDialog* FileDialog::m_instance(nullptr);
QString FileDialog::getOpenFileName(QWidget* parent,
@@ -35,9 +49,9 @@ QString FileDialog::getOpenFileName(QWidget* parent,
m_nextFileName.clear();
return result;
} else {
- const auto& workingDir = dir.isEmpty() ? config()->get("LastDir").toString() : dir;
+ const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
const auto result = QDir::toNativeSeparators(
- QFileDialog::getOpenFileName(parent, caption, workingDir, filter, selectedFilter, options));
+ QFileDialog::getOpenFileName(parent, caption, workingDir, modFilter(filter), selectedFilter, options));
#ifdef Q_OS_MACOS
// on Mac OS X the focus is lost after closing the native dialog
@@ -62,11 +76,13 @@ QStringList FileDialog::getOpenFileNames(QWidget* parent,
m_nextFileNames.clear();
return results;
} else {
- const auto& workingDir = dir.isEmpty() ? config()->get("LastDir").toString() : dir;
- auto results = QFileDialog::getOpenFileNames(parent, caption, workingDir, filter, selectedFilter, options);
+ const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
+ auto results =
+ QFileDialog::getOpenFileNames(parent, caption, workingDir, modFilter(filter), selectedFilter, options);
- for (auto& path : results)
+ for (auto& path : results) {
path = QDir::toNativeSeparators(path);
+ }
#ifdef Q_OS_MACOS
// on Mac OS X the focus is lost after closing the native dialog
@@ -81,33 +97,6 @@ QStringList FileDialog::getOpenFileNames(QWidget* parent,
}
}
-QString FileDialog::getFileName(QWidget* parent,
- const QString& caption,
- const QString& dir,
- const QString& filter,
- QString* selectedFilter,
- const QFileDialog::Options options)
-{
- if (!m_nextFileName.isEmpty()) {
- const QString result = m_nextFileName;
- m_nextFileName.clear();
- return result;
- } else {
- const auto& workingDir = dir.isEmpty() ? config()->get("LastDir").toString() : dir;
- const auto result = QDir::toNativeSeparators(
- QFileDialog::getSaveFileName(parent, caption, workingDir, filter, selectedFilter, options));
-
-#ifdef Q_OS_MACOS
- // on Mac OS X the focus is lost after closing the native dialog
- if (parent) {
- parent->activateWindow();
- }
-#endif
- saveLastDir(result);
- return result;
- }
-}
-
QString FileDialog::getSaveFileName(QWidget* parent,
const QString& caption,
const QString& dir,
@@ -120,9 +109,9 @@ QString FileDialog::getSaveFileName(QWidget* parent,
m_nextFileName.clear();
return result;
} else {
- const auto& workingDir = dir.isEmpty() ? config()->get("LastDir").toString() : dir;
+ const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
const auto result = QDir::toNativeSeparators(
- QFileDialog::getSaveFileName(parent, caption, workingDir, filter, selectedFilter, options));
+ QFileDialog::getSaveFileName(parent, caption, workingDir, modFilter(filter), selectedFilter, options));
#ifdef Q_OS_MACOS
// on Mac OS X the focus is lost after closing the native dialog
@@ -145,7 +134,7 @@ QString FileDialog::getExistingDirectory(QWidget* parent,
m_nextDirName.clear();
return result;
} else {
- const auto& workingDir = dir.isEmpty() ? config()->get("LastDir").toString() : dir;
+ const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
const auto result =
QDir::toNativeSeparators(QFileDialog::getExistingDirectory(parent, caption, workingDir, options));
@@ -187,7 +176,7 @@ FileDialog::FileDialog()
void FileDialog::saveLastDir(const QString& dir)
{
if (!dir.isEmpty() && !m_forgetLastDir) {
- config()->set("LastDir", QFileInfo(dir).absolutePath());
+ config()->set(Config::LastDir, QFileInfo(dir).absolutePath());
}
m_forgetLastDir = false;
diff --git a/src/gui/FileDialog.h b/src/gui/FileDialog.h
index 7d03d8046..4221a620a 100644
--- a/src/gui/FileDialog.h
+++ b/src/gui/FileDialog.h
@@ -37,13 +37,6 @@ public:
QString* selectedFilter = nullptr,
const QFileDialog::Options options = {});
- QString getFileName(QWidget* parent = nullptr,
- const QString& caption = QString(),
- const QString& dir = QString(),
- const QString& filter = QString(),
- QString* selectedFilter = nullptr,
- const QFileDialog::Options options = {});
-
QString getSaveFileName(QWidget* parent = nullptr,
const QString& caption = QString(),
const QString& dir = QString(),
diff --git a/src/gui/IconDownloaderDialog.cpp b/src/gui/IconDownloaderDialog.cpp
index ebe6980a2..1eb4b855c 100644
--- a/src/gui/IconDownloaderDialog.cpp
+++ b/src/gui/IconDownloaderDialog.cpp
@@ -28,7 +28,7 @@
#include "core/Tools.h"
#include "gui/IconModels.h"
#ifdef Q_OS_MACOS
-#include "gui/macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
#endif
#include <QMutexLocker>
@@ -159,7 +159,7 @@ void IconDownloaderDialog::downloadFinished(const QString& url, const QImage& ic
void IconDownloaderDialog::showFallbackMessage(bool state)
{
// Show fallback message if the option is not active
- bool show = state && !config()->get("security/IconDownloadFallback").toBool();
+ bool show = state && !config()->get(Config::Security_IconDownloadFallback).toBool();
m_ui->fallbackLabel->setVisible(show);
}
diff --git a/src/gui/IconDownloaderDialog.ui b/src/gui/IconDownloaderDialog.ui
index ed9fddd1e..fbcfb01f1 100644
--- a/src/gui/IconDownloaderDialog.ui
+++ b/src/gui/IconDownloaderDialog.ui
@@ -149,6 +149,11 @@ You can enable the DuckDuckGo website icon service in the security section of th
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
+ <tabstops>
+ <tabstop>cancelButton</tabstop>
+ <tabstop>tableView</tabstop>
+ <tabstop>closeButton</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/gui/IconModels.cpp b/src/gui/IconModels.cpp
index 39732c502..3bdd9a5e6 100644
--- a/src/gui/IconModels.cpp
+++ b/src/gui/IconModels.cpp
@@ -29,7 +29,7 @@ DefaultIconModel::DefaultIconModel(QObject* parent)
int DefaultIconModel::rowCount(const QModelIndex& parent) const
{
if (!parent.isValid()) {
- return DatabaseIcons::IconCount;
+ return databaseIcons()->count();
} else {
return 0;
}
@@ -41,10 +41,10 @@ QVariant DefaultIconModel::data(const QModelIndex& index, int role) const
return QVariant();
}
- Q_ASSERT(index.row() < DatabaseIcons::IconCount);
+ Q_ASSERT(index.row() < databaseIcons()->count());
if (role == Qt::DecorationRole) {
- return databaseIcons()->iconPixmap(index.row());
+ return databaseIcons()->icon(index.row(), IconSize::Medium);
}
return QVariant();
@@ -101,7 +101,6 @@ QModelIndex CustomIconModel::indexFromUuid(const QUuid& uuid) const
int idx = m_iconsOrder.indexOf(uuid);
if (idx > -1) {
return index(idx, 0);
- } else {
- return QModelIndex();
}
+ return {};
}
diff --git a/src/gui/KMessageWidget.cpp b/src/gui/KMessageWidget.cpp
index 80f302858..5e11b354c 100644
--- a/src/gui/KMessageWidget.cpp
+++ b/src/gui/KMessageWidget.cpp
@@ -20,7 +20,7 @@
*/
#include "KMessageWidget.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "core/Global.h"
#include <QAction>
@@ -94,7 +94,7 @@ void KMessageWidgetPrivate::init(KMessageWidget *q_ptr)
QAction *closeAction = new QAction(q);
closeAction->setText(KMessageWidget::tr("&Close"));
closeAction->setToolTip(KMessageWidget::tr("Close message"));
- closeAction->setIcon(FilePath::instance()->icon("actions", "message-close", false));
+ closeAction->setIcon(Resources::instance()->icon("message-close"));
QObject::connect(closeAction, SIGNAL(triggered(bool)), q, SLOT(animatedHide()));
@@ -102,12 +102,6 @@ void KMessageWidgetPrivate::init(KMessageWidget *q_ptr)
closeButton->setAutoRaise(true);
closeButton->setDefaultAction(closeAction);
closeButtonPixmap = QPixmap(closeButton->icon().pixmap(closeButton->icon().actualSize(QSize(16, 16))));
-#ifdef Q_OS_MACOS
- closeButton->setStyleSheet("QToolButton { background: transparent;"
- "border-radius: 2px; padding: 3px; }"
- "QToolButton::hover, QToolButton::focus {"
- "border: 1px solid rgb(90, 200, 250); }");
-#endif
q->setMessageType(KMessageWidget::Information);
}
@@ -263,7 +257,7 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type)
{
d->messageType = type;
QColor bg0, bg1, bg2, border;
- QColor fg = palette().light().color();
+ QColor fg = QColor(238, 238, 238);
switch (type) {
case Positive:
bg1.setRgb(37, 163, 83);
@@ -273,7 +267,7 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type)
break;
case Warning:
bg1.setRgb(252, 193, 57);
- fg = palette().windowText().color();
+ fg = QColor(48, 48, 48);
break;
case Error:
bg1.setRgb(198, 69, 21);
@@ -294,9 +288,15 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type)
painter.fillRect(QRect(0, 0, 16, 16), fg);
painter.end();
d->closeButton->setIcon(closeButtonPixmap);
+ d->closeButton->setStyleSheet(QStringLiteral("QToolButton {"
+ " background: transparent;"
+ " border-radius: 2px;"
+ " border: none; }"
+ "QToolButton:hover, QToolButton:focus {"
+ " border: 1px solid %1; }").arg(fg.name()));
d->content->setStyleSheet(
- QString(QLatin1String(".QFrame {"
+ QStringLiteral(".QFrame {"
"background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
" stop: 0 %1,"
" stop: 0.1 %2,"
@@ -307,7 +307,7 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type)
" padding: 5px;"
"}"
".QLabel { color: %6; }"
- ))
+ )
.arg(bg0.name(),
bg1.name(),
bg2.name(),
diff --git a/src/gui/KeePass1OpenWidget.cpp b/src/gui/KeePass1OpenWidget.cpp
index 6b369b9e5..d35edc2c6 100644
--- a/src/gui/KeePass1OpenWidget.cpp
+++ b/src/gui/KeePass1OpenWidget.cpp
@@ -37,16 +37,12 @@ void KeePass1OpenWidget::openDatabase()
KeePass1Reader reader;
QString password;
- QString keyFileName;
+ QString keyFileName = m_ui->keyFileLineEdit->text();
if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) {
password = m_ui->editPassword->text();
}
- if (!m_ui->comboKeyFile->currentText().isEmpty() && m_ui->comboKeyFile->currentData() != -1) {
- keyFileName = m_ui->comboKeyFile->currentText();
- }
-
QFile file(m_filename);
if (!file.open(QIODevice::ReadOnly)) {
m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(file.errorString()),
diff --git a/src/gui/LineEdit.cpp b/src/gui/LineEdit.cpp
index 4ad18fef5..ec5cb7f9c 100644
--- a/src/gui/LineEdit.cpp
+++ b/src/gui/LineEdit.cpp
@@ -22,7 +22,7 @@
#include <QStyle>
#include <QToolButton>
-#include "core/FilePath.h"
+#include "core/Resources.h"
LineEdit::LineEdit(QWidget* parent)
: QLineEdit(parent)
@@ -30,16 +30,10 @@ LineEdit::LineEdit(QWidget* parent)
{
m_clearButton->setObjectName("clearButton");
- QIcon icon;
QString iconNameDirected =
QString("edit-clear-locationbar-").append((layoutDirection() == Qt::LeftToRight) ? "rtl" : "ltr");
- icon = QIcon::fromTheme(iconNameDirected);
- if (icon.isNull()) {
- icon = QIcon::fromTheme("edit-clear");
- if (icon.isNull()) {
- icon = filePath()->icon("actions", iconNameDirected);
- }
- }
+
+ const auto icon = resources()->icon(iconNameDirected);
m_clearButton->setIcon(icon);
m_clearButton->setCursor(Qt::ArrowCursor);
diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp
index 6452c051b..9751a3e77 100644
--- a/src/gui/MainWindow.cpp
+++ b/src/gui/MainWindow.cpp
@@ -31,23 +31,26 @@
#include "autotype/AutoType.h"
#include "core/Config.h"
-#include "core/FilePath.h"
#include "core/InactivityTimer.h"
#include "core/Metadata.h"
+#include "core/Resources.h"
#include "core/Tools.h"
#include "gui/AboutDialog.h"
#include "gui/DatabaseWidget.h"
+#include "gui/MessageBox.h"
#include "gui/SearchWidget.h"
#include "keys/CompositeKey.h"
#include "keys/FileKey.h"
#include "keys/PasswordKey.h"
#ifdef Q_OS_MACOS
-#include "macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
+#ifdef WITH_XC_TOUCHID
+#include "touchid/TouchID.h"
+#endif
#endif
#ifdef WITH_XC_UPDATECHECK
-#include "gui/MessageBox.h"
#include "gui/UpdateCheckDialog.h"
#include "updatecheck/UpdateChecker.h"
#endif
@@ -56,7 +59,7 @@
#include "sshagent/AgentSettingsPage.h"
#include "sshagent/SSHAgent.h"
#endif
-#if defined(WITH_XC_KEESHARE)
+#ifdef WITH_XC_KEESHARE
#include "keeshare/KeeShare.h"
#include "keeshare/SettingsPageKeeShare.h"
#endif
@@ -65,10 +68,13 @@
#include "fdosecrets/FdoSecretsPlugin.h"
#endif
+#ifdef WITH_XC_YUBIKEY
+#include "keys/drivers/YubiKey.h"
+#endif
+
#ifdef WITH_XC_BROWSER
-#include "browser/BrowserOptionDialog.h"
-#include "browser/BrowserSettings.h"
-#include "browser/NativeMessagingHost.h"
+#include "browser/BrowserService.h"
+#include "browser/BrowserSettingsPage.h"
#endif
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS)
@@ -77,61 +83,6 @@
#include <QtDBus/QtDBus>
#endif
-#include "gui/ApplicationSettingsWidget.h"
-#include "gui/PasswordGeneratorWidget.h"
-
-#include "touchid/TouchID.h"
-
-#ifdef WITH_XC_BROWSER
-class BrowserPlugin : public ISettingsPage
-{
-public:
- explicit BrowserPlugin(DatabaseTabWidget* tabWidget)
- {
- m_nativeMessagingHost =
- QSharedPointer<NativeMessagingHost>(new NativeMessagingHost(tabWidget, browserSettings()->isEnabled()));
- }
-
- ~BrowserPlugin()
- {
- }
-
- QString name() override
- {
- return QObject::tr("Browser Integration");
- }
-
- QIcon icon() override
- {
- return FilePath::instance()->icon("apps", "internet-web-browser");
- }
-
- QWidget* createWidget() override
- {
- BrowserOptionDialog* dlg = new BrowserOptionDialog();
- return dlg;
- }
-
- void loadSettings(QWidget* widget) override
- {
- qobject_cast<BrowserOptionDialog*>(widget)->loadSettings();
- }
-
- void saveSettings(QWidget* widget) override
- {
- qobject_cast<BrowserOptionDialog*>(widget)->saveSettings();
- if (browserSettings()->isEnabled()) {
- m_nativeMessagingHost->run();
- } else {
- m_nativeMessagingHost->stop();
- }
- }
-
-private:
- QSharedPointer<NativeMessagingHost> m_nativeMessagingHost;
-};
-#endif
-
const QString MainWindow::BaseWindowTitle = "KeePassXC";
MainWindow* g_MainWindow = nullptr;
@@ -156,6 +107,10 @@ MainWindow::MainWindow()
setAcceptDrops(true);
+ if (config()->get(Config::GUI_CompactMode).toBool()) {
+ m_ui->toolBar->setIconSize({20, 20});
+ }
+
// Setup the search widget in the toolbar
m_searchWidget = new SearchWidget();
m_searchWidget->connectSignals(m_actionMultiplexer);
@@ -175,6 +130,10 @@ MainWindow::MainWindow()
m_entryContextMenu->addAction(m_ui->actionEntryEdit);
m_entryContextMenu->addAction(m_ui->actionEntryClone);
m_entryContextMenu->addAction(m_ui->actionEntryDelete);
+ m_entryContextMenu->addAction(m_ui->actionEntryNew);
+ m_entryContextMenu->addSeparator();
+ m_entryContextMenu->addAction(m_ui->actionEntryMoveUp);
+ m_entryContextMenu->addAction(m_ui->actionEntryMoveDown);
m_entryContextMenu->addSeparator();
m_entryContextMenu->addAction(m_ui->actionEntryOpenUrl);
m_entryContextMenu->addAction(m_ui->actionEntryDownloadIcon);
@@ -182,18 +141,38 @@ MainWindow::MainWindow()
m_entryNewContextMenu = new QMenu(this);
m_entryNewContextMenu->addAction(m_ui->actionEntryNew);
- restoreGeometry(config()->get("GUI/MainWindowGeometry").toByteArray());
- restoreState(config()->get("GUI/MainWindowState").toByteArray());
+ restoreGeometry(config()->get(Config::GUI_MainWindowGeometry).toByteArray());
+ restoreState(config()->get(Config::GUI_MainWindowState).toByteArray());
#ifdef WITH_XC_BROWSER
- m_ui->settingsWidget->addSettingsPage(new BrowserPlugin(m_ui->tabWidget));
+ m_ui->settingsWidget->addSettingsPage(new BrowserSettingsPage());
+ connect(m_ui->tabWidget, &DatabaseTabWidget::databaseLocked, browserService(), &BrowserService::databaseLocked);
+ connect(m_ui->tabWidget, &DatabaseTabWidget::databaseUnlocked, browserService(), &BrowserService::databaseUnlocked);
+ connect(m_ui->tabWidget,
+ &DatabaseTabWidget::activateDatabaseChanged,
+ browserService(),
+ &BrowserService::activeDatabaseChanged);
+ connect(
+ browserService(), &BrowserService::requestUnlock, m_ui->tabWidget, &DatabaseTabWidget::performBrowserUnlock);
#endif
#ifdef WITH_XC_SSHAGENT
- SSHAgent::init(this);
- connect(SSHAgent::instance(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString)));
- m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage(m_ui->tabWidget));
+ connect(sshAgent(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString)));
+ connect(sshAgent(), SIGNAL(enabledChanged(bool)), this, SLOT(agentEnabled(bool)));
+ m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage());
+
+ m_entryContextMenu->addSeparator();
+ m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent);
+ m_entryContextMenu->addAction(m_ui->actionEntryRemoveFromAgent);
+
+ m_ui->actionEntryAddToAgent->setIcon(resources()->icon("utilities-terminal"));
+ m_ui->actionEntryRemoveFromAgent->setIcon(resources()->icon("utilities-terminal"));
#endif
+ m_ui->actionEntryAddToAgent->setVisible(false);
+ m_ui->actionEntryRemoveFromAgent->setVisible(false);
+
+ initViewMenu();
+
#if defined(WITH_XC_KEESHARE)
KeeShare::init(this);
m_ui->settingsWidget->addSettingsPage(new SettingsPageKeeShare(m_ui->tabWidget));
@@ -211,13 +190,14 @@ MainWindow::MainWindow()
m_ui->settingsWidget->addSettingsPage(fdoSS);
#endif
- setWindowIcon(filePath()->applicationIcon());
- m_ui->globalMessageWidget->setHidden(true);
- // clang-format off
- connect(m_ui->globalMessageWidget, &MessageWidget::linkActivated, &MessageWidget::openHttpUrl);
- connect(m_ui->globalMessageWidget, SIGNAL(showAnimationStarted()), m_ui->globalMessageWidgetContainer, SLOT(show()));
- connect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), m_ui->globalMessageWidgetContainer, SLOT(hide()));
- // clang-format on
+#ifdef WITH_XC_YUBIKEY
+ connect(YubiKey::instance(), SIGNAL(userInteractionRequest()), SLOT(showYubiKeyPopup()), Qt::QueuedConnection);
+ connect(YubiKey::instance(), SIGNAL(challengeCompleted()), SLOT(hideYubiKeyPopup()), Qt::QueuedConnection);
+#endif
+
+ setWindowIcon(resources()->applicationIcon());
+ m_ui->globalMessageWidget->hideMessage();
+ connect(m_ui->globalMessageWidget, &MessageWidget::linkActivated, &MessageWidget::openHttpUrl);
m_clearHistoryAction = new QAction(tr("Clear history"), m_ui->menuFile);
m_lastDatabasesActions = new QActionGroup(m_ui->menuRecentDatabases);
@@ -230,13 +210,16 @@ MainWindow::MainWindow()
m_copyAdditionalAttributeActions, SIGNAL(triggered(QAction*)), SLOT(copyAttribute(QAction*)));
connect(m_ui->menuEntryCopyAttribute, SIGNAL(aboutToShow()), this, SLOT(updateCopyAttributesMenu()));
- Qt::Key globalAutoTypeKey = static_cast<Qt::Key>(config()->get("GlobalAutoTypeKey").toInt());
+ Qt::Key globalAutoTypeKey = static_cast<Qt::Key>(config()->get(Config::GlobalAutoTypeKey).toInt());
Qt::KeyboardModifiers globalAutoTypeModifiers =
- static_cast<Qt::KeyboardModifiers>(config()->get("GlobalAutoTypeModifiers").toInt());
+ static_cast<Qt::KeyboardModifiers>(config()->get(Config::GlobalAutoTypeModifiers).toInt());
if (globalAutoTypeKey > 0 && globalAutoTypeModifiers > 0) {
autoType()->registerGlobalShortcut(globalAutoTypeKey, globalAutoTypeModifiers);
}
+ m_ui->toolbarSeparator->setVisible(false);
+ m_showToolbarSeparator = config()->get(Config::GUI_ApplicationTheme).toString() != "classic";
+
m_ui->actionEntryAutoType->setVisible(autoType()->isAvailable());
m_inactivityTimer = new InactivityTimer(this);
@@ -262,11 +245,15 @@ MainWindow::MainWindow()
m_ui->actionEntryTotp->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_T);
m_ui->actionEntryDownloadIcon->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_D);
m_ui->actionEntryCopyTotp->setShortcut(Qt::CTRL + Qt::Key_T);
+ m_ui->actionEntryMoveUp->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Up);
+ m_ui->actionEntryMoveDown->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Down);
m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B);
m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C);
m_ui->actionEntryAutoType->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V);
m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U);
m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U);
+ m_ui->actionEntryAddToAgent->setShortcut(Qt::CTRL + Qt::Key_H);
+ m_ui->actionEntryRemoveFromAgent->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_H);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// Qt 5.10 introduced a new "feature" to hide shortcuts in context menus
@@ -278,11 +265,15 @@ MainWindow::MainWindow()
m_ui->actionEntryTotp->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryDownloadIcon->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryCopyTotp->setShortcutVisibleInContextMenu(true);
+ m_ui->actionEntryMoveUp->setShortcutVisibleInContextMenu(true);
+ m_ui->actionEntryMoveDown->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryCopyUsername->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryCopyPassword->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryAutoType->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryOpenUrl->setShortcutVisibleInContextMenu(true);
m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true);
+ m_ui->actionEntryAddToAgent->setShortcutVisibleInContextMenu(true);
+ m_ui->actionEntryRemoveFromAgent->setShortcutVisibleInContextMenu(true);
#endif
connect(m_ui->menuEntries, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock()));
@@ -295,48 +286,99 @@ MainWindow::MainWindow()
connect(m_ui->menuGroups, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock()));
// Control window state
- new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized()));
+ new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(minimizeOrHide()));
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow()));
// Control database tabs
new QShortcut(Qt::CTRL + Qt::Key_Tab, this, SLOT(selectNextDatabaseTab()));
new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(selectNextDatabaseTab()));
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab, this, SLOT(selectPreviousDatabaseTab()));
new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(selectPreviousDatabaseTab()));
+
+ // Tab selection by number, Windows uses Ctrl, macOS uses Command,
+ // and Linux uses Alt to emulate a browser-like experience
+ auto dbTabModifier = Qt::CTRL;
+#ifdef Q_OS_LINUX
+ dbTabModifier = Qt::ALT;
+#endif
+ auto shortcut = new QShortcut(dbTabModifier + Qt::Key_1, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(0); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_2, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(1); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_3, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(2); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_4, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(3); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_5, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(4); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_6, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(5); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_7, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(6); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_8, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(7); });
+ shortcut = new QShortcut(dbTabModifier + Qt::Key_9, this);
+ connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(m_ui->tabWidget->count() - 1); });
+
+ // Allow for direct focus of search, group view, and entry view
+ shortcut = new QShortcut(Qt::Key_F1, this);
+ connect(shortcut, SIGNAL(activated()), m_searchWidget, SLOT(searchFocus()));
+ shortcut = new QShortcut(Qt::Key_F2, this);
+ m_actionMultiplexer.connect(shortcut, SIGNAL(activated()), SLOT(focusOnGroups()));
+ shortcut = new QShortcut(Qt::Key_F3, this);
+ m_actionMultiplexer.connect(shortcut, SIGNAL(activated()), SLOT(focusOnEntries()));
+
// Toggle password and username visibility in entry view
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_C, this, SLOT(togglePasswordsHidden()));
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B, this, SLOT(toggleUsernamesHidden()));
- m_ui->actionDatabaseNew->setIcon(filePath()->icon("actions", "document-new"));
- m_ui->actionDatabaseOpen->setIcon(filePath()->icon("actions", "document-open"));
- m_ui->actionDatabaseSave->setIcon(filePath()->icon("actions", "document-save"));
- m_ui->actionDatabaseSaveAs->setIcon(filePath()->icon("actions", "document-save-as"));
- m_ui->actionDatabaseClose->setIcon(filePath()->icon("actions", "document-close"));
- m_ui->actionChangeDatabaseSettings->setIcon(filePath()->icon("actions", "document-edit"));
- m_ui->actionChangeMasterKey->setIcon(filePath()->icon("actions", "database-change-key"));
- m_ui->actionLockDatabases->setIcon(filePath()->icon("actions", "database-lock"));
- m_ui->actionQuit->setIcon(filePath()->icon("actions", "application-exit"));
-
- m_ui->actionEntryNew->setIcon(filePath()->icon("actions", "entry-new"));
- m_ui->actionEntryClone->setIcon(filePath()->icon("actions", "entry-clone"));
- m_ui->actionEntryEdit->setIcon(filePath()->icon("actions", "entry-edit"));
- m_ui->actionEntryDelete->setIcon(filePath()->icon("actions", "entry-delete"));
- m_ui->actionEntryAutoType->setIcon(filePath()->icon("actions", "auto-type"));
- m_ui->actionEntryCopyUsername->setIcon(filePath()->icon("actions", "username-copy"));
- m_ui->actionEntryCopyPassword->setIcon(filePath()->icon("actions", "password-copy"));
- m_ui->actionEntryCopyURL->setIcon(filePath()->icon("actions", "url-copy"));
- m_ui->actionEntryDownloadIcon->setIcon(filePath()->icon("actions", "favicon-download"));
-
- m_ui->actionGroupNew->setIcon(filePath()->icon("actions", "group-new"));
- m_ui->actionGroupEdit->setIcon(filePath()->icon("actions", "group-edit"));
- m_ui->actionGroupDelete->setIcon(filePath()->icon("actions", "group-delete"));
- m_ui->actionGroupEmptyRecycleBin->setIcon(filePath()->icon("actions", "group-empty-trash"));
- m_ui->actionGroupDownloadFavicons->setIcon(filePath()->icon("actions", "favicon-download"));
-
- m_ui->actionSettings->setIcon(filePath()->icon("actions", "configure"));
- m_ui->actionPasswordGenerator->setIcon(filePath()->icon("actions", "password-generator"));
-
- m_ui->actionAbout->setIcon(filePath()->icon("actions", "help-about"));
- m_ui->actionCheckForUpdates->setIcon(filePath()->icon("actions", "system-software-update"));
+ m_ui->actionDatabaseNew->setIcon(resources()->icon("document-new"));
+ m_ui->actionDatabaseOpen->setIcon(resources()->icon("document-open"));
+ m_ui->menuRecentDatabases->setIcon(resources()->icon("document-open-recent"));
+ m_ui->actionDatabaseSave->setIcon(resources()->icon("document-save"));
+ m_ui->actionDatabaseSaveAs->setIcon(resources()->icon("document-save-as"));
+ m_ui->actionDatabaseSaveBackup->setIcon(resources()->icon("document-save-copy"));
+ m_ui->actionDatabaseClose->setIcon(resources()->icon("document-close"));
+ m_ui->actionReports->setIcon(resources()->icon("reports"));
+ m_ui->actionDatabaseSettings->setIcon(resources()->icon("document-edit"));
+ m_ui->actionDatabaseSecurity->setIcon(resources()->icon("database-change-key"));
+ m_ui->actionLockDatabases->setIcon(resources()->icon("database-lock"));
+ m_ui->actionQuit->setIcon(resources()->icon("application-exit"));
+ m_ui->actionDatabaseMerge->setIcon(resources()->icon("database-merge"));
+ m_ui->menuImport->setIcon(resources()->icon("document-import"));
+ m_ui->menuExport->setIcon(resources()->icon("document-export"));
+
+ m_ui->actionEntryNew->setIcon(resources()->icon("entry-new"));
+ m_ui->actionEntryClone->setIcon(resources()->icon("entry-clone"));
+ m_ui->actionEntryEdit->setIcon(resources()->icon("entry-edit"));
+ m_ui->actionEntryDelete->setIcon(resources()->icon("entry-delete"));
+ m_ui->actionEntryAutoType->setIcon(resources()->icon("auto-type"));
+ m_ui->actionEntryMoveUp->setIcon(resources()->icon("move-up"));
+ m_ui->actionEntryMoveDown->setIcon(resources()->icon("move-down"));
+ m_ui->actionEntryCopyUsername->setIcon(resources()->icon("username-copy"));
+ m_ui->actionEntryCopyPassword->setIcon(resources()->icon("password-copy"));
+ m_ui->actionEntryCopyURL->setIcon(resources()->icon("url-copy"));
+ m_ui->actionEntryDownloadIcon->setIcon(resources()->icon("favicon-download"));
+ m_ui->actionGroupSortAsc->setIcon(resources()->icon("sort-alphabetical-ascending"));
+ m_ui->actionGroupSortDesc->setIcon(resources()->icon("sort-alphabetical-descending"));
+
+ m_ui->actionGroupNew->setIcon(resources()->icon("group-new"));
+ m_ui->actionGroupEdit->setIcon(resources()->icon("group-edit"));
+ m_ui->actionGroupDelete->setIcon(resources()->icon("group-delete"));
+ m_ui->actionGroupEmptyRecycleBin->setIcon(resources()->icon("group-empty-trash"));
+ m_ui->actionEntryOpenUrl->setIcon(resources()->icon("web"));
+ m_ui->actionGroupDownloadFavicons->setIcon(resources()->icon("favicon-download"));
+
+ m_ui->actionSettings->setIcon(resources()->icon("configure"));
+ m_ui->actionPasswordGenerator->setIcon(resources()->icon("password-generator"));
+
+ m_ui->actionAbout->setIcon(resources()->icon("help-about"));
+ m_ui->actionDonate->setIcon(resources()->icon("donate"));
+ m_ui->actionBugReport->setIcon(resources()->icon("bugreport"));
+ m_ui->actionGettingStarted->setIcon(resources()->icon("getting-started"));
+ m_ui->actionUserGuide->setIcon(resources()->icon("user-guide"));
+ m_ui->actionOnlineHelp->setIcon(resources()->icon("system-help"));
+ m_ui->actionKeyboardShortcuts->setIcon(resources()->icon("keyboard-shortcuts"));
+ m_ui->actionCheckForUpdates->setIcon(resources()->icon("system-software-update"));
m_actionMultiplexer.connect(
SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(setMenuActionState(DatabaseWidget::Mode)));
@@ -356,10 +398,13 @@ MainWindow::MainWindow()
connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle()));
connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int)));
connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState()));
+ connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateTrayIcon()));
connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*)));
connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*)));
+ connect(m_ui->tabWidget, SIGNAL(tabVisibilityChanged(bool)), SLOT(updateToolbarSeparatorVisibility()));
connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState()));
connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle()));
+ connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateToolbarSeparatorVisibility()));
connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges()));
connect(m_ui->settingsWidget, SIGNAL(settingsReset()), SLOT(applySettingsChanges()));
connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(switchToDatabases()));
@@ -369,10 +414,12 @@ MainWindow::MainWindow()
connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, SLOT(openDatabase()));
connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabase()));
connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseAs()));
+ connect(m_ui->actionDatabaseSaveBackup, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseBackup()));
connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, SLOT(closeCurrentDatabaseTab()));
connect(m_ui->actionDatabaseMerge, SIGNAL(triggered()), m_ui->tabWidget, SLOT(mergeDatabase()));
- connect(m_ui->actionChangeMasterKey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(changeMasterKey()));
- connect(m_ui->actionChangeDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(changeDatabaseSettings()));
+ connect(m_ui->actionDatabaseSecurity, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSecurity()));
+ connect(m_ui->actionReports, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseReports()));
+ connect(m_ui->actionDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSettings()));
connect(m_ui->actionImportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importCsv()));
connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importKeePass1Database()));
connect(m_ui->actionImportOpVault, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importOpVaultDatabase()));
@@ -392,6 +439,8 @@ MainWindow::MainWindow()
m_actionMultiplexer.connect(m_ui->actionEntryCopyTotp, SIGNAL(triggered()), SLOT(copyTotp()));
m_actionMultiplexer.connect(m_ui->actionEntryTotpQRCode, SIGNAL(triggered()), SLOT(showTotpKeyQrCode()));
m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), SLOT(copyTitle()));
+ m_actionMultiplexer.connect(m_ui->actionEntryMoveUp, SIGNAL(triggered()), SLOT(moveEntryUp()));
+ m_actionMultiplexer.connect(m_ui->actionEntryMoveDown, SIGNAL(triggered()), SLOT(moveEntryDown()));
m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), SLOT(copyUsername()));
m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), SLOT(copyPassword()));
m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), SLOT(copyURL()));
@@ -399,6 +448,10 @@ MainWindow::MainWindow()
m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), SLOT(performAutoType()));
m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), SLOT(openUrl()));
m_actionMultiplexer.connect(m_ui->actionEntryDownloadIcon, SIGNAL(triggered()), SLOT(downloadSelectedFavicons()));
+#ifdef WITH_XC_SSHAGENT
+ m_actionMultiplexer.connect(m_ui->actionEntryAddToAgent, SIGNAL(triggered()), SLOT(addToAgent()));
+ m_actionMultiplexer.connect(m_ui->actionEntryRemoveFromAgent, SIGNAL(triggered()), SLOT(removeFromAgent()));
+#endif
m_actionMultiplexer.connect(m_ui->actionGroupNew, SIGNAL(triggered()), SLOT(createGroup()));
m_actionMultiplexer.connect(m_ui->actionGroupEdit, SIGNAL(triggered()), SLOT(switchToGroupEdit()));
@@ -409,8 +462,11 @@ MainWindow::MainWindow()
m_actionMultiplexer.connect(m_ui->actionGroupDownloadFavicons, SIGNAL(triggered()), SLOT(downloadAllFavicons()));
connect(m_ui->actionSettings, SIGNAL(toggled(bool)), SLOT(switchToSettings(bool)));
- connect(m_ui->actionPasswordGenerator, SIGNAL(toggled(bool)), SLOT(switchToPasswordGen(bool)));
- connect(m_ui->passwordGeneratorWidget, SIGNAL(dialogTerminated()), SLOT(closePasswordGen()));
+ connect(m_ui->actionPasswordGenerator, SIGNAL(toggled(bool)), SLOT(togglePasswordGenerator(bool)));
+ connect(m_ui->passwordGeneratorWidget, &PasswordGeneratorWidget::closed, this, [this] {
+ togglePasswordGenerator(false);
+ });
+ m_ui->passwordGeneratorWidget->setStandaloneMode(true);
connect(m_ui->welcomeWidget, SIGNAL(newDatabase()), SLOT(switchToNewDatabase()));
connect(m_ui->welcomeWidget, SIGNAL(openDatabase()), SLOT(switchToOpenDatabase()));
@@ -439,7 +495,11 @@ MainWindow::MainWindow()
connect(UpdateChecker::instance(),
SIGNAL(updateCheckFinished(bool, QString, bool)),
SLOT(hasUpdateAvailable(bool, QString, bool)));
- QTimer::singleShot(500, this, SLOT(showUpdateCheckStartup()));
+ // Setup an update check every hour (checked only occur every 7 days)
+ connect(&m_updateCheckTimer, &QTimer::timeout, this, &MainWindow::performUpdateCheck);
+ m_updateCheckTimer.start(3.6e6);
+ // Perform the startup update check after 500 ms
+ QTimer::singleShot(500, this, SLOT(performUpdateCheck()));
#else
m_ui->actionCheckForUpdates->setVisible(false);
#endif
@@ -450,10 +510,8 @@ MainWindow::MainWindow()
#endif
// clang-format off
- connect(m_ui->tabWidget,
- SIGNAL(messageGlobal(QString,MessageWidget::MessageType)),
- this,
- SLOT(displayGlobalMessage(QString,MessageWidget::MessageType)));
+ connect(m_ui->tabWidget, SIGNAL(messageGlobal(QString,MessageWidget::MessageType)),
+ SLOT(displayGlobalMessage(QString,MessageWidget::MessageType)));
// clang-format on
connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(hideGlobalMessage()));
@@ -469,34 +527,50 @@ MainWindow::MainWindow()
m_trayIconTriggerTimer.setSingleShot(true);
connect(&m_trayIconTriggerTimer, SIGNAL(timeout()), SLOT(processTrayIconTrigger()));
- updateTrayIcon();
-
if (config()->hasAccessError()) {
m_ui->globalMessageWidget->showMessage(tr("Access error for config file %1").arg(config()->getFileName()),
MessageWidget::Error);
}
+#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) || defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE)
+ auto* hidePreRelWarn = new QAction(tr("Don't show again for this version"), m_ui->globalMessageWidget);
+ m_ui->globalMessageWidget->addAction(hidePreRelWarn);
+ auto hidePreRelWarnConn = QSharedPointer<QMetaObject::Connection>::create();
+ *hidePreRelWarnConn = connect(m_ui->globalMessageWidget, &KMessageWidget::hideAnimationFinished, [=] {
+ m_ui->globalMessageWidget->removeAction(hidePreRelWarn);
+ disconnect(*hidePreRelWarnConn);
+ hidePreRelWarn->deleteLater();
+ });
+ connect(hidePreRelWarn, &QAction::triggered, [=] {
+ m_ui->globalMessageWidget->animatedHide();
+ config()->set(Config::Messages_HidePreReleaseWarning, KEEPASSXC_VERSION);
+ });
+#endif
#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT)
- m_ui->globalMessageWidget->showMessage(
- tr("WARNING: You are using an unstable build of KeePassXC!\n"
- "There is a high risk of corruption, maintain a backup of your databases.\n"
- "This version is not meant for production use."),
- MessageWidget::Warning,
- -1);
+ if (config()->get(Config::Messages_HidePreReleaseWarning) != KEEPASSXC_VERSION) {
+ m_ui->globalMessageWidget->showMessage(
+ tr("WARNING: You are using an unstable build of KeePassXC!\n"
+ "There is a high risk of corruption, maintain a backup of your databases.\n"
+ "This version is not meant for production use."),
+ MessageWidget::Warning,
+ -1);
+ }
#elif defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE)
- m_ui->globalMessageWidget->showMessage(
- tr("NOTE: You are using a pre-release version of KeePassXC!\n"
- "Expect some bugs and minor issues, this version is not meant for production use."),
- MessageWidget::Information,
- 15000);
+ if (config()->get(Config::Messages_HidePreReleaseWarning) != KEEPASSXC_VERSION) {
+ m_ui->globalMessageWidget->showMessage(
+ tr("NOTE: You are using a pre-release version of KeePassXC!\n"
+ "Expect some bugs and minor issues, this version is not meant for production use."),
+ MessageWidget::Information,
+ -1);
+ }
#elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
- if (!config()->get("QtErrorMessageShown", false).toBool()) {
+ if (!config()->get(Config::Messages_Qt55CompatibilityWarning).toBool()) {
m_ui->globalMessageWidget->showMessage(
tr("WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!\n"
"We recommend you use the AppImage available on our downloads page."),
MessageWidget::Warning,
-1);
- config()->set("QtErrorMessageShown", true);
+ config()->set(Config::Messages_Qt55CompatibilityWarning, true);
}
#endif
}
@@ -505,6 +579,15 @@ MainWindow::~MainWindow()
{
}
+QList<DatabaseWidget*> MainWindow::getOpenDatabases()
+{
+ QList<DatabaseWidget*> dbWidgets;
+ for (int i = 0; i < m_ui->tabWidget->count(); ++i) {
+ dbWidgets << m_ui->tabWidget->databaseWidgetFromIndex(i);
+ }
+ return dbWidgets;
+}
+
void MainWindow::showErrorMessage(const QString& message)
{
m_ui->globalMessageWidget->showMessage(message, MessageWidget::Error);
@@ -520,7 +603,7 @@ void MainWindow::updateLastDatabasesMenu()
{
m_ui->menuRecentDatabases->clear();
- const QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList();
+ const QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList();
for (const QString& database : lastDatabases) {
QAction* action = m_ui->menuRecentDatabases->addAction(database);
action->setData(database);
@@ -561,7 +644,7 @@ void MainWindow::openRecentDatabase(QAction* action)
void MainWindow::clearLastDatabases()
{
- config()->set("LastDatabases", QVariant());
+ config()->remove(Config::LastDatabases);
bool inWelcomeWidget = (m_ui->stackedWidget->currentIndex() == 2);
if (inWelcomeWidget) {
@@ -583,12 +666,10 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget;
m_ui->actionDatabaseMerge->setEnabled(inDatabaseTabWidget);
-
m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->menuImport->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
-
m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases());
if (inDatabaseTabWidget && m_ui->tabWidget->currentIndex() != -1) {
@@ -601,19 +682,25 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
switch (mode) {
case DatabaseWidget::Mode::ViewMode: {
- bool hasFocus = m_contextMenuFocusLock || menuBar()->hasFocus() || m_searchWidget->hasFocus()
- || dbWidget->currentEntryHasFocus();
- bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1 && hasFocus;
- bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0 && hasFocus;
+ bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1;
+ bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0;
bool groupSelected = dbWidget->isGroupSelected();
bool currentGroupHasChildren = dbWidget->currentGroup()->hasChildren();
bool currentGroupHasEntries = !dbWidget->currentGroup()->entries().isEmpty();
bool recycleBinSelected = dbWidget->isRecycleBinSelected();
+ bool sorted = dbWidget->isSorted();
+ int entryIndex = dbWidget->currentEntryIndex();
+ int numEntries = dbWidget->currentGroup()->entries().size();
m_ui->actionEntryNew->setEnabled(true);
m_ui->actionEntryClone->setEnabled(singleEntrySelected);
m_ui->actionEntryEdit->setEnabled(singleEntrySelected);
m_ui->actionEntryDelete->setEnabled(entriesSelected);
+ m_ui->actionEntryMoveUp->setVisible(!sorted);
+ m_ui->actionEntryMoveDown->setVisible(!sorted);
+ m_ui->actionEntryMoveUp->setEnabled(singleEntrySelected && !sorted && entryIndex > 0);
+ m_ui->actionEntryMoveDown->setEnabled(singleEntrySelected && !sorted && entryIndex >= 0
+ && entryIndex < numEntries - 1);
m_ui->actionEntryCopyTitle->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTitle());
m_ui->actionEntryCopyUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername());
// NOTE: Copy password is enabled even if the selected entry's password is blank to prevent Ctrl+C
@@ -641,14 +728,24 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
m_ui->actionGroupDownloadFavicons->setVisible(!recycleBinSelected);
m_ui->actionGroupDownloadFavicons->setEnabled(groupSelected && currentGroupHasEntries
&& !recycleBinSelected);
- m_ui->actionChangeMasterKey->setEnabled(true);
- m_ui->actionChangeDatabaseSettings->setEnabled(true);
+ m_ui->actionDatabaseSecurity->setEnabled(true);
+ m_ui->actionReports->setEnabled(true);
+ m_ui->actionDatabaseSettings->setEnabled(true);
m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave());
m_ui->actionDatabaseSaveAs->setEnabled(true);
+ m_ui->actionDatabaseSaveBackup->setEnabled(true);
m_ui->menuExport->setEnabled(true);
m_ui->actionExportCsv->setEnabled(true);
m_ui->actionExportHtml->setEnabled(true);
m_ui->actionDatabaseMerge->setEnabled(m_ui->tabWidget->currentIndex() != -1);
+#ifdef WITH_XC_SSHAGENT
+ bool singleEntryHasSshKey =
+ singleEntrySelected && sshAgent()->isEnabled() && dbWidget->currentEntryHasSshKey();
+ m_ui->actionEntryAddToAgent->setVisible(singleEntryHasSshKey);
+ m_ui->actionEntryAddToAgent->setEnabled(singleEntryHasSshKey);
+ m_ui->actionEntryRemoveFromAgent->setVisible(singleEntryHasSshKey);
+ m_ui->actionEntryRemoveFromAgent->setEnabled(singleEntryHasSshKey);
+#endif
m_searchWidgetAction->setEnabled(true);
@@ -687,10 +784,12 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
action->setEnabled(false);
}
- m_ui->actionChangeMasterKey->setEnabled(false);
- m_ui->actionChangeDatabaseSettings->setEnabled(false);
+ m_ui->actionDatabaseSecurity->setEnabled(false);
+ m_ui->actionReports->setEnabled(false);
+ m_ui->actionDatabaseSettings->setEnabled(false);
m_ui->actionDatabaseSave->setEnabled(false);
m_ui->actionDatabaseSaveAs->setEnabled(false);
+ m_ui->actionDatabaseSaveBackup->setEnabled(false);
m_ui->menuExport->setEnabled(false);
m_ui->actionExportCsv->setEnabled(false);
m_ui->actionExportHtml->setEnabled(false);
@@ -714,10 +813,12 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
action->setEnabled(false);
}
- m_ui->actionChangeMasterKey->setEnabled(false);
- m_ui->actionChangeDatabaseSettings->setEnabled(false);
+ m_ui->actionDatabaseSecurity->setEnabled(false);
+ m_ui->actionReports->setEnabled(false);
+ m_ui->actionDatabaseSettings->setEnabled(false);
m_ui->actionDatabaseSave->setEnabled(false);
m_ui->actionDatabaseSaveAs->setEnabled(false);
+ m_ui->actionDatabaseSaveBackup->setEnabled(false);
m_ui->actionDatabaseClose->setEnabled(false);
m_ui->menuExport->setEnabled(false);
m_ui->actionExportCsv->setEnabled(false);
@@ -738,6 +839,26 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
}
}
+void MainWindow::updateToolbarSeparatorVisibility()
+{
+ if (!m_showToolbarSeparator) {
+ m_ui->toolbarSeparator->setVisible(false);
+ return;
+ }
+
+ switch (m_ui->stackedWidget->currentIndex()) {
+ case DatabaseTabScreen:
+ m_ui->toolbarSeparator->setVisible(!m_ui->tabWidget->tabBar()->isVisible()
+ && m_ui->tabWidget->tabBar()->count() == 1);
+ break;
+ case SettingsScreen:
+ m_ui->toolbarSeparator->setVisible(true);
+ break;
+ default:
+ m_ui->toolbarSeparator->setVisible(false);
+ }
+}
+
void MainWindow::updateWindowTitle()
{
QString customWindowTitlePart;
@@ -779,10 +900,10 @@ void MainWindow::showAboutDialog()
aboutDialog->open();
}
-void MainWindow::showUpdateCheckStartup()
+void MainWindow::performUpdateCheck()
{
#ifdef WITH_XC_UPDATECHECK
- if (!config()->get("UpdateCheckMessageShown", false).toBool()) {
+ if (!config()->get(Config::UpdateCheckMessageShown).toBool()) {
auto result =
MessageBox::question(this,
tr("Check for updates on startup?"),
@@ -791,11 +912,11 @@ void MainWindow::showUpdateCheckStartup()
MessageBox::Yes | MessageBox::No,
MessageBox::Yes);
- config()->set("GUI/CheckForUpdates", (result == MessageBox::Yes));
- config()->set("UpdateCheckMessageShown", true);
+ config()->set(Config::GUI_CheckForUpdates, (result == MessageBox::Yes));
+ config()->set(Config::UpdateCheckMessageShown, true);
}
- if (config()->get("GUI/CheckForUpdates", false).toBool()) {
+ if (config()->get(Config::GUI_CheckForUpdates).toBool()) {
updateCheck()->checkForUpdates(false);
}
@@ -843,12 +964,12 @@ void MainWindow::openBugReportUrl()
void MainWindow::openGettingStartedGuide()
{
- customOpenUrl(QString("file:///%1").arg(filePath()->dataPath("docs/KeePassXC_GettingStarted.pdf")));
+ customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_GettingStarted.html")));
}
void MainWindow::openUserGuide()
{
- customOpenUrl(QString("file:///%1").arg(filePath()->dataPath("docs/KeePassXC_UserGuide.pdf")));
+ customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_UserGuide.html")));
}
void MainWindow::openOnlineHelp()
@@ -858,7 +979,7 @@ void MainWindow::openOnlineHelp()
void MainWindow::openKeyboardShortcuts()
{
- customOpenUrl("https://github.com/keepassxreboot/keepassxc/blob/develop/docs/KEYBINDS.md");
+ customOpenUrl(QString("file:///%1").arg(resources()->dataPath("docs/KeePassXC_KeyboardShortcuts.html")));
}
void MainWindow::switchToDatabases()
@@ -880,24 +1001,18 @@ void MainWindow::switchToSettings(bool enabled)
}
}
-void MainWindow::switchToPasswordGen(bool enabled)
+void MainWindow::togglePasswordGenerator(bool enabled)
{
if (enabled) {
m_ui->passwordGeneratorWidget->loadSettings();
m_ui->passwordGeneratorWidget->regeneratePassword();
m_ui->stackedWidget->setCurrentIndex(PasswordGeneratorScreen);
- m_ui->passwordGeneratorWidget->setStandaloneMode(true);
} else {
m_ui->passwordGeneratorWidget->saveSettings();
switchToDatabases();
}
}
-void MainWindow::closePasswordGen()
-{
- switchToPasswordGen(false);
-}
-
void MainWindow::switchToNewDatabase()
{
m_ui->tabWidget->newDatabase();
@@ -940,28 +1055,38 @@ void MainWindow::databaseStatusChanged(DatabaseWidget* dbWidget)
updateTrayIcon();
}
-void MainWindow::selectNextDatabaseTab()
+/**
+ * Select a database tab by its index. Stays bounded to first/last tab
+ * on overflow unless wrap is true.
+ *
+ * @param tabIndex 0-based tab index selector
+ * @param wrap if true wrap around to first/last tab
+ */
+void MainWindow::selectDatabaseTab(int tabIndex, bool wrap)
{
if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) {
- int index = m_ui->tabWidget->currentIndex() + 1;
- if (index >= m_ui->tabWidget->count()) {
- m_ui->tabWidget->setCurrentIndex(0);
+ if (wrap) {
+ if (tabIndex < 0) {
+ tabIndex = m_ui->tabWidget->count() - 1;
+ } else if (tabIndex >= m_ui->tabWidget->count()) {
+ tabIndex = 0;
+ }
} else {
- m_ui->tabWidget->setCurrentIndex(index);
+ tabIndex = qBound(0, tabIndex, m_ui->tabWidget->count() - 1);
}
+
+ m_ui->tabWidget->setCurrentIndex(tabIndex);
}
}
+void MainWindow::selectNextDatabaseTab()
+{
+ selectDatabaseTab(m_ui->tabWidget->currentIndex() + 1, true);
+}
+
void MainWindow::selectPreviousDatabaseTab()
{
- if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) {
- int index = m_ui->tabWidget->currentIndex() - 1;
- if (index < 0) {
- m_ui->tabWidget->setCurrentIndex(m_ui->tabWidget->count() - 1);
- } else {
- m_ui->tabWidget->setCurrentIndex(index);
- }
- }
+ selectDatabaseTab(m_ui->tabWidget->currentIndex() - 1, true);
}
void MainWindow::databaseTabChanged(int tabIndex)
@@ -1000,7 +1125,8 @@ void MainWindow::closeEvent(QCloseEvent* event)
// Ignore event and hide to tray if this is not an actual close
// request by the system's session manager.
- if (config()->get("GUI/MinimizeOnClose").toBool() && !m_appExitCalled && !isHidden() && !qApp->isSavingSession()) {
+ if (config()->get(Config::GUI_MinimizeOnClose).toBool() && !m_appExitCalled && !isHidden()
+ && !qApp->isSavingSession()) {
event->ignore();
hideWindow();
return;
@@ -1010,11 +1136,12 @@ void MainWindow::closeEvent(QCloseEvent* event)
if (m_appExiting) {
saveWindowInformation();
event->accept();
- QApplication::quit();
+ m_restartRequested ? kpxcApp->restart() : QApplication::quit();
return;
}
m_appExitCalled = false;
+ m_restartRequested = false;
event->ignore();
}
@@ -1022,12 +1149,12 @@ void MainWindow::changeEvent(QEvent* event)
{
if ((event->type() == QEvent::WindowStateChange) && isMinimized()) {
if (isTrayIconEnabled() && m_trayIcon && m_trayIcon->isVisible()
- && config()->get("GUI/MinimizeToTray").toBool()) {
+ && config()->get(Config::GUI_MinimizeToTray).toBool()) {
event->ignore();
- QTimer::singleShot(0, this, SLOT(hide()));
+ hide();
}
- if (config()->get("security/lockdatabaseminimize").toBool()) {
+ if (config()->get(Config::Security_LockDatabaseMinimize).toBool()) {
m_ui->tabWidget->lockDatabases();
}
} else {
@@ -1035,22 +1162,52 @@ void MainWindow::changeEvent(QEvent* event)
}
}
+bool MainWindow::focusNextPrevChild(bool next)
+{
+ // Only navigate around the main window if the database widget is showing the entry view
+ auto dbWidget = m_ui->tabWidget->currentDatabaseWidget();
+ if (dbWidget && dbWidget->isVisible() && dbWidget->isEntryViewActive()) {
+ // Search Widget <-> Tab Widget <-> DbWidget
+ if (next) {
+ if (m_searchWidget->hasFocus()) {
+ m_ui->tabWidget->setFocus(Qt::TabFocusReason);
+ } else if (m_ui->tabWidget->hasFocus()) {
+ dbWidget->setFocus(Qt::TabFocusReason);
+ } else {
+ m_searchWidget->setFocus(Qt::TabFocusReason);
+ }
+ } else {
+ if (m_searchWidget->hasFocus()) {
+ dbWidget->setFocus(Qt::BacktabFocusReason);
+ } else if (m_ui->tabWidget->hasFocus()) {
+ m_searchWidget->setFocus(Qt::BacktabFocusReason);
+ } else {
+ m_ui->tabWidget->setFocus(Qt::BacktabFocusReason);
+ }
+ }
+ return true;
+ }
+
+ // Defer to Qt to make a decision, this maintains normal behavior
+ return QMainWindow::focusNextPrevChild(next);
+}
+
void MainWindow::saveWindowInformation()
{
if (isVisible()) {
- config()->set("GUI/MainWindowGeometry", saveGeometry());
- config()->set("GUI/MainWindowState", saveState());
+ config()->set(Config::GUI_MainWindowGeometry, saveGeometry());
+ config()->set(Config::GUI_MainWindowState, saveState());
}
}
bool MainWindow::saveLastDatabases()
{
- if (config()->get("OpenPreviousDatabasesOnStartup").toBool()) {
+ if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) {
auto currentDbWidget = m_ui->tabWidget->currentDatabaseWidget();
if (currentDbWidget) {
- config()->set("LastActiveDatabase", currentDbWidget->database()->filePath());
+ config()->set(Config::LastActiveDatabase, currentDbWidget->database()->filePath());
} else {
- config()->set("LastActiveDatabase", {});
+ config()->remove(Config::LastActiveDatabase);
}
QStringList openDatabases;
@@ -1059,10 +1216,10 @@ bool MainWindow::saveLastDatabases()
openDatabases.append(dbWidget->database()->filePath());
}
- config()->set("LastOpenedDatabases", openDatabases);
+ config()->set(Config::LastOpenedDatabases, openDatabases);
} else {
- config()->set("LastActiveDatabase", {});
- config()->set("LastOpenedDatabases", {});
+ config()->remove(Config::LastActiveDatabase);
+ config()->remove(Config::LastOpenedDatabases);
}
return m_ui->tabWidget->closeAllDatabaseTabs();
@@ -1073,11 +1230,11 @@ void MainWindow::updateTrayIcon()
if (isTrayIconEnabled()) {
if (!m_trayIcon) {
m_trayIcon = new QSystemTrayIcon(this);
- QMenu* menu = new QMenu(this);
+ auto* menu = new QMenu(this);
- QAction* actionToggle = new QAction(tr("Toggle window"), menu);
+ auto* actionToggle = new QAction(tr("Toggle window"), menu);
menu->addAction(actionToggle);
- actionToggle->setIcon(filePath()->icon("apps", "keepassxc"));
+ actionToggle->setIcon(resources()->icon("keepassxc-monochrome-dark"));
menu->addAction(m_ui->actionLockDatabases);
@@ -1097,19 +1254,21 @@ void MainWindow::updateTrayIcon()
m_trayIcon->setContextMenu(menu);
- m_trayIcon->setIcon(filePath()->trayIcon());
+ m_trayIcon->setIcon(resources()->trayIcon());
m_trayIcon->show();
}
- if (m_ui->tabWidget->hasLockableDatabases()) {
- m_trayIcon->setIcon(filePath()->trayIconUnlocked());
+
+ if (m_ui->tabWidget->count() == 0) {
+ m_trayIcon->setIcon(resources()->trayIcon());
+ } else if (m_ui->tabWidget->hasLockableDatabases()) {
+ m_trayIcon->setIcon(resources()->trayIconUnlocked());
} else {
- m_trayIcon->setIcon(filePath()->trayIconLocked());
+ m_trayIcon->setIcon(resources()->trayIconLocked());
}
} else {
if (m_trayIcon) {
m_trayIcon->hide();
delete m_trayIcon;
- m_trayIcon = nullptr;
}
}
}
@@ -1124,12 +1283,18 @@ void MainWindow::releaseContextFocusLock()
m_contextMenuFocusLock = false;
}
+void MainWindow::agentEnabled(bool enabled)
+{
+ m_ui->actionEntryAddToAgent->setVisible(enabled);
+ m_ui->actionEntryRemoveFromAgent->setVisible(enabled);
+}
+
void MainWindow::showEntryContextMenu(const QPoint& globalPos)
{
bool entrySelected = false;
auto dbWidget = m_ui->tabWidget->currentDatabaseWidget();
if (dbWidget) {
- entrySelected = dbWidget->currentEntryHasFocus();
+ entrySelected = dbWidget->numberOfSelectedEntries() > 0;
}
if (entrySelected) {
@@ -1155,38 +1320,39 @@ void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard
void MainWindow::applySettingsChanges()
{
- int timeout = config()->get("security/lockdatabaseidlesec").toInt() * 1000;
+ int timeout = config()->get(Config::Security_LockDatabaseIdleSeconds).toInt() * 1000;
if (timeout <= 0) {
timeout = 60;
}
m_inactivityTimer->setInactivityTimeout(timeout);
- if (config()->get("security/lockdatabaseidle").toBool()) {
+ if (config()->get(Config::Security_LockDatabaseIdle).toBool()) {
m_inactivityTimer->activate();
} else {
m_inactivityTimer->deactivate();
}
#ifdef WITH_XC_TOUCHID
- // forget TouchID (in minutes)
- timeout = config()->get("security/resettouchidtimeout").toInt() * 60 * 1000;
- if (timeout <= 0) {
- timeout = 30 * 60 * 1000;
- }
+ if (config()->get(Config::Security_ResetTouchId).toBool()) {
+ // Calculate TouchID timeout in milliseconds
+ timeout = config()->get(Config::Security_ResetTouchIdTimeout).toInt() * 60 * 1000;
+ if (timeout <= 0) {
+ timeout = 30 * 60 * 1000;
+ }
- m_touchIDinactivityTimer->setInactivityTimeout(timeout);
- if (config()->get("security/resettouchid").toBool()) {
+ m_touchIDinactivityTimer->setInactivityTimeout(timeout);
m_touchIDinactivityTimer->activate();
} else {
m_touchIDinactivityTimer->deactivate();
}
#endif
- m_ui->toolBar->setHidden(config()->get("GUI/HideToolbar").toBool());
- m_ui->toolBar->setMovable(config()->get("GUI/MovableToolbar").toBool());
+ m_ui->toolBar->setHidden(config()->get(Config::GUI_HideToolbar).toBool());
+ m_ui->toolBar->setMovable(config()->get(Config::GUI_MovableToolbar).toBool());
bool isOk = false;
- const auto toolButtonStyle = static_cast<Qt::ToolButtonStyle>(config()->get("GUI/ToolButtonStyle").toInt(&isOk));
+ const auto toolButtonStyle =
+ static_cast<Qt::ToolButtonStyle>(config()->get(Config::GUI_ToolButtonStyle).toInt(&isOk));
if (isOk) {
m_ui->toolBar->setToolButtonStyle(toolButtonStyle);
}
@@ -1197,7 +1363,7 @@ void MainWindow::applySettingsChanges()
void MainWindow::focusWindowChanged(QWindow* focusWindow)
{
if (focusWindow != windowHandle()) {
- m_lastFocusOutTime = Clock::currentSecondsSinceEpoch();
+ m_lastFocusOutTime = Clock::currentMilliSecondsSinceEpoch();
}
}
@@ -1214,6 +1380,16 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason)
void MainWindow::processTrayIconTrigger()
{
+#ifdef Q_OS_MACOS
+ // Do not toggle the window on macOS and just show the context menu instead.
+ // Right click detection doesn't seem to be working anyway
+ // and anything else will only trigger the context menu AND
+ // toggle the window at the same time, which is confusing at best.
+ // Showing only a context menu for tray icons seems to be best
+ // practice on macOS anyway, so this is probably fine.
+ return;
+#endif
+
if (m_trayIconTriggerReason == QSystemTrayIcon::DoubleClick) {
// Always toggle window on double click
toggleWindow();
@@ -1221,11 +1397,11 @@ void MainWindow::processTrayIconTrigger()
|| m_trayIconTriggerReason == QSystemTrayIcon::MiddleClick) {
// Toggle window if is not in front.
#ifdef Q_OS_WIN
- // If on Windows, check if focus switched within the last second because
+ // If on Windows, check if focus switched within the 500 milliseconds since
// clicking the tray icon removes focus from main window.
- if (isHidden() || (Clock::currentSecondsSinceEpoch() - m_lastFocusOutTime) <= 1) {
+ if (isHidden() || (Clock::currentMilliSecondsSinceEpoch() - m_lastFocusOutTime) <= 500) {
#else
- // If on Linux or macOS, check if the window has focus.
+ // If on Linux, check if the window has focus.
if (hasFocus() || isHidden() || windowHandle()->isActive()) {
#endif
toggleWindow();
@@ -1235,28 +1411,63 @@ void MainWindow::processTrayIconTrigger()
}
}
+void MainWindow::show()
+{
+#ifndef Q_OS_WIN
+ m_lastShowTime = Clock::currentMilliSecondsSinceEpoch();
+#endif
+#ifdef Q_OS_MACOS
+ // Unset minimize state to avoid weird fly-in effects
+ setWindowState(windowState() & ~Qt::WindowMinimized);
+ macUtils()->toggleForegroundApp(true);
+#endif
+ QMainWindow::show();
+}
+
+void MainWindow::hide()
+{
+#ifndef Q_OS_WIN
+ qint64 current_time = Clock::currentMilliSecondsSinceEpoch();
+ if (current_time - m_lastShowTime < 50) {
+ return;
+ }
+#endif
+ QMainWindow::hide();
+#ifdef Q_OS_MACOS
+ macUtils()->toggleForegroundApp(false);
+#endif
+}
+
void MainWindow::hideWindow()
{
saveWindowInformation();
-#if !defined(Q_OS_LINUX) && !defined(Q_OS_MACOS)
- // On some Linux systems, the window should NOT be minimized and hidden (i.e. not shown), at
- // the same time (which would happen if both minimize on startup and minimize to tray are set)
- // since otherwise it causes problems on restore as seen on issue #1595. Hiding it is enough.
- // TODO: Add an explanation for why this is also not done on Mac (or remove the check)
- setWindowState(windowState() | Qt::WindowMinimized);
-#endif
+
// Only hide if tray icon is active, otherwise window will be gone forever
if (isTrayIconEnabled()) {
+ // On X11, the window should NOT be minimized and hidden at the same time. See issue #1595.
+ // On macOS, we are skipping minimization as well to avoid playing the magic lamp animation.
+ if (QGuiApplication::platformName() != "xcb" && QGuiApplication::platformName() != "cocoa") {
+ setWindowState(windowState() | Qt::WindowMinimized);
+ }
hide();
} else {
showMinimized();
}
- if (config()->get("security/lockdatabaseminimize").toBool()) {
+ if (config()->get(Config::Security_LockDatabaseMinimize).toBool()) {
m_ui->tabWidget->lockDatabases();
}
}
+void MainWindow::minimizeOrHide()
+{
+ if (config()->get(Config::GUI_MinimizeToTray).toBool()) {
+ hideWindow();
+ } else {
+ showMinimized();
+ }
+}
+
void MainWindow::toggleWindow()
{
if (isVisible() && !isMinimized()) {
@@ -1269,7 +1480,7 @@ void MainWindow::toggleWindow()
// see https://github.com/keepassxreboot/keepassxc/issues/271
// and https://bugreports.qt.io/browse/QTBUG-58723
// check for !isVisible(), because isNativeMenuBar() does not work with appmenu-qt5
- const static auto isDesktopSessionUnity = qgetenv("XDG_CURRENT_DESKTOP") == "Unity";
+ static const auto isDesktopSessionUnity = qgetenv("XDG_CURRENT_DESKTOP") == "Unity";
if (isDesktopSessionUnity && Tools::qtRuntimeVersion() < QT_VERSION_CHECK(5, 9, 0)
&& !m_ui->menubar->isVisible()) {
@@ -1306,7 +1517,7 @@ void MainWindow::forgetTouchIDAfterInactivity()
bool MainWindow::isTrayIconEnabled() const
{
- return config()->get("GUI/ShowTrayIcon").toBool() && QSystemTrayIcon::isSystemTrayAvailable();
+ return config()->get(Config::GUI_ShowTrayIcon).toBool() && QSystemTrayIcon::isSystemTrayAvailable();
}
void MainWindow::displayGlobalMessage(const QString& text,
@@ -1357,12 +1568,12 @@ void MainWindow::bringToFront()
void MainWindow::handleScreenLock()
{
- if (config()->get("security/lockdatabasescreenlock").toBool()) {
+ if (config()->get(Config::Security_LockDatabaseScreenLock).toBool()) {
lockDatabasesAfterInactivity();
}
#ifdef WITH_XC_TOUCHID
- if (config()->get("security/resettouchidscreenlock").toBool()) {
+ if (config()->get(Config::Security_ResetTouchIdScreenlock).toBool()) {
forgetTouchIDAfterInactivity();
}
#endif
@@ -1428,8 +1639,67 @@ void MainWindow::displayDesktopNotification(const QString& msg, QString title, i
}
#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)
- m_trayIcon->showMessage(title, msg, filePath()->applicationIcon(), msTimeoutHint);
+ m_trayIcon->showMessage(title, msg, resources()->applicationIcon(), msTimeoutHint);
#else
m_trayIcon->showMessage(title, msg, QSystemTrayIcon::Information, msTimeoutHint);
#endif
}
+
+void MainWindow::restartApp(const QString& message)
+{
+ auto ans = MessageBox::question(
+ this, tr("Restart Application?"), message, MessageBox::Yes | MessageBox::No, MessageBox::Yes);
+ if (ans == MessageBox::Yes) {
+ m_appExitCalled = true;
+ m_restartRequested = true;
+ close();
+ } else {
+ m_restartRequested = false;
+ }
+}
+
+void MainWindow::initViewMenu()
+{
+ m_ui->actionThemeAuto->setData("auto");
+ m_ui->actionThemeLight->setData("light");
+ m_ui->actionThemeDark->setData("dark");
+ m_ui->actionThemeClassic->setData("classic");
+
+ auto themeActions = new QActionGroup(this);
+ themeActions->addAction(m_ui->actionThemeAuto);
+ themeActions->addAction(m_ui->actionThemeLight);
+ themeActions->addAction(m_ui->actionThemeDark);
+ themeActions->addAction(m_ui->actionThemeClassic);
+
+ auto theme = config()->get(Config::GUI_ApplicationTheme).toString();
+ for (auto action : themeActions->actions()) {
+ if (action->data() == theme) {
+ action->setChecked(true);
+ break;
+ }
+ }
+
+ connect(themeActions, &QActionGroup::triggered, this, [this](QAction* action) {
+ if (action->data() != config()->get(Config::GUI_ApplicationTheme)) {
+ config()->set(Config::GUI_ApplicationTheme, action->data());
+ restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?"));
+ }
+ });
+
+ m_ui->actionCompactMode->setChecked(config()->get(Config::GUI_CompactMode).toBool());
+ connect(m_ui->actionCompactMode, &QAction::toggled, this, [this](bool checked) {
+ config()->set(Config::GUI_CompactMode, checked);
+ restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?"));
+ });
+
+ m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool());
+ connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) {
+ config()->set(Config::GUI_HideToolbar, !checked);
+ applySettingsChanges();
+ });
+
+ m_ui->actionShowPreviewPanel->setChecked(!config()->get(Config::GUI_HidePreviewPanel).toBool());
+ connect(m_ui->actionShowPreviewPanel, &QAction::toggled, this, [](bool checked) {
+ config()->set(Config::GUI_HidePreviewPanel, !checked);
+ });
+}
diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h
index 89501eff3..95e8e5a8b 100644
--- a/src/gui/MainWindow.h
+++ b/src/gui/MainWindow.h
@@ -48,6 +48,8 @@ public:
MainWindow();
~MainWindow();
+ QList<DatabaseWidget*> getOpenDatabases();
+
enum StackedWidgetIndex
{
DatabaseTabScreen = 0,
@@ -70,22 +72,28 @@ public slots:
void hideGlobalMessage();
void showYubiKeyPopup();
void hideYubiKeyPopup();
+ void hide();
+ void show();
void hideWindow();
+ void minimizeOrHide();
void toggleWindow();
void bringToFront();
void closeAllDatabases();
void lockAllDatabases();
void displayDesktopNotification(const QString& msg, QString title = "", int msTimeoutHint = 10000);
+ void restartApp(const QString& message);
protected:
void closeEvent(QCloseEvent* event) override;
void changeEvent(QEvent* event) override;
+ bool focusNextPrevChild(bool next) override;
private slots:
void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::Mode::None);
+ void updateToolbarSeparatorVisibility();
void updateWindowTitle();
void showAboutDialog();
- void showUpdateCheckStartup();
+ void performUpdateCheck();
void showUpdateCheckDialog();
void focusWindowChanged(QWindow* focusWindow);
void hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested);
@@ -97,14 +105,13 @@ private slots:
void openKeyboardShortcuts();
void switchToDatabases();
void switchToSettings(bool enabled);
- void switchToPasswordGen(bool enabled);
+ void togglePasswordGenerator(bool enabled);
void switchToNewDatabase();
void switchToOpenDatabase();
void switchToDatabaseFile(const QString& file);
void switchToKeePass1Database();
void switchToOpVaultDatabase();
void switchToCsvImport();
- void closePasswordGen();
void databaseStatusChanged(DatabaseWidget* dbWidget);
void databaseTabChanged(int tabIndex);
void openRecentDatabase(QAction* action);
@@ -122,10 +129,15 @@ private slots:
void showErrorMessage(const QString& message);
void selectNextDatabaseTab();
void selectPreviousDatabaseTab();
+ void selectDatabaseTab(int tabIndex, bool wrap = false);
void togglePasswordsHidden();
void toggleUsernamesHidden();
void obtainContextFocusLock();
void releaseContextFocusLock();
+ void agentEnabled(bool enabled);
+
+private slots:
+ void updateTrayIcon();
private:
static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0);
@@ -134,7 +146,6 @@ private:
void saveWindowInformation();
bool saveLastDatabases();
- void updateTrayIcon();
bool isTrayIconEnabled() const;
void customOpenUrl(QString url);
@@ -142,6 +153,8 @@ private:
void dragEnterEvent(QDragEnterEvent* event) override;
void dropEvent(QDropEvent* event) override;
+ void initViewMenu();
+
const QScopedPointer<Ui::MainWindow> m_ui;
SignalMultiplexer m_actionMultiplexer;
QPointer<QAction> m_clearHistoryAction;
@@ -161,8 +174,12 @@ private:
bool m_appExitCalled = false;
bool m_appExiting = false;
+ bool m_restartRequested = false;
bool m_contextMenuFocusLock = false;
- uint m_lastFocusOutTime = 0;
+ bool m_showToolbarSeparator = false;
+ qint64 m_lastFocusOutTime = 0;
+ qint64 m_lastShowTime = 0;
+ QTimer m_updateCheckTimer;
QTimer m_trayIconTriggerTimer;
QSystemTrayIcon::ActivationReason m_trayIconTriggerReason;
};
diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui
index 068788ecb..10951f3c0 100644
--- a/src/gui/MainWindow.ui
+++ b/src/gui/MainWindow.ui
@@ -13,6 +13,12 @@
<height>600</height>
</rect>
</property>
+ <property name="minimumSize">
+ <size>
+ <width>800</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="windowTitle">
<string notr="true">KeePassXC</string>
</property>
@@ -37,28 +43,23 @@
<number>0</number>
</property>
<item>
- <widget class="QWidget" name="globalMessageWidgetContainer" native="true">
- <layout class="QVBoxLayout" name="globalMessageWidgetLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="MessageWidget" name="globalMessageWidget" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="styleSheet">
- <string notr="true">MessageWidget {margin: 90px}</string>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="MessageWidget" name="globalMessageWidget" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="toolbarSeparator">
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
</widget>
</item>
<item>
@@ -69,9 +70,6 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
<property name="currentIndex">
<number>2</number>
</property>
@@ -119,11 +117,7 @@
<number>0</number>
</property>
<item>
- <widget class="ApplicationSettingsWidget" name="settingsWidget" native="true">
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
+ <widget class="ApplicationSettingsWidget" name="settingsWidget" native="true"/>
</item>
</layout>
</widget>
@@ -148,11 +142,7 @@
</spacer>
</item>
<item>
- <widget class="WelcomeWidget" name="welcomeWidget" native="true">
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
+ <widget class="WelcomeWidget" name="welcomeWidget" native="true"/>
</item>
<item>
<spacer name="horizontalSpacer_2">
@@ -176,12 +166,43 @@
</widget>
<widget class="QWidget" name="pagePasswordGenerator">
<layout class="QVBoxLayout" name="verticalLayout_6">
+ <property name="leftMargin">
+ <number>60</number>
+ </property>
+ <property name="topMargin">
+ <number>30</number>
+ </property>
+ <property name="rightMargin">
+ <number>60</number>
+ </property>
<item>
- <widget class="PasswordGeneratorWidget" name="passwordGeneratorWidget" native="true">
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- </widget>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="PasswordGeneratorWidget" name="passwordGeneratorWidget" native="true"/>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
</item>
</layout>
</widget>
@@ -195,12 +216,9 @@
<x>0</x>
<y>0</y>
<width>800</width>
- <height>21</height>
+ <height>22</height>
</rect>
</property>
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
<property name="contextMenuPolicy">
<enum>Qt::PreventContextMenu</enum>
</property>
@@ -210,16 +228,16 @@
</property>
<widget class="QMenu" name="menuRecentDatabases">
<property name="title">
- <string>&amp;Recent databases</string>
+ <string>&amp;Recent Databases</string>
</property>
</widget>
<widget class="QMenu" name="menuImport">
<property name="title">
<string>&amp;Import</string>
</property>
- <addaction name="actionImportKeePass1"/>
- <addaction name="actionImportOpVault"/>
<addaction name="actionImportCsv"/>
+ <addaction name="actionImportOpVault"/>
+ <addaction name="actionImportKeePass1"/>
</widget>
<widget class="QMenu" name="menuExport">
<property name="title">
@@ -233,10 +251,12 @@
<addaction name="menuRecentDatabases"/>
<addaction name="actionDatabaseSave"/>
<addaction name="actionDatabaseSaveAs"/>
+ <addaction name="actionDatabaseSaveBackup"/>
<addaction name="actionDatabaseClose"/>
<addaction name="separator"/>
- <addaction name="actionChangeMasterKey"/>
- <addaction name="actionChangeDatabaseSettings"/>
+ <addaction name="actionReports"/>
+ <addaction name="actionDatabaseSettings"/>
+ <addaction name="actionDatabaseSecurity"/>
<addaction name="separator"/>
<addaction name="actionDatabaseMerge"/>
<addaction name="menuImport"/>
@@ -248,7 +268,6 @@
<property name="title">
<string>&amp;Help</string>
</property>
- <addaction name="actionAbout"/>
<addaction name="separator"/>
<addaction name="actionGettingStarted"/>
<addaction name="actionUserGuide"/>
@@ -258,10 +277,11 @@
<addaction name="actionCheckForUpdates"/>
<addaction name="actionDonate"/>
<addaction name="actionBugReport"/>
+ <addaction name="actionAbout"/>
</widget>
<widget class="QMenu" name="menuEntries">
<property name="title">
- <string>E&amp;ntries</string>
+ <string>&amp;Entries</string>
</property>
<widget class="QMenu" name="menuEntryCopyAttribute">
<property name="enabled">
@@ -271,7 +291,7 @@
<string/>
</property>
<property name="title">
- <string>Copy att&amp;ribute...</string>
+ <string>Copy Att&amp;ribute</string>
</property>
<addaction name="actionEntryCopyTitle"/>
<addaction name="actionEntryCopyURL"/>
@@ -283,7 +303,7 @@
<bool>false</bool>
</property>
<property name="title">
- <string>TOTP...</string>
+ <string>TOTP</string>
</property>
<addaction name="actionEntryCopyTotp"/>
<addaction name="actionEntryTotp"/>
@@ -295,6 +315,9 @@
<addaction name="actionEntryClone"/>
<addaction name="actionEntryDelete"/>
<addaction name="separator"/>
+ <addaction name="actionEntryMoveUp"/>
+ <addaction name="actionEntryMoveDown"/>
+ <addaction name="separator"/>
<addaction name="actionEntryCopyUsername"/>
<addaction name="actionEntryCopyPassword"/>
<addaction name="menuEntryCopyAttribute"/>
@@ -304,13 +327,15 @@
<addaction name="separator"/>
<addaction name="actionEntryOpenUrl"/>
<addaction name="actionEntryDownloadIcon"/>
+ <addaction name="separator"/>
+ <addaction name="actionEntryAddToAgent"/>
+ <addaction name="actionEntryRemoveFromAgent"/>
</widget>
<widget class="QMenu" name="menuGroups">
<property name="title">
<string>&amp;Groups</string>
</property>
<addaction name="actionGroupNew"/>
- <addaction name="separator"/>
<addaction name="actionGroupEdit"/>
<addaction name="actionGroupDelete"/>
<addaction name="actionGroupEmptyRecycleBin"/>
@@ -328,16 +353,32 @@
<addaction name="actionPasswordGenerator"/>
<addaction name="actionSettings"/>
</widget>
+ <widget class="QMenu" name="menuView">
+ <property name="title">
+ <string>View</string>
+ </property>
+ <widget class="QMenu" name="menuTheme">
+ <property name="title">
+ <string>Theme</string>
+ </property>
+ <addaction name="actionThemeAuto"/>
+ <addaction name="actionThemeLight"/>
+ <addaction name="actionThemeDark"/>
+ <addaction name="actionThemeClassic"/>
+ </widget>
+ <addaction name="menuTheme"/>
+ <addaction name="actionCompactMode"/>
+ <addaction name="actionShowPreviewPanel"/>
+ <addaction name="actionShowToolbar"/>
+ </widget>
<addaction name="menuFile"/>
<addaction name="menuEntries"/>
<addaction name="menuGroups"/>
<addaction name="menuTools"/>
+ <addaction name="menuView"/>
<addaction name="menuHelp"/>
</widget>
<widget class="QToolBar" name="toolBar">
- <property name="focusPolicy">
- <enum>Qt::NoFocus</enum>
- </property>
<property name="contextMenuPolicy">
<enum>Qt::PreventContextMenu</enum>
</property>
@@ -346,8 +387,8 @@
</property>
<property name="iconSize">
<size>
- <width>22</width>
- <height>22</height>
+ <width>26</width>
+ <height>26</height>
</size>
</property>
<attribute name="toolBarArea">
@@ -356,7 +397,6 @@
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
- <addaction name="actionDatabaseNew"/>
<addaction name="actionDatabaseOpen"/>
<addaction name="actionDatabaseSave"/>
<addaction name="separator"/>
@@ -369,9 +409,9 @@
<addaction name="actionEntryCopyURL"/>
<addaction name="actionEntryAutoType"/>
<addaction name="separator"/>
- <addaction name="actionPasswordGenerator"/>
<addaction name="actionLockDatabases"/>
<addaction name="separator"/>
+ <addaction name="actionPasswordGenerator"/>
<addaction name="actionSettings"/>
<addaction name="separator"/>
</widget>
@@ -393,7 +433,7 @@
</action>
<action name="actionCheckForUpdates">
<property name="text">
- <string>&amp;Check for Updates...</string>
+ <string>&amp;Check for Updates</string>
</property>
<property name="menuRole">
<enum>QAction::ApplicationSpecificRole</enum>
@@ -401,7 +441,7 @@
</action>
<action name="actionDatabaseOpen">
<property name="text">
- <string>&amp;Open database...</string>
+ <string>&amp;Open Database…</string>
</property>
</action>
<action name="actionDatabaseSave">
@@ -409,7 +449,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Save database</string>
+ <string>&amp;Save Database</string>
</property>
</action>
<action name="actionDatabaseClose">
@@ -417,12 +457,12 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Close database</string>
+ <string>&amp;Close Database</string>
</property>
</action>
<action name="actionDatabaseNew">
<property name="text">
- <string>&amp;New database...</string>
+ <string>&amp;New Database…</string>
</property>
<property name="toolTip">
<string>Create a new database</string>
@@ -430,7 +470,7 @@
</action>
<action name="actionDatabaseMerge">
<property name="text">
- <string>&amp;Merge from database...</string>
+ <string>&amp;Merge From Database…</string>
</property>
<property name="toolTip">
<string>Merge from another KDBX database</string>
@@ -441,7 +481,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;New entry</string>
+ <string>&amp;New Entry…</string>
</property>
<property name="toolTip">
<string>Add a new entry</string>
@@ -452,7 +492,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Edit entry</string>
+ <string>&amp;Edit Entry…</string>
</property>
<property name="toolTip">
<string>View or edit entry</string>
@@ -463,7 +503,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Delete entry</string>
+ <string>&amp;Delete Entry…</string>
</property>
</action>
<action name="actionGroupNew">
@@ -471,7 +511,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;New group</string>
+ <string>&amp;New Group…</string>
</property>
<property name="toolTip">
<string>Add a new group</string>
@@ -482,7 +522,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Edit group</string>
+ <string>&amp;Edit Group…</string>
</property>
</action>
<action name="actionGroupDelete">
@@ -490,7 +530,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Delete group</string>
+ <string>&amp;Delete Group…</string>
</property>
</action>
<action name="actionGroupDownloadFavicons">
@@ -498,7 +538,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Downlo&amp;ad all favicons</string>
+ <string>Download All &amp;Favicons…</string>
</property>
</action>
<action name="actionGroupSortAsc">
@@ -522,23 +562,37 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Sa&amp;ve database as...</string>
+ <string>Sa&amp;ve Database As…</string>
</property>
</action>
- <action name="actionChangeMasterKey">
+ <action name="actionDatabaseSecurity">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
- <string>Change master &amp;key...</string>
+ <string>Database &amp;Security…</string>
</property>
</action>
- <action name="actionChangeDatabaseSettings">
+ <action name="actionReports">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Database settings...</string>
+ <string>Database &amp;Reports...</string>
+ </property>
+ <property name="toolTip">
+ <string>Statistics, health check, etc.</string>
+ </property>
+ <property name="menuRole">
+ <enum>QAction::NoRole</enum>
+ </property>
+ </action>
+ <action name="actionDatabaseSettings">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Database Settings…</string>
</property>
<property name="toolTip">
<string>Database settings</string>
@@ -552,7 +606,29 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Clone entry</string>
+ <string>&amp;Clone Entry…</string>
+ </property>
+ </action>
+ <action name="actionEntryMoveUp">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Move u&amp;p</string>
+ </property>
+ <property name="toolTip">
+ <string>Move entry one step up</string>
+ </property>
+ </action>
+ <action name="actionEntryMoveDown">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Move do&amp;wn</string>
+ </property>
+ <property name="toolTip">
+ <string>Move entry one step down</string>
</property>
</action>
<action name="actionEntryCopyUsername">
@@ -560,7 +636,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Copy &amp;username</string>
+ <string>Copy &amp;Username</string>
</property>
<property name="toolTip">
<string>Copy username to clipboard</string>
@@ -571,7 +647,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Copy &amp;password</string>
+ <string>Copy &amp;Password</string>
</property>
<property name="toolTip">
<string>Copy password to clipboard</string>
@@ -606,7 +682,7 @@
</action>
<action name="actionEntryDownloadIcon">
<property name="text">
- <string>Download favicon</string>
+ <string>Download &amp;Favicon</string>
</property>
</action>
<action name="actionEntryOpenUrl">
@@ -622,7 +698,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Lock databases</string>
+ <string>&amp;Lock Databases</string>
</property>
</action>
<action name="actionEntryCopyTitle">
@@ -663,7 +739,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Export to CSV file...</string>
+ <string>&amp;CSV File…</string>
</property>
</action>
<action name="actionExportHtml">
@@ -671,12 +747,12 @@
<bool>false</bool>
</property>
<property name="text">
- <string>&amp;Export to HTML file...</string>
+ <string>&amp;HTML File…</string>
</property>
</action>
<action name="actionImportKeePass1">
<property name="text">
- <string>KeePass 1 database...</string>
+ <string>KeePass 1 Database…</string>
</property>
<property name="toolTip">
<string>Import a KeePass 1 database</string>
@@ -684,7 +760,7 @@
</action>
<action name="actionImportOpVault">
<property name="text">
- <string>1Password Vault...</string>
+ <string>1Password Vault…</string>
</property>
<property name="toolTip">
<string>Import a 1Password Vault</string>
@@ -692,7 +768,7 @@
</action>
<action name="actionImportCsv">
<property name="text">
- <string>CSV file...</string>
+ <string>CSV File…</string>
</property>
<property name="toolTip">
<string>Import a CSV file</string>
@@ -700,17 +776,17 @@
</action>
<action name="actionEntryTotp">
<property name="text">
- <string>Show TOTP...</string>
+ <string>Show TOTP</string>
</property>
</action>
<action name="actionEntryTotpQRCode">
<property name="text">
- <string>Show TOTP QR Code...</string>
+ <string>Show QR Code</string>
</property>
</action>
<action name="actionEntrySetupTotp">
<property name="text">
- <string>Set up TOTP...</string>
+ <string>Set up TOTP…</string>
</property>
</action>
<action name="actionEntryCopyTotp">
@@ -733,7 +809,7 @@
</action>
<action name="actionBugReport">
<property name="text">
- <string>Report a &amp;bug</string>
+ <string>Report a &amp;Bug</string>
</property>
</action>
<action name="actionGettingStarted">
@@ -741,15 +817,15 @@
<string>&amp;Getting Started</string>
</property>
<property name="toolTip">
- <string>Open Getting Started Guide PDF</string>
+ <string>Open Getting Started Guide</string>
</property>
</action>
<action name="actionOnlineHelp">
<property name="text">
- <string>&amp;Online Help...</string>
+ <string>&amp;Online Help</string>
</property>
<property name="toolTip">
- <string>Go to online documentation (opens browser)</string>
+ <string>Go to online documentation</string>
</property>
</action>
<action name="actionUserGuide">
@@ -757,7 +833,7 @@
<string>&amp;User Guide</string>
</property>
<property name="toolTip">
- <string>Open User Guide PDF</string>
+ <string>Open User Guide</string>
</property>
</action>
<action name="actionKeyboardShortcuts">
@@ -768,6 +844,89 @@
<string notr="true">Ctrl+/</string>
</property>
</action>
+ <action name="actionDatabaseSaveBackup">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Save Database Backup...</string>
+ </property>
+ </action>
+ <action name="actionEntryAddToAgent">
+ <property name="text">
+ <string>Add key to SSH Agent</string>
+ </property>
+ </action>
+ <action name="actionEntryRemoveFromAgent">
+ <property name="text">
+ <string>Remove key from SSH Agent</string>
+ </property>
+ </action>
+ <action name="actionCompactMode">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Compact Mode</string>
+ </property>
+ </action>
+ <action name="actionThemeAuto">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Automatic</string>
+ </property>
+ </action>
+ <action name="actionThemeLight">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Light</string>
+ </property>
+ </action>
+ <action name="actionThemeDark">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Dark</string>
+ </property>
+ </action>
+ <action name="actionThemeClassic">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Classic (Platform-native)</string>
+ </property>
+ </action>
+ <action name="actionShowToolbar">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Show Toolbar</string>
+ </property>
+ </action>
+ <action name="actionShowPreviewPanel">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Show Preview Panel</string>
+ </property>
+ </action>
</widget>
<customwidgets>
<customwidget>
diff --git a/src/gui/MessageBox.cpp b/src/gui/MessageBox.cpp
index 7d2b2a516..317754a62 100644
--- a/src/gui/MessageBox.cpp
+++ b/src/gui/MessageBox.cpp
@@ -98,10 +98,10 @@ MessageBox::Button MessageBox::messageBox(QWidget* parent,
for (uint64_t b = First; b <= Last; b <<= 1) {
if (b & buttons) {
- QString text = m_buttonDefs[static_cast<Button>(b)].first;
+ QString buttonText = m_buttonDefs[static_cast<Button>(b)].first;
QMessageBox::ButtonRole role = m_buttonDefs[static_cast<Button>(b)].second;
- auto buttonPtr = msgBox.addButton(text, role);
+ auto buttonPtr = msgBox.addButton(buttonText, role);
m_addedButtonLookup.insert(buttonPtr, static_cast<Button>(b));
}
}
diff --git a/src/gui/MessageWidget.cpp b/src/gui/MessageWidget.cpp
index 4b7e67a22..494a81542 100644
--- a/src/gui/MessageWidget.cpp
+++ b/src/gui/MessageWidget.cpp
@@ -36,6 +36,11 @@ MessageWidget::MessageWidget(QWidget* parent)
connect(this, SIGNAL(hideAnimationFinished()), m_autoHideTimer, SLOT(stop()));
}
+void MessageWidget::setAnimate(bool state)
+{
+ m_animate = state;
+}
+
int MessageWidget::autoHideTimeout() const
{
return m_autoHideTimeout;
@@ -50,8 +55,15 @@ void MessageWidget::showMessage(const QString& text, KMessageWidget::MessageType
{
setMessageType(type);
setText(text);
+
emit showAnimationStarted();
- animatedShow();
+ if (m_animate) {
+ animatedShow();
+ } else {
+ show();
+ emit showAnimationFinished();
+ }
+
if (autoHideTimeout > 0) {
m_autoHideTimer->start(autoHideTimeout);
} else {
@@ -61,7 +73,14 @@ void MessageWidget::showMessage(const QString& text, KMessageWidget::MessageType
void MessageWidget::hideMessage()
{
- animatedHide();
+ emit hideAnimationStarted();
+ if (m_animate) {
+ animatedHide();
+ } else {
+ hide();
+ emit hideAnimationFinished();
+ }
+
m_autoHideTimer->stop();
}
diff --git a/src/gui/MessageWidget.h b/src/gui/MessageWidget.h
index fe4baec4a..2c8c9a217 100644
--- a/src/gui/MessageWidget.h
+++ b/src/gui/MessageWidget.h
@@ -36,8 +36,11 @@ public:
static const int LongAutoHideTimeout;
static const int DisableAutoHide;
+ void setAnimate(bool state);
+
signals:
void showAnimationStarted();
+ void hideAnimationStarted();
public slots:
void showMessage(const QString& text, MessageWidget::MessageType type);
@@ -49,6 +52,7 @@ public slots:
private:
QTimer* m_autoHideTimer;
int m_autoHideTimeout;
+ bool m_animate;
};
#endif // MESSAGEWIDGET_H
diff --git a/src/gui/PasswordEdit.cpp b/src/gui/PasswordEdit.cpp
index 37b82ad8b..487db8768 100644
--- a/src/gui/PasswordEdit.cpp
+++ b/src/gui/PasswordEdit.cpp
@@ -19,91 +19,142 @@
#include "PasswordEdit.h"
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/Font.h"
+#include "gui/PasswordGeneratorWidget.h"
+#include "gui/osutils/OSUtils.h"
+#include "gui/styles/StateColorPalette.h"
-const QColor PasswordEdit::CorrectSoFarColor = QColor(255, 205, 15);
-const QColor PasswordEdit::ErrorColor = QColor(255, 125, 125);
+#include <QDialog>
+#include <QTimer>
+#include <QToolTip>
+#include <QVBoxLayout>
PasswordEdit::PasswordEdit(QWidget* parent)
: QLineEdit(parent)
- , m_basePasswordEdit(nullptr)
{
- const QIcon errorIcon = filePath()->icon("status", "dialog-error");
+ const QIcon errorIcon = resources()->icon("dialog-error");
m_errorAction = addAction(errorIcon, QLineEdit::TrailingPosition);
m_errorAction->setVisible(false);
m_errorAction->setToolTip(tr("Passwords do not match"));
- const QIcon correctIcon = filePath()->icon("actions", "dialog-ok");
+ const QIcon correctIcon = resources()->icon("dialog-ok");
m_correctAction = addAction(correctIcon, QLineEdit::TrailingPosition);
m_correctAction->setVisible(false);
m_correctAction->setToolTip(tr("Passwords match so far"));
setEchoMode(QLineEdit::Password);
- updateStylesheet();
// use a monospace font for the password field
QFont passwordFont = Font::fixedFont();
passwordFont.setLetterSpacing(QFont::PercentageSpacing, 110);
setFont(passwordFont);
+
+ m_toggleVisibleAction = new QAction(
+ resources()->icon("password-show-off"),
+ tr("Toggle Password (%1)").arg(QKeySequence(Qt::CTRL + Qt::Key_H).toString(QKeySequence::NativeText)),
+ nullptr);
+ m_toggleVisibleAction->setCheckable(true);
+ m_toggleVisibleAction->setShortcut(Qt::CTRL + Qt::Key_H);
+ m_toggleVisibleAction->setShortcutContext(Qt::WidgetShortcut);
+ addAction(m_toggleVisibleAction, QLineEdit::TrailingPosition);
+ connect(m_toggleVisibleAction, &QAction::triggered, this, &PasswordEdit::setShowPassword);
+
+ m_passwordGeneratorAction = new QAction(
+ resources()->icon("password-generator"),
+ tr("Generate Password (%1)").arg(QKeySequence(Qt::CTRL + Qt::Key_G).toString(QKeySequence::NativeText)),
+ nullptr);
+ m_passwordGeneratorAction->setShortcut(Qt::CTRL + Qt::Key_G);
+ m_passwordGeneratorAction->setShortcutContext(Qt::WidgetShortcut);
+ addAction(m_passwordGeneratorAction, QLineEdit::TrailingPosition);
+ m_passwordGeneratorAction->setVisible(false);
+
+ m_capslockAction =
+ new QAction(resources()->icon("dialog-warning", true, StateColorPalette().color(StateColorPalette::Error)),
+ tr("Warning: Caps Lock enabled!"),
+ nullptr);
+ addAction(m_capslockAction, QLineEdit::LeadingPosition);
+ m_capslockAction->setVisible(false);
}
-void PasswordEdit::enableVerifyMode(PasswordEdit* basePasswordEdit)
+void PasswordEdit::setRepeatPartner(PasswordEdit* repeatEdit)
{
- m_basePasswordEdit = basePasswordEdit;
+ m_repeatPasswordEdit = repeatEdit;
+ m_repeatPasswordEdit->setParentPasswordEdit(this);
- updateStylesheet();
+ connect(this, SIGNAL(textChanged(QString)), m_repeatPasswordEdit, SLOT(autocompletePassword(QString)));
+ connect(this, SIGNAL(textChanged(QString)), m_repeatPasswordEdit, SLOT(updateRepeatStatus()));
+ connect(m_repeatPasswordEdit, SIGNAL(textChanged(QString)), m_repeatPasswordEdit, SLOT(updateRepeatStatus()));
+}
- connect(m_basePasswordEdit, SIGNAL(textChanged(QString)), SLOT(autocompletePassword(QString)));
- connect(m_basePasswordEdit, SIGNAL(textChanged(QString)), SLOT(updateStylesheet()));
- connect(this, SIGNAL(textChanged(QString)), SLOT(updateStylesheet()));
+void PasswordEdit::setParentPasswordEdit(PasswordEdit* parent)
+{
+ m_parentPasswordEdit = parent;
+ // Hide actions
+ m_toggleVisibleAction->setVisible(false);
+ m_passwordGeneratorAction->setVisible(false);
+}
- connect(m_basePasswordEdit, SIGNAL(showPasswordChanged(bool)), SLOT(setShowPassword(bool)));
+void PasswordEdit::enablePasswordGenerator()
+{
+ if (!m_passwordGeneratorAction->isVisible()) {
+ m_passwordGeneratorAction->setVisible(true);
+ connect(m_passwordGeneratorAction, &QAction::triggered, this, &PasswordEdit::popupPasswordGenerator);
+ }
}
void PasswordEdit::setShowPassword(bool show)
{
setEchoMode(show ? QLineEdit::Normal : QLineEdit::Password);
- // if I have a parent, I'm the child
- if (m_basePasswordEdit) {
- if (config()->get("security/passwordsrepeat").toBool()) {
- setEnabled(!show);
- setReadOnly(show);
- setText(m_basePasswordEdit->text());
+ m_toggleVisibleAction->setIcon(resources()->icon(show ? "password-show-on" : "password-show-off"));
+ m_toggleVisibleAction->setChecked(show);
+
+ if (m_repeatPasswordEdit) {
+ m_repeatPasswordEdit->setEchoMode(show ? QLineEdit::Normal : QLineEdit::Password);
+ if (!config()->get(Config::Security_PasswordsRepeatVisible).toBool()) {
+ m_repeatPasswordEdit->setEnabled(!show);
+ m_repeatPasswordEdit->setText(text());
} else {
- // This fix a bug when the QLineEdit is disabled while switching config
- if (!isEnabled()) {
- setEnabled(true);
- setReadOnly(false);
- }
+ m_repeatPasswordEdit->setEnabled(true);
}
}
- updateStylesheet();
- emit showPasswordChanged(show);
}
bool PasswordEdit::isPasswordVisible() const
{
- return isEnabled();
+ return echoMode() == QLineEdit::Normal;
}
-bool PasswordEdit::passwordsEqual() const
+void PasswordEdit::popupPasswordGenerator()
{
- return text() == m_basePasswordEdit->text();
+ auto generator = PasswordGeneratorWidget::popupGenerator(this);
+ generator->setPasswordVisible(isPasswordVisible());
+ generator->setPasswordLength(text().length());
+
+ connect(generator, SIGNAL(appliedPassword(QString)), SLOT(setText(QString)));
+ if (m_repeatPasswordEdit) {
+ connect(generator, SIGNAL(appliedPassword(QString)), m_repeatPasswordEdit, SLOT(setText(QString)));
+ }
}
-void PasswordEdit::updateStylesheet()
+void PasswordEdit::updateRepeatStatus()
{
- const QString stylesheetTemplate("QLineEdit { background: %1; }");
+ static const auto stylesheetTemplate = QStringLiteral("QLineEdit { background: %1; }");
+ if (!m_parentPasswordEdit) {
+ return;
+ }
- if (m_basePasswordEdit && !passwordsEqual()) {
- bool isCorrect = true;
- if (m_basePasswordEdit->text().startsWith(text())) {
- setStyleSheet(stylesheetTemplate.arg(CorrectSoFarColor.name()));
- } else {
- setStyleSheet(stylesheetTemplate.arg(ErrorColor.name()));
- isCorrect = false;
+ const auto otherPassword = m_parentPasswordEdit->text();
+ const auto password = text();
+ if (otherPassword != password) {
+ bool isCorrect = false;
+ StateColorPalette statePalette;
+ QColor color = statePalette.color(StateColorPalette::ColorRole::Error);
+ if (!password.isEmpty() && otherPassword.startsWith(password)) {
+ color = statePalette.color(StateColorPalette::ColorRole::Incomplete);
+ isCorrect = true;
}
+ setStyleSheet(stylesheetTemplate.arg(color.name()));
m_correctAction->setVisible(isCorrect);
m_errorAction->setVisible(!isCorrect);
} else {
@@ -115,7 +166,38 @@ void PasswordEdit::updateStylesheet()
void PasswordEdit::autocompletePassword(const QString& password)
{
- if (config()->get("security/passwordsrepeat").toBool() && echoMode() == QLineEdit::Normal) {
+ if (!config()->get(Config::Security_PasswordsRepeatVisible).toBool() && echoMode() == QLineEdit::Normal) {
setText(password);
}
}
+
+bool PasswordEdit::event(QEvent* event)
+{
+ if (isVisible()) {
+ checkCapslockState();
+ }
+ return QLineEdit::event(event);
+}
+
+void PasswordEdit::checkCapslockState()
+{
+ if (m_parentPasswordEdit) {
+ return;
+ }
+
+ bool newCapslockState = osUtils->isCapslockEnabled();
+ if (newCapslockState != m_capslockState) {
+ m_capslockState = newCapslockState;
+ m_capslockAction->setVisible(newCapslockState);
+
+ // Force repaint to avoid rendering glitches of QLineEdit contents
+ repaint();
+
+ emit capslockToggled(m_capslockState);
+
+ if (newCapslockState) {
+ QTimer::singleShot(
+ 150, [this]() { QToolTip::showText(mapToGlobal(rect().bottomLeft()), m_capslockAction->text()); });
+ }
+ }
+}
diff --git a/src/gui/PasswordEdit.h b/src/gui/PasswordEdit.h
index b6e74ed00..559394bd0 100644
--- a/src/gui/PasswordEdit.h
+++ b/src/gui/PasswordEdit.h
@@ -23,34 +23,43 @@
#include <QLineEdit>
#include <QPointer>
+class QDialog;
+
class PasswordEdit : public QLineEdit
{
Q_OBJECT
public:
- static const QColor CorrectSoFarColor;
- static const QColor ErrorColor;
-
explicit PasswordEdit(QWidget* parent = nullptr);
- void enableVerifyMode(PasswordEdit* baseEdit);
+ void enablePasswordGenerator();
+ void setRepeatPartner(PasswordEdit* repeatEdit);
bool isPasswordVisible() const;
public slots:
void setShowPassword(bool show);
+ void updateRepeatStatus();
+
+protected:
+ bool event(QEvent* event) override;
signals:
- void showPasswordChanged(bool show);
+ void capslockToggled(bool capslockOn);
private slots:
- void updateStylesheet();
void autocompletePassword(const QString& password);
+ void popupPasswordGenerator();
+ void setParentPasswordEdit(PasswordEdit* parent);
+ void checkCapslockState();
private:
- bool passwordsEqual() const;
-
QPointer<QAction> m_errorAction;
QPointer<QAction> m_correctAction;
- QPointer<PasswordEdit> m_basePasswordEdit;
+ QPointer<QAction> m_toggleVisibleAction;
+ QPointer<QAction> m_passwordGeneratorAction;
+ QPointer<QAction> m_capslockAction;
+ QPointer<PasswordEdit> m_repeatPasswordEdit;
+ QPointer<PasswordEdit> m_parentPasswordEdit;
+ bool m_capslockState = false;
};
#endif // KEEPASSX_PASSWORDEDIT_H
diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp
index e0f8fbe5f..e1c15310f 100644
--- a/src/gui/PasswordGeneratorWidget.cpp
+++ b/src/gui/PasswordGeneratorWidget.cpp
@@ -24,37 +24,52 @@
#include <QLineEdit>
#include "core/Config.h"
-#include "core/FilePath.h"
#include "core/PasswordGenerator.h"
+#include "core/PasswordHealth.h"
+#include "core/Resources.h"
#include "gui/Clipboard.h"
+#include "gui/styles/StateColorPalette.h"
PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent)
: QWidget(parent)
- , m_updatingSpinBox(false)
, m_passwordGenerator(new PasswordGenerator())
, m_dicewareGenerator(new PassphraseGenerator())
, m_ui(new Ui::PasswordGeneratorWidget())
{
m_ui->setupUi(this);
- m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
+ m_ui->buttonGenerate->setIcon(resources()->icon("refresh"));
+ m_ui->buttonGenerate->setToolTip(
+ tr("Regenerate password (%1)").arg(m_ui->buttonGenerate->shortcut().toString(QKeySequence::NativeText)));
+ m_ui->buttonCopy->setIcon(resources()->icon("clipboard-text"));
+ m_ui->buttonClose->setShortcut(Qt::Key_Escape);
+
+ m_ui->clearInclude->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
+ m_ui->editAdditionalChars->addAction(m_ui->clearInclude, QLineEdit::TrailingPosition);
+ m_ui->clearInclude->setVisible(false);
+
+ m_ui->clearExclude->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
+ m_ui->editExcludedChars->addAction(m_ui->clearExclude, QLineEdit::TrailingPosition);
+ m_ui->clearExclude->setVisible(false);
connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updateButtonsEnabled(QString)));
connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updatePasswordStrength(QString)));
- connect(m_ui->togglePasswordButton, SIGNAL(toggled(bool)), SLOT(setPasswordVisible(bool)));
- connect(m_ui->buttonSimpleMode, SIGNAL(clicked()), SLOT(selectSimpleMode()));
- connect(m_ui->buttonAdvancedMode, SIGNAL(clicked()), SLOT(selectAdvancedMode()));
+ connect(m_ui->buttonAdvancedMode, SIGNAL(toggled(bool)), SLOT(setAdvancedMode(bool)));
connect(m_ui->buttonAddHex, SIGNAL(clicked()), SLOT(excludeHexChars()));
+ connect(m_ui->editAdditionalChars, SIGNAL(textChanged(QString)), SLOT(updateGenerator()));
connect(m_ui->editExcludedChars, SIGNAL(textChanged(QString)), SLOT(updateGenerator()));
connect(m_ui->buttonApply, SIGNAL(clicked()), SLOT(applyPassword()));
connect(m_ui->buttonCopy, SIGNAL(clicked()), SLOT(copyPassword()));
connect(m_ui->buttonGenerate, SIGNAL(clicked()), SLOT(regeneratePassword()));
+ connect(m_ui->buttonClose, SIGNAL(clicked()), SIGNAL(closed()));
+ connect(m_ui->clearInclude, SIGNAL(triggered(bool)), m_ui->editAdditionalChars, SLOT(clear()));
+ connect(m_ui->clearExclude, SIGNAL(triggered(bool)), m_ui->editExcludedChars, SLOT(clear()));
- connect(m_ui->sliderLength, SIGNAL(valueChanged(int)), SLOT(passwordSliderMoved()));
- connect(m_ui->spinBoxLength, SIGNAL(valueChanged(int)), SLOT(passwordSpinBoxChanged()));
+ connect(m_ui->sliderLength, SIGNAL(valueChanged(int)), SLOT(passwordLengthChanged(int)));
+ connect(m_ui->spinBoxLength, SIGNAL(valueChanged(int)), SLOT(passwordLengthChanged(int)));
- connect(m_ui->sliderWordCount, SIGNAL(valueChanged(int)), SLOT(dicewareSliderMoved()));
- connect(m_ui->spinBoxWordCount, SIGNAL(valueChanged(int)), SLOT(dicewareSpinBoxChanged()));
+ connect(m_ui->sliderWordCount, SIGNAL(valueChanged(int)), SLOT(passphraseLengthChanged(int)));
+ connect(m_ui->spinBoxWordCount, SIGNAL(valueChanged(int)), SLOT(passphraseLengthChanged(int)));
connect(m_ui->editWordSeparator, SIGNAL(textChanged(QString)), SLOT(updateGenerator()));
connect(m_ui->comboBoxWordList, SIGNAL(currentIndexChanged(int)), SLOT(updateGenerator()));
@@ -80,7 +95,7 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent)
m_ui->wordCaseComboBox->addItem(tr("UPPER CASE"), PassphraseGenerator::UPPERCASE);
m_ui->wordCaseComboBox->addItem(tr("Title Case"), PassphraseGenerator::TITLECASE);
- QDir path(filePath()->wordlistPath(""));
+ QDir path(resources()->wordlistPath(""));
QStringList files = path.entryList(QDir::Files);
m_ui->comboBoxWordList->addItems(files);
if (files.size() > 1) {
@@ -98,125 +113,116 @@ PasswordGeneratorWidget::~PasswordGeneratorWidget()
{
}
-void PasswordGeneratorWidget::showEvent(QShowEvent* event)
+PasswordGeneratorWidget* PasswordGeneratorWidget::popupGenerator(QWidget* parent)
{
- QWidget::showEvent(event);
- reset();
+ auto pwGenerator = new PasswordGeneratorWidget(parent);
+ pwGenerator->setWindowModality(Qt::ApplicationModal);
+ pwGenerator->setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
+ pwGenerator->setStandaloneMode(false);
+
+ connect(pwGenerator, SIGNAL(closed()), pwGenerator, SLOT(deleteLater()));
+
+ pwGenerator->show();
+ pwGenerator->raise();
+ pwGenerator->activateWindow();
+ pwGenerator->adjustSize();
+
+ return pwGenerator;
}
void PasswordGeneratorWidget::loadSettings()
{
// Password config
- m_ui->checkBoxLower->setChecked(config()->get("generator/LowerCase", PasswordGenerator::DefaultLower).toBool());
- m_ui->checkBoxLowerAdv->setChecked(config()->get("generator/LowerCase", PasswordGenerator::DefaultLower).toBool());
- m_ui->checkBoxUpper->setChecked(config()->get("generator/UpperCase", PasswordGenerator::DefaultUpper).toBool());
- m_ui->checkBoxUpperAdv->setChecked(config()->get("generator/UpperCase", PasswordGenerator::DefaultUpper).toBool());
- m_ui->checkBoxNumbers->setChecked(config()->get("generator/Numbers", PasswordGenerator::DefaultNumbers).toBool());
- m_ui->checkBoxSpecialChars->setChecked(
- config()->get("generator/SpecialChars", PasswordGenerator::DefaultSpecial).toBool());
- m_ui->checkBoxNumbersAdv->setChecked(
- config()->get("generator/Numbers", PasswordGenerator::DefaultNumbers).toBool());
- m_ui->advancedBar->setVisible(
- config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool());
- m_ui->excludedChars->setVisible(
- config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool());
- m_ui->checkBoxExcludeAlike->setVisible(
- config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool());
- m_ui->checkBoxEnsureEvery->setVisible(
- config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool());
- m_ui->editExcludedChars->setText(
- config()->get("generator/ExcludedChars", PasswordGenerator::DefaultExcludedChars).toString());
-
- m_ui->simpleBar->setVisible(
- !(config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool()));
- m_ui->checkBoxBraces->setChecked(config()->get("generator/Braces", PasswordGenerator::DefaultBraces).toBool());
- m_ui->checkBoxQuotes->setChecked(config()->get("generator/Quotes", PasswordGenerator::DefaultQuotes).toBool());
- m_ui->checkBoxPunctuation->setChecked(
- config()->get("generator/Punctuation", PasswordGenerator::DefaultPunctuation).toBool());
- m_ui->checkBoxDashes->setChecked(config()->get("generator/Dashes", PasswordGenerator::DefaultDashes).toBool());
- m_ui->checkBoxMath->setChecked(config()->get("generator/Math", PasswordGenerator::DefaultMath).toBool());
- m_ui->checkBoxLogograms->setChecked(
- config()->get("generator/Logograms", PasswordGenerator::DefaultLogograms).toBool());
- m_ui->checkBoxExtASCII->setChecked(config()->get("generator/EASCII", PasswordGenerator::DefaultEASCII).toBool());
- m_ui->checkBoxExtASCIIAdv->setChecked(config()->get("generator/EASCII", PasswordGenerator::DefaultEASCII).toBool());
- m_ui->checkBoxExcludeAlike->setChecked(
- config()->get("generator/ExcludeAlike", PasswordGenerator::DefaultLookAlike).toBool());
- m_ui->checkBoxEnsureEvery->setChecked(
- config()->get("generator/EnsureEvery", PasswordGenerator::DefaultFromEveryGroup).toBool());
- m_ui->spinBoxLength->setValue(config()->get("generator/Length", PasswordGenerator::DefaultLength).toInt());
+ m_ui->checkBoxLower->setChecked(config()->get(Config::PasswordGenerator_LowerCase).toBool());
+ m_ui->checkBoxLowerAdv->setChecked(config()->get(Config::PasswordGenerator_LowerCase).toBool());
+ m_ui->checkBoxUpper->setChecked(config()->get(Config::PasswordGenerator_UpperCase).toBool());
+ m_ui->checkBoxUpperAdv->setChecked(config()->get(Config::PasswordGenerator_UpperCase).toBool());
+ m_ui->checkBoxNumbers->setChecked(config()->get(Config::PasswordGenerator_Numbers).toBool());
+ m_ui->checkBoxSpecialChars->setChecked(config()->get(Config::PasswordGenerator_SpecialChars).toBool());
+ m_ui->checkBoxNumbersAdv->setChecked(config()->get(Config::PasswordGenerator_Numbers).toBool());
+ m_ui->editAdditionalChars->setText(config()->get(Config::PasswordGenerator_AdditionalChars).toString());
+ m_ui->editExcludedChars->setText(config()->get(Config::PasswordGenerator_ExcludedChars).toString());
+
+ m_ui->buttonAdvancedMode->setChecked(config()->get(Config::PasswordGenerator_AdvancedMode).toBool());
+ setAdvancedMode(m_ui->buttonAdvancedMode->isChecked());
+
+ m_ui->checkBoxBraces->setChecked(config()->get(Config::PasswordGenerator_Braces).toBool());
+ m_ui->checkBoxQuotes->setChecked(config()->get(Config::PasswordGenerator_Quotes).toBool());
+ m_ui->checkBoxPunctuation->setChecked(config()->get(Config::PasswordGenerator_Punctuation).toBool());
+ m_ui->checkBoxDashes->setChecked(config()->get(Config::PasswordGenerator_Dashes).toBool());
+ m_ui->checkBoxMath->setChecked(config()->get(Config::PasswordGenerator_Math).toBool());
+ m_ui->checkBoxLogograms->setChecked(config()->get(Config::PasswordGenerator_Logograms).toBool());
+ m_ui->checkBoxExtASCII->setChecked(config()->get(Config::PasswordGenerator_EASCII).toBool());
+ m_ui->checkBoxExtASCIIAdv->setChecked(config()->get(Config::PasswordGenerator_EASCII).toBool());
+ m_ui->checkBoxExcludeAlike->setChecked(config()->get(Config::PasswordGenerator_ExcludeAlike).toBool());
+ m_ui->checkBoxEnsureEvery->setChecked(config()->get(Config::PasswordGenerator_EnsureEvery).toBool());
+ m_ui->spinBoxLength->setValue(config()->get(Config::PasswordGenerator_Length).toInt());
// Diceware config
- m_ui->spinBoxWordCount->setValue(
- config()->get("generator/WordCount", PassphraseGenerator::DefaultWordCount).toInt());
- m_ui->editWordSeparator->setText(
- config()->get("generator/WordSeparator", PassphraseGenerator::DefaultSeparator).toString());
- m_ui->comboBoxWordList->setCurrentText(
- config()->get("generator/WordList", PassphraseGenerator::DefaultWordList).toString());
- m_ui->wordCaseComboBox->setCurrentIndex(config()->get("generator/WordCase", 0).toInt());
+ m_ui->spinBoxWordCount->setValue(config()->get(Config::PasswordGenerator_WordCount).toInt());
+ m_ui->editWordSeparator->setText(config()->get(Config::PasswordGenerator_WordSeparator).toString());
+ m_ui->comboBoxWordList->setCurrentText(config()->get(Config::PasswordGenerator_WordList).toString());
+ m_ui->wordCaseComboBox->setCurrentIndex(config()->get(Config::PasswordGenerator_WordCase).toInt());
// Password or diceware?
- m_ui->tabWidget->setCurrentIndex(config()->get("generator/Type", 0).toInt());
+ m_ui->tabWidget->setCurrentIndex(config()->get(Config::PasswordGenerator_Type).toInt());
}
void PasswordGeneratorWidget::saveSettings()
{
// Password config
if (m_ui->simpleBar->isVisible()) {
- config()->set("generator/LowerCase", m_ui->checkBoxLower->isChecked());
- config()->set("generator/UpperCase", m_ui->checkBoxUpper->isChecked());
- config()->set("generator/Numbers", m_ui->checkBoxNumbers->isChecked());
- config()->set("generator/EASCII", m_ui->checkBoxExtASCII->isChecked());
+ config()->set(Config::PasswordGenerator_LowerCase, m_ui->checkBoxLower->isChecked());
+ config()->set(Config::PasswordGenerator_UpperCase, m_ui->checkBoxUpper->isChecked());
+ config()->set(Config::PasswordGenerator_Numbers, m_ui->checkBoxNumbers->isChecked());
+ config()->set(Config::PasswordGenerator_EASCII, m_ui->checkBoxExtASCII->isChecked());
} else {
- config()->set("generator/LowerCase", m_ui->checkBoxLowerAdv->isChecked());
- config()->set("generator/UpperCase", m_ui->checkBoxUpperAdv->isChecked());
- config()->set("generator/Numbers", m_ui->checkBoxNumbersAdv->isChecked());
- config()->set("generator/EASCII", m_ui->checkBoxExtASCIIAdv->isChecked());
+ config()->set(Config::PasswordGenerator_LowerCase, m_ui->checkBoxLowerAdv->isChecked());
+ config()->set(Config::PasswordGenerator_UpperCase, m_ui->checkBoxUpperAdv->isChecked());
+ config()->set(Config::PasswordGenerator_Numbers, m_ui->checkBoxNumbersAdv->isChecked());
+ config()->set(Config::PasswordGenerator_EASCII, m_ui->checkBoxExtASCIIAdv->isChecked());
}
- config()->set("generator/AdvancedMode", m_ui->advancedBar->isVisible());
- config()->set("generator/SpecialChars", m_ui->checkBoxSpecialChars->isChecked());
- config()->set("generator/Braces", m_ui->checkBoxBraces->isChecked());
- config()->set("generator/Punctuation", m_ui->checkBoxPunctuation->isChecked());
- config()->set("generator/Quotes", m_ui->checkBoxQuotes->isChecked());
- config()->set("generator/Dashes", m_ui->checkBoxDashes->isChecked());
- config()->set("generator/Math", m_ui->checkBoxMath->isChecked());
- config()->set("generator/Logograms", m_ui->checkBoxLogograms->isChecked());
- config()->set("generator/ExcludedChars", m_ui->editExcludedChars->text());
- config()->set("generator/ExcludeAlike", m_ui->checkBoxExcludeAlike->isChecked());
- config()->set("generator/EnsureEvery", m_ui->checkBoxEnsureEvery->isChecked());
- config()->set("generator/Length", m_ui->spinBoxLength->value());
+ config()->set(Config::PasswordGenerator_AdvancedMode, m_ui->buttonAdvancedMode->isChecked());
+ config()->set(Config::PasswordGenerator_SpecialChars, m_ui->checkBoxSpecialChars->isChecked());
+ config()->set(Config::PasswordGenerator_Braces, m_ui->checkBoxBraces->isChecked());
+ config()->set(Config::PasswordGenerator_Punctuation, m_ui->checkBoxPunctuation->isChecked());
+ config()->set(Config::PasswordGenerator_Quotes, m_ui->checkBoxQuotes->isChecked());
+ config()->set(Config::PasswordGenerator_Dashes, m_ui->checkBoxDashes->isChecked());
+ config()->set(Config::PasswordGenerator_Math, m_ui->checkBoxMath->isChecked());
+ config()->set(Config::PasswordGenerator_Logograms, m_ui->checkBoxLogograms->isChecked());
+ config()->set(Config::PasswordGenerator_AdditionalChars, m_ui->editAdditionalChars->text());
+ config()->set(Config::PasswordGenerator_ExcludedChars, m_ui->editExcludedChars->text());
+ config()->set(Config::PasswordGenerator_ExcludeAlike, m_ui->checkBoxExcludeAlike->isChecked());
+ config()->set(Config::PasswordGenerator_EnsureEvery, m_ui->checkBoxEnsureEvery->isChecked());
+ config()->set(Config::PasswordGenerator_Length, m_ui->spinBoxLength->value());
// Diceware config
- config()->set("generator/WordCount", m_ui->spinBoxWordCount->value());
- config()->set("generator/WordSeparator", m_ui->editWordSeparator->text());
- config()->set("generator/WordList", m_ui->comboBoxWordList->currentText());
- config()->set("generator/WordCase", m_ui->wordCaseComboBox->currentIndex());
+ config()->set(Config::PasswordGenerator_WordCount, m_ui->spinBoxWordCount->value());
+ config()->set(Config::PasswordGenerator_WordSeparator, m_ui->editWordSeparator->text());
+ config()->set(Config::PasswordGenerator_WordList, m_ui->comboBoxWordList->currentText());
+ config()->set(Config::PasswordGenerator_WordCase, m_ui->wordCaseComboBox->currentIndex());
// Password or diceware?
- config()->set("generator/Type", m_ui->tabWidget->currentIndex());
+ config()->set(Config::PasswordGenerator_Type, m_ui->tabWidget->currentIndex());
}
-void PasswordGeneratorWidget::reset(int length)
+void PasswordGeneratorWidget::setPasswordLength(int length)
{
- m_ui->editNewPassword->setText("");
if (length > 0) {
m_ui->spinBoxLength->setValue(length);
} else {
- m_ui->spinBoxLength->setValue(config()->get("generator/Length", PasswordGenerator::DefaultLength).toInt());
+ m_ui->spinBoxLength->setValue(config()->get(Config::PasswordGenerator_Length).toInt());
}
-
- setStandaloneMode(false);
- setPasswordVisible(config()->get("security/passwordscleartext").toBool());
- updateGenerator();
}
void PasswordGeneratorWidget::setStandaloneMode(bool standalone)
{
m_standalone = standalone;
if (standalone) {
- m_ui->buttonApply->setText(tr("Close"));
+ m_ui->buttonApply->setVisible(false);
setPasswordVisible(true);
} else {
- m_ui->buttonApply->setText(tr("Accept"));
+ m_ui->buttonApply->setVisible(true);
}
}
@@ -225,15 +231,6 @@ QString PasswordGeneratorWidget::getGeneratedPassword()
return m_ui->editNewPassword->text();
}
-void PasswordGeneratorWidget::keyPressEvent(QKeyEvent* e)
-{
- if (e->key() == Qt::Key_Escape && m_standalone) {
- emit dialogTerminated();
- } else {
- e->ignore();
- }
-}
-
void PasswordGeneratorWidget::regeneratePassword()
{
if (m_ui->tabWidget->currentIndex() == Password) {
@@ -261,28 +258,24 @@ void PasswordGeneratorWidget::updateButtonsEnabled(const QString& password)
void PasswordGeneratorWidget::updatePasswordStrength(const QString& password)
{
- double entropy = 0.0;
- if (m_ui->tabWidget->currentIndex() == Password) {
- entropy = m_passwordGenerator->estimateEntropy(password);
- } else {
- entropy = m_dicewareGenerator->estimateEntropy();
+ PasswordHealth health(password);
+ if (m_ui->tabWidget->currentIndex() == Diceware) {
+ // Diceware estimates entropy differently
+ health = PasswordHealth(m_dicewareGenerator->estimateEntropy());
}
- m_ui->entropyLabel->setText(tr("Entropy: %1 bit").arg(QString::number(entropy, 'f', 2)));
+ m_ui->entropyLabel->setText(tr("Entropy: %1 bit").arg(QString::number(health.entropy(), 'f', 2)));
- if (entropy > m_ui->entropyProgressBar->maximum()) {
- entropy = m_ui->entropyProgressBar->maximum();
- }
- m_ui->entropyProgressBar->setValue(entropy);
+ m_ui->entropyProgressBar->setValue(std::min(int(health.entropy()), m_ui->entropyProgressBar->maximum()));
- colorStrengthIndicator(entropy);
+ colorStrengthIndicator(health);
}
void PasswordGeneratorWidget::applyPassword()
{
saveSettings();
emit appliedPassword(m_ui->editNewPassword->text());
- emit dialogTerminated();
+ emit closed();
}
void PasswordGeneratorWidget::copyPassword()
@@ -290,43 +283,30 @@ void PasswordGeneratorWidget::copyPassword()
clipboard()->setText(m_ui->editNewPassword->text());
}
-void PasswordGeneratorWidget::passwordSliderMoved()
+void PasswordGeneratorWidget::passwordLengthChanged(int length)
{
- if (m_updatingSpinBox) {
- return;
- }
+ m_ui->spinBoxLength->blockSignals(true);
+ m_ui->sliderLength->blockSignals(true);
- m_ui->spinBoxLength->setValue(m_ui->sliderLength->value());
+ m_ui->spinBoxLength->setValue(length);
+ m_ui->sliderLength->setValue(length);
- updateGenerator();
-}
-
-void PasswordGeneratorWidget::passwordSpinBoxChanged()
-{
- if (m_updatingSpinBox) {
- return;
- }
-
- // Interlock so that we don't update twice - this causes issues as the spinbox can go higher than slider
- m_updatingSpinBox = true;
-
- m_ui->sliderLength->setValue(m_ui->spinBoxLength->value());
-
- m_updatingSpinBox = false;
+ m_ui->spinBoxLength->blockSignals(false);
+ m_ui->sliderLength->blockSignals(false);
updateGenerator();
}
-void PasswordGeneratorWidget::dicewareSliderMoved()
+void PasswordGeneratorWidget::passphraseLengthChanged(int length)
{
- m_ui->spinBoxWordCount->setValue(m_ui->sliderWordCount->value());
+ m_ui->spinBoxWordCount->blockSignals(true);
+ m_ui->sliderWordCount->blockSignals(true);
- updateGenerator();
-}
+ m_ui->spinBoxWordCount->setValue(length);
+ m_ui->sliderWordCount->setValue(length);
-void PasswordGeneratorWidget::dicewareSpinBoxChanged()
-{
- m_ui->sliderWordCount->setValue(m_ui->spinBoxWordCount->value());
+ m_ui->spinBoxWordCount->blockSignals(false);
+ m_ui->sliderWordCount->blockSignals(false);
updateGenerator();
}
@@ -334,49 +314,43 @@ void PasswordGeneratorWidget::dicewareSpinBoxChanged()
void PasswordGeneratorWidget::setPasswordVisible(bool visible)
{
m_ui->editNewPassword->setShowPassword(visible);
- bool blockSignals = m_ui->togglePasswordButton->blockSignals(true);
- m_ui->togglePasswordButton->setChecked(visible);
- m_ui->togglePasswordButton->blockSignals(blockSignals);
}
bool PasswordGeneratorWidget::isPasswordVisible() const
{
- return m_ui->togglePasswordButton->isChecked();
+ return m_ui->editNewPassword->isPasswordVisible();
}
-void PasswordGeneratorWidget::selectSimpleMode()
+void PasswordGeneratorWidget::setAdvancedMode(bool state)
{
- m_ui->advancedBar->hide();
- m_ui->excludedChars->hide();
- m_ui->checkBoxExcludeAlike->hide();
- m_ui->checkBoxEnsureEvery->hide();
- m_ui->checkBoxUpper->setChecked(m_ui->checkBoxUpperAdv->isChecked());
- m_ui->checkBoxLower->setChecked(m_ui->checkBoxLowerAdv->isChecked());
- m_ui->checkBoxNumbers->setChecked(m_ui->checkBoxNumbersAdv->isChecked());
- m_ui->checkBoxSpecialChars->setChecked(m_ui->checkBoxBraces->isChecked() | m_ui->checkBoxPunctuation->isChecked()
- | m_ui->checkBoxQuotes->isChecked() | m_ui->checkBoxMath->isChecked()
- | m_ui->checkBoxDashes->isChecked() | m_ui->checkBoxLogograms->isChecked());
- m_ui->checkBoxExtASCII->setChecked(m_ui->checkBoxExtASCIIAdv->isChecked());
- m_ui->simpleBar->show();
-}
+ if (state) {
+ m_ui->simpleBar->hide();
+ m_ui->advancedContainer->show();
+ m_ui->checkBoxUpperAdv->setChecked(m_ui->checkBoxUpper->isChecked());
+ m_ui->checkBoxLowerAdv->setChecked(m_ui->checkBoxLower->isChecked());
+ m_ui->checkBoxNumbersAdv->setChecked(m_ui->checkBoxNumbers->isChecked());
+ m_ui->checkBoxBraces->setChecked(m_ui->checkBoxSpecialChars->isChecked());
+ m_ui->checkBoxPunctuation->setChecked(m_ui->checkBoxSpecialChars->isChecked());
+ m_ui->checkBoxQuotes->setChecked(m_ui->checkBoxSpecialChars->isChecked());
+ m_ui->checkBoxMath->setChecked(m_ui->checkBoxSpecialChars->isChecked());
+ m_ui->checkBoxDashes->setChecked(m_ui->checkBoxSpecialChars->isChecked());
+ m_ui->checkBoxLogograms->setChecked(m_ui->checkBoxSpecialChars->isChecked());
+ m_ui->checkBoxExtASCIIAdv->setChecked(m_ui->checkBoxExtASCII->isChecked());
+ } else {
+ m_ui->simpleBar->show();
+ m_ui->advancedContainer->hide();
+ m_ui->checkBoxUpper->setChecked(m_ui->checkBoxUpperAdv->isChecked());
+ m_ui->checkBoxLower->setChecked(m_ui->checkBoxLowerAdv->isChecked());
+ m_ui->checkBoxNumbers->setChecked(m_ui->checkBoxNumbersAdv->isChecked());
+ m_ui->checkBoxSpecialChars->setChecked(
+ m_ui->checkBoxBraces->isChecked() | m_ui->checkBoxPunctuation->isChecked()
+ | m_ui->checkBoxQuotes->isChecked() | m_ui->checkBoxMath->isChecked() | m_ui->checkBoxDashes->isChecked()
+ | m_ui->checkBoxLogograms->isChecked());
+ m_ui->checkBoxExtASCII->setChecked(m_ui->checkBoxExtASCIIAdv->isChecked());
+ }
-void PasswordGeneratorWidget::selectAdvancedMode()
-{
- m_ui->simpleBar->hide();
- m_ui->checkBoxUpperAdv->setChecked(m_ui->checkBoxUpper->isChecked());
- m_ui->checkBoxLowerAdv->setChecked(m_ui->checkBoxLower->isChecked());
- m_ui->checkBoxNumbersAdv->setChecked(m_ui->checkBoxNumbers->isChecked());
- m_ui->checkBoxBraces->setChecked(m_ui->checkBoxSpecialChars->isChecked());
- m_ui->checkBoxPunctuation->setChecked(m_ui->checkBoxSpecialChars->isChecked());
- m_ui->checkBoxQuotes->setChecked(m_ui->checkBoxSpecialChars->isChecked());
- m_ui->checkBoxMath->setChecked(m_ui->checkBoxSpecialChars->isChecked());
- m_ui->checkBoxDashes->setChecked(m_ui->checkBoxSpecialChars->isChecked());
- m_ui->checkBoxLogograms->setChecked(m_ui->checkBoxSpecialChars->isChecked());
- m_ui->checkBoxExtASCIIAdv->setChecked(m_ui->checkBoxExtASCII->isChecked());
- m_ui->advancedBar->show();
- m_ui->excludedChars->show();
- m_ui->checkBoxExcludeAlike->show();
- m_ui->checkBoxEnsureEvery->show();
+ QApplication::processEvents();
+ adjustSize();
}
void PasswordGeneratorWidget::excludeHexChars()
@@ -384,7 +358,7 @@ void PasswordGeneratorWidget::excludeHexChars()
m_ui->editExcludedChars->setText("GHIJKLMNOPQRSTUVWXYZghijklmnopqrstuvwxyz");
}
-void PasswordGeneratorWidget::colorStrengthIndicator(double entropy)
+void PasswordGeneratorWidget::colorStrengthIndicator(const PasswordHealth& health)
{
// Take the existing stylesheet and convert the text and background color to arguments
QString style = m_ui->entropyProgressBar->styleSheet();
@@ -392,21 +366,30 @@ void PasswordGeneratorWidget::colorStrengthIndicator(double entropy)
QRegularExpression::CaseInsensitiveOption | QRegularExpression::DotMatchesEverythingOption);
style.replace(re, "\\1 %1;");
- // Set the color and background based on entropy
- // colors are taking from the KDE breeze palette
- // <https://community.kde.org/KDE_Visual_Design_Group/HIG/Color>
- if (entropy < 40) {
- m_ui->entropyProgressBar->setStyleSheet(style.arg("#c0392b"));
+ StateColorPalette statePalette;
+ switch (health.quality()) {
+ case PasswordHealth::Quality::Bad:
+ case PasswordHealth::Quality::Poor:
+ m_ui->entropyProgressBar->setStyleSheet(
+ style.arg(statePalette.color(StateColorPalette::HealthCritical).name()));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Poor", "Password quality")));
- } else if (entropy >= 40 && entropy < 65) {
- m_ui->entropyProgressBar->setStyleSheet(style.arg("#f39c1f"));
+ break;
+
+ case PasswordHealth::Quality::Weak:
+ m_ui->entropyProgressBar->setStyleSheet(style.arg(statePalette.color(StateColorPalette::HealthBad).name()));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Weak", "Password quality")));
- } else if (entropy >= 65 && entropy < 100) {
- m_ui->entropyProgressBar->setStyleSheet(style.arg("#11d116"));
+ break;
+
+ case PasswordHealth::Quality::Good:
+ m_ui->entropyProgressBar->setStyleSheet(style.arg(statePalette.color(StateColorPalette::HealthOk).name()));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Good", "Password quality")));
- } else {
- m_ui->entropyProgressBar->setStyleSheet(style.arg("#27ae60"));
+ break;
+
+ case PasswordHealth::Quality::Excellent:
+ m_ui->entropyProgressBar->setStyleSheet(
+ style.arg(statePalette.color(StateColorPalette::HealthExcellent).name()));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Excellent", "Password quality")));
+ break;
}
}
@@ -483,12 +466,14 @@ PasswordGenerator::GeneratorFlags PasswordGeneratorWidget::generatorFlags()
{
PasswordGenerator::GeneratorFlags flags;
- if (m_ui->checkBoxExcludeAlike->isChecked()) {
- flags |= PasswordGenerator::ExcludeLookAlike;
- }
+ if (m_ui->buttonAdvancedMode->isChecked()) {
+ if (m_ui->checkBoxExcludeAlike->isChecked()) {
+ flags |= PasswordGenerator::ExcludeLookAlike;
+ }
- if (m_ui->checkBoxEnsureEvery->isChecked()) {
- flags |= PasswordGenerator::CharFromEveryGroup;
+ if (m_ui->checkBoxEnsureEvery->isChecked()) {
+ flags |= PasswordGenerator::CharFromEveryGroup;
+ }
}
return flags;
@@ -497,87 +482,70 @@ PasswordGenerator::GeneratorFlags PasswordGeneratorWidget::generatorFlags()
void PasswordGeneratorWidget::updateGenerator()
{
if (m_ui->tabWidget->currentIndex() == Password) {
- PasswordGenerator::CharClasses classes = charClasses();
- PasswordGenerator::GeneratorFlags flags = generatorFlags();
+ auto classes = charClasses();
+ auto flags = generatorFlags();
- int minLength = 0;
+ int length = 0;
if (flags.testFlag(PasswordGenerator::CharFromEveryGroup)) {
if (classes.testFlag(PasswordGenerator::LowerLetters)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::UpperLetters)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Numbers)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Braces)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Punctuation)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Quotes)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Dashes)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Math)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::Logograms)) {
- minLength++;
+ ++length;
}
if (classes.testFlag(PasswordGenerator::EASCII)) {
- minLength++;
+ ++length;
}
}
- minLength = qMax(minLength, 1);
-
- if (m_ui->spinBoxLength->value() < minLength) {
- m_updatingSpinBox = true;
- m_ui->spinBoxLength->setValue(minLength);
- m_ui->sliderLength->setValue(minLength);
- m_updatingSpinBox = false;
- }
-
- m_ui->spinBoxLength->setMinimum(minLength);
- m_ui->sliderLength->setMinimum(minLength);
- m_passwordGenerator->setLength(m_ui->spinBoxLength->value());
+ length = qMax(length, m_ui->spinBoxLength->value());
+ m_passwordGenerator->setLength(length);
m_passwordGenerator->setCharClasses(classes);
- if (m_ui->simpleBar->isVisible()) {
- m_passwordGenerator->setExcludedChars("");
- } else {
+ m_passwordGenerator->setFlags(flags);
+ if (m_ui->buttonAdvancedMode->isChecked()) {
+ m_passwordGenerator->setAdditionalChars(m_ui->editAdditionalChars->text());
m_passwordGenerator->setExcludedChars(m_ui->editExcludedChars->text());
+ } else {
+ m_passwordGenerator->setAdditionalChars("");
+ m_passwordGenerator->setExcludedChars("");
}
- m_passwordGenerator->setFlags(flags);
if (m_passwordGenerator->isValid()) {
m_ui->buttonGenerate->setEnabled(true);
} else {
m_ui->buttonGenerate->setEnabled(false);
}
- } else {
- int minWordCount = 1;
-
- if (m_ui->spinBoxWordCount->value() < minWordCount) {
- m_updatingSpinBox = true;
- m_ui->spinBoxWordCount->setValue(minWordCount);
- m_ui->sliderWordCount->setValue(minWordCount);
- m_updatingSpinBox = false;
- }
+ m_ui->clearInclude->setVisible(!m_ui->editAdditionalChars->text().isEmpty());
+ m_ui->clearExclude->setVisible(!m_ui->editExcludedChars->text().isEmpty());
+ } else {
m_dicewareGenerator->setWordCase(
static_cast<PassphraseGenerator::PassphraseWordCase>(m_ui->wordCaseComboBox->currentData().toInt()));
- m_ui->spinBoxWordCount->setMinimum(minWordCount);
- m_ui->sliderWordCount->setMinimum(minWordCount);
-
m_dicewareGenerator->setWordCount(m_ui->spinBoxWordCount->value());
if (!m_ui->comboBoxWordList->currentText().isEmpty()) {
- QString path = filePath()->wordlistPath(m_ui->comboBoxWordList->currentText());
+ QString path = resources()->wordlistPath(m_ui->comboBoxWordList->currentText());
m_dicewareGenerator->setWordList(path);
}
m_dicewareGenerator->setWordSeparator(m_ui->editWordSeparator->text());
diff --git a/src/gui/PasswordGeneratorWidget.h b/src/gui/PasswordGeneratorWidget.h
index b39a2f10f..08409ed22 100644
--- a/src/gui/PasswordGeneratorWidget.h
+++ b/src/gui/PasswordGeneratorWidget.h
@@ -32,6 +32,7 @@ namespace Ui
}
class PasswordGenerator;
+class PasswordHealth;
class PassphraseGenerator;
class PasswordGeneratorWidget : public QWidget
@@ -48,13 +49,12 @@ public:
~PasswordGeneratorWidget();
void loadSettings();
void saveSettings();
- void reset(int length = 0);
+ void setPasswordLength(int length);
void setStandaloneMode(bool standalone);
QString getGeneratedPassword();
bool isPasswordVisible() const;
-protected:
- void showEvent(QShowEvent* event) override;
+ static PasswordGeneratorWidget* popupGenerator(QWidget* parent = nullptr);
public slots:
void regeneratePassword();
@@ -64,25 +64,21 @@ public slots:
signals:
void appliedPassword(const QString& password);
- void dialogTerminated();
+ void closed();
private slots:
void updateButtonsEnabled(const QString& password);
void updatePasswordStrength(const QString& password);
- void selectSimpleMode();
- void selectAdvancedMode();
+ void setAdvancedMode(bool state);
void excludeHexChars();
- void passwordSliderMoved();
- void passwordSpinBoxChanged();
- void dicewareSliderMoved();
- void dicewareSpinBoxChanged();
- void colorStrengthIndicator(double entropy);
+ void passwordLengthChanged(int length);
+ void passphraseLengthChanged(int length);
+ void colorStrengthIndicator(const PasswordHealth& health);
void updateGenerator();
private:
- bool m_updatingSpinBox;
bool m_standalone = false;
PasswordGenerator::CharClasses charClasses();
@@ -91,9 +87,6 @@ private:
const QScopedPointer<PasswordGenerator> m_passwordGenerator;
const QScopedPointer<PassphraseGenerator> m_dicewareGenerator;
const QScopedPointer<Ui::PasswordGeneratorWidget> m_ui;
-
-protected:
- void keyPressEvent(QKeyEvent* e) override;
};
#endif // KEEPASSX_PASSWORDGENERATORWIDGET_H
diff --git a/src/gui/PasswordGeneratorWidget.ui b/src/gui/PasswordGeneratorWidget.ui
index a30077015..17b2432e5 100644
--- a/src/gui/PasswordGeneratorWidget.ui
+++ b/src/gui/PasswordGeneratorWidget.ui
@@ -6,95 +6,17 @@
<rect>
<x>0</x>
<y>0</y>
- <width>716</width>
- <height>468</height>
+ <width>622</width>
+ <height>455</height>
</rect>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
<property name="windowTitle">
- <string/>
+ <string>Generate Password</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,0">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,0,0">
<item>
<layout class="QGridLayout" name="passwordFieldLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <property name="verticalSpacing">
- <number>0</number>
- </property>
- <item row="1" column="1">
- <widget class="QProgressBar" name="entropyProgressBar">
- <property name="minimumSize">
- <size>
- <width>50</width>
- <height>5</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>5</height>
- </size>
- </property>
- <property name="styleSheet">
- <string notr="true">QProgressBar {
- border: none;
- height: 2px;
- font-size: 1px;
- background-color: transparent;
- padding: 0 1px;
-}
-QProgressBar::chunk {
- background-color: #c0392b;
- border-radius: 2px;
-}</string>
- </property>
- <property name="maximum">
- <number>200</number>
- </property>
- <property name="value">
- <number>100</number>
- </property>
- <property name="textVisible">
- <bool>false</bool>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="invertedAppearance">
- <bool>false</bool>
- </property>
- <property name="textDirection">
- <enum>QProgressBar::TopToBottom</enum>
- </property>
- <property name="format">
- <string>%p%</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="labelNewPassword">
- <property name="text">
- <string>Password:</string>
- </property>
- <property name="buddy">
- <cstring>editNewPassword</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
+ <item row="2" column="0">
<layout class="QHBoxLayout" name="passwordStrengthTextLayout">
<item>
<widget class="QLabel" name="strengthLabel">
@@ -139,6 +61,12 @@ QProgressBar::chunk {
</item>
<item>
<widget class="QLabel" name="entropyLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="minimumSize">
<size>
<width>70</width>
@@ -158,1047 +86,1094 @@ QProgressBar::chunk {
</item>
</layout>
</item>
- <item row="0" column="1">
+ <item row="0" column="0">
<widget class="PasswordEdit" name="editNewPassword">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>450</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="accessibleName">
<string>Generated password</string>
</property>
- <property name="maxLength">
- <number>999</number>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QProgressBar" name="entropyProgressBar">
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">QProgressBar {
+ border: none;
+ height: 2px;
+ font-size: 1px;
+ background-color: transparent;
+ padding: 0 1px;
+}
+QProgressBar::chunk {
+ background-color: #c0392b;
+ border-radius: 2px;
+}</string>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="invertedAppearance">
+ <bool>false</bool>
+ </property>
+ <property name="textDirection">
+ <enum>QProgressBar::TopToBottom</enum>
+ </property>
+ <property name="format">
+ <string>%p%</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QToolButton" name="buttonGenerate">
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="accessibleDescription">
+ <string>Regenerate password</string>
+ </property>
+ <property name="shortcut">
+ <string notr="true">Ctrl+R</string>
</property>
</widget>
</item>
<item row="0" column="2">
- <widget class="QToolButton" name="togglePasswordButton">
- <property name="accessibleName">
- <string>Toggle password visibility</string>
+ <widget class="QToolButton" name="buttonCopy">
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Copy password</string>
</property>
<property name="accessibleDescription">
- <string/>
+ <string>Copy password</string>
</property>
- <property name="checkable">
- <bool>true</bool>
+ <property name="shortcut">
+ <string notr="true">Ctrl+C</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <item>
- <widget class="QTabWidget" name="tabWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="tabPosition">
- <enum>QTabWidget::North</enum>
- </property>
- <property name="tabShape">
- <enum>QTabWidget::Rounded</enum>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="passwordWidget">
- <attribute name="title">
- <string>Password</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout">
- <item row="1" column="0">
- <layout class="QHBoxLayout" name="optionsLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
+ <property name="tabPosition">
+ <enum>QTabWidget::North</enum>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="passwordWidget">
+ <attribute name="title">
+ <string>Password</string>
+ </attribute>
+ <layout class="QGridLayout" name="_2">
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="passwordLengthSliderLayout">
+ <property name="spacing">
+ <number>15</number>
+ </property>
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="labelLength">
+ <property name="text">
+ <string>&amp;Length:</string>
</property>
- <item>
- <widget class="QGroupBox" name="groupBox">
- <property name="minimumSize">
- <size>
- <width>580</width>
- <height>0</height>
- </size>
- </property>
- <property name="title">
- <string>Character Types</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QWidget" name="simpleBar" native="true">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="alphabetLayout" stretch="0,0,0,0,0,0,0">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QToolButton" name="checkBoxUpper">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Upper-case letters</string>
- </property>
- <property name="accessibleName">
- <string>Upper-case letters</string>
- </property>
- <property name="accessibleDescription">
- <string/>
- </property>
- <property name="text">
- <string notr="true">A-Z</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxLower">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Lower-case letters</string>
- </property>
- <property name="accessibleName">
- <string>Lower-case letters</string>
- </property>
- <property name="accessibleDescription">
- <string/>
- </property>
- <property name="text">
- <string notr="true">a-z</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxNumbers">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Numbers</string>
- </property>
- <property name="accessibleName">
- <string>Numbers</string>
- </property>
- <property name="accessibleDescription">
- <string/>
- </property>
- <property name="text">
- <string notr="true">0-9</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxSpecialChars">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Special characters</string>
- </property>
- <property name="accessibleName">
- <string>Special characters</string>
- </property>
- <property name="text">
- <string notr="true">/*_&amp; ...</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxExtASCII">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Extended ASCII</string>
- </property>
- <property name="accessibleName">
- <string>Extended ASCII</string>
- </property>
- <property name="text">
- <string>ExtendedASCII</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="buttonAdvancedMode">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Switch to advanced mode</string>
- </property>
- <property name="text">
- <string>Advanced</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="advancedBar" native="true">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QToolButton" name="checkBoxUpperAdv">
- <property name="minimumSize">
- <size>
- <width>40</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Upper-case letters</string>
- </property>
- <property name="accessibleName">
- <string>Upper-case letters</string>
- </property>
- <property name="text">
- <string>A-Z</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxLowerAdv">
- <property name="minimumSize">
- <size>
- <width>40</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Lower-case letters</string>
- </property>
- <property name="accessibleName">
- <string>Lower-case letters</string>
- </property>
- <property name="text">
- <string>a-z</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_6">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QToolButton" name="checkBoxNumbersAdv">
- <property name="minimumSize">
- <size>
- <width>40</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Numbers</string>
- </property>
- <property name="text">
- <string>0-9</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxBraces">
- <property name="minimumSize">
- <size>
- <width>40</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Braces</string>
- </property>
- <property name="accessibleName">
- <string>Braces</string>
- </property>
- <property name="text">
- <string>{[(</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_7">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QToolButton" name="checkBoxPunctuation">
- <property name="minimumSize">
- <size>
- <width>35</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Punctuation</string>
- </property>
- <property name="accessibleName">
- <string>Punctuation</string>
- </property>
- <property name="text">
- <string>.,:;</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxQuotes">
- <property name="minimumSize">
- <size>
- <width>35</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Quotes</string>
- </property>
- <property name="text">
- <string>&quot; '</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_8">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QToolButton" name="checkBoxMath">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Math Symbols</string>
- </property>
- <property name="accessibleName">
- <string>Math Symbols</string>
- </property>
- <property name="text">
- <string>&lt;*+!?=</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxDashes">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Dashes and Slashes</string>
- </property>
- <property name="accessibleName">
- <string>Dashes and Slashes</string>
- </property>
- <property name="text">
- <string>\_|-/</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_9">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item>
- <widget class="QToolButton" name="checkBoxLogograms">
- <property name="minimumSize">
- <size>
- <width>105</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Logograms</string>
- </property>
- <property name="accessibleName">
- <string>Logograms</string>
- </property>
- <property name="text">
- <string>#$%&amp;&amp;@^`~</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="checkBoxExtASCIIAdv">
- <property name="minimumSize">
- <size>
- <width>105</width>
- <height>25</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="toolTip">
- <string>Extended ASCII</string>
- </property>
- <property name="text">
- <string>ExtendedASCII</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_10">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
- </property>
- <item alignment="Qt::AlignTop">
- <widget class="QPushButton" name="buttonSimpleMode">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Switch to simple mode</string>
- </property>
- <property name="text">
- <string>Simple</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="excludedChars" native="true">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <layout class="QGridLayout" name="gridLayout_5">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item row="0" column="1">
- <widget class="QLineEdit" name="editExcludedChars">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Character set to exclude from generated password</string>
- </property>
- <property name="accessibleName">
- <string>Excluded characters</string>
- </property>
- <property name="clearButtonEnabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="labelExcludedChars">
- <property name="text">
- <string>Do not include:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QPushButton" name="buttonAddHex">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>25</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Add non-hex letters to &quot;do not include&quot; list</string>
- </property>
- <property name="accessibleName">
- <string>Hex Passwords</string>
- </property>
- <property name="text">
- <string>Hex</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBoxExcludeAlike">
- <property name="toolTip">
- <string>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</string>
- </property>
- <property name="text">
- <string>Exclude look-alike characters</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBoxEnsureEvery">
- <property name="text">
- <string>Pick characters from every group</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">optionButtons</string>
- </attribute>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
+ <property name="buddy">
+ <cstring>spinBoxLength</cstring>
+ </property>
+ </widget>
</item>
- <item row="0" column="0">
- <layout class="QHBoxLayout" name="passwordLengthSliderLayout">
- <property name="spacing">
- <number>15</number>
+ <item>
+ <widget class="QSlider" name="sliderLength">
+ <property name="accessibleName">
+ <string>Password length</string>
</property>
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
+ <property name="minimum">
+ <number>1</number>
</property>
- <property name="topMargin">
- <number>6</number>
+ <property name="maximum">
+ <number>128</number>
</property>
- <item>
- <widget class="QLabel" name="labelLength">
- <property name="text">
- <string>&amp;Length:</string>
- </property>
- <property name="buddy">
- <cstring>spinBoxLength</cstring>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSlider" name="sliderLength">
- <property name="accessibleName">
- <string>Password length</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>128</number>
- </property>
- <property name="sliderPosition">
- <number>20</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::TicksBelow</enum>
- </property>
- <property name="tickInterval">
- <number>8</number>
- </property>
- </widget>
- </item>
- <item alignment="Qt::AlignRight">
- <widget class="QSpinBox" name="spinBoxLength">
- <property name="accessibleName">
- <string>Password length</string>
+ <property name="sliderPosition">
+ <number>20</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="tickPosition">
+ <enum>QSlider::TicksBelow</enum>
+ </property>
+ <property name="tickInterval">
+ <number>8</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBoxLength">
+ <property name="accessibleName">
+ <string>Password length</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>128</number>
+ </property>
+ <property name="value">
+ <number>20</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonAdvancedMode">
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Switch to advanced mode</string>
+ </property>
+ <property name="text">
+ <string>Advanced</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="minimumSize">
+ <size>
+ <width>580</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Character Types</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QWidget" name="simpleBar" native="true">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="leftMargin">
+ <number>0</number>
</property>
- <property name="minimum">
- <number>1</number>
+ <property name="topMargin">
+ <number>0</number>
</property>
- <property name="maximum">
- <number>999</number>
+ <property name="rightMargin">
+ <number>0</number>
</property>
- <property name="value">
- <number>20</number>
+ <property name="bottomMargin">
+ <number>0</number>
</property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="dicewareWidget">
- <attribute name="title">
- <string>Passphrase</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="1" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="3" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="wordCaseLabel">
+ <item>
+ <widget class="QToolButton" name="checkBoxUpper">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Upper-case letters</string>
+ </property>
+ <property name="accessibleName">
+ <string>Upper-case letters</string>
+ </property>
+ <property name="accessibleDescription">
+ <string/>
+ </property>
<property name="text">
- <string>Word Case:</string>
+ <string notr="true">A-Z</string>
</property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QComboBox" name="comboBoxWordList">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item>
+ <widget class="QToolButton" name="checkBoxLower">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Lower-case letters</string>
+ </property>
+ <property name="accessibleName">
+ <string>Lower-case letters</string>
+ </property>
+ <property name="accessibleDescription">
+ <string/>
+ </property>
+ <property name="text">
+ <string notr="true">a-z</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
</property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
</widget>
</item>
- <item row="2" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="labelWordSeparator">
+ <item>
+ <widget class="QToolButton" name="checkBoxNumbers">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Numbers</string>
+ </property>
+ <property name="accessibleName">
+ <string>Numbers</string>
+ </property>
+ <property name="accessibleDescription">
+ <string/>
+ </property>
<property name="text">
- <string>Word Separator:</string>
+ <string notr="true">0-9</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
</property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
</widget>
</item>
- <item row="0" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="labelWordList">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item>
+ <widget class="QToolButton" name="checkBoxSpecialChars">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Special characters</string>
+ </property>
+ <property name="accessibleName">
+ <string>Special characters</string>
</property>
<property name="text">
- <string>Wordlist:</string>
+ <string notr="true">/*_&amp; ...</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
</property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
</widget>
</item>
- <item row="4" column="1">
- <spacer name="verticalSpacer_3">
+ <item>
+ <widget class="QToolButton" name="checkBoxExtASCII">
+ <property name="minimumSize">
+ <size>
+ <width>105</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Extended ASCII</string>
+ </property>
+ <property name="accessibleName">
+ <string>Extended ASCII</string>
+ </property>
+ <property name="text">
+ <string>ExtendedASCII</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
<property name="orientation">
- <enum>Qt::Vertical</enum>
+ <enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>20</width>
- <height>40</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
</spacer>
</item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <property name="sizeConstraint">
- <enum>QLayout::SetMinimumSize</enum>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="advancedContainer" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QWidget" name="advancedBar" native="true">
+ <property name="enabled">
+ <bool>true</bool>
</property>
- <item>
- <widget class="QSlider" name="sliderWordCount">
- <property name="minimum">
- <number>1</number>
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QToolButton" name="checkBoxUpperAdv">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Upper-case letters</string>
+ </property>
+ <property name="accessibleName">
+ <string>Upper-case letters</string>
+ </property>
+ <property name="text">
+ <string>A-Z</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="checkBoxLowerAdv">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Lower-case letters</string>
+ </property>
+ <property name="accessibleName">
+ <string>Lower-case letters</string>
+ </property>
+ <property name="text">
+ <string>a-z</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QToolButton" name="checkBoxNumbersAdv">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Numbers</string>
+ </property>
+ <property name="text">
+ <string>0-9</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="checkBoxBraces">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Braces</string>
+ </property>
+ <property name="accessibleName">
+ <string>Braces</string>
+ </property>
+ <property name="text">
+ <string>{[(</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QToolButton" name="checkBoxPunctuation">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Punctuation</string>
+ </property>
+ <property name="accessibleName">
+ <string>Punctuation</string>
+ </property>
+ <property name="text">
+ <string>.,:;</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="checkBoxQuotes">
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Quotes</string>
+ </property>
+ <property name="text">
+ <string>&quot; '</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_8">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QToolButton" name="checkBoxMath">
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Math Symbols</string>
+ </property>
+ <property name="accessibleName">
+ <string>Math Symbols</string>
+ </property>
+ <property name="text">
+ <string>&lt;*+!?=</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="checkBoxDashes">
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Dashes and Slashes</string>
+ </property>
+ <property name="accessibleName">
+ <string>Dashes and Slashes</string>
+ </property>
+ <property name="text">
+ <string>\_|-/</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_9">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QToolButton" name="checkBoxLogograms">
+ <property name="minimumSize">
+ <size>
+ <width>105</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Logograms</string>
+ </property>
+ <property name="accessibleName">
+ <string>Logograms</string>
+ </property>
+ <property name="text">
+ <string>#$%&amp;&amp;@^`~</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="checkBoxExtASCIIAdv">
+ <property name="minimumSize">
+ <size>
+ <width>105</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
+ </property>
+ <property name="toolTip">
+ <string>Extended ASCII</string>
+ </property>
+ <property name="text">
+ <string>ExtendedASCII</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Also choose from:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="editAdditionalChars">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
</property>
- <property name="maximum">
- <number>40</number>
+ <property name="toolTip">
+ <string>Additional characters to use for the generated password</string>
</property>
- <property name="value">
- <number>6</number>
+ <property name="accessibleName">
+ <string>Additional characters</string>
</property>
- <property name="sliderPosition">
- <number>6</number>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="editExcludedChars">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
</property>
- <property name="tickPosition">
- <enum>QSlider::TicksBelow</enum>
+ <property name="toolTip">
+ <string>Character set to exclude from generated password</string>
</property>
- <property name="tickInterval">
- <number>8</number>
+ <property name="accessibleName">
+ <string>Excluded characters</string>
</property>
</widget>
</item>
- <item>
- <widget class="QSpinBox" name="spinBoxWordCount">
- <property name="minimum">
- <number>1</number>
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelExcludedChars">
+ <property name="text">
+ <string>Do not include:</string>
</property>
- <property name="maximum">
- <number>100</number>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QPushButton" name="buttonAddHex">
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
</property>
- <property name="value">
- <number>6</number>
+ <property name="toolTip">
+ <string>Add non-hex letters to &quot;do not include&quot; list</string>
+ </property>
+ <property name="accessibleName">
+ <string>Hex Passwords</string>
+ </property>
+ <property name="text">
+ <string>Hex</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="1" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="labelWordCount">
- <property name="text">
- <string>Word Co&amp;unt:</string>
+ <item>
+ <widget class="QCheckBox" name="checkBoxExcludeAlike">
+ <property name="toolTip">
+ <string>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</string>
</property>
- <property name="buddy">
- <cstring>spinBoxLength</cstring>
+ <property name="text">
+ <string>Exclude look-alike characters</string>
</property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="editWordSeparator">
+ <item>
+ <widget class="QCheckBox" name="checkBoxEnsureEvery">
<property name="text">
- <string/>
+ <string>Pick characters from every group</string>
</property>
+ <attribute name="buttonGroup">
+ <string notr="true">optionButtons</string>
+ </attribute>
</widget>
</item>
- <item row="3" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QComboBox" name="wordCaseComboBox"/>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="excludedChars" native="true">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="dicewareWidget">
+ <attribute name="title">
+ <string>Passphrase</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="3" column="0" alignment="Qt::AlignRight">
+ <widget class="QLabel" name="wordCaseLabel">
+ <property name="text">
+ <string>Word Case:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="comboBoxWordList">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" alignment="Qt::AlignRight">
+ <widget class="QLabel" name="labelWordSeparator">
+ <property name="text">
+ <string>Word Separator:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" alignment="Qt::AlignRight">
+ <widget class="QLabel" name="labelWordList">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Wordlist:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QSlider" name="sliderWordCount">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>40</number>
+ </property>
+ <property name="value">
+ <number>6</number>
+ </property>
+ <property name="sliderPosition">
+ <number>6</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="tickPosition">
+ <enum>QSlider::TicksBelow</enum>
+ </property>
+ <property name="tickInterval">
+ <number>8</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBoxWordCount">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>100</number>
+ </property>
+ <property name="value">
+ <number>6</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0" alignment="Qt::AlignRight">
+ <widget class="QLabel" name="labelWordCount">
+ <property name="text">
+ <string>Word Count:</string>
+ </property>
+ <property name="buddy">
+ <cstring>spinBoxLength</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="editWordSeparator">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <widget class="QComboBox" name="wordCaseComboBox"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
- </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonClose">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="shortcut">
+ <string>Esc</string>
+ </property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="buttonGenerate">
- <property name="toolTip">
- <string>Regenerate password</string>
- </property>
- <property name="accessibleDescription">
- <string/>
- </property>
- <property name="text">
- <string>Regenerate</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="buttonCopy">
- <property name="toolTip">
- <string>Copy password</string>
- </property>
- <property name="accessibleDescription">
- <string/>
- </property>
- <property name="text">
- <string>Copy</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="buttonApply">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="toolTip">
- <string>Accept password</string>
- </property>
- <property name="accessibleDescription">
- <string/>
- </property>
- <property name="text">
- <string>Accept</string>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="QPushButton" name="buttonApply">
+ <property name="text">
+ <string>Apply Password</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+S</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
</layout>
</item>
<item>
- <spacer name="verticalSpacer_4">
+ <spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
@@ -1208,6 +1183,22 @@ QProgressBar::chunk {
</spacer>
</item>
</layout>
+ <action name="clearInclude">
+ <property name="text">
+ <string>Clear</string>
+ </property>
+ <property name="toolTip">
+ <string>Clear</string>
+ </property>
+ </action>
+ <action name="clearExclude">
+ <property name="text">
+ <string>Clear</string>
+ </property>
+ <property name="toolTip">
+ <string>Clear</string>
+ </property>
+ </action>
</widget>
<customwidgets>
<customwidget>
@@ -1219,16 +1210,18 @@ QProgressBar::chunk {
</customwidgets>
<tabstops>
<tabstop>editNewPassword</tabstop>
- <tabstop>togglePasswordButton</tabstop>
+ <tabstop>buttonGenerate</tabstop>
+ <tabstop>buttonCopy</tabstop>
<tabstop>tabWidget</tabstop>
<tabstop>sliderLength</tabstop>
<tabstop>spinBoxLength</tabstop>
+ <tabstop>buttonAdvancedMode</tabstop>
+ <tabstop>groupBox</tabstop>
<tabstop>checkBoxUpper</tabstop>
<tabstop>checkBoxLower</tabstop>
<tabstop>checkBoxNumbers</tabstop>
<tabstop>checkBoxSpecialChars</tabstop>
<tabstop>checkBoxExtASCII</tabstop>
- <tabstop>buttonAdvancedMode</tabstop>
<tabstop>checkBoxUpperAdv</tabstop>
<tabstop>checkBoxNumbersAdv</tabstop>
<tabstop>checkBoxPunctuation</tabstop>
@@ -1239,17 +1232,17 @@ QProgressBar::chunk {
<tabstop>checkBoxQuotes</tabstop>
<tabstop>checkBoxDashes</tabstop>
<tabstop>checkBoxExtASCIIAdv</tabstop>
+ <tabstop>editAdditionalChars</tabstop>
<tabstop>editExcludedChars</tabstop>
<tabstop>buttonAddHex</tabstop>
<tabstop>checkBoxExcludeAlike</tabstop>
<tabstop>checkBoxEnsureEvery</tabstop>
- <tabstop>buttonSimpleMode</tabstop>
<tabstop>comboBoxWordList</tabstop>
<tabstop>sliderWordCount</tabstop>
<tabstop>spinBoxWordCount</tabstop>
<tabstop>editWordSeparator</tabstop>
- <tabstop>buttonGenerate</tabstop>
- <tabstop>buttonCopy</tabstop>
+ <tabstop>wordCaseComboBox</tabstop>
+ <tabstop>buttonClose</tabstop>
<tabstop>buttonApply</tabstop>
</tabstops>
<resources/>
diff --git a/src/gui/SearchHelpWidget.ui b/src/gui/SearchHelpWidget.ui
index 45e0d0bc6..ebc62e991 100644
--- a/src/gui/SearchHelpWidget.ui
+++ b/src/gui/SearchHelpWidget.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>334</width>
- <height>249</height>
+ <width>397</width>
+ <height>264</height>
</rect>
</property>
<property name="windowTitle">
@@ -17,34 +17,13 @@
<bool>false</bool>
</property>
<property name="frameShape">
- <enum>QFrame::Box</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Plain</enum>
+ <enum>QFrame::StyledPanel</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetDefaultConstraint</enum>
- </property>
- <property name="leftMargin">
- <number>5</number>
- </property>
- <property name="topMargin">
- <number>5</number>
- </property>
- <property name="rightMargin">
- <number>5</number>
- </property>
- <property name="bottomMargin">
- <number>5</number>
- </property>
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -58,12 +37,15 @@
<property name="text">
<string>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_24">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -77,6 +59,9 @@
<property name="text">
<string>Every search term must match (ie, logical AND)</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
</widget>
</item>
<item>
@@ -93,24 +78,6 @@
<string>Modifiers</string>
</property>
<layout class="QFormLayout" name="formLayout">
- <property name="horizontalSpacing">
- <number>8</number>
- </property>
- <property name="verticalSpacing">
- <number>8</number>
- </property>
- <property name="leftMargin">
- <number>9</number>
- </property>
- <property name="topMargin">
- <number>10</number>
- </property>
- <property name="rightMargin">
- <number>9</number>
- </property>
- <property name="bottomMargin">
- <number>9</number>
- </property>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="minimumSize">
@@ -219,21 +186,6 @@
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
- <property name="leftMargin">
- <number>15</number>
- </property>
- <property name="topMargin">
- <number>10</number>
- </property>
- <property name="rightMargin">
- <number>15</number>
- </property>
- <property name="horizontalSpacing">
- <number>8</number>
- </property>
- <property name="verticalSpacing">
- <number>5</number>
- </property>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
@@ -283,6 +235,13 @@
</property>
</widget>
</item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_16">
+ <property name="text">
+ <string notr="true">group (g)</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
@@ -296,12 +255,6 @@
<string>Term Wildcards</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
- <property name="horizontalSpacing">
- <number>8</number>
- </property>
- <property name="verticalSpacing">
- <number>8</number>
- </property>
<item row="0" column="0">
<widget class="QLabel" name="label_18">
<property name="minimumSize">
@@ -401,9 +354,6 @@
<string>Examples</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>8</number>
- </property>
<item>
<widget class="QLabel" name="label_9">
<property name="sizePolicy">
diff --git a/src/gui/SearchWidget.cpp b/src/gui/SearchWidget.cpp
index 822d40ba1..1c7b683c1 100644
--- a/src/gui/SearchWidget.cpp
+++ b/src/gui/SearchWidget.cpp
@@ -25,7 +25,7 @@
#include <QToolButton>
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/widgets/PopupHelpWidget.h"
SearchWidget::SearchWidget(QWidget* parent)
@@ -38,7 +38,6 @@ SearchWidget::SearchWidget(QWidget* parent)
setFocusProxy(m_ui->searchEdit);
m_helpWidget = new PopupHelpWidget(m_ui->searchEdit);
- m_helpWidget->setOffset(QPoint(0, 1));
Ui::SearchHelpWidget helpUi;
helpUi.setupUi(m_helpWidget);
@@ -68,15 +67,15 @@ SearchWidget::SearchWidget(QWidget* parent)
m_actionLimitGroup = m_searchMenu->addAction(tr("Limit search to selected group"), this, SLOT(updateLimitGroup()));
m_actionLimitGroup->setObjectName("actionSearchLimitGroup");
m_actionLimitGroup->setCheckable(true);
- m_actionLimitGroup->setChecked(config()->get("SearchLimitGroup", false).toBool());
+ m_actionLimitGroup->setChecked(config()->get(Config::SearchLimitGroup).toBool());
- m_ui->searchIcon->setIcon(filePath()->icon("actions", "system-search"));
+ m_ui->searchIcon->setIcon(resources()->icon("system-search"));
m_ui->searchEdit->addAction(m_ui->searchIcon, QLineEdit::LeadingPosition);
- m_ui->helpIcon->setIcon(filePath()->icon("actions", "system-help"));
+ m_ui->helpIcon->setIcon(resources()->icon("system-help"));
m_ui->searchEdit->addAction(m_ui->helpIcon, QLineEdit::TrailingPosition);
- m_ui->clearIcon->setIcon(filePath()->icon("actions", "edit-clear-locationbar-rtl"));
+ m_ui->clearIcon->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
m_ui->clearIcon->setVisible(false);
m_ui->searchEdit->addAction(m_ui->clearIcon, QLineEdit::TrailingPosition);
@@ -115,15 +114,16 @@ bool SearchWidget::eventFilter(QObject* obj, QEvent* event)
return true;
}
}
- } else if (event->type() == QEvent::FocusOut) {
- if (config()->get("security/clearsearch").toBool()) {
- int timeout = config()->get("security/clearsearchtimeout").toInt();
+ } else if (event->type() == QEvent::FocusOut && !m_ui->searchEdit->text().isEmpty()) {
+ if (config()->get(Config::Security_ClearSearch).toBool()) {
+ int timeout = config()->get(Config::Security_ClearSearchTimeout).toInt();
if (timeout > 0) {
// Auto-clear search after set timeout (5 minutes by default)
m_clearSearchTimer->start(timeout * 60000); // 60 sec * 1000 ms
}
}
} else if (event->type() == QEvent::FocusIn) {
+ // Never clear the search if we are using it
m_clearSearchTimer->stop();
}
@@ -137,8 +137,11 @@ void SearchWidget::connectSignals(SignalMultiplexer& mx)
mx.connect(this, SIGNAL(caseSensitiveChanged(bool)), SLOT(setSearchCaseSensitive(bool)));
mx.connect(this, SIGNAL(limitGroupChanged(bool)), SLOT(setSearchLimitGroup(bool)));
mx.connect(this, SIGNAL(copyPressed()), SLOT(copyPassword()));
- mx.connect(this, SIGNAL(downPressed()), SLOT(setFocus()));
+ mx.connect(this, SIGNAL(downPressed()), SLOT(focusOnEntries()));
mx.connect(SIGNAL(clearSearch()), m_ui->searchEdit, SLOT(clear()));
+ mx.connect(SIGNAL(entrySelectionChanged()), this, SLOT(resetSearchClearTimer()));
+ mx.connect(SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(resetSearchClearTimer()));
+ mx.connect(SIGNAL(databaseUnlocked()), this, SLOT(searchFocus()));
mx.connect(m_ui->searchEdit, SIGNAL(returnPressed()), SLOT(switchToEntryEdit()));
}
@@ -147,8 +150,6 @@ void SearchWidget::databaseChanged(DatabaseWidget* dbWidget)
if (dbWidget != nullptr) {
// Set current search text from this database
m_ui->searchEdit->setText(dbWidget->getCurrentSearch());
- // Keyboard focus on search widget at database unlocking
- connect(dbWidget, SIGNAL(databaseUnlocked()), this, SLOT(searchFocus()));
// Enforce search policy
emit caseSensitiveChanged(m_actionCaseSensitive->isChecked());
emit limitGroupChanged(m_actionLimitGroup->isChecked());
@@ -177,6 +178,14 @@ void SearchWidget::startSearch()
search(m_ui->searchEdit->text());
}
+void SearchWidget::resetSearchClearTimer()
+{
+ // Restart the search clear timer if it is running
+ if (m_clearSearchTimer->isActive()) {
+ m_clearSearchTimer->start();
+ }
+}
+
void SearchWidget::updateCaseSensitive()
{
emit caseSensitiveChanged(m_actionCaseSensitive->isChecked());
@@ -190,7 +199,7 @@ void SearchWidget::setCaseSensitive(bool state)
void SearchWidget::updateLimitGroup()
{
- config()->set("SearchLimitGroup", m_actionLimitGroup->isChecked());
+ config()->set(Config::SearchLimitGroup, m_actionLimitGroup->isChecked());
emit limitGroupChanged(m_actionLimitGroup->isChecked());
}
diff --git a/src/gui/SearchWidget.h b/src/gui/SearchWidget.h
index f3646c362..1a40aba95 100644
--- a/src/gui/SearchWidget.h
+++ b/src/gui/SearchWidget.h
@@ -70,6 +70,7 @@ private slots:
void searchFocus();
void toggleHelp();
void showSearchMenu();
+ void resetSearchClearTimer();
private:
const QScopedPointer<Ui::SearchWidget> m_ui;
diff --git a/src/gui/SearchWidget.ui b/src/gui/SearchWidget.ui
index 93fbbdee5..74cc468cf 100644
--- a/src/gui/SearchWidget.ui
+++ b/src/gui/SearchWidget.ui
@@ -6,17 +6,11 @@
<rect>
<x>0</x>
<y>0</y>
- <width>630</width>
+ <width>465</width>
<height>34</height>
</rect>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,4">
+ <layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>3</number>
</property>
@@ -30,38 +24,19 @@
<number>0</number>
</property>
<item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Minimum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>30</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
<widget class="QLineEdit" name="searchEdit">
<property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
- <width>0</width>
+ <width>150</width>
<height>0</height>
</size>
</property>
- <property name="styleSheet">
- <string notr="true">padding:3px</string>
- </property>
<property name="placeholderText">
<string/>
</property>
diff --git a/src/gui/TotpDialog.cpp b/src/gui/TotpDialog.cpp
index 639eb0ebd..871c2863c 100644
--- a/src/gui/TotpDialog.cpp
+++ b/src/gui/TotpDialog.cpp
@@ -65,10 +65,10 @@ TotpDialog::~TotpDialog()
void TotpDialog::copyToClipboard()
{
clipboard()->setText(m_entry->totp());
- if (config()->get("HideWindowOnCopy").toBool()) {
- if (config()->get("MinimizeOnCopy").toBool()) {
- getMainWindow()->showMinimized();
- } else if (config()->get("DropToBackgroundOnCopy").toBool()) {
+ if (config()->get(Config::HideWindowOnCopy).toBool()) {
+ if (config()->get(Config::MinimizeOnCopy).toBool()) {
+ getMainWindow()->minimizeOrHide();
+ } else if (config()->get(Config::DropToBackgroundOnCopy).toBool()) {
getMainWindow()->lower();
window()->lower();
}
diff --git a/src/gui/TotpExportSettingsDialog.cpp b/src/gui/TotpExportSettingsDialog.cpp
index 178cd6d96..f73b9877a 100644
--- a/src/gui/TotpExportSettingsDialog.cpp
+++ b/src/gui/TotpExportSettingsDialog.cpp
@@ -103,10 +103,10 @@ TotpExportSettingsDialog::TotpExportSettingsDialog(DatabaseWidget* parent, Entry
void TotpExportSettingsDialog::copyToClipboard()
{
clipboard()->setText(m_totpUri);
- if (config()->get("HideWindowOnCopy").toBool()) {
- if (config()->get("MinimizeOnCopy").toBool()) {
- getMainWindow()->showMinimized();
- } else if (config()->get("DropToBackgroundOnCopy").toBool()) {
+ if (config()->get(Config::HideWindowOnCopy).toBool()) {
+ if (config()->get(Config::MinimizeOnCopy).toBool()) {
+ getMainWindow()->minimizeOrHide();
+ } else if (config()->get(Config::DropToBackgroundOnCopy).toBool()) {
getMainWindow()->lower();
window()->lower();
}
diff --git a/src/gui/TotpSetupDialog.ui b/src/gui/TotpSetupDialog.ui
index 84ba4cb54..c70dc00c7 100644
--- a/src/gui/TotpSetupDialog.ui
+++ b/src/gui/TotpSetupDialog.ui
@@ -216,7 +216,9 @@
<tabstop>radioDefault</tabstop>
<tabstop>radioSteam</tabstop>
<tabstop>radioCustom</tabstop>
+ <tabstop>algorithmComboBox</tabstop>
<tabstop>stepSpinBox</tabstop>
+ <tabstop>digitsSpinBox</tabstop>
</tabstops>
<resources/>
<connections/>
diff --git a/src/gui/URLEdit.cpp b/src/gui/URLEdit.cpp
index 4dc2a55c2..428a918db 100644
--- a/src/gui/URLEdit.cpp
+++ b/src/gui/URLEdit.cpp
@@ -21,7 +21,7 @@
#include <QRegularExpression>
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "core/Tools.h"
#include "gui/Font.h"
@@ -30,7 +30,7 @@ const QColor URLEdit::ErrorColor = QColor(255, 125, 125);
URLEdit::URLEdit(QWidget* parent)
: QLineEdit(parent)
{
- const QIcon errorIcon = filePath()->icon("status", "dialog-error");
+ const QIcon errorIcon = resources()->icon("dialog-error");
m_errorAction = addAction(errorIcon, QLineEdit::TrailingPosition);
m_errorAction->setVisible(false);
m_errorAction->setToolTip(tr("Invalid URL"));
diff --git a/src/gui/UpdateCheckDialog.cpp b/src/gui/UpdateCheckDialog.cpp
index 2f6d1fc48..db817a74b 100644
--- a/src/gui/UpdateCheckDialog.cpp
+++ b/src/gui/UpdateCheckDialog.cpp
@@ -16,7 +16,7 @@
*/
#include "UpdateCheckDialog.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "ui_UpdateCheckDialog.h"
#include "updatecheck/UpdateChecker.h"
@@ -28,7 +28,7 @@ UpdateCheckDialog::UpdateCheckDialog(QWidget* parent)
setWindowFlags(Qt::Window);
setAttribute(Qt::WA_DeleteOnClose);
- m_ui->iconLabel->setPixmap(filePath()->applicationIcon().pixmap(48));
+ m_ui->iconLabel->setPixmap(resources()->applicationIcon().pixmap(48));
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close()));
connect(UpdateChecker::instance(),
diff --git a/src/gui/WelcomeWidget.cpp b/src/gui/WelcomeWidget.cpp
index 35cce553e..5e87a0883 100644
--- a/src/gui/WelcomeWidget.cpp
+++ b/src/gui/WelcomeWidget.cpp
@@ -22,7 +22,7 @@
#include "config-keepassx.h"
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
WelcomeWidget::WelcomeWidget(QWidget* parent)
: QWidget(parent)
@@ -36,15 +36,10 @@ WelcomeWidget::WelcomeWidget(QWidget* parent)
welcomeLabelFont.setPointSize(welcomeLabelFont.pointSize() + 4);
m_ui->welcomeLabel->setFont(welcomeLabelFont);
- m_ui->iconLabel->setPixmap(filePath()->applicationIcon().pixmap(64));
+ m_ui->iconLabel->setPixmap(resources()->applicationIcon().pixmap(64));
refreshLastDatabases();
- bool recent_visibility = (m_ui->recentListWidget->count() > 0);
- m_ui->startLabel->setVisible(!recent_visibility);
- m_ui->recentListWidget->setVisible(recent_visibility);
- m_ui->recentLabel->setVisible(recent_visibility);
-
connect(m_ui->buttonNewDatabase, SIGNAL(clicked()), SIGNAL(newDatabase()));
connect(m_ui->buttonOpenDatabase, SIGNAL(clicked()), SIGNAL(openDatabase()));
connect(m_ui->buttonImportKeePass1, SIGNAL(clicked()), SIGNAL(importKeePass1Database()));
@@ -62,28 +57,57 @@ WelcomeWidget::~WelcomeWidget()
void WelcomeWidget::openDatabaseFromFile(QListWidgetItem* item)
{
- if (item->text().isEmpty()) {
+ if (!item || item->text().isEmpty()) {
return;
}
emit openDatabaseFile(item->text());
}
+void WelcomeWidget::removeFromLastDatabases(QListWidgetItem* item)
+{
+ if (!item || item->text().isEmpty()) {
+ return;
+ }
+
+ if (config()->get(Config::RememberLastDatabases).toBool()) {
+ QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList();
+ lastDatabases.removeOne(item->text());
+ config()->set(Config::LastDatabases, lastDatabases);
+ }
+ refreshLastDatabases();
+}
+
void WelcomeWidget::refreshLastDatabases()
{
m_ui->recentListWidget->clear();
- const QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList();
+ const QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList();
for (const QString& database : lastDatabases) {
QListWidgetItem* itm = new QListWidgetItem;
itm->setText(database);
m_ui->recentListWidget->addItem(itm);
}
+
+ bool recent_visibility = (m_ui->recentListWidget->count() > 0);
+ m_ui->startLabel->setVisible(!recent_visibility);
+ m_ui->recentListWidget->setVisible(recent_visibility);
+ m_ui->recentLabel->setVisible(recent_visibility);
}
void WelcomeWidget::keyPressEvent(QKeyEvent* event)
{
- if (m_ui->recentListWidget->hasFocus() && (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)) {
- openDatabaseFromFile(m_ui->recentListWidget->currentItem());
+ if (m_ui->recentListWidget->hasFocus()) {
+ if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) {
+ openDatabaseFromFile(m_ui->recentListWidget->currentItem());
+ } else if (event->key() == Qt::Key_Delete || event->key() == Qt::Key_Backspace) {
+ removeFromLastDatabases(m_ui->recentListWidget->currentItem());
+ }
}
QWidget::keyPressEvent(event);
}
+
+void WelcomeWidget::showEvent(QShowEvent* event)
+{
+ refreshLastDatabases();
+ QWidget::showEvent(event);
+}
diff --git a/src/gui/WelcomeWidget.h b/src/gui/WelcomeWidget.h
index de4956779..13850e85a 100644
--- a/src/gui/WelcomeWidget.h
+++ b/src/gui/WelcomeWidget.h
@@ -46,12 +46,14 @@ signals:
protected:
void keyPressEvent(QKeyEvent* event) override;
+ void showEvent(QShowEvent* event) override;
private slots:
void openDatabaseFromFile(QListWidgetItem* item);
private:
const QScopedPointer<Ui::WelcomeWidget> m_ui;
+ void removeFromLastDatabases(QListWidgetItem* item);
};
#endif // KEEPASSX_WELCOMEWIDGET_H
diff --git a/src/gui/csvImport/CsvImportWidget.cpp b/src/gui/csvImport/CsvImportWidget.cpp
index 6e6c282b9..01fd5fc89 100644
--- a/src/gui/csvImport/CsvImportWidget.cpp
+++ b/src/gui/csvImport/CsvImportWidget.cpp
@@ -39,69 +39,26 @@ CsvImportWidget::CsvImportWidget(QWidget* parent)
, m_comboModel(new QStringListModel(this))
, m_columnHeader(QStringList() << QObject::tr("Group") << QObject::tr("Title") << QObject::tr("Username")
<< QObject::tr("Password") << QObject::tr("URL") << QObject::tr("Notes")
- << QObject::tr("Last Modified") << QObject::tr("Created")
- /* << QObject::tr("Future field1") */)
-{
- m_ui->setupUi(this);
-
- m_ui->comboBoxCodec->addItems(QStringList() << "UTF-8"
- << "Windows-1252"
- << "UTF-16"
- << "UTF-16LE");
- m_ui->comboBoxFieldSeparator->addItems(QStringList() << ","
- << ";"
- << "-"
- << ":"
- << "."
- << "TAB (\\t)");
- m_fieldSeparatorList = QStringList() << ","
+ << QObject::tr("Last Modified") << QObject::tr("Created"))
+ , m_fieldSeparatorList(QStringList() << ","
<< ";"
<< "-"
<< ":"
<< "."
- << "\t";
- m_ui->comboBoxTextQualifier->addItems(QStringList() << "\""
- << "'"
- << ":"
- << "."
- << "|");
- m_ui->comboBoxComment->addItems(QStringList() << "#"
- << ";"
- << ":"
- << "@");
+ << "\t")
+{
+ m_ui->setupUi(this);
+
m_ui->tableViewFields->setSelectionMode(QAbstractItemView::NoSelection);
m_ui->tableViewFields->setFocusPolicy(Qt::NoFocus);
m_ui->messageWidget->setHidden(true);
- for (int i = 0; i < m_columnHeader.count(); ++i) {
- QLabel* label = new QLabel(m_columnHeader.at(i), this);
- label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
- QFont font = label->font();
- font.setBold(false);
- label->setFont(font);
-
- QComboBox* combo = new QComboBox(this);
- font = combo->font();
- font.setBold(false);
- combo->setFont(font);
- m_combos.append(combo);
+ m_combos << m_ui->groupCombo << m_ui->titleCombo << m_ui->usernameCombo << m_ui->passwordCombo << m_ui->urlCombo
+ << m_ui->notesCombo << m_ui->lastModifiedCombo << m_ui->createdCombo;
+
+ for (auto combo : m_combos) {
combo->setModel(m_comboModel);
-#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
- connect(combo, QOverload<int>::of(&QComboBox::currentIndexChanged), [=] { comboChanged(combo, i); });
-#else
- connect(combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=] {
- comboChanged(combo, i);
- });
-#endif
-
- // layout labels and combo fields in column-first order
- int combo_rows = 1 + (m_columnHeader.count() - 1) / 2;
- int x = i % combo_rows;
- int y = 2 * (i / combo_rows);
- m_ui->gridLayout_combos->addWidget(label, x, y);
- m_ui->gridLayout_combos->addWidget(combo, x, y + 1);
- QSpacerItem* item = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);
- m_ui->gridLayout_combos->addItem(item, x, y + 2);
+ connect(combo, SIGNAL(currentIndexChanged(int)), SLOT(comboChanged(int)));
}
m_parserModel->setHeaderLabels(m_columnHeader);
@@ -119,12 +76,10 @@ CsvImportWidget::CsvImportWidget(QWidget* parent)
connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
}
-void CsvImportWidget::comboChanged(QComboBox* currentSender, int comboId)
+void CsvImportWidget::comboChanged(int index)
{
- if (currentSender->currentIndex() != -1) {
- // this line is the one that actually updates GUI table
- m_parserModel->mapColumns(currentSender->currentIndex(), comboId);
- }
+ // this line is the one that actually updates GUI table
+ m_parserModel->mapColumns(index, m_combos.indexOf(qobject_cast<QComboBox*>(sender())));
updateTableview();
}
@@ -167,19 +122,17 @@ void CsvImportWidget::updatePreview()
m_ui->spinBoxSkip->setRange(minSkip, qMax(minSkip, m_parserModel->rowCount() - 1));
m_ui->spinBoxSkip->setValue(minSkip);
- int emptyId = 0;
- QString columnName;
- QStringList list(tr("Not present in CSV file"));
-
+ QStringList list(tr("Not Present"));
for (int i = 1; i < m_parserModel->getCsvCols(); ++i) {
if (m_ui->checkBoxFieldNames->isChecked()) {
- columnName = m_parserModel->getCsvTable().at(0).at(i);
+ auto columnName = m_parserModel->getCsvTable().at(0).at(i);
if (columnName.isEmpty()) {
- columnName = "<" + tr("Empty fieldname %1").arg(++emptyId) + ">";
+ list << QString(tr("Column %1").arg(i));
+ } else {
+ list << columnName;
}
- list << columnName;
} else {
- list << QString(tr("column %1").arg(i));
+ list << QString(tr("Column %1").arg(i));
}
}
m_comboModel->setStringList(list);
@@ -221,7 +174,6 @@ void CsvImportWidget::parse()
} else {
m_ui->messageWidget->setHidden(true);
}
- QWidget::adjustSize();
}
QString CsvImportWidget::formatStatusText() const
@@ -294,27 +246,30 @@ void CsvImportWidget::setRootGroup()
for (int r = 0; r < m_parserModel->rowCount(); ++r) {
// use validity of second column as a GO/NOGO for all others fields
- if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid())
+ if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) {
continue;
+ }
groupLabel = m_parserModel->data(m_parserModel->index(r, 0)).toString();
// check if group name is either "root", "" (empty) or some other label
groupList = groupLabel.split("/", QString::SkipEmptyParts);
- if (groupList.isEmpty())
+ if (groupList.isEmpty()) {
is_empty = true;
- else if (not groupList.first().compare("Root", Qt::CaseSensitive))
+ } else if (not groupList.first().compare("Root", Qt::CaseSensitive)) {
is_root = true;
- else if (not groupLabel.compare(""))
+ } else if (not groupLabel.compare("")) {
is_empty = true;
- else
+ } else {
is_label = true;
+ }
groupList.clear();
}
- if ((is_empty and is_root) or (is_label and not is_empty and is_root))
+ if ((is_empty and is_root) or (is_label and not is_empty and is_root)) {
m_db->rootGroup()->setName("CSV IMPORTED");
- else
+ } else {
m_db->rootGroup()->setName("Root");
+ }
}
Group* CsvImportWidget::splitGroups(const QString& label)
diff --git a/src/gui/csvImport/CsvImportWidget.h b/src/gui/csvImport/CsvImportWidget.h
index a5807eefd..a81550aa1 100644
--- a/src/gui/csvImport/CsvImportWidget.h
+++ b/src/gui/csvImport/CsvImportWidget.h
@@ -49,7 +49,7 @@ signals:
private slots:
void parse();
- void comboChanged(QComboBox* currentSender, int comboId);
+ void comboChanged(int index);
void skippedChanged(int rows);
void writeDatabase();
void updatePreview();
diff --git a/src/gui/csvImport/CsvImportWidget.ui b/src/gui/csvImport/CsvImportWidget.ui
index beaa39386..1c268fd9d 100644
--- a/src/gui/csvImport/CsvImportWidget.ui
+++ b/src/gui/csvImport/CsvImportWidget.ui
@@ -6,444 +6,657 @@
<rect>
<x>0</x>
<y>0</y>
- <width>892</width>
- <height>525</height>
+ <width>788</width>
+ <height>530</height>
</rect>
</property>
<property name="windowTitle">
<string/>
</property>
- <layout class="QGridLayout" name="gridLayout_4">
- <item row="0" column="0" rowspan="2" colspan="2">
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="MessageWidget" name="messageWidget" native="true"/>
- </item>
- <item>
- <widget class="QLabel" name="labelHeadline">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Import CSV fields</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="labelFilename">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>filename</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="labelSizeRowsCols">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>size, rows, columns</string>
- </property>
- </widget>
- </item>
- </layout>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="MessageWidget" name="messageWidget" native="true"/>
</item>
- <item row="1" column="1">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
+ <item>
+ <widget class="QScrollArea" name="scrollArea">
+ <property name="horizontalScrollBarPolicy">
+ <enum>Qt::ScrollBarAlwaysOff</enum>
</property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <property name="widgetResizable">
+ <bool>true</bool>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>758</width>
- <height>24</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QGroupBox" name="Encoding">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="title">
- <string>Encoding</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="labelCodec">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>Codec</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="1" colspan="2">
- <widget class="QComboBox" name="comboBoxCodec">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="accessibleName">
- <string>Codec</string>
- </property>
- <property name="editable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="3">
- <widget class="QLabel" name="labelTextQualifier">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>Text is qualified by</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="4">
- <widget class="QComboBox" name="comboBoxTextQualifier">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="accessibleName">
- <string>Text qualification</string>
- </property>
- <property name="editable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="labelFieldSeparator">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>Fields are separated by</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="1" colspan="2">
- <widget class="QComboBox" name="comboBoxFieldSeparator">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="accessibleName">
- <string>Field separation</string>
- </property>
- <property name="editable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="3">
- <widget class="QLabel" name="labelComments">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>Comments start with</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="4">
- <widget class="QComboBox" name="comboBoxComment">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="accessibleName">
- <string>Comments start with</string>
- </property>
- <property name="editable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QCheckBox" name="checkBoxFieldNames">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>First record has field names</string>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="labelSkipRows">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>Number of header lines to discard</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBoxSkip">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="accessibleName">
- <string>Number of header lines to discard</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="2" column="3">
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>122</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="2" column="4">
- <widget class="QCheckBox" name="checkBoxBackslash">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="text">
- <string>Consider '\' an escape character</string>
- </property>
- </widget>
- </item>
- <item row="2" column="5">
- <widget class="QLabel" name="labelWarnings">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- <kerning>true</kerning>
- </font>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="QWidget" name="scrollAreaWidgetContents">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>753</width>
+ <height>615</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QLabel" name="labelHeadline">
+ <property name="font">
+ <font>
+ <pointsize>11</pointsize>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Import CSV fields</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLabel" name="labelFilename">
+ <property name="text">
+ <string>filename</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelSizeRowsCols">
+ <property name="text">
+ <string>size, rows, columns</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QGroupBox" name="groupBoxColumnAssociations">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="title">
+ <string>Column Association</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <layout class="QGridLayout" name="gridLayout_combos">
+ <item row="2" column="2">
+ <widget class="QLabel" name="lastModifiedLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Last Modified</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="passwordLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Password</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QComboBox" name="passwordCombo"/>
+ </item>
+ <item row="3" column="2">
+ <widget class="QLabel" name="createdLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Created</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLabel" name="notesLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Notes</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="titleLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Title</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="groupCombo"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="groupLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Group</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="urlLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>URL</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="usernameLabel">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Username</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="usernameCombo"/>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="titleCombo"/>
+ </item>
+ <item row="0" column="3">
+ <widget class="QComboBox" name="urlCombo"/>
+ </item>
+ <item row="1" column="3">
+ <widget class="QComboBox" name="notesCombo"/>
+ </item>
+ <item row="2" column="3">
+ <widget class="QComboBox" name="lastModifiedCombo"/>
+ </item>
+ <item row="3" column="3">
+ <widget class="QComboBox" name="createdCombo"/>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="Encoding">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="title">
+ <string>Encoding</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelCodec">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Codec</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="comboBoxCodec">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="accessibleName">
+ <string>Codec</string>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="currentText">
+ <string notr="true">UTF-8</string>
+ </property>
+ <item>
+ <property name="text">
+ <string notr="true">UTF-8</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Windows-1252</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">UTF-16</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">UTF-16LE</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelTextQualifier">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Text is qualified by</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="comboBoxTextQualifier">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="accessibleName">
+ <string>Text qualification</string>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="currentText">
+ <string notr="true">&quot;</string>
+ </property>
+ <item>
+ <property name="text">
+ <string notr="true">&quot;</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">'</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">:</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">.</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">|</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelFieldSeparator">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Fields are separated by</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="comboBoxFieldSeparator">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="accessibleName">
+ <string>Field separation</string>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="currentText">
+ <string notr="true">,</string>
+ </property>
+ <item>
+ <property name="text">
+ <string notr="true">,</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">;</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">-</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">:</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">.</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">TAB (\t)</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelComments">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Comments start with</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QComboBox" name="comboBoxComment">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="accessibleName">
+ <string>Comments start with</string>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="currentText">
+ <string notr="true">#</string>
+ </property>
+ <item>
+ <property name="text">
+ <string notr="true">#</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">;</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">:</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">@</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="labelSkipRows">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Header lines skipped</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QSpinBox" name="spinBoxSkip">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="accessibleName">
+ <string>Number of header lines to discard</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>122</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="5" column="1">
+ <widget class="QCheckBox" name="checkBoxFieldNames">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>First line has field names</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QCheckBox" name="checkBoxBackslash">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Consider '\' an escape character</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBoxPreview">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="title">
+ <string>Preview</string>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTableView" name="tableViewFields">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>300</height>
+ </size>
+ </property>
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="accessibleName">
+ <string>CSV import preview</string>
+ </property>
+ <property name="cornerButtonEnabled">
+ <bool>false</bool>
+ </property>
+ <attribute name="horizontalHeaderVisible">
+ <bool>true</bool>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
- <item row="4" column="0" colspan="2">
- <widget class="QGroupBox" name="groupBoxPreview">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>200</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="title">
- <string>Preview</string>
- </property>
- <property name="checkable">
- <bool>false</bool>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QTableView" name="tableViewFields">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="accessibleName">
- <string>CSV import preview</string>
- </property>
- <attribute name="horizontalHeaderVisible">
- <bool>true</bool>
- </attribute>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="5" column="0" colspan="2">
+ <item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
@@ -453,40 +666,6 @@
</property>
</widget>
</item>
- <item row="3" column="0" colspan="2">
- <widget class="QGroupBox" name="groupBoxColumnAssociations">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="title">
- <string>Column layout</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <layout class="QGridLayout" name="gridLayout_combos">
- <property name="leftMargin">
- <number>6</number>
- </property>
- <property name="rightMargin">
- <number>6</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
</layout>
</widget>
<customwidgets>
@@ -497,6 +676,25 @@
<container>1</container>
</customwidget>
</customwidgets>
+ <tabstops>
+ <tabstop>scrollArea</tabstop>
+ <tabstop>groupCombo</tabstop>
+ <tabstop>titleCombo</tabstop>
+ <tabstop>usernameCombo</tabstop>
+ <tabstop>passwordCombo</tabstop>
+ <tabstop>urlCombo</tabstop>
+ <tabstop>notesCombo</tabstop>
+ <tabstop>lastModifiedCombo</tabstop>
+ <tabstop>createdCombo</tabstop>
+ <tabstop>comboBoxCodec</tabstop>
+ <tabstop>comboBoxTextQualifier</tabstop>
+ <tabstop>comboBoxFieldSeparator</tabstop>
+ <tabstop>comboBoxComment</tabstop>
+ <tabstop>spinBoxSkip</tabstop>
+ <tabstop>checkBoxFieldNames</tabstop>
+ <tabstop>checkBoxBackslash</tabstop>
+ <tabstop>tableViewFields</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/gui/csvImport/CsvParserModel.cpp b/src/gui/csvImport/CsvParserModel.cpp
index a6c24667d..d18db87c5 100644
--- a/src/gui/csvImport/CsvParserModel.cpp
+++ b/src/gui/csvImport/CsvParserModel.cpp
@@ -55,8 +55,9 @@ bool CsvParserModel::parse()
QFile csv(m_filename);
r = CsvParser::parse(&csv);
}
- for (int i = 0; i < columnCount(); ++i)
+ for (int i = 0; i < columnCount(); ++i) {
m_columnMap.insert(i, 0);
+ }
addEmptyColumn();
endResetModel();
return r;
@@ -73,13 +74,15 @@ void CsvParserModel::addEmptyColumn()
void CsvParserModel::mapColumns(int csvColumn, int dbColumn)
{
- if ((csvColumn < 0) || (dbColumn < 0))
+ if ((csvColumn < 0) || (dbColumn < 0)) {
return;
+ }
beginResetModel();
- if (csvColumn >= getCsvCols())
+ if (csvColumn >= getCsvCols()) {
m_columnMap[dbColumn] = 0; // map to the empty column
- else
+ } else {
m_columnMap[dbColumn] = csvColumn;
+ }
endResetModel();
}
@@ -99,15 +102,17 @@ void CsvParserModel::setHeaderLabels(const QStringList& labels)
int CsvParserModel::rowCount(const QModelIndex& parent) const
{
- if (parent.isValid())
+ if (parent.isValid()) {
return 0;
+ }
return getCsvRows();
}
int CsvParserModel::columnCount(const QModelIndex& parent) const
{
- if (parent.isValid())
+ if (parent.isValid()) {
return 0;
+ }
return m_columnHeader.size();
}
@@ -116,8 +121,9 @@ QVariant CsvParserModel::data(const QModelIndex& index, int role) const
if ((index.column() >= m_columnHeader.size()) || (index.row() + m_skipped >= rowCount()) || !index.isValid()) {
return QVariant();
}
- if (role == Qt::DisplayRole)
+ if (role == Qt::DisplayRole) {
return m_table.at(index.row() + m_skipped).at(m_columnMap[index.column()]);
+ }
return QVariant();
}
@@ -125,12 +131,14 @@ QVariant CsvParserModel::headerData(int section, Qt::Orientation orientation, in
{
if (role == Qt::DisplayRole) {
if (orientation == Qt::Horizontal) {
- if ((section < 0) || (section >= m_columnHeader.size()))
+ if ((section < 0) || (section >= m_columnHeader.size())) {
return QVariant();
+ }
return m_columnHeader.at(section);
} else if (orientation == Qt::Vertical) {
- if (section + m_skipped >= rowCount())
+ if (section + m_skipped >= rowCount()) {
return QVariant();
+ }
return QString::number(section + 1);
}
}
diff --git a/src/gui/masterkey/KeyComponentWidget.cpp b/src/gui/databasekey/KeyComponentWidget.cpp
index 769cbab95..769cbab95 100644
--- a/src/gui/masterkey/KeyComponentWidget.cpp
+++ b/src/gui/databasekey/KeyComponentWidget.cpp
diff --git a/src/gui/masterkey/KeyComponentWidget.h b/src/gui/databasekey/KeyComponentWidget.h
index b73f881fc..b73f881fc 100644
--- a/src/gui/masterkey/KeyComponentWidget.h
+++ b/src/gui/databasekey/KeyComponentWidget.h
diff --git a/src/gui/masterkey/KeyComponentWidget.ui b/src/gui/databasekey/KeyComponentWidget.ui
index 5036655e0..5036655e0 100644
--- a/src/gui/masterkey/KeyComponentWidget.ui
+++ b/src/gui/databasekey/KeyComponentWidget.ui
diff --git a/src/gui/masterkey/KeyFileEditWidget.cpp b/src/gui/databasekey/KeyFileEditWidget.cpp
index e6b5bef49..e0486ae07 100644
--- a/src/gui/masterkey/KeyFileEditWidget.cpp
+++ b/src/gui/databasekey/KeyFileEditWidget.cpp
@@ -52,7 +52,7 @@ bool KeyFileEditWidget::addToCompositeKey(QSharedPointer<CompositeKey> key)
tr("Legacy key file format"),
tr("You are using a legacy key file format which may become\n"
"unsupported in the future.\n\n"
- "Please go to the master key settings and generate a new key file."),
+ "Generate a new key file in the database security settings."),
QMessageBox::Ok);
}
diff --git a/src/gui/masterkey/KeyFileEditWidget.h b/src/gui/databasekey/KeyFileEditWidget.h
index dd414e133..dd414e133 100644
--- a/src/gui/masterkey/KeyFileEditWidget.h
+++ b/src/gui/databasekey/KeyFileEditWidget.h
diff --git a/src/gui/masterkey/KeyFileEditWidget.ui b/src/gui/databasekey/KeyFileEditWidget.ui
index 088995dc8..088995dc8 100644
--- a/src/gui/masterkey/KeyFileEditWidget.ui
+++ b/src/gui/databasekey/KeyFileEditWidget.ui
diff --git a/src/gui/masterkey/PasswordEditWidget.cpp b/src/gui/databasekey/PasswordEditWidget.cpp
index 9353cbe7a..2d355cc10 100644
--- a/src/gui/masterkey/PasswordEditWidget.cpp
+++ b/src/gui/databasekey/PasswordEditWidget.cpp
@@ -18,7 +18,7 @@
#include "PasswordEditWidget.h"
#include "ui_PasswordEditWidget.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "gui/PasswordGeneratorWidget.h"
#include "keys/CompositeKey.h"
#include "keys/PasswordKey.h"
@@ -53,7 +53,7 @@ bool PasswordEditWidget::addToCompositeKey(QSharedPointer<CompositeKey> key)
*/
void PasswordEditWidget::setPasswordVisible(bool visible)
{
- m_compUi->togglePasswordButton->setChecked(visible);
+ m_compUi->enterPasswordEdit->setShowPassword(visible);
}
/**
@@ -61,7 +61,7 @@ void PasswordEditWidget::setPasswordVisible(bool visible)
*/
bool PasswordEditWidget::isPasswordVisible() const
{
- return m_compUi->togglePasswordButton->isChecked();
+ return m_compUi->enterPasswordEdit->isPasswordVisible();
}
bool PasswordEditWidget::isEmpty() const
@@ -73,16 +73,8 @@ QWidget* PasswordEditWidget::componentEditWidget()
{
m_compEditWidget = new QWidget();
m_compUi->setupUi(m_compEditWidget);
- m_compUi->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
- m_compUi->passwordGeneratorButton->setIcon(filePath()->icon("actions", "password-generator", false));
- m_compUi->repeatPasswordEdit->enableVerifyMode(m_compUi->enterPasswordEdit);
-
- connect(m_compUi->togglePasswordButton,
- SIGNAL(toggled(bool)),
- m_compUi->enterPasswordEdit,
- SLOT(setShowPassword(bool)));
- connect(m_compUi->passwordGeneratorButton, SIGNAL(clicked(bool)), SLOT(showPasswordGenerator()));
-
+ m_compUi->enterPasswordEdit->enablePasswordGenerator();
+ m_compUi->enterPasswordEdit->setRepeatPartner(m_compUi->repeatPasswordEdit);
return m_compEditWidget;
}
@@ -113,26 +105,6 @@ bool PasswordEditWidget::validate(QString& errorMessage) const
return true;
}
-void PasswordEditWidget::showPasswordGenerator()
-{
- QDialog pwDialog;
- pwDialog.setWindowTitle(tr("Generate master password"));
-
- auto layout = new QVBoxLayout();
- pwDialog.setLayout(layout);
-
- auto pwGenerator = new PasswordGeneratorWidget(&pwDialog);
- layout->addWidget(pwGenerator);
-
- pwGenerator->setStandaloneMode(false);
- connect(pwGenerator, SIGNAL(appliedPassword(QString)), SLOT(setPassword(QString)));
- connect(pwGenerator, SIGNAL(dialogTerminated()), &pwDialog, SLOT(close()));
-
- pwGenerator->setPasswordVisible(isPasswordVisible());
-
- pwDialog.exec();
-}
-
void PasswordEditWidget::setPassword(const QString& password)
{
Q_ASSERT(m_compEditWidget);
diff --git a/src/gui/masterkey/PasswordEditWidget.h b/src/gui/databasekey/PasswordEditWidget.h
index 57c225c1f..802219451 100644
--- a/src/gui/masterkey/PasswordEditWidget.h
+++ b/src/gui/databasekey/PasswordEditWidget.h
@@ -47,7 +47,6 @@ protected:
void hideEvent(QHideEvent* event) override;
private slots:
- void showPasswordGenerator();
void setPassword(const QString& password);
private:
diff --git a/src/gui/masterkey/PasswordEditWidget.ui b/src/gui/databasekey/PasswordEditWidget.ui
index d0a85eb59..d8382ed94 100644
--- a/src/gui/masterkey/PasswordEditWidget.ui
+++ b/src/gui/databasekey/PasswordEditWidget.ui
@@ -31,49 +31,26 @@
</widget>
</item>
<item row="0" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="PasswordEdit" name="enterPasswordEdit">
- <property name="accessibleName">
- <string>Password field</string>
- </property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="togglePasswordButton">
- <property name="accessibleName">
- <string>Toggle password visibility</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="PasswordEdit" name="repeatPasswordEdit">
- <property name="accessibleName">
- <string>Repeat password field</string>
- </property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="passwordGeneratorButton">
- <property name="accessibleName">
- <string>Toggle password generator</string>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="PasswordEdit" name="enterPasswordEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="accessibleName">
+ <string>Password field</string>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="repeatPasswordLabel">
@@ -82,6 +59,28 @@
</property>
</widget>
</item>
+ <item row="1" column="1">
+ <widget class="PasswordEdit" name="repeatPasswordEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="accessibleName">
+ <string>Repeat password field</string>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<customwidgets>
@@ -95,8 +94,6 @@
<tabstops>
<tabstop>enterPasswordEdit</tabstop>
<tabstop>repeatPasswordEdit</tabstop>
- <tabstop>togglePasswordButton</tabstop>
- <tabstop>passwordGeneratorButton</tabstop>
</tabstops>
<resources/>
<connections/>
diff --git a/src/gui/masterkey/YubiKeyEditWidget.cpp b/src/gui/databasekey/YubiKeyEditWidget.cpp
index 9ecd918ef..855bd7099 100644
--- a/src/gui/masterkey/YubiKeyEditWidget.cpp
+++ b/src/gui/databasekey/YubiKeyEditWidget.cpp
@@ -19,13 +19,12 @@
#include "ui_YubiKeyEditWidget.h"
#include "config-keepassx.h"
+#include "core/AsyncTask.h"
#include "gui/MainWindow.h"
#include "gui/MessageBox.h"
#include "keys/CompositeKey.h"
#include "keys/YkChallengeResponseKey.h"
-#include <QtConcurrent>
-
YubiKeyEditWidget::YubiKeyEditWidget(QWidget* parent)
: KeyComponentWidget(parent)
, m_compUi(new Ui::YubiKeyEditWidget())
@@ -36,6 +35,8 @@ YubiKeyEditWidget::YubiKeyEditWidget(QWidget* parent)
"for additional security.</p><p>The YubiKey requires one of its slots to be programmed as "
"<a href=\"https://www.yubico.com/products/services-software/personalization-tools/challenge-response/\">"
"HMAC-SHA1 Challenge-Response</a>.</p>"));
+
+ connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection);
}
YubiKeyEditWidget::~YubiKeyEditWidget()
@@ -44,24 +45,31 @@ YubiKeyEditWidget::~YubiKeyEditWidget()
bool YubiKeyEditWidget::addToCompositeKey(QSharedPointer<CompositeKey> key)
{
- QSharedPointer<YkChallengeResponseKey> keyPtr;
- if (!createCrKey(keyPtr, false)) {
+ if (!m_isDetected || !m_compEditWidget) {
return false;
}
- key->addChallengeResponseKey(keyPtr);
+ int selectionIndex = m_compUi->comboChallengeResponse->currentIndex();
+ auto slot = m_compUi->comboChallengeResponse->itemData(selectionIndex).value<YubiKeySlot>();
+ key->addChallengeResponseKey(QSharedPointer<YkChallengeResponseKey>::create(slot));
return true;
}
bool YubiKeyEditWidget::validate(QString& errorMessage) const
{
- QSharedPointer<YkChallengeResponseKey> keyPtr;
- if (!createCrKey(keyPtr)) {
- errorMessage = tr("No YubiKey detected, please ensure it's plugged in.");
+ if (!m_isDetected) {
+ errorMessage = tr("Could not find any hardware keys!");
return false;
}
- return true;
+ // Perform a test challenge response
+ int selectionIndex = m_compUi->comboChallengeResponse->currentIndex();
+ auto slot = m_compUi->comboChallengeResponse->itemData(selectionIndex).value<YubiKeySlot>();
+ bool valid = AsyncTask::runAndWaitForFuture([&slot] { return YubiKey::instance()->testChallenge(slot); });
+ if (!valid) {
+ errorMessage = tr("Selected hardware key slot does not support challenge-response!");
+ }
+ return valid;
}
QWidget* YubiKeyEditWidget::componentEditWidget()
@@ -76,13 +84,6 @@ QWidget* YubiKeyEditWidget::componentEditWidget()
#ifdef WITH_XC_YUBIKEY
connect(m_compUi->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollYubikey()));
-
- // clang-format off
- connect(YubiKey::instance(), SIGNAL(detected(int,bool)), SLOT(yubikeyDetected(int,bool)), Qt::QueuedConnection);
- connect(YubiKey::instance(), SIGNAL(detectComplete()), SLOT(yubikeyDetectComplete()), Qt::QueuedConnection);
- connect(YubiKey::instance(), SIGNAL(notFound()), SLOT(noYubikeyFound()), Qt::QueuedConnection);
- // clang-format on
-
pollYubikey();
#endif
@@ -105,72 +106,36 @@ void YubiKeyEditWidget::pollYubikey()
m_isDetected = false;
m_compUi->comboChallengeResponse->clear();
+ m_compUi->comboChallengeResponse->addItem(tr("Detecting hardware keys…"));
m_compUi->buttonRedetectYubikey->setEnabled(false);
m_compUi->comboChallengeResponse->setEnabled(false);
m_compUi->yubikeyProgress->setVisible(true);
- // YubiKey init is slow, detect asynchronously to not block the UI
- QtConcurrent::run(YubiKey::instance(), &YubiKey::detect);
+ YubiKey::instance()->findValidKeys();
#endif
}
-void YubiKeyEditWidget::yubikeyDetected(int slot, bool blocking)
+void YubiKeyEditWidget::hardwareKeyResponse(bool found)
{
-#ifdef WITH_XC_YUBIKEY
if (!m_compEditWidget) {
return;
}
- YkChallengeResponseKey yk(slot, blocking);
- // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB
- m_compUi->comboChallengeResponse->addItem(yk.getName(), QVariant((slot << 1u) | blocking));
- m_isDetected = true;
-#else
- Q_UNUSED(slot);
- Q_UNUSED(blocking);
-#endif
-}
-
-void YubiKeyEditWidget::yubikeyDetectComplete()
-{
- m_compUi->comboChallengeResponse->setEnabled(true);
- m_compUi->buttonRedetectYubikey->setEnabled(true);
- m_compUi->yubikeyProgress->setVisible(false);
-}
-void YubiKeyEditWidget::noYubikeyFound()
-{
-#ifdef WITH_XC_YUBIKEY
- if (!m_compEditWidget) {
- return;
- }
m_compUi->comboChallengeResponse->clear();
- m_compUi->comboChallengeResponse->setEnabled(false);
- m_compUi->comboChallengeResponse->addItem(tr("No YubiKey inserted."));
m_compUi->buttonRedetectYubikey->setEnabled(true);
m_compUi->yubikeyProgress->setVisible(false);
- m_isDetected = false;
-#endif
-}
-bool YubiKeyEditWidget::createCrKey(QSharedPointer<YkChallengeResponseKey>& key, bool testChallenge) const
-{
- Q_ASSERT(m_compEditWidget);
- if (!m_isDetected || !m_compEditWidget) {
- return false;
+ if (!found) {
+ m_compUi->comboChallengeResponse->addItem(tr("No hardware keys detected"));
+ m_isDetected = false;
+ return;
}
- int selectionIndex = m_compUi->comboChallengeResponse->currentIndex();
- int comboPayload = m_compUi->comboChallengeResponse->itemData(selectionIndex).toInt();
-
- if (0 == comboPayload) {
- return false;
+ for (auto& slot : YubiKey::instance()->foundKeys()) {
+ // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB
+ m_compUi->comboChallengeResponse->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot));
}
- auto blocking = static_cast<bool>(comboPayload & 1u);
- int slot = comboPayload >> 1u;
- key.reset(new YkChallengeResponseKey(slot, blocking));
- if (testChallenge) {
- return key->challenge(QByteArray("0000"));
- }
- return true;
+ m_isDetected = true;
+ m_compUi->comboChallengeResponse->setEnabled(true);
}
diff --git a/src/gui/masterkey/YubiKeyEditWidget.h b/src/gui/databasekey/YubiKeyEditWidget.h
index 549f7f44f..d5be0a683 100644
--- a/src/gui/masterkey/YubiKeyEditWidget.h
+++ b/src/gui/databasekey/YubiKeyEditWidget.h
@@ -45,14 +45,10 @@ protected:
void initComponentEditWidget(QWidget* widget) override;
private slots:
- void yubikeyDetected(int slot, bool blocking);
- void yubikeyDetectComplete();
- void noYubikeyFound();
+ void hardwareKeyResponse(bool found);
void pollYubikey();
private:
- bool createCrKey(QSharedPointer<YkChallengeResponseKey>& key, bool testChallenge = true) const;
-
const QScopedPointer<Ui::YubiKeyEditWidget> m_compUi;
QPointer<QWidget> m_compEditWidget;
bool m_isDetected = false;
diff --git a/src/gui/masterkey/YubiKeyEditWidget.ui b/src/gui/databasekey/YubiKeyEditWidget.ui
index fa150084b..fa150084b 100644
--- a/src/gui/masterkey/YubiKeyEditWidget.ui
+++ b/src/gui/databasekey/YubiKeyEditWidget.ui
diff --git a/src/gui/dbsettings/DatabaseSettingsDialog.cpp b/src/gui/dbsettings/DatabaseSettingsDialog.cpp
index 33c4df2c4..32a9b74c2 100644
--- a/src/gui/dbsettings/DatabaseSettingsDialog.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsDialog.cpp
@@ -19,10 +19,9 @@
#include "DatabaseSettingsDialog.h"
#include "ui_DatabaseSettingsDialog.h"
-#include "DatabaseSettingsPageStatistics.h"
+#include "DatabaseSettingsWidgetDatabaseKey.h"
#include "DatabaseSettingsWidgetEncryption.h"
#include "DatabaseSettingsWidgetGeneral.h"
-#include "DatabaseSettingsWidgetMasterKey.h"
#ifdef WITH_XC_BROWSER
#include "DatabaseSettingsWidgetBrowser.h"
#endif
@@ -35,8 +34,8 @@
#include "core/Config.h"
#include "core/Database.h"
-#include "core/FilePath.h"
#include "core/Global.h"
+#include "core/Resources.h"
#include "touchid/TouchID.h"
class DatabaseSettingsDialog::ExtraPage
@@ -66,7 +65,7 @@ DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent)
, m_ui(new Ui::DatabaseSettingsDialog())
, m_generalWidget(new DatabaseSettingsWidgetGeneral(this))
, m_securityTabWidget(new QTabWidget(this))
- , m_masterKeyWidget(new DatabaseSettingsWidgetMasterKey(this))
+ , m_databaseKeyWidget(new DatabaseSettingsWidgetDatabaseKey(this))
, m_encryptionWidget(new DatabaseSettingsWidgetEncryption(this))
#ifdef WITH_XC_BROWSER
, m_browserWidget(new DatabaseSettingsWidgetBrowser(this))
@@ -77,16 +76,14 @@ DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent)
connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save()));
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject()));
- m_ui->categoryList->addCategory(tr("General"), FilePath::instance()->icon("categories", "preferences-other"));
- m_ui->categoryList->addCategory(tr("Security"), FilePath::instance()->icon("status", "security-high"));
+ m_ui->categoryList->addCategory(tr("General"), Resources::instance()->icon("preferences-other"));
+ m_ui->categoryList->addCategory(tr("Security"), Resources::instance()->icon("security-high"));
m_ui->stackedWidget->addWidget(m_generalWidget);
m_ui->stackedWidget->addWidget(m_securityTabWidget);
- m_securityTabWidget->addTab(m_masterKeyWidget, tr("Master Key"));
+ m_securityTabWidget->addTab(m_databaseKeyWidget, tr("Database Credentials"));
m_securityTabWidget->addTab(m_encryptionWidget, tr("Encryption Settings"));
- addSettingsPage(new DatabaseSettingsPageStatistics());
-
#if defined(WITH_XC_KEESHARE)
addSettingsPage(new DatabaseSettingsPageKeeShare());
#endif
@@ -103,8 +100,7 @@ DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent)
connect(m_ui->advancedSettingsToggle, SIGNAL(toggled(bool)), SLOT(toggleAdvancedMode(bool)));
#ifdef WITH_XC_BROWSER
- m_ui->categoryList->addCategory(tr("Browser Integration"),
- FilePath::instance()->icon("apps", "internet-web-browser"));
+ m_ui->categoryList->addCategory(tr("Browser Integration"), Resources::instance()->icon("internet-web-browser"));
m_ui->stackedWidget->addWidget(m_browserWidget);
#endif
@@ -119,7 +115,7 @@ void DatabaseSettingsDialog::load(const QSharedPointer<Database>& db)
{
m_ui->categoryList->setCurrentCategory(0);
m_generalWidget->load(db);
- m_masterKeyWidget->load(db);
+ m_databaseKeyWidget->load(db);
m_encryptionWidget->load(db);
#ifdef WITH_XC_BROWSER
m_browserWidget->load(db);
@@ -127,7 +123,7 @@ void DatabaseSettingsDialog::load(const QSharedPointer<Database>& db)
for (const ExtraPage& page : asConst(m_extraPages)) {
page.loadSettings(db);
}
- m_ui->advancedSettingsToggle->setChecked(config()->get("GUI/AdvancedSettings", false).toBool());
+ m_ui->advancedSettingsToggle->setChecked(config()->get(Config::GUI_AdvancedSettings).toBool());
m_db = db;
}
@@ -143,9 +139,9 @@ void DatabaseSettingsDialog::addSettingsPage(IDatabaseSettingsPage* page)
}
/**
- * Show page and tab with database master key settings.
+ * Show page and tab with database database key settings.
*/
-void DatabaseSettingsDialog::showMasterKeySettings()
+void DatabaseSettingsDialog::showDatabaseKeySettings()
{
m_ui->categoryList->setCurrentCategory(1);
m_securityTabWidget->setCurrentIndex(0);
@@ -157,7 +153,7 @@ void DatabaseSettingsDialog::save()
return;
}
- if (!m_masterKeyWidget->save()) {
+ if (!m_databaseKeyWidget->save()) {
return;
}
@@ -189,7 +185,7 @@ void DatabaseSettingsDialog::pageChanged()
if (Page::Security == pageIndex) {
int tabIndex = m_securityTabWidget->currentIndex();
- enabled = (tabIndex == 0 && m_masterKeyWidget->hasAdvancedMode());
+ enabled = (tabIndex == 0 && m_databaseKeyWidget->hasAdvancedMode());
enabled |= (tabIndex == 1 && m_encryptionWidget->hasAdvancedMode());
}
@@ -202,13 +198,13 @@ void DatabaseSettingsDialog::toggleAdvancedMode(bool advanced)
m_generalWidget->setAdvancedMode(advanced);
}
- if (m_masterKeyWidget->hasAdvancedMode()) {
- m_masterKeyWidget->setAdvancedMode(advanced);
+ if (m_databaseKeyWidget->hasAdvancedMode()) {
+ m_databaseKeyWidget->setAdvancedMode(advanced);
}
if (m_encryptionWidget->hasAdvancedMode()) {
m_encryptionWidget->setAdvancedMode(advanced);
}
- config()->set("GUI/AdvancedSettings", advanced);
+ config()->set(Config::GUI_AdvancedSettings, advanced);
}
diff --git a/src/gui/dbsettings/DatabaseSettingsDialog.h b/src/gui/dbsettings/DatabaseSettingsDialog.h
index 855978f29..ba708c65b 100644
--- a/src/gui/dbsettings/DatabaseSettingsDialog.h
+++ b/src/gui/dbsettings/DatabaseSettingsDialog.h
@@ -28,7 +28,7 @@
class Database;
class DatabaseSettingsWidgetGeneral;
class DatabaseSettingsWidgetEncryption;
-class DatabaseSettingsWidgetMasterKey;
+class DatabaseSettingsWidgetDatabaseKey;
#ifdef WITH_XC_BROWSER
class DatabaseSettingsWidgetBrowser;
#endif
@@ -63,7 +63,7 @@ public:
void load(const QSharedPointer<Database>& db);
void addSettingsPage(IDatabaseSettingsPage* page);
- void showMasterKeySettings();
+ void showDatabaseKeySettings();
signals:
void editFinished(bool accepted);
@@ -85,7 +85,7 @@ private:
const QScopedPointer<Ui::DatabaseSettingsDialog> m_ui;
QPointer<DatabaseSettingsWidgetGeneral> m_generalWidget;
QPointer<QTabWidget> m_securityTabWidget;
- QPointer<DatabaseSettingsWidgetMasterKey> m_masterKeyWidget;
+ QPointer<DatabaseSettingsWidgetDatabaseKey> m_databaseKeyWidget;
QPointer<DatabaseSettingsWidgetEncryption> m_encryptionWidget;
#ifdef WITH_XC_BROWSER
QPointer<DatabaseSettingsWidgetBrowser> m_browserWidget;
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp
index 4ea30c1f6..746e6a66e 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp
@@ -34,7 +34,6 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent)
, m_ui(new Ui::DatabaseSettingsWidgetBrowser())
, m_customData(new CustomData(this))
, m_customDataModel(new QStandardItemModel(this))
- , m_browserService(nullptr)
{
m_ui->setupUi(this);
m_ui->removeCustomDataButton->setEnabled(false);
@@ -46,6 +45,8 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent)
connect(m_ui->customDataTable->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
SLOT(toggleRemoveButton(QItemSelection)));
+ connect(m_ui->customDataTable, SIGNAL(doubleClicked(QModelIndex)), SLOT(editIndex(QModelIndex)));
+ connect(m_customDataModel, SIGNAL(itemChanged(QStandardItem*)), SLOT(editFinished(QStandardItem*)));
// clang-format on
connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedKey()));
@@ -54,6 +55,7 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent)
connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(removeSharedEncryptionKeys()));
connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(updateSharedKeyList()));
connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SLOT(removeStoredPermissions()));
+ connect(m_ui->refreshDatabaseID, SIGNAL(clicked()), this, SLOT(refreshDatabaseID()));
}
DatabaseSettingsWidgetBrowser::~DatabaseSettingsWidgetBrowser()
@@ -105,7 +107,7 @@ void DatabaseSettingsWidgetBrowser::removeSelectedKey()
if (itemSelectionModel) {
for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) {
QString key = index.data().toString();
- key.insert(0, BrowserService::ASSOCIATE_KEY_PREFIX);
+ key.insert(0, CustomData::BrowserKeyPrefix);
customData()->remove(key);
}
updateModel();
@@ -120,14 +122,18 @@ void DatabaseSettingsWidgetBrowser::toggleRemoveButton(const QItemSelection& sel
void DatabaseSettingsWidgetBrowser::updateModel()
{
m_customDataModel->clear();
- m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value")});
+ m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value"), tr("Created")});
for (const QString& key : customData()->keys()) {
- if (key.startsWith(BrowserService::ASSOCIATE_KEY_PREFIX)) {
+ if (key.startsWith(CustomData::BrowserKeyPrefix)) {
QString strippedKey = key;
- strippedKey.remove(BrowserService::ASSOCIATE_KEY_PREFIX);
- m_customDataModel->appendRow(QList<QStandardItem*>() << new QStandardItem(strippedKey)
- << new QStandardItem(customData()->value(key)));
+ strippedKey.remove(CustomData::BrowserKeyPrefix);
+ auto created = customData()->value(QString("%1_%2").arg(CustomData::Created, strippedKey));
+ auto createdItem = new QStandardItem(created);
+ createdItem->setEditable(false);
+ m_customDataModel->appendRow(QList<QStandardItem*>()
+ << new QStandardItem(strippedKey)
+ << new QStandardItem(customData()->value(key)) << createdItem);
}
}
@@ -168,7 +174,7 @@ void DatabaseSettingsWidgetBrowser::removeSharedEncryptionKeys()
QStringList keysToRemove;
for (const QString& key : m_db->metadata()->customData()->keys()) {
- if (key.startsWith(BrowserService::ASSOCIATE_KEY_PREFIX)) {
+ if (key.startsWith(CustomData::BrowserKeyPrefix)) {
keysToRemove << key;
}
}
@@ -251,7 +257,69 @@ void DatabaseSettingsWidgetBrowser::convertAttributesToCustomData()
return;
}
- m_browserService.convertAttributesToCustomData(m_db);
+ BrowserService::convertAttributesToCustomData(m_db);
+}
+
+void DatabaseSettingsWidgetBrowser::refreshDatabaseID()
+{
+ if (MessageBox::Yes
+ != MessageBox::question(this,
+ tr("Refresh database ID"),
+ tr("Do you really want refresh the database ID?\n"
+ "This is only necessary if your database is a copy of another and the "
+ "browser extension cannot connect."),
+ MessageBox::Yes | MessageBox::Cancel,
+ MessageBox::Cancel)) {
+ return;
+ }
+
+ m_db->rootGroup()->setUuid(QUuid::createUuid());
+}
+
+void DatabaseSettingsWidgetBrowser::editIndex(const QModelIndex& index)
+{
+ Q_ASSERT(index.isValid());
+ if (!index.isValid()) {
+ return;
+ }
+
+ m_valueInEdit = index.data().toString();
+ m_ui->customDataTable->edit(index);
+}
+
+void DatabaseSettingsWidgetBrowser::editFinished(QStandardItem* item)
+{
+ const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel();
+
+ if (itemSelectionModel) {
+ auto indexList = itemSelectionModel->selectedRows(item->column());
+ if (indexList.length() > 0) {
+ QString newValue = item->index().data().toString();
+
+ // The key is edited
+ if (item->column() == 0) {
+ // Get the old key/value pair, remove it and replace it
+ m_valueInEdit.insert(0, CustomData::BrowserKeyPrefix);
+ auto tempValue = customData()->value(m_valueInEdit);
+ newValue.insert(0, CustomData::BrowserKeyPrefix);
+
+ m_db->metadata()->customData()->remove(m_valueInEdit);
+ m_db->metadata()->customData()->set(newValue, tempValue);
+ } else {
+ // Replace just the value
+ for (const QString& key : m_db->metadata()->customData()->keys()) {
+ if (key.startsWith(CustomData::BrowserKeyPrefix)) {
+ if (m_valueInEdit == m_db->metadata()->customData()->value(key)) {
+ m_db->metadata()->customData()->set(key, newValue);
+ break;
+ }
+ }
+ }
+ }
+
+ updateModel();
+ }
+ }
}
// Updates the shared key list after the list is cleared
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h
index d9d9885ca..369c8640f 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h
@@ -63,6 +63,9 @@ private slots:
void removeSharedEncryptionKeys();
void removeStoredPermissions();
void convertAttributesToCustomData();
+ void refreshDatabaseID();
+ void editIndex(const QModelIndex& index);
+ void editFinished(QStandardItem* item);
private:
void updateModel();
@@ -76,7 +79,7 @@ protected:
private:
QPointer<CustomData> m_customData;
QPointer<QStandardItemModel> m_customDataModel;
- BrowserService m_browserService;
+ QString m_valueInEdit;
};
#endif // KEEPASSXC_DATABASESETTINGSWIDGETBROWSER_H
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui
index 463f572d5..c67a5134b 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>453</width>
- <height>374</height>
+ <width>669</width>
+ <height>395</height>
</rect>
</property>
<property name="sizePolicy">
@@ -50,53 +50,58 @@
<property name="title">
<string>KeePassXC-Browser settings</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QPushButton" name="removeSharedEncryptionKeys">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>&amp;Disconnect all browsers</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="removeStoredPermissions">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Forg&amp;et all site-specific settings on entries</string>
- </property>
- </widget>
- </item>
- </layout>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="2" column="0">
+ <widget class="QPushButton" name="convertToCustomData">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Move KeePassHTTP attributes to KeePassXC-Browser custom data</string>
+ </property>
+ </widget>
</item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QPushButton" name="convertToCustomData">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</string>
- </property>
- </widget>
- </item>
- </layout>
+ <item row="2" column="1">
+ <widget class="QPushButton" name="refreshDatabaseID">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Refresh database root group ID</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QPushButton" name="removeSharedEncryptionKeys">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Disconnect all browsers</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="removeStoredPermissions">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Forget all site-specific settings on entries</string>
+ </property>
+ </widget>
</item>
</layout>
</widget>
@@ -106,10 +111,10 @@
<property name="title">
<string>Stored keys</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QGroupBox" name="groupBox_3">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QTableView" name="customDataTable">
<property name="accessibleName">
@@ -175,6 +180,14 @@
<container>1</container>
</customwidget>
</customwidgets>
+ <tabstops>
+ <tabstop>removeSharedEncryptionKeys</tabstop>
+ <tabstop>removeStoredPermissions</tabstop>
+ <tabstop>convertToCustomData</tabstop>
+ <tabstop>refreshDatabaseID</tabstop>
+ <tabstop>customDataTable</tabstop>
+ <tabstop>removeCustomDataButton</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp
index a58ee701f..2d733d06d 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp
@@ -15,13 +15,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "DatabaseSettingsWidgetMasterKey.h"
+#include "DatabaseSettingsWidgetDatabaseKey.h"
#include "core/Database.h"
#include "gui/MessageBox.h"
-#include "gui/masterkey/KeyFileEditWidget.h"
-#include "gui/masterkey/PasswordEditWidget.h"
-#include "gui/masterkey/YubiKeyEditWidget.h"
+#include "gui/databasekey/KeyFileEditWidget.h"
+#include "gui/databasekey/PasswordEditWidget.h"
+#include "gui/databasekey/YubiKeyEditWidget.h"
#include "keys/FileKey.h"
#include "keys/PasswordKey.h"
#include "keys/YkChallengeResponseKey.h"
@@ -30,7 +30,7 @@
#include <QSpacerItem>
#include <QVBoxLayout>
-DatabaseSettingsWidgetMasterKey::DatabaseSettingsWidgetMasterKey(QWidget* parent)
+DatabaseSettingsWidgetDatabaseKey::DatabaseSettingsWidgetDatabaseKey(QWidget* parent)
: DatabaseSettingsWidget(parent)
, m_additionalKeyOptionsToggle(new QPushButton(tr("Add additional protection..."), this))
, m_additionalKeyOptions(new QWidget(this))
@@ -65,11 +65,11 @@ DatabaseSettingsWidgetMasterKey::DatabaseSettingsWidgetMasterKey(QWidget* parent
setLayout(vbox);
}
-DatabaseSettingsWidgetMasterKey::~DatabaseSettingsWidgetMasterKey()
+DatabaseSettingsWidgetDatabaseKey::~DatabaseSettingsWidgetDatabaseKey()
{
}
-void DatabaseSettingsWidgetMasterKey::load(QSharedPointer<Database> db)
+void DatabaseSettingsWidgetDatabaseKey::load(QSharedPointer<Database> db)
{
DatabaseSettingsWidget::load(db);
@@ -107,7 +107,7 @@ void DatabaseSettingsWidgetMasterKey::load(QSharedPointer<Database> db)
#endif
}
-void DatabaseSettingsWidgetMasterKey::initialize()
+void DatabaseSettingsWidgetDatabaseKey::initialize()
{
bool blocked = blockSignals(true);
m_passwordEditWidget->setComponentAdded(false);
@@ -118,11 +118,11 @@ void DatabaseSettingsWidgetMasterKey::initialize()
blockSignals(blocked);
}
-void DatabaseSettingsWidgetMasterKey::uninitialize()
+void DatabaseSettingsWidgetDatabaseKey::uninitialize()
{
}
-bool DatabaseSettingsWidgetMasterKey::save()
+bool DatabaseSettingsWidgetDatabaseKey::save()
{
m_isDirty |= (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::Edit);
m_isDirty |= (m_keyFileEditWidget->visiblePage() == KeyComponentWidget::Page::Edit);
@@ -202,17 +202,17 @@ bool DatabaseSettingsWidgetMasterKey::save()
return true;
}
-void DatabaseSettingsWidgetMasterKey::discard()
+void DatabaseSettingsWidgetDatabaseKey::discard()
{
emit editFinished(false);
}
-void DatabaseSettingsWidgetMasterKey::showAdditionalKeyOptions()
+void DatabaseSettingsWidgetDatabaseKey::showAdditionalKeyOptions()
{
setAdditionalKeyOptionsVisible(true);
}
-void DatabaseSettingsWidgetMasterKey::setAdditionalKeyOptionsVisible(bool show)
+void DatabaseSettingsWidgetDatabaseKey::setAdditionalKeyOptionsVisible(bool show)
{
m_additionalKeyOptionsToggle->setVisible(!show);
m_additionalKeyOptions->setVisible(show);
@@ -220,14 +220,14 @@ void DatabaseSettingsWidgetMasterKey::setAdditionalKeyOptionsVisible(bool show)
emit sizeChanged();
}
-bool DatabaseSettingsWidgetMasterKey::addToCompositeKey(KeyComponentWidget* widget,
- QSharedPointer<CompositeKey>& newKey,
- QSharedPointer<Key>& oldKey)
+bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget,
+ QSharedPointer<CompositeKey>& newKey,
+ QSharedPointer<Key>& oldKey)
{
if (widget->visiblePage() == KeyComponentWidget::Edit) {
QString error = tr("Unknown error");
if (!widget->validate(error) || !widget->addToCompositeKey(newKey)) {
- MessageBox::critical(this, tr("Failed to change master key"), error, MessageBox::Ok);
+ MessageBox::critical(this, tr("Failed to change database credentials"), error, MessageBox::Ok);
return false;
}
} else if (widget->visiblePage() == KeyComponentWidget::LeaveOrRemove) {
@@ -237,14 +237,14 @@ bool DatabaseSettingsWidgetMasterKey::addToCompositeKey(KeyComponentWidget* widg
return true;
}
-bool DatabaseSettingsWidgetMasterKey::addToCompositeKey(KeyComponentWidget* widget,
- QSharedPointer<CompositeKey>& newKey,
- QSharedPointer<ChallengeResponseKey>& oldKey)
+bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget,
+ QSharedPointer<CompositeKey>& newKey,
+ QSharedPointer<ChallengeResponseKey>& oldKey)
{
if (widget->visiblePage() == KeyComponentWidget::Edit) {
QString error = tr("Unknown error");
if (!widget->validate(error) || !widget->addToCompositeKey(newKey)) {
- MessageBox::critical(this, tr("Failed to change master key"), error, MessageBox::Ok);
+ MessageBox::critical(this, tr("Failed to change database credentials"), error, MessageBox::Ok);
return false;
}
} else if (widget->visiblePage() == KeyComponentWidget::LeaveOrRemove) {
@@ -254,7 +254,7 @@ bool DatabaseSettingsWidgetMasterKey::addToCompositeKey(KeyComponentWidget* widg
return true;
}
-void DatabaseSettingsWidgetMasterKey::markDirty()
+void DatabaseSettingsWidgetDatabaseKey::markDirty()
{
m_isDirty = true;
}
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMasterKey.h b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h
index 1a3d6ed3f..a7d90e43e 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetMasterKey.h
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h
@@ -15,8 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEEPASSXC_DATABASESETTINGSPAGECHANGEMASTERKEY_H
-#define KEEPASSXC_DATABASESETTINGSPAGECHANGEMASTERKEY_H
+#ifndef KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H
+#define KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H
#include "DatabaseSettingsWidget.h"
#include "config-keepassx.h"
@@ -33,14 +33,14 @@ class KeyFileEditWidget;
class YubiKeyEditWidget;
class QPushButton;
-class DatabaseSettingsWidgetMasterKey : public DatabaseSettingsWidget
+class DatabaseSettingsWidgetDatabaseKey : public DatabaseSettingsWidget
{
Q_OBJECT
public:
- explicit DatabaseSettingsWidgetMasterKey(QWidget* parent = nullptr);
- Q_DISABLE_COPY(DatabaseSettingsWidgetMasterKey);
- ~DatabaseSettingsWidgetMasterKey() override;
+ explicit DatabaseSettingsWidgetDatabaseKey(QWidget* parent = nullptr);
+ Q_DISABLE_COPY(DatabaseSettingsWidgetDatabaseKey);
+ ~DatabaseSettingsWidgetDatabaseKey() override;
void load(QSharedPointer<Database> db) override;
@@ -82,4 +82,4 @@ private:
#endif
};
-#endif // KEEPASSXC_DATABASESETTINGSPAGECHANGEMASTERKEY_H
+#endif // KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp
index e2a8cdafe..cc57e453a 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp
@@ -45,9 +45,17 @@ DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* pare
m_ui->compatibilitySelection->addItem(tr("KDBX 4.0 (recommended)"), KeePass2::KDF_ARGON2.toByteArray());
m_ui->compatibilitySelection->addItem(tr("KDBX 3.1"), KeePass2::KDF_AES_KDBX3.toByteArray());
- m_ui->decryptionTimeSlider->setValue(10);
+ m_ui->decryptionTimeSlider->setMinimum(Kdf::MIN_ENCRYPTION_TIME / 100);
+ m_ui->decryptionTimeSlider->setMaximum(Kdf::MAX_ENCRYPTION_TIME / 100);
+ m_ui->decryptionTimeSlider->setValue(Kdf::DEFAULT_ENCRYPTION_TIME / 100);
updateDecryptionTime(m_ui->decryptionTimeSlider->value());
+ m_ui->transformBenchmarkButton->setText(
+ QObject::tr("Benchmark %1 delay")
+ .arg(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::DEFAULT_ENCRYPTION_TIME)));
+ m_ui->minTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MIN_ENCRYPTION_TIME));
+ m_ui->maxTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MAX_ENCRYPTION_TIME));
+
connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(activateChangeDecryptionTime()));
connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(updateDecryptionTime(int)));
connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(updateFormatCompatibility(int)));
@@ -373,11 +381,7 @@ void DatabaseSettingsWidgetEncryption::setAdvancedMode(bool advanced)
void DatabaseSettingsWidgetEncryption::updateDecryptionTime(int value)
{
- if (value < 10) {
- m_ui->decryptionTimeValueLabel->setText(tr("%1 ms", "milliseconds", value * 100).arg(value * 100));
- } else {
- m_ui->decryptionTimeValueLabel->setText(tr("%1 s", "seconds", value / 10).arg(value / 10.0, 0, 'f', 1));
- }
+ m_ui->decryptionTimeValueLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(value * 100));
}
void DatabaseSettingsWidgetEncryption::updateFormatCompatibility(int index, bool retransform)
@@ -409,3 +413,12 @@ void DatabaseSettingsWidgetEncryption::updateFormatCompatibility(int index, bool
activateChangeDecryptionTime();
}
}
+
+QString DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(int millisecs)
+{
+ if (millisecs < 1000) {
+ return QObject::tr("%1 ms", "milliseconds", millisecs).arg(millisecs);
+ } else {
+ return QObject::tr("%1 s", "seconds", millisecs / 1000).arg(millisecs / 1000.0, 0, 'f', 1);
+ }
+}
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h
index 986a33b6a..69388da6b 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h
@@ -20,6 +20,8 @@
#include "DatabaseSettingsWidget.h"
+#include "crypto/kdf/Kdf.h"
+
#include <QPointer>
#include <QScopedPointer>
@@ -49,11 +51,13 @@ public slots:
void uninitialize() override;
bool save() override;
+ static QString getTextualEncryptionTime(int millisecs);
+
protected:
void showEvent(QShowEvent* event) override;
private slots:
- void benchmarkTransformRounds(int millisecs = 1000);
+ void benchmarkTransformRounds(int millisecs = Kdf::DEFAULT_ENCRYPTION_TIME);
void changeKdf(int index);
void memoryChanged(int value);
void parallelismChanged(int value);
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui
index f8ba579dc..97da37475 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui
@@ -95,12 +95,6 @@
<property name="accessibleName">
<string>Decryption time in seconds</string>
</property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>50</number>
- </property>
<property name="singleStep">
<number>1</number>
</property>
@@ -124,9 +118,9 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QLabel" name="label_4">
+ <widget class="QLabel" name="minTimeLabel">
<property name="text">
- <string>100 ms</string>
+ <string>?? ms</string>
</property>
</widget>
</item>
@@ -144,9 +138,9 @@
</spacer>
</item>
<item>
- <widget class="QLabel" name="label_3">
+ <widget class="QLabel" name="maxTimeLabel">
<property name="text">
- <string>5 s</string>
+ <string>? s</string>
</property>
</widget>
</item>
@@ -326,9 +320,6 @@
<property name="focusPolicy">
<enum>Qt::WheelFocus</enum>
</property>
- <property name="text">
- <string>Benchmark 1-second delay</string>
- </property>
</widget>
</item>
<item>
@@ -429,6 +420,17 @@
</item>
</layout>
</widget>
+ <tabstops>
+ <tabstop>activateChangeDecryptionTimeButton</tabstop>
+ <tabstop>decryptionTimeSlider</tabstop>
+ <tabstop>compatibilitySelection</tabstop>
+ <tabstop>algorithmComboBox</tabstop>
+ <tabstop>kdfComboBox</tabstop>
+ <tabstop>transformRoundsSpinBox</tabstop>
+ <tabstop>transformBenchmarkButton</tabstop>
+ <tabstop>memorySpinBox</tabstop>
+ <tabstop>parallelismSpinBox</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui
index 02f07952b..29349282b 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui
@@ -183,7 +183,7 @@
<item>
<widget class="QCheckBox" name="compressionCheckbox">
<property name="text">
- <string>Enable &amp;compression (recommended)</string>
+ <string>Enable compression (recommended)</string>
</property>
<property name="checked">
<bool>true</bool>
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.ui b/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.ui
deleted file mode 100644
index ed9d6346e..000000000
--- a/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.ui
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DatabaseSettingsWidgetStatistics</class>
- <widget class="QWidget" name="DatabaseSettingsWidgetStatistics">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>327</width>
- <height>379</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QGroupBox" name="statisticsGroupBox">
- <property name="title">
- <string>Statistics</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QTableView" name="statisticsTableView">
- <property name="editTriggers">
- <set>QAbstractItemView::NoEditTriggers</set>
- </property>
- <property name="showDropIndicator" stdset="0">
- <bool>false</bool>
- </property>
- <property name="alternatingRowColors">
- <bool>true</bool>
- </property>
- <property name="textElideMode">
- <enum>Qt::ElideMiddle</enum>
- </property>
- <property name="sortingEnabled">
- <bool>false</bool>
- </property>
- <attribute name="horizontalHeaderVisible">
- <bool>false</bool>
- </attribute>
- <attribute name="horizontalHeaderStretchLastSection">
- <bool>true</bool>
- </attribute>
- <attribute name="verticalHeaderVisible">
- <bool>false</bool>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="tipLabel">
- <property name="font">
- <font>
- <italic>true</italic>
- </font>
- </property>
- <property name="text">
- <string>Hover over lines with error icons for further information.</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/gui/entry/AutoTypeMatchModel.cpp b/src/gui/entry/AutoTypeMatchModel.cpp
index 4148ccc66..ac2d0f874 100644
--- a/src/gui/entry/AutoTypeMatchModel.cpp
+++ b/src/gui/entry/AutoTypeMatchModel.cpp
@@ -118,15 +118,11 @@ QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const
switch (index.column()) {
case ParentGroup:
if (match.entry->group()) {
- return match.entry->group()->iconScaledPixmap();
+ return match.entry->group()->iconPixmap();
}
break;
case Title:
- if (match.entry->isExpired()) {
- return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex);
- } else {
- return match.entry->iconScaledPixmap();
- }
+ return match.entry->iconPixmap();
}
} else if (role == Qt::FontRole) {
QFont font;
diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp
index 02b9f3a59..cfe6fd5a9 100644
--- a/src/gui/entry/EditEntryWidget.cpp
+++ b/src/gui/entry/EditEntryWidget.cpp
@@ -41,8 +41,9 @@
#include "core/Config.h"
#include "core/Database.h"
#include "core/Entry.h"
-#include "core/FilePath.h"
#include "core/Metadata.h"
+#include "core/PasswordHealth.h"
+#include "core/Resources.h"
#include "core/TimeDelta.h"
#include "core/Tools.h"
#ifdef WITH_XC_SSHAGENT
@@ -106,12 +107,7 @@ EditEntryWidget::EditEntryWidget(QWidget* parent)
setupAutoType();
#ifdef WITH_XC_SSHAGENT
- if (config()->get("SSHAgent", false).toBool()) {
- setupSSHAgent();
- m_sshAgentEnabled = true;
- } else {
- m_sshAgentEnabled = false;
- }
+ setupSSHAgent();
#endif
#ifdef WITH_XC_BROWSER
@@ -122,6 +118,14 @@ EditEntryWidget::EditEntryWidget(QWidget* parent)
setupHistory();
setupEntryUpdate();
+ m_entryModifiedTimer.setSingleShot(true);
+ m_entryModifiedTimer.setInterval(0);
+ connect(&m_entryModifiedTimer, &QTimer::timeout, this, [this] {
+ if (isVisible() && m_entry) {
+ setForms(m_entry);
+ }
+ });
+
connect(this, SIGNAL(accepted()), SLOT(acceptEntry()));
connect(this, SIGNAL(rejected()), SLOT(cancel()));
connect(this, SIGNAL(apply()), SLOT(commitEntry()));
@@ -133,8 +137,6 @@ EditEntryWidget::EditEntryWidget(QWidget* parent)
connect(m_iconsWidget, SIGNAL(messageEditEntryDismiss()), SLOT(hideMessage()));
- m_mainUi->passwordGenerator->layout()->setContentsMargins(0, 0, 0, 0);
-
m_editWidgetProperties->setCustomData(m_customData.data());
}
@@ -145,7 +147,7 @@ EditEntryWidget::~EditEntryWidget()
void EditEntryWidget::setupMain()
{
m_mainUi->setupUi(m_mainWidget);
- addPage(tr("Entry"), FilePath::instance()->icon("actions", "document-edit"), m_mainWidget);
+ addPage(tr("Entry"), Resources::instance()->icon("document-edit"), m_mainWidget);
m_mainUi->usernameComboBox->setEditable(true);
m_usernameCompleter->setCompletionMode(QCompleter::InlineCompletion);
@@ -153,38 +155,35 @@ void EditEntryWidget::setupMain()
m_usernameCompleter->setModel(m_usernameCompleterModel);
m_mainUi->usernameComboBox->setCompleter(m_usernameCompleter);
- m_mainUi->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
- m_mainUi->togglePasswordGeneratorButton->setIcon(filePath()->icon("actions", "password-generator"));
#ifdef WITH_XC_NETWORKING
- m_mainUi->fetchFaviconButton->setIcon(filePath()->icon("actions", "favicon-download"));
+ m_mainUi->fetchFaviconButton->setIcon(resources()->icon("favicon-download"));
m_mainUi->fetchFaviconButton->setDisabled(true);
#else
m_mainUi->fetchFaviconButton->setVisible(false);
#endif
- connect(m_mainUi->togglePasswordButton, SIGNAL(toggled(bool)), m_mainUi->passwordEdit, SLOT(setShowPassword(bool)));
- connect(m_mainUi->togglePasswordGeneratorButton, SIGNAL(toggled(bool)), SLOT(togglePasswordGeneratorButton(bool)));
#ifdef WITH_XC_NETWORKING
connect(m_mainUi->fetchFaviconButton, SIGNAL(clicked()), m_iconsWidget, SLOT(downloadFavicon()));
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), m_iconsWidget, SLOT(setUrl(QString)));
m_mainUi->urlEdit->enableVerifyMode();
#endif
- connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool)));
+ connect(m_mainUi->expireCheck, &QCheckBox::toggled, [&](bool enabled) {
+ m_mainUi->expireDatePicker->setEnabled(enabled);
+ if (enabled) {
+ m_mainUi->expireDatePicker->setDateTime(Clock::currentDateTime());
+ }
+ });
+
connect(m_mainUi->notesEnabled, SIGNAL(toggled(bool)), this, SLOT(toggleHideNotes(bool)));
- m_mainUi->passwordRepeatEdit->enableVerifyMode(m_mainUi->passwordEdit);
- connect(m_mainUi->passwordGenerator, SIGNAL(appliedPassword(QString)), SLOT(setGeneratedPassword(QString)));
m_mainUi->expirePresets->setMenu(createPresetsMenu());
connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*)));
-
- m_mainUi->passwordGenerator->hide();
- m_mainUi->passwordGenerator->reset();
}
void EditEntryWidget::setupAdvanced()
{
m_advancedUi->setupUi(m_advancedWidget);
- addPage(tr("Advanced"), FilePath::instance()->icon("categories", "preferences-other"), m_advancedWidget);
+ addPage(tr("Advanced"), Resources::instance()->icon("preferences-other"), m_advancedWidget);
m_advancedUi->attachmentsWidget->setReadOnly(false);
m_advancedUi->attachmentsWidget->setButtonsVisible(true);
@@ -214,7 +213,7 @@ void EditEntryWidget::setupAdvanced()
void EditEntryWidget::setupIcon()
{
m_iconsWidget->setShowApplyIconToButton(false);
- addPage(tr("Icon"), FilePath::instance()->icon("apps", "preferences-desktop-icons"), m_iconsWidget);
+ addPage(tr("Icon"), Resources::instance()->icon("preferences-desktop-icons"), m_iconsWidget);
connect(this, SIGNAL(accepted()), m_iconsWidget, SLOT(abortRequests()));
connect(this, SIGNAL(rejected()), m_iconsWidget, SLOT(abortRequests()));
}
@@ -227,9 +226,9 @@ void EditEntryWidget::openAutotypeHelp()
void EditEntryWidget::setupAutoType()
{
m_autoTypeUi->setupUi(m_autoTypeWidget);
- addPage(tr("Auto-Type"), FilePath::instance()->icon("actions", "key-enter"), m_autoTypeWidget);
+ addPage(tr("Auto-Type"), Resources::instance()->icon("key-enter"), m_autoTypeWidget);
- m_autoTypeUi->openHelpButton->setIcon(filePath()->icon("actions", "system-help"));
+ m_autoTypeUi->openHelpButton->setIcon(resources()->icon("system-help"));
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton);
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton);
@@ -267,8 +266,8 @@ void EditEntryWidget::setupBrowser()
{
m_browserUi->setupUi(m_browserWidget);
- if (config()->get("Browser/Enabled", false).toBool()) {
- addPage(tr("Browser Integration"), FilePath::instance()->icon("apps", "internet-web-browser"), m_browserWidget);
+ if (config()->get(Config::Browser_Enabled).toBool()) {
+ addPage(tr("Browser Integration"), Resources::instance()->icon("internet-web-browser"), m_browserWidget);
m_additionalURLsDataModel->setEntryAttributes(m_entryAttributes);
m_browserUi->additionalURLsView->setModel(m_additionalURLsDataModel);
@@ -386,13 +385,13 @@ void EditEntryWidget::updateCurrentURL()
void EditEntryWidget::setupProperties()
{
- addPage(tr("Properties"), FilePath::instance()->icon("actions", "document-properties"), m_editWidgetProperties);
+ addPage(tr("Properties"), Resources::instance()->icon("document-properties"), m_editWidgetProperties);
}
void EditEntryWidget::setupHistory()
{
m_historyUi->setupUi(m_historyWidget);
- addPage(tr("History"), FilePath::instance()->icon("actions", "view-history"), m_historyWidget);
+ addPage(tr("History"), Resources::instance()->icon("view-history"), m_historyWidget);
m_sortModel->setSourceModel(m_historyModel);
m_sortModel->setDynamicSortFilter(true);
@@ -422,7 +421,6 @@ void EditEntryWidget::setupEntryUpdate()
connect(m_mainUi->titleEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
connect(m_mainUi->usernameComboBox->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(setModified()));
connect(m_mainUi->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
- connect(m_mainUi->passwordRepeatEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
#ifdef WITH_XC_NETWORKING
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(updateFaviconButtonEnable(QString)));
@@ -434,6 +432,7 @@ void EditEntryWidget::setupEntryUpdate()
// Advanced tab
connect(m_advancedUi->attributesEdit, SIGNAL(textChanged()), this, SLOT(setModified()));
connect(m_advancedUi->protectAttributeButton, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
+ connect(m_advancedUi->knownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
connect(m_advancedUi->fgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
connect(m_advancedUi->bgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
connect(m_advancedUi->attachmentsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified()));
@@ -455,7 +454,7 @@ void EditEntryWidget::setupEntryUpdate()
#ifdef WITH_XC_SSHAGENT
// SSH Agent tab
- if (config()->get("SSHAgent", false).toBool()) {
+ if (sshAgent()->isEnabled()) {
connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified()));
connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified()));
connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified()));
@@ -470,7 +469,7 @@ void EditEntryWidget::setupEntryUpdate()
#endif
#ifdef WITH_XC_BROWSER
- if (config()->get("Browser/Enabled", false).toBool()) {
+ if (config()->get(Config::Browser_Enabled).toBool()) {
connect(m_browserUi->skipAutoSubmitCheckbox, SIGNAL(toggled(bool)), SLOT(setModified()));
connect(m_browserUi->hideEntryCheckbox, SIGNAL(toggled(bool)), SLOT(setModified()));
connect(m_browserUi->onlyHttpAuthCheckbox, SIGNAL(toggled(bool)), SLOT(setModified()));
@@ -538,34 +537,29 @@ void EditEntryWidget::setupSSHAgent()
SIGNAL(entryAttachmentsModified()),
SLOT(updateSSHAgentAttachments()));
- addPage(tr("SSH Agent"), FilePath::instance()->icon("apps", "utilities-terminal"), m_sshAgentWidget);
+ addPage(tr("SSH Agent"), Resources::instance()->icon("utilities-terminal"), m_sshAgentWidget);
}
-void EditEntryWidget::updateSSHAgent()
+void EditEntryWidget::setSSHAgentSettings()
{
- KeeAgentSettings settings;
- settings.fromXml(m_advancedUi->attachmentsWidget->getAttachment("KeeAgent.settings"));
-
- m_sshAgentUi->addKeyToAgentCheckBox->setChecked(settings.addAtDatabaseOpen());
- m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(settings.removeAtDatabaseClose());
- m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(settings.useConfirmConstraintWhenAdding());
- m_sshAgentUi->lifetimeCheckBox->setChecked(settings.useLifetimeConstraintWhenAdding());
- m_sshAgentUi->lifetimeSpinBox->setValue(settings.lifetimeConstraintDuration());
+ m_sshAgentUi->addKeyToAgentCheckBox->setChecked(m_sshAgentSettings.addAtDatabaseOpen());
+ m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(m_sshAgentSettings.removeAtDatabaseClose());
+ m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(m_sshAgentSettings.useConfirmConstraintWhenAdding());
+ m_sshAgentUi->lifetimeCheckBox->setChecked(m_sshAgentSettings.useLifetimeConstraintWhenAdding());
+ m_sshAgentUi->lifetimeSpinBox->setValue(m_sshAgentSettings.lifetimeConstraintDuration());
m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->addToAgentButton->setEnabled(false);
m_sshAgentUi->removeFromAgentButton->setEnabled(false);
m_sshAgentUi->copyToClipboardButton->setEnabled(false);
+}
- m_sshAgentSettings = settings;
- updateSSHAgentAttachments();
-
- if (settings.selectedType() == "attachment") {
- m_sshAgentUi->attachmentRadioButton->setChecked(true);
- } else {
- m_sshAgentUi->externalFileRadioButton->setChecked(true);
- }
+void EditEntryWidget::updateSSHAgent()
+{
+ m_sshAgentSettings.reset();
+ m_sshAgentSettings.fromEntry(m_entry);
+ setSSHAgentSettings();
- updateSSHAgentKeyInfo();
+ updateSSHAgentAttachments();
}
void EditEntryWidget::updateSSHAgentAttachment()
@@ -576,6 +570,13 @@ void EditEntryWidget::updateSSHAgentAttachment()
void EditEntryWidget::updateSSHAgentAttachments()
{
+ // detect if KeeAgent.settings was removed by hand and reset settings
+ if (m_entry && KeeAgentSettings::inEntryAttachments(m_entry->attachments())
+ && !KeeAgentSettings::inEntryAttachments(m_advancedUi->attachmentsWidget->entryAttachments())) {
+ m_sshAgentSettings.reset();
+ setSSHAgentSettings();
+ }
+
m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->attachmentComboBox->addItem("");
@@ -590,6 +591,14 @@ void EditEntryWidget::updateSSHAgentAttachments()
m_sshAgentUi->attachmentComboBox->setCurrentText(m_sshAgentSettings.attachmentName());
m_sshAgentUi->externalFileEdit->setText(m_sshAgentSettings.fileName());
+
+ if (m_sshAgentSettings.selectedType() == "attachment") {
+ m_sshAgentUi->attachmentRadioButton->setChecked(true);
+ } else {
+ m_sshAgentUi->externalFileRadioButton->setChecked(true);
+ }
+
+ updateSSHAgentKeyInfo();
}
void EditEntryWidget::updateSSHAgentKeyInfo()
@@ -631,18 +640,16 @@ void EditEntryWidget::updateSSHAgentKeyInfo()
}
// enable agent buttons only if we have an agent running
- if (SSHAgent::instance()->isAgentRunning()) {
+ if (sshAgent()->isAgentRunning()) {
m_sshAgentUi->addToAgentButton->setEnabled(true);
m_sshAgentUi->removeFromAgentButton->setEnabled(true);
- SSHAgent::instance()->setAutoRemoveOnLock(key, m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked());
+ sshAgent()->setAutoRemoveOnLock(key, m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked());
}
}
-void EditEntryWidget::saveSSHAgentConfig()
+void EditEntryWidget::toKeeAgentSettings(KeeAgentSettings& settings) const
{
- KeeAgentSettings settings;
-
settings.setAddAtDatabaseOpen(m_sshAgentUi->addKeyToAgentCheckBox->isChecked());
settings.setRemoveAtDatabaseClose(m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked());
settings.setUseConfirmConstraintWhenAdding(m_sshAgentUi->requireUserConfirmationCheckBox->isChecked());
@@ -662,14 +669,6 @@ void EditEntryWidget::saveSSHAgentConfig()
// we don't use this either but we don't want it to dirty flag the config
settings.setSaveAttachmentToTempFile(m_sshAgentSettings.saveAttachmentToTempFile());
-
- if (settings.isDefault()) {
- m_advancedUi->attachmentsWidget->removeAttachment("KeeAgent.settings");
- } else if (settings != m_sshAgentSettings) {
- m_advancedUi->attachmentsWidget->setAttachment("KeeAgent.settings", settings.toXml());
- }
-
- m_sshAgentSettings = settings;
}
void EditEntryWidget::browsePrivateKey()
@@ -684,58 +683,22 @@ void EditEntryWidget::browsePrivateKey()
bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key, bool decrypt)
{
- QString fileName;
- QByteArray privateKeyData;
-
- if (m_sshAgentUi->attachmentRadioButton->isChecked()) {
- fileName = m_sshAgentUi->attachmentComboBox->currentText();
- privateKeyData = m_advancedUi->attachmentsWidget->getAttachment(fileName);
- } else {
- QFile localFile(m_sshAgentUi->externalFileEdit->text());
- QFileInfo localFileInfo(localFile);
- fileName = localFileInfo.fileName();
-
- if (localFile.fileName().isEmpty()) {
- return false;
- }
-
- if (localFile.size() > 1024 * 1024) {
- showMessage(tr("File too large to be a private key"), MessageWidget::Error);
- return false;
- }
-
- if (!localFile.open(QIODevice::ReadOnly)) {
- showMessage(tr("Failed to open private key"), MessageWidget::Error);
- return false;
- }
-
- privateKeyData = localFile.readAll();
- }
+ KeeAgentSettings settings;
+ toKeeAgentSettings(settings);
- if (privateKeyData.isEmpty()) {
+ if (!m_entry || !settings.keyConfigured()) {
return false;
}
- if (!key.parsePKCS1PEM(privateKeyData)) {
- showMessage(key.errorString(), MessageWidget::Error);
+ if (!settings.toOpenSSHKey(m_mainUi->usernameComboBox->lineEdit()->text(),
+ m_mainUi->passwordEdit->text(),
+ m_advancedUi->attachmentsWidget->entryAttachments(),
+ key,
+ decrypt)) {
+ showMessage(settings.errorString(), MessageWidget::Error);
return false;
}
- if (key.encrypted() && (decrypt || key.publicKey().isEmpty())) {
- if (!key.openKey(m_entry->password())) {
- showMessage(key.errorString(), MessageWidget::Error);
- return false;
- }
- }
-
- if (key.comment().isEmpty()) {
- key.setComment(m_entry->username());
- }
-
- if (key.comment().isEmpty()) {
- key.setComment(fileName);
- }
-
return true;
}
@@ -751,14 +714,10 @@ void EditEntryWidget::addKeyToAgent()
m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey());
KeeAgentSettings settings;
+ toKeeAgentSettings(settings);
- settings.setRemoveAtDatabaseClose(m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked());
- settings.setUseConfirmConstraintWhenAdding(m_sshAgentUi->requireUserConfirmationCheckBox->isChecked());
- settings.setUseLifetimeConstraintWhenAdding(m_sshAgentUi->lifetimeCheckBox->isChecked());
- settings.setLifetimeConstraintDuration(m_sshAgentUi->lifetimeSpinBox->value());
-
- if (!SSHAgent::instance()->addIdentity(key, settings)) {
- showMessage(SSHAgent::instance()->errorString(), MessageWidget::Error);
+ if (!sshAgent()->addIdentity(key, settings, m_db->uuid())) {
+ showMessage(sshAgent()->errorString(), MessageWidget::Error);
return;
}
}
@@ -771,8 +730,8 @@ void EditEntryWidget::removeKeyFromAgent()
return;
}
- if (!SSHAgent::instance()->removeIdentity(key)) {
- showMessage(SSHAgent::instance()->errorString(), MessageWidget::Error);
+ if (!sshAgent()->removeIdentity(key)) {
+ showMessage(sshAgent()->errorString(), MessageWidget::Error);
return;
}
}
@@ -834,13 +793,15 @@ void EditEntryWidget::loadEntry(Entry* entry,
m_create = create;
m_history = history;
+ connect(m_entry, &Entry::entryModified, this, [this] { m_entryModifiedTimer.start(); });
+
if (history) {
- setHeadline(QString("%1 > %2").arg(parentName, tr("Entry history")));
+ setHeadline(QString("%1 \u2B29 %2").arg(parentName, tr("Entry history")));
} else {
if (create) {
- setHeadline(QString("%1 > %2").arg(parentName, tr("Add entry")));
+ setHeadline(QString("%1 \u2B29 %2").arg(parentName, tr("Add entry")));
} else {
- setHeadline(QString("%1 > %2 > %3").arg(parentName, entry->title(), tr("Edit entry")));
+ setHeadline(QString("%1 \u2B29 %2 \u2B29 %3").arg(parentName, entry->title(), tr("Edit entry")));
}
}
@@ -849,6 +810,9 @@ void EditEntryWidget::loadEntry(Entry* entry,
setCurrentPage(0);
setPageHidden(m_historyWidget, m_history || m_entry->historyItems().count() < 1);
+#ifdef WITH_XC_SSHAGENT
+ setPageHidden(m_sshAgentWidget, !sshAgent()->isEnabled());
+#endif
// Force the user to Save/Discard new entries
showApplyButton(!m_create);
@@ -864,21 +828,17 @@ void EditEntryWidget::setForms(Entry* entry, bool restore)
m_mainUi->usernameComboBox->lineEdit()->setReadOnly(m_history);
m_mainUi->urlEdit->setReadOnly(m_history);
m_mainUi->passwordEdit->setReadOnly(m_history);
- m_mainUi->passwordRepeatEdit->setReadOnly(m_history);
m_mainUi->expireCheck->setEnabled(!m_history);
m_mainUi->expireDatePicker->setReadOnly(m_history);
- m_mainUi->notesEnabled->setChecked(!config()->get("security/hidenotes").toBool());
+ m_mainUi->notesEnabled->setChecked(!config()->get(Config::Security_HideNotes).toBool());
m_mainUi->notesEdit->setReadOnly(m_history);
- m_mainUi->notesEdit->setVisible(!config()->get("security/hidenotes").toBool());
- m_mainUi->notesHint->setVisible(config()->get("security/hidenotes").toBool());
- if (config()->get("GUI/MonospaceNotes", false).toBool()) {
+ m_mainUi->notesEdit->setVisible(!config()->get(Config::Security_HideNotes).toBool());
+ m_mainUi->notesHint->setVisible(config()->get(Config::Security_HideNotes).toBool());
+ if (config()->get(Config::GUI_MonospaceNotes).toBool()) {
m_mainUi->notesEdit->setFont(Font::fixedFont());
} else {
m_mainUi->notesEdit->setFont(Font::defaultFont());
}
- m_mainUi->togglePasswordGeneratorButton->setChecked(false);
- m_mainUi->togglePasswordGeneratorButton->setDisabled(m_history);
- m_mainUi->passwordGenerator->reset(entry->password().length());
m_advancedUi->attachmentsWidget->setReadOnly(m_history);
m_advancedUi->addAttributeButton->setEnabled(!m_history);
@@ -892,6 +852,9 @@ void EditEntryWidget::setForms(Entry* entry, bool restore)
editTriggers = QAbstractItemView::DoubleClicked;
}
m_advancedUi->attributesView->setEditTriggers(editTriggers);
+ m_advancedUi->knownBadCheckBox->setChecked(entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD)
+ == TRUE_STR);
setupColorButton(true, entry->foregroundColor());
setupColorButton(false, entry->backgroundColor());
m_iconsWidget->setEnabled(!m_history);
@@ -904,11 +867,13 @@ void EditEntryWidget::setForms(Entry* entry, bool restore)
m_mainUi->usernameComboBox->lineEdit()->setText(entry->username());
m_mainUi->urlEdit->setText(entry->url());
m_mainUi->passwordEdit->setText(entry->password());
- m_mainUi->passwordRepeatEdit->setText(entry->password());
+ m_mainUi->passwordEdit->setShowPassword(!config()->get(Config::Security_PasswordsHidden).toBool());
+ if (!m_history) {
+ m_mainUi->passwordEdit->enablePasswordGenerator();
+ }
m_mainUi->expireCheck->setChecked(entry->timeInfo().expires());
m_mainUi->expireDatePicker->setDateTime(entry->timeInfo().expiryTime().toLocalTime());
m_mainUi->expirePresets->setEnabled(!m_history);
- m_mainUi->togglePasswordButton->setChecked(config()->get("security/passwordscleartext").toBool());
QList<QString> commonUsernames = m_db->commonUsernames();
m_usernameCompleterModel->setStringList(commonUsernames);
@@ -960,7 +925,7 @@ void EditEntryWidget::setForms(Entry* entry, bool restore)
updateAutoTypeEnabled();
#ifdef WITH_XC_SSHAGENT
- if (m_sshAgentEnabled) {
+ if (sshAgent()->isEnabled()) {
updateSSHAgent();
}
#endif
@@ -1028,27 +993,6 @@ bool EditEntryWidget::commitEntry()
return true;
}
- if (!passwordsEqual()) {
- showMessage(tr("Different passwords supplied."), MessageWidget::Error);
- return false;
- }
-
- // Ask the user to apply the generator password, if open
- if (m_mainUi->togglePasswordGeneratorButton->isChecked()
- && m_mainUi->passwordGenerator->getGeneratedPassword() != m_mainUi->passwordEdit->text()) {
- auto answer = MessageBox::question(this,
- tr("Apply generated password?"),
- tr("Do you want to apply the generated password to this entry?"),
- MessageBox::Yes | MessageBox::No,
- MessageBox::Yes);
- if (answer == MessageBox::Yes) {
- m_mainUi->passwordGenerator->applyPassword();
- }
- }
-
- // Hide the password generator
- m_mainUi->togglePasswordGeneratorButton->setChecked(false);
-
if (m_advancedUi->attributesView->currentIndex().isValid() && m_advancedUi->attributesEdit->isEnabled()) {
QString key = m_attributesModel->keyByIndex(m_advancedUi->attributesView->currentIndex());
m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(key));
@@ -1064,13 +1008,11 @@ bool EditEntryWidget::commitEntry()
m_autoTypeAssoc->removeEmpty();
#ifdef WITH_XC_SSHAGENT
- if (m_sshAgentEnabled) {
- saveSSHAgentConfig();
- }
+ toKeeAgentSettings(m_sshAgentSettings);
#endif
#ifdef WITH_XC_BROWSER
- if (config()->get("Browser/Enabled", false).toBool()) {
+ if (config()->get(Config::Browser_Enabled).toBool()) {
updateBrowser();
}
#endif
@@ -1085,13 +1027,8 @@ bool EditEntryWidget::commitEntry()
m_entry->endUpdate();
}
-#ifdef WITH_XC_SSHAGENT
- if (m_sshAgentEnabled) {
- updateSSHAgent();
- }
-#endif
-
m_historyModel->setEntries(m_entry->historyItems());
+ m_advancedUi->attachmentsWidget->setEntryAttachments(m_entry->attachments());
showMessage(tr("Entry updated successfully."), MessageWidget::Positive);
setModified(false);
@@ -1122,16 +1059,23 @@ void EditEntryWidget::updateEntryData(Entry* entry) const
entry->setNotes(m_mainUi->notesEdit->toPlainText());
+ const auto wasKnownBad = entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR;
+ const auto isKnownBad = m_advancedUi->knownBadCheckBox->isChecked();
+ if (isKnownBad != wasKnownBad) {
+ entry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR);
+ }
+
if (m_advancedUi->fgColorCheckBox->isChecked() && m_advancedUi->fgColorButton->property("color").isValid()) {
- entry->setForegroundColor(QColor(m_advancedUi->fgColorButton->property("color").toString()));
+ entry->setForegroundColor(m_advancedUi->fgColorButton->property("color").toString());
} else {
- entry->setForegroundColor(QColor());
+ entry->setForegroundColor(QString());
}
if (m_advancedUi->bgColorCheckBox->isChecked() && m_advancedUi->bgColorButton->property("color").isValid()) {
- entry->setBackgroundColor(QColor(m_advancedUi->bgColorButton->property("color").toString()));
+ entry->setBackgroundColor(m_advancedUi->bgColorButton->property("color").toString());
} else {
- entry->setBackgroundColor(QColor());
+ entry->setBackgroundColor(QString());
}
IconStruct iconStruct = m_iconsWidget->state();
@@ -1152,6 +1096,12 @@ void EditEntryWidget::updateEntryData(Entry* entry) const
}
entry->autoTypeAssociations()->copyDataFrom(m_autoTypeAssoc);
+
+#ifdef WITH_XC_SSHAGENT
+ if (sshAgent()->isEnabled()) {
+ m_sshAgentSettings.toEntry(entry);
+ }
+#endif
}
void EditEntryWidget::cancel()
@@ -1163,15 +1113,15 @@ void EditEntryWidget::cancel()
return;
}
- if (!m_entry->iconUuid().isNull() && !m_db->metadata()->containsCustomIcon(m_entry->iconUuid())) {
+ if (!m_entry->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_entry->iconUuid())) {
m_entry->setIcon(Entry::DefaultIconNumber);
}
bool accepted = false;
if (isModified()) {
auto result = MessageBox::question(this,
- QString(),
- tr("Entry has unsaved changes"),
+ tr("Unsaved Changes"),
+ tr("Would you like to save changes to this entry?"),
MessageBox::Cancel | MessageBox::Save | MessageBox::Discard,
MessageBox::Cancel);
if (result == MessageBox::Cancel) {
@@ -1190,12 +1140,15 @@ void EditEntryWidget::cancel()
void EditEntryWidget::clear()
{
+ if (m_entry) {
+ m_entry->disconnect(this);
+ }
+
m_entry = nullptr;
m_db.reset();
m_mainUi->titleEdit->setText("");
m_mainUi->passwordEdit->setText("");
- m_mainUi->passwordRepeatEdit->setText("");
m_mainUi->urlEdit->setText("");
m_mainUi->notesEdit->clear();
@@ -1207,27 +1160,6 @@ void EditEntryWidget::clear()
hideMessage();
}
-void EditEntryWidget::togglePasswordGeneratorButton(bool checked)
-{
- if (checked) {
- m_mainUi->passwordGenerator->regeneratePassword();
- }
- m_mainUi->passwordGenerator->setVisible(checked);
-}
-
-bool EditEntryWidget::passwordsEqual()
-{
- return m_mainUi->passwordEdit->text() == m_mainUi->passwordRepeatEdit->text();
-}
-
-void EditEntryWidget::setGeneratedPassword(const QString& password)
-{
- m_mainUi->passwordEdit->setText(password);
- m_mainUi->passwordRepeatEdit->setText(password);
-
- m_mainUi->togglePasswordGeneratorButton->setChecked(false);
-}
-
#ifdef WITH_XC_NETWORKING
void EditEntryWidget::updateFaviconButtonEnable(const QString& url)
{
@@ -1318,7 +1250,7 @@ void EditEntryWidget::displayAttribute(QModelIndex index, bool showProtected)
if (index.isValid()) {
QString key = m_attributesModel->keyByIndex(index);
if (showProtected) {
- m_advancedUi->attributesEdit->setPlainText(tr("[PROTECTED] Press reveal to view or edit"));
+ m_advancedUi->attributesEdit->setPlainText(tr("[PROTECTED] Press Reveal to view or edit"));
m_advancedUi->attributesEdit->setEnabled(false);
m_advancedUi->revealAttributeButton->setEnabled(true);
m_advancedUi->protectAttributeButton->setChecked(true);
diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h
index 300220cd0..3d1835396 100644
--- a/src/gui/entry/EditEntryWidget.h
+++ b/src/gui/entry/EditEntryWidget.h
@@ -24,6 +24,7 @@
#include <QModelIndex>
#include <QPointer>
#include <QScopedPointer>
+#include <QTimer>
#include "config-keepassx.h"
#include "gui/EditWidget.h"
@@ -83,8 +84,6 @@ private slots:
void acceptEntry();
bool commitEntry();
void cancel();
- void togglePasswordGeneratorButton(bool checked);
- void setGeneratedPassword(const QString& password);
#ifdef WITH_XC_NETWORKING
void updateFaviconButtonEnable(const QString& url);
#endif
@@ -112,6 +111,8 @@ private slots:
void toggleHideNotes(bool visible);
void pickColor();
#ifdef WITH_XC_SSHAGENT
+ void toKeeAgentSettings(KeeAgentSettings& settings) const;
+ void setSSHAgentSettings();
void updateSSHAgent();
void updateSSHAgentAttachment();
void updateSSHAgentAttachments();
@@ -153,7 +154,6 @@ private:
void updateEntryData(Entry* entry) const;
#ifdef WITH_XC_SSHAGENT
bool getOpenSSHKey(OpenSSHKey& key, bool decrypt = false);
- void saveSSHAgentConfig();
#endif
void displayAttribute(QModelIndex index, bool showProtected);
@@ -164,7 +164,6 @@ private:
bool m_create;
bool m_history;
#ifdef WITH_XC_SSHAGENT
- bool m_sshAgentEnabled;
KeeAgentSettings m_sshAgentSettings;
#endif
const QScopedPointer<Ui::EditEntryWidgetMain> m_mainUi;
@@ -200,6 +199,7 @@ private:
QButtonGroup* const m_autoTypeWindowSequenceGroup;
QCompleter* const m_usernameCompleter;
QStringListModel* const m_usernameCompleterModel;
+ QTimer m_entryModifiedTimer;
Q_DISABLE_COPY(EditEntryWidget)
};
diff --git a/src/gui/entry/EditEntryWidgetAdvanced.ui b/src/gui/entry/EditEntryWidgetAdvanced.ui
index 7b079b676..80841eb64 100644
--- a/src/gui/entry/EditEntryWidgetAdvanced.ui
+++ b/src/gui/entry/EditEntryWidgetAdvanced.ui
@@ -7,10 +7,22 @@
<x>0</x>
<y>0</y>
<width>532</width>
- <height>374</height>
+ <height>469</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
<item>
<widget class="QGroupBox" name="attributesBox">
<property name="title">
@@ -175,8 +187,30 @@
</widget>
</item>
<item>
+ <widget class="QCheckBox" name="knownBadCheckBox">
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Exclude from database reports</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QWidget" name="colorsBox" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_4">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
<item>
<widget class="QCheckBox" name="fgColorCheckBox">
<property name="text">
@@ -293,6 +327,7 @@
<tabstop>editAttributeButton</tabstop>
<tabstop>protectAttributeButton</tabstop>
<tabstop>revealAttributeButton</tabstop>
+ <tabstop>knownBadCheckBox</tabstop>
<tabstop>fgColorCheckBox</tabstop>
<tabstop>fgColorButton</tabstop>
<tabstop>bgColorCheckBox</tabstop>
diff --git a/src/gui/entry/EditEntryWidgetAutoType.ui b/src/gui/entry/EditEntryWidgetAutoType.ui
index d987e8047..f82240d7d 100644
--- a/src/gui/entry/EditEntryWidgetAutoType.ui
+++ b/src/gui/entry/EditEntryWidgetAutoType.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>567</width>
- <height>348</height>
+ <width>577</width>
+ <height>434</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@@ -49,14 +49,14 @@
<item>
<widget class="QRadioButton" name="inheritSequenceButton">
<property name="text">
- <string>Inherit default Auto-Type sequence from the &amp;group</string>
+ <string>Inherit default Auto-Type sequence from the group</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="customSequenceButton">
<property name="text">
- <string>&amp;Use custom Auto-Type sequence:</string>
+ <string>Use custom Auto-Type sequence:</string>
</property>
</widget>
</item>
@@ -107,6 +107,22 @@
</layout>
</item>
<item>
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="QGroupBox" name="windowsBox">
<property name="title">
<string>Window Associations</string>
diff --git a/src/gui/entry/EditEntryWidgetMain.ui b/src/gui/entry/EditEntryWidgetMain.ui
index 54140fcd9..f96481a3f 100644
--- a/src/gui/entry/EditEntryWidgetMain.ui
+++ b/src/gui/entry/EditEntryWidgetMain.ui
@@ -6,11 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
- <width>329</width>
- <height>381</height>
+ <width>496</width>
+ <height>420</height>
</rect>
</property>
- <layout class="QGridLayout" name="gridLayout_3">
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
<property name="topMargin">
<number>0</number>
</property>
@@ -20,127 +23,90 @@
<property name="bottomMargin">
<number>0</number>
</property>
- <item row="5" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="urlLabel">
- <property name="text">
- <string>URL:</string>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
+ <property name="verticalSpacing">
+ <number>8</number>
+ </property>
+ <item row="6" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="URLEdit" name="urlEdit">
+ <widget class="QPlainTextEdit" name="notesEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>100</height>
+ </size>
+ </property>
<property name="accessibleName">
- <string>Url field</string>
+ <string>Notes field</string>
</property>
</widget>
</item>
<item>
- <widget class="QToolButton" name="fetchFaviconButton">
- <property name="toolTip">
- <string>Download favicon for URL</string>
+ <widget class="QLabel" name="notesHint">
+ <property name="visible">
+ <bool>true</bool>
</property>
- <property name="accessibleName">
- <string>Download favicon for URL</string>
+ <property name="text">
+ <string>Toggle the checkbox to reveal the notes section.</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
- <item row="4" column="1">
- <widget class="PasswordGeneratorWidget" name="passwordGenerator" native="true"/>
- </item>
- <item row="2" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="passwordLabel">
- <property name="text">
- <string>Password:</string>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="usernameComboBox">
+ <property name="accessibleName">
+ <string>Username field</string>
</property>
</widget>
</item>
- <item row="3" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item row="6" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="PasswordEdit" name="passwordRepeatEdit">
- <property name="accessibleName">
- <string>Repeat password field</string>
- </property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="togglePasswordGeneratorButton">
+ <widget class="QCheckBox" name="notesEnabled">
<property name="toolTip">
- <string>Toggle password generator</string>
- </property>
- <property name="accessibleName">
- <string>Toggle password generator</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
+ <string>Toggle notes visible</string>
</property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="2" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="PasswordEdit" name="passwordEdit">
<property name="accessibleName">
- <string>Password field</string>
+ <string>Toggle notes visible</string>
</property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
+ <property name="text">
+ <string>Notes:</string>
</property>
</widget>
</item>
<item>
- <widget class="QToolButton" name="togglePasswordButton">
- <property name="toolTip">
- <string>Toggle password visibility</string>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="accessibleName">
- <string>Toggle password visibility</string>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
</property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
+ </spacer>
</item>
</layout>
</item>
- <item row="3" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="passwordRepeatLabel">
- <property name="text">
- <string>Repeat:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="titleLabel">
- <property name="text">
- <string>Title:</string>
- </property>
- </widget>
- </item>
- <item row="9" column="0" alignment="Qt::AlignLeft|Qt::AlignTop">
- <widget class="QCheckBox" name="notesEnabled">
- <property name="toolTip">
- <string>Toggle notes visible</string>
- </property>
- <property name="accessibleName">
- <string>Toggle notes visible</string>
- </property>
- <property name="text">
- <string>Notes</string>
- </property>
- </widget>
- </item>
- <item row="7" column="1">
+ <item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>8</number>
+ </property>
<item>
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
@@ -175,42 +141,60 @@
</item>
</layout>
</item>
- <item row="9" column="1">
- <widget class="QPlainTextEdit" name="notesEdit">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>1</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>100</height>
- </size>
+ <item row="2" column="0">
+ <widget class="QLabel" name="passwordLabel">
+ <property name="text">
+ <string>Password:</string>
</property>
- <property name="accessibleName">
- <string>Notes field</string>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="9" column="1">
- <widget class="QLabel" name="notesHint">
- <property name="visible">
- <bool>false</bool>
- </property>
+ <item row="3" column="0">
+ <widget class="QLabel" name="urlLabel">
<property name="text">
- <string>Toggle the checkbox to reveal the notes section.</string>
+ <string>URL:</string>
</property>
<property name="alignment">
- <set>Qt::AlignTop</set>
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="1" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="usernameLabel">
+ <item row="3" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <property name="spacing">
+ <number>8</number>
+ </property>
+ <item>
+ <widget class="URLEdit" name="urlEdit">
+ <property name="accessibleName">
+ <string>Url field</string>
+ </property>
+ <property name="placeholderText">
+ <string>https://example.com</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="fetchFaviconButton">
+ <property name="toolTip">
+ <string>Download favicon for URL</string>
+ </property>
+ <property name="accessibleName">
+ <string>Download favicon for URL</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="titleLabel">
<property name="text">
- <string>Username:</string>
+ <string>Title:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
@@ -221,36 +205,50 @@
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QComboBox" name="usernameComboBox">
- <property name="accessibleName">
- <string>Username field</string>
+ <item row="1" column="0">
+ <widget class="QLabel" name="usernameLabel">
+ <property name="text">
+ <string>Username:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="7" column="0" alignment="Qt::AlignRight">
- <widget class="QCheckBox" name="expireCheck">
- <property name="toolTip">
- <string>Toggle expiration</string>
- </property>
+ <item row="2" column="1">
+ <widget class="PasswordEdit" name="passwordEdit">
<property name="accessibleName">
- <string>Toggle expiration</string>
+ <string>Password field</string>
</property>
- <property name="text">
- <string>Expires</string>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
+ <item row="5" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="expireCheck">
+ <property name="toolTip">
+ <string>Toggle expiration</string>
+ </property>
+ <property name="accessibleName">
+ <string>Toggle expiration</string>
+ </property>
+ <property name="text">
+ <string>Expires:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
<customwidgets>
<customwidget>
- <class>PasswordGeneratorWidget</class>
- <extends>QWidget</extends>
- <header>gui/PasswordGeneratorWidget.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
<class>PasswordEdit</class>
<extends>QLineEdit</extends>
<header>gui/PasswordEdit.h</header>
@@ -267,9 +265,6 @@
<tabstop>titleEdit</tabstop>
<tabstop>usernameComboBox</tabstop>
<tabstop>passwordEdit</tabstop>
- <tabstop>togglePasswordButton</tabstop>
- <tabstop>passwordRepeatEdit</tabstop>
- <tabstop>togglePasswordGeneratorButton</tabstop>
<tabstop>urlEdit</tabstop>
<tabstop>fetchFaviconButton</tabstop>
<tabstop>expireCheck</tabstop>
diff --git a/src/gui/entry/EditEntryWidgetSSHAgent.ui b/src/gui/entry/EditEntryWidgetSSHAgent.ui
index 2e9d94b65..fae13dccb 100644
--- a/src/gui/entry/EditEntryWidgetSSHAgent.ui
+++ b/src/gui/entry/EditEntryWidgetSSHAgent.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>498</width>
- <height>518</height>
+ <width>452</width>
+ <height>618</height>
</rect>
</property>
<property name="windowTitle">
@@ -26,53 +26,6 @@
<property name="bottomMargin">
<number>0</number>
</property>
- <item row="3" column="1" colspan="4">
- <layout class="QHBoxLayout" name="removeKeyLayout">
- <item>
- <widget class="QCheckBox" name="lifetimeCheckBox">
- <property name="text">
- <string>Remove key from agent after</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="lifetimeSpinBox">
- <property name="accessibleName">
- <string>Remove key from agent after specified seconds</string>
- </property>
- <property name="suffix">
- <string> seconds</string>
- </property>
- <property name="maximum">
- <number>999999999</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="removeKeySpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="11" column="1">
- <widget class="QLabel" name="fingerprintLabel">
- <property name="text">
- <string>Fingerprint</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
<item row="1" column="1" colspan="4">
<widget class="QCheckBox" name="removeKeyFromAgentCheckBox">
<property name="text">
@@ -80,13 +33,13 @@
</property>
</widget>
</item>
- <item row="13" column="1">
- <widget class="QLabel" name="publicKeyLabel">
+ <item row="14" column="1">
+ <widget class="QLabel" name="commentLabel">
<property name="text">
- <string>Public key</string>
+ <string>Comment</string>
</property>
<property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
@@ -97,63 +50,69 @@
</property>
</widget>
</item>
- <item row="12" column="1">
- <widget class="QLabel" name="commentLabel">
- <property name="text">
- <string>Comment</string>
+ <item row="15" column="3" colspan="2">
+ <widget class="QPlainTextEdit" name="publicKeyEdit">
+ <property name="font">
+ <font>
+ <family>Monospace</family>
+ </font>
</property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ <property name="readOnly">
+ <bool>true</bool>
</property>
</widget>
</item>
- <item row="12" column="4">
+ <item row="14" column="4">
<widget class="QPushButton" name="decryptButton">
<property name="text">
<string>Decrypt</string>
</property>
</widget>
</item>
- <item row="11" column="3" colspan="2">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="fingerprintTextLabel">
- <property name="font">
- <font>
- <family>Monospace</family>
- </font>
- </property>
- <property name="text">
- <string>n/a</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
+ <item row="4" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="13" column="1">
+ <widget class="QLabel" name="fingerprintLabel">
+ <property name="text">
+ <string>Fingerprint</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
</item>
- <item row="14" column="3" colspan="2">
+ <item row="16" column="3" colspan="2">
<widget class="QPushButton" name="copyToClipboardButton">
<property name="text">
<string>Copy to clipboard</string>
</property>
</widget>
</item>
- <item row="4" column="1" colspan="4">
+ <item row="15" column="1">
+ <widget class="QLabel" name="publicKeyLabel">
+ <property name="text">
+ <string>Public key</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" colspan="4">
<widget class="QGroupBox" name="privateKeyGroupBox">
<property name="title">
<string>Private key</string>
@@ -240,19 +199,7 @@
</property>
</widget>
</item>
- <item row="13" column="3" colspan="2">
- <widget class="QPlainTextEdit" name="publicKeyEdit">
- <property name="font">
- <font>
- <family>Monospace</family>
- </font>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="12" column="3">
+ <item row="14" column="3">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="commentTextLabel">
@@ -284,6 +231,91 @@
</item>
</layout>
</item>
+ <item row="3" column="1" colspan="4">
+ <layout class="QHBoxLayout" name="removeKeyLayout">
+ <item>
+ <widget class="QCheckBox" name="lifetimeCheckBox">
+ <property name="text">
+ <string>Remove key from agent after</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="lifetimeSpinBox">
+ <property name="accessibleName">
+ <string>Remove key from agent after specified seconds</string>
+ </property>
+ <property name="suffix">
+ <string> seconds</string>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="removeKeySpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="13" column="3" colspan="2">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="fingerprintTextLabel">
+ <property name="font">
+ <font>
+ <family>Monospace</family>
+ </font>
+ </property>
+ <property name="text">
+ <string>n/a</string>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="12" column="3">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
<tabstops>
diff --git a/src/gui/entry/EntryAttachmentsWidget.cpp b/src/gui/entry/EntryAttachmentsWidget.cpp
index 9610cc05b..a614c4f35 100644
--- a/src/gui/entry/EntryAttachmentsWidget.cpp
+++ b/src/gui/entry/EntryAttachmentsWidget.cpp
@@ -135,21 +135,23 @@ void EntryAttachmentsWidget::insertAttachments()
return;
}
- QString defaultDirPath = config()->get("LastAttachmentDir").toString();
+ QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString();
const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists();
if (!dirExists) {
defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first();
}
- const QStringList filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath);
+ const auto filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath);
if (filenames.isEmpty()) {
return;
}
-
- config()->set("LastAttachmentDir", QFileInfo(filenames.first()).absolutePath());
-
+ const auto confirmedFileNames = confirmLargeAttachments(filenames);
+ if (confirmedFileNames.isEmpty()) {
+ return;
+ }
+ config()->set(Config::LastAttachmentDir, QFileInfo(filenames.first()).absolutePath());
QString errorMessage;
- if (!insertAttachments(filenames, errorMessage)) {
+ if (!insertAttachments(confirmedFileNames, errorMessage)) {
errorOccurred(errorMessage);
}
emit widgetUpdated();
@@ -190,7 +192,7 @@ void EntryAttachmentsWidget::saveSelectedAttachments()
return;
}
- QString defaultDirPath = config()->get("LastAttachmentDir").toString();
+ QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString();
const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists();
if (!dirExists) {
defaultDirPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
@@ -208,7 +210,7 @@ void EntryAttachmentsWidget::saveSelectedAttachments()
return;
}
}
- config()->set("LastAttachmentDir", QFileInfo(saveDir.absolutePath()).absolutePath());
+ config()->set(Config::LastAttachmentDir, QFileInfo(saveDir.absolutePath()).absolutePath());
QStringList errors;
for (const QModelIndex& index : indexes) {
@@ -353,6 +355,33 @@ bool EntryAttachmentsWidget::openAttachment(const QModelIndex& index, QString& e
return true;
}
+QStringList EntryAttachmentsWidget::confirmLargeAttachments(const QStringList& filenames)
+{
+ const QString confirmation(tr("%1 is a big file (%2 MB).\nYour database may get very large and reduce "
+ "performance.\n\nAre you sure to add this file?"));
+ QStringList confirmedFileNames;
+ for (const auto& file : filenames) {
+ QFileInfo fileInfo(file);
+ double size = fileInfo.size() / (1024.0 * 1024.0);
+ // Ask for confirmation before adding files over 5 MB in size
+ if (size > 5.0) {
+ auto fileName = fileInfo.fileName();
+ auto result = MessageBox::question(this,
+ tr("Confirm Attachment"),
+ confirmation.arg(fileName, QString::number(size, 'f', 1)),
+ MessageBox::Yes | MessageBox::No,
+ MessageBox::No);
+ if (result == MessageBox::Yes) {
+ confirmedFileNames << file;
+ }
+ } else {
+ confirmedFileNames << file;
+ }
+ }
+
+ return confirmedFileNames;
+}
+
bool EntryAttachmentsWidget::eventFilter(QObject* watched, QEvent* e)
{
if (watched == m_ui->attachmentsView->viewport() && !isReadOnly()) {
diff --git a/src/gui/entry/EntryAttachmentsWidget.h b/src/gui/entry/EntryAttachmentsWidget.h
index 8859536dd..df69752ee 100644
--- a/src/gui/entry/EntryAttachmentsWidget.h
+++ b/src/gui/entry/EntryAttachmentsWidget.h
@@ -54,6 +54,8 @@ private:
bool insertAttachments(const QStringList& fileNames, QString& errorMessage);
bool openAttachment(const QModelIndex& index, QString& errorMessage);
+ QStringList confirmLargeAttachments(const QStringList& filenames);
+
bool eventFilter(QObject* watched, QEvent* event) override;
QScopedPointer<Ui::EntryAttachmentsWidget> m_ui;
diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp
index bf7eca0c7..0b766c854 100644
--- a/src/gui/entry/EntryModel.cpp
+++ b/src/gui/entry/EntryModel.cpp
@@ -19,7 +19,6 @@
#include <QDateTime>
#include <QFont>
-#include <QFontMetrics>
#include <QMimeData>
#include <QPainter>
#include <QPalette>
@@ -30,8 +29,9 @@
#include "core/Global.h"
#include "core/Group.h"
#include "core/Metadata.h"
+#include "core/Resources.h"
#ifdef Q_OS_MACOS
-#include "gui/macutils/MacUtils.h"
+#include "gui/osutils/macutils/MacUtils.h"
#endif
EntryModel::EntryModel(QObject* parent)
@@ -129,7 +129,7 @@ int EntryModel::columnCount(const QModelIndex& parent) const
return 0;
}
- return 13;
+ return 14;
}
QVariant EntryModel::data(const QModelIndex& index, int role) const
@@ -174,7 +174,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
if (attr->isReference(EntryAttributes::PasswordKey)) {
result.prepend(tr("Ref: ", "Reference abbreviation"));
}
- if (entry->password().isEmpty() && config()->get("security/passwordemptynodots").toBool()) {
+ if (entry->password().isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) {
result = "";
}
return result;
@@ -185,10 +185,16 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
}
return result;
case Notes:
- // Display only first line of notes in simplified format
- result = entry->notes().section("\n", 0, 0).simplified();
- if (attr->isReference(EntryAttributes::NotesKey)) {
- result.prepend(tr("Ref: ", "Reference abbreviation"));
+ if (!entry->notes().isEmpty()) {
+ if (config()->get(Config::Security_HideNotes).toBool()) {
+ result = EntryModel::HiddenContentDisplay;
+ } else {
+ // Display only first line of notes in simplified format if not hidden
+ result = entry->notes().section("\n", 0, 0).simplified();
+ }
+ if (attr->isReference(EntryAttributes::NotesKey)) {
+ result.prepend(tr("Ref: ", "Reference abbreviation"));
+ }
}
return result;
case Expires:
@@ -218,10 +224,23 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
}
return result;
}
- case Totp:
- result = entry->hasTotp() ? tr("Yes") : "";
+ case Size: {
+ const int unitsSize = 4;
+ QString units[unitsSize] = {"B", "KiB", "MiB", "GiB"};
+ float resultInt = entry->size();
+
+ for (int i = 0; i < unitsSize; i++) {
+ if (resultInt < 1024 || i == unitsSize - 1) {
+ resultInt = qRound(resultInt * 100) / 100.0;
+ result = QStringLiteral("%1 %2").arg(QString::number(resultInt), units[i]);
+ break;
+ }
+ resultInt /= 1024.0;
+ }
+
return result;
}
+ }
} else if (role == Qt::UserRole) { // Qt::UserRole is used as sort role, see EntryView::EntryView()
switch (index.column()) {
case Username:
@@ -240,7 +259,11 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
case Paperclip:
// Display entries with attachments above those without when
// sorting ascendingly (and vice versa when sorting descendingly)
- return entry->attachments()->isEmpty() ? 1 : 0;
+ return !entry->attachments()->isEmpty();
+ case Totp:
+ return entry->hasTotp();
+ case Size:
+ return entry->size();
default:
// For all other columns, simply use data provided by Qt::Display-
// Role for sorting
@@ -250,17 +273,19 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
switch (index.column()) {
case ParentGroup:
if (entry->group()) {
- return entry->group()->iconScaledPixmap();
+ return entry->group()->iconPixmap();
}
break;
case Title:
- if (entry->isExpired()) {
- return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex);
- }
- return entry->iconScaledPixmap();
+ return entry->iconPixmap();
case Paperclip:
if (!entry->attachments()->isEmpty()) {
- return m_paperClipPixmap;
+ return resources()->icon("paperclip");
+ }
+ break;
+ case Totp:
+ if (entry->hasTotp()) {
+ return resources()->icon("chronometer");
}
break;
}
@@ -271,20 +296,23 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
}
return font;
} else if (role == Qt::ForegroundRole) {
+ QColor foregroundColor;
+ foregroundColor.setNamedColor(entry->foregroundColor());
if (entry->hasReferences()) {
QPalette p;
-#ifdef Q_OS_MACOS
- if (macUtils()->isDarkMode()) {
- return QVariant(p.color(QPalette::Inactive, QPalette::Dark));
- }
-#endif
- return QVariant(p.color(QPalette::Active, QPalette::Mid));
- } else if (entry->foregroundColor().isValid()) {
- return QVariant(entry->foregroundColor());
+ foregroundColor = p.color(QPalette::Current, QPalette::Text);
+ int lightness =
+ qMin(255, qMax(0, foregroundColor.lightness() + (foregroundColor.lightness() < 110 ? 85 : -51)));
+ foregroundColor.setHsl(foregroundColor.hue(), foregroundColor.saturation(), lightness);
+ return QVariant(foregroundColor);
+ } else if (foregroundColor.isValid()) {
+ return QVariant(foregroundColor);
}
} else if (role == Qt::BackgroundRole) {
- if (entry->backgroundColor().isValid()) {
- return QVariant(entry->backgroundColor());
+ QColor backgroundColor;
+ backgroundColor.setNamedColor(entry->backgroundColor());
+ if (backgroundColor.isValid()) {
+ return QVariant(backgroundColor);
}
} else if (role == Qt::TextAlignmentRole) {
if (index.column() == Paperclip) {
@@ -323,16 +351,51 @@ QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int ro
return tr("Accessed");
case Attachments:
return tr("Attachments");
- case Totp:
- return tr("TOTP");
+ case Size:
+ return tr("Size");
}
+
} else if (role == Qt::DecorationRole) {
- if (section == Paperclip) {
- return m_paperClipPixmap;
+ switch (section) {
+ case Paperclip:
+ return resources()->icon("paperclip");
+ case Totp:
+ return resources()->icon("chronometer");
+ }
+ } else if (role == Qt::ToolTipRole) {
+ switch (section) {
+ case ParentGroup:
+ return tr("Group name");
+ case Title:
+ return tr("Entry title");
+ case Username:
+ return tr("Username");
+ case Password:
+ return tr("Password");
+ case Url:
+ return tr("URL");
+ case Notes:
+ return tr("Entry notes");
+ case Expires:
+ return tr("Entry expires at");
+ case Created:
+ return tr("Creation date");
+ case Modified:
+ return tr("Last modification date");
+ case Accessed:
+ return tr("Last access date");
+ case Attachments:
+ return tr("Attached files");
+ case Size:
+ return tr("Entry size");
+ case Paperclip:
+ return tr("Has attachments");
+ case Totp:
+ return tr("Has TOTP one-time password");
}
}
- return QVariant();
+ return {};
}
Qt::DropActions EntryModel::supportedDropActions() const
@@ -433,10 +496,41 @@ void EntryModel::entryRemoved()
if (m_group) {
m_entries = m_group->entries();
}
-
endRemoveRows();
}
+void EntryModel::entryAboutToMoveUp(int row)
+{
+ beginMoveRows(QModelIndex(), row, row, QModelIndex(), row - 1);
+ if (m_group) {
+ m_entries.move(row, row - 1);
+ }
+}
+
+void EntryModel::entryMovedUp()
+{
+ if (m_group) {
+ m_entries = m_group->entries();
+ }
+ endMoveRows();
+}
+
+void EntryModel::entryAboutToMoveDown(int row)
+{
+ beginMoveRows(QModelIndex(), row, row, QModelIndex(), row + 2);
+ if (m_group) {
+ m_entries.move(row, row + 1);
+ }
+}
+
+void EntryModel::entryMovedDown()
+{
+ if (m_group) {
+ m_entries = m_group->entries();
+ }
+ endMoveRows();
+}
+
void EntryModel::entryDataChanged(Entry* entry)
{
int row = m_entries.indexOf(entry);
@@ -460,6 +554,10 @@ void EntryModel::makeConnections(const Group* group)
connect(group, SIGNAL(entryAdded(Entry*)), SLOT(entryAdded(Entry*)));
connect(group, SIGNAL(entryAboutToRemove(Entry*)), SLOT(entryAboutToRemove(Entry*)));
connect(group, SIGNAL(entryRemoved(Entry*)), SLOT(entryRemoved()));
+ connect(group, SIGNAL(entryAboutToMoveUp(int)), SLOT(entryAboutToMoveUp(int)));
+ connect(group, SIGNAL(entryMovedUp()), SLOT(entryMovedUp()));
+ connect(group, SIGNAL(entryAboutToMoveDown(int)), SLOT(entryAboutToMoveDown(int)));
+ connect(group, SIGNAL(entryMovedDown()), SLOT(entryMovedDown()));
connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*)));
}
@@ -498,8 +596,3 @@ void EntryModel::setPasswordsHidden(bool hide)
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
emit passwordsHiddenChanged();
}
-
-void EntryModel::setPaperClipPixmap(const QPixmap& paperclip)
-{
- m_paperClipPixmap = paperclip;
-}
diff --git a/src/gui/entry/EntryModel.h b/src/gui/entry/EntryModel.h
index 5f405bd41..78da7194c 100644
--- a/src/gui/entry/EntryModel.h
+++ b/src/gui/entry/EntryModel.h
@@ -43,7 +43,8 @@ public:
Accessed = 9,
Paperclip = 10,
Attachments = 11,
- Totp = 12
+ Totp = 12,
+ Size = 13
};
explicit EntryModel(QObject* parent = nullptr);
@@ -68,8 +69,6 @@ public:
bool isPasswordsHidden() const;
void setPasswordsHidden(bool hide);
- void setPaperClipPixmap(const QPixmap& paperclip);
-
signals:
void usernamesHiddenChanged();
void passwordsHiddenChanged();
@@ -79,6 +78,10 @@ private slots:
void entryAdded(Entry* entry);
void entryAboutToRemove(Entry* entry);
void entryRemoved();
+ void entryAboutToMoveUp(int row);
+ void entryMovedUp();
+ void entryAboutToMoveDown(int row);
+ void entryMovedDown();
void entryDataChanged(Entry* entry);
private:
@@ -93,8 +96,6 @@ private:
bool m_hideUsernames;
bool m_hidePasswords;
- QPixmap m_paperClipPixmap;
-
const QString HiddenContentDisplay;
const Qt::DateFormat DateFormat;
};
diff --git a/src/gui/entry/EntryURLModel.cpp b/src/gui/entry/EntryURLModel.cpp
index 3e6fb839c..7bf673a99 100644
--- a/src/gui/entry/EntryURLModel.cpp
+++ b/src/gui/entry/EntryURLModel.cpp
@@ -19,7 +19,7 @@
#include "EntryURLModel.h"
#include "core/Entry.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "core/Tools.h"
#include <algorithm>
@@ -27,7 +27,7 @@
EntryURLModel::EntryURLModel(QObject* parent)
: QStandardItemModel(parent)
, m_entryAttributes(nullptr)
- , m_errorIcon(filePath()->icon("status", "dialog-error"))
+ , m_errorIcon(resources()->icon("dialog-error"))
{
}
diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp
index bff11e124..18a69687d 100644
--- a/src/gui/entry/EntryView.cpp
+++ b/src/gui/entry/EntryView.cpp
@@ -24,13 +24,14 @@
#include <QMenu>
#include <QShortcut>
-#include "core/FilePath.h"
#include "gui/SortFilterHideProxyModel.h"
EntryView::EntryView(QWidget* parent)
: QTreeView(parent)
, m_model(new EntryModel(this))
, m_sortModel(new SortFilterHideProxyModel(this))
+ , m_lastIndex(-1)
+ , m_lastOrder(Qt::AscendingOrder)
, m_inSearchMode(false)
{
m_sortModel->setSourceModel(m_model);
@@ -70,22 +71,31 @@ EntryView::EntryView(QWidget* parent)
m_hidePasswordsAction->setCheckable(true);
m_headerMenu->addSeparator();
+ resetViewToDefaults();
+
// Actions to toggle column visibility, each carrying the corresponding
- // colummn index as data
+ // column index as data
m_columnActions = new QActionGroup(this);
m_columnActions->setExclusive(false);
- for (int columnIndex = 1; columnIndex < header()->count(); ++columnIndex) {
- QString caption = m_model->headerData(columnIndex, Qt::Horizontal, Qt::DisplayRole).toString();
- if (columnIndex == EntryModel::Paperclip) {
- caption = tr("Attachments (icon)");
+ for (int visualIndex = 1; visualIndex < header()->count(); ++visualIndex) {
+ int logicalIndex = header()->logicalIndex(visualIndex);
+ QString caption = m_model->headerData(logicalIndex, Qt::Horizontal, Qt::DisplayRole).toString();
+ if (logicalIndex == EntryModel::Paperclip) {
+ caption = tr("Has attachments", "Entry attachment icon toggle");
+ } else if (logicalIndex == EntryModel::Totp) {
+ caption = tr("Has TOTP", "Entry TOTP icon toggle");
}
QAction* action = m_headerMenu->addAction(caption);
action->setCheckable(true);
- action->setData(columnIndex);
+ action->setData(logicalIndex);
m_columnActions->addAction(action);
}
connect(m_columnActions, SIGNAL(triggered(QAction*)), this, SLOT(toggleColumnVisibility(QAction*)));
+ connect(header(), &QHeaderView::sortIndicatorChanged, [this](int index, Qt::SortOrder order) {
+ Q_UNUSED(order)
+ header()->setSortIndicatorShown(index != EntryModel::Paperclip && index != EntryModel::Totp);
+ });
m_headerMenu->addSeparator();
m_headerMenu->addAction(tr("Fit to window"), this, SLOT(fitColumnsToWindow()));
@@ -112,24 +122,8 @@ EntryView::EntryView(QWidget* parent)
// clang-format on
// clang-format off
- connect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), SIGNAL(viewStateChanged()));
+ connect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), SLOT(sortIndicatorChanged(int,Qt::SortOrder)));
// clang-format on
-
- resetFixedColumns();
-
- // Configure default search view state and save for later use
- header()->showSection(EntryModel::ParentGroup);
- m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder);
- sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder);
- m_defaultSearchViewState = header()->saveState();
-
- // Configure default list view state and save for later use
- header()->hideSection(EntryModel::ParentGroup);
- m_sortModel->sort(EntryModel::Title, Qt::AscendingOrder);
- sortByColumn(EntryModel::Title, Qt::AscendingOrder);
- m_defaultListViewState = header()->saveState();
-
- m_model->setPaperClipPixmap(filePath()->icon("actions", "paperclip").pixmap(16));
}
void EntryView::contextMenuShortcutPressed()
@@ -140,6 +134,31 @@ void EntryView::contextMenuShortcutPressed()
}
}
+void EntryView::sortIndicatorChanged(int logicalIndex, Qt::SortOrder order)
+{
+ int oldIndex = m_lastIndex;
+ m_lastIndex = logicalIndex;
+ Qt::SortOrder oldOrder = m_lastOrder;
+ m_lastOrder = order;
+
+ if (oldIndex == logicalIndex // same index
+ && oldOrder == Qt::DescendingOrder // old order is descending
+ && order == Qt::AscendingOrder) // new order is ascending
+ {
+ // a change from descending to ascending on the same column occurred
+ // this sets the header into no sort order
+ header()->setSortIndicator(-1, Qt::AscendingOrder);
+ // do not emit any signals, header()->setSortIndicator recursively calls this
+ // function and the signals are emitted in the else part
+ } else {
+ // call emitEntrySelectionChanged even though the selection did not really change
+ // this triggers the evaluation of the menu activation and anyway, the position
+ // of the selected entry within the widget did change
+ emitEntrySelectionChanged();
+ emit viewStateChanged();
+ }
+}
+
void EntryView::keyPressEvent(QKeyEvent* event)
{
if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) {
@@ -219,6 +238,11 @@ bool EntryView::inSearchMode()
return m_inSearchMode;
}
+bool EntryView::isSorted()
+{
+ return header()->sortIndicatorSection() != -1;
+}
+
void EntryView::emitEntryActivated(const QModelIndex& index)
{
Entry* entry = entryFromIndex(index);
@@ -266,6 +290,17 @@ Entry* EntryView::entryFromIndex(const QModelIndex& index)
}
}
+int EntryView::currentEntryIndex()
+{
+ QModelIndexList list = selectionModel()->selectedRows();
+ if (list.size() == 1) {
+ auto index = m_sortModel->mapToSource(list.first());
+ return index.row();
+ } else {
+ return -1;
+ }
+}
+
/**
* Get current state of 'Hide Usernames' setting (NOTE: just pass-through for
* m_model)
@@ -325,6 +360,7 @@ bool EntryView::setViewState(const QByteArray& state)
{
bool status = header()->restoreState(state);
resetFixedColumns();
+ m_columnsNeedRelayout = state.isEmpty();
return status;
}
@@ -397,9 +433,11 @@ void EntryView::toggleColumnVisibility(QAction* action)
*/
void EntryView::fitColumnsToWindow()
{
- header()->resizeSections(QHeaderView::Stretch);
+ header()->setSectionResizeMode(QHeaderView::Stretch);
+ resetFixedColumns();
+ QCoreApplication::processEvents();
+ header()->setSectionResizeMode(QHeaderView::Interactive);
resetFixedColumns();
- fillRemainingWidth(true);
emit viewStateChanged();
}
@@ -409,69 +447,89 @@ void EntryView::fitColumnsToWindow()
*/
void EntryView::fitColumnsToContents()
{
- // Resize columns to fit contents
- header()->resizeSections(QHeaderView::ResizeToContents);
+ header()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ resetFixedColumns();
+ QCoreApplication::processEvents();
+ header()->setSectionResizeMode(QHeaderView::Interactive);
resetFixedColumns();
- fillRemainingWidth(false);
emit viewStateChanged();
}
/**
- * Reset view to defaults
+ * Mark icon-only columns as fixed and resize them to their minimum section size.
+ */
+void EntryView::resetFixedColumns()
+{
+ header()->setSectionResizeMode(EntryModel::Paperclip, QHeaderView::Fixed);
+ header()->resizeSection(EntryModel::Paperclip, header()->minimumSectionSize());
+
+ header()->setSectionResizeMode(EntryModel::Totp, QHeaderView::Fixed);
+ header()->resizeSection(EntryModel::Totp, header()->minimumSectionSize());
+}
+
+/**
+ * Reset item view to defaults.
*/
void EntryView::resetViewToDefaults()
{
m_model->setUsernamesHidden(false);
m_model->setPasswordsHidden(true);
+ // Reduce number of columns that are shown by default
if (m_inSearchMode) {
- header()->restoreState(m_defaultSearchViewState);
+ header()->showSection(EntryModel::ParentGroup);
} else {
- header()->restoreState(m_defaultListViewState);
+ header()->hideSection(EntryModel::ParentGroup);
+ }
+ header()->showSection(EntryModel::Title);
+ header()->showSection(EntryModel::Username);
+ header()->showSection(EntryModel::Url);
+ header()->showSection(EntryModel::Notes);
+ header()->showSection(EntryModel::Modified);
+ header()->showSection(EntryModel::Paperclip);
+ header()->showSection(EntryModel::Totp);
+
+ header()->hideSection(EntryModel::Password);
+ header()->hideSection(EntryModel::Expires);
+ header()->hideSection(EntryModel::Created);
+ header()->hideSection(EntryModel::Accessed);
+ header()->hideSection(EntryModel::Attachments);
+ header()->hideSection(EntryModel::Size);
+
+ // Reset column order to logical indices
+ for (int i = 0; i < header()->count(); ++i) {
+ header()->moveSection(header()->visualIndex(i), i);
}
- fitColumnsToWindow();
-}
+ // Reorder some columns
+ header()->moveSection(header()->visualIndex(EntryModel::Paperclip), 1);
+ header()->moveSection(header()->visualIndex(EntryModel::Totp), 2);
-void EntryView::fillRemainingWidth(bool lastColumnOnly)
-{
- // Determine total width of currently visible columns
- int width = 0;
- int lastColumnIndex = 0;
- for (int columnIndex = 0; columnIndex < header()->count(); ++columnIndex) {
- if (!header()->isSectionHidden(columnIndex)) {
- width += header()->sectionSize(columnIndex);
- }
- if (header()->visualIndex(columnIndex) > lastColumnIndex) {
- lastColumnIndex = header()->visualIndex(columnIndex);
- }
- }
+ // Sort by title or group (depending on the mode)
+ m_sortModel->sort(EntryModel::Title, Qt::AscendingOrder);
+ sortByColumn(EntryModel::Title, Qt::AscendingOrder);
- int numColumns = header()->count() - header()->hiddenSectionCount();
- int availWidth = header()->width() - width;
- if ((numColumns <= 0) || (availWidth <= 0)) {
- return;
+ if (m_inSearchMode) {
+ m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder);
+ sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder);
}
- if (!lastColumnOnly) {
- // Equally distribute remaining width to visible columns
- int add = availWidth / numColumns;
- width = 0;
- for (int columnIndex = 0; columnIndex < header()->count(); ++columnIndex) {
- if (!header()->isSectionHidden(columnIndex)) {
- header()->resizeSection(columnIndex, header()->sectionSize(columnIndex) + add);
- width += header()->sectionSize(columnIndex);
- }
- }
+ // The following call only relayouts reliably if the widget has been shown
+ // already, so only do it if the widget is visible and let showEvent() handle
+ // the initial default layout.
+ if (isVisible()) {
+ fitColumnsToWindow();
}
-
- // Add remaining width to last column
- header()->resizeSection(header()->logicalIndex(lastColumnIndex),
- header()->sectionSize(lastColumnIndex) + (header()->width() - width));
}
-void EntryView::resetFixedColumns()
+void EntryView::showEvent(QShowEvent* event)
{
- header()->setSectionResizeMode(EntryModel::Paperclip, QHeaderView::Fixed);
- header()->resizeSection(EntryModel::Paperclip, header()->minimumSectionSize());
+ QTreeView::showEvent(event);
+
+ // Check if header columns need to be resized to sensible defaults.
+ // This is only needed if no previous view state has been loaded.
+ if (m_columnsNeedRelayout) {
+ fitColumnsToWindow();
+ m_columnsNeedRelayout = false;
+ }
}
diff --git a/src/gui/entry/EntryView.h b/src/gui/entry/EntryView.h
index 53de7aff5..e32aa4729 100644
--- a/src/gui/entry/EntryView.h
+++ b/src/gui/entry/EntryView.h
@@ -39,7 +39,9 @@ public:
Entry* currentEntry();
void setCurrentEntry(Entry* entry);
Entry* entryFromIndex(const QModelIndex& index);
+ int currentEntryIndex();
bool inSearchMode();
+ bool isSorted();
int numberOfSelectedEntries();
void setFirstEntryActive();
bool isUsernamesHidden() const;
@@ -63,6 +65,7 @@ protected:
void keyPressEvent(QKeyEvent* event) override;
void focusInEvent(QFocusEvent* event) override;
void focusOutEvent(QFocusEvent* event) override;
+ void showEvent(QShowEvent* event) override;
private slots:
void emitEntryActivated(const QModelIndex& index);
@@ -73,17 +76,17 @@ private slots:
void fitColumnsToContents();
void resetViewToDefaults();
void contextMenuShortcutPressed();
+ void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order);
private:
- void fillRemainingWidth(bool lastColumnOnly);
void resetFixedColumns();
EntryModel* const m_model;
SortFilterHideProxyModel* const m_sortModel;
+ int m_lastIndex;
+ Qt::SortOrder m_lastOrder;
bool m_inSearchMode;
-
- QByteArray m_defaultListViewState;
- QByteArray m_defaultSearchViewState;
+ bool m_columnsNeedRelayout = true;
QMenu* m_headerMenu;
QAction* m_hideUsernamesAction;
diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp
index 30d8fb913..b77e49864 100644
--- a/src/gui/group/EditGroupWidget.cpp
+++ b/src/gui/group/EditGroupWidget.cpp
@@ -20,8 +20,8 @@
#include "ui_EditGroupWidgetMain.h"
#include "core/Config.h"
-#include "core/FilePath.h"
#include "core/Metadata.h"
+#include "core/Resources.h"
#include "gui/EditWidgetIcons.h"
#include "gui/EditWidgetProperties.h"
#include "gui/MessageBox.h"
@@ -69,12 +69,12 @@ EditGroupWidget::EditGroupWidget(QWidget* parent)
{
m_mainUi->setupUi(m_editGroupWidgetMain);
- addPage(tr("Group"), FilePath::instance()->icon("actions", "document-edit"), m_editGroupWidgetMain);
- addPage(tr("Icon"), FilePath::instance()->icon("apps", "preferences-desktop-icons"), m_editGroupWidgetIcons);
+ addPage(tr("Group"), Resources::instance()->icon("document-edit"), m_editGroupWidgetMain);
+ addPage(tr("Icon"), Resources::instance()->icon("preferences-desktop-icons"), m_editGroupWidgetIcons);
#if defined(WITH_XC_KEESHARE)
addEditPage(new EditGroupPageKeeShare(this));
#endif
- addPage(tr("Properties"), FilePath::instance()->icon("actions", "document-properties"), m_editWidgetProperties);
+ addPage(tr("Properties"), Resources::instance()->icon("document-properties"), m_editWidgetProperties);
connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool)));
connect(m_mainUi->autoTypeSequenceCustomRadio,
@@ -153,7 +153,7 @@ void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer<
}
m_mainUi->autoTypeSequenceCustomEdit->setText(group->effectiveAutoTypeSequence());
- if (config()->get("GUI/MonospaceNotes", false).toBool()) {
+ if (config()->get(Config::GUI_MonospaceNotes).toBool()) {
m_mainUi->editNotes->setFont(Font::fixedFont());
} else {
m_mainUi->editNotes->setFont(Font::defaultFont());
@@ -236,7 +236,7 @@ void EditGroupWidget::apply()
void EditGroupWidget::cancel()
{
- if (!m_group->iconUuid().isNull() && !m_db->metadata()->containsCustomIcon(m_group->iconUuid())) {
+ if (!m_group->iconUuid().isNull() && !m_db->metadata()->hasCustomIcon(m_group->iconUuid())) {
m_group->setIcon(Entry::DefaultIconNumber);
}
diff --git a/src/gui/group/EditGroupWidgetMain.ui b/src/gui/group/EditGroupWidgetMain.ui
index 486e408b6..9531cc847 100644
--- a/src/gui/group/EditGroupWidgetMain.ui
+++ b/src/gui/group/EditGroupWidgetMain.ui
@@ -6,13 +6,13 @@
<rect>
<x>0</x>
<y>0</y>
- <width>579</width>
- <height>407</height>
+ <width>410</width>
+ <height>430</height>
</rect>
</property>
- <layout class="QGridLayout" name="gridLayout">
+ <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0,1" rowminimumheight="0,0,0,0,0,0,0,0,0,1">
<property name="leftMargin">
- <number>10</number>
+ <number>0</number>
</property>
<property name="topMargin">
<number>0</number>
@@ -23,64 +23,30 @@
<property name="bottomMargin">
<number>0</number>
</property>
- <item row="0" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="labelName">
- <property name="text">
- <string>Name</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="editName">
- <property name="accessibleName">
- <string>Name field</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0" alignment="Qt::AlignRight|Qt::AlignTop">
- <widget class="QLabel" name="labelNotes">
- <property name="text">
- <string>Notes</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QPlainTextEdit" name="editNotes">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>120</height>
- </size>
- </property>
- <property name="accessibleName">
- <string>Notes field</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0" alignment="Qt::AlignRight">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
+ <property name="verticalSpacing">
+ <number>8</number>
+ </property>
+ <item row="3" column="0">
<widget class="QCheckBox" name="expireCheck">
<property name="accessibleName">
<string>Toggle expiration</string>
</property>
<property name="text">
- <string>Expires</string>
+ <string>Expires:</string>
</property>
</widget>
</item>
- <item row="4" column="1">
- <widget class="QComboBox" name="autotypeComboBox">
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="editName">
<property name="accessibleName">
- <string>Auto-Type toggle for this and sub groups</string>
+ <string>Name field</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="3" column="1">
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
<bool>false</bool>
@@ -93,42 +59,68 @@
</property>
</widget>
</item>
- <item row="3" column="0" alignment="Qt::AlignRight">
- <widget class="QLabel" name="searchLabel">
+ <item row="6" column="1">
+ <widget class="QRadioButton" name="autoTypeSequenceInherit">
<property name="text">
- <string>Search</string>
+ <string>Use default Auto-Type sequence of parent group</string>
</property>
</widget>
</item>
- <item row="3" column="1">
- <widget class="QComboBox" name="searchComboBox">
- <property name="accessibleName">
- <string>Search toggle for this and sub groups</string>
- </property>
- </widget>
- </item>
- <item row="4" column="0" alignment="Qt::AlignRight">
+ <item row="5" column="0">
<widget class="QLabel" name="autotypeLabel">
<property name="text">
- <string>Auto-Type</string>
+ <string>Auto-Type:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="5" column="1">
- <widget class="QRadioButton" name="autoTypeSequenceInherit">
+ <item row="4" column="0">
+ <widget class="QLabel" name="searchLabel">
<property name="text">
- <string>&amp;Use default Auto-Type sequence of parent group</string>
+ <string>Search:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="6" column="1">
- <widget class="QRadioButton" name="autoTypeSequenceCustomRadio">
- <property name="text">
- <string>Set default Auto-Type se&amp;quence</string>
+ <item row="5" column="1">
+ <widget class="QComboBox" name="autotypeComboBox">
+ <property name="accessibleName">
+ <string>Auto-Type toggle for this and sub groups</string>
</property>
</widget>
</item>
- <item row="7" column="1">
+ <item row="1" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="labelNotes">
+ <property name="text">
+ <string>Notes:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_2">
@@ -140,8 +132,8 @@
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>13</width>
- <height>1</height>
+ <width>30</width>
+ <height>0</height>
</size>
</property>
</spacer>
@@ -161,8 +153,51 @@
</item>
</layout>
</item>
- <item row="8" column="1">
- <spacer name="verticalSpacer">
+ <item row="1" column="1">
+ <widget class="QPlainTextEdit" name="editNotes">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>120</height>
+ </size>
+ </property>
+ <property name="accessibleName">
+ <string>Notes field</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelName">
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QRadioButton" name="autoTypeSequenceCustomRadio">
+ <property name="text">
+ <string>Set default Auto-Type sequence</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QComboBox" name="searchComboBox">
+ <property name="accessibleName">
+ <string>Search toggle for this and sub groups</string>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="0">
+ <spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@@ -183,6 +218,9 @@
<tabstop>expireDatePicker</tabstop>
<tabstop>searchComboBox</tabstop>
<tabstop>autotypeComboBox</tabstop>
+ <tabstop>autoTypeSequenceInherit</tabstop>
+ <tabstop>autoTypeSequenceCustomRadio</tabstop>
+ <tabstop>autoTypeSequenceCustomEdit</tabstop>
</tabstops>
<resources/>
<connections/>
diff --git a/src/gui/group/GroupModel.cpp b/src/gui/group/GroupModel.cpp
index d3f2f40f6..beba13774 100644
--- a/src/gui/group/GroupModel.cpp
+++ b/src/gui/group/GroupModel.cpp
@@ -130,18 +130,20 @@ QVariant GroupModel::data(const QModelIndex& index, int role) const
#endif
return nameTemplate.arg(group->name());
} else if (role == Qt::DecorationRole) {
- QPixmap pixmap = group->isExpired() ? databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex)
- : group->iconScaledPixmap();
-#if defined(WITH_XC_KEESHARE)
- pixmap = KeeShare::indicatorBadge(group, pixmap);
-#endif
- return pixmap;
+ return group->iconPixmap();
} else if (role == Qt::FontRole) {
QFont font;
if (group->isExpired()) {
font.setStrikeOut(true);
}
return font;
+ } else if (role == Qt::ToolTipRole) {
+ QString tooltip;
+ if (!group->parentGroup()) {
+ // only show a tooltip for the root group
+ tooltip = m_db->filePath();
+ }
+ return tooltip;
} else {
return QVariant();
}
@@ -297,7 +299,7 @@ bool GroupModel::dropMimeData(const QMimeData* data,
Database* targetDb = parentGroup->database();
QUuid customIcon = entry->iconUuid();
- if (sourceDb != targetDb && !customIcon.isNull() && !targetDb->metadata()->containsCustomIcon(customIcon)) {
+ if (sourceDb != targetDb && !customIcon.isNull() && !targetDb->metadata()->hasCustomIcon(customIcon)) {
targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon));
}
diff --git a/src/gui/group/GroupView.cpp b/src/gui/group/GroupView.cpp
index 33c591696..056015ca8 100644
--- a/src/gui/group/GroupView.cpp
+++ b/src/gui/group/GroupView.cpp
@@ -38,9 +38,10 @@ GroupView::GroupView(Database* db, QWidget* parent)
// clang-format off
connect(this, SIGNAL(expanded(QModelIndex)), SLOT(expandedChanged(QModelIndex)));
connect(this, SIGNAL(collapsed(QModelIndex)), SLOT(expandedChanged(QModelIndex)));
+ connect(this, SIGNAL(clicked(QModelIndex)), SIGNAL(groupSelectionChanged()));
connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(syncExpandedState(QModelIndex,int,int)));
connect(m_model, SIGNAL(modelReset()), SLOT(modelReset()));
- connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(emitGroupChanged()));
+ connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SIGNAL(groupSelectionChanged()));
// clang-format on
new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut);
@@ -85,7 +86,7 @@ void GroupView::dragMoveEvent(QDragMoveEvent* event)
void GroupView::focusInEvent(QFocusEvent* event)
{
- emitGroupChanged();
+ emit groupFocused();
QTreeView::focusInEvent(event);
}
@@ -140,11 +141,6 @@ void GroupView::setModel(QAbstractItemModel* model)
Q_ASSERT(false);
}
-void GroupView::emitGroupChanged()
-{
- emit groupSelectionChanged(currentGroup());
-}
-
void GroupView::syncExpandedState(const QModelIndex& parent, int start, int end)
{
for (int row = start; row <= end; row++) {
@@ -155,10 +151,11 @@ void GroupView::syncExpandedState(const QModelIndex& parent, int start, int end)
void GroupView::setCurrentGroup(Group* group)
{
- if (group == nullptr)
+ if (group == nullptr) {
setCurrentIndex(QModelIndex());
- else
+ } else {
setCurrentIndex(m_model->index(group));
+ }
}
void GroupView::modelReset()
diff --git a/src/gui/group/GroupView.h b/src/gui/group/GroupView.h
index 00b5a28c0..aa4fd85de 100644
--- a/src/gui/group/GroupView.h
+++ b/src/gui/group/GroupView.h
@@ -38,11 +38,11 @@ public:
void sortGroups(bool reverse = false);
signals:
- void groupSelectionChanged(Group* group);
+ void groupSelectionChanged();
+ void groupFocused();
private slots:
void expandedChanged(const QModelIndex& index);
- void emitGroupChanged();
void syncExpandedState(const QModelIndex& parent, int start, int end);
void modelReset();
void contextMenuShortcutPressed();
diff --git a/src/gui/osutils/OSUtils.h b/src/gui/osutils/OSUtils.h
new file mode 100644
index 000000000..dd1bd8cd1
--- /dev/null
+++ b/src/gui/osutils/OSUtils.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_OSUTILS_H
+#define KEEPASSXC_OSUTILS_H
+
+#include "OSUtilsBase.h"
+#include <QtCore>
+
+#if defined(Q_OS_WIN)
+
+#include "winutils/WinUtils.h"
+#define osUtils static_cast<OSUtilsBase*>(winUtils())
+
+#elif defined(Q_OS_MACOS)
+
+#include "macutils/MacUtils.h"
+#define osUtils static_cast<OSUtilsBase*>(macUtils())
+
+#elif defined(Q_OS_UNIX)
+
+#include "nixutils/NixUtils.h"
+#define osUtils static_cast<OSUtilsBase*>(nixUtils())
+
+#endif
+
+#endif // KEEPASSXC_OSUTILS_H
diff --git a/src/gui/osutils/OSUtilsBase.cpp b/src/gui/osutils/OSUtilsBase.cpp
new file mode 100644
index 000000000..143cb72c1
--- /dev/null
+++ b/src/gui/osutils/OSUtilsBase.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "OSUtilsBase.h"
+
+OSUtilsBase::OSUtilsBase(QObject* parent)
+ : QObject(parent)
+{
+}
+
+OSUtilsBase::~OSUtilsBase()
+{
+}
diff --git a/src/gui/osutils/OSUtilsBase.h b/src/gui/osutils/OSUtilsBase.h
new file mode 100644
index 000000000..340e9bf7e
--- /dev/null
+++ b/src/gui/osutils/OSUtilsBase.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_OSUTILSBASE_H
+#define KEEPASSXC_OSUTILSBASE_H
+
+#include <QObject>
+#include <QPointer>
+
+/**
+ * Abstract base class for generic OS-specific functionality
+ * which can be reasonably expected to be available on all platforms.
+ */
+class OSUtilsBase : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * @return OS dark mode enabled.
+ */
+ virtual bool isDarkMode() const = 0;
+
+ /**
+ * @return KeePassXC set to launch at system startup (autostart).
+ */
+ virtual bool isLaunchAtStartupEnabled() const = 0;
+
+ /**
+ * @param enable Add or remove KeePassXC from system autostart.
+ */
+ virtual void setLaunchAtStartup(bool enable) = 0;
+
+ /**
+ * @return OS caps lock enabled.
+ */
+ virtual bool isCapslockEnabled() = 0;
+
+protected:
+ explicit OSUtilsBase(QObject* parent = nullptr);
+ virtual ~OSUtilsBase();
+};
+
+#endif // KEEPASSXC_OSUTILSBASE_H
diff --git a/src/gui/macutils/AppKit.h b/src/gui/osutils/macutils/AppKit.h
index 2bff8f5b3..a6f7b3a12 100644
--- a/src/gui/macutils/AppKit.h
+++ b/src/gui/osutils/macutils/AppKit.h
@@ -39,6 +39,7 @@ public:
bool isDarkMode();
bool enableAccessibility();
bool enableScreenRecording();
+ void toggleForegroundApp(bool foreground);
signals:
void lockDatabases();
diff --git a/src/gui/macutils/AppKitImpl.h b/src/gui/osutils/macutils/AppKitImpl.h
index 326879766..5dadc31dd 100644
--- a/src/gui/macutils/AppKitImpl.h
+++ b/src/gui/osutils/macutils/AppKitImpl.h
@@ -38,5 +38,6 @@
- (void) userSwitchHandler:(NSNotification*) notification;
- (bool) enableAccessibility;
- (bool) enableScreenRecording;
+- (void) toggleForegroundApp:(bool) foreground;
@end
diff --git a/src/gui/macutils/AppKitImpl.mm b/src/gui/osutils/macutils/AppKitImpl.mm
index 4a93f963a..077dd71a6 100644
--- a/src/gui/macutils/AppKitImpl.mm
+++ b/src/gui/osutils/macutils/AppKitImpl.mm
@@ -154,6 +154,16 @@
return YES;
}
+- (void) toggleForegroundApp:(bool) foreground
+{
+ ProcessSerialNumber psn = {0, kCurrentProcess};
+ if (foreground) {
+ TransformProcessType(&psn, kProcessTransformToForegroundApplication);
+ } else {
+ TransformProcessType(&psn, kProcessTransformToUIElementApplication);
+ }
+}
+
@end
//
@@ -215,3 +225,8 @@ bool AppKit::enableScreenRecording()
{
return [static_cast<id>(self) enableScreenRecording];
}
+
+void AppKit::toggleForegroundApp(bool foreground)
+{
+ [static_cast<id>(self) toggleForegroundApp:foreground];
+}
diff --git a/src/gui/macutils/MacUtils.cpp b/src/gui/osutils/macutils/MacUtils.cpp
index 211aaa7eb..d32a15612 100644
--- a/src/gui/macutils/MacUtils.cpp
+++ b/src/gui/osutils/macutils/MacUtils.cpp
@@ -18,11 +18,18 @@
#include "MacUtils.h"
#include <QApplication>
+#include <QDir>
+#include <QFile>
+#include <QSettings>
+#include <QStandardPaths>
-MacUtils* MacUtils::m_instance = nullptr;
+#include <CoreGraphics/CGEventSource.h>
+
+
+QPointer<MacUtils> MacUtils::m_instance = nullptr;
MacUtils::MacUtils(QObject* parent)
- : QObject(parent)
+ : OSUtilsBase(parent)
, m_appkit(new AppKit())
{
connect(m_appkit.data(), SIGNAL(lockDatabases()), SIGNAL(lockDatabases()));
@@ -71,11 +78,6 @@ bool MacUtils::isHidden()
return m_appkit->isHidden(m_appkit->ownProcessId());
}
-bool MacUtils::isDarkMode()
-{
- return m_appkit->isDarkMode();
-}
-
bool MacUtils::enableAccessibility()
{
return m_appkit->enableAccessibility();
@@ -85,3 +87,50 @@ bool MacUtils::enableScreenRecording()
{
return m_appkit->enableScreenRecording();
}
+
+bool MacUtils::isDarkMode() const
+{
+ return m_appkit->isDarkMode();
+}
+
+QString MacUtils::getLaunchAgentFilename() const
+{
+ auto launchAgentDir = QDir(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QStringLiteral("/../LaunchAgents"));
+ return QFile(launchAgentDir.absoluteFilePath(
+ qApp->property("KPXC_QUALIFIED_APPNAME").toString().append(".plist"))).fileName();
+}
+
+bool MacUtils::isLaunchAtStartupEnabled() const
+{
+ return QFile::exists(getLaunchAgentFilename());
+}
+
+void MacUtils::setLaunchAtStartup(bool enable)
+{
+ if (enable) {
+ QSettings agent(getLaunchAgentFilename(), QSettings::NativeFormat);
+ agent.setValue("Label", qApp->property("KPXC_QUALIFIED_APPNAME").toString());
+ agent.setValue("ProgramArguments", QStringList() << QApplication::applicationFilePath());
+ agent.setValue("RunAtLoad", true);
+ agent.setValue("StandardErrorPath", "/dev/null");
+ agent.setValue("StandardOutPath", "/dev/null");
+ } else if (isLaunchAtStartupEnabled()) {
+ QFile::remove(getLaunchAgentFilename());
+ }
+}
+
+bool MacUtils::isCapslockEnabled()
+{
+ return (CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState) & kCGEventFlagMaskAlphaShift) != 0;
+}
+
+/**
+ * Toggle application state between foreground app and UIElement app.
+ * Foreground apps have dock icons, UIElement apps do not.
+ *
+ * @param foreground whether app is foreground app
+ */
+void MacUtils::toggleForegroundApp(bool foreground)
+{
+ m_appkit->toggleForegroundApp(foreground);
+}
diff --git a/src/gui/macutils/MacUtils.h b/src/gui/osutils/macutils/MacUtils.h
index 3e35994b1..281c5438c 100644
--- a/src/gui/macutils/MacUtils.h
+++ b/src/gui/osutils/macutils/MacUtils.h
@@ -19,17 +19,24 @@
#ifndef KEEPASSXC_MACUTILS_H
#define KEEPASSXC_MACUTILS_H
+#include "gui/osutils/OSUtilsBase.h"
#include "AppKit.h"
-#include <QObject>
-#include <QWidget>
-class MacUtils : public QObject
+#include <QPointer>
+#include <QScopedPointer>
+#include <qwindowdefs.h>
+
+class MacUtils : public OSUtilsBase
{
Q_OBJECT
public:
static MacUtils* instance();
- static void createTestInstance();
+
+ bool isDarkMode() const override;
+ bool isLaunchAtStartupEnabled() const override;
+ void setLaunchAtStartup(bool enable) override;
+ bool isCapslockEnabled() override;
WId activeWindow();
bool raiseWindow(WId pid);
@@ -37,20 +44,22 @@ public:
bool raiseOwnWindow();
bool hideOwnWindow();
bool isHidden();
- bool isDarkMode();
bool enableAccessibility();
bool enableScreenRecording();
+ void toggleForegroundApp(bool foreground);
signals:
void lockDatabases();
-private:
+protected:
explicit MacUtils(QObject* parent = nullptr);
- ~MacUtils();
+ ~MacUtils() override;
private:
+ QString getLaunchAgentFilename() const;
+
QScopedPointer<AppKit> m_appkit;
- static MacUtils* m_instance;
+ static QPointer<MacUtils> m_instance;
Q_DISABLE_COPY(MacUtils)
};
diff --git a/src/gui/osutils/nixutils/NixUtils.cpp b/src/gui/osutils/nixutils/NixUtils.cpp
new file mode 100644
index 000000000..b252458e5
--- /dev/null
+++ b/src/gui/osutils/nixutils/NixUtils.cpp
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "NixUtils.h"
+
+#include <QApplication>
+#include <QColor>
+#include <QDir>
+#include <QFile>
+#include <QGuiApplication>
+#include <QPalette>
+#include <QStandardPaths>
+#include <QStyle>
+#include <QTextStream>
+
+#include <qpa/qplatformnativeinterface.h>
+// namespace required to avoid name clashes with declarations in XKBlib.h
+namespace X11
+{
+#include <X11/XKBlib.h>
+}
+
+QPointer<NixUtils> NixUtils::m_instance = nullptr;
+
+NixUtils* NixUtils::instance()
+{
+ if (!m_instance) {
+ m_instance = new NixUtils(qApp);
+ }
+
+ return m_instance;
+}
+
+NixUtils::NixUtils(QObject* parent)
+ : OSUtilsBase(parent)
+{
+}
+
+NixUtils::~NixUtils()
+{
+}
+
+bool NixUtils::isDarkMode() const
+{
+ if (!qApp || !qApp->style()) {
+ return false;
+ }
+ return qApp->style()->standardPalette().color(QPalette::Window).toHsl().lightness() < 110;
+}
+
+QString NixUtils::getAutostartDesktopFilename(bool createDirs) const
+{
+ QDir autostartDir;
+ auto confHome = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ if (confHome.isEmpty()) {
+ return {};
+ }
+ autostartDir.setPath(confHome + QStringLiteral("/autostart"));
+ if (createDirs && !autostartDir.exists()) {
+ autostartDir.mkpath(".");
+ }
+
+ return QFile(autostartDir.absoluteFilePath(qApp->property("KPXC_QUALIFIED_APPNAME").toString().append(".desktop")))
+ .fileName();
+}
+
+bool NixUtils::isLaunchAtStartupEnabled() const
+{
+ return QFile::exists(getAutostartDesktopFilename());
+ ;
+}
+
+void NixUtils::setLaunchAtStartup(bool enable)
+{
+ if (enable) {
+ QFile desktopFile(getAutostartDesktopFilename(true));
+ if (!desktopFile.open(QIODevice::WriteOnly)) {
+ qWarning("Failed to create autostart desktop file.");
+ return;
+ }
+ QTextStream stream(&desktopFile);
+ stream.setCodec("UTF-8");
+ stream << QStringLiteral("[Desktop Entry]") << '\n'
+ << QStringLiteral("Name=") << QApplication::applicationDisplayName() << '\n'
+ << QStringLiteral("GenericName=") << tr("Password Manager") << '\n'
+ << QStringLiteral("Exec=") << QApplication::applicationFilePath() << '\n'
+ << QStringLiteral("TryExec=") << QApplication::applicationFilePath() << '\n'
+ << QStringLiteral("Icon=") << QApplication::applicationName().toLower() << '\n'
+ << QStringLiteral("StartupWMClass=keepassxc") << '\n'
+ << QStringLiteral("StartupNotify=true") << '\n'
+ << QStringLiteral("Terminal=false") << '\n'
+ << QStringLiteral("Type=Application") << '\n'
+ << QStringLiteral("Version=1.0") << "true" << '\n'
+ << QStringLiteral("Categories=Utility;Security;Qt;") << '\n'
+ << QStringLiteral("MimeType=application/x-keepass2;") << '\n'
+ << QStringLiteral("X-GNOME-Autostart-enabled=true") << endl;
+ desktopFile.close();
+ } else if (isLaunchAtStartupEnabled()) {
+ QFile::remove(getAutostartDesktopFilename());
+ }
+}
+
+bool NixUtils::isCapslockEnabled()
+{
+ QPlatformNativeInterface* native = QGuiApplication::platformNativeInterface();
+ auto* display = native->nativeResourceForWindow("display", nullptr);
+ if (!display) {
+ return false;
+ }
+
+ QString platform = QGuiApplication::platformName();
+ if (platform == "xcb") {
+ unsigned state = 0;
+ if (X11::XkbGetIndicatorState(reinterpret_cast<X11::Display*>(display), XkbUseCoreKbd, &state) == Success) {
+ return ((state & 1u) != 0);
+ }
+ }
+
+ // TODO: Wayland
+
+ return false;
+}
diff --git a/src/gui/osutils/nixutils/NixUtils.h b/src/gui/osutils/nixutils/NixUtils.h
new file mode 100644
index 000000000..c91580796
--- /dev/null
+++ b/src/gui/osutils/nixutils/NixUtils.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_NIXUTILS_H
+#define KEEPASSXC_NIXUTILS_H
+
+#include "gui/osutils/OSUtilsBase.h"
+#include <QPointer>
+
+class NixUtils : public OSUtilsBase
+{
+ Q_OBJECT
+
+public:
+ static NixUtils* instance();
+
+ bool isDarkMode() const override;
+ bool isLaunchAtStartupEnabled() const override;
+ void setLaunchAtStartup(bool enable) override;
+ bool isCapslockEnabled() override;
+
+private:
+ explicit NixUtils(QObject* parent = nullptr);
+ ~NixUtils() override;
+
+private:
+ QString getAutostartDesktopFilename(bool createDirs = false) const;
+
+ static QPointer<NixUtils> m_instance;
+
+ Q_DISABLE_COPY(NixUtils)
+};
+
+inline NixUtils* nixUtils()
+{
+ return NixUtils::instance();
+}
+
+#endif // KEEPASSXC_NIXUTILS_H
diff --git a/src/gui/osutils/winutils/WinUtils.cpp b/src/gui/osutils/winutils/WinUtils.cpp
new file mode 100644
index 000000000..385a9389a
--- /dev/null
+++ b/src/gui/osutils/winutils/WinUtils.cpp
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "WinUtils.h"
+#include <QAbstractNativeEventFilter>
+#include <QApplication>
+#include <QDir>
+#include <QSettings>
+
+#include <windows.h>
+
+QPointer<WinUtils> WinUtils::m_instance = nullptr;
+QScopedPointer<WinUtils::DWMEventFilter> WinUtils::m_eventFilter;
+
+WinUtils* WinUtils::instance()
+{
+ if (!m_instance) {
+ m_instance = new WinUtils(qApp);
+ }
+
+ return m_instance;
+}
+
+WinUtils::WinUtils(QObject* parent)
+ : OSUtilsBase(parent)
+{
+}
+
+WinUtils::~WinUtils()
+{
+}
+
+/**
+ * Register event filters to handle native platform events such as theme changes.
+ */
+void WinUtils::registerEventFilters()
+{
+ if (!m_eventFilter) {
+ m_eventFilter.reset(new DWMEventFilter);
+ qApp->installNativeEventFilter(m_eventFilter.data());
+ }
+}
+
+bool WinUtils::DWMEventFilter::nativeEventFilter(const QByteArray& eventType, void* message, long*)
+{
+ if (eventType != "windows_generic_MSG") {
+ return false;
+ }
+
+ auto* msg = static_cast<MSG*>(message);
+ if (!msg->hwnd) {
+ return false;
+ }
+ switch (msg->message) {
+ case WM_CREATE:
+ case WM_INITDIALOG: {
+ if (winUtils()->isDarkMode()) {
+ // TODO: indicate dark mode support for black title bar
+ }
+ break;
+ }
+ }
+
+ return false;
+}
+
+bool WinUtils::isDarkMode() const
+{
+ QSettings settings(R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize)",
+ QSettings::NativeFormat);
+ return settings.value("AppsUseLightTheme", 1).toInt() == 0;
+}
+
+bool WinUtils::isLaunchAtStartupEnabled() const
+{
+ return QSettings(R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run)", QSettings::NativeFormat)
+ .contains(qAppName());
+}
+
+void WinUtils::setLaunchAtStartup(bool enable)
+{
+ QSettings reg(R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run)", QSettings::NativeFormat);
+ if (enable) {
+ reg.setValue(qAppName(), QString("\"%1\"").arg(QDir::toNativeSeparators(QApplication::applicationFilePath())));
+ } else {
+ reg.remove(qAppName());
+ }
+}
+
+bool WinUtils::isCapslockEnabled()
+{
+ return GetKeyState(VK_CAPITAL) == 1;
+}
diff --git a/src/gui/osutils/winutils/WinUtils.h b/src/gui/osutils/winutils/WinUtils.h
new file mode 100644
index 000000000..bf49f2c7f
--- /dev/null
+++ b/src/gui/osutils/winutils/WinUtils.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_WINUTILS_H
+#define KEEPASSXC_WINUTILS_H
+
+#include "gui/osutils/OSUtilsBase.h"
+
+#include <QAbstractNativeEventFilter>
+#include <QPointer>
+#include <QScopedPointer>
+
+class WinUtils : public OSUtilsBase
+{
+ Q_OBJECT
+
+public:
+ static WinUtils* instance();
+ static void registerEventFilters();
+
+ bool isDarkMode() const override;
+ bool isLaunchAtStartupEnabled() const override;
+ void setLaunchAtStartup(bool enable) override;
+ bool isCapslockEnabled() override;
+
+protected:
+ explicit WinUtils(QObject* parent = nullptr);
+ ~WinUtils() override;
+
+private:
+ class DWMEventFilter : public QAbstractNativeEventFilter
+ {
+ public:
+ bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override;
+ };
+
+ static QPointer<WinUtils> m_instance;
+ static QScopedPointer<DWMEventFilter> m_eventFilter;
+
+ Q_DISABLE_COPY(WinUtils)
+};
+
+inline WinUtils* winUtils()
+{
+ return WinUtils::instance();
+}
+
+#endif // KEEPASSXC_WINUTILS_H
diff --git a/src/gui/reports/ReportsDialog.cpp b/src/gui/reports/ReportsDialog.cpp
new file mode 100644
index 000000000..2fdc24389
--- /dev/null
+++ b/src/gui/reports/ReportsDialog.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ReportsDialog.h"
+#include "ui_ReportsDialog.h"
+
+#include "ReportsPageHealthcheck.h"
+#include "ReportsPageHibp.h"
+#include "ReportsPageStatistics.h"
+#include "ReportsWidgetHealthcheck.h"
+#include "ReportsWidgetHibp.h"
+
+#include "core/Global.h"
+#include "touchid/TouchID.h"
+#include <core/Entry.h>
+#include <core/Group.h>
+
+class ReportsDialog::ExtraPage
+{
+public:
+ ExtraPage(QSharedPointer<IReportsPage> p, QWidget* w)
+ : page(p)
+ , widget(w)
+ {
+ }
+ void loadSettings(QSharedPointer<Database> db) const
+ {
+ page->loadSettings(widget, db);
+ }
+ void saveSettings() const
+ {
+ page->saveSettings(widget);
+ }
+
+private:
+ QSharedPointer<IReportsPage> page;
+ QWidget* widget;
+};
+
+ReportsDialog::ReportsDialog(QWidget* parent)
+ : DialogyWidget(parent)
+ , m_ui(new Ui::ReportsDialog())
+ , m_healthPage(new ReportsPageHealthcheck())
+ , m_hibpPage(new ReportsPageHibp())
+ , m_statPage(new ReportsPageStatistics())
+ , m_editEntryWidget(new EditEntryWidget(this))
+{
+ m_ui->setupUi(this);
+
+ connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject()));
+ addPage(m_healthPage);
+ addPage(m_hibpPage);
+ addPage(m_statPage);
+
+ m_ui->stackedWidget->setCurrentIndex(0);
+
+ m_editEntryWidget->setObjectName("editEntryWidget");
+ m_editEntryWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+ m_ui->stackedWidget->addWidget(m_editEntryWidget);
+ adjustSize();
+
+ connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int)));
+ connect(m_healthPage->m_healthWidget, SIGNAL(entryActivated(Entry*)), SLOT(entryActivationSignalReceived(Entry*)));
+ connect(m_hibpPage->m_hibpWidget, SIGNAL(entryActivated(Entry*)), SLOT(entryActivationSignalReceived(Entry*)));
+ connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool)));
+}
+
+ReportsDialog::~ReportsDialog()
+{
+}
+
+void ReportsDialog::load(const QSharedPointer<Database>& db)
+{
+ m_ui->categoryList->setCurrentCategory(0);
+ for (const ExtraPage& page : asConst(m_extraPages)) {
+ page.loadSettings(db);
+ }
+ m_db = db;
+}
+
+void ReportsDialog::addPage(QSharedPointer<IReportsPage> page)
+{
+ const auto category = m_ui->categoryList->currentCategory();
+ const auto widget = page->createWidget();
+ widget->setParent(this);
+ m_extraPages.append(ExtraPage(page, widget));
+ m_ui->stackedWidget->addWidget(widget);
+ m_ui->categoryList->addCategory(page->name(), page->icon());
+ m_ui->categoryList->setCurrentCategory(category);
+}
+
+void ReportsDialog::reject()
+{
+ for (const ExtraPage& extraPage : asConst(m_extraPages)) {
+ extraPage.saveSettings();
+ }
+
+#ifdef WITH_XC_TOUCHID
+ TouchID::getInstance().reset(m_db ? m_db->filePath() : "");
+#endif
+
+ emit editFinished(true);
+}
+
+void ReportsDialog::entryActivationSignalReceived(Entry* entry)
+{
+ m_sender = static_cast<QWidget*>(sender());
+ m_editEntryWidget->loadEntry(entry, false, false, entry->group()->hierarchy().join(" > "), m_db);
+ m_ui->stackedWidget->setCurrentWidget(m_editEntryWidget);
+}
+
+void ReportsDialog::switchToMainView(bool previousDialogAccepted)
+{
+ // Sanity check
+ if (!m_sender) {
+ return;
+ }
+
+ // Return to the previous widget
+ m_ui->stackedWidget->setCurrentWidget(m_sender);
+
+ // If "OK" was clicked, and if we came from the Health Check pane,
+ // re-compute Health Check
+ if (previousDialogAccepted) {
+ if (m_sender == m_healthPage->m_healthWidget) {
+ m_healthPage->m_healthWidget->calculateHealth();
+ } else if (m_sender == m_hibpPage->m_hibpWidget) {
+ m_hibpPage->m_hibpWidget->refreshAfterEdit();
+ }
+ }
+
+ // Don't process the same sender twice
+ m_sender = nullptr;
+}
diff --git a/src/gui/reports/ReportsDialog.h b/src/gui/reports/ReportsDialog.h
new file mode 100644
index 000000000..a82d7545e
--- /dev/null
+++ b/src/gui/reports/ReportsDialog.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSX_REPORTSWIDGET_H
+#define KEEPASSX_REPORTSWIDGET_H
+
+#include "config-keepassx.h"
+#include "gui/DialogyWidget.h"
+#include "gui/entry/EditEntryWidget.h"
+
+#include <QPointer>
+#include <QScopedPointer>
+#include <QSharedPointer>
+
+class Database;
+class Entry;
+class Group;
+class QTabWidget;
+class ReportsPageHealthcheck;
+class ReportsPageHibp;
+class ReportsPageStatistics;
+
+namespace Ui
+{
+ class ReportsDialog;
+}
+
+class IReportsPage
+{
+public:
+ virtual ~IReportsPage()
+ {
+ }
+ virtual QString name() = 0;
+ virtual QIcon icon() = 0;
+ virtual QWidget* createWidget() = 0;
+ virtual void loadSettings(QWidget* widget, QSharedPointer<Database> db) = 0;
+ virtual void saveSettings(QWidget* widget) = 0;
+};
+
+class ReportsDialog : public DialogyWidget
+{
+ Q_OBJECT
+
+public:
+ explicit ReportsDialog(QWidget* parent = nullptr);
+ ~ReportsDialog() override;
+ Q_DISABLE_COPY(ReportsDialog);
+
+ void load(const QSharedPointer<Database>& db);
+ void addPage(QSharedPointer<IReportsPage> page);
+
+signals:
+ void editFinished(bool accepted);
+
+private slots:
+ void reject();
+ void entryActivationSignalReceived(Entry* entry);
+ void switchToMainView(bool previousDialogAccepted);
+
+private:
+ QSharedPointer<Database> m_db;
+ const QScopedPointer<Ui::ReportsDialog> m_ui;
+ const QSharedPointer<ReportsPageHealthcheck> m_healthPage;
+ const QSharedPointer<ReportsPageHibp> m_hibpPage;
+ const QSharedPointer<ReportsPageStatistics> m_statPage;
+ QPointer<EditEntryWidget> m_editEntryWidget;
+ QWidget* m_sender = nullptr;
+
+ class ExtraPage;
+ QList<ExtraPage> m_extraPages;
+};
+
+#endif // KEEPASSX_REPORTSWIDGET_H
diff --git a/src/gui/reports/ReportsDialog.ui b/src/gui/reports/ReportsDialog.ui
new file mode 100644
index 000000000..773981a10
--- /dev/null
+++ b/src/gui/reports/ReportsDialog.ui
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ReportsDialog</class>
+ <widget class="QWidget" name="ReportsDialog">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1">
+ <item>
+ <widget class="CategoryListWidget" name="categoryList" native="true"/>
+ </item>
+ <item>
+ <widget class="QStackedWidget" name="stackedWidget">
+ <property name="currentIndex">
+ <number>-1</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>CategoryListWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/CategoryListWidget.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/gui/reports/ReportsPageHealthcheck.cpp b/src/gui/reports/ReportsPageHealthcheck.cpp
new file mode 100644
index 000000000..1dfe793a6
--- /dev/null
+++ b/src/gui/reports/ReportsPageHealthcheck.cpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ReportsPageHealthcheck.h"
+
+#include "ReportsWidgetHealthcheck.h"
+#include "core/Resources.h"
+
+#include <QApplication>
+
+ReportsPageHealthcheck::ReportsPageHealthcheck()
+ : m_healthWidget(new ReportsWidgetHealthcheck())
+{
+}
+
+QString ReportsPageHealthcheck::name()
+{
+ return QApplication::tr("Health Check");
+}
+
+QIcon ReportsPageHealthcheck::icon()
+{
+ return Resources::instance()->icon("health");
+}
+
+QWidget* ReportsPageHealthcheck::createWidget()
+{
+ return m_healthWidget;
+}
+
+void ReportsPageHealthcheck::loadSettings(QWidget* widget, QSharedPointer<Database> db)
+{
+ const auto settingsWidget = reinterpret_cast<ReportsWidgetHealthcheck*>(widget);
+ settingsWidget->loadSettings(db);
+}
+
+void ReportsPageHealthcheck::saveSettings(QWidget* widget)
+{
+ const auto settingsWidget = reinterpret_cast<ReportsWidgetHealthcheck*>(widget);
+ settingsWidget->saveSettings();
+}
diff --git a/src/gui/reports/ReportsPageHealthcheck.h b/src/gui/reports/ReportsPageHealthcheck.h
new file mode 100644
index 000000000..8a85b2d20
--- /dev/null
+++ b/src/gui/reports/ReportsPageHealthcheck.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_REPORTSPAGEHEALTHCHECK_H
+#define KEEPASSXC_REPORTSPAGEHEALTHCHECK_H
+
+#include <QWidget>
+
+#include "ReportsDialog.h"
+
+class ReportsWidgetHealthcheck;
+
+class ReportsPageHealthcheck : public IReportsPage
+{
+public:
+ ReportsWidgetHealthcheck* m_healthWidget;
+
+ ReportsPageHealthcheck();
+
+ QString name() override;
+ QIcon icon() override;
+ QWidget* createWidget() override;
+ void loadSettings(QWidget* widget, QSharedPointer<Database> db) override;
+ void saveSettings(QWidget* widget) override;
+};
+
+#endif // KEEPASSXC_REPORTSPAGEHEALTHCHECK_H
diff --git a/src/gui/reports/ReportsPageHibp.cpp b/src/gui/reports/ReportsPageHibp.cpp
new file mode 100644
index 000000000..8f5640a20
--- /dev/null
+++ b/src/gui/reports/ReportsPageHibp.cpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ReportsPageHibp.h"
+
+#include "ReportsWidgetHibp.h"
+#include "core/Resources.h"
+
+#include <QApplication>
+
+ReportsPageHibp::ReportsPageHibp()
+ : m_hibpWidget(new ReportsWidgetHibp())
+{
+}
+
+QString ReportsPageHibp::name()
+{
+ return QApplication::tr("HIBP");
+}
+
+QIcon ReportsPageHibp::icon()
+{
+ return resources()->icon("hibp");
+}
+
+QWidget* ReportsPageHibp::createWidget()
+{
+ return m_hibpWidget;
+}
+
+void ReportsPageHibp::loadSettings(QWidget* widget, QSharedPointer<Database> db)
+{
+ const auto settingsWidget = reinterpret_cast<ReportsWidgetHibp*>(widget);
+ settingsWidget->loadSettings(db);
+}
+
+void ReportsPageHibp::saveSettings(QWidget* widget)
+{
+ const auto settingsWidget = reinterpret_cast<ReportsWidgetHibp*>(widget);
+ settingsWidget->saveSettings();
+}
diff --git a/src/gui/reports/ReportsPageHibp.h b/src/gui/reports/ReportsPageHibp.h
new file mode 100644
index 000000000..9d74347c9
--- /dev/null
+++ b/src/gui/reports/ReportsPageHibp.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_REPORTSPAGEHIBP_H
+#define KEEPASSXC_REPORTSPAGEHIBP_H
+
+#include <QWidget>
+
+#include "ReportsDialog.h"
+
+class ReportsWidgetHibp;
+
+class ReportsPageHibp : public IReportsPage
+{
+public:
+ ReportsWidgetHibp* m_hibpWidget;
+
+ ReportsPageHibp();
+
+ QString name() override;
+ QIcon icon() override;
+ QWidget* createWidget() override;
+ void loadSettings(QWidget* widget, QSharedPointer<Database> db) override;
+ void saveSettings(QWidget* widget) override;
+};
+
+#endif // KEEPASSXC_REPORTSPAGEHIBP_H
diff --git a/src/gui/dbsettings/DatabaseSettingsPageStatistics.cpp b/src/gui/reports/ReportsPageStatistics.cpp
index 6fe24ff0f..90cd338df 100644
--- a/src/gui/dbsettings/DatabaseSettingsPageStatistics.cpp
+++ b/src/gui/reports/ReportsPageStatistics.cpp
@@ -15,38 +15,36 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "DatabaseSettingsPageStatistics.h"
+#include "ReportsPageStatistics.h"
-#include "DatabaseSettingsWidgetStatistics.h"
-#include "core/Database.h"
-#include "core/FilePath.h"
-#include "core/Group.h"
+#include "ReportsWidgetStatistics.h"
+#include "core/Resources.h"
#include <QApplication>
-QString DatabaseSettingsPageStatistics::name()
+QString ReportsPageStatistics::name()
{
return QApplication::tr("Statistics");
}
-QIcon DatabaseSettingsPageStatistics::icon()
+QIcon ReportsPageStatistics::icon()
{
- return FilePath::instance()->icon("actions", "statistics");
+ return Resources::instance()->icon("statistics");
}
-QWidget* DatabaseSettingsPageStatistics::createWidget()
+QWidget* ReportsPageStatistics::createWidget()
{
- return new DatabaseSettingsWidgetStatistics();
+ return new ReportsWidgetStatistics();
}
-void DatabaseSettingsPageStatistics::loadSettings(QWidget* widget, QSharedPointer<Database> db)
+void ReportsPageStatistics::loadSettings(QWidget* widget, QSharedPointer<Database> db)
{
- DatabaseSettingsWidgetStatistics* settingsWidget = reinterpret_cast<DatabaseSettingsWidgetStatistics*>(widget);
+ ReportsWidgetStatistics* settingsWidget = reinterpret_cast<ReportsWidgetStatistics*>(widget);
settingsWidget->loadSettings(db);
}
-void DatabaseSettingsPageStatistics::saveSettings(QWidget* widget)
+void ReportsPageStatistics::saveSettings(QWidget* widget)
{
- DatabaseSettingsWidgetStatistics* settingsWidget = reinterpret_cast<DatabaseSettingsWidgetStatistics*>(widget);
+ ReportsWidgetStatistics* settingsWidget = reinterpret_cast<ReportsWidgetStatistics*>(widget);
settingsWidget->saveSettings();
}
diff --git a/src/gui/dbsettings/DatabaseSettingsPageStatistics.h b/src/gui/reports/ReportsPageStatistics.h
index c890f3b81..00d611ee3 100644
--- a/src/gui/dbsettings/DatabaseSettingsPageStatistics.h
+++ b/src/gui/reports/ReportsPageStatistics.h
@@ -15,14 +15,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEEPASSXC_DATABASESETTINGSPAGESTATISTICS_H
-#define KEEPASSXC_DATABASESETTINGSPAGESTATISTICS_H
+#ifndef KEEPASSXC_REPORTSPAGESTATISTICS_H
+#define KEEPASSXC_REPORTSPAGESTATISTICS_H
#include <QWidget>
-#include "DatabaseSettingsDialog.h"
+#include "ReportsDialog.h"
-class DatabaseSettingsPageStatistics : public IDatabaseSettingsPage
+class ReportsPageStatistics : public IReportsPage
{
public:
QString name() override;
@@ -32,4 +32,4 @@ public:
void saveSettings(QWidget* widget) override;
};
-#endif // KEEPASSXC_DATABASESETTINGSPAGESTATISTICS_H
+#endif // KEEPASSXC_REPORTSPAGESTATISTICS_H
diff --git a/src/gui/reports/ReportsWidget.cpp b/src/gui/reports/ReportsWidget.cpp
new file mode 100644
index 000000000..184434116
--- /dev/null
+++ b/src/gui/reports/ReportsWidget.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ReportsWidget.h"
+
+ReportsWidget::ReportsWidget(QWidget* parent)
+ : SettingsWidget(parent)
+{
+}
+
+ReportsWidget::~ReportsWidget()
+{
+}
+
+/**
+ * Load the database to be configured by this page and initialize the page.
+ * The page will NOT take ownership of the database.
+ *
+ * @param db database object to be configured
+ */
+void ReportsWidget::load(QSharedPointer<Database> db)
+{
+ m_db = std::move(db);
+ initialize();
+}
+
+const QSharedPointer<Database> ReportsWidget::getDatabase() const
+{
+ return m_db;
+}
diff --git a/src/gui/reports/ReportsWidget.h b/src/gui/reports/ReportsWidget.h
new file mode 100644
index 000000000..631490405
--- /dev/null
+++ b/src/gui/reports/ReportsWidget.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2018 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_REPORTSWIDGET_H
+#define KEEPASSXC_REPORTSWIDGET_H
+
+#include "gui/settings/SettingsWidget.h"
+
+#include <QSharedPointer>
+
+class Database;
+
+/**
+ * Pure-virtual base class for KeePassXC database settings widgets.
+ */
+class ReportsWidget : public SettingsWidget
+{
+ Q_OBJECT
+
+public:
+ explicit ReportsWidget(QWidget* parent = nullptr);
+ Q_DISABLE_COPY(ReportsWidget);
+ ~ReportsWidget() override;
+
+ virtual void load(QSharedPointer<Database> db);
+
+ const QSharedPointer<Database> getDatabase() const;
+
+signals:
+ /**
+ * Can be emitted to indicate size changes and allow parents widgets to adjust properly.
+ */
+ void sizeChanged();
+
+protected:
+ QSharedPointer<Database> m_db;
+};
+
+#endif // KEEPASSXC_REPORTSWIDGET_H
diff --git a/src/gui/reports/ReportsWidgetHealthcheck.cpp b/src/gui/reports/ReportsWidgetHealthcheck.cpp
new file mode 100644
index 000000000..5f502b16b
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetHealthcheck.cpp
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ReportsWidgetHealthcheck.h"
+#include "ui_ReportsWidgetHealthcheck.h"
+
+#include "core/AsyncTask.h"
+#include "core/Database.h"
+#include "core/Global.h"
+#include "core/Group.h"
+#include "core/PasswordHealth.h"
+#include "core/Resources.h"
+#include "gui/styles/StateColorPalette.h"
+
+#include <QMenu>
+#include <QSharedPointer>
+#include <QSortFilterProxyModel>
+#include <QStandardItemModel>
+
+namespace
+{
+ class Health
+ {
+ public:
+ struct Item
+ {
+ QPointer<const Group> group;
+ QPointer<const Entry> entry;
+ QSharedPointer<PasswordHealth> health;
+ bool knownBad = false;
+
+ Item(const Group* g, const Entry* e, QSharedPointer<PasswordHealth> h)
+ : group(g)
+ , entry(e)
+ , health(h)
+ , knownBad(e->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && e->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR)
+ {
+ }
+
+ bool operator<(const Item& rhs) const
+ {
+ return health->score() < rhs.health->score();
+ }
+ };
+
+ explicit Health(QSharedPointer<Database>);
+
+ const QList<QSharedPointer<Item>>& items() const
+ {
+ return m_items;
+ }
+
+ bool anyKnownBad() const
+ {
+ return m_anyKnownBad;
+ }
+
+ private:
+ QSharedPointer<Database> m_db;
+ HealthChecker m_checker;
+ QList<QSharedPointer<Item>> m_items;
+ bool m_anyKnownBad = false;
+ };
+} // namespace
+
+Health::Health(QSharedPointer<Database> db)
+ : m_db(db)
+ , m_checker(db)
+{
+ for (const auto* group : db->rootGroup()->groupsRecursive(true)) {
+ // Skip recycle bin
+ if (group->isRecycled()) {
+ continue;
+ }
+
+ for (const auto* entry : group->entries()) {
+ if (entry->isRecycled()) {
+ continue;
+ }
+
+ // Skip entries with empty password
+ if (entry->password().isEmpty()) {
+ continue;
+ }
+
+ // Evaluate this entry
+ const auto item = QSharedPointer<Item>(new Item(group, entry, m_checker.evaluate(entry)));
+ if (item->knownBad) {
+ m_anyKnownBad = true;
+ }
+
+ // Add entry if its password isn't at least "good"
+ if (item->health->quality() < PasswordHealth::Quality::Good) {
+ m_items.append(item);
+ }
+ }
+ }
+
+ // Sort the result so that the worst passwords (least score)
+ // are at the top
+ std::sort(m_items.begin(), m_items.end(), [](QSharedPointer<Item> x, QSharedPointer<Item> y) { return *x < *y; });
+}
+
+ReportsWidgetHealthcheck::ReportsWidgetHealthcheck(QWidget* parent)
+ : QWidget(parent)
+ , m_ui(new Ui::ReportsWidgetHealthcheck())
+ , m_errorIcon(Resources::instance()->icon("dialog-error"))
+ , m_referencesModel(new QStandardItemModel(this))
+ , m_modelProxy(new QSortFilterProxyModel(this))
+{
+ m_ui->setupUi(this);
+
+ m_modelProxy->setSourceModel(m_referencesModel.data());
+ m_ui->healthcheckTableView->setModel(m_modelProxy.data());
+ m_ui->healthcheckTableView->setSelectionMode(QAbstractItemView::NoSelection);
+ m_ui->healthcheckTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ m_ui->healthcheckTableView->setSortingEnabled(true);
+
+ connect(m_ui->healthcheckTableView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint)));
+ connect(m_ui->healthcheckTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex)));
+ connect(m_ui->showKnownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(calculateHealth()));
+}
+
+ReportsWidgetHealthcheck::~ReportsWidgetHealthcheck()
+{
+}
+
+void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer<PasswordHealth> health,
+ const Group* group,
+ const Entry* entry,
+ bool knownBad)
+{
+ QString descr, tip;
+ QColor qualityColor;
+ StateColorPalette statePalette;
+ const auto quality = health->quality();
+ switch (quality) {
+ case PasswordHealth::Quality::Bad:
+ descr = tr("Bad", "Password quality");
+ tip = tr("Bad — password must be changed");
+ qualityColor = statePalette.color(StateColorPalette::HealthCritical);
+ break;
+
+ case PasswordHealth::Quality::Poor:
+ descr = tr("Poor", "Password quality");
+ tip = tr("Poor — password should be changed");
+ qualityColor = statePalette.color(StateColorPalette::HealthBad);
+ break;
+
+ case PasswordHealth::Quality::Weak:
+ descr = tr("Weak", "Password quality");
+ tip = tr("Weak — consider changing the password");
+ qualityColor = statePalette.color(StateColorPalette::HealthWeak);
+ break;
+
+ case PasswordHealth::Quality::Good:
+ case PasswordHealth::Quality::Excellent:
+ qualityColor = statePalette.color(StateColorPalette::HealthOk);
+ break;
+ }
+
+ auto title = entry->title();
+ if (knownBad) {
+ title.append(tr(" (Excluded)"));
+ }
+
+ auto row = QList<QStandardItem*>();
+ row << new QStandardItem(descr);
+ row << new QStandardItem(entry->iconPixmap(), title);
+ row << new QStandardItem(group->iconPixmap(), group->hierarchy().join("/"));
+ row << new QStandardItem(QString::number(health->score()));
+ row << new QStandardItem(health->scoreReason());
+
+ // Set background color of first column according to password quality.
+ // Set the same as foreground color so the description is usually
+ // invisible, it's just for screen readers etc.
+ QBrush brush(qualityColor);
+ row[0]->setForeground(brush);
+ row[0]->setBackground(brush);
+
+ // Set tooltips
+ row[0]->setToolTip(tip);
+ if (knownBad) {
+ row[1]->setToolTip(tr("This entry is being excluded from reports"));
+ }
+ row[4]->setToolTip(health->scoreDetails());
+
+ // Store entry pointer per table row (used in double click handler)
+ m_referencesModel->appendRow(row);
+ m_rowToEntry.append({group, entry});
+}
+
+void ReportsWidgetHealthcheck::loadSettings(QSharedPointer<Database> db)
+{
+ m_db = std::move(db);
+ m_healthCalculated = false;
+ m_referencesModel->clear();
+ m_rowToEntry.clear();
+
+ auto row = QList<QStandardItem*>();
+ row << new QStandardItem(tr("Please wait, health data is being calculated..."));
+ m_referencesModel->appendRow(row);
+}
+
+void ReportsWidgetHealthcheck::showEvent(QShowEvent* event)
+{
+ QWidget::showEvent(event);
+
+ if (!m_healthCalculated) {
+ // Perform stats calculation on next event loop to allow widget to appear
+ m_healthCalculated = true;
+ QTimer::singleShot(0, this, SLOT(calculateHealth()));
+ }
+}
+
+void ReportsWidgetHealthcheck::calculateHealth()
+{
+ m_referencesModel->clear();
+
+ // Perform the health check
+ const QScopedPointer<Health> health(AsyncTask::runAndWaitForFuture([this] { return new Health(m_db); }));
+
+ // Display entries that are marked as "known bad"?
+ const auto showKnownBad = m_ui->showKnownBadCheckBox->isChecked();
+
+ // Display the entries
+ m_rowToEntry.clear();
+ for (const auto& item : health->items()) {
+ if (item->knownBad && !showKnownBad) {
+ // Exclude this entry from the report
+ continue;
+ }
+
+ // Show the entry in the report
+ addHealthRow(item->health, item->group, item->entry, item->knownBad);
+ }
+
+ // Set the table header
+ if (m_referencesModel->rowCount() == 0) {
+ m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Congratulations, everything is healthy!"));
+ } else {
+ m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("") << tr("Title") << tr("Path") << tr("Score")
+ << tr("Reason"));
+ }
+
+ m_ui->healthcheckTableView->resizeRowsToContents();
+
+ // Show the "show known bad entries" checkbox if there's any known
+ // bad entry in the database.
+ if (health->anyKnownBad()) {
+ m_ui->showKnownBadCheckBox->show();
+ } else {
+ m_ui->showKnownBadCheckBox->hide();
+ }
+}
+
+void ReportsWidgetHealthcheck::emitEntryActivated(const QModelIndex& index)
+{
+ if (!index.isValid()) {
+ return;
+ }
+
+ auto mappedIndex = m_modelProxy->mapToSource(index);
+ const auto row = m_rowToEntry[mappedIndex.row()];
+ const auto group = row.first;
+ const auto entry = row.second;
+ if (group && entry) {
+ emit entryActivated(const_cast<Entry*>(entry));
+ }
+}
+
+void ReportsWidgetHealthcheck::customMenuRequested(QPoint pos)
+{
+
+ // Find which entry has been clicked
+ const auto index = m_ui->healthcheckTableView->indexAt(pos);
+ if (!index.isValid()) {
+ return;
+ }
+ auto mappedIndex = m_modelProxy->mapToSource(index);
+ m_contextmenuEntry = const_cast<Entry*>(m_rowToEntry[mappedIndex.row()].second);
+ if (!m_contextmenuEntry) {
+ return;
+ }
+
+ // Create the context menu
+ const auto menu = new QMenu(this);
+
+ // Create the "edit entry" menu item
+ const auto edit = new QAction(Resources::instance()->icon("entry-edit"), tr("Edit Entry..."), this);
+ menu->addAction(edit);
+ connect(edit, SIGNAL(triggered()), SLOT(editFromContextmenu()));
+
+ // Create the "exclude from reports" menu item
+ const auto knownbad = new QAction(Resources::instance()->icon("reports-exclude"), tr("Exclude from reports"), this);
+ knownbad->setCheckable(true);
+ knownbad->setChecked(m_contextmenuEntry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && m_contextmenuEntry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR);
+ menu->addAction(knownbad);
+ connect(knownbad, SIGNAL(toggled(bool)), SLOT(toggleKnownBad(bool)));
+
+ // Show the context menu
+ menu->popup(m_ui->healthcheckTableView->viewport()->mapToGlobal(pos));
+}
+
+void ReportsWidgetHealthcheck::editFromContextmenu()
+{
+ if (m_contextmenuEntry) {
+ emit entryActivated(m_contextmenuEntry);
+ }
+}
+
+void ReportsWidgetHealthcheck::toggleKnownBad(bool isKnownBad)
+{
+ if (!m_contextmenuEntry) {
+ return;
+ }
+
+ m_contextmenuEntry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR);
+
+ calculateHealth();
+}
+
+void ReportsWidgetHealthcheck::saveSettings()
+{
+ // nothing to do - the tab is passive
+}
diff --git a/src/gui/reports/ReportsWidgetHealthcheck.h b/src/gui/reports/ReportsWidgetHealthcheck.h
new file mode 100644
index 000000000..58ac0a03b
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetHealthcheck.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_REPORTSWIDGETHEALTHCHECK_H
+#define KEEPASSXC_REPORTSWIDGETHEALTHCHECK_H
+
+#include "gui/entry/EntryModel.h"
+#include <QHash>
+#include <QIcon>
+#include <QPair>
+#include <QWidget>
+
+class Database;
+class Entry;
+class Group;
+class PasswordHealth;
+class QSortFilterProxyModel;
+class QStandardItemModel;
+
+namespace Ui
+{
+ class ReportsWidgetHealthcheck;
+}
+
+class ReportsWidgetHealthcheck : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit ReportsWidgetHealthcheck(QWidget* parent = nullptr);
+ ~ReportsWidgetHealthcheck();
+
+ void loadSettings(QSharedPointer<Database> db);
+ void saveSettings();
+
+protected:
+ void showEvent(QShowEvent* event) override;
+
+signals:
+ void entryActivated(Entry*);
+
+public slots:
+ void calculateHealth();
+ void emitEntryActivated(const QModelIndex& index);
+ void customMenuRequested(QPoint);
+ void editFromContextmenu();
+ void toggleKnownBad(bool);
+
+private:
+ void addHealthRow(QSharedPointer<PasswordHealth>, const Group*, const Entry*, bool knownBad);
+
+ QScopedPointer<Ui::ReportsWidgetHealthcheck> m_ui;
+
+ bool m_healthCalculated = false;
+ QIcon m_errorIcon;
+ QScopedPointer<QStandardItemModel> m_referencesModel;
+ QScopedPointer<QSortFilterProxyModel> m_modelProxy;
+ QSharedPointer<Database> m_db;
+ QList<QPair<const Group*, const Entry*>> m_rowToEntry;
+ Entry* m_contextmenuEntry = nullptr;
+};
+
+#endif // KEEPASSXC_REPORTSWIDGETHEALTHCHECK_H
diff --git a/src/gui/reports/ReportsWidgetHealthcheck.ui b/src/gui/reports/ReportsWidgetHealthcheck.ui
new file mode 100644
index 000000000..72e4fc328
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetHealthcheck.ui
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ReportsWidgetHealthcheck</class>
+ <widget class="QWidget" name="ReportsWidgetHealthcheck">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>505</width>
+ <height>379</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTableView" name="healthcheckTableView">
+ <property name="contextMenuPolicy">
+ <enum>Qt::CustomContextMenu</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="showDropIndicator" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="textElideMode">
+ <enum>Qt::ElideMiddle</enum>
+ </property>
+ <property name="sortingEnabled">
+ <bool>false</bool>
+ </property>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="showKnownBadCheckBox">
+ <property name="text">
+ <string>Also show entries that have been excluded from reports</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="tipLabel">
+ <property name="font">
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Hover over reason to show additional details. Double-click entries to edit.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>healthcheckTableView</tabstop>
+ <tabstop>showKnownBadCheckBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/gui/reports/ReportsWidgetHibp.cpp b/src/gui/reports/ReportsWidgetHibp.cpp
new file mode 100644
index 000000000..48e36518d
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetHibp.cpp
@@ -0,0 +1,404 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ReportsWidgetHibp.h"
+#include "ui_ReportsWidgetHibp.h"
+
+#include "config-keepassx.h"
+#include "core/Database.h"
+#include "core/Global.h"
+#include "core/Group.h"
+#include "core/PasswordHealth.h"
+#include "core/Resources.h"
+#include "gui/MessageBox.h"
+
+#include <QMenu>
+#include <QSortFilterProxyModel>
+#include <QStandardItemModel>
+
+namespace
+{
+ /*
+ * Check if an entry has been marked as "known bad password".
+ * These entries are to be excluded from the HIBP report.
+ *
+ * Question to reviewer: Should this be a member function of Entry?
+ * It's duplicated in EditEntryWidget::setForms, EditEntryWidget::updateEntryData,
+ * ReportsWidgetHealthcheck::customMenuRequested, and Health::Item::Item.
+ */
+ bool isKnownBad(const Entry* entry)
+ {
+ return entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR;
+ }
+} // namespace
+
+ReportsWidgetHibp::ReportsWidgetHibp(QWidget* parent)
+ : QWidget(parent)
+ , m_ui(new Ui::ReportsWidgetHibp())
+ , m_referencesModel(new QStandardItemModel(this))
+ , m_modelProxy(new QSortFilterProxyModel(this))
+{
+ m_ui->setupUi(this);
+
+ m_modelProxy->setSourceModel(m_referencesModel.data());
+ m_ui->hibpTableView->setModel(m_modelProxy.data());
+ m_ui->hibpTableView->setSelectionMode(QAbstractItemView::NoSelection);
+ m_ui->hibpTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ m_ui->hibpTableView->setSortingEnabled(true);
+
+ connect(m_ui->hibpTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex)));
+ connect(m_ui->hibpTableView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint)));
+ connect(m_ui->showKnownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(makeHibpTable()));
+#ifdef WITH_XC_NETWORKING
+ connect(&m_downloader, SIGNAL(hibpResult(QString, int)), SLOT(addHibpResult(QString, int)));
+ connect(&m_downloader, SIGNAL(fetchFailed(QString)), SLOT(fetchFailed(QString)));
+
+ connect(m_ui->validationButton, &QPushButton::pressed, [this] { startValidation(); });
+#endif
+}
+
+ReportsWidgetHibp::~ReportsWidgetHibp()
+{
+}
+
+void ReportsWidgetHibp::loadSettings(QSharedPointer<Database> db)
+{
+ // Re-initialize
+ m_db = std::move(db);
+ m_referencesModel->clear();
+ m_pwndPasswords.clear();
+ m_error.clear();
+ m_rowToEntry.clear();
+ m_editedEntry = nullptr;
+#ifdef WITH_XC_NETWORKING
+ m_ui->stackedWidget->setCurrentIndex(0);
+ m_ui->validationButton->setEnabled(true);
+ m_ui->progressBar->hide();
+#else
+ // Compiled without networking, can't do anything
+ m_ui->stackedWidget->setCurrentIndex(2);
+#endif
+}
+
+/*
+ * Fill the table will all entries that have passwords that we've
+ * found to have been pwned.
+ */
+void ReportsWidgetHibp::makeHibpTable()
+{
+ // Reset the table
+ m_referencesModel->clear();
+ m_rowToEntry.clear();
+
+ // If there were no findings, display a motivational message
+ if (m_pwndPasswords.isEmpty() && m_error.isEmpty()) {
+ m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Congratulations, no exposed passwords!"));
+ m_ui->stackedWidget->setCurrentIndex(1);
+ return;
+ }
+
+ // Standard header labels for found issues
+ m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Title") << tr("Path") << tr("Password exposed…"));
+
+ // Search database for passwords that we've found so far
+ QList<QPair<const Entry*, int>> items;
+ for (const auto* entry : m_db->rootGroup()->entriesRecursive()) {
+ if (!entry->isRecycled()) {
+ const auto found = m_pwndPasswords.find(entry->password());
+ if (found != m_pwndPasswords.end()) {
+ items.append({entry, found.value()});
+ }
+ }
+ }
+
+ // Sort decending by the number the password has been exposed
+ qSort(items.begin(), items.end(), [](QPair<const Entry*, int>& lhs, QPair<const Entry*, int>& rhs) {
+ return lhs.second > rhs.second;
+ });
+
+ // Display entries that are marked as "known bad"?
+ const auto showKnownBad = m_ui->showKnownBadCheckBox->isChecked();
+
+ // The colors for table cells
+ const auto red = QBrush("red");
+
+ // Build the table
+ bool anyKnownBad = false;
+ for (const auto& item : items) {
+ const auto entry = item.first;
+ const auto group = entry->group();
+ const auto count = item.second;
+ auto title = entry->title();
+
+ // If the entry is marked as known bad, hide it unless the
+ // checkbox is set.
+ bool knownBad = isKnownBad(entry);
+ if (knownBad) {
+ anyKnownBad = true;
+ if (!showKnownBad) {
+ continue;
+ }
+
+ title.append(tr(" (Excluded)"));
+ }
+
+ auto row = QList<QStandardItem*>();
+ row << new QStandardItem(entry->iconPixmap(), title)
+ << new QStandardItem(group->iconPixmap(), group->hierarchy().join("/"))
+ << new QStandardItem(countToText(count));
+
+ if (knownBad) {
+ row[1]->setToolTip(tr("This entry is being excluded from reports"));
+ }
+
+ row[2]->setForeground(red);
+ m_referencesModel->appendRow(row);
+
+ // Store entry pointer per table row (used in double click handler)
+ m_rowToEntry.append(entry);
+ }
+
+ // If there was an error, append the error message to the table
+ if (!m_error.isEmpty()) {
+ auto row = QList<QStandardItem*>();
+ row << new QStandardItem(m_error);
+ m_referencesModel->appendRow(row);
+ row[0]->setForeground(QBrush(QColor("red")));
+ }
+
+ // If we're done and everything is good, display a motivational message
+#ifdef WITH_XC_NETWORKING
+ if (m_downloader.passwordsRemaining() == 0 && m_pwndPasswords.isEmpty() && m_error.isEmpty()) {
+ m_referencesModel->clear();
+ m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Congratulations, no exposed passwords!"));
+ }
+#endif
+
+ // Show the "show known bad entries" checkbox if there's any known
+ // bad entry in the database.
+ if (anyKnownBad) {
+ m_ui->showKnownBadCheckBox->show();
+ } else {
+ m_ui->showKnownBadCheckBox->hide();
+ }
+
+ m_ui->hibpTableView->resizeRowsToContents();
+
+ m_ui->stackedWidget->setCurrentIndex(1);
+}
+
+/*
+ * Invoked when the downloader has finished checking one password.
+ */
+void ReportsWidgetHibp::addHibpResult(const QString& password, int count)
+{
+ // Add the password to the list of our findings if it has been pwned
+ if (count > 0) {
+ m_pwndPasswords[password] = count;
+ }
+
+#ifdef WITH_XC_NETWORKING
+ // Update the progress bar
+ int remaining = m_downloader.passwordsRemaining();
+ if (remaining > 0) {
+ m_ui->progressBar->setValue(m_ui->progressBar->maximum() - remaining);
+ } else {
+ // Finished, remove the progress bar and build the table
+ m_ui->progressBar->hide();
+ makeHibpTable();
+ }
+#endif
+}
+
+/*
+ * Invoked when a query to the HIBP server fails.
+ *
+ * Displays the table with the current findings.
+ */
+void ReportsWidgetHibp::fetchFailed(const QString& error)
+{
+ m_error = error;
+ m_ui->progressBar->hide();
+ makeHibpTable();
+}
+
+/*
+ * Add passwords to the downloader and start the actual online validation.
+ */
+void ReportsWidgetHibp::startValidation()
+{
+#ifdef WITH_XC_NETWORKING
+ // Collect all passwords in the database (unless recycled, and
+ // unless empty, and unless marked as "known bad") and submit them
+ // to the downloader.
+ for (const auto* entry : m_db->rootGroup()->entriesRecursive()) {
+ if (!entry->isRecycled() && !entry->password().isEmpty()) {
+ m_downloader.add(entry->password());
+ }
+ }
+
+ // Short circuit if we didn't actually add any passwords
+ if (m_downloader.passwordsToValidate() == 0) {
+ makeHibpTable();
+ return;
+ }
+
+ // Store the number of passwords we need to check for the progress bar
+ m_ui->progressBar->show();
+ m_ui->progressBar->setMaximum(m_downloader.passwordsToValidate());
+ m_ui->validationButton->setEnabled(false);
+
+ m_downloader.validate();
+#endif
+}
+
+/*
+ * Convert the number of times a password has been pwned into
+ * a display text for the third table column.
+ */
+QString ReportsWidgetHibp::countToText(int count)
+{
+ if (count == 1) {
+ return tr("once");
+ } else if (count <= 10) {
+ return tr("up to 10 times");
+ } else if (count <= 100) {
+ return tr("up to 100 times");
+ } else if (count <= 1000) {
+ return tr("up to 1000 times");
+ } else if (count <= 10000) {
+ return tr("up to 10,000 times");
+ } else if (count <= 100000) {
+ return tr("up to 100,000 times");
+ } else if (count <= 1000000) {
+ return tr("up to a million times");
+ }
+
+ return tr("millions of times");
+}
+
+/*
+ * Double-click handler
+ */
+void ReportsWidgetHibp::emitEntryActivated(const QModelIndex& index)
+{
+ if (!index.isValid()) {
+ return;
+ }
+
+ // Find which database entry was double-clicked
+ auto mappedIndex = m_modelProxy->mapToSource(index);
+ const auto entry = m_rowToEntry[mappedIndex.row()];
+ if (entry) {
+ // Found it, invoke entry editor
+ m_editedEntry = entry;
+ m_editedPassword = entry->password();
+ m_editedKnownBad = isKnownBad(entry);
+ emit entryActivated(const_cast<Entry*>(entry));
+ }
+}
+
+/*
+ * Invoked after "OK" was clicked in the entry editor.
+ * Re-validates the edited entry's new password.
+ */
+void ReportsWidgetHibp::refreshAfterEdit()
+{
+ // Sanity check
+ if (!m_editedEntry) {
+ return;
+ }
+
+ // No need to re-validate if there was no change that affects
+ // the HIBP result (i. e., change to the password or to the
+ // "known bad" flag)
+ if (m_editedEntry->password() == m_editedPassword && isKnownBad(m_editedEntry) == m_editedKnownBad) {
+ // Don't go through HIBP but still rebuild the table, the user might
+ // have edited the entry title.
+ makeHibpTable();
+ return;
+ }
+
+ // Remove the previous password from the list of findings
+ m_pwndPasswords.remove(m_editedPassword);
+
+ // Validate the new password against HIBP
+#ifdef WITH_XC_NETWORKING
+ m_downloader.add(m_editedEntry->password());
+ m_downloader.validate();
+#endif
+
+ m_editedEntry = nullptr;
+}
+
+void ReportsWidgetHibp::customMenuRequested(QPoint pos)
+{
+
+ // Find which entry has been clicked
+ const auto index = m_ui->hibpTableView->indexAt(pos);
+ if (!index.isValid()) {
+ return;
+ }
+ auto mappedIndex = m_modelProxy->mapToSource(index);
+ m_contextmenuEntry = const_cast<Entry*>(m_rowToEntry[mappedIndex.row()]);
+ if (!m_contextmenuEntry) {
+ return;
+ }
+
+ // Create the context menu
+ const auto menu = new QMenu(this);
+
+ // Create the "edit entry" menu item
+ const auto edit = new QAction(Resources::instance()->icon("entry-edit"), tr("Edit Entry..."), this);
+ menu->addAction(edit);
+ connect(edit, SIGNAL(triggered()), SLOT(editFromContextmenu()));
+
+ // Create the "exclude from reports" menu item
+ const auto knownbad = new QAction(Resources::instance()->icon("reports-exclude"), tr("Exclude from reports"), this);
+ knownbad->setCheckable(true);
+ knownbad->setChecked(m_contextmenuEntry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && m_contextmenuEntry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR);
+ menu->addAction(knownbad);
+ connect(knownbad, SIGNAL(toggled(bool)), SLOT(toggleKnownBad(bool)));
+
+ // Show the context menu
+ menu->popup(m_ui->hibpTableView->viewport()->mapToGlobal(pos));
+}
+
+void ReportsWidgetHibp::editFromContextmenu()
+{
+ if (m_contextmenuEntry) {
+ emit entryActivated(m_contextmenuEntry);
+ }
+}
+
+void ReportsWidgetHibp::toggleKnownBad(bool isKnownBad)
+{
+ if (!m_contextmenuEntry) {
+ return;
+ }
+
+ m_contextmenuEntry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR);
+
+ makeHibpTable();
+}
+
+void ReportsWidgetHibp::saveSettings()
+{
+ // nothing to do - the tab is passive
+}
diff --git a/src/gui/reports/ReportsWidgetHibp.h b/src/gui/reports/ReportsWidgetHibp.h
new file mode 100644
index 000000000..0d76c07fe
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetHibp.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_REPORTSWIDGETHIBP_H
+#define KEEPASSXC_REPORTSWIDGETHIBP_H
+
+#include "config-keepassx.h"
+#include "gui/entry/EntryModel.h"
+
+#include <QMap>
+#include <QPair>
+#include <QPointer>
+#include <QWidget>
+
+#ifdef WITH_XC_NETWORKING
+#include "core/HibpDownloader.h"
+#endif
+
+class Database;
+class Entry;
+class Group;
+class QSortFilterProxyModel;
+class QStandardItemModel;
+
+namespace Ui
+{
+ class ReportsWidgetHibp;
+}
+
+class ReportsWidgetHibp : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit ReportsWidgetHibp(QWidget* parent = nullptr);
+ ~ReportsWidgetHibp();
+
+ void loadSettings(QSharedPointer<Database> db);
+ void saveSettings();
+ void refreshAfterEdit();
+
+signals:
+ void entryActivated(Entry*);
+
+public slots:
+ void emitEntryActivated(const QModelIndex&);
+ void addHibpResult(const QString&, int);
+ void fetchFailed(const QString& error);
+ void makeHibpTable();
+ void customMenuRequested(QPoint);
+ void editFromContextmenu();
+ void toggleKnownBad(bool);
+
+private:
+ void startValidation();
+ static QString countToText(int count);
+
+ QScopedPointer<Ui::ReportsWidgetHibp> m_ui;
+ QScopedPointer<QStandardItemModel> m_referencesModel;
+ QScopedPointer<QSortFilterProxyModel> m_modelProxy;
+ QSharedPointer<Database> m_db;
+
+ QMap<QString, int> m_pwndPasswords; // Passwords we found to have been pwned (value is pwn count)
+ QString m_error; // Error message if download failed, else empty
+ QList<const Entry*> m_rowToEntry; // List index is table row
+ QPointer<const Entry> m_editedEntry; // The entry we're currently editing
+ QString m_editedPassword; // The old password of the entry we're editing
+ bool m_editedKnownBad; // The old "known bad" flag of the entry we're editing
+ Entry* m_contextmenuEntry = nullptr; // The entry that was right-clicked
+
+#ifdef WITH_XC_NETWORKING
+ HibpDownloader m_downloader; // This performs the actual HIBP online query
+#endif
+};
+
+#endif // KEEPASSXC_REPORTSWIDGETHIBP_H
diff --git a/src/gui/reports/ReportsWidgetHibp.ui b/src/gui/reports/ReportsWidgetHibp.ui
new file mode 100644
index 000000000..94582e8cd
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetHibp.ui
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ReportsWidgetHibp</class>
+ <widget class="QWidget" name="ReportsWidgetHibp">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>545</width>
+ <height>379</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QStackedWidget" name="stackedWidget">
+ <property name="currentIndex">
+ <number>1</number>
+ </property>
+ <widget class="QWidget" name="confirmation">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="spacing">
+ <number>15</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="maximumSize">
+ <size>
+ <width>450</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="validationButton">
+ <property name="maximumSize">
+ <size>
+ <width>275</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Perform Online Analysis</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar">
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="resultsTable">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTableView" name="hibpTableView">
+ <property name="contextMenuPolicy">
+ <enum>Qt::CustomContextMenu</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="showDropIndicator" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="textElideMode">
+ <enum>Qt::ElideMiddle</enum>
+ </property>
+ <property name="sortingEnabled">
+ <bool>false</bool>
+ </property>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="showKnownBadCheckBox">
+ <property name="text">
+ <string>Also show entries that have been excluded from reports</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="noNetwork">
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="networkNoticeLabel">
+ <property name="maximumSize">
+ <size>
+ <width>450</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>hibpTableView</tabstop>
+ <tabstop>showKnownBadCheckBox</tabstop>
+ <tabstop>validationButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.cpp b/src/gui/reports/ReportsWidgetStatistics.cpp
index b02741adb..400d82f29 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.cpp
+++ b/src/gui/reports/ReportsWidgetStatistics.cpp
@@ -15,15 +15,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "DatabaseSettingsWidgetStatistics.h"
-#include "ui_DatabaseSettingsWidgetStatistics.h"
+#include "ReportsWidgetStatistics.h"
+#include "ui_ReportsWidgetStatistics.h"
#include "core/AsyncTask.h"
#include "core/Database.h"
-#include "core/FilePath.h"
+#include "core/Global.h"
#include "core/Group.h"
#include "core/Metadata.h"
-#include "zxcvbn.h"
+#include "core/PasswordHealth.h"
+#include "core/Resources.h"
#include <QFileInfo>
#include <QHash>
@@ -43,11 +44,13 @@ namespace
int nPwdsShort = 0; // Number of passwords 8 characters or less in size
int nPwdsUnique = 0; // Number of unique passwords
int nPwdsReused = 0; // Number of non-unique passwords
+ int nKnownBad = 0; // Number of known bad entries
int pwdTotalLen = 0; // Total length of all passwords
// Ctor does all the work
explicit Stats(QSharedPointer<Database> db)
: modified(QFileInfo(db->filePath()).lastModified())
+ , m_db(db)
{
gatherStats(db->rootGroup()->groupsRecursive(true));
}
@@ -92,19 +95,27 @@ namespace
}
private:
+ QSharedPointer<Database> m_db;
QHash<QString, int> m_passwords;
void gatherStats(const QList<Group*>& groups)
{
+ auto checker = HealthChecker(m_db);
+
for (const auto* group : groups) {
// Don't count anything in the recycle bin
- if (group == group->database()->metadata()->recycleBin()) {
+ if (group->isRecycled()) {
continue;
}
++nGroups;
for (const auto* entry : group->entries()) {
+ // Don't count anything in the recycle bin
+ if (entry->isRecycled()) {
+ continue;
+ }
+
++nEntries;
if (entry->isExpired()) {
@@ -125,10 +136,15 @@ namespace
}
// Speed up Zxcvbn process by excluding very long passwords and most passphrases
- if (pwd.size() < 25 && ZxcvbnMatch(pwd.toLatin1(), nullptr, nullptr) < 65) {
+ if (pwd.size() < 25 && checker.evaluate(entry)->quality() <= PasswordHealth::Quality::Weak) {
++nPwdsWeak;
}
+ if (entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
+ && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR) {
+ ++nKnownBad;
+ }
+
pwdTotalLen += pwd.size();
m_passwords[pwd]++;
}
@@ -138,24 +154,25 @@ namespace
};
} // namespace
-DatabaseSettingsWidgetStatistics::DatabaseSettingsWidgetStatistics(QWidget* parent)
+ReportsWidgetStatistics::ReportsWidgetStatistics(QWidget* parent)
: QWidget(parent)
- , m_ui(new Ui::DatabaseSettingsWidgetStatistics())
- , m_errIcon(FilePath::instance()->icon("status", "dialog-error"))
+ , m_ui(new Ui::ReportsWidgetStatistics())
+ , m_errIcon(Resources::instance()->icon("dialog-error"))
{
m_ui->setupUi(this);
m_referencesModel.reset(new QStandardItemModel());
m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Value"));
m_ui->statisticsTableView->setModel(m_referencesModel.data());
+ m_ui->statisticsTableView->setSelectionMode(QAbstractItemView::NoSelection);
m_ui->statisticsTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
}
-DatabaseSettingsWidgetStatistics::~DatabaseSettingsWidgetStatistics()
+ReportsWidgetStatistics::~ReportsWidgetStatistics()
{
}
-void DatabaseSettingsWidgetStatistics::addStatsRow(QString name, QString value, bool bad, QString badMsg)
+void ReportsWidgetStatistics::addStatsRow(QString name, QString value, bool bad, QString badMsg)
{
auto row = QList<QStandardItem*>();
row << new QStandardItem(name);
@@ -170,7 +187,7 @@ void DatabaseSettingsWidgetStatistics::addStatsRow(QString name, QString value,
}
};
-void DatabaseSettingsWidgetStatistics::loadSettings(QSharedPointer<Database> db)
+void ReportsWidgetStatistics::loadSettings(QSharedPointer<Database> db)
{
m_db = std::move(db);
m_statsCalculated = false;
@@ -178,7 +195,7 @@ void DatabaseSettingsWidgetStatistics::loadSettings(QSharedPointer<Database> db)
addStatsRow(tr("Please wait, database statistics are being calculated..."), "");
}
-void DatabaseSettingsWidgetStatistics::showEvent(QShowEvent* event)
+void ReportsWidgetStatistics::showEvent(QShowEvent* event)
{
QWidget::showEvent(event);
@@ -189,9 +206,9 @@ void DatabaseSettingsWidgetStatistics::showEvent(QShowEvent* event)
}
}
-void DatabaseSettingsWidgetStatistics::calculateStats()
+void ReportsWidgetStatistics::calculateStats()
{
- const auto stats = AsyncTask::runAndWaitForFuture([this] { return new Stats(m_db); });
+ const QScopedPointer<Stats> stats(AsyncTask::runAndWaitForFuture([this] { return new Stats(m_db); }));
m_referencesModel->clear();
addStatsRow(tr("Database name"), m_db->metadata()->name());
@@ -225,13 +242,18 @@ void DatabaseSettingsWidgetStatistics::calculateStats()
QString::number(stats->nPwdsWeak),
stats->nPwdsWeak > 0,
tr("Recommend using long, randomized passwords with a rating of 'good' or 'excellent'."));
+ addStatsRow(tr("Entries excluded from reports"),
+ QString::number(stats->nKnownBad),
+ stats->nKnownBad > 0,
+ tr("Excluding entries from reports, e. g. because they are known to have a poor password, isn't "
+ "necessarily a problem but you should keep an eye on them."));
addStatsRow(tr("Average password length"),
tr("%1 characters").arg(stats->averagePwdLength()),
stats->isAvgPwdTooShort(),
tr("Average password length is less than ten characters. Longer passwords provide more security."));
}
-void DatabaseSettingsWidgetStatistics::saveSettings()
+void ReportsWidgetStatistics::saveSettings()
{
// nothing to do - the tab is passive
}
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.h b/src/gui/reports/ReportsWidgetStatistics.h
index 2bd42f13d..cc11a75f5 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetStatistics.h
+++ b/src/gui/reports/ReportsWidgetStatistics.h
@@ -15,8 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEEPASSXC_DATABASESETTINGSWIDGETSTATISTICS_H
-#define KEEPASSXC_DATABASESETTINGSWIDGETSTATISTICS_H
+#ifndef KEEPASSXC_REPORTSWIDGETSTATISTICS_H
+#define KEEPASSXC_REPORTSWIDGETSTATISTICS_H
#include <QIcon>
#include <QWidget>
@@ -26,15 +26,15 @@ class QStandardItemModel;
namespace Ui
{
- class DatabaseSettingsWidgetStatistics;
+ class ReportsWidgetStatistics;
}
-class DatabaseSettingsWidgetStatistics : public QWidget
+class ReportsWidgetStatistics : public QWidget
{
Q_OBJECT
public:
- explicit DatabaseSettingsWidgetStatistics(QWidget* parent = nullptr);
- ~DatabaseSettingsWidgetStatistics();
+ explicit ReportsWidgetStatistics(QWidget* parent = nullptr);
+ ~ReportsWidgetStatistics();
void loadSettings(QSharedPointer<Database> db);
void saveSettings();
@@ -46,7 +46,7 @@ private slots:
void calculateStats();
private:
- QScopedPointer<Ui::DatabaseSettingsWidgetStatistics> m_ui;
+ QScopedPointer<Ui::ReportsWidgetStatistics> m_ui;
bool m_statsCalculated = false;
QIcon m_errIcon;
@@ -56,4 +56,4 @@ private:
void addStatsRow(QString name, QString value, bool bad = false, QString badMsg = "");
};
-#endif // KEEPASSXC_DATABASESETTINGSWIDGETSTATISTICS_H
+#endif // KEEPASSXC_REPORTSWIDGETSTATISTICS_H
diff --git a/src/gui/reports/ReportsWidgetStatistics.ui b/src/gui/reports/ReportsWidgetStatistics.ui
new file mode 100644
index 000000000..047b55cf0
--- /dev/null
+++ b/src/gui/reports/ReportsWidgetStatistics.ui
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ReportsWidgetStatistics</class>
+ <widget class="QWidget" name="ReportsWidgetStatistics">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>397</width>
+ <height>379</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTableView" name="statisticsTableView">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="showDropIndicator" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="textElideMode">
+ <enum>Qt::ElideMiddle</enum>
+ </property>
+ <property name="sortingEnabled">
+ <bool>false</bool>
+ </property>
+ <attribute name="horizontalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="tipLabel">
+ <property name="font">
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Hover over lines with error icons for further information.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>statisticsTableView</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/gui/styles/StateColorPalette.cpp b/src/gui/styles/StateColorPalette.cpp
new file mode 100644
index 000000000..c729e3269
--- /dev/null
+++ b/src/gui/styles/StateColorPalette.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "StateColorPalette.h"
+
+#include "gui/Application.h"
+
+StateColorPalette::StateColorPalette()
+{
+ if (kpxcApp->isDarkTheme()) {
+ initDefaultPaletteDark();
+ } else {
+ initDefaultPaletteLight();
+ }
+}
+
+void StateColorPalette::initDefaultPaletteLight()
+{
+ setColor(ColorRole::Error, QStringLiteral("#FF7D7D"));
+ setColor(ColorRole::Warning, QStringLiteral("#FFD30F"));
+ setColor(ColorRole::Info, QStringLiteral("#84D0E1"));
+ setColor(ColorRole::Incomplete, QStringLiteral("#FFD30F"));
+
+ setColor(ColorRole::HealthCritical, QStringLiteral("#C43F31"));
+ setColor(ColorRole::HealthBad, QStringLiteral("#E07F16"));
+ setColor(ColorRole::HealthWeak, QStringLiteral("#FFD30F"));
+ setColor(ColorRole::HealthOk, QStringLiteral("#5EA10E"));
+ setColor(ColorRole::HealthExcellent, QStringLiteral("#118f17"));
+}
+
+void StateColorPalette::initDefaultPaletteDark()
+{
+ setColor(ColorRole::Error, QStringLiteral("#802D2D"));
+ setColor(ColorRole::Warning, QStringLiteral("#73682E"));
+ setColor(ColorRole::Info, QStringLiteral("#207183"));
+ setColor(ColorRole::Incomplete, QStringLiteral("#665124"));
+
+ setColor(ColorRole::HealthCritical, QStringLiteral("#C43F31"));
+ setColor(ColorRole::HealthBad, QStringLiteral("#DB9837"));
+ setColor(ColorRole::HealthWeak, QStringLiteral("#F0C400"));
+ setColor(ColorRole::HealthOk, QStringLiteral("#608A22"));
+ setColor(ColorRole::HealthExcellent, QStringLiteral("#1F8023"));
+}
diff --git a/src/gui/styles/StateColorPalette.h b/src/gui/styles/StateColorPalette.h
new file mode 100644
index 000000000..408fe032a
--- /dev/null
+++ b/src/gui/styles/StateColorPalette.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_STATECOLORPALETTE_H
+#define KEEPASSXC_STATECOLORPALETTE_H
+
+#include <QColor>
+#include <QHash>
+#include <QObject>
+
+/**
+ * Extended color palette for indicating custom widget states.
+ */
+class StateColorPalette
+{
+ Q_GADGET
+
+public:
+ StateColorPalette();
+
+ enum ColorRole
+ {
+ Error,
+ Warning,
+ Info,
+ Incomplete,
+ HealthCritical,
+ HealthBad,
+ HealthPoor,
+ HealthWeak,
+ HealthOk,
+ HealthExcellent
+ };
+
+ inline void setColor(ColorRole role, const QColor& color)
+ {
+ m_colorMap[role] = color;
+ }
+
+ inline QColor color(ColorRole role) const
+ {
+ return m_colorMap.value(role);
+ }
+
+private:
+ void initDefaultPaletteLight();
+ void initDefaultPaletteDark();
+
+ QHash<ColorRole, QColor> m_colorMap;
+};
+
+#endif // KEEPASSXC_STATECOLORPALETTE_H
diff --git a/src/gui/styles/base/BaseStyle.cpp b/src/gui/styles/base/BaseStyle.cpp
new file mode 100644
index 000000000..aac9daf1c
--- /dev/null
+++ b/src/gui/styles/base/BaseStyle.cpp
@@ -0,0 +1,4808 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2019 Andrew Richards
+ *
+ * Derived from Phantomstyle and relicensed under the GPLv2 or v3.
+ * https://github.com/randrew/phantomstyle
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "BaseStyle.h"
+#include "phantomcolor.h"
+
+#include <QAbstractItemView>
+#include <QApplication>
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QFile>
+#include <QHeaderView>
+#include <QListView>
+#include <QMainWindow>
+#include <QMenu>
+#include <QPainter>
+#include <QPainterPath>
+#include <QPoint>
+#include <QPolygon>
+#include <QPushButton>
+#include <QScrollBar>
+#include <QSharedData>
+#include <QSlider>
+#include <QSpinBox>
+#include <QSplitter>
+#include <QString>
+#include <QStyleOption>
+#include <QTableView>
+#include <QToolBar>
+#include <QToolButton>
+#include <QTreeView>
+#include <QWindow>
+#include <QWizard>
+#include <QtMath>
+#include <qdrawutil.h>
+
+#include <cmath>
+
+QT_BEGIN_NAMESPACE
+Q_GUI_EXPORT int qt_defaultDpiX();
+QT_END_NAMESPACE
+
+// Redefine Q_FALLTHROUGH for older Qt versions
+#ifndef Q_FALLTHROUGH
+#if (defined(Q_CC_GNU) && Q_CC_GNU >= 700) && !defined(Q_CC_INTEL)
+#define Q_FALLTHROUGH() __attribute__((fallthrough))
+#else
+#define Q_FALLTHROUGH() (void)0
+#endif
+#endif
+
+namespace Phantom
+{
+ namespace
+ {
+ constexpr qint16 DefaultFrameWidth = 6;
+ constexpr qint16 SplitterMaxLength = 25; // Length of splitter handle (not thickness)
+ constexpr qint16 MenuMinimumWidth = 20; // Smallest width that menu items can have
+ constexpr qint16 MenuBar_FrameWidth = 6;
+ constexpr qint16 SpinBox_ButtonWidth = 15;
+
+ // These two are currently not based on font, but could be
+ constexpr qint16 LineEdit_ContentsHPad = 5;
+ constexpr qint16 ComboBox_NonEditable_ContentsHPad = 7;
+ constexpr qint16 HeaderSortIndicator_HOffset = 1;
+ constexpr qint16 HeaderSortIndicator_VOffset = 2;
+ constexpr qint16 TabBar_InctiveVShift = 0;
+
+ constexpr qreal TabBarTab_Rounding = 1.0;
+ constexpr qreal SpinBox_Rounding = 1.0;
+ constexpr qreal LineEdit_Rounding = 1.0;
+ constexpr qreal FrameFocusRect_Rounding = 1.0;
+ constexpr qreal PushButton_Rounding = 1.0;
+ constexpr qreal ToolButton_Rounding = 1.0;
+ constexpr qreal ProgressBar_Rounding = 1.0;
+ constexpr qreal GroupBox_Rounding = 1.0;
+ constexpr qreal SliderGroove_Rounding = 1.0;
+ constexpr qreal SliderHandle_Rounding = 1.0;
+
+ constexpr qreal CheckMark_WidthOfHeightScale = 0.8;
+ constexpr qreal PushButton_HorizontalPaddingFontHeightRatio = 1.0;
+ constexpr qreal TabBar_HPaddingFontRatio = 1.25;
+ constexpr qreal TabBar_VPaddingFontRatio = 1.0 / 1.25;
+ constexpr qreal GroupBox_LabelBottomMarginFontRatio = 1.0 / 4.0;
+ constexpr qreal ComboBox_ArrowMarginRatio = 1.0 / 3.25;
+
+ constexpr qreal MenuBar_HorizontalPaddingFontRatio = 1.0 / 2.0;
+ constexpr qreal MenuBar_VerticalPaddingFontRatio = 1.0 / 3.0;
+
+ constexpr qreal MenuItem_LeftMarginFontRatio = 1.0 / 2.0;
+ constexpr qreal MenuItem_RightMarginForTextFontRatio = 1.0 / 1.5;
+ constexpr qreal MenuItem_RightMarginForArrowFontRatio = 1.0 / 4.0;
+ constexpr qreal MenuItem_VerticalMarginsFontRatio = 1.0 / 5.0;
+ // Number that's multiplied with a font's height to get the space between a
+ // menu item's checkbox (or other sign) and its text (or icon).
+ constexpr qreal MenuItem_CheckRightSpaceFontRatio = 1.0 / 4.0;
+ constexpr qreal MenuItem_TextMnemonicSpaceFontRatio = 1.5;
+ constexpr qreal MenuItem_SubMenuArrowSpaceFontRatio = 1.0 / 1.5;
+ constexpr qreal MenuItem_SubMenuArrowWidthFontRatio = 1.0 / 2.75;
+ constexpr qreal MenuItem_SeparatorHeightFontRatio = 1.0 / 1.5;
+ constexpr qreal MenuItem_CheckMarkVerticalInsetFontRatio = 1.0 / 5.0;
+ constexpr qreal MenuItem_IconRightSpaceFontRatio = 1.0 / 3.0;
+
+ constexpr bool BranchesOnEdge = false;
+ constexpr bool OverhangShadows = false;
+ constexpr bool IndicatorShadows = false;
+ constexpr bool MenuExtraBottomMargin = true;
+ constexpr bool MenuBarLeftMargin = false;
+ constexpr bool MenuBarDrawBorder = false;
+ constexpr bool AllowToolBarAutoRaise = true;
+ // Note that this only applies to the disclosure etc. decorators in tree views.
+ constexpr bool ShowItemViewDecorationSelected = false;
+ constexpr bool UseQMenuForComboBoxPopup = true;
+ constexpr bool ItemView_UseFontHeightForDecorationSize = true;
+
+ // Whether or not the non-raised tabs in a tab bar have shininess/highlights to
+ // them. Setting this to false adds an extra visual hint for distinguishing
+ // between the current and non-current tabs, but makes the non-current tabs
+ // appear less clickable. Other ways to increase the visual differences could
+ // be to increase the color contrast for the background fill color, or increase
+ // the vertical offset. However, increasing the vertical offset comes with some
+ // layout challenges, and increasing the color contrast further may visually
+ // imply an incorrect layout structure. Not sure what's best.
+ //
+ // This doesn't disable creating the color/brush resource, even though it's
+ // currently a compile-time-only option, because it may be changed to be part
+ // of some dynamic config system for Phantom in the future, or have a
+ // per-widget style hint associated with it.
+ const bool TabBar_InactiveTabsHaveSpecular = false;
+
+ struct Grad
+ {
+ Grad(const QColor& from, const QColor& to)
+ {
+ rgbA = Rgb::ofQColor(from);
+ rgbB = Rgb::ofQColor(to);
+ lA = rgbA.toHsl().l;
+ lB = rgbB.toHsl().l;
+ }
+ QColor sample(qreal alpha) const
+ {
+ Hsl hsl = Rgb::lerp(rgbA, rgbB, alpha).toHsl();
+ hsl.l = Phantom::lerp(lA, lB, alpha);
+ return hsl.toQColor();
+ }
+ Rgb rgbA, rgbB;
+ qreal lA, lB;
+ };
+
+ namespace DeriveColors
+ {
+ Q_NEVER_INLINE QColor adjustLightness(const QColor& qcolor, qreal ld)
+ {
+ Hsl hsl = Hsl::ofQColor(qcolor);
+ const qreal gamma = 3.0;
+ hsl.l = std::pow(Phantom::saturate(std::pow(hsl.l, 1.0 / gamma) + ld * 0.8), gamma);
+ return hsl.toQColor();
+ }
+ bool hack_isLightPalette(const QPalette& pal)
+ {
+ Hsl hsl0 = Hsl::ofQColor(pal.color(QPalette::WindowText));
+ Hsl hsl1 = Hsl::ofQColor(pal.color(QPalette::Window));
+ return hsl0.l < hsl1.l;
+ }
+ QColor buttonColor(const QPalette& pal)
+ {
+ // temp hack
+ if (pal.color(QPalette::Button) == pal.color(QPalette::Window))
+ return adjustLightness(pal.color(QPalette::Button), 0.01);
+ return pal.color(QPalette::Button);
+ }
+ QColor highlightedOutlineOf(const QPalette& pal)
+ {
+ return adjustLightness(pal.color(QPalette::Highlight), -0.08);
+ }
+ QColor dividerColor(const QColor& underlying)
+ {
+ return adjustLightness(underlying, -0.05);
+ }
+ QColor lightDividerColor(const QColor& underlying)
+ {
+ return adjustLightness(underlying, 0.02);
+ }
+ QColor outlineOf(const QPalette& pal)
+ {
+ return adjustLightness(pal.color(QPalette::Window), -0.1);
+ }
+ QColor gutterColorOf(const QPalette& pal)
+ {
+ return adjustLightness(pal.color(QPalette::Window), -0.05);
+ }
+ QColor darkGutterColorOf(const QPalette& pal)
+ {
+ return adjustLightness(pal.color(QPalette::Window), -0.08);
+ }
+ QColor lightShadeOf(const QColor& underlying)
+ {
+ return adjustLightness(underlying, 0.08);
+ }
+ QColor darkShadeOf(const QColor& underlying)
+ {
+ return adjustLightness(underlying, -0.08);
+ }
+ QColor overhangShadowOf(const QColor& underlying)
+ {
+ return adjustLightness(underlying, -0.05);
+ }
+ QColor sliderGutterShadowOf(const QColor& underlying)
+ {
+ return adjustLightness(underlying, -0.01);
+ }
+ QColor specularOf(const QColor& underlying)
+ {
+ return adjustLightness(underlying, 0.01);
+ }
+ QColor lightSpecularOf(const QColor& underlying)
+ {
+ return adjustLightness(underlying, 0.05);
+ }
+ QColor pressedOf(const QColor& color)
+ {
+ return adjustLightness(color, -0.05);
+ }
+ QColor darkPressedOf(const QColor& color)
+ {
+ return adjustLightness(color, -0.08);
+ }
+ QColor lightOnOf(const QColor& color)
+ {
+ return adjustLightness(color, -0.04);
+ }
+ QColor onOf(const QColor& color)
+ {
+ return adjustLightness(color, -0.08);
+ }
+ QColor indicatorColorOf(const QPalette& palette, QPalette::ColorGroup group = QPalette::Current)
+ {
+ if (hack_isLightPalette(palette)) {
+ qreal adjust = (palette.currentColorGroup() == QPalette::Disabled) ? 0.09 : 0.32;
+ return adjustLightness(palette.color(group, QPalette::WindowText), adjust);
+ }
+ return adjustLightness(palette.color(group, QPalette::WindowText), -0.05);
+ }
+ QColor inactiveTabFillColorOf(const QColor& underlying)
+ {
+ // used to be -0.01
+ return adjustLightness(underlying, -0.025);
+ }
+ QColor progressBarOutlineColorOf(const QPalette& pal)
+ {
+ // Pretty wasteful
+ Hsl hsl0 = Hsl::ofQColor(pal.color(QPalette::Window));
+ Hsl hsl1 = Hsl::ofQColor(pal.color(QPalette::Highlight));
+ hsl1.l = Phantom::saturate(qMin(hsl0.l - 0.1, hsl1.l - 0.2));
+ return hsl1.toQColor();
+ }
+ QColor itemViewMultiSelectionCurrentBorderOf(const QPalette& pal)
+ {
+ return adjustLightness(pal.color(QPalette::Highlight), -0.15);
+ }
+ QColor itemViewHeaderOnLineColorOf(const QPalette& pal)
+ {
+ return hack_isLightPalette(pal)
+ ? highlightedOutlineOf(pal)
+ : Grad(pal.color(QPalette::WindowText), pal.color(QPalette::Window)).sample(0.5);
+ }
+ } // namespace DeriveColors
+
+ namespace SwatchColors
+ {
+ enum SwatchColor
+ {
+ S_none = 0,
+ S_window,
+ S_button,
+ S_base,
+ S_text,
+ S_windowText,
+ S_highlight,
+ S_highlightedText,
+ S_scrollbarGutter,
+ S_scrollbarSlider,
+ S_window_outline,
+ S_window_specular,
+ S_window_divider,
+ S_window_lighter,
+ S_window_darker,
+ S_frame_outline,
+ S_button_specular,
+ S_button_pressed,
+ S_button_on,
+ S_button_pressed_specular,
+ S_sliderHandle,
+ S_sliderHandle_pressed,
+ S_sliderHandle_specular,
+ S_sliderHandle_pressed_specular,
+ S_base_shadow,
+ S_base_divider,
+ S_windowText_disabled,
+ S_highlight_outline,
+ S_highlight_specular,
+ S_progressBar_outline,
+ S_inactiveTabYesFrame,
+ S_inactiveTabNoFrame,
+ S_inactiveTabYesFrame_specular,
+ S_inactiveTabNoFrame_specular,
+ S_indicator_current,
+ S_indicator_disabled,
+ S_itemView_multiSelection_currentBorder,
+ S_itemView_headerOnLine,
+ S_scrollbarGutter_disabled,
+
+ // Aliases
+ S_progressBar = S_highlight,
+ S_progressBar_specular = S_highlight_specular,
+ S_tabFrame = S_window,
+ S_tabFrame_specular = S_window_specular,
+ };
+ }
+
+ using Swatchy = SwatchColors::SwatchColor;
+
+ enum
+ {
+ Num_SwatchColors = SwatchColors::S_scrollbarGutter_disabled + 1,
+ Num_ShadowSteps = 3,
+ };
+
+ struct PhSwatch : public QSharedData
+ {
+ // The pens store the brushes within them, so storing the brushes here as
+ // well is redundant. However, QPen::brush() does not return its brush by
+ // reference, so we'd end up doing a bunch of inc/dec work every time we use
+ // one. Also, it saves us the indirection of chasing two pointers (Swatch ->
+ // QPen -> QBrush) every time we want to get a QColor.
+ QBrush brushes[Num_SwatchColors];
+ QPen pens[Num_SwatchColors];
+ QColor scrollbarShadowColors[Num_ShadowSteps];
+
+ // Note: the casts to int in the assert macros are to suppress a false
+ // positive warning for tautological comparison in the clang linter.
+ inline const QColor& color(Swatchy swatchValue) const
+ {
+ Q_ASSERT(swatchValue >= 0 && static_cast<int>(swatchValue) < Num_SwatchColors);
+ return brushes[swatchValue].color();
+ }
+ inline const QBrush& brush(Swatchy swatchValue) const
+ {
+ Q_ASSERT(swatchValue >= 0 && static_cast<int>(swatchValue) < Num_SwatchColors);
+ return brushes[swatchValue];
+ }
+ inline const QPen& pen(Swatchy swatchValue) const
+ {
+ Q_ASSERT(swatchValue >= 0 && static_cast<int>(swatchValue) < Num_SwatchColors);
+ return pens[swatchValue];
+ }
+
+ void loadFromQPalette(const QPalette& pal);
+ };
+
+ using PhSwatchPtr = QExplicitlySharedDataPointer<PhSwatch>;
+ using PhCacheEntry = QPair<uint, PhSwatchPtr>;
+ enum : int
+ {
+ Num_ColorCacheEntries = 10,
+ };
+ using PhSwatchCache = QVarLengthArray<PhCacheEntry, Num_ColorCacheEntries>;
+ Q_NEVER_INLINE void PhSwatch::loadFromQPalette(const QPalette& pal)
+ {
+ using namespace SwatchColors;
+ namespace Dc = DeriveColors;
+ bool isLight = Dc::hack_isLightPalette(pal);
+ QColor colors[Num_SwatchColors];
+ colors[S_none] = QColor();
+
+ colors[S_window] = pal.color(QPalette::Window);
+ colors[S_button] = pal.color(QPalette::Button);
+ if (colors[S_button] == colors[S_window])
+ colors[S_button] = Dc::adjustLightness(colors[S_button], 0.01);
+ colors[S_base] = pal.color(QPalette::Base);
+ colors[S_text] = pal.color(QPalette::Text);
+ colors[S_windowText] = pal.color(QPalette::WindowText);
+ colors[S_highlight] = pal.color(QPalette::Highlight);
+ colors[S_highlightedText] = pal.color(QPalette::HighlightedText);
+ colors[S_scrollbarGutter] = isLight ? Dc::gutterColorOf(pal) : Dc::darkGutterColorOf(pal);
+ colors[S_scrollbarSlider] = isLight ? colors[S_button] : Dc::adjustLightness(colors[S_window], 0.2);
+
+ colors[S_window_outline] =
+ isLight ? Dc::adjustLightness(colors[S_window], -0.1) : Dc::adjustLightness(colors[S_window], 0.03);
+ colors[S_window_specular] = Dc::specularOf(colors[S_window]);
+ colors[S_window_divider] =
+ isLight ? Dc::dividerColor(colors[S_window]) : Dc::lightDividerColor(colors[S_window]);
+ colors[S_window_lighter] = Dc::lightShadeOf(colors[S_window]);
+ colors[S_window_darker] = Dc::darkShadeOf(colors[S_window]);
+ colors[S_frame_outline] = isLight ? colors[S_window_outline] : Dc::adjustLightness(colors[S_window], 0.08);
+ colors[S_button_specular] =
+ isLight ? Dc::specularOf(colors[S_button]) : Dc::lightSpecularOf(colors[S_button]);
+ colors[S_button_pressed] = isLight ? Dc::pressedOf(colors[S_button]) : Dc::darkPressedOf(colors[S_button]);
+ colors[S_button_on] = isLight ? Dc::lightOnOf(colors[S_button]) : Dc::onOf(colors[S_button]);
+ colors[S_button_pressed_specular] =
+ isLight ? Dc::specularOf(colors[S_button_pressed]) : Dc::lightSpecularOf(colors[S_button_pressed]);
+
+ colors[S_sliderHandle] = isLight ? colors[S_button] : Dc::adjustLightness(colors[S_button], -0.03);
+ colors[S_sliderHandle_specular] =
+ isLight ? Dc::specularOf(colors[S_sliderHandle]) : Dc::lightSpecularOf(colors[S_sliderHandle]);
+ colors[S_sliderHandle_pressed] =
+ isLight ? colors[S_button_pressed] : Dc::adjustLightness(colors[S_button_pressed], 0.03);
+ colors[S_sliderHandle_pressed_specular] = isLight ? Dc::specularOf(colors[S_sliderHandle_pressed])
+ : Dc::lightSpecularOf(colors[S_sliderHandle_pressed]);
+
+ colors[S_base_shadow] = Dc::overhangShadowOf(colors[S_base]);
+ colors[S_base_divider] = colors[S_window_divider];
+ colors[S_windowText_disabled] = pal.color(QPalette::Disabled, QPalette::WindowText);
+ colors[S_highlight_outline] = isLight ? Dc::adjustLightness(colors[S_highlight], -0.02)
+ : Dc::adjustLightness(colors[S_highlight], 0.05);
+ colors[S_highlight_specular] = Dc::specularOf(colors[S_highlight]);
+ colors[S_progressBar_outline] = Dc::progressBarOutlineColorOf(pal);
+ colors[S_inactiveTabYesFrame] = Dc::inactiveTabFillColorOf(colors[S_tabFrame]);
+ colors[S_inactiveTabNoFrame] = Dc::inactiveTabFillColorOf(colors[S_window]);
+ colors[S_inactiveTabYesFrame_specular] = Dc::specularOf(colors[S_inactiveTabYesFrame]);
+ colors[S_inactiveTabNoFrame_specular] = Dc::specularOf(colors[S_inactiveTabNoFrame]);
+ colors[S_indicator_current] = Dc::indicatorColorOf(pal, QPalette::Current);
+ colors[S_indicator_disabled] = Dc::indicatorColorOf(pal, QPalette::Disabled);
+ colors[S_itemView_multiSelection_currentBorder] = Dc::itemViewMultiSelectionCurrentBorderOf(pal);
+ colors[S_itemView_headerOnLine] = Dc::itemViewHeaderOnLineColorOf(pal);
+ colors[S_scrollbarGutter_disabled] = colors[S_window];
+
+ brushes[S_none] = Qt::NoBrush;
+ for (int i = S_none + 1; i < Num_SwatchColors; ++i) {
+ // todo try to reuse
+ brushes[i] = colors[i];
+ }
+ pens[S_none] = Qt::NoPen;
+ // QPen::setColor constructs a QBrush behind the scenes, so better to just
+ // re-use the ones we already made.
+ for (int i = S_none + 1; i < Num_SwatchColors; ++i) {
+ pens[i].setBrush(brushes[i]);
+ // Width is already 1, don't need to set it. Caps and joins already fine at
+ // their defaults, too.
+ }
+
+ Grad gutterGrad(Dc::sliderGutterShadowOf(colors[S_scrollbarGutter]), colors[S_scrollbarGutter]);
+ for (int i = 0; i < Num_ShadowSteps; ++i) {
+ scrollbarShadowColors[i] = gutterGrad.sample(i / static_cast<qreal>(Num_ShadowSteps));
+ }
+ }
+
+ // This is the "hash" (not really a hash) function we'll use on the happy fast
+ // path when looking up a PhSwatch for a given QPalette. It's fragile, because
+ // it uses QPalette::cacheKey(), so it may not match even when the contents
+ // (currentColorGroup + the RGB colors) of the QPalette are actually a match.
+ // But it's cheaper to calculate, so we'll store a single one of these "hashes"
+ // for the head (most recently used) cached PhSwatch, and check to see if it
+ // matches. This is the most common case, so we can usually save some work by
+ // doing this. (The second most common case is probably having a different
+ // ColorGroup but the rest of the contents are the same, but we don't have a
+ // special path for that.)
+ inline quint64 fastfragile_hash_qpalette(const QPalette& p)
+ {
+ union
+ {
+ qint64 i;
+ quint64 u;
+ } x;
+ x.i = p.cacheKey();
+ // QPalette::ColorGroup has range 0..5 (inclusive), so it only uses 3 bits.
+ // The high 32 bits in QPalette::cacheKey() are a global incrementing serial
+ // number for the QPalette creation. We don't store (2^29-1) things in our
+ // cache, and I doubt that many will ever be created in a real application
+ // while also retaining some of them across such a broad time range, so it's
+ // really unlikely that repurposing these top 3 bits to also include the
+ // QPalette::currentColorGroup() (which the cacheKey doesn't include for some
+ // reason...) will generate a collision.
+ //
+ // This may not be true in the future if the way the QPalette::cacheKey() is
+ // generated changes. If that happens, change to use the definition of
+ // `fastfragile_hash_qpalette` below, which is less likely to collide with an
+ // arbitrarily numbered key but also does more work.
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ x.u = x.u ^ (static_cast<quint64>(p.currentColorGroup()) << (64 - 3));
+ return x.u;
+#else
+ // Use this definition here if the contents/layout of QPalette::cacheKey()
+ // (as in, the C++ code in qpalette.cpp) are changed. We'll also put a Qt6
+ // guard for it, so that it will default to a more safe definition on the
+ // next guaranteed big breaking change for Qt. A warning will hopefully get
+ // someone to double-check it at some point in the future.
+#warning "Verify contents and layout of QPalette::cacheKey() have not changed"
+ QtPrivate::QHashCombine c;
+ uint h = qHash(p.currentColorGroup());
+ h = c(h, (uint)(x.u & 0xFFFFFFFFu));
+ h = c(h, (uint)((x.u >> 32) & 0xFFFFFFFFu));
+ return h;
+#endif
+ }
+
+ // This hash function is for when we want an actual accurate hash of a
+ // QPalette. QPalette's cacheKey() isn't very reliable -- it seems to change to
+ // a new random number whenever it's modified, with the exception of the
+ // currentColorGroup being changed. This kind of sucks for us, because it means
+ // two QPalette's can have the same contents but hash to different values. And
+ // this actually happens a lot! We'll do the hashing ourselves. Also, we're not
+ // interested in all of the colors, only some of them, and we ignore
+ // pens/brushes.
+ uint accurate_hash_qpalette(const QPalette& p)
+ {
+ // Probably shouldn't use this, could replace with our own guy. It's not a
+ // great hasher anyway.
+ QtPrivate::QHashCombine c;
+ uint h = qHash(p.currentColorGroup());
+ QPalette::ColorRole const roles[] = {QPalette::Window,
+ QPalette::Button,
+ QPalette::Base,
+ QPalette::Text,
+ QPalette::WindowText,
+ QPalette::Highlight,
+ QPalette::HighlightedText};
+ for (auto role : roles) {
+ h = c(h, p.color(role).rgb());
+ }
+ return h;
+ }
+
+ Q_NEVER_INLINE PhSwatchPtr
+ deep_getCachedSwatchOfQPalette(PhSwatchCache* cache,
+ int cacheCount, // Just saving a call to cache->count()
+ const QPalette& qpalette)
+ {
+ // Calculate our hash key from the QPalette's current ColorGroup and the
+ // actual RGBA values that we use. We have to mix the ColorGroup in
+ // ourselves, because QPalette does not account for it in the cache key.
+ uint key = accurate_hash_qpalette(qpalette);
+ int n = cacheCount;
+ int idx = -1;
+ for (int i = 0; i < n; ++i) {
+ const auto& x = cache->at(i);
+ if (x.first == key) {
+ idx = i;
+ break;
+ }
+ }
+ if (idx == -1) {
+ PhSwatchPtr ptr;
+ if (n < Num_ColorCacheEntries) {
+ ptr = new PhSwatch;
+ } else {
+ // Remove the oldest guy from the cache. Remember that because we may
+ // re-enter QStyle functions multiple times when drawing or calculating
+ // something, we may have to load several swaitches derived from
+ // different QPalettes on different stack frames at the same time. But as
+ // an extra cost-savings measure, we'll check and see if something else
+ // has a reference to the removed guy. If there aren't any references to
+ // it, then we'll re-use it directly instead of allocating a new one. (We
+ // will only ever run into the case where we can't re-use it directly if
+ // some other stack frame has a reference to it.) This is nice because
+ // then the QPens and QBrushes don't all also have to reallocate their d
+ // ptr stuff.
+ ptr = cache->last().second;
+ cache->removeLast();
+ ptr.detach();
+ }
+ ptr->loadFromQPalette(qpalette);
+ cache->prepend(PhCacheEntry(key, ptr));
+ return ptr;
+ } else {
+ if (idx == 0) {
+ return cache->at(idx).second;
+ }
+ PhCacheEntry e = cache->at(idx);
+ // Using std::move from algorithm could be more efficient here, but I don't
+ // want to depend on algorithm or write this myself. Small N with a movable
+ // type means it doesn't really matter in this case.
+ cache->remove(idx);
+ cache->prepend(e);
+ return e.second;
+ }
+ }
+
+ Q_NEVER_INLINE PhSwatchPtr
+ getCachedSwatchOfQPalette(PhSwatchCache* cache,
+ quint64* headSwatchFastKey, // Optimistic fast-path quick hash key
+ const QPalette& qpalette)
+ {
+ quint64 ck = fastfragile_hash_qpalette(qpalette);
+ int cacheCount = cache->count();
+ // This hint is counter-productive if we're being called in a way that
+ // interleaves different QPalettes. But misses to this optimistic path were
+ // rare in my tests. (Probably not going to amount to any significant
+ // difference, anyway.)
+ if (Q_LIKELY(cacheCount > 0 && *headSwatchFastKey == ck)) {
+ return cache->at(0).second;
+ }
+ *headSwatchFastKey = ck;
+ return deep_getCachedSwatchOfQPalette(cache, cacheCount, qpalette);
+ }
+
+ } // namespace
+} // namespace Phantom
+
+class BaseStylePrivate
+{
+public:
+ BaseStylePrivate();
+
+ // A fast'n'easy hash of QPalette::cacheKey()+QPalette::currentColorGroup()
+ // of only the head element of swatchCache list. The most common thing that
+ // happens when deriving a PhSwatch from a QPalette is that we just end up
+ // re-using the last one that we used. For that case, we can potentially save
+ // calling `accurate_hash_qpalette()` and instead use the value returned by
+ // QPalette::cacheKey() (and QPalette::currentColorGroup()) and compare it to
+ // the last one that we used. If it matches, then we know we can just use the
+ // head of the cache list without having to do any further checks, which
+ // saves a few hundred (!) nanoseconds.
+ //
+ // However, the `QPalette::cacheKey()` value is fragile and may change even
+ // if none of the colors in the QPalette have changed. In other words, all of
+ // the colors in a QPalette may match another QPalette (or a derived
+ // PhSwatch) even if the `QPalette::cacheKey()` value is different.
+ //
+ // So if `QPalette::cacheKey()+currentColorGroup()` doesn't match, then we'll
+ // use our more accurate `accurate_hash_qpalette()` to get a more accurate
+ // comparison key, and then search through the cache list to find a matching
+ // cached PhSwatch. (The more accurate cache key is what we store alongside
+ // each PhSwatch element, as the `.first` in each QPair. The
+ // QPalette::cacheKey() that we associate with the PhSwatch in the head
+ // position, `headSwatchFastKey`, is only stored for our single head element,
+ // as a special fast case.) If we find it, we'll move it to the head of the
+ // cache list. If not, we'll make a new one, and put it at the head. Either
+ // way, the `headSwatchFastKey` will be updated to the
+ // `fastfragile_qpalette_hash()` of the QPalette that we needed to derive a
+ // PhSwatch from, so that if we get called with the same QPalette again next
+ // time (which is probably going to be the case), it'll match and we can take
+ // the fast path.
+ quint64 headSwatchFastKey;
+
+ Phantom::PhSwatchCache swatchCache;
+ QPen checkBox_pen_scratch;
+};
+
+namespace Phantom
+{
+ namespace
+ {
+
+ // Minimal QPainter save/restore just for pen, brush, and AA render hint. If
+ // you touch more than that, this won't help you. But if you're only touching
+ // those things, this will save you some typing from manually storing/saving
+ // those properties each time.
+ struct PSave final
+ {
+ Q_DISABLE_COPY(PSave)
+
+ explicit PSave(QPainter* painter_)
+ {
+ Q_ASSERT(painter_);
+ painter = painter_;
+ pen = painter_->pen();
+ brush = painter_->brush();
+ hintAA = painter_->testRenderHint(QPainter::Antialiasing);
+ }
+ Q_NEVER_INLINE void restore()
+ {
+ QPainter* p = painter;
+ if (!p)
+ return;
+ bool hintAA_ = hintAA;
+ // QPainter will check both pen and brush for equality when setting, so we
+ // should set it unconditionally here.
+ p->setPen(pen);
+ p->setBrush(brush);
+ // But it won't check the render hint to guard against doing extra work.
+ // We'll do that ourselves. (Though at least for the raster engine, this
+ // doesn't cause very much work to occur. But it still chases a few
+ // pointers.)
+ if (p->testRenderHint(QPainter::Antialiasing) != hintAA_) {
+ p->setRenderHint(QPainter::Antialiasing, hintAA_);
+ }
+ painter = nullptr;
+ pen = QPen();
+ brush = QBrush();
+ hintAA = false;
+ }
+ ~PSave()
+ {
+ restore();
+ }
+
+ private:
+ QPainter* painter;
+ QPen pen;
+ QBrush brush;
+ bool hintAA;
+ };
+
+ const qreal Pi = M_PI;
+
+ qreal dpiScaled(qreal value)
+ {
+#ifdef Q_OS_MAC
+ // On mac the DPI is always 72 so we should not scale it
+ return value;
+#else
+ const qreal scale = qt_defaultDpiX() / 96.0;
+ return value * scale;
+#endif
+ }
+
+ struct MenuItemMetrics
+ {
+ int fontHeight;
+ int frameThickness;
+ int leftMargin;
+ int rightMarginForText;
+ int rightMarginForArrow;
+ int topMargin;
+ int bottomMargin;
+ int checkWidth;
+ int checkRightSpace;
+ int iconRightSpace;
+ int mnemonicSpace;
+ int arrowSpace;
+ int arrowWidth;
+ int separatorHeight;
+ int totalHeight;
+
+ static MenuItemMetrics ofFontHeight(int fontHeight);
+
+ private:
+ MenuItemMetrics()
+ {
+ }
+ };
+
+ MenuItemMetrics MenuItemMetrics::ofFontHeight(int fontHeight)
+ {
+ MenuItemMetrics m;
+ m.fontHeight = fontHeight;
+ m.frameThickness = dpiScaled(1.0);
+ m.leftMargin = static_cast<int>(fontHeight * MenuItem_LeftMarginFontRatio);
+ m.rightMarginForText = static_cast<int>(fontHeight * MenuItem_RightMarginForTextFontRatio);
+ m.rightMarginForArrow = static_cast<int>(fontHeight * MenuItem_RightMarginForArrowFontRatio);
+ m.topMargin = static_cast<int>(fontHeight * MenuItem_VerticalMarginsFontRatio);
+ m.bottomMargin = static_cast<int>(fontHeight * MenuItem_VerticalMarginsFontRatio);
+ int checkVMargin = static_cast<int>(fontHeight * MenuItem_CheckMarkVerticalInsetFontRatio);
+ int checkHeight = fontHeight - checkVMargin * 2;
+ if (checkHeight < 0)
+ checkHeight = 0;
+ m.checkWidth = static_cast<int>(checkHeight * CheckMark_WidthOfHeightScale);
+ m.checkRightSpace = static_cast<int>(fontHeight * MenuItem_CheckRightSpaceFontRatio);
+ m.iconRightSpace = static_cast<int>(fontHeight * MenuItem_IconRightSpaceFontRatio);
+ m.mnemonicSpace = static_cast<int>(fontHeight * MenuItem_TextMnemonicSpaceFontRatio);
+ m.arrowSpace = static_cast<int>(fontHeight * MenuItem_SubMenuArrowSpaceFontRatio);
+ m.arrowWidth = static_cast<int>(fontHeight * MenuItem_SubMenuArrowWidthFontRatio);
+ m.separatorHeight = static_cast<int>(fontHeight * MenuItem_SeparatorHeightFontRatio);
+ // Odd numbers only
+ m.separatorHeight = (m.separatorHeight / 2) * 2 + 1;
+ m.totalHeight = fontHeight + m.frameThickness * 2 + m.topMargin + m.bottomMargin;
+ return m;
+ }
+
+ QRect menuItemContentRect(const MenuItemMetrics& metrics, QRect itemRect, bool hasArrow)
+ {
+ QRect r = itemRect;
+ int ft = metrics.frameThickness;
+ int rm = hasArrow ? metrics.rightMarginForArrow : metrics.rightMarginForText;
+ r.adjust(ft + metrics.leftMargin, ft + metrics.topMargin, -(ft + rm), -(ft + metrics.bottomMargin));
+ return r.isValid() ? r : QRect();
+ }
+ QRect
+ menuItemCheckRect(const MenuItemMetrics& metrics, Qt::LayoutDirection direction, QRect itemRect, bool hasArrow)
+ {
+ QRect r = menuItemContentRect(metrics, itemRect, hasArrow);
+ int checkVMargin = static_cast<int>(metrics.fontHeight * MenuItem_CheckMarkVerticalInsetFontRatio);
+ if (checkVMargin < 0)
+ checkVMargin = 0;
+ r.setSize(QSize(metrics.checkWidth, metrics.fontHeight));
+ r.adjust(0, checkVMargin, 0, -checkVMargin);
+ return QStyle::visualRect(direction, itemRect, r) & itemRect;
+ }
+ QRect
+ menuItemIconRect(const MenuItemMetrics& metrics, Qt::LayoutDirection direction, QRect itemRect, bool hasArrow)
+ {
+ QRect r = menuItemContentRect(metrics, itemRect, hasArrow);
+ r.setX(r.x() + metrics.checkWidth + metrics.checkRightSpace);
+ r.setSize(QSize(metrics.fontHeight, metrics.fontHeight));
+ return QStyle::visualRect(direction, itemRect, r) & itemRect;
+ }
+ QRect menuItemTextRect(const MenuItemMetrics& metrics,
+ Qt::LayoutDirection direction,
+ QRect itemRect,
+ bool hasArrow,
+ bool hasIcon,
+ int tabWidth)
+ {
+ QRect r = menuItemContentRect(metrics, itemRect, hasArrow);
+ r.setX(r.x() + metrics.checkWidth + metrics.checkRightSpace);
+ if (hasIcon) {
+ r.setX(r.x() + metrics.fontHeight + metrics.iconRightSpace);
+ }
+ r.setWidth(r.width() - tabWidth);
+ r.setHeight(metrics.fontHeight);
+ r &= itemRect;
+ return QStyle::visualRect(direction, itemRect, r);
+ }
+ QRect menuItemMnemonicRect(const MenuItemMetrics& metrics,
+ Qt::LayoutDirection direction,
+ QRect itemRect,
+ bool hasArrow,
+ int tabWidth)
+ {
+ QRect r = menuItemContentRect(metrics, itemRect, hasArrow);
+ int x = r.x() + r.width() - tabWidth;
+ if (hasArrow)
+ x -= metrics.arrowSpace + metrics.arrowWidth;
+ r.setX(x);
+ r.setHeight(metrics.fontHeight);
+ r &= itemRect;
+ return QStyle::visualRect(direction, itemRect, r);
+ }
+ QRect menuItemArrowRect(const MenuItemMetrics& metrics, Qt::LayoutDirection direction, QRect itemRect)
+ {
+ QRect r = menuItemContentRect(metrics, itemRect, true);
+ int x = r.x() + r.width() - metrics.arrowWidth;
+ r.setX(x);
+ r &= itemRect;
+ return QStyle::visualRect(direction, itemRect, r);
+ }
+
+ Q_NEVER_INLINE
+ void progressBarFillRects(const QStyleOptionProgressBar* bar,
+ // The rect that represents the filled/completed region
+ QRect& outFilled,
+ // The rect that represents the incomplete region
+ QRect& outNonFilled,
+ // Whether or not the progress bar is indeterminate
+ bool& outIsIndeterminate)
+ {
+ QRect ra = bar->rect;
+ QRect rb = ra;
+ bool isHorizontal = bar->orientation != Qt::Vertical;
+ bool isInverted = bar->invertedAppearance;
+ bool isIndeterminate = bar->minimum == 0 && bar->maximum == 0;
+ bool isForward = !isHorizontal || bar->direction != Qt::RightToLeft;
+ if (isInverted)
+ isForward = !isForward;
+ int maxLen = isHorizontal ? ra.width() : ra.height();
+ const auto availSteps = qMax(Q_INT64_C(1), qint64(bar->maximum) - bar->minimum);
+ const auto progress = qMax(bar->progress, bar->minimum); // workaround for bug in QProgressBar
+ const auto progressSteps = qint64(progress) - bar->minimum;
+ const auto progressBarWidth = progressSteps * maxLen / availSteps;
+ int barLen = isIndeterminate ? maxLen : progressBarWidth;
+ if (isHorizontal) {
+ if (isForward) {
+ ra.setWidth(barLen);
+ rb.setX(barLen);
+ } else {
+ ra.setX(ra.x() + ra.width() - barLen);
+ rb.setWidth(rb.width() - barLen);
+ }
+ } else {
+ if (isForward) {
+ ra.setY(ra.y() + ra.height() - barLen);
+ rb.setHeight(rb.height() - barLen);
+ } else {
+ ra.setHeight(barLen);
+ rb.setY(barLen);
+ }
+ }
+ outFilled = ra;
+ outNonFilled = rb;
+ outIsIndeterminate = isIndeterminate;
+ }
+
+ int calcBigLineSize(int radius)
+ {
+ int bigLineSize = radius / 6;
+ if (bigLineSize < 4)
+ bigLineSize = 4;
+ if (bigLineSize > radius / 2)
+ bigLineSize = radius / 2;
+ return bigLineSize;
+ }
+ Q_NEVER_INLINE QPointF calcRadialPos(const QStyleOptionSlider* dial, qreal offset)
+ {
+ const int width = dial->rect.width();
+ const int height = dial->rect.height();
+ const int r = qMin(width, height) / 2;
+ const int currentSliderPosition =
+ dial->upsideDown ? dial->sliderPosition : (dial->maximum - dial->sliderPosition);
+ qreal a = 0;
+ if (dial->maximum == dial->minimum)
+ a = Pi / 2;
+ else if (dial->dialWrapping)
+ a = Pi * 3 / 2 - (currentSliderPosition - dial->minimum) * 2 * Pi / (dial->maximum - dial->minimum);
+ else
+ a = (Pi * 8 - (currentSliderPosition - dial->minimum) * 10 * Pi / (dial->maximum - dial->minimum)) / 6;
+ qreal xc = width / 2.0;
+ qreal yc = height / 2.0;
+ qreal len = r - calcBigLineSize(r) - 3;
+ qreal back = offset * len;
+ QPointF pos(QPointF(xc + back * qCos(a), yc - back * qSin(a)));
+ return pos;
+ }
+ Q_NEVER_INLINE QPolygonF calcLines(const QStyleOptionSlider* dial)
+ {
+ QPolygonF poly;
+ qreal width = dial->rect.width();
+ qreal height = dial->rect.height();
+ qreal r = qMin(width, height) / 2.0;
+ int bigLineSize = calcBigLineSize(r);
+
+ qreal xc = width / 2.0 + 0.5;
+ qreal yc = height / 2.0 + 0.5;
+ const int ns = dial->tickInterval;
+ if (!ns) // Invalid values may be set by Qt Designer.
+ return poly;
+ int notches = (dial->maximum + ns - 1 - dial->minimum) / ns;
+ if (notches <= 0)
+ return poly;
+ if (dial->maximum < dial->minimum || dial->maximum - dial->minimum > 1000) {
+ int maximum = dial->minimum + 1000;
+ notches = (maximum + ns - 1 - dial->minimum) / ns;
+ }
+ poly.resize(2 + 2 * notches);
+ int smallLineSize = bigLineSize / 2;
+ for (int i = 0; i <= notches; ++i) {
+ qreal angle =
+ dial->dialWrapping ? Pi * 3 / 2 - i * 2 * Pi / notches : (Pi * 8 - i * 10 * Pi / notches) / 6;
+ qreal s = qSin(angle);
+ qreal c = qCos(angle);
+ if (i == 0 || (((ns * i) % (dial->pageStep ? dial->pageStep : 1)) == 0)) {
+ poly[2 * i] = QPointF(xc + (r - bigLineSize) * c, yc - (r - bigLineSize) * s);
+ poly[2 * i + 1] = QPointF(xc + r * c, yc - r * s);
+ } else {
+ poly[2 * i] = QPointF(xc + (r - 1 - smallLineSize) * c, yc - (r - 1 - smallLineSize) * s);
+ poly[2 * i + 1] = QPointF(xc + (r - 1) * c, yc - (r - 1) * s);
+ }
+ }
+ return poly;
+ }
+ // This will draw a nice and shiny QDial for us. We don't want
+ // all the shinyness in QWindowsStyle, hence we place it here
+ Q_NEVER_INLINE void drawDial(const QStyleOptionSlider* option, QPainter* painter)
+ {
+ namespace Dc = Phantom::DeriveColors;
+ const QPalette& pal = option->palette;
+ QColor buttonColor = Dc::buttonColor(option->palette);
+ const int width = option->rect.width();
+ const int height = option->rect.height();
+ const bool enabled = option->state & QStyle::State_Enabled;
+ qreal r = qMin(width, height) / 2.0;
+ r -= r / 50.0;
+ painter->save();
+ painter->setRenderHint(QPainter::Antialiasing);
+ // Draw notches
+ if (option->subControls & QStyle::SC_DialTickmarks) {
+ painter->setPen(pal.color(QPalette::Disabled, QPalette::Text));
+ painter->drawLines(calcLines(option));
+ }
+ const qreal d_ = r / 6;
+ const qreal dx = option->rect.x() + d_ + (width - 2 * r) / 2 + 1;
+ const qreal dy = option->rect.y() + d_ + (height - 2 * r) / 2 + 1;
+ QRectF br = QRectF(dx + 0.5, dy + 0.5, int(r * 2 - 2 * d_ - 2), int(r * 2 - 2 * d_ - 2));
+ if (enabled) {
+ painter->setBrush(buttonColor);
+ } else {
+ painter->setBrush(Qt::NoBrush);
+ }
+ painter->setPen(Dc::outlineOf(option->palette));
+ painter->drawEllipse(br);
+ painter->setBrush(Qt::NoBrush);
+ painter->setPen(Dc::specularOf(buttonColor));
+ painter->drawEllipse(br.adjusted(1, 1, -1, -1));
+ if (option->state & QStyle::State_HasFocus) {
+ QColor highlight = pal.highlight().color();
+ highlight.setHsv(highlight.hue(), qMin(160, highlight.saturation()), qMax(230, highlight.value()));
+ highlight.setAlpha(127);
+ painter->setPen(QPen(highlight, 2.0));
+ painter->setBrush(Qt::NoBrush);
+ painter->drawEllipse(br.adjusted(-1, -1, 1, 1));
+ }
+ QPointF dp = calcRadialPos(option, 0.70);
+ const qreal ds = r / 7.0;
+ QRectF dialRect(dp.x() - ds, dp.y() - ds, 2 * ds, 2 * ds);
+ painter->setBrush(option->palette.color(QPalette::Window));
+ painter->setPen(Dc::outlineOf(option->palette));
+ painter->drawEllipse(dialRect.adjusted(-1, -1, 1, 1));
+ painter->restore();
+ }
+
+ int fontMetricsWidth(const QFontMetrics& fontMetrics, const QString& text)
+ {
+#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
+ return fontMetrics.width(text, text.size(), Qt::TextBypassShaping);
+#else
+ return fontMetrics.horizontalAdvance(text);
+#endif
+ }
+
+ // This always draws the arrow with the correct aspect ratio, even if the
+ // provided bounding rect is non-square. The base edge of the triangle is
+ // snapped to a whole pixel to avoid anti-aliasing making it look soft.
+ //
+ // Expected time (release): 5usecs for regular-sized arrows
+ Q_NEVER_INLINE void drawArrow(QPainter* p, QRect rect, Qt::ArrowType arrowDirection, const QBrush& brush)
+ {
+ const qreal ArrowBaseRatio = 0.70;
+ qreal irx, iry, irw, irh;
+ QRectF(rect).getRect(&irx, &iry, &irw, &irh);
+ if (irw < 1.0 || irh < 1.0)
+ return;
+ qreal dw, dh;
+ if (arrowDirection == Qt::LeftArrow || arrowDirection == Qt::RightArrow) {
+ dw = ArrowBaseRatio;
+ dh = 1.0;
+ } else {
+ dw = 1.0;
+ dh = ArrowBaseRatio;
+ }
+ QSizeF sz = QSizeF(dw, dh).scaled(irw, irh, Qt::KeepAspectRatio);
+ qreal aw = sz.width();
+ qreal ah = sz.height();
+ qreal ax, ay;
+ ax = irx + (irw - aw) / 2;
+ ay = iry + (irh - ah) / 2;
+ QRectF arrowRect(ax, ay, aw, ah);
+ QPointF points[3];
+ switch (arrowDirection) {
+ case Qt::DownArrow:
+ arrowRect.setTop(std::round(arrowRect.top()));
+ points[0] = arrowRect.topLeft();
+ points[1] = arrowRect.topRight();
+ points[2] = QPointF(arrowRect.center().x(), arrowRect.bottom());
+ break;
+ case Qt::RightArrow: {
+ arrowRect.setLeft(std::round(arrowRect.left()));
+ points[0] = arrowRect.topLeft();
+ points[1] = arrowRect.bottomLeft();
+ points[2] = QPointF(arrowRect.right(), arrowRect.center().y());
+ break;
+ }
+ case Qt::LeftArrow:
+ arrowRect.setRight(std::round(arrowRect.right()));
+ points[0] = arrowRect.topRight();
+ points[1] = arrowRect.bottomRight();
+ points[2] = QPointF(arrowRect.left(), arrowRect.center().y());
+ break;
+ case Qt::UpArrow:
+ default:
+ arrowRect.setBottom(std::round(arrowRect.bottom()));
+ points[0] = arrowRect.bottomLeft();
+ points[1] = arrowRect.bottomRight();
+ points[2] = QPointF(arrowRect.center().x(), arrowRect.top());
+ break;
+ }
+ auto oldPen = p->pen();
+ auto oldBrush = p->brush();
+ bool oldAA = p->testRenderHint(QPainter::Antialiasing);
+ p->setPen(Qt::NoPen);
+ p->setBrush(brush);
+ if (!oldAA) {
+ p->setRenderHint(QPainter::Antialiasing);
+ }
+ p->drawConvexPolygon(points, 3);
+ p->setPen(oldPen);
+ p->setBrush(oldBrush);
+ if (!oldAA) {
+ p->setRenderHint(QPainter::Antialiasing, false);
+ }
+ }
+
+ // Pass allowEnabled as false to always draw the arrow with the disabled color,
+ // even if the underlying palette's current color group is not disabled. Useful
+ // for parts of widgets which may want to be drawn as disabled even if the
+ // actual widget is not set as disabled, such as scrollbar step buttons when
+ // the scrollbar has no movable range.
+ Q_NEVER_INLINE void drawArrow(QPainter* painter,
+ QRect rect,
+ Qt::ArrowType type,
+ const PhSwatch& swatch,
+ bool allowEnabled = true,
+ qreal lightnessAdjustment = 0.0)
+ {
+ if (rect.isEmpty())
+ return;
+ using namespace SwatchColors;
+ auto brush = swatch.brush(allowEnabled ? S_indicator_current : S_indicator_disabled);
+ brush.setColor(DeriveColors::adjustLightness(brush.color(), lightnessAdjustment));
+ Phantom::drawArrow(painter, rect, type, brush);
+ }
+
+ // This draws exactly within the rect provided. If you provide a square rect,
+ // it will appear too wide -- you probably want to shrink the width of your
+ // square first by multiplying it with CheckMark_WidthOfHeightScale.
+ Q_NEVER_INLINE void
+ drawCheck(QPainter* painter, QPen& scratchPen, const QRectF& r, const PhSwatch& swatch, Swatchy color)
+ {
+ using namespace Phantom::SwatchColors;
+ qreal rx, ry, rw, rh;
+ QRectF(r).getRect(&rx, &ry, &rw, &rh);
+ qreal penWidth = 0.25 * qMin(rw, rh);
+ qreal dimx = rw - penWidth;
+ qreal dimy = rh - penWidth;
+ if (dimx < 0.5 || dimy < 0.5)
+ return;
+ qreal x = (rw - dimx) / 2 + rx;
+ qreal y = (rh - dimy) / 2 + ry;
+ QPointF points[3];
+ points[0] = QPointF(0.0, 0.55);
+ points[1] = QPointF(0.4, 1.0);
+ points[2] = QPointF(1.0, 0);
+ for (int i = 0; i < 3; ++i) {
+ QPointF pnt = points[i];
+ pnt.setX(pnt.x() * dimx + x);
+ pnt.setY(pnt.y() * dimy + y);
+ points[i] = pnt;
+ }
+ scratchPen.setBrush(swatch.brush(color));
+ scratchPen.setCapStyle(Qt::RoundCap);
+ scratchPen.setJoinStyle(Qt::RoundJoin);
+ scratchPen.setWidthF(penWidth);
+ Phantom::PSave save(painter);
+ if (!painter->testRenderHint(QPainter::Antialiasing))
+ painter->setRenderHint(QPainter::Antialiasing);
+ painter->setPen(scratchPen);
+ painter->setBrush(Qt::NoBrush);
+ painter->drawPolyline(points, 3);
+ }
+
+ Q_NEVER_INLINE void
+ drawHyphen(QPainter* painter, QPen& scratchPen, const QRectF& r, const PhSwatch& swatch, Swatchy color)
+ {
+ using namespace Phantom::SwatchColors;
+ qreal rx, ry, rw, rh;
+ QRectF(r).getRect(&rx, &ry, &rw, &rh);
+ qreal penWidth = 0.25 * qMin(rw, rh);
+ qreal dimx = rw - penWidth;
+ qreal dimy = rh - penWidth;
+ if (dimx < 0.5 || dimy < 0.5)
+ return;
+ qreal x = (rw - dimx) / 2 + rx;
+ qreal y = (rh - dimy) / 2 + ry;
+ QPointF p0(0.0 * dimx + x, 0.5 * dimy + y);
+ QPointF p1(1.0 * dimx + x, 0.5 * dimy + y);
+ scratchPen.setBrush(swatch.brush(color));
+ scratchPen.setCapStyle(Qt::RoundCap);
+ scratchPen.setWidthF(penWidth);
+ Phantom::PSave save(painter);
+ if (!painter->testRenderHint(QPainter::Antialiasing))
+ painter->setRenderHint(QPainter::Antialiasing);
+ painter->setPen(scratchPen);
+ painter->setBrush(Qt::NoBrush);
+ painter->drawLine(p0, p1);
+ }
+
+ Q_NEVER_INLINE void
+ drawMdiButton(QPainter* painter, const QStyleOptionTitleBar* option, QRect tmp, bool hover, bool sunken)
+ {
+ QColor dark;
+ dark.setHsv(option->palette.button().color().hue(),
+ qMin<int>(255, (option->palette.button().color().saturation())),
+ qMin<int>(255, option->palette.button().color().value() * 0.7));
+ QColor highlight = option->palette.highlight().color();
+ bool active = (option->titleBarState & QStyle::State_Active);
+ QColor titleBarHighlight(255, 255, 255, 60);
+ if (sunken)
+ painter->fillRect(tmp.adjusted(1, 1, -1, -1), option->palette.highlight().color().darker(120));
+ else if (hover)
+ painter->fillRect(tmp.adjusted(1, 1, -1, -1), QColor(255, 255, 255, 20));
+ if (sunken)
+ titleBarHighlight = highlight.darker(130);
+ QColor mdiButtonBorderColor(active ? option->palette.highlight().color().darker(180) : dark.darker(110));
+ painter->setPen(QPen(mdiButtonBorderColor));
+ const QLine lines[4] = {QLine(tmp.left() + 2, tmp.top(), tmp.right() - 2, tmp.top()),
+ QLine(tmp.left() + 2, tmp.bottom(), tmp.right() - 2, tmp.bottom()),
+ QLine(tmp.left(), tmp.top() + 2, tmp.left(), tmp.bottom() - 2),
+ QLine(tmp.right(), tmp.top() + 2, tmp.right(), tmp.bottom() - 2)};
+ painter->drawLines(lines, 4);
+ const QPoint points[4] = {QPoint(tmp.left() + 1, tmp.top() + 1),
+ QPoint(tmp.right() - 1, tmp.top() + 1),
+ QPoint(tmp.left() + 1, tmp.bottom() - 1),
+ QPoint(tmp.right() - 1, tmp.bottom() - 1)};
+ painter->drawPoints(points, 4);
+ painter->setPen(titleBarHighlight);
+ painter->drawLine(tmp.left() + 2, tmp.top() + 1, tmp.right() - 2, tmp.top() + 1);
+ painter->drawLine(tmp.left() + 1, tmp.top() + 2, tmp.left() + 1, tmp.bottom() - 2);
+ }
+
+ Q_NEVER_INLINE void fillRectOutline(QPainter* p, QRect rect, QMargins margins, const QColor& brush)
+ {
+ int x, y, w, h;
+ rect.getRect(&x, &y, &w, &h);
+ int ml = margins.left();
+ int mt = margins.top();
+ int mr = margins.right();
+ int mb = margins.bottom();
+ QRect r0(x, y, w, mt);
+ QRect r1(x, y + mt, ml, h - (mt + mb));
+ QRect r2((x + w) - mr, y + mt, mr, h - (mt + mb));
+ QRect r3(x, (y + h) - mb, w, mb);
+ p->fillRect(r0 & rect, brush);
+ p->fillRect(r1 & rect, brush);
+ p->fillRect(r2 & rect, brush);
+ p->fillRect(r3 & rect, brush);
+ }
+ void fillRectOutline(QPainter* p, QRect rect, int thickness, const QColor& color)
+ {
+ fillRectOutline(p, rect, QMargins(thickness, thickness, thickness, thickness), color);
+ }
+ Q_NEVER_INLINE void
+ fillRectEdges(QPainter* p, QRect rect, Qt::Edges edges, QMargins margins, const QColor& color)
+ {
+ int x, y, w, h;
+ rect.getRect(&x, &y, &w, &h);
+ if (edges & Qt::LeftEdge) {
+ int ml = margins.left();
+ QRect r0(x, y, ml, h);
+ p->fillRect(r0 & rect, color);
+ }
+ if (edges & Qt::TopEdge) {
+ int mt = margins.top();
+ QRect r1(x, y, w, mt);
+ p->fillRect(r1 & rect, color);
+ }
+ if (edges & Qt::RightEdge) {
+ int mr = margins.right();
+ QRect r2((x + w) - mr, y, mr, h);
+ p->fillRect(r2 & rect, color);
+ }
+ if (edges & Qt::BottomEdge) {
+ int mb = margins.bottom();
+ QRect r3(x, (y + h) - mb, w, mb);
+ p->fillRect(r3 & rect, color);
+ }
+ }
+ void fillRectEdges(QPainter* p, QRect rect, Qt::Edges edges, int thickness, const QColor& color)
+ {
+ fillRectEdges(p, rect, edges, QMargins(thickness, thickness, thickness, thickness), color);
+ }
+ inline QRect expandRect(QRect rect, Qt::Edges edges, int delta)
+ {
+ int l = edges & Qt::LeftEdge ? -delta : 0;
+ int t = edges & Qt::TopEdge ? -delta : 0;
+ int r = edges & Qt::RightEdge ? delta : 0;
+ int b = edges & Qt::BottomEdge ? delta : 0;
+ return rect.adjusted(l, t, r, b);
+ }
+ inline Qt::Edge oppositeEdge(Qt::Edge edge)
+ {
+ switch (edge) {
+ case Qt::LeftEdge:
+ return Qt::RightEdge;
+ case Qt::TopEdge:
+ return Qt::BottomEdge;
+ case Qt::RightEdge:
+ return Qt::LeftEdge;
+ case Qt::BottomEdge:
+ return Qt::TopEdge;
+ }
+ return Qt::TopEdge;
+ }
+ inline QRect rectTranslatedTowardEdge(QRect rect, Qt::Edge edge, int delta)
+ {
+ switch (edge) {
+ case Qt::LeftEdge:
+ return rect.translated(-delta, 0);
+ case Qt::TopEdge:
+ return rect.translated(0, -delta);
+ case Qt::RightEdge:
+ return rect.translated(delta, 0);
+ case Qt::BottomEdge:
+ return rect.translated(0, delta);
+ }
+ return rect;
+ }
+ Q_NEVER_INLINE QRect rectFromInnerEdgeWithThickness(QRect rect, Qt::Edge edge, int thickness)
+ {
+ int x, y, w, h;
+ rect.getRect(&x, &y, &w, &h);
+ QRect r;
+ switch (edge) {
+ case Qt::LeftEdge:
+ r = QRect(x, y, thickness, h);
+ break;
+ case Qt::TopEdge:
+ r = QRect(x, y, w, thickness);
+ break;
+ case Qt::RightEdge:
+ r = QRect((x + w) - thickness, y, thickness, h);
+ break;
+ case Qt::BottomEdge:
+ r = QRect(x, (y + h) - thickness, w, thickness);
+ break;
+ }
+ return r & rect;
+ }
+ Q_NEVER_INLINE void
+ paintSolidRoundRect(QPainter* p, QRect rect, qreal radius, const PhSwatch& swatch, Swatchy fill)
+ {
+ if (!fill)
+ return;
+ bool aa = p->testRenderHint(QPainter::Antialiasing);
+ if (radius > 0.5) {
+ if (!aa)
+ p->setRenderHint(QPainter::Antialiasing);
+ p->setPen(swatch.pen(SwatchColors::S_none));
+ p->setBrush(swatch.brush(fill));
+ p->drawRoundedRect(rect, radius, radius);
+ } else {
+ if (aa)
+ p->setRenderHint(QPainter::Antialiasing, false);
+ p->fillRect(rect, swatch.color(fill));
+ }
+ }
+ Q_NEVER_INLINE void paintBorderedRoundRect(QPainter* p,
+ QRect rect,
+ qreal radius,
+ const PhSwatch& swatch,
+ Swatchy stroke,
+ Swatchy fill)
+ {
+ if (rect.width() < 1 || rect.height() < 1)
+ return;
+ if (!stroke && !fill)
+ return;
+ bool aa = p->testRenderHint(QPainter::Antialiasing);
+ if (radius > 0.5) {
+ if (!aa)
+ p->setRenderHint(QPainter::Antialiasing);
+ p->setPen(swatch.pen(stroke));
+ p->setBrush(swatch.brush(fill));
+ QRectF rf(rect.x() + 0.5, rect.y() + 0.5, rect.width() - 1.0, rect.height() - 1.0);
+ p->drawRoundedRect(rf, radius, radius);
+ } else {
+ if (aa)
+ p->setRenderHint(QPainter::Antialiasing, false);
+ if (stroke) {
+ fillRectOutline(p, rect, 1, swatch.color(stroke));
+ }
+ if (fill) {
+ p->fillRect(rect.adjusted(1, 1, -1, -1), swatch.color(fill));
+ }
+ }
+ }
+ } // namespace
+} // namespace Phantom
+
+BaseStylePrivate::BaseStylePrivate()
+ : headSwatchFastKey(0)
+{
+}
+
+BaseStyle::BaseStyle()
+ : d(new BaseStylePrivate)
+{
+ setObjectName(QLatin1String("Phantom"));
+}
+
+BaseStyle::~BaseStyle()
+{
+ delete d;
+}
+
+// Draw text in a rectangle. The current pen set on the painter is used, unless
+// an explicit textRole is set, in which case the palette will be used. The
+// enabled bool indicates whether the text is enabled or not, and can influence
+// how the text is drawn outside of just color. Wrapping and alignment flags
+// can be passed in `alignment`.
+void BaseStyle::drawItemText(QPainter* painter,
+ const QRect& rect,
+ int alignment,
+ const QPalette& pal,
+ bool enabled,
+ const QString& text,
+ QPalette::ColorRole textRole) const
+{
+ Q_UNUSED(enabled);
+ if (text.isEmpty())
+ return;
+ if (textRole == QPalette::NoRole) {
+ painter->drawText(rect, alignment, text);
+ return;
+ }
+ QPen savedPen = painter->pen();
+ const QBrush& newBrush = pal.brush(textRole);
+ bool changed = false;
+ if (savedPen.brush() != newBrush) {
+ changed = true;
+ painter->setPen(QPen(newBrush, savedPen.widthF()));
+ }
+ painter->drawText(rect, alignment, text);
+ if (changed) {
+ painter->setPen(savedPen);
+ }
+}
+
+void BaseStyle::drawPrimitive(PrimitiveElement elem,
+ const QStyleOption* option,
+ QPainter* painter,
+ const QWidget* widget) const
+{
+ Q_ASSERT(option);
+ if (!option)
+ return;
+#ifdef BUILD_WITH_EASY_PROFILER
+ EASY_BLOCK("drawPrimitive");
+ const char* elemCString = QMetaEnum::fromType<QStyle::PrimitiveElement>().valueToKey(elem);
+ EASY_TEXT("Element", elemCString);
+#endif
+ using Swatchy = Phantom::Swatchy;
+ using namespace Phantom::SwatchColors;
+ namespace Ph = Phantom;
+ auto ph_swatchPtr = getCachedSwatchOfQPalette(&d->swatchCache, &d->headSwatchFastKey, option->palette);
+ const Ph::PhSwatch& swatch = *ph_swatchPtr.data();
+ const int state = option->state;
+ // Cast to int here to suppress warnings about cases listed which are not in
+ // the original enum. This is for custom primitive elements.
+ switch (static_cast<int>(elem)) {
+ case PE_Frame: {
+ if (widget && widget->inherits("QComboBoxPrivateContainer")) {
+ QStyleOption copy = *option;
+ copy.state |= State_Raised;
+ proxy()->drawPrimitive(PE_PanelMenu, &copy, painter, widget);
+ break;
+ }
+ Ph::fillRectOutline(painter, option->rect, 1, swatch.color(S_frame_outline));
+ break;
+ }
+ case PE_FrameMenu: {
+ break;
+ }
+ case PE_FrameDockWidget: {
+ painter->save();
+ QColor softshadow = option->palette.background().color().darker(120);
+ QRect r = option->rect;
+ painter->setPen(softshadow);
+ painter->drawRect(r.adjusted(0, 0, -1, -1));
+ painter->setPen(QPen(option->palette.light(), 1));
+ painter->drawLine(QPoint(r.left() + 1, r.top() + 1), QPoint(r.left() + 1, r.bottom() - 1));
+ painter->setPen(QPen(option->palette.background().color().darker(120)));
+ painter->drawLine(QPoint(r.left() + 1, r.bottom() - 1), QPoint(r.right() - 2, r.bottom() - 1));
+ painter->drawLine(QPoint(r.right() - 1, r.top() + 1), QPoint(r.right() - 1, r.bottom() - 1));
+ painter->restore();
+ break;
+ }
+ case PE_FrameGroupBox: {
+ QRect frame = option->rect;
+ Ph::PSave save(painter);
+ bool isFlat = false;
+ if (auto groupBox = qstyleoption_cast<const QStyleOptionGroupBox*>(option)) {
+ isFlat = groupBox->features & QStyleOptionFrame::Flat;
+ } else if (auto frameOpt = qstyleoption_cast<const QStyleOptionFrame*>(option)) {
+ isFlat = frameOpt->features & QStyleOptionFrame::Flat;
+ }
+ if (isFlat) {
+ Ph::fillRectEdges(painter, frame, Qt::TopEdge, 1, swatch.color(S_window_divider));
+ } else {
+ Ph::paintBorderedRoundRect(painter, frame, Ph::GroupBox_Rounding, swatch, S_frame_outline, S_none);
+ }
+ break;
+ }
+ case PE_IndicatorBranch: {
+ if (!(option->state & State_Children))
+ break;
+ Qt::ArrowType arrow;
+ if (option->state & State_Open) {
+ arrow = Qt::DownArrow;
+ } else if (option->direction != Qt::RightToLeft) {
+ arrow = Qt::RightArrow;
+ } else {
+ arrow = Qt::LeftArrow;
+ }
+ bool useSelectionColor = false;
+ if (option->state & State_Selected) {
+ if (auto ivopt = qstyleoption_cast<const QStyleOptionViewItem*>(option)) {
+ useSelectionColor = ivopt->showDecorationSelected;
+ }
+ }
+ Swatchy color = useSelectionColor ? S_highlightedText : S_indicator_current;
+ QRect r = option->rect;
+ if (Ph::BranchesOnEdge) {
+ // TODO RTL
+ r.moveLeft(0);
+ if (r.width() < r.height())
+ r.setWidth(r.height());
+ }
+ int adj = qMin(r.width(), r.height()) / 4;
+ r.adjust(adj, adj, -adj, -adj);
+ Ph::drawArrow(painter, r, arrow, swatch.brush(color));
+ break;
+ }
+ case PE_IndicatorMenuCheckMark: {
+ // For this PE, QCommonStyle treats State_On as drawing the check with the
+ // highlighted text color, and otherwise with the regular text color. I
+ // guess we should match that behavior, even though it's not consistent
+ // with other check box/mark drawing in QStyle (buttons and item view
+ // items.) QCommonStyle also doesn't care about tri-state or unchecked
+ // states -- it seems that if you call this, you want a check, and nothing
+ // else.
+ //
+ // We'll also catch State_Selected and treat it equivalently (the way you'd
+ // expect.) We'll use windowText instead of text, though -- probably
+ // doesn't matter.
+ Swatchy fgColor = S_windowText;
+ bool isSelected = option->state & (State_Selected | State_On);
+ bool isEnabled = option->state & State_Enabled;
+ if (isSelected) {
+ fgColor = S_highlightedText;
+ } else if (!isEnabled) {
+ fgColor = S_windowText_disabled;
+ }
+ qreal rx, ry, rw, rh;
+ QRectF(option->rect).getRect(&rx, &ry, &rw, &rh);
+ qreal dim = qMin(rw, rh);
+ const qreal insetScale = 0.8;
+ qreal dimx = dim * insetScale * Ph::CheckMark_WidthOfHeightScale;
+ qreal dimy = dim * insetScale;
+ QRectF r_(rx + (rw - dimx) / 2, ry + (rh - dimy) / 2, dimx, dimy);
+ Ph::drawCheck(painter, d->checkBox_pen_scratch, r_, swatch, fgColor);
+ break;
+ }
+ // Called for the content area on tree view rows that are selected
+ case PE_PanelItemViewItem: {
+ QCommonStyle::drawPrimitive(elem, option, painter, widget);
+ break;
+ }
+ // Called for left-of-item-content-area on tree view rows that are selected
+ case PE_PanelItemViewRow: {
+ QCommonStyle::drawPrimitive(elem, option, painter, widget);
+ break;
+ }
+ case PE_FrameTabBarBase: {
+ auto tbb = qstyleoption_cast<const QStyleOptionTabBarBase*>(option);
+ if (!tbb)
+ break;
+ Qt::Edge edge = Qt::TopEdge;
+ switch (tbb->shape) {
+ case QTabBar::RoundedNorth:
+ case QTabBar::TriangularNorth:
+ edge = Qt::TopEdge;
+ break;
+ case QTabBar::RoundedSouth:
+ case QTabBar::TriangularSouth:
+ edge = Qt::BottomEdge;
+ break;
+ case QTabBar::RoundedWest:
+ case QTabBar::TriangularWest:
+ edge = Qt::LeftEdge;
+ break;
+ case QTabBar::RoundedEast:
+ case QTabBar::TriangularEast:
+ edge = Qt::RightEdge;
+ break;
+ }
+ Ph::fillRectEdges(painter, option->rect, edge, 1, swatch.color(S_frame_outline));
+ // TODO need to check here if we're drawing with window or button color as
+ // the frame fill. Assuming window right now, but could be wrong.
+ Ph::fillRectEdges(painter, Ph::expandRect(option->rect, edge, -1), edge, 1, swatch.color(S_tabFrame_specular));
+ break;
+ }
+ case PE_PanelScrollAreaCorner: {
+ bool isLeftToRight = option->direction != Qt::RightToLeft;
+ Qt::Edges edges = Qt::TopEdge;
+ QRect bgRect = option->rect;
+ if (isLeftToRight) {
+ edges |= Qt::LeftEdge;
+ bgRect.setX(bgRect.x() + 1);
+ } else {
+ edges |= Qt::RightEdge;
+ bgRect.setWidth(bgRect.width() - 1);
+ }
+ painter->fillRect(bgRect, swatch.color(S_window));
+ Ph::fillRectEdges(painter, option->rect, edges, 1, swatch.color(S_window_outline));
+ break;
+ }
+ case PE_IndicatorArrowUp:
+ case PE_IndicatorArrowDown:
+ case PE_IndicatorArrowRight:
+ case PE_IndicatorArrowLeft: {
+ int rx, ry, rw, rh;
+ option->rect.getRect(&rx, &ry, &rw, &rh);
+ if (rw <= 1 || rh <= 1)
+ break;
+ Qt::ArrowType arrow = Qt::UpArrow;
+ switch (elem) {
+ case PE_IndicatorArrowUp:
+ arrow = Qt::UpArrow;
+ break;
+ case PE_IndicatorArrowDown:
+ arrow = Qt::DownArrow;
+ break;
+ case PE_IndicatorArrowRight:
+ arrow = Qt::RightArrow;
+ break;
+ case PE_IndicatorArrowLeft:
+ arrow = Qt::LeftArrow;
+ break;
+ default:
+ break;
+ }
+ // The caller may give us a huge rect and expect a normal-sized icon inside
+ // of it, so we don't want to fill the entire thing with an arrow,
+ // otherwise certain buttons will look weird, like the tab bar scroll
+ // buttons. Might want to break these out into editable parameters?
+ const int MaxArrowExt = Ph::dpiScaled(12);
+ const int MinMargin = qMin(rw, rh) / 4;
+ int aw, ah;
+ aw = qMin(MaxArrowExt, rw) - MinMargin;
+ ah = qMin(MaxArrowExt, rh) - MinMargin;
+ if (aw <= 2 || ah <= 2)
+ break;
+ // QCommonStyle's implementation of CC_ToolButton for non-instant popups
+ // gives us a pretty big rectangle to draw the arrow in -- shrink it. This
+ // is kind of a dirty temp hack thing until we do something smarter, like
+ // fully reimplement CC_ToolButton. Note that it passes us a regular
+ // QStyleOption and not a QStyleOptionToolButton in this case, so try to
+ // save some work before doing the inherits test.
+ if (arrow == Qt::DownArrow && !qstyleoption_cast<const QStyleOptionToolButton*>(option) && widget) {
+ auto tbutton = qobject_cast<const QToolButton*>(widget);
+ if (tbutton && tbutton->popupMode() != QToolButton::InstantPopup && tbutton->defaultAction()) {
+ int dim = static_cast<int>(qMin(rw, rh) * 0.25);
+ aw -= dim;
+ ah -= dim;
+ // We have another hack in PE_IndicatorButtonDropDown where we shift
+ // the edge left or right by 1px to avoid having two borders touching
+ // (we make it overlap instead.) So we'll need to compensate for that
+ // in the arrow's position to avoid it looking off-center.
+ rw += 1;
+ if (option->direction != Qt::RightToLeft) {
+ rx -= 1;
+ }
+ }
+ }
+ aw += (rw - aw) % 2;
+ ah += (rh - ah) % 2;
+ int ax = (rw - aw) / 2 + rx;
+ int ay = (rh - ah) / 2 + ry;
+ Ph::drawArrow(painter, QRect(ax, ay, aw, ah), arrow, swatch);
+ break;
+ }
+ case PE_IndicatorItemViewItemCheck: {
+ QStyleOptionButton button;
+ button.QStyleOption::operator=(*option);
+ button.state &= ~State_MouseOver;
+ proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget);
+ return;
+ }
+ case PE_IndicatorHeaderArrow: {
+ auto header = qstyleoption_cast<const QStyleOptionHeader*>(option);
+ if (!header)
+ return;
+ QRect r = header->rect;
+ QPoint offset = QPoint(Phantom::HeaderSortIndicator_HOffset, Phantom::HeaderSortIndicator_VOffset);
+ qreal lightness = Phantom::DeriveColors::hack_isLightPalette(widget->palette()) ? 0.03 : 0.0;
+ if (header->sortIndicator & QStyleOptionHeader::SortUp) {
+ Ph::drawArrow(painter, r.translated(offset), Qt::DownArrow, swatch, true, lightness);
+ } else if (header->sortIndicator & QStyleOptionHeader::SortDown) {
+ Ph::drawArrow(painter, r.translated(offset), Qt::UpArrow, swatch, true, lightness);
+ }
+ break;
+ }
+ case PE_IndicatorButtonDropDown: {
+ // Temp hack until we implement CC_ToolButton: avoid double-stacked border
+ // by clipping off one edge slightly.
+ QStyleOption opt0 = *option;
+ if (opt0.direction != Qt::RightToLeft) {
+ opt0.rect.adjust(-1, 0, 0, 0);
+ } else {
+ opt0.rect.adjust(0, 0, 1, 0);
+ }
+ proxy()->drawPrimitive(PE_PanelButtonTool, &opt0, painter, widget);
+ break;
+ }
+
+ case PE_IndicatorToolBarSeparator: {
+ QRect r = option->rect;
+ if (option->state & State_Horizontal) {
+ if (r.height() >= 10)
+ r.adjust(0, 3, 0, -3);
+ r.setWidth(r.width() / 2 + 1);
+ Ph::fillRectEdges(painter, r, Qt::RightEdge, 1, swatch.color(S_window_divider));
+ } else {
+ // TODO replace with new code
+ const int margin = 6;
+ const int offset = r.height() / 2;
+ painter->setPen(QPen(option->palette.background().color().darker(110)));
+ painter->drawLine(r.topLeft().x() + margin,
+ r.topLeft().y() + offset,
+ r.topRight().x() - margin,
+ r.topRight().y() + offset);
+ painter->setPen(QPen(option->palette.background().color().lighter(110)));
+ painter->drawLine(r.topLeft().x() + margin,
+ r.topLeft().y() + offset + 1,
+ r.topRight().x() - margin,
+ r.topRight().y() + offset + 1);
+ }
+ break;
+ }
+ case PE_PanelButtonTool: {
+ bool isDown = option->state & State_Sunken;
+ bool isOn = option->state & State_On;
+ bool hasFocus = (option->state & State_HasFocus && option->state & State_KeyboardFocusChange);
+ const qreal rounding = Ph::ToolButton_Rounding;
+ Swatchy outline = S_window_outline;
+ Swatchy fill = S_button;
+ Swatchy specular = S_button_specular;
+ if (isDown) {
+ fill = S_button_pressed;
+ specular = S_button_pressed_specular;
+ } else if (isOn) {
+ fill = S_button_on;
+ specular = S_none;
+ }
+ if (hasFocus) {
+ outline = S_highlight_outline;
+ }
+ QRect r = option->rect;
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(painter, r, rounding, swatch, outline, fill);
+ Ph::paintBorderedRoundRect(painter, r.adjusted(1, 1, -1, -1), rounding, swatch, specular, S_none);
+ break;
+ }
+ case PE_IndicatorDockWidgetResizeHandle: {
+ QStyleOption dockWidgetHandle = *option;
+ bool horizontal = option->state & State_Horizontal;
+ dockWidgetHandle.state =
+ !horizontal ? (dockWidgetHandle.state | State_Horizontal) : (dockWidgetHandle.state & ~State_Horizontal);
+ proxy()->drawControl(CE_Splitter, &dockWidgetHandle, painter, widget);
+ break;
+ }
+ case PE_FrameWindow: {
+ break;
+ }
+ case PE_FrameLineEdit: {
+ QRect r = option->rect;
+ bool hasFocus = option->state & State_HasFocus;
+ bool isEnabled = option->state & State_Enabled;
+ const qreal rounding = Ph::LineEdit_Rounding;
+ auto pen = hasFocus ? S_highlight_outline : S_window_outline;
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(painter, r, rounding, swatch, pen, S_none);
+ save.restore();
+ if (Ph::OverhangShadows && !hasFocus && isEnabled) {
+ // Imperfect when rounded, may leave a gap on left and right. Going
+ // closer would eat into the outline, though.
+ Ph::fillRectEdges(painter,
+ r.adjusted(qRound(rounding / 2) + 1, 1, -(qRound(rounding / 2) + 1), -1),
+ Qt::TopEdge,
+ 1,
+ swatch.color(S_base_shadow));
+ }
+ break;
+ }
+ case PE_PanelLineEdit: {
+ auto panel = qstyleoption_cast<const QStyleOptionFrame*>(option);
+ if (!panel)
+ break;
+ Ph::PSave save(painter);
+ // We intentionally don't inset the fill rect, even if the frame will paint
+ // over the perimeter, because an inset with rounding enabled may cause
+ // some miscolored separated pixels between the fill and the border, since
+ // we're forced to paint them in two separate draw calls.
+ Ph::paintSolidRoundRect(painter, option->rect, Ph::LineEdit_Rounding, swatch, S_base);
+ save.restore();
+ if (panel->lineWidth > 0)
+ proxy()->drawPrimitive(PE_FrameLineEdit, option, painter, widget);
+ break;
+ }
+ case PE_IndicatorCheckBox: {
+ auto checkbox = qstyleoption_cast<const QStyleOptionButton*>(option);
+ if (!checkbox)
+ break;
+ QRect r = option->rect;
+ bool isHighlighted = option->state & State_HasFocus && option->state & State_KeyboardFocusChange;
+ bool isSelected = option->state & State_Selected;
+ bool isFlat = checkbox->features & QStyleOptionButton::Flat;
+ bool isEnabled = option->state & State_Enabled;
+ bool isPressed = state & State_Sunken;
+ Swatchy outlineColor = isHighlighted ? S_highlight_outline : S_window_outline;
+ Swatchy bgFillColor = isPressed ? S_highlight : S_base;
+ Swatchy fgColor = isFlat ? S_windowText : S_text;
+ if (isPressed && !isFlat) {
+ fgColor = S_highlightedText;
+ }
+ // Bare checkmarks that are selected should draw with the highlighted text
+ // color.
+ if (isSelected && isFlat) {
+ fgColor = S_highlightedText;
+ }
+ if (!isFlat) {
+ QRect fillR = r;
+ Ph::fillRectOutline(painter, fillR, 1, swatch.color(outlineColor));
+ fillR.adjust(1, 1, -1, -1);
+ if (Ph::IndicatorShadows && !isPressed && isEnabled) {
+ Ph::fillRectEdges(painter, fillR, Qt::TopEdge, 1, swatch.color(S_base_shadow));
+ fillR.adjust(0, 1, 0, 0);
+ }
+ painter->fillRect(fillR, swatch.color(bgFillColor));
+ }
+ if (checkbox->state & State_NoChange) {
+ const qreal insetScale = 0.7;
+ qreal rx, ry, rw, rh;
+ QRectF(r.adjusted(1, 1, -1, -1)).getRect(&rx, &ry, &rw, &rh);
+ qreal dimx = rw * insetScale;
+ qreal dimy = rh * insetScale;
+ QRectF r_(rx + (rw - dimx) / 2, ry + (rh - dimy) / 2, dimx, dimy);
+ Ph::drawHyphen(painter, d->checkBox_pen_scratch, r_, swatch, fgColor);
+ } else if (checkbox->state & State_On) {
+ const qreal insetScale = 0.8;
+ qreal rx, ry, rw, rh;
+ QRectF(r.adjusted(1, 1, -1, -1)).getRect(&rx, &ry, &rw, &rh);
+ // kinda wrong, assumes we're already square, but we probably are
+ qreal dimx = rw * insetScale * Ph::CheckMark_WidthOfHeightScale;
+ qreal dimy = rh * insetScale;
+ QRectF r_(rx + (rw - dimx) / 2, ry + (rh - dimy) / 2, dimx, dimy);
+ Ph::drawCheck(painter, d->checkBox_pen_scratch, r_, swatch, fgColor);
+ }
+ break;
+ }
+ case PE_IndicatorRadioButton: {
+ qreal rx, ry, rw, rh;
+ QRectF(option->rect).getRect(&rx, &ry, &rw, &rh);
+ bool isHighlighted = option->state & State_HasFocus && option->state & State_KeyboardFocusChange;
+ bool isSunken = state & State_Sunken;
+ bool isEnabled = state & State_Enabled;
+ Swatchy outlineColor = isHighlighted ? S_highlight_outline : S_window_outline;
+ Swatchy bgFillColor = isSunken ? S_highlight : S_base;
+ QPointF circleCenter(rx + rw / 2.0, ry + rh / 2.0);
+ const qreal lineThickness = 1.0;
+ qreal outlineRadius = (qMin(rw, rh) - lineThickness) / 2.0;
+ qreal fillRadius = outlineRadius - lineThickness / 2.0;
+ Ph::PSave save(painter);
+ painter->setRenderHint(QPainter::Antialiasing);
+ painter->setBrush(swatch.brush(bgFillColor));
+ painter->setPen(swatch.pen(outlineColor));
+ painter->drawEllipse(circleCenter, outlineRadius, outlineRadius);
+ if (Ph::IndicatorShadows && !isSunken && isEnabled) {
+ // Really slow, just a temp demo test
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(swatch.brush(S_base_shadow));
+ QPainterPath path0, path1;
+ path0.addEllipse(circleCenter, fillRadius, fillRadius);
+ path1.addEllipse(circleCenter + QPointF(0, 1.25), fillRadius, fillRadius);
+ QPainterPath path2 = path0 - path1;
+ painter->drawPath(path2);
+ }
+ if (state & State_On) {
+ Swatchy fgColor = isSunken ? S_highlightedText : S_windowText;
+ qreal checkmarkRadius = outlineRadius / 2.32;
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(swatch.brush(fgColor));
+ painter->drawEllipse(circleCenter, checkmarkRadius, checkmarkRadius);
+ }
+ break;
+ }
+ case PE_IndicatorToolBarHandle: {
+ if (!option)
+ break;
+ QRect r = option->rect;
+ if (r.width() < 3 || r.height() < 3)
+ break;
+ int rows = 3;
+ int columns = 2;
+ if (option->state & State_Horizontal) {
+ } else {
+ qSwap(columns, rows);
+ }
+ int dotLen = Ph::dpiScaled(2);
+ QSize occupied(dotLen * (columns * 2 - 1), dotLen * (rows * 2 - 1));
+ QRect rr = QStyle::alignedRect(option->direction, Qt::AlignCenter, QSize(occupied), r);
+ int x = rr.x();
+ int y = rr.y();
+ for (int row = 0; row < rows; ++row) {
+ for (int col = 0; col < columns; ++col) {
+ int x_ = x + col * 2 * dotLen;
+ int y_ = y + row * 2 * dotLen;
+ painter->fillRect(x_, y_, dotLen, dotLen, swatch.color(S_window_divider));
+ }
+ }
+ break;
+ }
+ case PE_FrameDefaultButton:
+ break;
+ case PE_FrameFocusRect: {
+ auto fropt = qstyleoption_cast<const QStyleOptionFocusRect*>(option);
+ if (!fropt)
+ break;
+ //### check for d->alt_down
+ if (!(fropt->state & State_KeyboardFocusChange))
+ return;
+ if (fropt->state & State_Item) {
+ if (auto itemView = qobject_cast<const QAbstractItemView*>(widget)) {
+ // TODO either our grid line hack is interfering, or Qt has a bug, but
+ // in RTL layout the grid borders can leave junk behind in the grid
+ // areas and the right edge of the focus rect may not get painted.
+ // (Sometimes it will, though.) To replicate, set to RTL mode, and move
+ // the current around in a table view without the selection being on
+ // the current.
+ if (option->state & QStyle::State_Selected) {
+ bool showCurrent = true;
+ bool hasTableGrid = false;
+ const auto selectionMode = itemView->selectionMode();
+ if (selectionMode == QAbstractItemView::SingleSelection) {
+ showCurrent = false;
+ } else {
+ // Table views will can have a "current" frame drawn even if the
+ // "current" is within the selected range. Other item views won't,
+ // which means the "current" frame will be invisible if it's on a
+ // selected item. This is a compromise between the broken drawing
+ // behavior of Qt item views of drawing "current" frames when they
+ // don't make sense (like a tree view where you can only select
+ // entire rows, but Qt will the frame rect around whatever column
+ // was last clicked on by the mouse, but using keyboard navigation
+ // has no effect) and not drawing them at all.
+ bool isTableView = false;
+ if (auto tableView = qobject_cast<const QTableView*>(itemView)) {
+ hasTableGrid = tableView->showGrid();
+ isTableView = true;
+ }
+ const auto selectionModel = itemView->selectionModel();
+ if (selectionModel) {
+ const auto selection = selectionModel->selection();
+ if (selection.count() == 1) {
+ const auto& range = selection.at(0);
+ if (isTableView) {
+ // For table views, we don't draw the "current" frame if
+ // there is exactly one cell selected and the "current" is
+ // that cell, or if there is exactly one row or one column
+ // selected with the behavior set to the corresponding
+ // selection, and the "current" is that one row or column.
+ const auto selectionBehavior = itemView->selectionBehavior();
+ if ((range.width() == 1 && range.height() == 1)
+ || (selectionBehavior == QAbstractItemView::SelectRows && range.height() == 1)
+ || (selectionBehavior == QAbstractItemView::SelectColumns
+ && range.width() == 1)) {
+ showCurrent = false;
+ }
+ } else {
+ // For any other type of item view, don't draw the "current"
+ // frame if there is a single contiguous selection, and the
+ // "current" is within that selection. If there's a
+ // discontiguous selection, that means the user is probably
+ // doing something more advanced, and we should just draw the
+ // focus frame, even if Qt might be doing it badly in some
+ // cases.
+ showCurrent = false;
+ }
+ }
+ }
+ }
+ if (showCurrent) {
+ // TODO handle dark-highlight-light-text
+ const QColor& borderColor = swatch.color(S_itemView_multiSelection_currentBorder);
+ const int thickness = hasTableGrid ? 2 : 1;
+ Ph::fillRectOutline(painter, option->rect, thickness, borderColor);
+ }
+ } else {
+ Ph::fillRectOutline(painter, option->rect, 1, swatch.color(S_highlight_outline));
+ }
+ break;
+ }
+ }
+ // It would be nice to also handle QTreeView's allColumnsShowFocus thing in
+ // the above code, in addition to the normal cases for focus rects in item
+ // views. Unfortunately, with allColumnsShowFocus set to true,
+ // QTreeView::drawRow() calls the style to paint with PE_FrameFocusRect for
+ // the row frame with the widget set to nullptr. This makes it basically
+ // impossible to figure out that we need to draw a special frame for it.
+ // So, if any application code is using that mode in a QTreeView, it won't
+ // get special item view frames. Too bad.
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(
+ painter, option->rect, Ph::FrameFocusRect_Rounding, swatch, S_highlight_outline, S_none);
+ break;
+ }
+ case PE_PanelButtonCommand:
+ case PE_PanelButtonBevel: {
+ bool isDefault = false;
+ bool isFlat = false;
+ bool isDown = option->state & State_Sunken;
+ bool isOn = option->state & State_On;
+ if (auto button = qstyleoption_cast<const QStyleOptionButton*>(option)) {
+ isDefault = (button->features & QStyleOptionButton::DefaultButton) && (button->state & State_Enabled);
+ isFlat = (button->features & QStyleOptionButton::Flat);
+ }
+ if (isFlat && !isDown && !isOn)
+ break;
+ bool isEnabled = option->state & State_Enabled;
+ Q_UNUSED(isEnabled);
+ bool hasFocus = (option->state & State_HasFocus && option->state & State_KeyboardFocusChange);
+ const qreal rounding = Ph::PushButton_Rounding;
+ Swatchy outline = S_window_outline;
+ Swatchy fill = S_button;
+ Swatchy specular = S_button_specular;
+ if (isDown) {
+ fill = S_button_pressed;
+ specular = S_button_pressed_specular;
+ } else if (isOn) {
+ // kinda repurposing this, hmm
+ fill = S_scrollbarGutter;
+ specular = S_button_pressed_specular;
+ }
+ if (hasFocus || isDefault) {
+ outline = S_highlight_outline;
+ }
+ QRect r = option->rect;
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(painter, r, rounding, swatch, outline, fill);
+ Ph::paintBorderedRoundRect(painter, r.adjusted(1, 1, -1, -1), rounding, swatch, specular, S_none);
+ break;
+ }
+ case PE_FrameTabWidget: {
+ QRect bgRect = option->rect.adjusted(1, 1, -1, -1);
+ painter->fillRect(bgRect, swatch.color(S_tabFrame));
+ auto twf = qstyleoption_cast<const QStyleOptionTabWidgetFrame*>(option);
+ if (!twf)
+ break;
+ Ph::fillRectOutline(painter, option->rect, 1, swatch.color(S_frame_outline));
+ Ph::fillRectOutline(painter, bgRect, 1, swatch.color(S_tabFrame_specular));
+ break;
+ }
+ case PE_FrameStatusBarItem:
+ break;
+ case PE_IndicatorTabClose:
+ case Phantom_PE_IndicatorTabNew: {
+ Swatchy fg = S_windowText;
+ Swatchy bg = S_none;
+ if ((option->state & State_Enabled) && (option->state & State_MouseOver)) {
+ fg = S_highlightedText;
+ bg = option->state & State_Sunken ? S_highlight_outline : S_highlight;
+ }
+ // temp code
+ Ph::PSave save(painter);
+ if (bg) {
+ Ph::paintSolidRoundRect(painter, option->rect, Ph::PushButton_Rounding, swatch, bg);
+ }
+ QPen pen = swatch.pen(fg);
+ pen.setCapStyle(Qt::RoundCap);
+ pen.setWidthF(1.5);
+ painter->setBrush(Qt::NoBrush);
+ painter->setPen(pen);
+ painter->setRenderHint(QPainter::Antialiasing);
+ QRect r = option->rect;
+ // int adj = (int)((qreal)qMin(r.width(), r.height()) * (1.0 / 2.5));
+ int adj = Ph::dpiScaled(5.0);
+ r.adjust(adj, adj, -adj, -adj);
+ qreal x, y, w, h;
+ QRectF(r).getRect(&x, &y, &w, &h);
+ // painter->translate(-0.5, -0.5);
+ switch (static_cast<int>(elem)) {
+ case PE_IndicatorTabClose:
+ painter->drawLine(QPointF(x - 0.5, y - 0.5), QPointF(x + 0.5 + w, y + 0.5 + h));
+ painter->drawLine(QPointF(x - 0.5, y + h + 0.5), QPointF(x + 0.5 + w, y - 0.5));
+ break;
+ case Phantom_PE_IndicatorTabNew:
+ // kinda hacky here on extra len
+ painter->drawLine(QPointF(x + w / 2, y - 1.0), QPointF(x + w / 2, y + h + 1.0));
+ painter->drawLine(QPointF(x - 1.0, y + h / 2), QPointF(x + w + 1.0, y + h / 2));
+ break;
+ }
+ save.restore();
+ // painter->fillRect(option->rect, QColor(255, 0, 0, 30));
+ break;
+ }
+ case PE_PanelMenu: {
+ bool isBelowMenuBar = false;
+ // works but currently unused
+ // QPoint gp = widget->mapToGlobal(widget->rect().topLeft());
+ // gp.setY(gp.y() - 1);
+ // QWidget* bar = qApp->widgetAt(gp);
+ // if (bar && bar->inherits("QMenuBar")) {
+ // isBelowMenuBar = true;
+ // }
+ Ph::fillRectOutline(painter, option->rect, 1, swatch.color(S_window_divider));
+ QRect bgRect = option->rect.adjusted(1, isBelowMenuBar ? 0 : 1, -1, -1);
+ painter->fillRect(bgRect, swatch.color(S_window));
+ break;
+ }
+ case Phantom_PE_ScrollBarSliderVertical: {
+ bool isLeftToRight = option->direction != Qt::RightToLeft;
+ bool isSunken = option->state & State_Sunken;
+ Swatchy thumbFill, thumbSpecular;
+ if (isSunken) {
+ thumbFill = S_button_pressed;
+ thumbSpecular = S_button_pressed_specular;
+ } else {
+ thumbFill = S_scrollbarSlider;
+ thumbSpecular = S_button_specular;
+ }
+ Qt::Edges edges;
+ QRect edgeRect = option->rect;
+ QRect mainRect = option->rect;
+ edgeRect.adjust(0, -1, 0, 1);
+ if (isLeftToRight) {
+ edges = Qt::LeftEdge | Qt::TopEdge | Qt::BottomEdge;
+ mainRect.setX(mainRect.x() + 1);
+ } else {
+ edges = Qt::TopEdge | Qt::BottomEdge | Qt::RightEdge;
+ mainRect.setWidth(mainRect.width() - 1);
+ }
+ Ph::fillRectEdges(painter, edgeRect, edges, 1, swatch.color(S_window_outline));
+ painter->fillRect(mainRect, swatch.color(thumbFill));
+ Ph::fillRectOutline(painter, mainRect, 1, swatch.color(thumbSpecular));
+ break;
+ }
+ case Phantom_PE_WindowFrameColor: {
+ painter->fillRect(option->rect, swatch.color(S_window_outline));
+ break;
+ }
+ default:
+ QCommonStyle::drawPrimitive(elem, option, painter, widget);
+ break;
+ }
+}
+
+void BaseStyle::drawControl(ControlElement element,
+ const QStyleOption* option,
+ QPainter* painter,
+ const QWidget* widget) const
+{
+#ifdef BUILD_WITH_EASY_PROFILER
+ EASY_BLOCK("drawControl");
+ const char* elemCString = QMetaEnum::fromType<QStyle::ControlElement>().valueToKey(element);
+ EASY_TEXT("Element", elemCString);
+#endif
+ using Swatchy = Phantom::Swatchy;
+ using namespace Phantom::SwatchColors;
+ namespace Ph = Phantom;
+ auto ph_swatchPtr = Ph::getCachedSwatchOfQPalette(&d->swatchCache, &d->headSwatchFastKey, option->palette);
+ const Ph::PhSwatch& swatch = *ph_swatchPtr.data();
+
+ switch (element) {
+ case CE_CheckBox: {
+ QCommonStyle::drawControl(element, option, painter, widget);
+ // painter->fillRect(option->rect, QColor(255, 0, 0, 90));
+ break;
+ }
+ case CE_ComboBoxLabel: {
+ auto cb = qstyleoption_cast<const QStyleOptionComboBox*>(option);
+ if (!cb)
+ break;
+ QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget);
+ painter->save();
+ painter->setClipRect(editRect);
+ if (!cb->currentIcon.isNull()) {
+ QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal : QIcon::Disabled;
+ QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, mode);
+ QRect iconRect(editRect);
+ iconRect.setWidth(cb->iconSize.width() + 4);
+ iconRect = alignedRect(cb->direction, Qt::AlignLeft | Qt::AlignVCenter, iconRect.size(), editRect);
+ if (cb->editable)
+ painter->fillRect(iconRect, cb->palette.brush(QPalette::Base));
+ proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap);
+
+ if (cb->direction == Qt::RightToLeft)
+ editRect.translate(-4 - cb->iconSize.width(), 0);
+ else
+ editRect.translate(cb->iconSize.width() + 4, 0);
+ }
+ if (!cb->currentText.isEmpty() && !cb->editable) {
+ proxy()->drawItemText(painter,
+ editRect.adjusted(1, 0, -1, 0),
+ visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter),
+ cb->palette,
+ cb->state & State_Enabled,
+ cb->currentText,
+ cb->editable ? QPalette::Text : QPalette::ButtonText);
+ }
+ painter->restore();
+ break;
+ }
+ case CE_Splitter: {
+ QRect r = option->rect;
+ // We don't have anything useful to draw if it's too thin
+ if (r.width() < 5 || r.height() < 5)
+ break;
+ int length = Ph::dpiScaled(Ph::SplitterMaxLength);
+ int thickness = Ph::dpiScaled(1);
+ QSize size;
+ if (option->state & State_Horizontal) {
+ if (r.height() < length)
+ length = r.height();
+ size = QSize(thickness, length);
+ } else {
+ if (r.width() < length)
+ length = r.width();
+ size = QSize(length, thickness);
+ }
+ QRect filledRect = QStyle::alignedRect(option->direction, Qt::AlignCenter, size, r);
+ painter->fillRect(filledRect, swatch.color(S_button_specular));
+ Ph::fillRectOutline(painter, filledRect.adjusted(-1, 0, 1, 0), 1, swatch.color(S_window_divider));
+ break;
+ }
+ // TODO update this for phantom
+ case CE_RubberBand: {
+ if (!qstyleoption_cast<const QStyleOptionRubberBand*>(option))
+ break;
+ QColor highlight = option->palette.color(QPalette::Active, QPalette::Highlight);
+ painter->save();
+ QColor penColor = highlight.darker(120);
+ penColor.setAlpha(180);
+ painter->setPen(penColor);
+ QColor dimHighlight(qMin(highlight.red() / 2 + 110, 255),
+ qMin(highlight.green() / 2 + 110, 255),
+ qMin(highlight.blue() / 2 + 110, 255));
+ dimHighlight.setAlpha(widget && widget->isTopLevel() ? 255 : 80);
+ painter->setRenderHint(QPainter::Antialiasing, true);
+ painter->translate(0.5, 0.5);
+ painter->setBrush(dimHighlight);
+ painter->drawRoundedRect(option->rect.adjusted(0, 0, -1, -1), 1, 1);
+ QColor innerLine = Qt::white;
+ innerLine.setAlpha(40);
+ painter->setPen(innerLine);
+ painter->drawRoundedRect(option->rect.adjusted(1, 1, -2, -2), 1, 1);
+ painter->restore();
+ break;
+ }
+ case CE_SizeGrip: {
+ Qt::LayoutDirection dir = option->direction;
+ QRect rect = option->rect;
+ int rcx = rect.center().x();
+ int rcy = rect.center().y();
+ // draw grips
+ for (int i = -6; i < 12; i += 3) {
+ for (int j = -6; j < 12; j += 3) {
+ if ((dir == Qt::LeftToRight && i > -j) || (dir == Qt::RightToLeft && j > i)) {
+ painter->fillRect(rcx + i, rcy + j, 2, 2, swatch.color(S_window_lighter));
+ painter->fillRect(rcx + i, rcy + j, 1, 1, swatch.color(S_window_darker));
+ }
+ }
+ }
+ break;
+ }
+ case CE_ToolBar: {
+ auto toolBar = qstyleoption_cast<const QStyleOptionToolBar*>(option);
+ if (!toolBar)
+ break;
+ painter->fillRect(option->rect, option->palette.window().color());
+ bool isFloating = false;
+ if (auto tb = qobject_cast<const QToolBar*>(widget)) {
+ isFloating = tb->isFloating();
+ }
+ if (isFloating) {
+ Ph::fillRectOutline(painter, option->rect, 1, swatch.color(S_window_outline));
+ }
+ break;
+ }
+ case CE_DockWidgetTitle: {
+ auto dwOpt = qstyleoption_cast<const QStyleOptionDockWidget*>(option);
+ if (!dwOpt)
+ break;
+ painter->save();
+ bool verticalTitleBar = dwOpt->verticalTitleBar;
+
+ QRect titleRect = subElementRect(SE_DockWidgetTitleBarText, option, widget);
+ if (verticalTitleBar) {
+ QRect r = dwOpt->rect;
+ QRect rtrans = {r.x(), r.y(), r.height(), r.width()};
+ titleRect = QRect(rtrans.left() + r.bottom() - titleRect.bottom(),
+ rtrans.top() + titleRect.left() - r.left(),
+ titleRect.height(),
+ titleRect.width());
+ painter->translate(rtrans.left(), rtrans.top() + rtrans.width());
+ painter->rotate(-90);
+ painter->translate(-rtrans.left(), -rtrans.top());
+ }
+ if (!dwOpt->title.isEmpty()) {
+ QString titleText = painter->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width());
+ proxy()->drawItemText(painter,
+ titleRect,
+ Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic,
+ dwOpt->palette,
+ dwOpt->state & State_Enabled,
+ titleText,
+ QPalette::WindowText);
+ }
+ painter->restore();
+ break;
+ }
+ case CE_HeaderSection: {
+ auto header = qstyleoption_cast<const QStyleOptionHeader*>(option);
+ if (!header)
+ break;
+ QRect rect = header->rect;
+ Qt::Orientation orientation = header->orientation;
+ QStyleOptionHeader::SectionPosition position = header->position;
+ // See the "Table header layout reference" comment block at the bottom of
+ // this file for more information to help understand what's going on.
+ bool isLeftToRight = header->direction != Qt::RightToLeft;
+ bool isHorizontal = orientation == Qt::Horizontal;
+ bool isVertical = orientation == Qt::Vertical;
+ bool isEnd = position == QStyleOptionHeader::End;
+ bool isBegin = position == QStyleOptionHeader::Beginning;
+ bool isOnlyOne = position == QStyleOptionHeader::OnlyOneSection;
+ Qt::Edges edges;
+ bool spansToEnd = false;
+ bool isSpecialCorner = false;
+ if ((isHorizontal && isLeftToRight && isEnd) || (isHorizontal && !isLeftToRight && isBegin)
+ || (isVertical && isEnd) || isOnlyOne) {
+ auto hv = qobject_cast<const QHeaderView*>(widget);
+ if (hv) {
+ spansToEnd = hv->stretchLastSection();
+ // In the case where the header item is not stretched to the end, but
+ // could plausibly be in a position where it could happen to be exactly
+ // the right width or height to be appear to be stretched to the end,
+ // we'll check to see if it actually does exactly meet the right (or
+ // bottom in vertical, or left in RTL) edge, and omit drawing the edge
+ // if that's the case. This can commonly happen if you have a tree or
+ // list view and don't set it to stretch, but the widget is still sized
+ // exactly to hold the one column. (It could also happen if there's
+ // user code running to manually stretch the last section as
+ // necessary.)
+ if (!spansToEnd) {
+ QRect viewBound = hv->contentsRect();
+ if (isHorizontal) {
+ if (isLeftToRight) {
+ spansToEnd = rect.right() == viewBound.right();
+ } else {
+ spansToEnd = rect.left() == viewBound.left();
+ }
+ } else if (isVertical) {
+ spansToEnd = rect.bottom() == viewBound.bottom();
+ }
+ }
+ } else {
+ // We only need to do this check in RTL, because the corner button in
+ // RTL *doesn't* need hacks applied. In LTR, we can just treat the
+ // corner button like anything else on the horizontal header bar, and
+ // can skip doing this inherits check.
+ if (isOnlyOne && !isLeftToRight && widget && widget->inherits("QTableCornerButton")) {
+ isSpecialCorner = true;
+ }
+ }
+ }
+
+ if (isSpecialCorner) {
+ // In RTL layout, the corner button in a table view doesn't have any
+ // offset problems. This branch we're on is only taken if we're in RTL
+ // layout and this is the corner button being drawn.
+ edges |= Qt::BottomEdge;
+ if (isLeftToRight)
+ edges |= Qt::RightEdge;
+ else
+ edges |= Qt::LeftEdge;
+ } else if (isHorizontal) {
+ // This branch is taken for horizontal headers in either layout direction
+ // or for the corner button in LTR.
+ edges |= Qt::BottomEdge;
+ if (isLeftToRight) {
+ // In LTR, this code path may be for both the corner button *and* the
+ // actual header item. It doesn't matter in this case, and we were able
+ // to avoid doing an extra inherits call earlier.
+ if (!spansToEnd) {
+ edges |= Qt::RightEdge;
+ }
+ } else {
+ // Note: in right-to-left layouts for horizontal headers, the header
+ // view will unfortunately be shifted to the right by 1 pixel, due to
+ // what appears to be a Qt bug. This causes the vertical lines we draw
+ // in the header view to misalign with the grid, and causes the
+ // rightmost section to have its right edge clipped off. Therefore,
+ // we'll draw the separator on the on the right edge instead of the
+ // left edge. (We would have expected to draw it on the left edge in
+ // RTL layout.) This makes it line up with the grid again, except for
+ // the last section. right by 1 pixel.
+ //
+ // In RTL, the "Begin" position is on the left side for some reason
+ // (the same as LTR.) So "End" is always on the right. Ok, whatever.
+ // See the table at the bottom of this file if you're confused.
+ if (!isOnlyOne && !isEnd) {
+ edges |= Qt::RightEdge;
+ }
+ // The leftmost section in RTL has to draw on both its right and left
+ // edges, instead of just 1 edge like every other configuration. The
+ // left edge will be offset by 1 pixel from the grid, but it's the best
+ // we can do.
+ if (isBegin && !spansToEnd) {
+ edges |= Qt::LeftEdge;
+ }
+ }
+ } else if (isVertical) {
+ if (isLeftToRight) {
+ edges |= Qt::RightEdge;
+ } else {
+ edges |= Qt::LeftEdge;
+ }
+ if (!spansToEnd) {
+ edges |= Qt::BottomEdge;
+ }
+ }
+ QRect bgRect = Ph::expandRect(rect, edges, -1);
+ painter->fillRect(bgRect, swatch.color(S_window));
+ Ph::fillRectEdges(painter, rect, edges, 1, swatch.color(S_frame_outline));
+ break;
+ }
+ case CE_HeaderLabel: {
+ auto header = qstyleoption_cast<const QStyleOptionHeader*>(option);
+ if (!header)
+ break;
+ QRect rect = header->rect;
+ if (!header->icon.isNull()) {
+ int iconExtent = qMin(qMin(rect.height(), rect.width()), option->fontMetrics.height());
+ auto window = widget ? widget->window()->windowHandle() : nullptr;
+ QPixmap pixmap = header->icon.pixmap(window,
+ QSize(iconExtent, iconExtent),
+ (header->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled);
+ int pixw = static_cast<int>(pixmap.width() / pixmap.devicePixelRatio());
+ QRect aligned = alignedRect(
+ header->direction, QFlag(header->iconAlignment), pixmap.size() / pixmap.devicePixelRatio(), rect);
+ QRect inter = aligned.intersected(rect);
+ painter->drawPixmap(inter.x(),
+ inter.y(),
+ pixmap,
+ inter.x() - aligned.x(),
+ inter.y() - aligned.y(),
+ static_cast<int>(aligned.width() * pixmap.devicePixelRatio()),
+ static_cast<int>(pixmap.height() * pixmap.devicePixelRatio()));
+ int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget);
+ if (header->direction == Qt::LeftToRight)
+ rect.setLeft(rect.left() + pixw + margin);
+ else
+ rect.setRight(rect.right() - pixw - margin);
+ }
+ proxy()->drawItemText(painter,
+ rect,
+ header->textAlignment,
+ header->palette,
+ (header->state & State_Enabled),
+ header->text,
+ QPalette::ButtonText);
+
+ // But we still need some kind of indicator, so draw a line
+ bool drawHighlightLine = option->state & State_On;
+ // Special logic: if the selection mode of the item view is to select every
+ // row or every column, there's no real need to draw special "this
+ // row/column is selected" highlight indicators in the header view. The
+ // application programmer can also disable this explicitly on the header
+ // view, but it's nice to have it done automatically, I think.
+ if (drawHighlightLine) {
+ const QAbstractItemView* itemview = nullptr;
+ // Header view itself is an item view, and we don't care about its
+ // selection behavior -- we care about the actual item view. So try to
+ // get the widget as the header first, then find the item view from
+ // there.
+ auto headerview = qobject_cast<const QHeaderView*>(widget);
+ if (headerview) {
+ // Also don't care about highlights if there's only one row or column.
+ drawHighlightLine = headerview->count() > 1;
+ itemview = qobject_cast<const QAbstractItemView*>(headerview->parentWidget());
+ }
+ if (drawHighlightLine && itemview) {
+ auto selBehavior = itemview->selectionBehavior();
+ if (selBehavior == QAbstractItemView::SelectRows && header->orientation == Qt::Horizontal)
+ drawHighlightLine = false;
+ else if (selBehavior == QAbstractItemView::SelectColumns && header->orientation == Qt::Vertical)
+ drawHighlightLine = false;
+ }
+ }
+
+ if (drawHighlightLine) {
+ QRect r = option->rect;
+ Qt::Edge edge;
+ if (header->orientation == Qt::Horizontal) {
+ edge = Qt::BottomEdge;
+ r.adjust(-2, 1, 1, 1);
+ } else {
+ bool isLeftToRight = option->direction != Qt::RightToLeft;
+ if (isLeftToRight) {
+ edge = Qt::RightEdge;
+ r.adjust(1, -2, 1, 1);
+ } else {
+ edge = Qt::LeftEdge;
+ r.adjust(-1, -2, -1, 1);
+ }
+ }
+ Ph::fillRectEdges(painter, r, edge, 1, swatch.color(S_itemView_headerOnLine));
+ }
+ break;
+ }
+ case CE_ProgressBarGroove: {
+ const qreal rounding = Ph::ProgressBar_Rounding;
+ QRect rect = option->rect;
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(painter, rect, rounding, swatch, S_window_outline, S_base);
+ save.restore();
+ if (Ph::OverhangShadows && option->state & State_Enabled) {
+ // Inner shadow
+ const QColor& shadowColor = swatch.color(S_base_shadow);
+ // We can either have the shadow cut into the rounded corners, or leave a
+ // 1px gap, due to AA.
+ Ph::fillRectEdges(painter,
+ rect.adjusted(qRound(rounding / 2) + 1, 1, -(qRound(rounding / 2) + 1), -1),
+ Qt::TopEdge,
+ 1,
+ shadowColor);
+ }
+ break;
+ }
+ case CE_ProgressBarContents: {
+ auto bar = qstyleoption_cast<const QStyleOptionProgressBar*>(option);
+ if (!bar)
+ break;
+ const qreal rounding = Ph::ProgressBar_Rounding;
+ QRect filled, nonFilled;
+ bool isIndeterminate = false;
+ Ph::progressBarFillRects(bar, filled, nonFilled, isIndeterminate);
+ if (isIndeterminate || bar->progress > bar->minimum) {
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(painter, filled, rounding, swatch, S_progressBar_outline, S_progressBar);
+ Ph::paintBorderedRoundRect(
+ painter, filled.adjusted(1, 1, -1, -1), rounding, swatch, S_progressBar_specular, S_none);
+ if (isIndeterminate) {
+ // TODO paint indeterminate indicator
+ }
+ }
+ break;
+ }
+ case CE_ProgressBarLabel: {
+ auto bar = qstyleoption_cast<const QStyleOptionProgressBar*>(option);
+ if (!bar)
+ break;
+ if (bar->text.isEmpty())
+ break;
+ QRect r = bar->rect.adjusted(2, 2, -2, -2);
+ if (r.isEmpty() || !r.isValid())
+ break;
+ QSize textSize = option->fontMetrics.size(Qt::TextBypassShaping, bar->text);
+ QRect textRect = QStyle::alignedRect(option->direction, Qt::AlignCenter, textSize, option->rect);
+ textRect &= r;
+ if (textRect.isEmpty())
+ break;
+ QRect filled, nonFilled;
+ bool isIndeterminate = false;
+ Ph::progressBarFillRects(bar, filled, nonFilled, isIndeterminate);
+ QRect textNonFilledR = textRect & nonFilled;
+ QRect textFilledR = textRect & filled;
+ bool needsNonFilled = !textNonFilledR.isEmpty();
+ bool needsFilled = !textFilledR.isEmpty();
+ bool needsMasking = needsNonFilled && needsFilled;
+ Ph::PSave save(painter);
+ if (needsNonFilled) {
+ if (needsMasking) {
+ painter->save();
+ painter->setClipRect(textNonFilledR);
+ }
+ painter->setPen(swatch.pen(S_text));
+ painter->setBrush(Qt::NoBrush);
+ painter->drawText(textRect, bar->text, Qt::AlignHCenter | Qt::AlignVCenter);
+ if (needsMasking) {
+ painter->restore();
+ }
+ }
+ if (needsFilled) {
+ if (needsMasking) {
+ painter->save();
+ painter->setClipRect(textFilledR);
+ }
+ painter->setPen(swatch.pen(S_highlightedText));
+ painter->setBrush(Qt::NoBrush);
+ painter->drawText(textRect, bar->text, Qt::AlignHCenter | Qt::AlignVCenter);
+ if (needsMasking) {
+ painter->restore();
+ }
+ }
+ break;
+ }
+ case CE_MenuBarItem: {
+ auto mbi = qstyleoption_cast<const QStyleOptionMenuItem*>(option);
+ if (!mbi)
+ break;
+ const QRect r = option->rect;
+ QRect textRect = r;
+ textRect.setY(textRect.y() + (r.height() - option->fontMetrics.height()) / 2);
+ int alignment = Qt::AlignHCenter | Qt::AlignTop | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
+ if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget))
+ alignment |= Qt::TextHideMnemonic;
+ const auto itemState = mbi->state;
+ bool maybeHasAltKeyNavFocus = itemState & State_Selected && itemState & State_HasFocus;
+ bool isSelected = itemState & State_Selected || itemState & State_Sunken;
+ if (!isSelected && maybeHasAltKeyNavFocus && widget) {
+ isSelected = widget->hasFocus();
+ }
+ Swatchy fill = isSelected ? S_highlight : S_window;
+ painter->fillRect(r, swatch.color(fill));
+ QPalette::ColorRole textRole = isSelected ? QPalette::HighlightedText : QPalette::Text;
+ proxy()->drawItemText(
+ painter, textRect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole);
+ if (Phantom::MenuBarDrawBorder && !isSelected) {
+ Ph::fillRectEdges(painter, r, Qt::BottomEdge, 1, swatch.color(S_window_divider));
+ }
+ break;
+ }
+
+ case CE_MenuItem: {
+ auto menuItem = qstyleoption_cast<const QStyleOptionMenuItem*>(option);
+ if (!menuItem)
+ break;
+ const auto metrics = Ph::MenuItemMetrics::ofFontHeight(option->fontMetrics.height());
+ // Draws one item in a popup menu.
+ if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) {
+ // Phantom ignores text and icons in menu separators, because
+ // 1) The text and icons for separators don't render on Mac native menus
+ // 2) There doesn't seem to be a way to account for the width of the text
+ // properly (Fusion will often draw separator text clipped off)
+ // 3) Setting text on separators also seems to mess up the metrics for
+ // menu items on Mac native menus
+ QRect r = option->rect;
+ r.setHeight(r.height() / 2 + 1);
+ Ph::fillRectEdges(painter, r, Qt::BottomEdge, 1, swatch.color(S_window_divider));
+ break;
+ }
+ const QRect itemRect = option->rect;
+ painter->save();
+ bool isSelected = menuItem->state & State_Selected && menuItem->state & State_Enabled;
+ bool isCheckable = menuItem->checkType != QStyleOptionMenuItem::NotCheckable;
+ bool isChecked = menuItem->checked;
+ bool isSunken = menuItem->state & State_Sunken;
+ bool isEnabled = menuItem->state & State_Enabled;
+ bool hasSubMenu = menuItem->menuItemType == QStyleOptionMenuItem::SubMenu;
+ if (isSelected) {
+ Swatchy fillColor = isSunken ? S_highlight_outline : S_highlight;
+ painter->fillRect(option->rect, swatch.color(fillColor));
+ }
+
+ if (isCheckable) {
+ // Note: check rect might be misaligned vertically if it's a menu from a
+ // combo box. Probably a bug in Qt code?
+ QRect checkRect = Ph::menuItemCheckRect(metrics, option->direction, itemRect, hasSubMenu);
+ Swatchy signColor = !isEnabled ? S_windowText : isSelected ? S_highlightedText : S_windowText;
+ if (menuItem->checkType & QStyleOptionMenuItem::Exclusive) {
+ // Radio button
+ if (isChecked) {
+ painter->setRenderHint(QPainter::Antialiasing);
+ painter->setPen(Qt::NoPen);
+ QPalette::ColorRole textRole =
+ !isEnabled ? QPalette::Text : isSelected ? QPalette::HighlightedText : QPalette::ButtonText;
+ painter->setBrush(option->palette.brush(option->palette.currentColorGroup(), textRole));
+ qreal rx, ry, rw, rh;
+ QRectF(checkRect).getRect(&rx, &ry, &rw, &rh);
+ qreal dim = qMin(checkRect.width(), checkRect.height()) * 0.75;
+ QRectF rf(rx + rw / dim, ry + rh / dim, dim, dim);
+ painter->drawEllipse(rf);
+ }
+ } else {
+ // If we want mouse-down to immediately show the item as
+ // checked/unchecked (kinda bad if the user is click-holding on the
+ // menu instead of click-clicking.)
+ //
+ // if ((isChecked && !isSunken) || (!isChecked && isSunken)) {
+ if (isChecked) {
+ Ph::drawCheck(painter, d->checkBox_pen_scratch, checkRect, swatch, signColor);
+ }
+ }
+ }
+
+ const bool hasIcon = !menuItem->icon.isNull();
+
+ if (hasIcon) {
+ QRect iconRect = Ph::menuItemIconRect(metrics, option->direction, itemRect, hasSubMenu);
+ QIcon::Mode mode = isEnabled ? QIcon::Normal : QIcon::Disabled;
+ if (isSelected && isEnabled)
+ mode = QIcon::Selected;
+ QIcon::State state = isChecked ? QIcon::On : QIcon::Off;
+
+ // TODO hmm, we might be ending up with blurry icons at size 15 instead
+ // of 16 for example on Windows.
+ //
+ // int smallIconSize =
+ // proxy()->pixelMetric(PM_SmallIconSize, option, widget);
+ // QSize iconSize(smallIconSize, smallIconSize);
+ int iconExtent = qMin(iconRect.width(), iconRect.height());
+ QSize iconSize(iconExtent, iconExtent);
+ if (auto combo = qobject_cast<const QComboBox*>(widget)) {
+ iconSize = combo->iconSize();
+ }
+ QWindow* window = widget ? widget->windowHandle() : nullptr;
+ QPixmap pixmap = menuItem->icon.pixmap(window, iconSize, mode, state);
+ const int pixw = static_cast<int>(pixmap.width() / pixmap.devicePixelRatio());
+ const int pixh = static_cast<int>(pixmap.height() / pixmap.devicePixelRatio());
+ QRect pixmapRect = QStyle::alignedRect(option->direction, Qt::AlignCenter, QSize(pixw, pixh), iconRect);
+ painter->drawPixmap(pixmapRect.topLeft(), pixmap);
+ }
+
+ // Draw main text and mnemonic text
+ QStringRef s(&menuItem->text);
+ if (!s.isEmpty()) {
+ QRect textRect =
+ Ph::menuItemTextRect(metrics, option->direction, itemRect, hasSubMenu, hasIcon, menuItem->tabWidth);
+ int t = s.indexOf(QLatin1Char('\t'));
+ int text_flags =
+ Qt::AlignLeft | Qt::AlignTop | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
+ if (!styleHint(SH_UnderlineShortcut, menuItem, widget))
+ text_flags |= Qt::TextHideMnemonic;
+#if 0
+ painter->save();
+#endif
+ painter->setPen(swatch.pen(isSelected ? S_highlightedText : S_text));
+
+ // Comment from original Qt code which did some dance with the font:
+ //
+ // font may not have any "hard" flags set. We override the point size so
+ // that when it is resolved against the device, this font will win. This
+ // is mainly to handle cases where someone sets the font on the window
+ // and then the combo inherits it and passes it onward. At that point the
+ // resolve mask is very, very weak. This makes it stonger.
+#if 0
+ QFont font = menuItem->font;
+ font.setPointSizeF(QFontInfo(menuItem->font).pointSizeF());
+ painter->setFont(font);
+#endif
+
+ // My comment:
+ //
+ // What actually looks like is happening is that the qplatformtheme may
+ // have set a per-class font for menus. The QComboMenuDelegate sets the
+ // combo box's own font on the QStyleOptionMenuItem when passing it in
+ // here and when calling sizeFromContents with CT_MenuItem, but the
+ // QPainter we're called with hasn't had its font set to it -- it's still
+ // set to the QMenu/QMenuItem app fonts hash font. So if it's a menu
+ // coming from a combo box, let's just go ahead and set the font for it
+ // if it doesn't match, since that's probably what it wanted to do. I
+ // think. And as described above, we have to do the weird dance with the
+ // resolve mask... which is some internal Qt detail that we aren't
+ // supposed to have to deal with, but here we are.
+ //
+ // Ok, there's another problem, and QFusionStyle also suffers from it: in
+ // high DPI, setting the pointSizeF and setting the font again won't
+ // necessarily give us the right font (at least in Windows.) The font
+ // might have too thin of a weight, and probably other problems. So just
+ // forget about it: we'll have Phantom return 0 for the style hint that
+ // the combo box uses to determine if it should use a QMenu popup instead
+ // of a regular dropdown menu thing. The popup menu might actually be
+ // better for usability in some cases, and it's how combos work on Mac
+ // and BeOS, but it won't work anyway for editable combo boxes in Qt, and
+ // the font issues just make it not worth it. So we'll have a dropdown
+ // guy like a traditional Windows thing.
+ //
+ // If you want to try it out again, go to SH_ComboBox_Popup and have it
+ // return 1.
+ //
+ // Alternatively, we could instead have the CT_MenuItem handling code try
+ // to be aggressively clever and use the qt app font hash to look up the
+ // expected font for a QMenu and use that for calculating its metrics.
+ // Unfortunately, that probably won't work so great if the combo/menu
+ // actually wants to use custom fonts in its listing, since we'd be
+ // ignoring it. That's how UseQMenuForComboBoxPopup currently works,
+ // though it tests for Qt::WA_SetFont as an attempt at recognizing when
+ // it shouldn't use the qt font hash for QMenu.
+#if 0
+ if (qobject_cast<const QComboBox*>(widget)) {
+ QFont font = menuItem->font;
+ font.setPointSizeF(QFontInfo(menuItem->font).pointSizeF());
+ painter->setFont(font);
+ }
+#endif
+
+ // Draw mnemonic text
+ if (t >= 0) {
+ QRect mnemonicR =
+ Ph::menuItemMnemonicRect(metrics, option->direction, itemRect, hasSubMenu, menuItem->tabWidth);
+ const QStringRef textToDrawRef = s.mid(t + 1);
+ const QString unsafeTextToDraw = QString::fromRawData(textToDrawRef.constData(), textToDrawRef.size());
+ painter->drawText(mnemonicR, text_flags, unsafeTextToDraw);
+ s = s.left(t);
+ }
+ const QStringRef textToDrawRef = s.left(t);
+ const QString unsafeTextToDraw = QString::fromRawData(textToDrawRef.constData(), textToDrawRef.size());
+ painter->drawText(textRect, text_flags, unsafeTextToDraw);
+
+#if 0
+ painter->restore();
+#endif
+ }
+
+ // SubMenu Arrow
+ if (hasSubMenu) {
+ Qt::ArrowType arrow = option->direction == Qt::RightToLeft ? Qt::LeftArrow : Qt::RightArrow;
+ QRect arrowRect = Ph::menuItemArrowRect(metrics, option->direction, itemRect);
+ Swatchy arrowColor = isSelected ? S_highlightedText : S_indicator_current;
+ Ph::drawArrow(painter, arrowRect, arrow, swatch.brush(arrowColor));
+ }
+ painter->restore();
+ break;
+ }
+ case CE_MenuHMargin:
+ case CE_MenuVMargin:
+ case CE_MenuEmptyArea:
+ break;
+ case CE_PushButton: {
+ auto btn = qstyleoption_cast<const QStyleOptionButton*>(option);
+ if (!btn)
+ break;
+ proxy()->drawControl(CE_PushButtonBevel, btn, painter, widget);
+ QStyleOptionButton subopt = *btn;
+ subopt.rect = subElementRect(SE_PushButtonContents, btn, widget);
+ proxy()->drawControl(CE_PushButtonLabel, &subopt, painter, widget);
+ break;
+ }
+ case CE_PushButtonLabel: {
+ auto button = qstyleoption_cast<const QStyleOptionButton*>(option);
+ if (!button)
+ break;
+ // This code is very similar to QCommonStyle's implementation, but doesn't
+ // set the icon mode to active when focused.
+ QRect textRect = button->rect;
+ int tf = Qt::AlignVCenter | Qt::TextShowMnemonic;
+ if (!proxy()->styleHint(SH_UnderlineShortcut, button, widget))
+ tf |= Qt::TextHideMnemonic;
+ if (!button->icon.isNull()) {
+ // Center both icon and text
+ QRect iconRect;
+ QIcon::Mode mode = button->state & State_Enabled ? QIcon::Normal : QIcon::Disabled;
+ QIcon::State state = button->state & State_On ? QIcon::On : QIcon::Off;
+ auto window = widget ? widget->window()->windowHandle() : nullptr;
+ QPixmap pixmap = button->icon.pixmap(window, button->iconSize, mode, state);
+ int pixmapWidth = static_cast<int>(pixmap.width() / pixmap.devicePixelRatio());
+ int pixmapHeight = static_cast<int>(pixmap.height() / pixmap.devicePixelRatio());
+ int labelWidth = pixmapWidth;
+ int labelHeight = pixmapHeight;
+ // 4 is hardcoded in QPushButton::sizeHint()
+ int iconSpacing = 4;
+ int textWidth = button->fontMetrics.boundingRect(option->rect, tf, button->text).width();
+ if (!button->text.isEmpty())
+ labelWidth += (textWidth + iconSpacing);
+ iconRect = QRect(textRect.x() + (textRect.width() - labelWidth) / 2,
+ textRect.y() + (textRect.height() - labelHeight) / 2,
+ pixmapWidth,
+ pixmapHeight);
+ iconRect = visualRect(button->direction, textRect, iconRect);
+ tf |= Qt::AlignLeft; // left align, we adjust the text-rect instead
+ if (button->direction == Qt::RightToLeft)
+ textRect.setRight(iconRect.left() - iconSpacing);
+ else
+ textRect.setLeft(iconRect.left() + iconRect.width() + iconSpacing);
+ if (button->state & (State_On | State_Sunken))
+ iconRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, option, widget),
+ proxy()->pixelMetric(PM_ButtonShiftVertical, option, widget));
+ painter->drawPixmap(iconRect, pixmap);
+ } else {
+ tf |= Qt::AlignHCenter;
+ }
+ if (button->state & (State_On | State_Sunken))
+ textRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, option, widget),
+ proxy()->pixelMetric(PM_ButtonShiftVertical, option, widget));
+ if (button->features & QStyleOptionButton::HasMenu) {
+ int indicatorSize = proxy()->pixelMetric(PM_MenuButtonIndicator, button, widget);
+ if (button->direction == Qt::LeftToRight)
+ textRect = textRect.adjusted(0, 0, -indicatorSize, 0);
+ else
+ textRect = textRect.adjusted(indicatorSize, 0, 0, 0);
+ }
+ proxy()->drawItemText(painter,
+ textRect,
+ tf,
+ button->palette,
+ (button->state & State_Enabled),
+ button->text,
+ QPalette::ButtonText);
+ break;
+ }
+ case CE_MenuBarEmptyArea: {
+ QRect rect = option->rect;
+ if (Phantom::MenuBarDrawBorder) {
+ Ph::fillRectEdges(painter, rect, Qt::BottomEdge, 1, swatch.color(S_window_divider));
+ }
+ painter->fillRect(rect.adjusted(0, 0, 0, -1), swatch.color(S_window));
+ break;
+ }
+ case CE_TabBarTabShape: {
+ auto tab = qstyleoption_cast<const QStyleOptionTab*>(option);
+ if (!tab)
+ break;
+ bool rtlHorTabs = (tab->direction == Qt::RightToLeft
+ && (tab->shape == QTabBar::RoundedNorth || tab->shape == QTabBar::RoundedSouth));
+ bool isSelected = tab->state & State_Selected;
+ bool lastTab = ((!rtlHorTabs && tab->position == QStyleOptionTab::End)
+ || (rtlHorTabs && tab->position == QStyleOptionTab::Beginning));
+ bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab;
+ int tabOverlap = pixelMetric(PM_TabBarTabOverlap, option, widget);
+ const qreal rounding = Ph::TabBarTab_Rounding;
+ Qt::Edge outerEdge = Qt::TopEdge;
+ Qt::Edge edgeTowardNextTab = Qt::RightEdge;
+ switch (tab->shape) {
+ case QTabBar::RoundedNorth:
+ outerEdge = Qt::TopEdge;
+ edgeTowardNextTab = Qt::RightEdge;
+ break;
+ case QTabBar::RoundedSouth:
+ outerEdge = Qt::BottomEdge;
+ edgeTowardNextTab = Qt::RightEdge;
+ break;
+ case QTabBar::RoundedWest:
+ outerEdge = Qt::LeftEdge;
+ edgeTowardNextTab = Qt::BottomEdge;
+ break;
+ case QTabBar::RoundedEast:
+ outerEdge = Qt::RightEdge;
+ edgeTowardNextTab = Qt::BottomEdge;
+ break;
+ default:
+ QCommonStyle::drawControl(element, tab, painter, widget);
+ return;
+ }
+ Qt::Edge innerEdge = Ph::oppositeEdge(outerEdge);
+ Qt::Edge edgeAwayNextTab = Ph::oppositeEdge(edgeTowardNextTab);
+ QRect shapeClipRect = Ph::expandRect(option->rect, innerEdge, -2);
+ QRect drawRect = Ph::expandRect(shapeClipRect, innerEdge, 3 + 2 * rounding + 1);
+ if (!onlyOne && !lastTab) {
+ drawRect = Ph::expandRect(drawRect, edgeTowardNextTab, tabOverlap);
+ shapeClipRect = Ph::expandRect(shapeClipRect, edgeTowardNextTab, tabOverlap);
+ }
+ if (!isSelected) {
+ int offset = proxy()->pixelMetric(PM_TabBarTabShiftVertical, option, widget);
+ drawRect = Ph::expandRect(drawRect, outerEdge, -offset);
+ }
+ painter->save();
+ painter->setClipRect(shapeClipRect);
+ bool hasFrame = tab->features & QStyleOptionTab::HasFrame && !tab->documentMode;
+ Swatchy tabFrameColor, thisFillColor, specular;
+ if (hasFrame) {
+ tabFrameColor = S_tabFrame;
+ if (isSelected) {
+ thisFillColor = S_tabFrame;
+ specular = S_tabFrame_specular;
+ } else {
+ thisFillColor = S_inactiveTabYesFrame;
+ specular = Ph::TabBar_InactiveTabsHaveSpecular ? S_inactiveTabYesFrame_specular : S_none;
+ }
+ } else {
+ tabFrameColor = S_window;
+ if (isSelected) {
+ thisFillColor = S_window;
+ specular = S_window_specular;
+ } else {
+ thisFillColor = S_inactiveTabNoFrame;
+ specular = Ph::TabBar_InactiveTabsHaveSpecular ? S_inactiveTabNoFrame_specular : S_none;
+ }
+ }
+ auto frameColor = isSelected ? S_frame_outline : S_window_outline;
+ Ph::paintBorderedRoundRect(painter, drawRect, rounding, swatch, frameColor, thisFillColor);
+ Ph::paintBorderedRoundRect(painter, drawRect.adjusted(1, 1, -1, -1), rounding, swatch, specular, S_none);
+ painter->restore();
+ if (isSelected) {
+ QRect highlightRect = drawRect.adjusted(2, 1, -2, 0);
+ highlightRect.setHeight(Ph::dpiScaled(2.0));
+ QRect highlightRectSpec = highlightRect.adjusted(-1, -1, 1, 0);
+ painter->fillRect(highlightRectSpec, Ph::DeriveColors::lightSpecularOf(swatch.color(S_highlight)));
+ painter->fillRect(highlightRect, swatch.color(S_highlight));
+
+ QRect refillRect = Ph::rectFromInnerEdgeWithThickness(shapeClipRect, innerEdge, 2);
+ refillRect = Ph::rectTranslatedTowardEdge(refillRect, innerEdge, 2);
+ refillRect = Ph::expandRect(refillRect, edgeAwayNextTab | edgeTowardNextTab, -1);
+ painter->fillRect(refillRect, swatch.color(tabFrameColor));
+ Ph::fillRectEdges(painter, refillRect, edgeAwayNextTab | edgeTowardNextTab, 1, swatch.color(specular));
+ }
+ break;
+ }
+ case CE_ItemViewItem: {
+ auto ivopt = qstyleoption_cast<const QStyleOptionViewItem*>(option);
+ if (!ivopt)
+ break;
+ // Hack to work around broken grid line drawing in Qt's table view code:
+ //
+ // We tell it that the grid line color is a color via
+ // SH_Table_GridLineColor. It draws the grid lines, but it in high DPI it's
+ // broken because it uses a pen/path to draw the line, which makes it too
+ // narrow, subpixel-incorrectly-antialiased, and/or offset from its correct
+ // position. So when we draw the item view items in a table view, we'll
+ // also try to paint 1 pixel outside of our current rect to try to fill in
+ // the incorrectly painted areas where the grid lines are.
+ //
+ // Also note that the table views with the bad drawing code, when
+ // scrolling, will leave garbage behind in the incorrectly-drawn grid line
+ // areas. This will also paint over that.
+ bool overdrawGridHack = false;
+ if (auto tableWidget = qobject_cast<const QTableView*>(widget)) {
+ overdrawGridHack = tableWidget->showGrid() && tableWidget->gridStyle() == Qt::SolidLine;
+ }
+ if (overdrawGridHack) {
+ QRect r = option->rect.adjusted(-1, -1, 1, 1);
+ Ph::fillRectOutline(painter, r, 1, swatch.color(S_base_divider));
+ }
+ QCommonStyle::drawControl(element, option, painter, widget);
+ break;
+ }
+ case CE_ShapedFrame: {
+ auto frameopt = qstyleoption_cast<const QStyleOptionFrame*>(option);
+ if (frameopt) {
+ if (frameopt->frameShape == QFrame::HLine) {
+ QRect r = option->rect;
+ r.setY(r.y() + r.height() / 2);
+ r.setHeight(2);
+ painter->fillRect(r, swatch.color(S_tabFrame_specular));
+ r.setHeight(1);
+ painter->fillRect(r, swatch.color(S_frame_outline));
+ break;
+ } else if (frameopt->frameShape == QFrame::VLine) {
+ QRect r = option->rect;
+ r.setX(r.x() + r.width() / 2);
+ r.setWidth(2);
+ painter->fillRect(r, swatch.color(S_tabFrame_specular));
+ r.setWidth(1);
+ painter->fillRect(r, swatch.color(S_frame_outline));
+ break;
+ }
+ }
+ QCommonStyle::drawControl(element, option, painter, widget);
+ break;
+ }
+ default:
+ QCommonStyle::drawControl(element, option, painter, widget);
+ break;
+ }
+}
+
+QPalette BaseStyle::standardPalette() const
+{
+ return QCommonStyle::standardPalette();
+}
+
+void BaseStyle::drawComplexControl(ComplexControl control,
+ const QStyleOptionComplex* option,
+ QPainter* painter,
+ const QWidget* widget) const
+{
+#ifdef BUILD_WITH_EASY_PROFILER
+ EASY_BLOCK("drawControl");
+ const char* controlCString = QMetaEnum::fromType<QStyle::ComplexControl>().valueToKey(control);
+ EASY_TEXT("ComplexControl", controlCString);
+#endif
+ using Swatchy = Phantom::Swatchy;
+ using namespace Phantom::SwatchColors;
+ namespace Ph = Phantom;
+ auto ph_swatchPtr = Ph::getCachedSwatchOfQPalette(&d->swatchCache, &d->headSwatchFastKey, option->palette);
+ const Ph::PhSwatch& swatch = *ph_swatchPtr.data();
+
+ switch (control) {
+ case CC_GroupBox: {
+ auto groupBox = qstyleoption_cast<const QStyleOptionGroupBox*>(option);
+ if (!groupBox)
+ break;
+ painter->save();
+ // Draw frame
+ QRect textRect = proxy()->subControlRect(CC_GroupBox, option, SC_GroupBoxLabel, widget);
+ QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, option, SC_GroupBoxCheckBox, widget);
+
+ if (groupBox->subControls & QStyle::SC_GroupBoxFrame) {
+ QStyleOptionFrame frame;
+ frame.QStyleOption::operator=(*groupBox);
+ frame.features = groupBox->features;
+ frame.lineWidth = groupBox->lineWidth;
+ frame.midLineWidth = groupBox->midLineWidth;
+ frame.rect = proxy()->subControlRect(CC_GroupBox, option, SC_GroupBoxFrame, widget);
+ proxy()->drawPrimitive(PE_FrameGroupBox, &frame, painter, widget);
+ }
+
+ // Draw title
+ if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) {
+ // groupBox->textColor gets the incorrect palette here
+ painter->setPen(QPen(option->palette.windowText(), 1));
+ unsigned alignment = groupBox->textAlignment;
+ if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, option, widget))
+ alignment |= Qt::TextHideMnemonic;
+
+ proxy()->drawItemText(painter,
+ textRect,
+ alignment | Qt::TextShowMnemonic | Qt::AlignLeft,
+ groupBox->palette,
+ groupBox->state & State_Enabled,
+ groupBox->text,
+ QPalette::NoRole);
+
+ if (groupBox->state & State_HasFocus) {
+ QStyleOptionFocusRect fropt;
+ fropt.QStyleOption::operator=(*groupBox);
+ fropt.rect = textRect.adjusted(-1, 0, 1, 0);
+ proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget);
+ }
+ }
+
+ // Draw checkbox
+ if (groupBox->subControls & SC_GroupBoxCheckBox) {
+ QStyleOptionButton box;
+ box.QStyleOption::operator=(*groupBox);
+ box.rect = checkBoxRect;
+ proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget);
+ }
+ painter->restore();
+ break;
+ }
+ case CC_SpinBox: {
+ auto spinBox = qstyleoption_cast<const QStyleOptionSpinBox*>(option);
+ if (!spinBox)
+ break;
+ const qreal rounding = Ph::SpinBox_Rounding;
+ bool isLeftToRight = option->direction != Qt::RightToLeft;
+ const QRect rect = spinBox->rect;
+ bool sunken = spinBox->state & State_Sunken;
+ bool upIsActive = spinBox->activeSubControls == SC_SpinBoxUp;
+ bool downIsActive = spinBox->activeSubControls == SC_SpinBoxDown;
+ bool hasFocus = option->state & State_HasFocus;
+ bool isEnabled = option->state & State_Enabled;
+ QRect upRect = proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxUp, widget);
+ QRect downRect = proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxDown, widget);
+ if (spinBox->frame) {
+ QRect upDownRect = upRect | downRect;
+ upDownRect.adjust(0, -1, 0, 1);
+ painter->save(); // 0
+ // Fill background
+ Ph::paintBorderedRoundRect(painter, rect, rounding, swatch, S_none, S_base);
+ // Draw button fill
+ painter->setClipRect(upDownRect);
+ // Side with the border
+ Qt::Edge edge = isLeftToRight ? Qt::LeftEdge : Qt::RightEdge;
+ Ph::paintBorderedRoundRect(
+ painter, Ph::expandRect(upDownRect, Ph::oppositeEdge(edge), -1), rounding, swatch, S_none, S_button);
+ painter->restore(); // 0
+ if (Ph::OverhangShadows && !hasFocus && isEnabled) {
+ // Imperfect, leaves tiny gap on left and right. Going closer would eat
+ // into the outline, though.
+ QRect shadowRect = rect.adjusted(qRound(rounding / 2), 1, -qRound(rounding / 2), -1);
+ if (isLeftToRight) {
+ shadowRect.setRight(upDownRect.left());
+ } else {
+ shadowRect.setLeft(upDownRect.right());
+ }
+ Ph::fillRectEdges(painter, shadowRect, Qt::TopEdge, 1, swatch.color(S_base_shadow));
+ }
+ if ((spinBox->stepEnabled & QAbstractSpinBox::StepUpEnabled) && upIsActive && sunken) {
+ painter->fillRect(upRect, swatch.color(S_button_pressed));
+ }
+ if ((spinBox->stepEnabled & QAbstractSpinBox::StepDownEnabled) && downIsActive && sunken) {
+ painter->fillRect(downRect, swatch.color(S_button_pressed));
+ }
+ // Left or right border line
+ Ph::fillRectEdges(painter, upDownRect, edge, 1, swatch.color(S_window_outline));
+ Ph::PSave save(painter);
+ // Outline over entire frame
+ Swatchy outlineColor = hasFocus ? S_highlight_outline : S_window_outline;
+ Ph::paintBorderedRoundRect(painter, rect, rounding, swatch, outlineColor, S_none);
+ save.restore();
+ }
+
+ if (spinBox->buttonSymbols == QAbstractSpinBox::PlusMinus) {
+ Ph::PSave save(painter);
+ // TODO fix up old fusion code here
+ int centerX = upRect.center().x();
+ int centerY = upRect.center().y();
+ Swatchy arrowColorUp =
+ spinBox->stepEnabled & QAbstractSpinBox::StepUpEnabled ? S_indicator_current : S_indicator_disabled;
+ Swatchy arrowColorDown =
+ spinBox->stepEnabled & QAbstractSpinBox::StepDownEnabled ? S_indicator_current : S_indicator_disabled;
+ painter->setPen(swatch.pen(arrowColorUp));
+ painter->drawLine(centerX - 1, centerY, centerX + 3, centerY);
+ painter->drawLine(centerX + 1, centerY - 2, centerX + 1, centerY + 2);
+ centerX = downRect.center().x();
+ centerY = downRect.center().y();
+ painter->setPen(arrowColorDown);
+ painter->drawLine(centerX - 1, centerY, centerX + 3, centerY);
+ } else if (spinBox->buttonSymbols == QAbstractSpinBox::UpDownArrows) {
+ int xoffs = isLeftToRight ? 0 : 1;
+ Ph::drawArrow(painter,
+ upRect.adjusted(4 + xoffs, 1, -5 + xoffs, 1),
+ Qt::UpArrow,
+ swatch,
+ spinBox->stepEnabled & QAbstractSpinBox::StepUpEnabled);
+ Ph::drawArrow(painter,
+ downRect.adjusted(4 + xoffs, 0, -5 + xoffs, -1),
+ Qt::DownArrow,
+ swatch,
+ spinBox->stepEnabled & QAbstractSpinBox::StepDownEnabled);
+ }
+ break;
+ }
+ case CC_TitleBar: {
+ auto titleBar = qstyleoption_cast<const QStyleOptionTitleBar*>(option);
+ if (!titleBar)
+ break;
+ painter->save();
+ const int buttonMargin = 5;
+ bool active = (titleBar->titleBarState & State_Active);
+ QRect fullRect = titleBar->rect;
+ QPalette palette = option->palette;
+ QColor highlight = option->palette.highlight().color();
+ QColor outline = option->palette.dark().color();
+
+ QColor titleBarFrameBorder(active ? highlight.darker(180) : outline.darker(110));
+ QColor titleBarHighlight(active ? highlight.lighter(120) : palette.background().color().lighter(120));
+ QColor textColor(active ? 0xffffff : 0xff000000);
+ QColor textAlphaColor(active ? 0xffffff : 0xff000000);
+
+ {
+ // Fill title
+ QColor titlebarColor = QColor(active ? highlight : palette.background().color());
+ painter->fillRect(option->rect.adjusted(1, 1, -1, 0), titlebarColor);
+ // Frame and rounded corners
+ painter->setPen(titleBarFrameBorder);
+
+ // top outline
+ painter->drawLine(fullRect.left() + 5, fullRect.top(), fullRect.right() - 5, fullRect.top());
+ painter->drawLine(fullRect.left(), fullRect.top() + 4, fullRect.left(), fullRect.bottom());
+ const QPoint points[5] = {QPoint(fullRect.left() + 4, fullRect.top() + 1),
+ QPoint(fullRect.left() + 3, fullRect.top() + 1),
+ QPoint(fullRect.left() + 2, fullRect.top() + 2),
+ QPoint(fullRect.left() + 1, fullRect.top() + 3),
+ QPoint(fullRect.left() + 1, fullRect.top() + 4)};
+ painter->drawPoints(points, 5);
+
+ painter->drawLine(fullRect.right(), fullRect.top() + 4, fullRect.right(), fullRect.bottom());
+ const QPoint points2[5] = {QPoint(fullRect.right() - 3, fullRect.top() + 1),
+ QPoint(fullRect.right() - 4, fullRect.top() + 1),
+ QPoint(fullRect.right() - 2, fullRect.top() + 2),
+ QPoint(fullRect.right() - 1, fullRect.top() + 3),
+ QPoint(fullRect.right() - 1, fullRect.top() + 4)};
+ painter->drawPoints(points2, 5);
+
+ // draw bottomline
+ painter->drawLine(fullRect.right(), fullRect.bottom(), fullRect.left(), fullRect.bottom());
+
+ // top highlight
+ painter->setPen(titleBarHighlight);
+ painter->drawLine(fullRect.left() + 6, fullRect.top() + 1, fullRect.right() - 6, fullRect.top() + 1);
+ }
+ // draw title
+ QRect textRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarLabel, widget);
+ painter->setPen(active ? (titleBar->palette.text().color().lighter(120)) : titleBar->palette.text().color());
+ // Note workspace also does elliding but it does not use the correct font
+ QString title = painter->fontMetrics().elidedText(titleBar->text, Qt::ElideRight, textRect.width() - 14);
+ painter->drawText(textRect.adjusted(1, 1, 1, 1), title, QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
+ painter->setPen(Qt::white);
+ if (active)
+ painter->drawText(textRect, title, QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
+ // min button
+ if ((titleBar->subControls & SC_TitleBarMinButton) && (titleBar->titleBarFlags & Qt::WindowMinimizeButtonHint)
+ && !(titleBar->titleBarState & Qt::WindowMinimized)) {
+ QRect minButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarMinButton, widget);
+ if (minButtonRect.isValid()) {
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarMinButton) && (titleBar->state & State_MouseOver);
+ bool sunken = (titleBar->activeSubControls & SC_TitleBarMinButton) && (titleBar->state & State_Sunken);
+ Ph::drawMdiButton(painter, titleBar, minButtonRect, hover, sunken);
+ QRect minButtonIconRect =
+ minButtonRect.adjusted(buttonMargin, buttonMargin, -buttonMargin, -buttonMargin);
+ painter->setPen(textColor);
+ painter->drawLine(minButtonIconRect.center().x() - 2,
+ minButtonIconRect.center().y() + 3,
+ minButtonIconRect.center().x() + 3,
+ minButtonIconRect.center().y() + 3);
+ painter->drawLine(minButtonIconRect.center().x() - 2,
+ minButtonIconRect.center().y() + 4,
+ minButtonIconRect.center().x() + 3,
+ minButtonIconRect.center().y() + 4);
+ painter->setPen(textAlphaColor);
+ painter->drawLine(minButtonIconRect.center().x() - 3,
+ minButtonIconRect.center().y() + 3,
+ minButtonIconRect.center().x() - 3,
+ minButtonIconRect.center().y() + 4);
+ painter->drawLine(minButtonIconRect.center().x() + 4,
+ minButtonIconRect.center().y() + 3,
+ minButtonIconRect.center().x() + 4,
+ minButtonIconRect.center().y() + 4);
+ }
+ }
+ // max button
+ if ((titleBar->subControls & SC_TitleBarMaxButton) && (titleBar->titleBarFlags & Qt::WindowMaximizeButtonHint)
+ && !(titleBar->titleBarState & Qt::WindowMaximized)) {
+ QRect maxButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarMaxButton, widget);
+ if (maxButtonRect.isValid()) {
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarMaxButton) && (titleBar->state & State_MouseOver);
+ bool sunken = (titleBar->activeSubControls & SC_TitleBarMaxButton) && (titleBar->state & State_Sunken);
+ Ph::drawMdiButton(painter, titleBar, maxButtonRect, hover, sunken);
+
+ QRect maxButtonIconRect =
+ maxButtonRect.adjusted(buttonMargin, buttonMargin, -buttonMargin, -buttonMargin);
+
+ painter->setPen(textColor);
+ painter->drawRect(maxButtonIconRect.adjusted(0, 0, -1, -1));
+ painter->drawLine(maxButtonIconRect.left() + 1,
+ maxButtonIconRect.top() + 1,
+ maxButtonIconRect.right() - 1,
+ maxButtonIconRect.top() + 1);
+ painter->setPen(textAlphaColor);
+ const QPoint points[4] = {maxButtonIconRect.topLeft(),
+ maxButtonIconRect.topRight(),
+ maxButtonIconRect.bottomLeft(),
+ maxButtonIconRect.bottomRight()};
+ painter->drawPoints(points, 4);
+ }
+ }
+
+ // close button
+ if ((titleBar->subControls & SC_TitleBarCloseButton) && (titleBar->titleBarFlags & Qt::WindowSystemMenuHint)) {
+ QRect closeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarCloseButton, widget);
+ if (closeButtonRect.isValid()) {
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarCloseButton) && (titleBar->state & State_MouseOver);
+ bool sunken =
+ (titleBar->activeSubControls & SC_TitleBarCloseButton) && (titleBar->state & State_Sunken);
+ Ph::drawMdiButton(painter, titleBar, closeButtonRect, hover, sunken);
+ QRect closeIconRect =
+ closeButtonRect.adjusted(buttonMargin, buttonMargin, -buttonMargin, -buttonMargin);
+ painter->setPen(textAlphaColor);
+ const QLine lines[4] = {QLine(closeIconRect.left() + 1,
+ closeIconRect.top(),
+ closeIconRect.right(),
+ closeIconRect.bottom() - 1),
+ QLine(closeIconRect.left(),
+ closeIconRect.top() + 1,
+ closeIconRect.right() - 1,
+ closeIconRect.bottom()),
+ QLine(closeIconRect.right() - 1,
+ closeIconRect.top(),
+ closeIconRect.left(),
+ closeIconRect.bottom() - 1),
+ QLine(closeIconRect.right(),
+ closeIconRect.top() + 1,
+ closeIconRect.left() + 1,
+ closeIconRect.bottom())};
+ painter->drawLines(lines, 4);
+ const QPoint points[4] = {closeIconRect.topLeft(),
+ closeIconRect.topRight(),
+ closeIconRect.bottomLeft(),
+ closeIconRect.bottomRight()};
+ painter->drawPoints(points, 4);
+
+ painter->setPen(textColor);
+ painter->drawLine(closeIconRect.left() + 1,
+ closeIconRect.top() + 1,
+ closeIconRect.right() - 1,
+ closeIconRect.bottom() - 1);
+ painter->drawLine(closeIconRect.left() + 1,
+ closeIconRect.bottom() - 1,
+ closeIconRect.right() - 1,
+ closeIconRect.top() + 1);
+ }
+ }
+
+ // normalize button
+ if ((titleBar->subControls & SC_TitleBarNormalButton)
+ && (((titleBar->titleBarFlags & Qt::WindowMinimizeButtonHint)
+ && (titleBar->titleBarState & Qt::WindowMinimized))
+ || ((titleBar->titleBarFlags & Qt::WindowMaximizeButtonHint)
+ && (titleBar->titleBarState & Qt::WindowMaximized)))) {
+ QRect normalButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarNormalButton, widget);
+ if (normalButtonRect.isValid()) {
+
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarNormalButton) && (titleBar->state & State_MouseOver);
+ bool sunken =
+ (titleBar->activeSubControls & SC_TitleBarNormalButton) && (titleBar->state & State_Sunken);
+ QRect normalButtonIconRect =
+ normalButtonRect.adjusted(buttonMargin, buttonMargin, -buttonMargin, -buttonMargin);
+ Ph::drawMdiButton(painter, titleBar, normalButtonRect, hover, sunken);
+
+ QRect frontWindowRect = normalButtonIconRect.adjusted(0, 3, -3, 0);
+ painter->setPen(textColor);
+ painter->drawRect(frontWindowRect.adjusted(0, 0, -1, -1));
+ painter->drawLine(frontWindowRect.left() + 1,
+ frontWindowRect.top() + 1,
+ frontWindowRect.right() - 1,
+ frontWindowRect.top() + 1);
+ painter->setPen(textAlphaColor);
+ const QPoint points[4] = {frontWindowRect.topLeft(),
+ frontWindowRect.topRight(),
+ frontWindowRect.bottomLeft(),
+ frontWindowRect.bottomRight()};
+ painter->drawPoints(points, 4);
+
+ QRect backWindowRect = normalButtonIconRect.adjusted(3, 0, 0, -3);
+ QRegion clipRegion = backWindowRect;
+ clipRegion -= frontWindowRect;
+ painter->save();
+ painter->setClipRegion(clipRegion);
+ painter->setPen(textColor);
+ painter->drawRect(backWindowRect.adjusted(0, 0, -1, -1));
+ painter->drawLine(backWindowRect.left() + 1,
+ backWindowRect.top() + 1,
+ backWindowRect.right() - 1,
+ backWindowRect.top() + 1);
+ painter->setPen(textAlphaColor);
+ const QPoint points2[4] = {backWindowRect.topLeft(),
+ backWindowRect.topRight(),
+ backWindowRect.bottomLeft(),
+ backWindowRect.bottomRight()};
+ painter->drawPoints(points2, 4);
+ painter->restore();
+ }
+ }
+
+ // context help button
+ if (titleBar->subControls & SC_TitleBarContextHelpButton
+ && (titleBar->titleBarFlags & Qt::WindowContextHelpButtonHint)) {
+ QRect contextHelpButtonRect =
+ proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarContextHelpButton, widget);
+ if (contextHelpButtonRect.isValid()) {
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarContextHelpButton) && (titleBar->state & State_MouseOver);
+ bool sunken =
+ (titleBar->activeSubControls & SC_TitleBarContextHelpButton) && (titleBar->state & State_Sunken);
+ Ph::drawMdiButton(painter, titleBar, contextHelpButtonRect, hover, sunken);
+ // This is lame, but I doubt it will get used often. Previously, XPM
+ // icon was used here (very poorly, by re-allocating a QImage over and
+ // over and modifying/painting it)
+ QIcon helpIcon = QCommonStyle::standardIcon(QStyle::SP_DialogHelpButton);
+ helpIcon.paint(painter, contextHelpButtonRect.adjusted(4, 4, -4, -4));
+ }
+ }
+
+ // shade button
+ if (titleBar->subControls & SC_TitleBarShadeButton && (titleBar->titleBarFlags & Qt::WindowShadeButtonHint)) {
+ QRect shadeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarShadeButton, widget);
+ if (shadeButtonRect.isValid()) {
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarShadeButton) && (titleBar->state & State_MouseOver);
+ bool sunken =
+ (titleBar->activeSubControls & SC_TitleBarShadeButton) && (titleBar->state & State_Sunken);
+ Ph::drawMdiButton(painter, titleBar, shadeButtonRect, hover, sunken);
+ Ph::drawArrow(painter, shadeButtonRect.adjusted(5, 7, -5, -7), Qt::UpArrow, swatch);
+ }
+ }
+
+ // unshade button
+ if (titleBar->subControls & SC_TitleBarUnshadeButton && (titleBar->titleBarFlags & Qt::WindowShadeButtonHint)) {
+ QRect unshadeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarUnshadeButton, widget);
+ if (unshadeButtonRect.isValid()) {
+ bool hover =
+ (titleBar->activeSubControls & SC_TitleBarUnshadeButton) && (titleBar->state & State_MouseOver);
+ bool sunken =
+ (titleBar->activeSubControls & SC_TitleBarUnshadeButton) && (titleBar->state & State_Sunken);
+ Ph::drawMdiButton(painter, titleBar, unshadeButtonRect, hover, sunken);
+ Ph::drawArrow(painter, unshadeButtonRect.adjusted(5, 7, -5, -7), Qt::DownArrow, swatch);
+ }
+ }
+
+ if ((titleBar->subControls & SC_TitleBarSysMenu) && (titleBar->titleBarFlags & Qt::WindowSystemMenuHint)) {
+ QRect iconRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarSysMenu, widget);
+ if (iconRect.isValid()) {
+ if (!titleBar->icon.isNull()) {
+ titleBar->icon.paint(painter, iconRect);
+ } else {
+ QStyleOption tool = *titleBar;
+ QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, &tool, widget).pixmap(16, 16);
+ tool.rect = iconRect;
+ painter->save();
+ proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm);
+ painter->restore();
+ }
+ }
+ }
+ painter->restore();
+ break;
+ }
+ case CC_ScrollBar: {
+ auto scrollBar = qstyleoption_cast<const QStyleOptionSlider*>(option);
+ if (!scrollBar)
+ break;
+ auto pr = proxy();
+ QRect scrollBarSubLine = pr->subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget);
+ QRect scrollBarAddLine = pr->subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget);
+ QRect scrollBarSlider = pr->subControlRect(control, scrollBar, SC_ScrollBarSlider, widget);
+ QRect scrollBarGroove = pr->subControlRect(control, scrollBar, SC_ScrollBarGroove, widget);
+
+ int padding = Ph::dpiScaled(4);
+ scrollBarSlider.setX(scrollBarSlider.x() + padding);
+ scrollBarSlider.setY(scrollBarSlider.y() + padding);
+ // Width and height should be reduced by 2 * padding, but somehow padding is enough.
+ scrollBarSlider.setWidth(scrollBarSlider.width() - padding);
+ scrollBarSlider.setHeight(scrollBarSlider.height() - padding);
+
+ // Groove/gutter/trench area
+ if (scrollBar->subControls & SC_ScrollBarGroove) {
+ painter->fillRect(scrollBarGroove, swatch.color(S_window));
+ }
+
+ // Slider thumb
+ if (scrollBar->subControls & SC_ScrollBarSlider) {
+ qreal radius =
+ (scrollBar->orientation == Qt::Horizontal ? scrollBarSlider.height() : scrollBarSlider.width()) / 2.0;
+ painter->fillRect(scrollBarSlider, swatch.color(S_window));
+ Ph::paintSolidRoundRect(painter, scrollBarSlider, radius, swatch, S_scrollbarSlider);
+ }
+
+ // The SubLine (up/left) buttons
+ if (scrollBar->subControls & SC_ScrollBarSubLine) {
+ painter->fillRect(scrollBarSubLine, swatch.color(S_window));
+ }
+
+ // The AddLine (down/right) button
+ if (scrollBar->subControls & SC_ScrollBarAddLine) {
+ painter->fillRect(scrollBarAddLine, swatch.color(S_window));
+ }
+ break;
+ }
+ case CC_ComboBox: {
+ auto comboBox = qstyleoption_cast<const QStyleOptionComboBox*>(option);
+ if (!comboBox)
+ break;
+ painter->save();
+ bool isLeftToRight = option->direction != Qt::RightToLeft;
+ bool hasFocus = option->state & State_HasFocus && option->state & State_KeyboardFocusChange;
+ bool isSunken = comboBox->state & State_Sunken;
+ QRect rect = comboBox->rect;
+ QRect downArrowRect = proxy()->subControlRect(CC_ComboBox, comboBox, SC_ComboBoxArrow, widget);
+ // Draw a line edit
+ if (comboBox->editable) {
+ Swatchy buttonFill = isSunken ? S_button_pressed : S_button;
+ // if (!hasOptions)
+ // buttonFill = S_window;
+ painter->fillRect(rect, swatch.color(buttonFill));
+ if (comboBox->frame) {
+ QStyleOptionFrame buttonOption;
+ buttonOption.QStyleOption::operator=(*comboBox);
+ buttonOption.rect = rect;
+ buttonOption.state =
+ (comboBox->state & (State_Enabled | State_MouseOver | State_HasFocus)) | State_KeyboardFocusChange;
+ if (isSunken) {
+ buttonOption.state |= State_Sunken;
+ buttonOption.state &= ~State_MouseOver;
+ }
+ proxy()->drawPrimitive(PE_FrameLineEdit, &buttonOption, painter, widget);
+ QRect fr = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget);
+ QRect br = rect;
+ if (isLeftToRight) {
+ br.setLeft(fr.x() + fr.width());
+ } else {
+ br.setRight(fr.left() - 1);
+ }
+ Qt::Edge edge = isLeftToRight ? Qt::LeftEdge : Qt::RightEdge;
+ Swatchy color = hasFocus ? S_highlight_outline : S_window_outline;
+ br.adjust(0, 1, 0, -1);
+ Ph::fillRectEdges(painter, br, edge, 1, swatch.color(color));
+ br.adjust(1, 0, -1, 0);
+ Swatchy specular = isSunken ? S_button_pressed_specular : S_button_specular;
+ Ph::fillRectOutline(painter, br, 1, swatch.color(specular));
+ }
+ } else {
+ QStyleOptionButton buttonOption;
+ buttonOption.QStyleOption::operator=(*comboBox);
+ buttonOption.rect = rect;
+ buttonOption.state =
+ comboBox->state
+ & (State_Enabled | State_MouseOver | State_HasFocus | State_Active | State_KeyboardFocusChange);
+ // Combo boxes should be shown to be keyboard interactive if they're
+ // focused at all, not just if the user has pressed tab to enter keyboard
+ // focus change mode. This is because the up/down arrows can, regardless
+ // of having pressed tab, control the combo box selection.
+ if (comboBox->state & State_HasFocus)
+ buttonOption.state |= State_KeyboardFocusChange;
+ if (isSunken) {
+ buttonOption.state |= State_Sunken;
+ buttonOption.state &= ~State_MouseOver;
+ }
+ proxy()->drawPrimitive(PE_PanelButtonCommand, &buttonOption, painter, widget);
+ }
+ if (comboBox->subControls & SC_ComboBoxArrow) {
+ int margin =
+ static_cast<int>(qMin(downArrowRect.width(), downArrowRect.height()) * Ph::ComboBox_ArrowMarginRatio);
+ QRect r = downArrowRect;
+ r.adjust(margin, margin, -margin, -margin);
+ // Draw the up/down arrow
+ Ph::drawArrow(painter, r, Qt::DownArrow, swatch);
+ }
+ painter->restore();
+ break;
+ }
+ case CC_Slider: {
+ auto slider = qstyleoption_cast<const QStyleOptionSlider*>(option);
+ if (!slider)
+ break;
+ const QRect groove = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove, widget);
+ const QRect handle = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle, widget);
+ bool horizontal = slider->orientation == Qt::Horizontal;
+ bool ticksAbove = slider->tickPosition & QSlider::TicksAbove;
+ bool ticksBelow = slider->tickPosition & QSlider::TicksBelow;
+ Swatchy outlineColor = S_window_outline;
+ if (option->state & State_HasFocus && option->state & State_KeyboardFocusChange)
+ outlineColor = S_highlight_outline;
+ if ((option->subControls & SC_SliderGroove) && groove.isValid()) {
+ QRect g0 = groove;
+ if (g0.height() > 5)
+ g0.adjust(0, 1, 0, -1);
+ Ph::PSave saver(painter);
+ Swatchy gutterColor = option->state & State_Enabled ? S_scrollbarGutter : S_window;
+ Ph::paintBorderedRoundRect(painter, groove, Ph::SliderGroove_Rounding, swatch, outlineColor, gutterColor);
+ }
+ if (option->subControls & SC_SliderTickmarks) {
+ Ph::PSave save(painter);
+ painter->setPen(swatch.pen(S_window_outline));
+ int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget);
+ int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider, widget);
+ int interval = slider->tickInterval;
+ if (interval <= 0) {
+ interval = slider->singleStep;
+ if (QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, interval, available)
+ - QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, 0, available)
+ < 3)
+ interval = slider->pageStep;
+ }
+ if (interval <= 0)
+ interval = 1;
+
+ int v = slider->minimum;
+ int len = proxy()->pixelMetric(PM_SliderLength, slider, widget);
+ while (v <= slider->maximum + 1) {
+ if (v == slider->maximum + 1 && interval == 1)
+ break;
+ const int v_ = qMin(v, slider->maximum);
+ int pos = sliderPositionFromValue(slider->minimum,
+ slider->maximum,
+ v_,
+ (horizontal ? slider->rect.width() : slider->rect.height()) - len,
+ slider->upsideDown)
+ + len / 2;
+ int extra = 2 - ((v_ == slider->minimum || v_ == slider->maximum) ? 1 : 0);
+
+ if (horizontal) {
+ if (ticksAbove) {
+ painter->drawLine(pos, slider->rect.top() + extra, pos, slider->rect.top() + tickSize);
+ }
+ if (ticksBelow) {
+ painter->drawLine(pos, slider->rect.bottom() - extra, pos, slider->rect.bottom() - tickSize);
+ }
+ } else {
+ if (ticksAbove) {
+ painter->drawLine(slider->rect.left() + extra, pos, slider->rect.left() + tickSize, pos);
+ }
+ if (ticksBelow) {
+ painter->drawLine(slider->rect.right() - extra, pos, slider->rect.right() - tickSize, pos);
+ }
+ }
+ // in the case where maximum is max int
+ int nextInterval = v + interval;
+ if (nextInterval < v)
+ break;
+ v = nextInterval;
+ }
+ }
+ // draw handle
+ if ((option->subControls & SC_SliderHandle)) {
+ bool isPressed = option->state & QStyle::State_Sunken && option->activeSubControls & SC_SliderHandle;
+ QRect r = handle;
+ Swatchy handleOutline, handleFill, handleSpecular;
+ if (option->state & State_HasFocus && option->state & State_KeyboardFocusChange) {
+ handleOutline = S_highlight_outline;
+ } else {
+ handleOutline = S_window_outline;
+ }
+ if (isPressed) {
+ handleFill = S_sliderHandle_pressed;
+ handleSpecular = S_sliderHandle_pressed_specular;
+ } else {
+ handleFill = S_sliderHandle;
+ handleSpecular = S_sliderHandle_specular;
+ }
+ Ph::PSave save(painter);
+ Ph::paintBorderedRoundRect(painter, r, Ph::SliderHandle_Rounding, swatch, handleOutline, handleFill);
+ r.adjust(1, 1, -1, -1);
+ Ph::paintBorderedRoundRect(painter, r, Ph::SliderHandle_Rounding, swatch, handleSpecular, S_none);
+ }
+ break;
+ }
+ case CC_ToolButton: {
+ auto tbopt = qstyleoption_cast<const QStyleOptionToolButton*>(option);
+ if (Ph::AllowToolBarAutoRaise || !tbopt || !widget || !widget->parent()
+ || !widget->parent()->inherits("QToolBar")) {
+ QCommonStyle::drawComplexControl(control, option, painter, widget);
+ break;
+ }
+ QStyleOptionToolButton opt_;
+ opt_.QStyleOptionToolButton::operator=(*tbopt);
+ opt_.state &= ~State_AutoRaise;
+ QCommonStyle::drawComplexControl(control, &opt_, painter, widget);
+ break;
+ }
+ case CC_Dial:
+ if (auto dial = qstyleoption_cast<const QStyleOptionSlider*>(option))
+ Ph::drawDial(dial, painter);
+ break;
+ default:
+ QCommonStyle::drawComplexControl(control, option, painter, widget);
+ break;
+ }
+}
+
+int BaseStyle::pixelMetric(PixelMetric metric, const QStyleOption* option, const QWidget* widget) const
+{
+ // Calculate pixel metrics.
+ // Use immediate return if value is not supposed to be dpi-scaled.
+ int val = -1;
+ switch (metric) {
+ case PM_SliderTickmarkOffset:
+ val = 6;
+ break;
+ case PM_ToolTipLabelFrameWidth:
+ case PM_HeaderMargin:
+ case PM_ButtonMargin:
+ case PM_SpinBoxFrameWidth:
+ val = Phantom::DefaultFrameWidth;
+ break;
+ case PM_ButtonDefaultIndicator:
+ case PM_ButtonShiftHorizontal:
+ val = 0;
+ break;
+ case PM_ButtonShiftVertical:
+ if (qobject_cast<const QToolButton*>(widget)) {
+ return 0;
+ }
+ val = 1;
+ break;
+ case PM_ComboBoxFrameWidth:
+ return 1;
+ case PM_DefaultFrameWidth:
+ // Original comment from fusion:
+ // Do not dpi-scale because the drawn frame is always exactly 1 pixel thick
+ // My note:
+ // I seriously doubt, with all of the hacky add-or-remove-1 things
+ // everywhere in fusion (and still in phantom), and the fact that fusion is
+ // totally broken in high dpi, that this actually holds true.
+ if (qobject_cast<const QAbstractItemView*>(widget)) {
+ return 1;
+ }
+ val = qMax(1, Phantom::DefaultFrameWidth - 2);
+ break;
+ case PM_MessageBoxIconSize:
+ val = 48;
+ break;
+ case PM_DialogButtonsSeparator:
+ case PM_ScrollBarSliderMin:
+ val = 26;
+ break;
+ case PM_TitleBarHeight:
+ val = 24;
+ break;
+ case PM_ScrollBarExtent:
+ val = 12;
+ break;
+ case PM_SliderThickness:
+ case PM_SliderLength:
+ val = 15;
+ break;
+ case PM_DockWidgetTitleMargin:
+ val = 1;
+ break;
+ case PM_MenuVMargin:
+ case PM_MenuHMargin:
+ case PM_MenuPanelWidth:
+ val = 0;
+ break;
+ case PM_MenuBarItemSpacing:
+ val = 0;
+ break;
+ case PM_MenuBarHMargin:
+ // option is usually nullptr, use widget instead to get font metrics
+ if (!Phantom::MenuBarLeftMargin || !widget) {
+ val = 0;
+ break;
+ }
+ return widget->fontMetrics().height() * Phantom::MenuBar_HorizontalPaddingFontRatio;
+ case PM_MenuBarVMargin:
+ case PM_MenuBarPanelWidth:
+ val = 0;
+ break;
+ case PM_ToolBarSeparatorExtent:
+ val = 9;
+ break;
+ case PM_ToolBarHandleExtent: {
+ int dotLen = Phantom::dpiScaled(2);
+ return dotLen * (3 * 2 - 1);
+ }
+ case PM_ToolBarItemSpacing:
+ val = 1;
+ break;
+ case PM_ToolBarFrameWidth:
+ val = Phantom::MenuBar_FrameWidth;
+ break;
+ case PM_ToolBarItemMargin:
+ val = 1;
+ break;
+ case PM_ToolBarExtensionExtent:
+ val = 32;
+ break;
+ case PM_ListViewIconSize:
+ case PM_SmallIconSize:
+ if (Phantom::ItemView_UseFontHeightForDecorationSize && widget
+ && qobject_cast<const QAbstractItemView*>(widget)) {
+ // QAbstractItemView::viewOptions() always uses nullptr for the
+ // styleoption when querying for PM_SmallIconSize. The best we can do is
+ // use the font set on the widget itself, which is obviously going to be
+ // wrong if the row has a custom font set on it. Hmm.
+ return widget->fontMetrics().height();
+ }
+ val = 16;
+ break;
+ case PM_ButtonIconSize: {
+ if (option)
+ return option->fontMetrics.height();
+ if (widget)
+ return widget->fontMetrics().height();
+ val = 16;
+ break;
+ }
+ case PM_DockWidgetTitleBarButtonMargin:
+ val = 2;
+ break;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+ case PM_TitleBarButtonSize:
+ val = 19;
+ break;
+#endif
+ case PM_MaximumDragDistance:
+ return -1; // Do not dpi-scale because the value is magic
+ case PM_TabCloseIndicatorWidth:
+ case PM_TabCloseIndicatorHeight:
+ val = 16;
+ break;
+ case PM_TabBarTabHSpace:
+ // Contents may clip out horizontally if we don't some extra pixels here or
+ // in sizeFromContents for CT_TabBarTab.
+ if (!option)
+ break;
+ return static_cast<int>(option->fontMetrics.height() * Phantom::TabBar_HPaddingFontRatio)
+ + static_cast<int>(Phantom::dpiScaled(4));
+ case PM_TabBarTabVSpace:
+ if (!option)
+ break;
+ return static_cast<int>(option->fontMetrics.height() * Phantom::TabBar_VPaddingFontRatio)
+ + static_cast<int>(Phantom::dpiScaled(2));
+ case PM_TabBarTabOverlap:
+ val = 1;
+ break;
+ case PM_TabBarBaseOverlap:
+ val = 2;
+ break;
+ case PM_TabBarIconSize: {
+ if (!widget)
+ break;
+ return widget->fontMetrics().height();
+ }
+ case PM_TabBarTabShiftVertical: {
+ val = Phantom::TabBar_InctiveVShift;
+ break;
+ }
+ case PM_SubMenuOverlap:
+ val = 0;
+ break;
+ case PM_DockWidgetHandleExtent:
+ case PM_SplitterWidth:
+ val = 5;
+ break;
+ case PM_IndicatorHeight:
+ case PM_IndicatorWidth:
+ case PM_ExclusiveIndicatorHeight:
+ case PM_ExclusiveIndicatorWidth:
+ if (option)
+ return option->fontMetrics.height();
+ if (widget)
+ return widget->fontMetrics().height();
+ val = 14;
+ break;
+ case PM_ScrollView_ScrollBarOverlap:
+ case PM_ScrollView_ScrollBarSpacing:
+ val = 0;
+ break;
+ case PM_TreeViewIndentation: {
+ if (widget)
+ return widget->fontMetrics().height();
+ val = 12;
+ break;
+ }
+ default:
+ val = QCommonStyle::pixelMetric(metric, option, widget);
+ }
+ return Phantom::dpiScaled(val);
+}
+
+QSize BaseStyle::sizeFromContents(ContentsType type,
+ const QStyleOption* option,
+ const QSize& size,
+ const QWidget* widget) const
+{
+ namespace Ph = Phantom;
+ // Cases which do not rely on the parent class to do any work
+ switch (type) {
+ case CT_RadioButton:
+ case CT_CheckBox: {
+ auto btn = qstyleoption_cast<const QStyleOptionButton*>(option);
+ if (!btn)
+ break;
+ bool isRadio = type == CT_RadioButton;
+ int w = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth : PM_IndicatorWidth, btn, widget);
+ int h = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight : PM_IndicatorHeight, btn, widget);
+ int margins = 0;
+ if (!btn->icon.isNull() || !btn->text.isEmpty())
+ margins =
+ proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing : PM_CheckBoxLabelSpacing, option, widget);
+ return QSize(size.width() + w + margins, qMax(size.height(), h));
+ }
+ case CT_MenuBarItem: {
+ int fontHeight = option ? option->fontMetrics.height() : size.height();
+ int w = static_cast<int>(fontHeight * Ph::MenuBar_HorizontalPaddingFontRatio);
+ int h = static_cast<int>(fontHeight * Ph::MenuBar_VerticalPaddingFontRatio);
+ int line = Ph::dpiScaled(1);
+ return QSize(size.width() + w * 2, size.height() + h * 2 + line);
+ }
+ case CT_MenuItem: {
+ auto menuItem = qstyleoption_cast<const QStyleOptionMenuItem*>(option);
+ if (!menuItem)
+ return size;
+ bool hasTabChar = menuItem->text.contains(QLatin1Char('\t'));
+ bool hasSubMenu = menuItem->menuItemType == QStyleOptionMenuItem::SubMenu;
+ bool isSeparator = menuItem->menuItemType == QStyleOptionMenuItem::Separator;
+ int fontMetricsHeight = -1;
+ // See notes at CE_MenuItem and SH_ComboBox_Popup for more information
+ if (Ph::UseQMenuForComboBoxPopup && qobject_cast<const QComboBox*>(widget)) {
+ if (!widget->testAttribute(Qt::WA_SetFont))
+ fontMetricsHeight = QFontMetrics(qApp->font("QMenu")).height();
+ }
+ if (fontMetricsHeight == -1) {
+ fontMetricsHeight = option->fontMetrics.height();
+ }
+ auto metrics = Ph::MenuItemMetrics::ofFontHeight(fontMetricsHeight);
+ // Incoming width is the sum of the visual widths of the main item text and
+ // the mnemonic text (if any). To this width we will add the widths of the
+ // other features for this menu item -- the icon/checkbox, spacing between
+ // icon/text/mnemonic, etc. For cases like separators without any text, we
+ // may disregard the width.
+ //
+ // Height is the text height, probably.
+ int w = size.width();
+ // Frame
+ w += metrics.frameThickness * 2;
+ // Left margins don't depend on whether or not we have a submenu arrow.
+ // Calculating the right margins requires knowing whether or not the menu
+ // item has a submenu arrow.
+ w += metrics.leftMargin;
+ // Phantom treats every menu item with the same space on the left for a
+ // check mark, even if it doesn't have the checkable property.
+ w += metrics.checkWidth + metrics.checkRightSpace;
+
+ if (!menuItem->icon.isNull()) {
+ // Phantom disregards any user-specified icon sizing at the moment.
+ w += metrics.fontHeight;
+ w += metrics.iconRightSpace;
+ }
+
+ // Tab character is used for separating the shortcut text
+ if (hasTabChar)
+ w += metrics.mnemonicSpace;
+ if (hasSubMenu)
+ w += metrics.arrowSpace + metrics.arrowWidth + metrics.rightMarginForArrow;
+ else
+ w += metrics.rightMarginForText;
+ int h;
+ if (isSeparator) {
+ h = metrics.separatorHeight;
+ } else {
+ h = metrics.totalHeight;
+ }
+ if (!menuItem->icon.isNull()) {
+ if (auto combo = qobject_cast<const QComboBox*>(widget)) {
+ h = qMax(combo->iconSize().height() + 2, h);
+ }
+ }
+ QSize sz;
+ sz.setWidth(qMax<int>(w, Ph::dpiScaled(Ph::MenuMinimumWidth)));
+ sz.setHeight(h);
+ return sz;
+ }
+ case CT_Menu: {
+ if (!Ph::MenuExtraBottomMargin || !option || !widget)
+ break;
+ // Trick the QMenu into putting a margin only at the bottom by adding extra
+ // height to the contents size. We only want to add this tricky space if
+ // there is at least more than 1 item in the menu.
+ const auto acts = widget->actions();
+ if (acts.count() < 2)
+ break;
+ // We only want to add the tricky space if there's at least 1 separator,
+ // otherwise it looks weird.
+ bool anySeps = false;
+ for (auto act : acts) {
+ if (act->isSeparator()) {
+ anySeps = true;
+ break;
+ }
+ }
+ if (!anySeps)
+ break;
+ int fheight = option->fontMetrics.height();
+ int vmargin = static_cast<int>(fheight * Ph::MenuItem_SeparatorHeightFontRatio) / 2;
+ QSize sz = size;
+ sz.setHeight(sz.height() + vmargin);
+ return sz;
+ }
+ case CT_TabBarTab: {
+ // Placeholder in case we change this in the future
+ return size;
+ }
+ case CT_Slider: {
+ QSize sz = size;
+ if (qobject_cast<const QSlider*>(widget)->orientation() == Qt::Horizontal) {
+ sz.setHeight(sz.height() + PM_SliderTickmarkOffset);
+ } else {
+ sz.setWidth(sz.width() + PM_SliderTickmarkOffset);
+ }
+ return sz;
+ }
+ case CT_GroupBox: {
+ // This doesn't seem to get used except once by QGroupBox for
+ // minimumSizeHint(). After that, the sizing/layout calculations seem to
+ // use the rects given by subControlRect().
+ auto opt = qstyleoption_cast<const QStyleOptionGroupBox*>(option);
+ if (!opt)
+ break;
+ // Checkbox and text height already accounted for, but margin between text
+ // and frame isn't.
+ int xadd = 0;
+ int yadd = 0;
+ if (opt->subControls & (SC_GroupBoxCheckBox | SC_GroupBoxLabel)) {
+ int fontHeight = option->fontMetrics.height();
+ yadd += static_cast<int>(fontHeight * Phantom::GroupBox_LabelBottomMarginFontRatio);
+ }
+ // We can test for the frame in general, but unfortunately testing to see
+ // if it's the 1-line "flat" style or 4-line box/rect "anything else" style
+ // doesn't seem to be possible here, only when painting.
+ if (opt->subControls & SC_GroupBoxFrame) {
+ xadd += 2;
+ yadd += 2;
+ }
+ return QSize(size.width() + xadd, size.height() + yadd);
+ }
+ case CT_ItemViewItem: {
+ auto vopt = qstyleoption_cast<const QStyleOptionViewItem*>(option);
+ if (!vopt)
+ break;
+ QSize sz = QCommonStyle::sizeFromContents(type, option, size, widget);
+ sz += QSize(0, Phantom::DefaultFrameWidth);
+ // QCommonStyle has a bunch of complicated logic for laying out/calculating
+ // rects of view items, which is locked behind a private data guy. In
+ // sizeFromContents for CT_ItemViewItem, it unions all of the item row's
+ // rects together and then, if the decoration height is exactly the same as
+ // the row height, it adds 2 pixels (not dpi scaled) to the height. The
+ // comment says it's to prevent "icons from overlapping" but I have no idea
+ // how that's supposed to help. And we don't necessarily want those extra 2
+ // pixels. Anyway, I don't want to copy and paste all of that code into
+ // Phantom and then maintain it. So when Phantom is in the mode where we're
+ // basing the item view decoration sizes off of the font size, we'll just
+ // take a guess when QCommonStyle has added 2 to the height (because the
+ // row height and decoration height are both the font height), and
+ // re-remove those two pixels.
+#if 1
+ if (Phantom::ItemView_UseFontHeightForDecorationSize) {
+ int fh = vopt->fontMetrics.height();
+ if (sz.height() == fh + 2 && vopt->decorationSize.height() == fh) {
+ sz.setHeight(fh);
+ }
+ }
+#endif
+ return sz;
+ }
+ case CT_HeaderSection: {
+ auto hdr = qstyleoption_cast<const QStyleOptionHeader*>(option);
+ if (!hdr)
+ break;
+ // This is pretty crummy. Should also check if we need multi-line support
+ // or not.
+ bool nullIcon = hdr->icon.isNull();
+ int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr, widget);
+ int iconSize = nullIcon ? 0 : option->fontMetrics.height();
+ QSize txt = hdr->fontMetrics.size(Qt::TextSingleLine | Qt::TextBypassShaping, hdr->text);
+ QSize sz;
+ sz.setHeight(margin + qMax(iconSize, txt.height()) + margin);
+ sz.setWidth((nullIcon ? 0 : margin) + iconSize + (hdr->text.isNull() ? 0 : margin) + txt.width() + margin);
+ if (hdr->sortIndicator != QStyleOptionHeader::None) {
+ if (hdr->orientation == Qt::Horizontal)
+ sz.rwidth() += sz.height() + margin;
+ else
+ sz.rheight() += sz.width() + margin;
+ }
+ return sz;
+ }
+ default:
+ break;
+ }
+
+ // Cases which modify the size given by the parent class
+ QSize newSize = QCommonStyle::sizeFromContents(type, option, size, widget);
+ switch (type) {
+ case CT_PushButton: {
+ auto pbopt = qstyleoption_cast<const QStyleOptionButton*>(option);
+ if (!pbopt || pbopt->text.isEmpty())
+ break;
+ int hpad = static_cast<int>(pbopt->fontMetrics.height() * Phantom::PushButton_HorizontalPaddingFontHeightRatio);
+ newSize.rwidth() += hpad * 2;
+ if (widget && qobject_cast<const QDialogButtonBox*>(widget->parent())) {
+ int dialogButtonMinWidth = Phantom::dpiScaled(80);
+ newSize.rwidth() = qMax(newSize.width(), dialogButtonMinWidth);
+ }
+ break;
+ }
+ case CT_ToolButton:
+#if defined(Q_OS_MACOS)
+ newSize += QSize(Ph::dpiScaled(6 + Phantom::DefaultFrameWidth), Ph::dpiScaled(6 + Phantom::DefaultFrameWidth));
+#elif defined(Q_OS_WIN)
+ newSize += QSize(Ph::dpiScaled(4 + Phantom::DefaultFrameWidth), Ph::dpiScaled(4 + Phantom::DefaultFrameWidth));
+#else
+ newSize += QSize(Ph::dpiScaled(3 + Phantom::DefaultFrameWidth), Ph::dpiScaled(3 + Phantom::DefaultFrameWidth));
+#endif
+ break;
+ case CT_ComboBox: {
+ newSize += QSize(0, Ph::dpiScaled(4 + Phantom::DefaultFrameWidth));
+ auto cb = qstyleoption_cast<const QStyleOptionComboBox*>(option);
+ // Non-editable combo boxes have some extra padding on the left side,
+ // similar to push buttons. We should account for that here to avoid text
+ // being clipped off.
+ if (cb) {
+ int pad = 0;
+ if (cb->editable) {
+ pad = Ph::dpiScaled(Ph::LineEdit_ContentsHPad);
+ } else {
+ pad = Ph::dpiScaled(Ph::ComboBox_NonEditable_ContentsHPad);
+ }
+ newSize.rwidth() += pad * 2;
+ }
+ break;
+ }
+ case CT_LineEdit: {
+ newSize += QSize(0, 4);
+ int pad = Ph::dpiScaled(Ph::LineEdit_ContentsHPad);
+ newSize.rwidth() += pad * 2;
+ break;
+ }
+ case CT_SpinBox:
+ // No changes needed
+ break;
+ case CT_SizeGrip:
+ newSize += QSize(4, 4);
+ break;
+ case CT_MdiControls:
+ newSize -= QSize(1, 0);
+ break;
+ default:
+ break;
+ }
+ return newSize;
+}
+
+void BaseStyle::polish(QApplication* app)
+{
+ if (!app) {
+ return;
+ }
+
+ Q_INIT_RESOURCE(styles);
+
+ QString stylesheet;
+ QFile baseStylesheetFile(":/styles/base/basestyle.qss");
+ if (baseStylesheetFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ stylesheet = baseStylesheetFile.readAll();
+ baseStylesheetFile.close();
+ } else {
+ qWarning("Failed to load base theme stylesheet.");
+ }
+
+ stylesheet.append(getAppStyleSheet());
+ app->setStyleSheet(stylesheet);
+ QCommonStyle::polish(app);
+}
+
+QRect BaseStyle::subControlRect(ComplexControl control,
+ const QStyleOptionComplex* option,
+ SubControl subControl,
+ const QWidget* widget) const
+{
+ namespace Ph = Phantom;
+ QRect rect = QCommonStyle::subControlRect(control, option, subControl, widget);
+ switch (control) {
+ case CC_Slider: {
+ auto slider = qstyleoption_cast<const QStyleOptionSlider*>(option);
+ if (!slider)
+ break;
+ int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget);
+ switch (subControl) {
+ case SC_SliderHandle: {
+ if (slider->orientation == Qt::Horizontal) {
+ rect.setHeight(proxy()->pixelMetric(PM_SliderThickness));
+ rect.setWidth(proxy()->pixelMetric(PM_SliderLength));
+ int centerY = slider->rect.center().y() - rect.height() / 2;
+ if (slider->tickPosition & QSlider::TicksAbove)
+ centerY += tickSize;
+ if (slider->tickPosition & QSlider::TicksBelow)
+ centerY -= tickSize;
+ rect.moveTop(centerY);
+ } else {
+ rect.setWidth(proxy()->pixelMetric(PM_SliderThickness));
+ rect.setHeight(proxy()->pixelMetric(PM_SliderLength));
+ int centerX = slider->rect.center().x() - rect.width() / 2;
+ if (slider->tickPosition & QSlider::TicksAbove)
+ centerX += tickSize;
+ if (slider->tickPosition & QSlider::TicksBelow)
+ centerX -= tickSize;
+ rect.moveLeft(centerX);
+ }
+ break;
+ }
+ case SC_SliderGroove: {
+ QPoint grooveCenter = slider->rect.center();
+ const int grooveThickness = Ph::dpiScaled(7);
+ if (slider->orientation == Qt::Horizontal) {
+ rect.setHeight(grooveThickness);
+ if (slider->tickPosition & QSlider::TicksAbove)
+ grooveCenter.ry() += tickSize;
+ if (slider->tickPosition & QSlider::TicksBelow)
+ grooveCenter.ry() -= tickSize;
+ } else {
+ rect.setWidth(grooveThickness);
+ if (slider->tickPosition & QSlider::TicksAbove)
+ grooveCenter.rx() += tickSize;
+ if (slider->tickPosition & QSlider::TicksBelow)
+ grooveCenter.rx() -= tickSize;
+ }
+ rect.moveCenter(grooveCenter);
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ case CC_SpinBox: {
+ auto spinbox = qstyleoption_cast<const QStyleOptionSpinBox*>(option);
+ if (!spinbox)
+ break;
+ // Some leftover Fusion code here. Should clean up this mess.
+ int center = spinbox->rect.height() / 2;
+ int fw = spinbox->frame ? 1 : 0;
+ int y = fw;
+ const int buttonWidth = static_cast<int>(Ph::dpiScaled(Ph::SpinBox_ButtonWidth)) + 2;
+ int x, lx, rx;
+ x = spinbox->rect.width() - y - buttonWidth + 2;
+ lx = fw;
+ rx = x - fw;
+ switch (subControl) {
+ case SC_SpinBoxUp:
+ if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons)
+ return {};
+ rect = QRect(x, fw, buttonWidth, center - fw);
+ break;
+ case SC_SpinBoxDown:
+ if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons)
+ return QRect();
+
+ rect = QRect(x, center, buttonWidth, spinbox->rect.bottom() - center - fw + 1);
+ break;
+ case SC_SpinBoxEditField:
+ if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons) {
+ rect = QRect(lx, fw, spinbox->rect.width() - 2 * fw, spinbox->rect.height() - 2 * fw);
+ } else {
+ rect = QRect(lx, fw, rx - qMax(fw - 1, 0), spinbox->rect.height() - 2 * fw);
+ }
+ break;
+ case SC_SpinBoxFrame:
+ rect = spinbox->rect;
+ break;
+ default:
+ break;
+ }
+ rect = visualRect(spinbox->direction, spinbox->rect, rect);
+ break;
+ }
+ case CC_GroupBox: {
+ auto groupBox = qstyleoption_cast<const QStyleOptionGroupBox*>(option);
+ if (!groupBox)
+ break;
+ switch (subControl) {
+ case SC_GroupBoxFrame:
+ case SC_GroupBoxContents: {
+ QRect r = option->rect;
+ if (groupBox->subControls & (SC_GroupBoxLabel | SC_GroupBoxCheckBox)) {
+ int fontHeight = option->fontMetrics.height();
+ int topMargin = qMax(pixelMetric(PM_ExclusiveIndicatorHeight), fontHeight);
+ topMargin += static_cast<int>(fontHeight * Ph::GroupBox_LabelBottomMarginFontRatio);
+ r.setTop(r.top() + topMargin);
+ }
+ if (subControl == SC_GroupBoxContents && groupBox->subControls & SC_GroupBoxFrame) {
+ // Testing against groupBox->features for the frame type doesn't seem
+ // to work here.
+ r.adjust(1, 1, -1, -1);
+ }
+ return r;
+ }
+ case SC_GroupBoxCheckBox:
+ case SC_GroupBoxLabel: {
+ // Accurate height doesn't matter -- the other group box style
+ // implementations also fail with multi-line or too-tall text.
+ int textHeight = option->fontMetrics.height();
+ // width()/horizontalAdvance() is faster than size() and good enough for
+ // us, since we only support a single line of text here anyway.
+ int textWidth = Phantom::fontMetricsWidth(option->fontMetrics, groupBox->text);
+ int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, option, widget);
+ int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, option, widget);
+ int margin = 0;
+ int indicatorRightSpace = textHeight / 3;
+ int contentWidth = textWidth;
+ if (option->subControls & QStyle::SC_GroupBoxCheckBox) {
+ contentWidth += indicatorWidth + indicatorRightSpace;
+ }
+ int x = margin;
+ int y = 0;
+ switch (groupBox->textAlignment & Qt::AlignHorizontal_Mask) {
+ case Qt::AlignHCenter:
+ x += (option->rect.width() - contentWidth) / 2;
+ break;
+ case Qt::AlignRight:
+ x += option->rect.width() - contentWidth;
+ break;
+ default:
+ break;
+ }
+ int w, h;
+ if (subControl == SC_GroupBoxCheckBox) {
+ w = indicatorWidth;
+ h = indicatorHeight;
+ if (textHeight > indicatorHeight) {
+ y = (textHeight - indicatorHeight) / 2;
+ }
+ } else {
+ w = contentWidth;
+ h = textHeight;
+ if (option->subControls & QStyle::SC_GroupBoxCheckBox) {
+ x += indicatorWidth + indicatorRightSpace;
+ w -= indicatorWidth + indicatorRightSpace;
+ }
+ }
+ return visualRect(option->direction, option->rect, QRect(x, y, w, h));
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ case CC_ComboBox: {
+ auto cb = qstyleoption_cast<const QStyleOptionComboBox*>(option);
+ if (!cb)
+ return QRect();
+ int frame = cb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, cb, widget) : 0;
+ QRect r = option->rect;
+ r.adjust(frame, frame, -frame, -frame);
+ int dim = qMin(r.width(), r.height());
+ if (dim < 1)
+ return QRect();
+ switch (subControl) {
+ case SC_ComboBoxFrame:
+ return cb->rect;
+ case SC_ComboBoxArrow: {
+ QRect r0 = r;
+ r0.setX((r0.x() + r0.width()) - dim + 1);
+ return visualRect(option->direction, option->rect, r0);
+ }
+ case SC_ComboBoxEditField: {
+ // Add extra padding if not editable
+ int pad = 0;
+ if (cb->editable) {
+ // Line edit padding already added
+ } else {
+ pad = Ph::dpiScaled(Ph::ComboBox_NonEditable_ContentsHPad);
+ }
+ r.adjust(pad, 0, -dim, 0);
+ return visualRect(option->direction, option->rect, r);
+ }
+ case SC_ComboBoxListBoxPopup: {
+ return cb->rect;
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ case CC_TitleBar: {
+ auto tb = qstyleoption_cast<const QStyleOptionTitleBar*>(option);
+ if (!tb)
+ break;
+ SubControl sc = subControl;
+ QRect& ret = rect;
+ const int indent = 3;
+ const int controlTopMargin = 3;
+ const int controlBottomMargin = 3;
+ const int controlWidthMargin = 2;
+ const int controlHeight = tb->rect.height() - controlTopMargin - controlBottomMargin;
+ const int delta = controlHeight + controlWidthMargin;
+ int offset = 0;
+ bool isMinimized = tb->titleBarState & Qt::WindowMinimized;
+ bool isMaximized = tb->titleBarState & Qt::WindowMaximized;
+ switch (sc) {
+ case SC_TitleBarLabel:
+ if (tb->titleBarFlags & (Qt::WindowTitleHint | Qt::WindowSystemMenuHint)) {
+ ret = tb->rect;
+ if (tb->titleBarFlags & Qt::WindowSystemMenuHint)
+ ret.adjust(delta, 0, -delta, 0);
+ if (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)
+ ret.adjust(0, 0, -delta, 0);
+ if (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)
+ ret.adjust(0, 0, -delta, 0);
+ if (tb->titleBarFlags & Qt::WindowShadeButtonHint)
+ ret.adjust(0, 0, -delta, 0);
+ if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint)
+ ret.adjust(0, 0, -delta, 0);
+ }
+ break;
+ case SC_TitleBarContextHelpButton:
+ if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint)
+ offset += delta;
+ Q_FALLTHROUGH();
+ case SC_TitleBarMinButton:
+ if (!isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint))
+ offset += delta;
+ else if (sc == SC_TitleBarMinButton)
+ break;
+ Q_FALLTHROUGH();
+ case SC_TitleBarNormalButton:
+ if (isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint))
+ offset += delta;
+ else if (isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint))
+ offset += delta;
+ else if (sc == SC_TitleBarNormalButton)
+ break;
+ Q_FALLTHROUGH();
+ case SC_TitleBarMaxButton:
+ if (!isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint))
+ offset += delta;
+ else if (sc == SC_TitleBarMaxButton)
+ break;
+ Q_FALLTHROUGH();
+ case SC_TitleBarShadeButton:
+ if (!isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint))
+ offset += delta;
+ else if (sc == SC_TitleBarShadeButton)
+ break;
+ Q_FALLTHROUGH();
+ case SC_TitleBarUnshadeButton:
+ if (isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint))
+ offset += delta;
+ else if (sc == SC_TitleBarUnshadeButton)
+ break;
+ Q_FALLTHROUGH();
+ case SC_TitleBarCloseButton:
+ if (tb->titleBarFlags & Qt::WindowSystemMenuHint)
+ offset += delta;
+ else if (sc == SC_TitleBarCloseButton)
+ break;
+ ret.setRect(
+ tb->rect.right() - indent - offset, tb->rect.top() + controlTopMargin, controlHeight, controlHeight);
+ break;
+ case SC_TitleBarSysMenu:
+ if (tb->titleBarFlags & Qt::WindowSystemMenuHint) {
+ ret.setRect(tb->rect.left() + controlWidthMargin + indent,
+ tb->rect.top() + controlTopMargin,
+ controlHeight,
+ controlHeight);
+ }
+ break;
+ default:
+ break;
+ }
+ ret = visualRect(tb->direction, tb->rect, ret);
+ break;
+ }
+ default:
+ break;
+ }
+
+ return rect;
+}
+
+QRect BaseStyle::itemPixmapRect(const QRect& r, int flags, const QPixmap& pixmap) const
+{
+ return QCommonStyle::itemPixmapRect(r, flags, pixmap);
+}
+
+void BaseStyle::drawItemPixmap(QPainter* painter, const QRect& rect, int alignment, const QPixmap& pixmap) const
+{
+ QCommonStyle::drawItemPixmap(painter, rect, alignment, pixmap);
+}
+
+QStyle::SubControl BaseStyle::hitTestComplexControl(ComplexControl cc,
+ const QStyleOptionComplex* opt,
+ const QPoint& pt,
+ const QWidget* w) const
+{
+ return QCommonStyle::hitTestComplexControl(cc, opt, pt, w);
+}
+
+QPixmap BaseStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap& pixmap, const QStyleOption* opt) const
+{
+ // Default icon highlight is way too subtle
+ if (iconMode == QIcon::Selected) {
+ QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ QPainter painter(&img);
+
+ painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
+
+ QColor color =
+ Phantom::DeriveColors::adjustLightness(opt->palette.color(QPalette::Normal, QPalette::Highlight), .25);
+ color.setAlphaF(0.25);
+ painter.fillRect(0, 0, img.width(), img.height(), color);
+
+ painter.end();
+
+ return QPixmap::fromImage(img);
+ }
+ return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt);
+}
+
+int BaseStyle::styleHint(StyleHint hint,
+ const QStyleOption* option,
+ const QWidget* widget,
+ QStyleHintReturn* returnData) const
+{
+ switch (hint) {
+ case SH_Slider_SnapToValue:
+ case SH_PrintDialog_RightAlignButtons:
+ case SH_FontDialog_SelectAssociatedText:
+ case SH_ComboBox_ListMouseTracking:
+ case SH_Slider_StopMouseOverSlider:
+ case SH_ScrollBar_MiddleClickAbsolutePosition:
+ case SH_TitleBar_AutoRaise:
+ case SH_TitleBar_NoBorder:
+ case SH_ItemView_ArrowKeysNavigateIntoChildren:
+ case SH_ItemView_ChangeHighlightOnFocus:
+ case SH_MenuBar_MouseTracking:
+ case SH_Menu_MouseTracking:
+ return 1;
+ case SH_Menu_SupportsSections:
+ return 0;
+#ifndef Q_OS_MAC
+ case SH_MenuBar_AltKeyNavigation:
+ return 1;
+#endif
+#if defined(QT_PLATFORM_UIKIT)
+ case SH_ComboBox_UseNativePopup:
+ return 1;
+#endif
+ case SH_ItemView_ShowDecorationSelected:
+ // QWindowsStyle does this as well -- QCommonStyle seems to have some
+ // internal confusion buried within its private implementation of laying
+ // out and drawing item views where it can't keep track of what's
+ // considered a decoration and what's not. For tree views, if you give 0
+ // for ShowDecorationSelected, it applies only to the disclosure indicator
+ // and not to the QIcon/pixmap that might be present for the item. So
+ // selecting an item in a tree view will have the selection color drawn
+ // underneath the icon/pixmap, but not the disclosure indicator. However,
+ // in list views, if you give 0 for ShowDecorationSelected, it will *not*
+ // draw the selection color underneath the icon/pixmap. There's no way to
+ // access this internal logic in QCommonStyle without fully reimplementing
+ // the huge mass of stuff for item view layout and drawing. Therefore, the
+ // best we can do is at least try to get consistent behavior: if it's a
+ // list view, just always return 1 for ShowDecorationSelected.
+ if (!Phantom::ShowItemViewDecorationSelected && qobject_cast<const QListView*>(widget))
+ return 1;
+ return Phantom::ShowItemViewDecorationSelected;
+ case SH_ItemView_MovementWithoutUpdatingSelection:
+ return 1;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
+ case SH_ItemView_ScrollMode:
+ return QAbstractItemView::ScrollPerPixel;
+#endif
+ case SH_ScrollBar_ContextMenu:
+#ifdef Q_OS_MAC
+ return 0;
+#else
+ return 1;
+#endif
+ // Some Linux distros might want to enable this, but it doesn't behave very
+ // consistently with varied QPalettes, depending on how the QPA and icons
+ // deal with both light and dark themes. It might seem weird to just disable
+ // this, but none of (Mac, Windows, BeOS/Haiku) show icons in dialog buttons,
+ // and the results on Linux are generally pretty messy -- not sure why it's
+ // historically been the default, especially when other button types
+ // generally don't have any icons.
+ case SH_DialogButtonBox_ButtonsHaveIcons:
+ return 0;
+ case SH_ScrollBar_Transient:
+ return 1;
+ case SH_EtchDisabledText:
+ case SH_DitherDisabledText:
+ case SH_ToolBox_SelectedPageTitleBold:
+ case SH_Menu_AllowActiveAndDisabled:
+ case SH_MainWindow_SpaceBelowMenuBar:
+ case SH_MessageBox_CenterButtons:
+ case SH_RubberBand_Mask:
+ case SH_ScrollView_FrameOnlyAroundContents:
+ return 0;
+ case SH_ComboBox_Popup: {
+ return Phantom::UseQMenuForComboBoxPopup;
+ // Fusion did this, but we don't because of font bugs (especially in high
+ // DPI) with the QMenu that the combo box will create instead of a dropdown
+ // view. See notes in CE_MenuItem for more details.
+ if (auto cmb = qstyleoption_cast<const QStyleOptionComboBox*>(option))
+ return !cmb->editable;
+ return 0;
+ }
+ case SH_Table_GridLineColor: {
+ using namespace Phantom::SwatchColors;
+ namespace Ph = Phantom;
+ if (!option)
+ return 0;
+ auto ph_swatchPtr = Ph::getCachedSwatchOfQPalette(&d->swatchCache, &d->headSwatchFastKey, option->palette);
+ const Ph::PhSwatch& swatch = *ph_swatchPtr.data();
+ // Qt code in table views for drawing grid lines is broken. See case for
+ // CE_ItemViewItem painting for more information.
+ return static_cast<int>(swatch.color(S_base_divider).rgb());
+ }
+ case SH_MessageBox_TextInteractionFlags:
+ return Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse;
+ case SH_WizardStyle:
+ return QWizard::ClassicStyle;
+ case SH_Menu_SubMenuPopupDelay:
+ // Returning 0 will break sloppy submenus even if they're enabled
+ return 10;
+ case SH_Menu_SloppySubMenus:
+ return true;
+ case SH_Menu_SubMenuSloppyCloseTimeout:
+ return 500;
+ case SH_Menu_SubMenuDontStartSloppyOnLeave:
+ return 1;
+ case SH_Menu_SubMenuSloppySelectOtherActions:
+ return 1;
+ case SH_Menu_SubMenuUniDirection:
+ return 1;
+ case SH_Menu_SubMenuUniDirectionFailCount:
+ return 1;
+ case SH_Menu_SubMenuResetWhenReenteringParent:
+ return 0;
+#ifdef Q_OS_MAC
+ case SH_Menu_FlashTriggeredItem:
+ return 1;
+ case SH_Menu_FadeOutOnHide:
+ return 0;
+#endif
+ case SH_WindowFrame_Mask:
+ return 0;
+ case SH_UnderlineShortcut: {
+ return false;
+ }
+ case SH_Widget_Animate:
+ return 1;
+ default:
+ break;
+ }
+ return QCommonStyle::styleHint(hint, option, widget, returnData);
+}
+
+QRect BaseStyle::subElementRect(SubElement sr, const QStyleOption* opt, const QWidget* w) const
+{
+ switch (sr) {
+ case SE_ProgressBarLabel:
+ case SE_ProgressBarContents:
+ case SE_ProgressBarGroove:
+ return opt->rect;
+ case SE_PushButtonFocusRect: {
+ QRect r = QCommonStyle::subElementRect(sr, opt, w);
+ r.adjust(0, 1, 0, -1);
+ return r;
+ }
+ case SE_DockWidgetTitleBarText: {
+ auto titlebar = qstyleoption_cast<const QStyleOptionDockWidget*>(opt);
+ if (!titlebar)
+ break;
+ QRect r = QCommonStyle::subElementRect(sr, opt, w);
+ bool verticalTitleBar = titlebar->verticalTitleBar;
+ if (verticalTitleBar) {
+ r.adjust(0, 0, 0, -4);
+ } else {
+ if (opt->direction == Qt::LeftToRight)
+ r.adjust(4, 0, 0, 0);
+ else
+ r.adjust(0, 0, -4, 0);
+ }
+ return r;
+ }
+ case SE_TreeViewDisclosureItem: {
+ if (Phantom::BranchesOnEdge) {
+ // Shove it all the way to the left (or right) side, probably outside of
+ // the rect it gave us. Old-school.
+ QRect rect = opt->rect;
+ if (opt->direction != Qt::RightToLeft) {
+ rect.moveLeft(0);
+ if (rect.width() < rect.height())
+ rect.setWidth(rect.height());
+ } else {
+ // todo
+ }
+ return rect;
+ }
+ break;
+ }
+ case SE_LineEditContents: {
+ QRect r = QCommonStyle::subElementRect(sr, opt, w);
+ int pad = Phantom::dpiScaled(Phantom::LineEdit_ContentsHPad);
+ return r.adjusted(pad, 0, -pad, 0);
+ }
+ default:
+ break;
+ }
+ return QCommonStyle::subElementRect(sr, opt, w);
+}
+
+// Table header layout reference
+// -----------------------------
+//
+// begin: QStyleOptionHeader::Beginning;
+// mid: QStyleOptionHeader::Middle;
+// end: QStyleOptionHeader::End;
+// one: QStyleOptionHeader::OnlyOneSection;
+// one*:
+// This is specified as QStyleOptionHeader::OnlyOneSection, but the call to
+// drawControl(CE_HeaderSection...) is being performed by an instance of
+// QTableCornerButton, defined in qtableview.cpp as a subclass of
+// QAbstractButton. Only table views can have these corner buttons, and they
+// only appear if there are both at least 1 column and 1 row visible.
+//
+// Configuration A: A table view with both columns and rows
+//
+// Configuration B: A list view, or a tree view, or a table view with no rows
+// in the data or all rows hidden, such that the corner button is also made
+// hidden.
+//
+// Configuration C: A table view with no columns in the data or all columns
+// hidden, such that the corner button is also made hidden.
+//
+// Configuration A, Left-to-right, 4x4
+// [ one* ][ begin ][ mid ][ mid ][ end ]
+// [ begin ]
+// [ mid ]
+// [ mid ]
+// [ end ]
+//
+// Configuration A, Left-to-right, 2x2
+// [ one* ][ begin ][ end ]
+// [ begin ]
+// [ end ]
+//
+// Configuration A, Left-to-right, 1x1
+// [ one* ][ one ]
+// [ one ]
+//
+// Configuration A, Right-to-left, 4x4
+// [ begin ][ mid ][ mid ][ end ][ one* ]
+// [ begin ]
+// [ mid ]
+// [ mid ]
+// [ end ]
+//
+// Configuration A, Right-to-left, 2x2
+// [ begin ][ end ][ one* ]
+// [ begin ]
+// [ end ]
+//
+// Configuration A, Right-to-left, 1x1
+// [ one ][ one* ]
+// [ one ]
+//
+// Configuration B, Left-to-right and right-to-left, 4 columns (table view:
+// 4 columns with 0 rows, list/tree view: 4 columns, rows count doesn't matter):
+// [ begin ][ mid ][ mid ][ end ]
+//
+// Configuration B, Left-to-right and right-to-left, 2 columns (table view:
+// 2 columns with 0 rows, list/tree view: 2 columns, rows count doesn't matter):
+// [ begin ][ end ]
+//
+// Configuration B, Left-to-right and right-to-left, 1 column (table view:
+// 1 column with 0 rows, list view: 1 column, rows count doesn't matter):
+// [ one ]
+//
+// Configuration C, left-to-right and right-to-left, table view with no columns
+// and 4 rows:
+// [ begin ]
+// [ mid ]
+// [ mid ]
+// [ end ]
+//
+// Configuration C, left-to-right and right-to-left, table view with no columns
+// and 2 rows:
+// [ begin ]
+// [ end ]
+//
+// Configuration C, left-to-right and right-to-left, table view with no columns
+// and 1 row:
+// [ one ]
diff --git a/src/gui/styles/base/BaseStyle.h b/src/gui/styles/base/BaseStyle.h
new file mode 100644
index 000000000..d6269fad7
--- /dev/null
+++ b/src/gui/styles/base/BaseStyle.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ * Copyright (C) 2019 Andrew Richards
+ *
+ * Derived from Phantomstyle and relicensed under the GPLv2 or v3.
+ * https://github.com/randrew/phantomstyle
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_BASESTYLE_H
+#define KEEPASSXC_BASESTYLE_H
+
+#include <QCommonStyle>
+
+class BaseStylePrivate;
+
+class BaseStyle : public QCommonStyle
+{
+ Q_OBJECT
+
+public:
+ BaseStyle();
+ ~BaseStyle() override;
+
+ enum PhantomPrimitiveElement
+ {
+ Phantom_PE_IndicatorTabNew = PE_CustomBase + 1,
+ Phantom_PE_ScrollBarSliderVertical,
+ Phantom_PE_WindowFrameColor,
+ };
+
+ QPalette standardPalette() const override;
+ void drawPrimitive(PrimitiveElement elem,
+ const QStyleOption* option,
+ QPainter* painter,
+ const QWidget* widget = nullptr) const override;
+ void
+ drawControl(ControlElement ce, const QStyleOption* option, QPainter* painter, const QWidget* widget) const override;
+ int pixelMetric(PixelMetric metric,
+ const QStyleOption* option = nullptr,
+ const QWidget* widget = nullptr) const override;
+ void drawComplexControl(ComplexControl control,
+ const QStyleOptionComplex* option,
+ QPainter* painter,
+ const QWidget* widget) const override;
+ QRect subElementRect(SubElement r, const QStyleOption* opt, const QWidget* widget = nullptr) const override;
+ QSize sizeFromContents(ContentsType type,
+ const QStyleOption* option,
+ const QSize& size,
+ const QWidget* widget) const override;
+ SubControl hitTestComplexControl(ComplexControl cc,
+ const QStyleOptionComplex* opt,
+ const QPoint& pt,
+ const QWidget* w = nullptr) const override;
+ QRect subControlRect(ComplexControl cc,
+ const QStyleOptionComplex* opt,
+ SubControl sc,
+ const QWidget* widget) const override;
+ QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap& pixmap, const QStyleOption* opt) const override;
+ int styleHint(StyleHint hint,
+ const QStyleOption* option = nullptr,
+ const QWidget* widget = nullptr,
+ QStyleHintReturn* returnData = nullptr) const override;
+ QRect itemPixmapRect(const QRect& r, int flags, const QPixmap& pixmap) const override;
+ void drawItemPixmap(QPainter* painter, const QRect& rect, int alignment, const QPixmap& pixmap) const override;
+ void drawItemText(QPainter* painter,
+ const QRect& rect,
+ int flags,
+ const QPalette& pal,
+ bool enabled,
+ const QString& text,
+ QPalette::ColorRole textRole = QPalette::NoRole) const override;
+
+ using QCommonStyle::polish;
+ void polish(QApplication* app) override;
+
+protected:
+ /**
+ * @return Paths to application stylesheets
+ */
+ virtual QString getAppStyleSheet() const
+ {
+ return {};
+ }
+
+ BaseStylePrivate* d;
+};
+
+#endif
diff --git a/src/gui/styles/base/basestyle.qss b/src/gui/styles/base/basestyle.qss
new file mode 100644
index 000000000..597a5b9e0
--- /dev/null
+++ b/src/gui/styles/base/basestyle.qss
@@ -0,0 +1,48 @@
+QPushButton:default {
+ background: palette(highlight);
+ color: palette(highlighted-text);
+}
+
+QSpinBox {
+ min-width: 90px;
+}
+
+QDialogButtonBox QPushButton {
+ min-width: 55px;
+}
+
+QCheckBox, QRadioButton {
+ spacing: 10px;
+}
+
+DatabaseWidget, GroupView {
+ background-color: palette(window);
+ border: none;
+}
+
+EntryPreviewWidget QLineEdit, EntryPreviewWidget QTextEdit {
+ background-color: palette(window);
+ border: none;
+}
+
+DatabaseOpenWidget #loginFrame {
+ border: 2px groove palette(mid);
+ background: palette(light);
+}
+
+QGroupBox {
+ margin-top: 1.4em;
+ margin-bottom: 1.4em;
+ font-weight: bold;
+}
+
+QGroupBox::title {
+ margin-top: -3.35em;
+ margin-left: -.4em;
+ subcontrol-origin: padding;
+}
+
+QToolTip {
+ border: none;
+ padding: 3px;
+}
diff --git a/src/gui/styles/base/phantomcolor.cpp b/src/gui/styles/base/phantomcolor.cpp
new file mode 100644
index 000000000..3689cfc3f
--- /dev/null
+++ b/src/gui/styles/base/phantomcolor.cpp
@@ -0,0 +1,423 @@
+/*
+ * HSLuv-C: Human-friendly HSL
+ * <http://github.com/hsluv/hsluv-c>
+ * <http://www.hsluv.org/>
+ *
+ * Copyright (c) 2015 Alexei Boronine (original idea, JavaScript implementation)
+ * Copyright (c) 2015 Roger Tallada (Obj-C implementation)
+ * Copyright (c) 2017 Martin Mitas (C implementation, based on Obj-C implementation)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "phantomcolor.h"
+#include <cfloat>
+#include <cmath>
+
+namespace Phantom
+{
+ namespace
+ {
+
+ // Th`ese declarations originate from hsluv.h, from the hsluv-c library. The
+ // hpluv functions have been removed, as they are unnecessary for Phantom.
+ /**
+ * Convert HSLuv to RGB.
+ *
+ * @param h Hue. Between 0.0 and 360.0.
+ * @param s Saturation. Between 0.0 and 100.0.
+ * @param l Lightness. Between 0.0 and 100.0.
+ * @param[out] pr Red component. Between 0.0 and 1.0.
+ * @param[out] pr Green component. Between 0.0 and 1.0.
+ * @param[out] pr Blue component. Between 0.0 and 1.0.
+ */
+ void hsluv2rgb(double h, double s, double l, double* pr, double* pg, double* pb);
+
+ /**
+ * Convert RGB to HSLuv.
+ *
+ * @param r Red component. Between 0.0 and 1.0.
+ * @param g Green component. Between 0.0 and 1.0.
+ * @param b Blue component. Between 0.0 and 1.0.
+ * @param[out] ph Hue. Between 0.0 and 360.0.
+ * @param[out] ps Saturation. Between 0.0 and 100.0.
+ * @param[out] pl Lightness. Between 0.0 and 100.0.
+ */
+ void rgb2hsluv(double r, double g, double b, double* ph, double* ps, double* pl);
+
+ // Contents below originate from hsluv.c from the hsluv-c library. They have
+ // been wrapped in a C++ namespace to avoid collisions and to reduce the
+ // translation unit count, and hsluv's own sRGB conversion code has been
+ // stripped out (sRGB conversion is now performed in the Phantom color code
+ // when going to/from the Rgb type.)
+ //
+ // If you need to update the hsluv-c code, be mindful of the removed sRGB
+ // conversions -- you will need to make similar modifications to the upstream
+ // hsluv-c code. Also note that that the hpluv (pastel) functions have been
+ // removed, as they are not used in Phantom.
+ typedef struct Triplet_tag Triplet;
+ struct Triplet_tag
+ {
+ double a;
+ double b;
+ double c;
+ };
+
+ /* for RGB */
+ const Triplet m[3] = {{3.24096994190452134377, -1.53738317757009345794, -0.49861076029300328366},
+ {-0.96924363628087982613, 1.87596750150772066772, 0.04155505740717561247},
+ {0.05563007969699360846, -0.20397695888897656435, 1.05697151424287856072}};
+
+ /* for XYZ */
+ const Triplet m_inv[3] = {{0.41239079926595948129, 0.35758433938387796373, 0.18048078840183428751},
+ {0.21263900587151035754, 0.71516867876775592746, 0.07219231536073371500},
+ {0.01933081871559185069, 0.11919477979462598791, 0.95053215224966058086}};
+
+ const double ref_u = 0.19783000664283680764;
+ const double ref_v = 0.46831999493879100370;
+
+ const double kappa = 903.29629629629629629630;
+ const double epsilon = 0.00885645167903563082;
+
+ typedef struct Bounds_tag Bounds;
+ struct Bounds_tag
+ {
+ double a;
+ double b;
+ };
+
+ void get_bounds(double l, Bounds bounds[6])
+ {
+ double tl = l + 16.0;
+ double sub1 = (tl * tl * tl) / 1560896.0;
+ double sub2 = (sub1 > epsilon ? sub1 : (l / kappa));
+ int channel;
+ int t;
+
+ for (channel = 0; channel < 3; channel++) {
+ double m1 = m[channel].a;
+ double m2 = m[channel].b;
+ double m3 = m[channel].c;
+
+ for (t = 0; t < 2; t++) {
+ double top1 = (284517.0 * m1 - 94839.0 * m3) * sub2;
+ double top2 = (838422.0 * m3 + 769860.0 * m2 + 731718.0 * m1) * l * sub2 - 769860.0 * t * l;
+ double bottom = (632260.0 * m3 - 126452.0 * m2) * sub2 + 126452.0 * t;
+
+ bounds[channel * 2 + t].a = top1 / bottom;
+ bounds[channel * 2 + t].b = top2 / bottom;
+ }
+ }
+ }
+
+ double ray_length_until_intersect(double theta, const Bounds* line)
+ {
+ return line->b / (sin(theta) - line->a * cos(theta));
+ }
+
+ double max_chroma_for_lh(double l, double h)
+ {
+ double min_len = DBL_MAX;
+ double hrad = h * 0.01745329251994329577; /* (2 * pi / 360) */
+ Bounds bounds[6];
+ int i;
+
+ get_bounds(l, bounds);
+ for (i = 0; i < 6; i++) {
+ double len = ray_length_until_intersect(hrad, &bounds[i]);
+
+ if (len >= 0 && len < min_len)
+ min_len = len;
+ }
+ return min_len;
+ }
+
+ double dot_product(const Triplet* t1, const Triplet* t2)
+ {
+ return (t1->a * t2->a + t1->b * t2->b + t1->c * t2->c);
+ }
+
+ void xyz2rgb(Triplet* in_out)
+ {
+ double r = dot_product(&m[0], in_out);
+ double g = dot_product(&m[1], in_out);
+ double b = dot_product(&m[2], in_out);
+ in_out->a = r;
+ in_out->b = g;
+ in_out->c = b;
+ }
+
+ void rgb2xyz(Triplet* in_out)
+ {
+ Triplet rgbl = {in_out->a, in_out->b, in_out->c};
+ double x = dot_product(&m_inv[0], &rgbl);
+ double y = dot_product(&m_inv[1], &rgbl);
+ double z = dot_product(&m_inv[2], &rgbl);
+ in_out->a = x;
+ in_out->b = y;
+ in_out->c = z;
+ }
+
+ /* http://en.wikipedia.org/wiki/CIELUV
+ * In these formulas, Yn refers to the reference white point. We are using
+ * illuminant D65, so Yn (see refY in Maxima file) equals 1. The formula is
+ * simplified accordingly.
+ */
+ double y2l(double y)
+ {
+ if (y <= epsilon) {
+ return y * kappa;
+ } else {
+ return 116.0 * cbrt(y) - 16.0;
+ }
+ }
+
+ double l2y(double l)
+ {
+ if (l <= 8.0) {
+ return l / kappa;
+ } else {
+ double x = (l + 16.0) / 116.0;
+ return (x * x * x);
+ }
+ }
+
+ void xyz2luv(Triplet* in_out)
+ {
+ double divisor = in_out->a + (15.0 * in_out->b) + (3.0 * in_out->c);
+ if (divisor <= 0.00000001) {
+ in_out->a = 0.0;
+ in_out->b = 0.0;
+ in_out->c = 0.0;
+ return;
+ }
+
+ double var_u = (4.0 * in_out->a) / divisor;
+ double var_v = (9.0 * in_out->b) / divisor;
+ double l = y2l(in_out->b);
+ double u = 13.0 * l * (var_u - ref_u);
+ double v = 13.0 * l * (var_v - ref_v);
+
+ in_out->a = l;
+ if (l < 0.00000001) {
+ in_out->b = 0.0;
+ in_out->c = 0.0;
+ } else {
+ in_out->b = u;
+ in_out->c = v;
+ }
+ }
+
+ void luv2xyz(Triplet* in_out)
+ {
+ if (in_out->a <= 0.00000001) {
+ /* Black will create a divide-by-zero error. */
+ in_out->a = 0.0;
+ in_out->b = 0.0;
+ in_out->c = 0.0;
+ return;
+ }
+
+ double var_u = in_out->b / (13.0 * in_out->a) + ref_u;
+ double var_v = in_out->c / (13.0 * in_out->a) + ref_v;
+ double y = l2y(in_out->a);
+ double x = -(9.0 * y * var_u) / ((var_u - 4.0) * var_v - var_u * var_v);
+ double z = (9.0 * y - (15.0 * var_v * y) - (var_v * x)) / (3.0 * var_v);
+ in_out->a = x;
+ in_out->b = y;
+ in_out->c = z;
+ }
+
+ void luv2lch(Triplet* in_out)
+ {
+ double l = in_out->a;
+ double u = in_out->b;
+ double v = in_out->c;
+ double h;
+ double c = sqrt(u * u + v * v);
+
+ /* Grays: disambiguate hue */
+ if (c < 0.00000001) {
+ h = 0;
+ } else {
+ h = atan2(v, u) * 57.29577951308232087680; /* (180 / pi) */
+ if (h < 0.0)
+ h += 360.0;
+ }
+
+ in_out->a = l;
+ in_out->b = c;
+ in_out->c = h;
+ }
+
+ void lch2luv(Triplet* in_out)
+ {
+ double hrad = in_out->c * 0.01745329251994329577; /* (pi / 180.0) */
+ double u = cos(hrad) * in_out->b;
+ double v = sin(hrad) * in_out->b;
+
+ in_out->b = u;
+ in_out->c = v;
+ }
+
+ void hsluv2lch(Triplet* in_out)
+ {
+ double h = in_out->a;
+ double s = in_out->b;
+ double l = in_out->c;
+ double c;
+
+ /* White and black: disambiguate chroma */
+ if (l > 99.9999999 || l < 0.00000001) {
+ c = 0.0;
+ } else {
+ c = max_chroma_for_lh(l, h) / 100.0 * s;
+ }
+
+ /* Grays: disambiguate hue */
+ if (s < 0.00000001)
+ h = 0.0;
+
+ in_out->a = l;
+ in_out->b = c;
+ in_out->c = h;
+ }
+
+ void lch2hsluv(Triplet* in_out)
+ {
+ double l = in_out->a;
+ double c = in_out->b;
+ double h = in_out->c;
+ double s;
+
+ /* White and black: disambiguate saturation */
+ if (l > 99.9999999 || l < 0.00000001) {
+ s = 0.0;
+ } else {
+ s = c / max_chroma_for_lh(l, h) * 100.0;
+ }
+
+ /* Grays: disambiguate hue */
+ if (c < 0.00000001)
+ h = 0.0;
+
+ in_out->a = h;
+ in_out->b = s;
+ in_out->c = l;
+ }
+
+ void hsluv2rgb(double h, double s, double l, double* pr, double* pg, double* pb)
+ {
+ Triplet tmp = {h, s, l};
+
+ hsluv2lch(&tmp);
+ lch2luv(&tmp);
+ luv2xyz(&tmp);
+ xyz2rgb(&tmp);
+
+ *pr = tmp.a;
+ *pg = tmp.b;
+ *pb = tmp.c;
+ }
+
+ void rgb2hsluv(double r, double g, double b, double* ph, double* ps, double* pl)
+ {
+ Triplet tmp = {r, g, b};
+
+ rgb2xyz(&tmp);
+ xyz2luv(&tmp);
+ luv2lch(&tmp);
+ lch2hsluv(&tmp);
+
+ *ph = tmp.a;
+ *ps = tmp.b;
+ *pl = tmp.c;
+ }
+
+ } // namespace
+} // namespace Phantom
+
+// The code below is for Phantom, and is used for the Rgb/Hsl-based interface
+// for color operations.
+namespace Phantom
+{
+ namespace
+ {
+ // Note: these constants might be out of range when qreal is defined as float
+ // instead of double.
+ inline qreal linear_of_srgb(qreal x)
+ {
+ return x < 0.0404482362771082 ? x / 12.92 : std::pow((x + 0.055) / 1.055, 2.4f);
+ }
+ inline qreal srgb_of_linear(qreal x)
+ {
+ return x < 0.00313066844250063 ? x * 12.92 : std::pow(x, 1.0 / 2.4) * 1.055 - 0.055;
+ }
+ } // namespace
+
+ Rgb rgb_of_qcolor(const QColor& color)
+ {
+ Rgb a;
+ a.r = linear_of_srgb(color.red() / 255.0);
+ a.g = linear_of_srgb(color.green() / 255.0);
+ a.b = linear_of_srgb(color.blue() / 255.0);
+ return a;
+ }
+
+ Hsl hsl_of_rgb(qreal r, qreal g, qreal b)
+ {
+ double h, s, l;
+ rgb2hsluv(r, g, b, &h, &s, &l);
+ s /= 100.0;
+ l /= 100.0;
+ return {h, s, l};
+ }
+
+ Rgb rgb_of_hsl(qreal h, qreal s, qreal l)
+ {
+ double r, g, b;
+ hsluv2rgb(h, s * 100.0, l * 100.0, &r, &g, &b);
+ return {r, g, b};
+ }
+
+ QColor qcolor_of_rgb(qreal r, qreal g, qreal b)
+ {
+ int r_ = static_cast<int>(std::lround(srgb_of_linear(r) * 255.0));
+ int g_ = static_cast<int>(std::lround(srgb_of_linear(g) * 255.0));
+ int b_ = static_cast<int>(std::lround(srgb_of_linear(b) * 255.0));
+ return {r_, g_, b_};
+ }
+
+ QColor lerpQColor(const QColor& x, const QColor& y, qreal a)
+ {
+ Rgb x_ = rgb_of_qcolor(x);
+ Rgb y_ = rgb_of_qcolor(y);
+ Rgb z = Rgb::lerp(x_, y_, a);
+ return qcolor_of_rgb(z.r, z.g, z.b);
+ }
+
+ Rgb Rgb::lerp(const Rgb& x, const Rgb& y, qreal a)
+ {
+ Rgb z;
+ z.r = (1.0 - a) * x.r + a * y.r;
+ z.g = (1.0 - a) * x.g + a * y.g;
+ z.b = (1.0 - a) * x.b + a * y.b;
+ return z;
+ }
+} // namespace Phantom
diff --git a/src/gui/styles/base/phantomcolor.h b/src/gui/styles/base/phantomcolor.h
new file mode 100644
index 000000000..f9573ba65
--- /dev/null
+++ b/src/gui/styles/base/phantomcolor.h
@@ -0,0 +1,165 @@
+/*
+ * HSLuv-C: Human-friendly HSL
+ * <http://github.com/hsluv/hsluv-c>
+ * <http://www.hsluv.org/>
+ *
+ * Copyright (c) 2015 Alexei Boronine (original idea, JavaScript implementation)
+ * Copyright (c) 2015 Roger Tallada (Obj-C implementation)
+ * Copyright (c) 2017 Martin Mitas (C implementation, based on Obj-C implementation)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef PHANTOMCOLOR_H
+#define PHANTOMCOLOR_H
+
+#include <QColor>
+
+namespace Phantom
+{
+ struct Rgb;
+ struct Hsl;
+
+ // A color presumed to be in linear space, represented as RGB. Values are in
+ // the range 0.0 - 1.0. Conversions to and from QColor will assume the QColor
+ // is in sRGB space, and sRGB conversion will be performed.
+ struct Rgb
+ {
+ qreal r, g, b;
+ Rgb()
+ {
+ }
+ Rgb(qreal r, qreal g, qreal b)
+ : r(r)
+ , g(g)
+ , b(b)
+ {
+ }
+
+ inline Hsl toHsl() const;
+ inline QColor toQColor() const;
+ static inline Rgb ofHsl(const Hsl&);
+ static inline Rgb ofQColor(const QColor&);
+
+ static Rgb lerp(const Rgb& x, const Rgb& y, qreal a);
+ };
+
+ // A color represented as pseudo-CIE hue, saturation, and lightness. Hue is in
+ // the range 0.0 - 360.0 (degrees). Lightness and saturation are in the range
+ // 0.0 - 1.0. Using this and making adjustments to the L value will produce
+ // more consistent and predictable results than QColor's .darker()/.lighter().
+ // Note that this is not strictly CIE -- some of the colorspace is distorted so
+ // that it can represented as a continuous coordinate space. Therefore not all
+ // adjustments to the parameters will produce perfectly linear results with
+ // regards to saturation and lightness. But it's still useful, and better than
+ // QColor's .darker()/.lighter(). Additionally, the L value is more useful for
+ // performing comparisons between two colors to measure relative and absolute
+ // brightness.
+ //
+ // See the documentation for the hsluv library for more information. (Note that
+ // for consistency we treat the S and L values in the range 0.0 - 1.0 instead
+ // of 0.0 - 100.0 like hsluv-c on its own does.)
+ struct Hsl
+ {
+ qreal h, s, l;
+ Hsl()
+ {
+ }
+ Hsl(qreal h, qreal s, qreal l)
+ : h(h)
+ , s(s)
+ , l(l)
+ {
+ }
+
+ inline Rgb toRgb() const;
+ inline QColor toQColor() const;
+ static inline Hsl ofRgb(const Rgb&);
+ static inline Hsl ofQColor(const QColor&);
+ };
+ Rgb rgb_of_qcolor(const QColor& color);
+ QColor qcolor_of_rgb(qreal r, qreal g, qreal b);
+ Hsl hsl_of_rgb(qreal r, qreal g, qreal b);
+ Rgb rgb_of_hsl(qreal h, qreal s, qreal l);
+
+ // Clip a floating point value to the range 0.0 - 1.0.
+ inline qreal saturate(qreal x)
+ {
+ if (x < 0.0)
+ return 0.0;
+ if (x > 1.0)
+ return 1.0;
+ return x;
+ }
+
+ inline qreal lerp(qreal x, qreal y, qreal a)
+ {
+ return (1.0 - a) * x + a * y;
+ }
+
+ // Linearly interpolate two QColors after trasnforming them to linear color
+ // space, treating the QColor values as if they were in sRGB space. The
+ // returned QColor is converted back to sRGB space.
+ QColor lerpQColor(const QColor& x, const QColor& y, qreal a);
+
+ Hsl Rgb::toHsl() const
+ {
+ return hsl_of_rgb(r, g, b);
+ }
+
+ QColor Rgb::toQColor() const
+ {
+ return qcolor_of_rgb(r, g, b);
+ }
+
+ Rgb Rgb::ofHsl(const Hsl& hsl)
+ {
+ return rgb_of_hsl(hsl.h, hsl.s, hsl.l);
+ }
+
+ Rgb Rgb::ofQColor(const QColor& color)
+ {
+ return rgb_of_qcolor(color);
+ }
+
+ Rgb Hsl::toRgb() const
+ {
+ return rgb_of_hsl(h, s, l);
+ }
+
+ QColor Hsl::toQColor() const
+ {
+ Rgb rgb = rgb_of_hsl(h, s, l);
+ return qcolor_of_rgb(rgb.r, rgb.g, rgb.b);
+ }
+
+ Hsl Hsl::ofRgb(const Rgb& rgb)
+ {
+ return hsl_of_rgb(rgb.r, rgb.g, rgb.b);
+ }
+
+ Hsl Hsl::ofQColor(const QColor& color)
+ {
+ Rgb rgb = rgb_of_qcolor(color);
+ return hsl_of_rgb(rgb.r, rgb.g, rgb.b);
+ }
+
+} // namespace Phantom
+
+#endif
diff --git a/src/gui/styles/dark/DarkStyle.cpp b/src/gui/styles/dark/DarkStyle.cpp
new file mode 100644
index 000000000..b8e548228
--- /dev/null
+++ b/src/gui/styles/dark/DarkStyle.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "DarkStyle.h"
+#include "gui/osutils/OSUtils.h"
+
+#include <QDialog>
+#include <QMainWindow>
+#include <QMenuBar>
+#include <QToolBar>
+
+QPalette DarkStyle::standardPalette() const
+{
+ auto palette = BaseStyle::standardPalette();
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0x3B3B3D));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0x404042));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0x424242));
+
+ palette.setColor(QPalette::Active, QPalette::WindowText, QRgb(0xCACBCE));
+ palette.setColor(QPalette::Inactive, QPalette::WindowText, QRgb(0xC8C8C6));
+ palette.setColor(QPalette::Disabled, QPalette::WindowText, QRgb(0x707070));
+
+ palette.setColor(QPalette::Active, QPalette::Text, QRgb(0xCACBCE));
+ palette.setColor(QPalette::Inactive, QPalette::Text, QRgb(0xC8C8C6));
+ palette.setColor(QPalette::Disabled, QPalette::Text, QRgb(0x707070));
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
+ palette.setColor(QPalette::Active, QPalette::PlaceholderText, QRgb(0x7D7D82));
+ palette.setColor(QPalette::Inactive, QPalette::PlaceholderText, QRgb(0x87888C));
+ palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QRgb(0x737373));
+#endif
+
+ palette.setColor(QPalette::Active, QPalette::BrightText, QRgb(0x252627));
+ palette.setColor(QPalette::Inactive, QPalette::BrightText, QRgb(0x2D2D2F));
+ palette.setColor(QPalette::Disabled, QPalette::BrightText, QRgb(0x333333));
+
+ palette.setColor(QPalette::Active, QPalette::Base, QRgb(0x27272A));
+ palette.setColor(QPalette::Inactive, QPalette::Base, QRgb(0x2A2A2D));
+ palette.setColor(QPalette::Disabled, QPalette::Base, QRgb(0x343437));
+
+ palette.setColor(QPalette::Active, QPalette::AlternateBase, QRgb(0x2C2C30));
+ palette.setColor(QPalette::Inactive, QPalette::AlternateBase, QRgb(0x2B2B2F));
+ palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QRgb(0x36363A));
+
+ palette.setColor(QPalette::All, QPalette::ToolTipBase, QRgb(0x2D532D));
+ palette.setColor(QPalette::All, QPalette::ToolTipText, QRgb(0xBFBFBF));
+
+ palette.setColor(QPalette::Active, QPalette::Button, QRgb(0x28282B));
+ palette.setColor(QPalette::Inactive, QPalette::Button, QRgb(0x28282B));
+ palette.setColor(QPalette::Disabled, QPalette::Button, QRgb(0x2B2A2A));
+
+ palette.setColor(QPalette::Active, QPalette::ButtonText, QRgb(0xB9B9BE));
+ palette.setColor(QPalette::Inactive, QPalette::ButtonText, QRgb(0x9E9FA5));
+ palette.setColor(QPalette::Disabled, QPalette::ButtonText, QRgb(0x73747E));
+
+ palette.setColor(QPalette::Active, QPalette::Highlight, QRgb(0x2D532D));
+ palette.setColor(QPalette::Inactive, QPalette::Highlight, QRgb(0x354637));
+ palette.setColor(QPalette::Disabled, QPalette::Highlight, QRgb(0x293D29));
+
+ palette.setColor(QPalette::Active, QPalette::HighlightedText, QRgb(0xCCCCCC));
+ palette.setColor(QPalette::Inactive, QPalette::HighlightedText, QRgb(0xCECECE));
+ palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QRgb(0x707070));
+
+ palette.setColor(QPalette::All, QPalette::Light, QRgb(0x414145));
+ palette.setColor(QPalette::All, QPalette::Midlight, QRgb(0x39393C));
+ palette.setColor(QPalette::All, QPalette::Mid, QRgb(0x2F2F32));
+ palette.setColor(QPalette::All, QPalette::Dark, QRgb(0x202022));
+ palette.setColor(QPalette::All, QPalette::Shadow, QRgb(0x19191A));
+
+ palette.setColor(QPalette::All, QPalette::Link, QRgb(0x68B668));
+ palette.setColor(QPalette::Disabled, QPalette::Link, QRgb(0x74A474));
+ palette.setColor(QPalette::All, QPalette::LinkVisited, QRgb(0x75B875));
+ palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QRgb(0x77A677));
+
+ return palette;
+}
+
+QString DarkStyle::getAppStyleSheet() const
+{
+ QFile extStylesheetFile(QStringLiteral(":/styles/dark/darkstyle.qss"));
+ if (extStylesheetFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ return extStylesheetFile.readAll();
+ }
+ qWarning("Failed to load dark theme stylesheet.");
+ return {};
+}
+
+void DarkStyle::polish(QWidget* widget)
+{
+ if (qobject_cast<QMainWindow*>(widget) || qobject_cast<QDialog*>(widget) || qobject_cast<QMenuBar*>(widget)
+ || qobject_cast<QToolBar*>(widget)) {
+ auto palette = widget->palette();
+#if defined(Q_OS_MACOS)
+ if (osUtils->isDarkMode()) {
+ // Let the Cocoa platform plugin draw its own background
+ palette.setColor(QPalette::All, QPalette::Window, Qt::transparent);
+ } else {
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0x2A2A2A));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0x2D2D2D));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0x2A2A2A));
+ }
+#elif defined(Q_OS_WIN)
+ // Register event filter for better dark mode support
+ WinUtils::registerEventFilters();
+ palette.setColor(QPalette::All, QPalette::Window, QRgb(0x2F2F30));
+#else
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0x2F2F30));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0x313133));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0x3A3A3B));
+#endif
+
+ widget->setPalette(palette);
+ }
+}
diff --git a/src/gui/styles/dark/DarkStyle.h b/src/gui/styles/dark/DarkStyle.h
new file mode 100644
index 000000000..9b955d3a5
--- /dev/null
+++ b/src/gui/styles/dark/DarkStyle.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_DARKSTYLE_H
+#define KEEPASSXC_DARKSTYLE_H
+
+#include "gui/styles/base/BaseStyle.h"
+#include <QApplication>
+
+class DarkStyle : public BaseStyle
+{
+ Q_OBJECT
+
+public:
+ QPalette standardPalette() const override;
+
+ using BaseStyle::polish;
+ void polish(QWidget* widget) override;
+
+protected:
+ QString getAppStyleSheet() const override;
+};
+
+#endif // KEEPASSXC_DARKSTYLE_H
diff --git a/src/gui/styles/dark/darkstyle.qss b/src/gui/styles/dark/darkstyle.qss
new file mode 100644
index 000000000..39ec32a2b
--- /dev/null
+++ b/src/gui/styles/dark/darkstyle.qss
@@ -0,0 +1,18 @@
+DatabaseWidget:!active, GroupView:!active,
+EntryPreviewWidget QLineEdit:!active, EntryPreviewWidget QTextEdit:!active {
+ background-color: #404042;
+}
+
+DatabaseWidget:disabled, GroupView:disabled,
+EntryPreviewWidget QLineEdit:disabled, EntryPreviewWidget QTextEdit:disabled {
+ background-color: #424242;
+}
+
+QToolTip {
+ color: #BFBFBF;
+ background-color: #2D532D;
+}
+
+QGroupBox {
+ background-color: palette(light);
+}
diff --git a/src/gui/styles/light/LightStyle.cpp b/src/gui/styles/light/LightStyle.cpp
new file mode 100644
index 000000000..8dd9d6c53
--- /dev/null
+++ b/src/gui/styles/light/LightStyle.cpp
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "LightStyle.h"
+#include "gui/ApplicationSettingsWidget.h"
+#include "gui/osutils/OSUtils.h"
+
+#include <QDialog>
+#include <QMainWindow>
+#include <QMenuBar>
+#include <QToolBar>
+
+QPalette LightStyle::standardPalette() const
+{
+ auto palette = BaseStyle::standardPalette();
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0xF7F7F7));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0xFCFCFC));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0xEDEDED));
+
+ palette.setColor(QPalette::Active, QPalette::WindowText, QRgb(0x1D1D20));
+ palette.setColor(QPalette::Inactive, QPalette::WindowText, QRgb(0x252528));
+ palette.setColor(QPalette::Disabled, QPalette::WindowText, QRgb(0x8C8C92));
+
+ palette.setColor(QPalette::Active, QPalette::Text, QRgb(0x1D1D20));
+ palette.setColor(QPalette::Inactive, QPalette::Text, QRgb(0x252528));
+ palette.setColor(QPalette::Disabled, QPalette::Text, QRgb(0x8C8C92));
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
+ palette.setColor(QPalette::Active, QPalette::PlaceholderText, QRgb(0x71727D));
+ palette.setColor(QPalette::Inactive, QPalette::PlaceholderText, QRgb(0x878893));
+ palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QRgb(0xA3A4AC));
+#endif
+
+ palette.setColor(QPalette::Active, QPalette::BrightText, QRgb(0xF3F3F4));
+ palette.setColor(QPalette::Inactive, QPalette::BrightText, QRgb(0xEAEAEB));
+ palette.setColor(QPalette::Disabled, QPalette::BrightText, QRgb(0xE4E5E7));
+
+ palette.setColor(QPalette::Active, QPalette::Base, QRgb(0xF9F9F9));
+ palette.setColor(QPalette::Inactive, QPalette::Base, QRgb(0xFCFCFC));
+ palette.setColor(QPalette::Disabled, QPalette::Base, QRgb(0xEFEFF2));
+
+ palette.setColor(QPalette::Active, QPalette::AlternateBase, QRgb(0xECF3E8));
+ palette.setColor(QPalette::Inactive, QPalette::AlternateBase, QRgb(0xF1F6EE));
+ palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QRgb(0xE1E9DD));
+
+ palette.setColor(QPalette::All, QPalette::ToolTipBase, QRgb(0x4D7F1A));
+ palette.setColor(QPalette::All, QPalette::ToolTipText, QRgb(0xF9F9F9));
+
+ palette.setColor(QPalette::Active, QPalette::Button, QRgb(0xD4D5DD));
+ palette.setColor(QPalette::Inactive, QPalette::Button, QRgb(0xDCDCE0));
+ palette.setColor(QPalette::Disabled, QPalette::Button, QRgb(0xE5E5E6));
+
+ palette.setColor(QPalette::Active, QPalette::ButtonText, QRgb(0x181A18));
+ palette.setColor(QPalette::Inactive, QPalette::ButtonText, QRgb(0x454A54));
+ palette.setColor(QPalette::Disabled, QPalette::ButtonText, QRgb(0x97979B));
+
+ palette.setColor(QPalette::Active, QPalette::Highlight, QRgb(0x507F1F));
+ palette.setColor(QPalette::Inactive, QPalette::Highlight, QRgb(0xA6BE8E));
+ palette.setColor(QPalette::Disabled, QPalette::Highlight, QRgb(0xC3D5B4));
+
+ palette.setColor(QPalette::Active, QPalette::HighlightedText, QRgb(0xFFFFFF));
+ palette.setColor(QPalette::Inactive, QPalette::HighlightedText, QRgb(0x252528));
+ palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QRgb(0x8C8C92));
+
+ palette.setColor(QPalette::All, QPalette::Light, QRgb(0xF9F9F9));
+ palette.setColor(QPalette::All, QPalette::Midlight, QRgb(0xE9E9EB));
+ palette.setColor(QPalette::All, QPalette::Mid, QRgb(0xC9C9CF));
+ palette.setColor(QPalette::All, QPalette::Dark, QRgb(0xBBBBC2));
+ palette.setColor(QPalette::All, QPalette::Shadow, QRgb(0x6C6D79));
+
+ palette.setColor(QPalette::All, QPalette::Link, QRgb(0x4B7B19));
+ palette.setColor(QPalette::Disabled, QPalette::Link, QRgb(0x4F6935));
+ palette.setColor(QPalette::All, QPalette::LinkVisited, QRgb(0x507826));
+ palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QRgb(0x506935));
+
+ return palette;
+}
+
+QString LightStyle::getAppStyleSheet() const
+{
+ QFile extStylesheetFile(QStringLiteral(":/styles/light/lightstyle.qss"));
+ if (extStylesheetFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ return extStylesheetFile.readAll();
+ }
+ qWarning("Failed to load light theme stylesheet.");
+ return {};
+}
+
+void LightStyle::polish(QWidget* widget)
+{
+ if (qobject_cast<QMainWindow*>(widget) || qobject_cast<QDialog*>(widget) || qobject_cast<QMenuBar*>(widget)
+ || qobject_cast<QToolBar*>(widget)) {
+ auto palette = widget->palette();
+#if defined(Q_OS_MACOS)
+ if (!osUtils->isDarkMode()) {
+ // Let the Cocoa platform plugin draw its own background
+ palette.setColor(QPalette::All, QPalette::Window, Qt::transparent);
+ } else {
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0xD6D6D6));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0xF6F6F6));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0xD4D4D4));
+ }
+#elif defined(Q_OS_WIN)
+ palette.setColor(QPalette::All, QPalette::Window, QRgb(0xFFFFFF));
+#else
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0xEFF0F1));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0xEFF0F1));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0xE1E2E4));
+#endif
+
+ widget->setPalette(palette);
+ }
+}
diff --git a/src/gui/styles/light/LightStyle.h b/src/gui/styles/light/LightStyle.h
new file mode 100644
index 000000000..d2d4f48a3
--- /dev/null
+++ b/src/gui/styles/light/LightStyle.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_LIGHTSTYLE_H
+#define KEEPASSXC_LIGHTSTYLE_H
+
+#include "gui/styles/base/BaseStyle.h"
+#include <QApplication>
+
+class LightStyle : public BaseStyle
+{
+ Q_OBJECT
+
+public:
+ QPalette standardPalette() const override;
+
+ using BaseStyle::polish;
+ void polish(QWidget* widget) override;
+
+protected:
+ QString getAppStyleSheet() const override;
+};
+
+#endif // KEEPASSXC_LIGHTSTYLE_H
diff --git a/src/gui/styles/light/lightstyle.qss b/src/gui/styles/light/lightstyle.qss
new file mode 100644
index 000000000..079907d15
--- /dev/null
+++ b/src/gui/styles/light/lightstyle.qss
@@ -0,0 +1,18 @@
+DatabaseWidget:!active, GroupView:!active,
+EntryPreviewWidget QLineEdit:!active, EntryPreviewWidget QTextEdit:!active {
+ background-color: #FCFCFC;
+}
+
+DatabaseWidget:disabled, GroupView:disabled,
+EntryPreviewWidget QLineEdit:disabled, EntryPreviewWidget QTextEdit:disabled {
+ background-color: #EDEDED;
+}
+
+QGroupBox::title {
+ color: #4B7B19;
+}
+
+QToolTip {
+ color: #F9F9F9;
+ background-color: #4D7F1A;
+}
diff --git a/src/gui/styles/styles.qrc b/src/gui/styles/styles.qrc
new file mode 100644
index 000000000..c8e9057dc
--- /dev/null
+++ b/src/gui/styles/styles.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+ <qresource prefix="/styles">
+ <file>base/basestyle.qss</file>
+ <file>dark/darkstyle.qss</file>
+ <file>light/lightstyle.qss</file>
+ </qresource>
+</RCC>
diff --git a/src/gui/widgets/ElidedLabel.cpp b/src/gui/widgets/ElidedLabel.cpp
index 749f075c8..5e71fbceb 100644
--- a/src/gui/widgets/ElidedLabel.cpp
+++ b/src/gui/widgets/ElidedLabel.cpp
@@ -56,8 +56,9 @@ QString ElidedLabel::url() const
void ElidedLabel::setElideMode(Qt::TextElideMode elideMode)
{
- if (m_elideMode == elideMode)
+ if (m_elideMode == elideMode) {
return;
+ }
if (m_elideMode != Qt::ElideNone) {
setWordWrap(false);
@@ -69,8 +70,9 @@ void ElidedLabel::setElideMode(Qt::TextElideMode elideMode)
void ElidedLabel::setRawText(const QString& elidedText)
{
- if (m_rawText == elidedText)
+ if (m_rawText == elidedText) {
return;
+ }
m_rawText = elidedText;
emit rawTextChanged(m_rawText);
@@ -78,8 +80,9 @@ void ElidedLabel::setRawText(const QString& elidedText)
void ElidedLabel::setUrl(const QString& url)
{
- if (m_url == url)
+ if (m_url == url) {
return;
+ }
m_url = url;
emit urlChanged(m_url);
diff --git a/src/gui/widgets/PopupHelpWidget.cpp b/src/gui/widgets/PopupHelpWidget.cpp
index 269c31c5b..2a604dce9 100644
--- a/src/gui/widgets/PopupHelpWidget.cpp
+++ b/src/gui/widgets/PopupHelpWidget.cpp
@@ -23,27 +23,22 @@
PopupHelpWidget::PopupHelpWidget(QWidget* parent)
: QFrame(parent)
- , m_parentWindow(parent->window())
, m_appWindow(getMainWindow())
, m_offset({0, 0})
, m_corner(Qt::BottomLeftCorner)
{
Q_ASSERT(parent);
-#ifdef Q_OS_MACOS
- setWindowFlags(Qt::FramelessWindowHint | Qt::Drawer);
-#else
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
-#endif
hide();
m_appWindow->installEventFilter(this);
- parent->installEventFilter(this);
+ parentWidget()->installEventFilter(this);
}
PopupHelpWidget::~PopupHelpWidget()
{
- m_parentWindow->removeEventFilter(this);
+ m_appWindow->removeEventFilter(this);
parentWidget()->removeEventFilter(this);
}
@@ -65,10 +60,10 @@ void PopupHelpWidget::setPosition(Qt::Corner corner)
bool PopupHelpWidget::eventFilter(QObject* obj, QEvent* event)
{
- if (obj == parentWidget() && event->type() == QEvent::FocusOut) {
- hide();
- } else if (obj == m_appWindow && (event->type() == QEvent::Move || event->type() == QEvent::Resize)) {
- if (isVisible()) {
+ if (isVisible()) {
+ if (obj == parentWidget() && event->type() == QEvent::FocusOut && qApp->focusWindow() != windowHandle()) {
+ hide();
+ } else if (obj == m_appWindow && (event->type() == QEvent::Move || event->type() == QEvent::Resize)) {
alignWithParent();
}
}
@@ -83,21 +78,22 @@ void PopupHelpWidget::showEvent(QShowEvent* event)
void PopupHelpWidget::alignWithParent()
{
- QPoint pos;
+ QPoint pos = m_offset;
switch (m_corner) {
case Qt::TopLeftCorner:
- pos = parentWidget()->geometry().topLeft() + m_offset - QPoint(0, height());
+ pos += QPoint(0, -height());
break;
case Qt::TopRightCorner:
- pos = parentWidget()->geometry().topRight() + m_offset - QPoint(width(), height());
+ pos += QPoint(parentWidget()->width(), -height());
break;
case Qt::BottomRightCorner:
- pos = parentWidget()->geometry().bottomRight() + m_offset - QPoint(width(), 0);
+ pos += QPoint(parentWidget()->width(), parentWidget()->height());
break;
+ case Qt::BottomLeftCorner:
default:
- pos = parentWidget()->geometry().bottomLeft() + m_offset;
+ pos += QPoint(0, parentWidget()->height());
break;
}
- move(m_parentWindow->mapToGlobal(pos));
-} \ No newline at end of file
+ move(parentWidget()->mapToGlobal(pos));
+}
diff --git a/src/gui/widgets/PopupHelpWidget.h b/src/gui/widgets/PopupHelpWidget.h
index 3c02ccc1a..353121c6a 100644
--- a/src/gui/widgets/PopupHelpWidget.h
+++ b/src/gui/widgets/PopupHelpWidget.h
@@ -37,7 +37,6 @@ protected:
private:
void alignWithParent();
- QPointer<QWidget> m_parentWindow;
QPointer<QWidget> m_appWindow;
QPoint m_offset;
diff --git a/src/gui/wizard/NewDatabaseWizard.cpp b/src/gui/wizard/NewDatabaseWizard.cpp
index eaadc53ff..45ac8e46d 100644
--- a/src/gui/wizard/NewDatabaseWizard.cpp
+++ b/src/gui/wizard/NewDatabaseWizard.cpp
@@ -16,16 +16,18 @@
*/
#include "NewDatabaseWizard.h"
+#include "NewDatabaseWizardPageDatabaseKey.h"
#include "NewDatabaseWizardPageEncryption.h"
-#include "NewDatabaseWizardPageMasterKey.h"
#include "NewDatabaseWizardPageMetaData.h"
#include "core/Database.h"
-#include "core/FilePath.h"
#include "core/Global.h"
#include "core/Group.h"
+#include "core/Resources.h"
#include "format/KeePass2.h"
+#include <QFrame>
+#include <QPalette>
#include <QVBoxLayout>
NewDatabaseWizard::NewDatabaseWizard(QWidget* parent)
@@ -39,7 +41,7 @@ NewDatabaseWizard::NewDatabaseWizard(QWidget* parent)
// clang-format off
m_pages << new NewDatabaseWizardPageMetaData()
<< new NewDatabaseWizardPageEncryption()
- << new NewDatabaseWizardPageMasterKey();
+ << new NewDatabaseWizardPageDatabaseKey();
// clang-format on
for (const auto& page : asConst(m_pages)) {
@@ -48,7 +50,21 @@ NewDatabaseWizard::NewDatabaseWizard(QWidget* parent)
setWindowTitle(tr("Create a new KeePassXC database..."));
- setPixmap(QWizard::BackgroundPixmap, QPixmap(filePath()->dataPath("wizard/background-pixmap.png")));
+ Q_INIT_RESOURCE(wizard);
+ setPixmap(QWizard::BackgroundPixmap, QPixmap(":/wizard/background-pixmap.png"));
+
+ // Fix MacStyle QWizard page frame too bright in dark mode (QTBUG-70346, QTBUG-71696)
+ QPalette defaultPalette;
+ auto windowColor = defaultPalette.color(QPalette::Window);
+ windowColor.setAlpha(153);
+ auto baseColor = defaultPalette.color(QPalette::Base);
+ baseColor.setAlpha(153);
+
+ auto* pageFrame = findChildren<QFrame*>()[0];
+ auto framePalette = pageFrame->palette();
+ framePalette.setBrush(QPalette::Window, windowColor.lighter(120));
+ framePalette.setBrush(QPalette::Base, baseColor.lighter(120));
+ pageFrame->setPalette(framePalette);
}
NewDatabaseWizard::~NewDatabaseWizard()
@@ -57,11 +73,7 @@ NewDatabaseWizard::~NewDatabaseWizard()
bool NewDatabaseWizard::validateCurrentPage()
{
- bool ok = m_pages[currentId()]->validatePage();
- if (ok && currentId() == m_pages.size() - 1) {
- m_db->setInitialized(true);
- }
- return ok;
+ return m_pages[currentId()]->validatePage();
}
/**
diff --git a/src/gui/wizard/NewDatabaseWizardPage.ui b/src/gui/wizard/NewDatabaseWizardPage.ui
index 6b69e85b5..e920b26ed 100644
--- a/src/gui/wizard/NewDatabaseWizardPage.ui
+++ b/src/gui/wizard/NewDatabaseWizardPage.ui
@@ -12,7 +12,7 @@
<string>WizardPage</string>
</property>
<property name="title">
- <string>En&amp;cryption Settings</string>
+ <string>Encryption Settings</string>
</property>
<property name="subTitle">
<string>Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings.</string>
diff --git a/src/gui/wizard/NewDatabaseWizardPageMasterKey.cpp b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp
index 130560e27..3180400c0 100644
--- a/src/gui/wizard/NewDatabaseWizardPageMasterKey.cpp
+++ b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp
@@ -15,27 +15,27 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "NewDatabaseWizardPageMasterKey.h"
-#include "gui/dbsettings/DatabaseSettingsWidgetMasterKey.h"
+#include "NewDatabaseWizardPageDatabaseKey.h"
+#include "gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h"
#include <QApplication>
-NewDatabaseWizardPageMasterKey::NewDatabaseWizardPageMasterKey(QWidget* parent)
+NewDatabaseWizardPageDatabaseKey::NewDatabaseWizardPageDatabaseKey(QWidget* parent)
: NewDatabaseWizardPage(parent)
{
- setPageWidget(new DatabaseSettingsWidgetMasterKey());
+ setPageWidget(new DatabaseSettingsWidgetDatabaseKey());
- setTitle(tr("Database Master Key"));
- setSubTitle(tr("A master key known only to you protects your database."));
+ setTitle(tr("Database Credentials"));
+ setSubTitle(tr("A set of credentials known only to you that protects your database."));
connect(pageWidget(), SIGNAL(sizeChanged()), SLOT(updateWindowSize()));
}
-NewDatabaseWizardPageMasterKey::~NewDatabaseWizardPageMasterKey()
+NewDatabaseWizardPageDatabaseKey::~NewDatabaseWizardPageDatabaseKey()
{
}
-void NewDatabaseWizardPageMasterKey::updateWindowSize()
+void NewDatabaseWizardPageDatabaseKey::updateWindowSize()
{
// ugly workaround for QWizard not managing to react to size changes automatically
- QApplication::activeWindow()->adjustSize();
+ window()->adjustSize();
}
diff --git a/src/gui/wizard/NewDatabaseWizardPageMasterKey.h b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h
index 3b5072846..e0fb5349e 100644
--- a/src/gui/wizard/NewDatabaseWizardPageMasterKey.h
+++ b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h
@@ -15,22 +15,22 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEEPASSXC_NEWDATABASEWIZARDPAGEMASTERKEY_H
-#define KEEPASSXC_NEWDATABASEWIZARDPAGEMASTERKEY_H
+#ifndef KEEPASSXC_NEWDATABASEWIZARDPAGEDATABASEKEY_H
+#define KEEPASSXC_NEWDATABASEWIZARDPAGEDATABASEKEY_H
#include "NewDatabaseWizardPage.h"
-class NewDatabaseWizardPageMasterKey : public NewDatabaseWizardPage
+class NewDatabaseWizardPageDatabaseKey : public NewDatabaseWizardPage
{
Q_OBJECT
public:
- explicit NewDatabaseWizardPageMasterKey(QWidget* parent = nullptr);
- Q_DISABLE_COPY(NewDatabaseWizardPageMasterKey);
- ~NewDatabaseWizardPageMasterKey() override;
+ explicit NewDatabaseWizardPageDatabaseKey(QWidget* parent = nullptr);
+ Q_DISABLE_COPY(NewDatabaseWizardPageDatabaseKey);
+ ~NewDatabaseWizardPageDatabaseKey() override;
private slots:
void updateWindowSize();
};
-#endif // KEEPASSXC_NEWDATABASEWIZARDPAGEMASTERKEY_H
+#endif // KEEPASSXC_NEWDATABASEWIZARDPAGEDATABASEKEY_H
diff --git a/src/keeshare/DatabaseSettingsPageKeeShare.cpp b/src/keeshare/DatabaseSettingsPageKeeShare.cpp
index 12ac2ad9e..fca32e247 100644
--- a/src/keeshare/DatabaseSettingsPageKeeShare.cpp
+++ b/src/keeshare/DatabaseSettingsPageKeeShare.cpp
@@ -18,8 +18,8 @@
#include "DatabaseSettingsPageKeeShare.h"
#include "core/Database.h"
-#include "core/FilePath.h"
#include "core/Group.h"
+#include "core/Resources.h"
#include "keeshare/DatabaseSettingsWidgetKeeShare.h"
#include "keeshare/KeeShare.h"
@@ -32,7 +32,7 @@ QString DatabaseSettingsPageKeeShare::name()
QIcon DatabaseSettingsPageKeeShare::icon()
{
- return FilePath::instance()->icon("apps", "preferences-system-network-sharing");
+ return Resources::instance()->icon("preferences-system-network-sharing");
}
QWidget* DatabaseSettingsPageKeeShare::createWidget()
diff --git a/src/keeshare/KeeShare.cpp b/src/keeshare/KeeShare.cpp
index 3199f355c..31136a5c4 100644
--- a/src/keeshare/KeeShare.cpp
+++ b/src/keeshare/KeeShare.cpp
@@ -16,7 +16,6 @@
*/
#include "KeeShare.h"
-#include "core/Config.h"
#include "core/CustomData.h"
#include "core/Database.h"
#include "core/DatabaseIcons.h"
@@ -33,10 +32,7 @@
namespace
{
static const QString KeeShare_Reference("KeeShare/Reference");
- static const QString KeeShare_Own("KeeShare/Settings.own");
- static const QString KeeShare_Foreign("KeeShare/Settings.foreign");
- static const QString KeeShare_Active("KeeShare/Settings.active");
-} // namespace
+}
KeeShare* KeeShare::m_instance = nullptr;
@@ -52,7 +48,7 @@ KeeShare* KeeShare::instance()
KeeShare::KeeShare(QObject* parent)
: QObject(parent)
{
- connect(config(), SIGNAL(changed(QString)), SLOT(handleSettingsChanged(QString)));
+ connect(config(), &Config::changed, this, &KeeShare::handleSettingsChanged);
}
void KeeShare::init(QObject* parent)
@@ -63,32 +59,32 @@ void KeeShare::init(QObject* parent)
KeeShareSettings::Own KeeShare::own()
{
- return KeeShareSettings::Own::deserialize(config()->get(KeeShare_Own).toString());
+ return KeeShareSettings::Own::deserialize(config()->get(Config::KeeShare_Own).toString());
}
KeeShareSettings::Active KeeShare::active()
{
- return KeeShareSettings::Active::deserialize(config()->get(KeeShare_Active).toString());
+ return KeeShareSettings::Active::deserialize(config()->get(Config::KeeShare_Active).toString());
}
KeeShareSettings::Foreign KeeShare::foreign()
{
- return KeeShareSettings::Foreign::deserialize(config()->get(KeeShare_Foreign).toString());
+ return KeeShareSettings::Foreign::deserialize(config()->get(Config::KeeShare_Foreign).toString());
}
void KeeShare::setForeign(const KeeShareSettings::Foreign& foreign)
{
- config()->set(KeeShare_Foreign, KeeShareSettings::Foreign::serialize(foreign));
+ config()->set(Config::KeeShare_Foreign, KeeShareSettings::Foreign::serialize(foreign));
}
void KeeShare::setActive(const KeeShareSettings::Active& active)
{
- config()->set(KeeShare_Active, KeeShareSettings::Active::serialize(active));
+ config()->set(Config::KeeShare_Active, KeeShareSettings::Active::serialize(active));
}
void KeeShare::setOwn(const KeeShareSettings::Own& own)
{
- config()->set(KeeShare_Own, KeeShareSettings::Own::serialize(own));
+ config()->set(Config::KeeShare_Own, KeeShareSettings::Own::serialize(own));
}
bool KeeShare::isShared(const Group* group)
@@ -121,8 +117,7 @@ void KeeShare::setReferenceTo(Group* group, const KeeShareSettings::Reference& r
return;
}
const auto serialized = KeeShareSettings::Reference::serialize(reference);
- const auto encoded = serialized.toUtf8().toBase64();
- customData->set(KeeShare_Reference, encoded);
+ customData->set(KeeShare_Reference, serialized.toUtf8().toBase64());
}
bool KeeShare::isEnabled(const Group* group)
@@ -195,15 +190,11 @@ QPixmap KeeShare::indicatorBadge(const Group* group, QPixmap pixmap)
if (!isShared(group)) {
return pixmap;
}
- const QPixmap badge = isEnabled(group) ? databaseIcons()->iconPixmap(DatabaseIcons::SharedIconIndex)
- : databaseIcons()->iconPixmap(DatabaseIcons::UnsharedIconIndex);
- QImage canvas = pixmap.toImage();
- const QRectF target(canvas.width() * 0.4, canvas.height() * 0.4, canvas.width() * 0.6, canvas.height() * 0.6);
- QPainter painter(&canvas);
- painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
- painter.drawPixmap(target, badge, badge.rect());
- pixmap.convertFromImage(canvas);
- return pixmap;
+
+ if (isEnabled(group)) {
+ return databaseIcons()->applyBadge(pixmap, DatabaseIcons::Badges::ShareActive);
+ }
+ return databaseIcons()->applyBadge(pixmap, DatabaseIcons::Badges::ShareInactive);
}
QString KeeShare::referenceTypeLabel(const KeeShareSettings::Reference& reference)
@@ -263,9 +254,9 @@ bool KeeShare::isContainerType(const QFileInfo& fileInfo, const QString type)
return fileInfo.fileName().endsWith(type, Qt::CaseInsensitive);
}
-void KeeShare::handleSettingsChanged(const QString& key)
+void KeeShare::handleSettingsChanged(Config::ConfigKey key)
{
- if (key == KeeShare_Active) {
+ if (key == Config::KeeShare_Active) {
emit activeChanged();
}
}
diff --git a/src/keeshare/KeeShare.h b/src/keeshare/KeeShare.h
index 597ce73a6..952711dbf 100644
--- a/src/keeshare/KeeShare.h
+++ b/src/keeshare/KeeShare.h
@@ -21,6 +21,7 @@
#include <QMap>
#include <QUuid>
+#include "core/Config.h"
#include "gui/MessageWidget.h"
#include "keeshare/KeeShareSettings.h"
@@ -70,7 +71,7 @@ signals:
void sharingMessage(QString, MessageWidget::MessageType);
private slots:
- void handleSettingsChanged(const QString&);
+ void handleSettingsChanged(Config::ConfigKey key);
private:
static KeeShare* m_instance;
diff --git a/src/keeshare/SettingsPageKeeShare.cpp b/src/keeshare/SettingsPageKeeShare.cpp
index 04a0f1058..a74c4a411 100644
--- a/src/keeshare/SettingsPageKeeShare.cpp
+++ b/src/keeshare/SettingsPageKeeShare.cpp
@@ -18,8 +18,8 @@
#include "SettingsPageKeeShare.h"
#include "core/Database.h"
-#include "core/FilePath.h"
#include "core/Group.h"
+#include "core/Resources.h"
#include "gui/DatabaseTabWidget.h"
#include "gui/MessageWidget.h"
#include "keeshare/KeeShare.h"
@@ -39,7 +39,7 @@ QString SettingsPageKeeShare::name()
QIcon SettingsPageKeeShare::icon()
{
- return FilePath::instance()->icon("apps", "preferences-system-network-sharing");
+ return Resources::instance()->icon("preferences-system-network-sharing");
}
QWidget* SettingsPageKeeShare::createWidget()
diff --git a/src/keeshare/SettingsWidgetKeeShare.cpp b/src/keeshare/SettingsWidgetKeeShare.cpp
index 2ae8b0889..424e78c4b 100644
--- a/src/keeshare/SettingsWidgetKeeShare.cpp
+++ b/src/keeshare/SettingsWidgetKeeShare.cpp
@@ -120,7 +120,7 @@ void SettingsWidgetKeeShare::saveSettings()
KeeShare::setForeign(m_foreign);
KeeShare::setActive(active);
- config()->set("KeeShare/QuietSuccess", m_ui->quietSuccessCheckBox->isChecked());
+ config()->set(Config::KeeShare_QuietSuccess, m_ui->quietSuccessCheckBox->isChecked());
}
void SettingsWidgetKeeShare::setVerificationExporter(const QString& signer)
@@ -140,7 +140,7 @@ void SettingsWidgetKeeShare::generateCertificate()
void SettingsWidgetKeeShare::importCertificate()
{
- QString defaultDirPath = config()->get("KeeShare/LastKeyDir").toString();
+ QString defaultDirPath = config()->get(Config::KeeShare_LastKeyDir).toString();
const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists();
if (!dirExists) {
defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first();
@@ -157,7 +157,7 @@ void SettingsWidgetKeeShare::importCertificate()
QTextStream stream(&file);
m_own = KeeShareSettings::Own::deserialize(stream.readAll());
file.close();
- config()->set("KeeShare/LastKeyDir", QFileInfo(filename).absolutePath());
+ config()->set(Config::KeeShare_LastKeyDir, QFileInfo(filename).absolutePath());
updateOwnCertificate();
}
@@ -178,7 +178,7 @@ void SettingsWidgetKeeShare::exportCertificate()
return;
}
}
- QString defaultDirPath = config()->get("KeeShare/LastKeyDir").toString();
+ QString defaultDirPath = config()->get(Config::KeeShare_LastKeyDir).toString();
const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists();
if (!dirExists) {
defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first();
@@ -197,7 +197,7 @@ void SettingsWidgetKeeShare::exportCertificate()
stream << KeeShareSettings::Own::serialize(m_own);
stream.flush();
file.close();
- config()->set("KeeShare/LastKeyDir", QFileInfo(filename).absolutePath());
+ config()->set(Config::KeeShare_LastKeyDir, QFileInfo(filename).absolutePath());
}
void SettingsWidgetKeeShare::trustSelectedCertificates()
diff --git a/src/keeshare/SettingsWidgetKeeShare.ui b/src/keeshare/SettingsWidgetKeeShare.ui
index 0840c9747..44fb9f1da 100644
--- a/src/keeshare/SettingsWidgetKeeShare.ui
+++ b/src/keeshare/SettingsWidgetKeeShare.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>378</width>
- <height>508</height>
+ <height>511</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0">
@@ -80,11 +80,17 @@
<string>Own certificate</string>
</property>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,1,1">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
<item row="5" column="0">
<widget class="QLabel" name="ownCertificateFingerprintLabel">
<property name="text">
<string>Fingerprint:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
<item row="3" column="1" colspan="2">
@@ -102,6 +108,9 @@
<property name="text">
<string>Certificate:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
<item row="2" column="0">
@@ -109,6 +118,9 @@
<property name="text">
<string>Signer:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
<item row="3" column="0">
@@ -116,6 +128,9 @@
<property name="text">
<string>Key:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
<item row="4" column="1" colspan="2">
@@ -310,6 +325,23 @@
</item>
</layout>
</widget>
+ <tabstops>
+ <tabstop>enableImportCheckBox</tabstop>
+ <tabstop>quietSuccessCheckBox</tabstop>
+ <tabstop>enableExportCheckBox</tabstop>
+ <tabstop>generateOwnCerticateButton</tabstop>
+ <tabstop>importOwnCertificateButton</tabstop>
+ <tabstop>exportOwnCertificateButton</tabstop>
+ <tabstop>ownCertificateSignerEdit</tabstop>
+ <tabstop>ownCertificatePrivateKeyEdit</tabstop>
+ <tabstop>ownCertificatePublicKeyEdit</tabstop>
+ <tabstop>ownCertificateFingerprintEdit</tabstop>
+ <tabstop>trustImportedCertificateButton</tabstop>
+ <tabstop>askImportedCertificateButton</tabstop>
+ <tabstop>untrustImportedCertificateButton</tabstop>
+ <tabstop>removeImportedCertificateButton</tabstop>
+ <tabstop>importedCertificateTableView</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/keeshare/ShareExport.cpp b/src/keeshare/ShareExport.cpp
index c17c5052c..c1797ac6d 100644
--- a/src/keeshare/ShareExport.cpp
+++ b/src/keeshare/ShareExport.cpp
@@ -72,12 +72,12 @@ namespace
const auto sourceEntries = sourceRoot->entriesRecursive(false);
for (const Entry* sourceEntry : sourceEntries) {
auto* targetEntry = sourceEntry->clone(Entry::CloneIncludeHistory);
- const bool updateTimeinfo = targetEntry->canUpdateTimeinfo();
+ const bool updateTimeinfoEntry = targetEntry->canUpdateTimeinfo();
targetEntry->setUpdateTimeinfo(false);
targetEntry->setGroup(targetRoot);
- targetEntry->setUpdateTimeinfo(updateTimeinfo);
+ targetEntry->setUpdateTimeinfo(updateTimeinfoEntry);
const auto iconUuid = targetEntry->iconUuid();
- if (!iconUuid.isNull() && !targetMetadata->containsCustomIcon(iconUuid)) {
+ if (!iconUuid.isNull() && !targetMetadata->hasCustomIcon(iconUuid)) {
targetMetadata->addCustomIcon(iconUuid, sourceEntry->icon());
}
}
diff --git a/src/keeshare/ShareImport.cpp b/src/keeshare/ShareImport.cpp
index 9b05465f9..a767ab3aa 100644
--- a/src/keeshare/ShareImport.cpp
+++ b/src/keeshare/ShareImport.cpp
@@ -233,8 +233,8 @@ namespace
return {};
}
default:
- Q_ASSERT(false);
- return {reference.path, ShareObserver::Result::Error, ShareImport::tr("Unexpected error")};
+ qWarning("Prevented untrusted import of signed KeeShare database %s", qPrintable(reference.path));
+ return {reference.path, ShareObserver::Result::Warning, ShareImport::tr("Untrusted import prevented")};
}
#endif
}
@@ -323,7 +323,7 @@ namespace
return {};
}
default:
- qWarning("Prevent untrusted import");
+ qWarning("Prevented untrusted import of unsigned KeeShare database %s", qPrintable(reference.path));
return {reference.path, ShareObserver::Result::Warning, ShareImport::tr("Untrusted import prevented")};
}
#endif
diff --git a/src/keeshare/ShareObserver.cpp b/src/keeshare/ShareObserver.cpp
index 80033bf3a..6dc7a748d 100644
--- a/src/keeshare/ShareObserver.cpp
+++ b/src/keeshare/ShareObserver.cpp
@@ -32,12 +32,14 @@ namespace
const QFileInfo info(database->filePath());
return info.absoluteDir().absoluteFilePath(path);
}
+
+ constexpr int FileWatchPeriod = 30;
+ constexpr int FileWatchSize = 5;
} // End Namespace
ShareObserver::ShareObserver(QSharedPointer<Database> db, QObject* parent)
: QObject(parent)
, m_db(std::move(db))
- , m_fileWatcher(new BulkFileWatcher(this))
{
connect(KeeShare::instance(), SIGNAL(activeChanged()), SLOT(handleDatabaseChanged()));
@@ -48,10 +50,6 @@ ShareObserver::ShareObserver(QSharedPointer<Database> db, QObject* parent)
connect(m_db.data(), SIGNAL(databaseModified()), SLOT(handleDatabaseChanged()));
connect(m_db.data(), SIGNAL(databaseSaved()), SLOT(handleDatabaseSaved()));
- connect(m_fileWatcher, SIGNAL(fileCreated(QString)), SLOT(handleFileCreated(QString)));
- connect(m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(handleFileUpdated(QString)));
- connect(m_fileWatcher, SIGNAL(fileRemoved(QString)), SLOT(handleFileDeleted(QString)));
-
handleDatabaseChanged();
}
@@ -61,39 +59,33 @@ ShareObserver::~ShareObserver()
void ShareObserver::deinitialize()
{
- m_fileWatcher->clear();
m_groupToReference.clear();
- m_referenceToGroup.clear();
+ m_shareToGroup.clear();
+ m_fileWatchers.clear();
}
void ShareObserver::reinitialize()
{
- struct Update
- {
- Group* group;
- KeeShareSettings::Reference oldReference;
- KeeShareSettings::Reference newReference;
- };
-
- QList<Update> updated;
- const QList<Group*> groups = m_db->rootGroup()->groupsRecursive(true);
- for (Group* group : groups) {
- const Update couple{group, m_groupToReference.value(group), KeeShare::referenceOf(group)};
- if (couple.oldReference == couple.newReference) {
+ QList<QPair<Group*, KeeShareSettings::Reference>> shares;
+ for (Group* group : m_db->rootGroup()->groupsRecursive(true)) {
+ auto oldReference = m_groupToReference.value(group);
+ auto newReference = KeeShare::referenceOf(group);
+ if (oldReference == newReference) {
continue;
}
- m_groupToReference.remove(couple.group);
- m_referenceToGroup.remove(couple.oldReference);
- const auto oldResolvedPath = resolvePath(couple.oldReference.path, m_db);
+ const auto oldResolvedPath = resolvePath(oldReference.path, m_db);
+ m_groupToReference.remove(group);
m_shareToGroup.remove(oldResolvedPath);
- if (couple.newReference.isValid()) {
- m_groupToReference[couple.group] = couple.newReference;
- m_referenceToGroup[couple.newReference] = couple.group;
- const auto newResolvedPath = resolvePath(couple.newReference.path, m_db);
- m_shareToGroup[newResolvedPath] = couple.group;
+ m_fileWatchers.remove(oldResolvedPath);
+
+ if (newReference.isValid()) {
+ m_groupToReference[group] = newReference;
+ const auto newResolvedPath = resolvePath(newReference.path, m_db);
+ m_shareToGroup[newResolvedPath] = group;
}
- updated << couple;
+
+ shares.append({group, newReference});
}
QStringList success;
@@ -101,25 +93,27 @@ void ShareObserver::reinitialize()
QStringList error;
QMap<QString, QStringList> imported;
QMap<QString, QStringList> exported;
- for (const auto& update : asConst(updated)) {
- if (!update.oldReference.path.isEmpty()) {
- const auto oldResolvedPath = resolvePath(update.oldReference.path, m_db);
- m_fileWatcher->removePath(oldResolvedPath);
- }
- if (!update.newReference.path.isEmpty() && update.newReference.type != KeeShareSettings::Inactive) {
- const auto newResolvedPath = resolvePath(update.newReference.path, m_db);
- m_fileWatcher->addPath(newResolvedPath);
+ for (const auto& share : shares) {
+ auto group = share.first;
+ auto& reference = share.second;
+
+ if (!reference.path.isEmpty() && reference.type != KeeShareSettings::Inactive) {
+ const auto newResolvedPath = resolvePath(reference.path, m_db);
+ auto fileWatcher = QSharedPointer<FileWatcher>::create(this);
+ connect(fileWatcher.data(), &FileWatcher::fileChanged, this, &ShareObserver::handleFileUpdated);
+ fileWatcher->start(newResolvedPath, FileWatchPeriod, FileWatchSize);
+ m_fileWatchers.insert(newResolvedPath, fileWatcher);
}
- if (update.newReference.isExporting()) {
- exported[update.newReference.path] << update.group->name();
+ if (reference.isExporting()) {
+ exported[reference.path] << group->name();
// export is only on save
}
- if (update.newReference.isImporting()) {
- imported[update.newReference.path] << update.group->name();
+ if (reference.isImporting()) {
+ imported[reference.path] << group->name();
// import has to occur immediately
- const auto result = this->importShare(update.newReference.path);
+ const auto result = this->importShare(reference.path);
if (!result.isValid()) {
// tolerable result - blocked import or missing source
continue;
@@ -136,11 +130,13 @@ void ShareObserver::reinitialize()
}
}
}
+
for (auto it = imported.cbegin(); it != imported.cend(); ++it) {
if (it.value().count() > 1) {
warning << tr("Multiple import source path to %1 in %2").arg(it.key(), it.value().join(", "));
}
}
+
for (auto it = exported.cbegin(); it != exported.cend(); ++it) {
if (it.value().count() > 1) {
error << tr("Conflicting export target path %1 in %2").arg(it.key(), it.value().join(", "));
@@ -154,7 +150,7 @@ void ShareObserver::notifyAbout(const QStringList& success, const QStringList& w
{
QStringList messages;
MessageWidget::MessageType type = MessageWidget::Positive;
- if (!(success.isEmpty() || config()->get("KeeShare/QuietSuccess", true).toBool())) {
+ if (!(success.isEmpty() || config()->get(Config::KeeShare_QuietSuccess).toBool())) {
messages += success;
}
if (!warning.isEmpty()) {
@@ -184,21 +180,9 @@ void ShareObserver::handleDatabaseChanged()
}
}
-void ShareObserver::handleFileCreated(const QString& path)
-{
- // there is currently no difference in handling an added share or updating from one
- this->handleFileUpdated(path);
-}
-
-void ShareObserver::handleFileDeleted(const QString& path)
-{
- Q_UNUSED(path);
- // There is nothing we can or should do for now, ignore deletion
-}
-
void ShareObserver::handleFileUpdated(const QString& path)
{
- const Result result = this->importShare(path);
+ const Result result = importShare(path);
if (!result.isValid()) {
return;
}
@@ -287,9 +271,16 @@ QList<ShareObserver::Result> ShareObserver::exportShares()
for (auto it = references.cbegin(); it != references.cend(); ++it) {
const auto& reference = it.value().first();
const QString resolvedPath = resolvePath(reference.config.path, m_db);
- m_fileWatcher->ignoreFileChanges(resolvedPath);
+ auto watcher = m_fileWatchers.value(resolvedPath);
+ if (watcher) {
+ watcher->stop();
+ }
+
results << ShareExport::intoContainer(resolvedPath, reference.config, reference.group);
- m_fileWatcher->observeFileChanges(true);
+
+ if (watcher) {
+ watcher->start(resolvedPath, FileWatchPeriod, FileWatchSize);
+ }
}
return results;
}
diff --git a/src/keeshare/ShareObserver.h b/src/keeshare/ShareObserver.h
index df81fb395..b98d58981 100644
--- a/src/keeshare/ShareObserver.h
+++ b/src/keeshare/ShareObserver.h
@@ -20,12 +20,13 @@
#include <QMap>
#include <QObject>
+#include <QSharedPointer>
#include <QStringList>
#include "gui/MessageWidget.h"
#include "keeshare/KeeShareSettings.h"
-class BulkFileWatcher;
+class FileWatcher;
class Group;
class Database;
@@ -67,9 +68,7 @@ signals:
private slots:
void handleDatabaseChanged();
void handleDatabaseSaved();
- void handleFileCreated(const QString& path);
void handleFileUpdated(const QString& path);
- void handleFileDeleted(const QString& path);
private:
Result importShare(const QString& path);
@@ -81,11 +80,9 @@ private:
private:
QSharedPointer<Database> m_db;
- QMap<KeeShareSettings::Reference, QPointer<Group>> m_referenceToGroup;
QMap<QPointer<Group>, KeeShareSettings::Reference> m_groupToReference;
QMap<QString, QPointer<Group>> m_shareToGroup;
-
- BulkFileWatcher* m_fileWatcher;
+ QMap<QString, QSharedPointer<FileWatcher>> m_fileWatchers;
};
#endif // KEEPASSXC_SHAREOBSERVER_H
diff --git a/src/keeshare/group/EditGroupPageKeeShare.cpp b/src/keeshare/group/EditGroupPageKeeShare.cpp
index dbc3e1186..e310da177 100644
--- a/src/keeshare/group/EditGroupPageKeeShare.cpp
+++ b/src/keeshare/group/EditGroupPageKeeShare.cpp
@@ -17,7 +17,7 @@
#include "EditGroupPageKeeShare.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "keeshare/group/EditGroupWidgetKeeShare.h"
#include <QApplication>
@@ -34,7 +34,7 @@ QString EditGroupPageKeeShare::name()
QIcon EditGroupPageKeeShare::icon()
{
- return FilePath::instance()->icon("apps", "preferences-system-network-sharing");
+ return Resources::instance()->icon("preferences-system-network-sharing");
}
QWidget* EditGroupPageKeeShare::createWidget()
diff --git a/src/keeshare/group/EditGroupWidgetKeeShare.cpp b/src/keeshare/group/EditGroupWidgetKeeShare.cpp
index 5df9f13ee..a3b71220f 100644
--- a/src/keeshare/group/EditGroupWidgetKeeShare.cpp
+++ b/src/keeshare/group/EditGroupWidgetKeeShare.cpp
@@ -20,9 +20,9 @@
#include "core/Config.h"
#include "core/CustomData.h"
-#include "core/FilePath.h"
#include "core/Group.h"
#include "core/Metadata.h"
+#include "core/Resources.h"
#include "crypto/ssh/OpenSSHKey.h"
#include "gui/FileDialog.h"
#include "keeshare/KeeShare.h"
@@ -36,27 +36,20 @@ EditGroupWidgetKeeShare::EditGroupWidgetKeeShare(QWidget* parent)
{
m_ui->setupUi(this);
- m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
- m_ui->togglePasswordGeneratorButton->setIcon(filePath()->icon("actions", "password-generator", false));
-
- m_ui->passwordGenerator->layout()->setContentsMargins(0, 0, 0, 0);
- m_ui->passwordGenerator->hide();
- m_ui->passwordGenerator->reset();
-
m_ui->messageWidget->hide();
m_ui->messageWidget->setCloseButtonVisible(false);
m_ui->messageWidget->setAutoHideTimeout(-1);
+ m_ui->messageWidget->setAnimate(false);
+
+ m_ui->passwordEdit->enablePasswordGenerator();
- connect(m_ui->togglePasswordButton, SIGNAL(toggled(bool)), m_ui->passwordEdit, SLOT(setShowPassword(bool)));
- connect(m_ui->togglePasswordGeneratorButton, SIGNAL(toggled(bool)), SLOT(togglePasswordGeneratorButton(bool)));
connect(m_ui->passwordEdit, SIGNAL(textChanged(QString)), SLOT(selectPassword()));
- connect(m_ui->passwordGenerator, SIGNAL(appliedPassword(QString)), SLOT(setGeneratedPassword(QString)));
connect(m_ui->pathEdit, SIGNAL(editingFinished()), SLOT(selectPath()));
connect(m_ui->pathSelectionButton, SIGNAL(pressed()), SLOT(launchPathSelectionDialog()));
connect(m_ui->typeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(selectType()));
connect(m_ui->clearButton, SIGNAL(clicked(bool)), SLOT(clearInputs()));
- connect(KeeShare::instance(), SIGNAL(activeChanged()), SLOT(showSharingState()));
+ connect(KeeShare::instance(), SIGNAL(activeChanged()), SLOT(updateSharingState()));
const auto types = QList<KeeShareSettings::Type>()
<< KeeShareSettings::Inactive << KeeShareSettings::ImportFrom << KeeShareSettings::ExportTo
@@ -101,9 +94,16 @@ void EditGroupWidgetKeeShare::setGroup(Group* temporaryGroup, QSharedPointer<Dat
update();
}
-void EditGroupWidgetKeeShare::showSharingState()
+void EditGroupWidgetKeeShare::updateSharingState()
{
- if (!m_temporaryGroup) {
+ // Only enable controls if we are active
+ bool isEnabled = m_ui->typeComboBox->currentData().toInt() > KeeShareSettings::Inactive;
+ m_ui->pathEdit->setEnabled(isEnabled);
+ m_ui->pathSelectionButton->setEnabled(isEnabled);
+ m_ui->passwordEdit->setEnabled(isEnabled);
+
+ if (!m_temporaryGroup || !isEnabled) {
+ m_ui->messageWidget->hideMessage();
return;
}
@@ -114,6 +114,8 @@ void EditGroupWidgetKeeShare::showSharingState()
#if defined(WITH_XC_KEESHARE_SECURE)
supportedExtensions << KeeShare::signedContainerFileType();
#endif
+
+ // Custom message for active KeeShare reference
const auto reference = KeeShare::referenceOf(m_temporaryGroup);
if (!reference.path.isEmpty()) {
bool supported = false;
@@ -164,26 +166,23 @@ void EditGroupWidgetKeeShare::showSharingState()
MessageWidget::Warning);
return;
}
-
- m_ui->messageWidget->hide();
}
+
+ // Standard message for state of KeeShare service
const auto active = KeeShare::active();
if (!active.in && !active.out) {
m_ui->messageWidget->showMessage(
tr("KeeShare is currently disabled. You can enable import/export in the application settings.",
"KeeShare is a proper noun"),
MessageWidget::Information);
- return;
- }
- if (active.in && !active.out) {
+ } else if (active.in && !active.out) {
m_ui->messageWidget->showMessage(tr("Database export is currently disabled by application settings."),
MessageWidget::Information);
- return;
- }
- if (!active.in && active.out) {
+ } else if (!active.in && active.out) {
m_ui->messageWidget->showMessage(tr("Database import is currently disabled by application settings."),
MessageWidget::Information);
- return;
+ } else {
+ m_ui->messageWidget->hideMessage();
}
}
@@ -198,13 +197,9 @@ void EditGroupWidgetKeeShare::update()
m_ui->typeComboBox->setCurrentIndex(reference.type);
m_ui->passwordEdit->setText(reference.password);
m_ui->pathEdit->setText(reference.path);
-
- showSharingState();
}
- m_ui->passwordGenerator->hide();
- m_ui->togglePasswordGeneratorButton->setChecked(false);
- m_ui->togglePasswordButton->setChecked(false);
+ updateSharingState();
}
void EditGroupWidgetKeeShare::clearInputs()
@@ -215,24 +210,7 @@ void EditGroupWidgetKeeShare::clearInputs()
m_ui->passwordEdit->clear();
m_ui->pathEdit->clear();
m_ui->typeComboBox->setCurrentIndex(KeeShareSettings::Inactive);
- m_ui->passwordGenerator->setVisible(false);
-}
-
-void EditGroupWidgetKeeShare::togglePasswordGeneratorButton(bool checked)
-{
- m_ui->passwordGenerator->regeneratePassword();
- m_ui->passwordGenerator->setVisible(checked);
-}
-
-void EditGroupWidgetKeeShare::setGeneratedPassword(const QString& password)
-{
- if (!m_temporaryGroup) {
- return;
- }
- auto reference = KeeShare::referenceOf(m_temporaryGroup);
- reference.password = password;
- KeeShare::setReferenceTo(m_temporaryGroup, reference);
- m_ui->togglePasswordGeneratorButton->setChecked(false);
+ updateSharingState();
}
void EditGroupWidgetKeeShare::selectPath()
@@ -250,7 +228,7 @@ void EditGroupWidgetKeeShare::launchPathSelectionDialog()
if (!m_temporaryGroup) {
return;
}
- QString defaultDirPath = config()->get("KeeShare/LastShareDir").toString();
+ QString defaultDirPath = config()->get(Config::KeeShare_LastShareDir).toString();
const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists();
if (!dirExists) {
defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first();
@@ -284,17 +262,14 @@ void EditGroupWidgetKeeShare::launchPathSelectionDialog()
}
switch (reference.type) {
case KeeShareSettings::ImportFrom:
- filename = fileDialog()->getFileName(
- this, tr("Select import source"), defaultDirPath, filters, nullptr, QFileDialog::DontConfirmOverwrite);
+ filename = fileDialog()->getOpenFileName(this, tr("Select import source"), defaultDirPath, filters);
break;
case KeeShareSettings::ExportTo:
- filename = fileDialog()->getFileName(
- this, tr("Select export target"), defaultDirPath, filters, nullptr, QFileDialog::Option(0));
+ filename = fileDialog()->getSaveFileName(this, tr("Select export target"), defaultDirPath, filters);
break;
case KeeShareSettings::SynchronizeWith:
case KeeShareSettings::Inactive:
- filename = fileDialog()->getFileName(
- this, tr("Select import/export file"), defaultDirPath, filters, nullptr, QFileDialog::Option(0));
+ filename = fileDialog()->getSaveFileName(this, tr("Select import/export file"), defaultDirPath, filters);
break;
}
@@ -314,7 +289,9 @@ void EditGroupWidgetKeeShare::launchPathSelectionDialog()
m_ui->pathEdit->setText(filename);
selectPath();
- config()->set("KeeShare/LastShareDir", QFileInfo(filename).absolutePath());
+ config()->set(Config::KeeShare_LastShareDir, QFileInfo(filename).absolutePath());
+
+ updateSharingState();
}
void EditGroupWidgetKeeShare::selectPassword()
@@ -335,4 +312,6 @@ void EditGroupWidgetKeeShare::selectType()
auto reference = KeeShare::referenceOf(m_temporaryGroup);
reference.type = static_cast<KeeShareSettings::Type>(m_ui->typeComboBox->currentData().toInt());
KeeShare::setReferenceTo(m_temporaryGroup, reference);
+
+ updateSharingState();
}
diff --git a/src/keeshare/group/EditGroupWidgetKeeShare.h b/src/keeshare/group/EditGroupWidgetKeeShare.h
index b4e169b5a..ae4ae193c 100644
--- a/src/keeshare/group/EditGroupWidgetKeeShare.h
+++ b/src/keeshare/group/EditGroupWidgetKeeShare.h
@@ -40,7 +40,7 @@ public:
void setGroup(Group* temporaryGroup, QSharedPointer<Database> database);
private slots:
- void showSharingState();
+ void updateSharingState();
private slots:
void update();
@@ -49,8 +49,6 @@ private slots:
void selectPassword();
void launchPathSelectionDialog();
void selectPath();
- void setGeneratedPassword(const QString& password);
- void togglePasswordGeneratorButton(bool checked);
private:
QScopedPointer<Ui::EditGroupWidgetKeeShare> m_ui;
diff --git a/src/keeshare/group/EditGroupWidgetKeeShare.ui b/src/keeshare/group/EditGroupWidgetKeeShare.ui
index b64195c64..7cea782f1 100644
--- a/src/keeshare/group/EditGroupWidgetKeeShare.ui
+++ b/src/keeshare/group/EditGroupWidgetKeeShare.ui
@@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
- <width>342</width>
- <height>378</height>
+ <width>361</width>
+ <height>180</height>
</rect>
</property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
<property name="leftMargin">
<number>0</number>
</property>
@@ -30,32 +30,97 @@
<widget class="MessageWidget" name="messageWidget" native="true"/>
</item>
<item>
- <layout class="QFormLayout" name="formLayout">
- <item row="2" column="0">
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
+ <property name="verticalSpacing">
+ <number>8</number>
+ </property>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="typeComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="accessibleName">
+ <string>Sharing mode field</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="PasswordEdit" name="passwordEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="accessibleName">
+ <string>Password field</string>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
<widget class="QLabel" name="typeLabel">
<property name="text">
<string>Type:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QComboBox" name="typeComboBox">
- <property name="accessibleName">
- <string>Sharing mode field</string>
+ <item row="2" column="0">
+ <widget class="QLabel" name="passwordLabel">
+ <property name="text">
+ <string>Password:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="3" column="0">
+ <item row="1" column="0">
<widget class="QLabel" name="pathLabel">
<property name="text">
<string>Path:</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="1" column="1">
<layout class="QHBoxLayout" name="pathLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
<item>
<widget class="QLineEdit" name="pathEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="accessibleName">
<string>Path to share file field</string>
</property>
@@ -64,94 +129,67 @@
<item>
<widget class="QToolButton" name="pathSelectionButton">
<property name="accessibleName">
- <string>Browser for share file</string>
+ <string>Browse for share file</string>
</property>
<property name="text">
- <string>...</string>
+ <string>Browse...</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="4" column="0">
- <widget class="QLabel" name="passwordLabel">
- <property name="text">
- <string>Password:</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <layout class="QHBoxLayout" name="passwordLayout">
+ <item row="3" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="PasswordEdit" name="passwordEdit">
- <property name="accessibleName">
- <string>Password field</string>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
</property>
- </widget>
+ </spacer>
</item>
<item>
- <widget class="QToolButton" name="togglePasswordButton">
- <property name="accessibleName">
- <string>Toggle password visibility</string>
+ <widget class="QPushButton" name="clearButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="togglePasswordGeneratorButton">
<property name="accessibleName">
- <string>Toggle password generator</string>
+ <string>Clear fields</string>
</property>
- <property name="checkable">
- <bool>true</bool>
+ <property name="text">
+ <string>Clear</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="5" column="1">
- <widget class="PasswordGeneratorWidget" name="passwordGenerator" native="true"/>
- </item>
- <item row="6" column="1">
- <widget class="QPushButton" name="clearButton">
- <property name="accessibleName">
- <string>Clear fields</string>
+ <item row="4" column="0">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="text">
- <string>Clear</string>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
</property>
- </widget>
+ </spacer>
</item>
</layout>
</item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
<customwidgets>
<customwidget>
- <class>PasswordGeneratorWidget</class>
- <extends>QWidget</extends>
- <header>gui/PasswordGeneratorWidget.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
<class>PasswordEdit</class>
<extends>QLineEdit</extends>
<header>gui/PasswordEdit.h</header>
@@ -164,6 +202,13 @@
<container>1</container>
</customwidget>
</customwidgets>
+ <tabstops>
+ <tabstop>typeComboBox</tabstop>
+ <tabstop>pathEdit</tabstop>
+ <tabstop>pathSelectionButton</tabstop>
+ <tabstop>passwordEdit</tabstop>
+ <tabstop>clearButton</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/src/keys/ChallengeResponseKey.h b/src/keys/ChallengeResponseKey.h
index 8d1fa5774..263b507e0 100644
--- a/src/keys/ChallengeResponseKey.h
+++ b/src/keys/ChallengeResponseKey.h
@@ -29,18 +29,24 @@ public:
: m_uuid(uuid)
{
}
- Q_DISABLE_COPY(ChallengeResponseKey);
- virtual ~ChallengeResponseKey()
- {
- }
+ virtual ~ChallengeResponseKey() = default;
+
virtual QByteArray rawKey() const = 0;
virtual bool challenge(const QByteArray& challenge) = 0;
virtual QUuid uuid() const
{
return m_uuid;
}
+ QString error() const
+ {
+ return m_error;
+ }
+
+protected:
+ QString m_error;
private:
+ Q_DISABLE_COPY(ChallengeResponseKey);
QUuid m_uuid;
};
diff --git a/src/keys/CompositeKey.cpp b/src/keys/CompositeKey.cpp
index 3eb4691cd..23c830f9f 100644
--- a/src/keys/CompositeKey.cpp
+++ b/src/keys/CompositeKey.cpp
@@ -60,7 +60,7 @@ bool CompositeKey::isEmpty() const
*/
QByteArray CompositeKey::rawKey() const
{
- return rawKey(nullptr, nullptr);
+ return rawKey(nullptr);
}
/**
@@ -73,7 +73,7 @@ QByteArray CompositeKey::rawKey() const
* @param ok true if challenges were successful and all key components could be added to the composite key
* @return key hash
*/
-QByteArray CompositeKey::rawKey(const QByteArray* transformSeed, bool* ok) const
+QByteArray CompositeKey::rawKey(const QByteArray* transformSeed, bool* ok, QString* error) const
{
CryptoHash cryptoHash(CryptoHash::Sha256);
@@ -87,7 +87,7 @@ QByteArray CompositeKey::rawKey(const QByteArray* transformSeed, bool* ok) const
if (transformSeed) {
QByteArray challengeResult;
- bool challengeOk = challenge(*transformSeed, challengeResult);
+ bool challengeOk = challenge(*transformSeed, challengeResult, error);
if (ok) {
*ok = challengeOk;
}
@@ -110,7 +110,7 @@ QByteArray CompositeKey::rawKey(const QByteArray* transformSeed, bool* ok) const
* @param result transformed key hash
* @return true on success
*/
-bool CompositeKey::transform(const Kdf& kdf, QByteArray& result) const
+bool CompositeKey::transform(const Kdf& kdf, QByteArray& result, QString* error) const
{
if (kdf.uuid() == KeePass2::KDF_AES_KDBX3) {
// legacy KDBX3 AES-KDF, challenge response is added later to the hash
@@ -120,10 +120,10 @@ bool CompositeKey::transform(const Kdf& kdf, QByteArray& result) const
QByteArray seed = kdf.seed();
Q_ASSERT(!seed.isEmpty());
bool ok = false;
- return kdf.transform(rawKey(&seed, &ok), result) && ok;
+ return kdf.transform(rawKey(&seed, &ok, error), result) && ok;
}
-bool CompositeKey::challenge(const QByteArray& seed, QByteArray& result) const
+bool CompositeKey::challenge(const QByteArray& seed, QByteArray& result, QString* error) const
{
// if no challenge response was requested, return nothing to
// maintain backwards compatibility with regular databases.
@@ -137,7 +137,10 @@ bool CompositeKey::challenge(const QByteArray& seed, QByteArray& result) const
for (const auto& key : m_challengeResponseKeys) {
// if the device isn't present or fails, return an error
if (!key->challenge(seed)) {
- qWarning("Failed to issue challenge");
+ if (error) {
+ *error = key->error();
+ }
+ qWarning() << "Failed to issue challenge: " << key->error();
return false;
}
cryptoHash.addData(key->rawKey());
diff --git a/src/keys/CompositeKey.h b/src/keys/CompositeKey.h
index c0c77f2f4..865864d16 100644
--- a/src/keys/CompositeKey.h
+++ b/src/keys/CompositeKey.h
@@ -38,9 +38,9 @@ public:
bool isEmpty() const;
QByteArray rawKey() const override;
- QByteArray rawKey(const QByteArray* transformSeed, bool* ok = nullptr) const;
- Q_REQUIRED_RESULT bool transform(const Kdf& kdf, QByteArray& result) const;
- bool challenge(const QByteArray& seed, QByteArray& result) const;
+
+ Q_REQUIRED_RESULT bool transform(const Kdf& kdf, QByteArray& result, QString* error = nullptr) const;
+ bool challenge(const QByteArray& seed, QByteArray& result, QString* error = nullptr) const;
void addKey(const QSharedPointer<Key>& key);
const QList<QSharedPointer<Key>>& keys() const;
@@ -49,6 +49,8 @@ public:
const QList<QSharedPointer<ChallengeResponseKey>>& challengeResponseKeys() const;
private:
+ QByteArray rawKey(const QByteArray* transformSeed, bool* ok = nullptr, QString* error = nullptr) const;
+
QList<QSharedPointer<Key>> m_keys;
QList<QSharedPointer<ChallengeResponseKey>> m_challengeResponseKeys;
};
diff --git a/src/keys/FileKey.cpp b/src/keys/FileKey.cpp
index 9c3d41c1d..6142d58d7 100644
--- a/src/keys/FileKey.cpp
+++ b/src/keys/FileKey.cpp
@@ -200,6 +200,7 @@ bool FileKey::create(const QString& fileName, QString* errorMsg, int size)
}
create(&file, size);
file.close();
+ file.setPermissions(QFile::ReadUser);
if (file.error()) {
if (errorMsg) {
diff --git a/src/keys/YkChallengeResponseKey.cpp b/src/keys/YkChallengeResponseKey.cpp
index ecf11fe1c..4bf2ab196 100644
--- a/src/keys/YkChallengeResponseKey.cpp
+++ b/src/keys/YkChallengeResponseKey.cpp
@@ -23,7 +23,6 @@
#include "core/Tools.h"
#include "crypto/CryptoHash.h"
#include "crypto/Random.h"
-#include "gui/MainWindow.h"
#include <QApplication>
#include <QEventLoop>
@@ -38,15 +37,10 @@
QUuid YkChallengeResponseKey::UUID("e092495c-e77d-498b-84a1-05ae0d955508");
-YkChallengeResponseKey::YkChallengeResponseKey(int slot, bool blocking)
+YkChallengeResponseKey::YkChallengeResponseKey(YubiKeySlot keySlot)
: ChallengeResponseKey(UUID)
- , m_slot(slot)
- , m_blocking(blocking)
+ , m_keySlot(keySlot)
{
- if (getMainWindow()) {
- connect(this, SIGNAL(userInteractionRequired()), getMainWindow(), SLOT(showYubiKeyPopup()));
- connect(this, SIGNAL(userConfirmed()), getMainWindow(), SLOT(hideYubiKeyPopup()));
- }
}
YkChallengeResponseKey::~YkChallengeResponseKey()
@@ -63,60 +57,25 @@ QByteArray YkChallengeResponseKey::rawKey() const
return QByteArray::fromRawData(m_key, static_cast<int>(m_keySize));
}
-/**
- * Assumes yubikey()->init() was called
- */
-bool YkChallengeResponseKey::challenge(const QByteArray& c)
-{
- return challenge(c, 2);
-}
-
-bool YkChallengeResponseKey::challenge(const QByteArray& challenge, unsigned int retries)
+bool YkChallengeResponseKey::challenge(const QByteArray& challenge)
{
- do {
- --retries;
-
- if (m_blocking) {
- emit userInteractionRequired();
- }
-
- QByteArray key;
- auto result = AsyncTask::runAndWaitForFuture(
- [this, challenge, &key]() { return YubiKey::instance()->challenge(m_slot, true, challenge, key); });
-
- if (m_blocking) {
- emit userConfirmed();
- }
-
- if (result == YubiKey::SUCCESS) {
- if (m_key) {
- gcry_free(m_key);
- }
- m_keySize = static_cast<std::size_t>(key.size());
- m_key = static_cast<char*>(gcry_malloc_secure(m_keySize));
- std::memcpy(m_key, key.data(), m_keySize);
- sodium_memzero(key.data(), static_cast<std::size_t>(key.capacity()));
- return true;
+ m_error.clear();
+ QByteArray key;
+ auto result =
+ AsyncTask::runAndWaitForFuture([&] { return YubiKey::instance()->challenge(m_keySlot, challenge, key); });
+
+ if (result == YubiKey::SUCCESS) {
+ if (m_key) {
+ gcry_free(m_key);
}
- } while (retries > 0);
-
- return false;
-}
-
-QString YkChallengeResponseKey::getName() const
-{
- unsigned int serial;
- QString fmt(QObject::tr("%1[%2] Challenge Response - Slot %3 - %4"));
-
- YubiKey::instance()->getSerial(serial);
-
- return fmt.arg(YubiKey::instance()->getVendorName(),
- QString::number(serial),
- QString::number(m_slot),
- (m_blocking) ? QObject::tr("Press") : QObject::tr("Passive"));
-}
+ m_keySize = static_cast<std::size_t>(key.size());
+ m_key = static_cast<char*>(gcry_malloc_secure(m_keySize));
+ std::memcpy(m_key, key.data(), m_keySize);
+ sodium_memzero(key.data(), static_cast<std::size_t>(key.capacity()));
+ } else {
+ // Record the error message
+ m_error = YubiKey::instance()->errorMessage();
+ }
-bool YkChallengeResponseKey::isBlocking() const
-{
- return m_blocking;
+ return result == YubiKey::SUCCESS;
}
diff --git a/src/keys/YkChallengeResponseKey.h b/src/keys/YkChallengeResponseKey.h
index 5f7c40e72..ba213f489 100644
--- a/src/keys/YkChallengeResponseKey.h
+++ b/src/keys/YkChallengeResponseKey.h
@@ -31,32 +31,16 @@ class YkChallengeResponseKey : public QObject, public ChallengeResponseKey
public:
static QUuid UUID;
- explicit YkChallengeResponseKey(int slot = -1, bool blocking = false);
+ explicit YkChallengeResponseKey(YubiKeySlot keySlot = {});
~YkChallengeResponseKey() override;
QByteArray rawKey() const override;
bool challenge(const QByteArray& challenge) override;
- bool challenge(const QByteArray& challenge, unsigned int retries);
- QString getName() const;
- bool isBlocking() const;
-
-signals:
- /**
- * Emitted whenever user interaction is required to proceed with the challenge-response protocol.
- * You can use this to show a helpful dialog informing the user that his assistance is required.
- */
- void userInteractionRequired();
-
- /**
- * Emitted when the user has provided their required input.
- */
- void userConfirmed();
private:
char* m_key = nullptr;
std::size_t m_keySize = 0;
- int m_slot;
- bool m_blocking;
+ YubiKeySlot m_keySlot;
};
#endif // KEEPASSX_YK_CHALLENGERESPONSEKEY_H
diff --git a/src/keys/YkChallengeResponseKeyCLI.cpp b/src/keys/YkChallengeResponseKeyCLI.cpp
index c218f1f55..4c78e4d0a 100644
--- a/src/keys/YkChallengeResponseKeyCLI.cpp
+++ b/src/keys/YkChallengeResponseKeyCLI.cpp
@@ -23,49 +23,30 @@
#include "crypto/Random.h"
#include <QFile>
-#include <QtCore/qglobal.h>
QUuid YkChallengeResponseKeyCLI::UUID("e2be77c0-c810-417a-8437-32f41d00bd1d");
-YkChallengeResponseKeyCLI::YkChallengeResponseKeyCLI(int slot,
- bool blocking,
- QString messageInteraction,
- FILE* outputDescriptor)
+YkChallengeResponseKeyCLI::YkChallengeResponseKeyCLI(YubiKeySlot keySlot, QString interactionMessage, QTextStream& out)
: ChallengeResponseKey(UUID)
- , m_slot(slot)
- , m_blocking(blocking)
- , m_messageInteraction(messageInteraction)
- , m_out(outputDescriptor)
+ , m_keySlot(keySlot)
+ , m_interactionMessage(interactionMessage)
+ , m_out(out.device())
{
+ connect(YubiKey::instance(), SIGNAL(userInteractionRequest()), SLOT(showInteractionMessage()));
}
-QByteArray YkChallengeResponseKeyCLI::rawKey() const
+void YkChallengeResponseKeyCLI::showInteractionMessage()
{
- return m_key;
+ m_out << m_interactionMessage << "\n\n" << flush;
}
-/**
- * Assumes yubikey()->init() was called
- */
-bool YkChallengeResponseKeyCLI::challenge(const QByteArray& c)
+QByteArray YkChallengeResponseKeyCLI::rawKey() const
{
- return challenge(c, 2);
+ return m_key;
}
-bool YkChallengeResponseKeyCLI::challenge(const QByteArray& challenge, unsigned int retries)
+bool YkChallengeResponseKeyCLI::challenge(const QByteArray& challenge)
{
- QTextStream out(m_out, QIODevice::WriteOnly);
- do {
- --retries;
-
- if (m_blocking) {
- out << m_messageInteraction << endl;
- }
- YubiKey::ChallengeResult result = YubiKey::instance()->challenge(m_slot, m_blocking, challenge, m_key);
- if (result == YubiKey::SUCCESS) {
- return true;
- }
- } while (retries > 0);
-
- return false;
+ auto result = YubiKey::instance()->challenge(m_keySlot, challenge, m_key);
+ return result == YubiKey::SUCCESS;
}
diff --git a/src/keys/YkChallengeResponseKeyCLI.h b/src/keys/YkChallengeResponseKeyCLI.h
index ed2d62b2a..56025e7e1 100644
--- a/src/keys/YkChallengeResponseKeyCLI.h
+++ b/src/keys/YkChallengeResponseKeyCLI.h
@@ -23,6 +23,7 @@
#include "keys/drivers/YubiKey.h"
#include <QObject>
+#include <QSharedPointer>
#include <QTextStream>
class YkChallengeResponseKeyCLI : public QObject, public ChallengeResponseKey
@@ -32,18 +33,19 @@ class YkChallengeResponseKeyCLI : public QObject, public ChallengeResponseKey
public:
static QUuid UUID;
- explicit YkChallengeResponseKeyCLI(int slot, bool blocking, QString messageInteraction, FILE* outputDescriptor);
+ explicit YkChallengeResponseKeyCLI(YubiKeySlot keySlot, QString interactionMessage, QTextStream& out);
QByteArray rawKey() const override;
bool challenge(const QByteArray& challenge) override;
- bool challenge(const QByteArray& challenge, unsigned int retries);
+
+private slots:
+ void showInteractionMessage();
private:
QByteArray m_key;
- int m_slot;
- bool m_blocking;
- QString m_messageInteraction;
- FILE* m_out;
+ YubiKeySlot m_keySlot;
+ QString m_interactionMessage;
+ QTextStream m_out;
};
#endif // KEEPASSX_YK_CHALLENGERESPONSEKEYCLI_H
diff --git a/src/keys/drivers/YubiKey.cpp b/src/keys/drivers/YubiKey.cpp
index 18cf8323a..d64452f3e 100644
--- a/src/keys/drivers/YubiKey.cpp
+++ b/src/keys/drivers/YubiKey.cpp
@@ -30,17 +30,97 @@
#include "YubiKey.h"
-// Cast the void pointer from the generalized class definition
-// to the proper pointer type from the now included system headers
-#define m_yk (static_cast<YK_KEY*>(m_yk_void))
-#define m_ykds (static_cast<YK_STATUS*>(m_ykds_void))
+#include <QtConcurrent>
+
+namespace
+{
+ constexpr int MAX_KEYS = 4;
+
+ YK_KEY* openKey(int ykIndex, int okIndex, bool* onlyKey = nullptr)
+ {
+ YK_KEY* key = nullptr;
+ if (onlyKey) {
+ *onlyKey = false;
+ }
+#if YKPERS_VERSION_NUMBER >= 0x011200
+ // This function is only available in ykcore >= 1.18.0
+ key = yk_open_key(ykIndex);
+#else
+ // Only allow for the first found key to be used
+ if (ykIndex == 0) {
+ key = yk_open_first_key();
+ }
+#endif
+#if YKPERS_VERSION_NUMBER >= 0x011400
+ // New fuction available in yubikey-personalization version >= 1.20.0 that allows
+ // selecting device VID/PID (yk_open_key_vid_pid)
+ if (!key) {
+ static const int device_pids[] = {0x60fc}; // OnlyKey PID
+ key = yk_open_key_vid_pid(0x1d50, device_pids, 1, okIndex);
+ if (onlyKey) {
+ *onlyKey = true;
+ }
+ }
+#else
+ Q_UNUSED(okIndex);
+#endif
+ return key;
+ }
+
+ void closeKey(YK_KEY* key)
+ {
+ yk_close_key(key);
+ }
+
+ unsigned int getSerial(YK_KEY* key)
+ {
+ unsigned int serial;
+ yk_get_serial(key, 1, 0, &serial);
+ return serial;
+ }
+
+ YK_KEY* openKeySerial(unsigned int serial)
+ {
+ bool onlykey;
+ for (int i = 0, j = 0; i + j < MAX_KEYS;) {
+ auto* yk_key = openKey(i, j, &onlykey);
+ if (yk_key) {
+ onlykey ? ++j : ++i;
+ // If the provided serial number is 0, or the key matches the serial, return it
+ if (serial == 0 || getSerial(yk_key) == serial) {
+ return yk_key;
+ }
+ closeKey(yk_key);
+ } else {
+ // No more connected keys
+ break;
+ }
+ }
+ return nullptr;
+ }
+} // namespace
YubiKey::YubiKey()
- : m_yk_void(nullptr)
- , m_ykds_void(nullptr)
- , m_onlyKey(false)
- , m_mutex(QMutex::Recursive)
+ : m_mutex(QMutex::Recursive)
{
+ m_interactionTimer.setSingleShot(true);
+ m_interactionTimer.setInterval(300);
+
+ if (!yk_init()) {
+ qDebug("YubiKey: Failed to initialize USB interface.");
+ } else {
+ m_initialized = true;
+ // clang-format off
+ connect(&m_interactionTimer, SIGNAL(timeout()), this, SIGNAL(userInteractionRequest()));
+ connect(this, &YubiKey::challengeStarted, this, [this] { m_interactionTimer.start(); }, Qt::QueuedConnection);
+ connect(this, &YubiKey::challengeCompleted, this, [this] { m_interactionTimer.stop(); }, Qt::QueuedConnection);
+ // clang-format on
+ }
+}
+
+YubiKey::~YubiKey()
+{
+ yk_release();
}
YubiKey* YubiKey::m_instance(Q_NULLPTR);
@@ -54,161 +134,192 @@ YubiKey* YubiKey::instance()
return m_instance;
}
-bool YubiKey::init()
+bool YubiKey::isInitialized()
{
- m_mutex.lock();
-
- // previously initialized
- if (m_yk != nullptr && m_ykds != nullptr) {
-
- if (yk_get_status(m_yk, m_ykds)) {
- // Still connected
- m_mutex.unlock();
- return true;
- } else {
- // Initialized but not connected anymore, re-init
- deinit();
- }
- }
+ return m_initialized;
+}
- if (!yk_init()) {
- m_mutex.unlock();
- return false;
+void YubiKey::findValidKeys()
+{
+ m_error.clear();
+ if (!isInitialized()) {
+ return;
}
- // TODO: handle multiple attached hardware devices
- m_onlyKey = false;
- m_yk_void = static_cast<void*>(yk_open_first_key());
-#if YKPERS_VERSION_NUMBER >= 0x011400
- // New fuction available in yubikey-personalization version >= 1.20.0 that allows
- // selecting device VID/PID (yk_open_key_vid_pid)
- if (m_yk == nullptr) {
- static const int device_pids[] = {0x60fc}; // OnlyKey PID
- m_yk_void = static_cast<void*>(yk_open_key_vid_pid(0x1d50, device_pids, 1, 0));
- m_onlyKey = true;
- }
-#endif
- if (m_yk == nullptr) {
- yk_release();
- m_mutex.unlock();
- return false;
- }
+ QtConcurrent::run([this] {
+ if (!m_mutex.tryLock(1000)) {
+ emit detectComplete(false);
+ return;
+ }
- m_ykds_void = static_cast<void*>(ykds_alloc());
- if (m_ykds == nullptr) {
- yk_close_key(m_yk);
- m_yk_void = nullptr;
- yk_release();
- m_mutex.unlock();
- return false;
- }
+ // Remove all known keys
+ m_foundKeys.clear();
+
+ // Try to detect up to 4 connected hardware keys
+ for (int i = 0, j = 0; i + j < MAX_KEYS;) {
+ bool onlyKey = false;
+ auto yk_key = openKey(i, j, &onlyKey);
+ if (yk_key) {
+ onlyKey ? ++j : ++i;
+ auto vender = onlyKey ? QStringLiteral("OnlyKey") : QStringLiteral("YubiKey");
+ auto serial = getSerial(yk_key);
+ if (serial == 0) {
+ closeKey(yk_key);
+ continue;
+ }
+
+ auto st = ykds_alloc();
+ yk_get_status(yk_key, st);
+ int vid, pid;
+ yk_get_key_vid_pid(yk_key, &vid, &pid);
+
+ bool wouldBlock;
+ QList<QPair<int, QString>> ykSlots;
+ for (int slot = 1; slot <= 2; ++slot) {
+ auto config = (i == 1 ? CONFIG1_VALID : CONFIG2_VALID);
+ if (!(ykds_touch_level(st) & config)) {
+ // Slot is not configured
+ continue;
+ }
+ // Don't actually challenge a YubiKey Neo or below, they always require button press
+ // if it is enabled for the slot resulting in failed detection
+ if (pid <= NEO_OTP_U2F_CCID_PID) {
+ auto display = tr("%1 [%2] Configured Slot - %3")
+ .arg(vender, QString::number(serial), QString::number(slot));
+ ykSlots.append({slot, display});
+ } else if (performTestChallenge(yk_key, slot, &wouldBlock)) {
+ auto display = tr("%1 [%2] Challenge Response - Slot %3 - %4")
+ .arg(vender,
+ QString::number(serial),
+ QString::number(slot),
+ wouldBlock ? tr("Press") : tr("Passive"));
+ ykSlots.append({slot, display});
+ }
+ }
+
+ if (!ykSlots.isEmpty()) {
+ m_foundKeys.insert(serial, ykSlots);
+ }
+
+ ykds_free(st);
+ closeKey(yk_key);
+
+ Tools::wait(100);
+ } else {
+ // No more keys are connected
+ break;
+ }
+ }
- m_mutex.unlock();
- return true;
+ m_mutex.unlock();
+ emit detectComplete(!m_foundKeys.isEmpty());
+ });
}
-bool YubiKey::deinit()
+QList<YubiKeySlot> YubiKey::foundKeys()
{
- m_mutex.lock();
-
- if (m_yk) {
- yk_close_key(m_yk);
- m_yk_void = nullptr;
- }
-
- if (m_ykds) {
- ykds_free(m_ykds);
- m_ykds_void = nullptr;
+ QList<YubiKeySlot> keys;
+ for (auto serial : m_foundKeys.uniqueKeys()) {
+ for (auto key : m_foundKeys.value(serial)) {
+ keys.append({serial, key.first});
+ }
}
-
- yk_release();
-
- m_mutex.unlock();
-
- return true;
+ return keys;
}
-void YubiKey::detect()
+QString YubiKey::getDisplayName(YubiKeySlot slot)
{
- bool found = false;
-
- // Check slot 1 and 2 for Challenge-Response HMAC capability
- for (int i = 1; i <= 2; ++i) {
- QString errorMsg;
- bool isBlocking = checkSlotIsBlocking(i, errorMsg);
- if (errorMsg.isEmpty()) {
- found = true;
- emit detected(i, isBlocking);
+ for (auto key : m_foundKeys.value(slot.first)) {
+ if (slot.second == key.first) {
+ return key.second;
}
-
- // Wait between slots to let the yubikey settle.
- Tools::sleep(150);
}
+ return tr("%1 Invalid slot specified - %2").arg(QString::number(slot.first), QString::number(slot.second));
+}
- if (!found) {
- emit notFound();
- } else {
- emit detectComplete();
- }
+QString YubiKey::errorMessage()
+{
+ return m_error;
}
-bool YubiKey::checkSlotIsBlocking(int slot, QString& errorMessage)
+/**
+ * Issue a test challenge to the specified slot to determine if challenge
+ * response is properly configured.
+ *
+ * @param slot YubiKey configuration slot
+ * @param wouldBlock return if the operation requires user input
+ * @return whether the challenge succeeded
+ */
+bool YubiKey::testChallenge(YubiKeySlot slot, bool* wouldBlock)
{
- if (!init()) {
- errorMessage = QString("Could not initialize YubiKey.");
- return false;
+ bool ret = false;
+ auto* yk_key = openKeySerial(slot.first);
+ if (yk_key) {
+ ret = performTestChallenge(yk_key, slot.second, wouldBlock);
}
+ return ret;
+}
- YubiKey::ChallengeResult result;
- QByteArray rand = randomGen()->randomArray(1);
+bool YubiKey::performTestChallenge(void* key, int slot, bool* wouldBlock)
+{
+ auto chall = randomGen()->randomArray(1);
QByteArray resp;
-
- result = challenge(slot, false, rand, resp);
- if (result == ALREADY_RUNNING) {
- // Try this slot again after waiting
- Tools::sleep(300);
- result = challenge(slot, false, rand, resp);
- }
-
- if (result == SUCCESS || result == WOULDBLOCK) {
- return result == WOULDBLOCK;
- } else if (result == ALREADY_RUNNING) {
- errorMessage = QString("YubiKey busy");
- return false;
- } else if (result == ERROR) {
- errorMessage = QString("YubiKey error");
- return false;
+ auto ret = performChallenge(static_cast<YK_KEY*>(key), slot, false, chall, resp);
+ if (ret == SUCCESS || ret == WOULDBLOCK) {
+ if (wouldBlock) {
+ *wouldBlock = ret == WOULDBLOCK;
+ }
+ return true;
}
-
- errorMessage = QString("Error while polling YubiKey");
return false;
}
-bool YubiKey::getSerial(unsigned int& serial)
+/**
+ * Issue a challenge to the specified slot
+ * This operation could block if the YubiKey requires a touch to trigger.
+ *
+ * @param slot YubiKey configuration slot
+ * @param challenge challenge input to YubiKey
+ * @param response response output from YubiKey
+ * @return challenge result
+ */
+YubiKey::ChallengeResult YubiKey::challenge(YubiKeySlot slot, const QByteArray& challenge, QByteArray& response)
{
- m_mutex.lock();
- int result = yk_get_serial(m_yk, 1, 0, &serial);
- m_mutex.unlock();
+ m_error.clear();
+ if (!m_initialized) {
+ m_error = tr("The YubiKey interface has not been initialized.");
+ return ERROR;
+ }
+
+ // Try to grab a lock for 1 second, fail out if not possible
+ if (!m_mutex.tryLock(1000)) {
+ m_error = tr("Hardware key is currently in use.");
+ return ERROR;
+ }
- if (!result) {
- return false;
+ auto* yk_key = openKeySerial(slot.first);
+ if (!yk_key) {
+ // Key with specified serial number is not connected
+ m_error =
+ tr("Could not find hardware key with serial number %1. Please plug it in to continue.").arg(slot.first);
+ m_mutex.unlock();
+ return ERROR;
}
- return true;
-}
+ emit challengeStarted();
+ auto ret = performChallenge(yk_key, slot.second, true, challenge, response);
-QString YubiKey::getVendorName()
-{
- return m_onlyKey ? "OnlyKey" : "YubiKey";
+ closeKey(yk_key);
+ emit challengeCompleted();
+ m_mutex.unlock();
+
+ return ret;
}
-YubiKey::ChallengeResult YubiKey::challenge(int slot, bool mayBlock, const QByteArray& challenge, QByteArray& response)
+YubiKey::ChallengeResult
+YubiKey::performChallenge(void* key, int slot, bool mayBlock, const QByteArray& challenge, QByteArray& response)
{
- // ensure that YubiKey::init() succeeded
- if (!init()) {
- return ERROR;
- }
-
+ m_error.clear();
int yk_cmd = (slot == 1) ? SLOT_CHAL_HMAC1 : SLOT_CHAL_HMAC2;
QByteArray paddedChallenge = challenge;
@@ -232,39 +343,28 @@ YubiKey::ChallengeResult YubiKey::challenge(int slot, bool mayBlock, const QByte
c = reinterpret_cast<const unsigned char*>(paddedChallenge.constData());
r = reinterpret_cast<unsigned char*>(response.data());
- // Try to grab a lock for 1 second, fail out if not possible
- if (!m_mutex.tryLock(1000)) {
- return ALREADY_RUNNING;
- }
+ int ret = yk_challenge_response(
+ static_cast<YK_KEY*>(key), yk_cmd, mayBlock, paddedChallenge.size(), c, response.size(), r);
- int ret = yk_challenge_response(m_yk, yk_cmd, mayBlock, paddedChallenge.size(), c, response.size(), r);
- m_mutex.unlock();
+ // actual HMAC-SHA1 response is only 20 bytes
+ response.resize(20);
if (!ret) {
if (yk_errno == YK_EWOULDBLOCK) {
return WOULDBLOCK;
- } else if (yk_errno == YK_ETIMEOUT) {
- return ERROR;
} else if (yk_errno) {
-
- /* Something went wrong, close the key, so that the next call to
- * can try to re-open.
- *
- * Likely caused by the YubiKey being unplugged.
- */
-
- if (yk_errno == YK_EUSBERR) {
- qWarning("USB error: %s", yk_usb_strerror());
+ if (yk_errno == YK_ETIMEOUT) {
+ m_error = tr("Hardware key timed out waiting for user interaction.");
+ } else if (yk_errno == YK_EUSBERR) {
+ m_error = tr("A USB error ocurred when accessing the hardware key: %1").arg(yk_usb_strerror());
} else {
- qWarning("YubiKey core error: %s", yk_strerror(yk_errno));
+ m_error = tr("Failed to complete a challenge-response, the specific error was: %1")
+ .arg(yk_strerror(yk_errno));
}
return ERROR;
}
}
- // actual HMAC-SHA1 response is only 20 bytes
- response.resize(20);
-
return SUCCESS;
}
diff --git a/src/keys/drivers/YubiKey.h b/src/keys/drivers/YubiKey.h
index 7bb527a28..67eff5954 100644
--- a/src/keys/drivers/YubiKey.h
+++ b/src/keys/drivers/YubiKey.h
@@ -19,11 +19,16 @@
#ifndef KEEPASSX_YUBIKEY_H
#define KEEPASSX_YUBIKEY_H
+#include <QHash>
#include <QMutex>
#include <QObject>
+#include <QTimer>
+
+typedef QPair<unsigned int, int> YubiKeySlot;
+Q_DECLARE_METATYPE(YubiKeySlot);
/**
- * Singleton class to manage the interface to the hardware
+ * Singleton class to manage the interface to hardware key(s)
*/
class YubiKey : public QObject
{
@@ -32,100 +37,65 @@ class YubiKey : public QObject
public:
enum ChallengeResult
{
- ERROR = -1,
- SUCCESS = 0,
- WOULDBLOCK,
- ALREADY_RUNNING
+ ERROR,
+ SUCCESS,
+ WOULDBLOCK
};
- /**
- * @brief YubiKey::instance - get instance of singleton
- * @return instance
- */
static YubiKey* instance();
+ bool isInitialized();
- /**
- * @brief YubiKey::init - initialize yubikey library and hardware
- * @return true on success
- */
- bool init();
+ void findValidKeys();
- /**
- * @brief YubiKey::deinit - cleanup after init
- * @return true on success
- */
- bool deinit();
+ QList<YubiKeySlot> foundKeys();
+ QString getDisplayName(YubiKeySlot slot);
- /**
- * @brief YubiKey::challenge - issue a challenge
- *
- * This operation could block if the YubiKey requires a touch to trigger.
- *
- * TODO: Signal to the UI that the system is waiting for challenge response
- * touch.
- *
- * @param slot YubiKey configuration slot
- * @param mayBlock operation is allowed to block
- * @param challenge challenge input to YubiKey
- * @param response response output from YubiKey
- * @return challenge result
- */
- ChallengeResult challenge(int slot, bool mayBlock, const QByteArray& challenge, QByteArray& response);
+ ChallengeResult challenge(YubiKeySlot slot, const QByteArray& challenge, QByteArray& response);
+ bool testChallenge(YubiKeySlot slot, bool* wouldBlock = nullptr);
- /**
- * @brief YubiKey::getSerial - serial number of YubiKey
- * @param serial serial number
- * @return true on success
- */
- bool getSerial(unsigned int& serial);
-
- /**
- * @brief YubiKey::getVendorName - vendor name of token
- * @return vendor name
- */
- QString getVendorName();
+ QString errorMessage();
+signals:
/**
- * @brief YubiKey::detect - probe for attached YubiKeys
+ * Emitted when a detection process completes. Use the `detectedSlots`
+ * accessor function to get information on the available slots.
+ *
+ * @param found - true if a key was found
*/
- void detect();
+ void detectComplete(bool found);
/**
- * @param slot the yubikey slot.
- * @param errorMessage populated if an error occured.
- *
- * @return whether the key is blocking or not.
- */
- bool checkSlotIsBlocking(int slot, QString& errorMessage);
-signals:
- /** Emitted in response to detect() when a device is found
- *
- * @slot is the slot number detected
- * @blocking signifies if the YK is setup in passive mode or if requires
- * the user to touch it for a response
+ * Emitted when user needs to interact with the hardware key to continue
*/
- void detected(int slot, bool blocking);
+ void userInteractionRequest();
/**
- * Emitted when detection is complete
+ * Emitted before/after a challenge-response is performed
*/
- void detectComplete();
+ void challengeStarted();
+ void challengeCompleted();
/**
- * Emitted when no Yubikey could be found.
+ * Emitted when an error occurred during challenge/response
*/
- void notFound();
+ void challengeError(QString error);
private:
explicit YubiKey();
+ ~YubiKey();
+
static YubiKey* m_instance;
- // Create void ptr here to avoid ifdef header include mess
- void* m_yk_void;
- void* m_ykds_void;
- bool m_onlyKey;
+ ChallengeResult
+ performChallenge(void* key, int slot, bool mayBlock, const QByteArray& challenge, QByteArray& response);
+ bool performTestChallenge(void* key, int slot, bool* wouldBlock);
+
+ QHash<unsigned int, QList<QPair<int, QString>>> m_foundKeys;
QMutex m_mutex;
+ QTimer m_interactionTimer;
+ bool m_initialized = false;
+ QString m_error;
Q_DISABLE_COPY(YubiKey)
};
diff --git a/src/keys/drivers/YubiKeyStub.cpp b/src/keys/drivers/YubiKeyStub.cpp
index 1c2fcb8b6..8326974ac 100644
--- a/src/keys/drivers/YubiKeyStub.cpp
+++ b/src/keys/drivers/YubiKeyStub.cpp
@@ -16,20 +16,17 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdio.h>
-
-#include "core/Global.h"
-#include "crypto/Random.h"
-
#include "YubiKey.h"
YubiKey::YubiKey()
- : m_yk_void(NULL)
- , m_ykds_void(NULL)
{
}
-YubiKey* YubiKey::m_instance(Q_NULLPTR);
+YubiKey::~YubiKey()
+{
+}
+
+YubiKey* YubiKey::m_instance(nullptr);
YubiKey* YubiKey::instance()
{
@@ -40,45 +37,43 @@ YubiKey* YubiKey::instance()
return m_instance;
}
-bool YubiKey::init()
+bool YubiKey::isInitialized()
{
return false;
}
-bool YubiKey::deinit()
+void YubiKey::findValidKeys()
{
- return false;
}
-void YubiKey::detect()
+QList<YubiKeySlot> YubiKey::foundKeys()
{
+ return {};
}
-bool YubiKey::getSerial(unsigned int& serial)
+QString YubiKey::getDisplayName(YubiKeySlot slot)
{
- Q_UNUSED(serial);
-
- return false;
+ Q_UNUSED(slot);
+ return {};
}
-QString YubiKey::getVendorName()
+QString YubiKey::errorMessage()
{
- return "YubiKeyStub";
+ return {};
}
-YubiKey::ChallengeResult YubiKey::challenge(int slot, bool mayBlock, const QByteArray& chal, QByteArray& resp)
+YubiKey::ChallengeResult YubiKey::challenge(YubiKeySlot slot, const QByteArray& chal, QByteArray& resp)
{
Q_UNUSED(slot);
- Q_UNUSED(mayBlock);
Q_UNUSED(chal);
Q_UNUSED(resp);
return ERROR;
}
-bool YubiKey::checkSlotIsBlocking(int slot, QString& errorMessage)
+bool YubiKey::testChallenge(YubiKeySlot slot, bool* wouldBlock)
{
Q_UNUSED(slot);
- Q_UNUSED(errorMessage);
+ Q_UNUSED(wouldBlock);
return false;
}
diff --git a/src/main.cpp b/src/main.cpp
index dd503d957..31d760be4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -50,18 +50,21 @@ int main(int argc, char** argv)
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
-#ifdef Q_OS_LINUX
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif
-#endif
-
-#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
- QGuiApplication::setDesktopFileName("org.keepassxc.KeePassXC.desktop");
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
#endif
Application app(argc, argv);
Application::setApplicationName("KeePassXC");
Application::setApplicationVersion(KEEPASSXC_VERSION);
+ app.setProperty("KPXC_QUALIFIED_APPNAME", "org.keepassxc.KeePassXC");
+ app.applyTheme();
+#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
+ QGuiApplication::setDesktopFileName(app.property("KPXC_QUALIFIED_APPNAME").toString() + QStringLiteral(".desktop"));
+#endif
+
// don't set organizationName as that changes the return value of
// QStandardPaths::writableLocation(QDesktopServices::DataLocation)
Bootstrap::bootstrapApplication();
@@ -145,6 +148,7 @@ int main(int argc, char** argv)
// buffer for native messaging, even if the specified file does not exist
QTextStream out(stdout, QIODevice::WriteOnly);
out << QObject::tr("Database password: ") << flush;
+ Utils::setDefaultTextStreams();
password = Utils::getPassword();
}
@@ -155,6 +159,11 @@ int main(int argc, char** argv)
int exitCode = Application::exec();
+ // Check if restart was requested
+ if (exitCode == RESTART_EXITCODE) {
+ QProcess::startDetached(QCoreApplication::applicationFilePath(), {});
+ }
+
#if defined(WITH_ASAN) && defined(WITH_LSAN)
// do leak check here to prevent massive tail of end-of-process leak errors from third-party libraries
__lsan_do_leak_check();
diff --git a/src/proxy/CMakeLists.txt b/src/proxy/CMakeLists.txt
index 61dfd1b25..bb00f057b 100755
--- a/src/proxy/CMakeLists.txt
+++ b/src/proxy/CMakeLists.txt
@@ -1,5 +1,4 @@
-# Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
-# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+# Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -15,19 +14,17 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
if(WITH_XC_BROWSER)
- include_directories(${BROWSER_SOURCE_DIR})
-
set(proxy_SOURCES
- ../core/Alloc.cpp
+ ../browser/BrowserShared.cpp
keepassxc-proxy.cpp
- ${BROWSER_SOURCE_DIR}/NativeMessagingBase.cpp
- NativeMessagingHost.cpp)
+ NativeMessagingProxy.cpp)
- add_library(proxy STATIC ${proxy_SOURCES})
- target_link_libraries(proxy Qt5::Core Qt5::Network ${sodium_LIBRARY_RELEASE})
- add_executable(keepassxc-proxy keepassxc-proxy.cpp)
- target_link_libraries(keepassxc-proxy proxy)
+ # Alloc must be defined in a static library to prevent clashing with clang ASAN definitions
+ add_library(proxy_alloc STATIC ../core/Alloc.cpp)
+ target_link_libraries(proxy_alloc PRIVATE Qt5::Core ${sodium_LIBRARY_RELEASE})
+ add_executable(keepassxc-proxy ${proxy_SOURCES})
+ target_link_libraries(keepassxc-proxy proxy_alloc Qt5::Core Qt5::Network)
install(TARGETS keepassxc-proxy
BUNDLE DESTINATION . COMPONENT Runtime
RUNTIME DESTINATION ${PROXY_INSTALL_DIR} COMPONENT Runtime)
@@ -56,6 +53,7 @@ if(WITH_XC_BROWSER)
COMMAND ${CMAKE_COMMAND} -E copy keepassxc-proxy ${PROXY_APP_DIR}/keepassxc-proxy
COMMENT "Copying keepassxc-proxy inside the application")
endif()
+
if(MINGW)
target_link_libraries(keepassxc-proxy Wtsapi32.lib Ws2_32.lib)
endif()
diff --git a/src/proxy/NativeMessagingHost.cpp b/src/proxy/NativeMessagingHost.cpp
deleted file mode 100644
index 44b3ab7ef..000000000
--- a/src/proxy/NativeMessagingHost.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "NativeMessagingHost.h"
-#include <QCoreApplication>
-
-#ifdef Q_OS_WIN
-#include <winsock2.h>
-#endif
-
-NativeMessagingHost::NativeMessagingHost()
- : NativeMessagingBase(true)
-{
- m_localSocket = new QLocalSocket();
- m_localSocket->connectToServer(getLocalServerPath());
- m_localSocket->setReadBufferSize(NATIVE_MSG_MAX_LENGTH);
-
- int socketDesc = m_localSocket->socketDescriptor();
- if (socketDesc) {
- int max = NATIVE_MSG_MAX_LENGTH;
- setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&max), sizeof(max));
- }
-#ifdef Q_OS_WIN
- m_running.store(1);
- m_future = QtConcurrent::run(this, &NativeMessagingHost::readNativeMessages);
-#endif
- connect(m_localSocket, SIGNAL(readyRead()), this, SLOT(newLocalMessage()));
- connect(m_localSocket, SIGNAL(disconnected()), this, SLOT(deleteSocket()));
- connect(m_localSocket,
- SIGNAL(stateChanged(QLocalSocket::LocalSocketState)),
- SLOT(socketStateChanged(QLocalSocket::LocalSocketState)));
-}
-
-NativeMessagingHost::~NativeMessagingHost()
-{
-#ifdef Q_OS_WIN
- m_future.waitForFinished();
-#endif
-}
-
-void NativeMessagingHost::readNativeMessages()
-{
-#ifdef Q_OS_WIN
- quint32 length = 0;
- while (m_running.load() == 1 && !std::cin.eof()) {
- length = 0;
- std::cin.read(reinterpret_cast<char*>(&length), 4);
- if (!readStdIn(length)) {
- QCoreApplication::quit();
- }
- QThread::msleep(1);
- }
-#endif
-}
-
-void NativeMessagingHost::readLength()
-{
- quint32 length = 0;
- std::cin.read(reinterpret_cast<char*>(&length), 4);
- if (!std::cin.eof() && length > 0) {
- readStdIn(length);
- } else {
- QCoreApplication::quit();
- }
-}
-
-bool NativeMessagingHost::readStdIn(const quint32 length)
-{
- if (length <= 0) {
- return false;
- }
-
- QByteArray arr;
- arr.reserve(length);
-
- for (quint32 i = 0; i < length; ++i) {
- int c = std::getchar();
- if (c == EOF) {
- // message ended prematurely, ignore it and return
- return false;
- }
- arr.append(static_cast<char>(c));
- }
-
- if (arr.length() > 0 && m_localSocket && m_localSocket->state() == QLocalSocket::ConnectedState) {
- m_localSocket->write(arr.constData(), arr.length());
- m_localSocket->flush();
- }
-
- return true;
-}
-
-void NativeMessagingHost::newLocalMessage()
-{
- if (!m_localSocket || m_localSocket->bytesAvailable() <= 0) {
- return;
- }
-
- QByteArray arr = m_localSocket->readAll();
- if (!arr.isEmpty()) {
- sendReply(arr);
- }
-}
-
-void NativeMessagingHost::deleteSocket()
-{
- if (m_notifier) {
- m_notifier->setEnabled(false);
- }
- m_localSocket->deleteLater();
- QCoreApplication::quit();
-}
-
-void NativeMessagingHost::socketStateChanged(QLocalSocket::LocalSocketState socketState)
-{
- if (socketState == QLocalSocket::UnconnectedState || socketState == QLocalSocket::ClosingState) {
- m_running.testAndSetOrdered(1, 0);
- }
-}
diff --git a/src/proxy/NativeMessagingProxy.cpp b/src/proxy/NativeMessagingProxy.cpp
new file mode 100644
index 000000000..f5839e92b
--- /dev/null
+++ b/src/proxy/NativeMessagingProxy.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "NativeMessagingProxy.h"
+#include "browser/BrowserShared.h"
+
+#include <QCoreApplication>
+#include <QtConcurrent/QtConcurrent>
+
+#include <iostream>
+
+#ifdef Q_OS_WIN
+#include <fcntl.h>
+#include <winsock2.h>
+
+#include <windows.h>
+#else
+#include <sys/socket.h>
+#include <sys/types.h>
+#endif
+
+NativeMessagingProxy::NativeMessagingProxy()
+ : QObject()
+{
+ connect(this,
+ &NativeMessagingProxy::stdinMessage,
+ this,
+ &NativeMessagingProxy::transferStdinMessage,
+ Qt::QueuedConnection);
+
+ setupStandardInput();
+ setupLocalSocket();
+}
+
+void NativeMessagingProxy::setupStandardInput()
+{
+#ifdef Q_OS_WIN
+ setmode(fileno(stdin), _O_BINARY);
+ setmode(fileno(stdout), _O_BINARY);
+#endif
+
+ QtConcurrent::run([this] {
+ while (std::cin.good()) {
+ if (std::cin.peek() != EOF) {
+ uint length = 0;
+ for (uint i = 0; i < sizeof(uint); ++i) {
+ length |= getchar() << (i * 8);
+ }
+
+ QString msg;
+ msg.reserve(length);
+ for (uint i = 0; i < length; ++i) {
+ msg.append(getchar());
+ }
+
+ if (msg.length() > 0) {
+ emit stdinMessage(msg);
+ }
+ }
+ QThread::msleep(100);
+ }
+ QCoreApplication::quit();
+ });
+}
+
+void NativeMessagingProxy::transferStdinMessage(const QString& msg)
+{
+ if (m_localSocket && m_localSocket->state() == QLocalSocket::ConnectedState) {
+ m_localSocket->write(msg.toUtf8(), msg.length());
+ m_localSocket->flush();
+ }
+}
+
+void NativeMessagingProxy::setupLocalSocket()
+{
+ m_localSocket.reset(new QLocalSocket());
+ m_localSocket->connectToServer(BrowserShared::localServerPath());
+ m_localSocket->setReadBufferSize(BrowserShared::NATIVEMSG_MAX_LENGTH);
+ int socketDesc = m_localSocket->socketDescriptor();
+ if (socketDesc) {
+ int max = BrowserShared::NATIVEMSG_MAX_LENGTH;
+ setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&max), sizeof(max));
+ }
+
+ connect(m_localSocket.data(), SIGNAL(readyRead()), this, SLOT(transferSocketMessage()));
+ connect(m_localSocket.data(), SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
+}
+
+void NativeMessagingProxy::transferSocketMessage()
+{
+ auto msg = m_localSocket->readAll();
+ if (!msg.isEmpty()) {
+ // Explicitly write the message length as 1 byte chunks
+ uint len = msg.size();
+ std::cout.write(reinterpret_cast<char*>(&len), sizeof(len));
+
+ // Write the message and flush the stream
+ std::cout << msg.toStdString() << std::flush;
+ }
+}
+
+void NativeMessagingProxy::socketDisconnected()
+{
+ // Shutdown the proxy when disconnected from the application
+ QCoreApplication::quit();
+}
diff --git a/src/proxy/NativeMessagingProxy.h b/src/proxy/NativeMessagingProxy.h
new file mode 100644
index 000000000..75e6f03ac
--- /dev/null
+++ b/src/proxy/NativeMessagingProxy.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NATIVEMESSAGINGPROXY_H
+#define NATIVEMESSAGINGPROXY_H
+
+#include <QLocalSocket>
+#include <QObject>
+#include <QScopedPointer>
+
+class QWinEventNotifier;
+class QSocketNotifier;
+
+class NativeMessagingProxy : public QObject
+{
+ Q_OBJECT
+public:
+ NativeMessagingProxy();
+ ~NativeMessagingProxy() override = default;
+
+signals:
+ void stdinMessage(QString msg);
+
+public slots:
+ void transferSocketMessage();
+ void transferStdinMessage(const QString& msg);
+ void socketDisconnected();
+
+private:
+ void setupStandardInput();
+ void setupLocalSocket();
+
+private:
+ QScopedPointer<QLocalSocket> m_localSocket;
+
+ Q_DISABLE_COPY(NativeMessagingProxy)
+};
+
+#endif // NATIVEMESSAGINGPROXY_H
diff --git a/src/proxy/keepassxc-proxy.cpp b/src/proxy/keepassxc-proxy.cpp
index ea472b2c3..b2a2b1458 100644
--- a/src/proxy/keepassxc-proxy.cpp
+++ b/src/proxy/keepassxc-proxy.cpp
@@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "NativeMessagingHost.h"
+#include "NativeMessagingProxy.h"
#include <QCoreApplication>
+
#include <iostream>
#ifndef Q_OS_WIN
@@ -79,6 +80,6 @@ int main(int argc, char* argv[])
#else
SetConsoleCtrlHandler(static_cast<PHANDLER_ROUTINE>(ConsoleHandler), TRUE);
#endif
- NativeMessagingHost host;
+ NativeMessagingProxy proxy;
return a.exec();
}
diff --git a/src/sshagent/AgentSettingsPage.cpp b/src/sshagent/AgentSettingsPage.cpp
index 1f04d61b1..efadfbab8 100644
--- a/src/sshagent/AgentSettingsPage.cpp
+++ b/src/sshagent/AgentSettingsPage.cpp
@@ -18,16 +18,7 @@
#include "AgentSettingsPage.h"
#include "AgentSettingsWidget.h"
-#include "core/FilePath.h"
-
-AgentSettingsPage::AgentSettingsPage(DatabaseTabWidget* tabWidget)
-{
- Q_UNUSED(tabWidget);
-}
-
-AgentSettingsPage::~AgentSettingsPage()
-{
-}
+#include "core/Resources.h"
QString AgentSettingsPage::name()
{
@@ -36,7 +27,7 @@ QString AgentSettingsPage::name()
QIcon AgentSettingsPage::icon()
{
- return FilePath::instance()->icon("apps", "utilities-terminal");
+ return Resources::instance()->icon("utilities-terminal");
}
QWidget* AgentSettingsPage::createWidget()
diff --git a/src/sshagent/AgentSettingsPage.h b/src/sshagent/AgentSettingsPage.h
index 015dfb9ac..33f29b055 100644
--- a/src/sshagent/AgentSettingsPage.h
+++ b/src/sshagent/AgentSettingsPage.h
@@ -25,8 +25,8 @@
class AgentSettingsPage : public ISettingsPage
{
public:
- AgentSettingsPage(DatabaseTabWidget* tabWidget);
- ~AgentSettingsPage() override;
+ AgentSettingsPage() = default;
+ ~AgentSettingsPage() override = default;
QString name() override;
QIcon icon() override;
diff --git a/src/sshagent/AgentSettingsWidget.cpp b/src/sshagent/AgentSettingsWidget.cpp
index be23c6906..3db5431fc 100644
--- a/src/sshagent/AgentSettingsWidget.cpp
+++ b/src/sshagent/AgentSettingsWidget.cpp
@@ -17,9 +17,11 @@
*/
#include "AgentSettingsWidget.h"
+#include "SSHAgent.h"
#include "ui_AgentSettingsWidget.h"
#include "core/Config.h"
+#include <QProcessEnvironment>
AgentSettingsWidget::AgentSettingsWidget(QWidget* parent)
: QWidget(parent)
@@ -28,7 +30,13 @@ AgentSettingsWidget::AgentSettingsWidget(QWidget* parent)
m_ui->setupUi(this);
#ifndef Q_OS_WIN
m_ui->useOpenSSHCheckBox->setVisible(false);
+#else
+ m_ui->sshAuthSockWidget->setVisible(false);
#endif
+ m_ui->sshAuthSockMessageWidget->setVisible(sshAgent()->isEnabled());
+ m_ui->sshAuthSockMessageWidget->setCloseButtonVisible(false);
+ m_ui->sshAuthSockMessageWidget->setAutoHideTimeout(-1);
+ connect(m_ui->enableSSHAgentCheckBox, SIGNAL(stateChanged(int)), SLOT(toggleSettingsEnabled()));
}
AgentSettingsWidget::~AgentSettingsWidget()
@@ -37,16 +45,53 @@ AgentSettingsWidget::~AgentSettingsWidget()
void AgentSettingsWidget::loadSettings()
{
- m_ui->enableSSHAgentCheckBox->setChecked(config()->get("SSHAgent", false).toBool());
+ auto sshAgentEnabled = sshAgent()->isEnabled();
+
+ m_ui->enableSSHAgentCheckBox->setChecked(sshAgentEnabled);
#ifdef Q_OS_WIN
- m_ui->useOpenSSHCheckBox->setChecked(config()->get("SSHAgentOpenSSH", false).toBool());
+ m_ui->useOpenSSHCheckBox->setChecked(sshAgent()->useOpenSSH());
+#else
+ auto sshAuthSock = sshAgent()->socketPath(false);
+ auto sshAuthSockOverride = sshAgent()->authSockOverride();
+ m_ui->sshAuthSockLabel->setText(sshAuthSock.isEmpty() ? tr("(empty)") : sshAuthSock);
+ m_ui->sshAuthSockOverrideEdit->setText(sshAuthSockOverride);
+#endif
+
+ m_ui->sshAuthSockMessageWidget->setVisible(sshAgentEnabled);
+
+ if (sshAgentEnabled) {
+#ifndef Q_OS_WIN
+ if (sshAuthSock.isEmpty() && sshAuthSockOverride.isEmpty()) {
+ m_ui->sshAuthSockMessageWidget->showMessage(
+ tr("No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set "
+ "an override."),
+ MessageWidget::Warning);
+ return;
+ }
#endif
+ QList<QSharedPointer<OpenSSHKey>> keys;
+ if (sshAgent()->listIdentities(keys)) {
+ m_ui->sshAuthSockMessageWidget->showMessage(tr("SSH Agent connection is working!"),
+ MessageWidget::Positive);
+ } else {
+ m_ui->sshAuthSockMessageWidget->showMessage(sshAgent()->errorString(), MessageWidget::Error);
+ }
+ }
+
+ toggleSettingsEnabled();
}
void AgentSettingsWidget::saveSettings()
{
- config()->set("SSHAgent", m_ui->enableSSHAgentCheckBox->isChecked());
+ auto sshAuthSockOverride = m_ui->sshAuthSockOverrideEdit->text();
+ sshAgent()->setAuthSockOverride(sshAuthSockOverride);
#ifdef Q_OS_WIN
- config()->set("SSHAgentOpenSSH", m_ui->useOpenSSHCheckBox->isChecked());
+ sshAgent()->setUseOpenSSH(m_ui->useOpenSSHCheckBox->isChecked());
#endif
+ sshAgent()->setEnabled(m_ui->enableSSHAgentCheckBox->isChecked());
+}
+
+void AgentSettingsWidget::toggleSettingsEnabled()
+{
+ m_ui->agentConfigPageBody->setEnabled(m_ui->enableSSHAgentCheckBox->isChecked());
}
diff --git a/src/sshagent/AgentSettingsWidget.h b/src/sshagent/AgentSettingsWidget.h
index 8667be657..fcc65818c 100644
--- a/src/sshagent/AgentSettingsWidget.h
+++ b/src/sshagent/AgentSettingsWidget.h
@@ -37,6 +37,7 @@ public:
public slots:
void loadSettings();
void saveSettings();
+ void toggleSettingsEnabled();
private:
QScopedPointer<Ui::AgentSettingsWidget> m_ui;
diff --git a/src/sshagent/AgentSettingsWidget.ui b/src/sshagent/AgentSettingsWidget.ui
index ff7435abe..71958644f 100644
--- a/src/sshagent/AgentSettingsWidget.ui
+++ b/src/sshagent/AgentSettingsWidget.ui
@@ -10,7 +10,7 @@
<height>300</height>
</rect>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_3">
+ <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
@@ -24,34 +24,141 @@
<number>0</number>
</property>
<item>
- <widget class="QCheckBox" name="enableSSHAgentCheckBox">
- <property name="text">
- <string>Enable SSH Agent (requires restart)</string>
- </property>
+ <widget class="QWidget" name="sshAuthSockWidget" native="true">
+ <layout class="QGridLayout" name="sshAuthSockOverrideLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ </layout>
</widget>
</item>
<item>
- <widget class="QCheckBox" name="useOpenSSHCheckBox">
+ <widget class="MessageWidget" name="sshAuthSockMessageWidget" native="true"/>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="enableSSHAgentCheckBox">
<property name="text">
- <string>Use OpenSSH for Windows instead of Pageant</string>
+ <string>Enable SSH Agent integration</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
+ <widget class="QFrame" name="agentConfigPageBody">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
</property>
- </spacer>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="useOpenSSHCheckBox">
+ <property name="text">
+ <string>Use OpenSSH for Windows instead of Pageant</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="agentValues">
+ <property name="topMargin">
+ <number>10</number>
+ </property>
+ <property name="bottomMargin">
+ <number>10</number>
+ </property>
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
+ <property name="verticalSpacing">
+ <number>8</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="sshAuthSockValueLabel">
+ <property name="text">
+ <string>SSH_AUTH_SOCK value</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="sshAuthSockOverrideLabel">
+ <property name="text">
+ <string>SSH_AUTH_SOCK override</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="sshAuthSockOverrideEdit"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="sshAuthSockLabel">
+ <property name="font">
+ <font>
+ <family>Monospace</family>
+ </font>
+ </property>
+ <property name="text">
+ <string>(empty)</string>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>MessageWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/MessageWidget.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections/>
</ui>
diff --git a/src/sshagent/KeeAgentSettings.cpp b/src/sshagent/KeeAgentSettings.cpp
index 8c2278005..e9f6e4bdd 100644
--- a/src/sshagent/KeeAgentSettings.cpp
+++ b/src/sshagent/KeeAgentSettings.cpp
@@ -17,22 +17,14 @@
*/
#include "KeeAgentSettings.h"
+#include "core/Tools.h"
KeeAgentSettings::KeeAgentSettings()
- : m_allowUseOfSshKey(false)
- , m_addAtDatabaseOpen(false)
- , m_removeAtDatabaseClose(false)
- , m_useConfirmConstraintWhenAdding(false)
- , m_useLifetimeConstraintWhenAdding(false)
- , m_lifetimeConstraintDuration(600)
- , m_selectedType(QString("file"))
- , m_attachmentName(QString())
- , m_saveAttachmentToTempFile(false)
- , m_fileName(QString())
{
+ reset();
}
-bool KeeAgentSettings::operator==(KeeAgentSettings& other)
+bool KeeAgentSettings::operator==(const KeeAgentSettings& other) const
{
// clang-format off
return (m_allowUseOfSshKey == other.m_allowUseOfSshKey && m_addAtDatabaseOpen == other.m_addAtDatabaseOpen
@@ -47,17 +39,51 @@ bool KeeAgentSettings::operator==(KeeAgentSettings& other)
// clang-format on
}
-bool KeeAgentSettings::operator!=(KeeAgentSettings& other)
+bool KeeAgentSettings::operator!=(const KeeAgentSettings& other) const
{
return !(*this == other);
}
-bool KeeAgentSettings::isDefault()
+/**
+ * Test if this instance is at default settings.
+ *
+ * @return true if is at default settings
+ */
+bool KeeAgentSettings::isDefault() const
{
KeeAgentSettings defaultSettings;
return (*this == defaultSettings);
}
+/**
+ * Reset this instance to default settings
+ */
+void KeeAgentSettings::reset()
+{
+ m_allowUseOfSshKey = false;
+ m_addAtDatabaseOpen = false;
+ m_removeAtDatabaseClose = false;
+ m_useConfirmConstraintWhenAdding = false;
+ m_useLifetimeConstraintWhenAdding = false;
+ m_lifetimeConstraintDuration = 600;
+
+ m_selectedType = QStringLiteral("file");
+ m_attachmentName.clear();
+ m_saveAttachmentToTempFile = false;
+ m_fileName.clear();
+ m_error.clear();
+}
+
+/**
+ * Get last error as a QString.
+ *
+ * @return translated error message
+ */
+const QString KeeAgentSettings::errorString() const
+{
+ return m_error;
+}
+
bool KeeAgentSettings::allowUseOfSshKey() const
{
return m_allowUseOfSshKey;
@@ -108,6 +134,11 @@ const QString KeeAgentSettings::fileName() const
return m_fileName;
}
+const QString KeeAgentSettings::fileNameEnvSubst(QProcessEnvironment environment) const
+{
+ return Tools::envSubstitute(m_fileName, environment);
+}
+
void KeeAgentSettings::setAllowUseOfSshKey(bool allowUseOfSshKey)
{
m_allowUseOfSshKey = allowUseOfSshKey;
@@ -174,16 +205,26 @@ int KeeAgentSettings::readInt(QXmlStreamReader& reader)
return ret;
}
+/**
+ * Read settings from an XML document.
+ *
+ * Sets error string on error.
+ *
+ * @param ba XML document
+ * @return success
+ */
bool KeeAgentSettings::fromXml(const QByteArray& ba)
{
QXmlStreamReader reader;
reader.addData(ba);
if (reader.error() || !reader.readNextStartElement()) {
+ m_error = reader.errorString();
return false;
}
if (reader.qualifiedName() != "EntrySettings") {
+ m_error = QCoreApplication::translate("KeeAgentSettings", "Invalid KeeAgent settings file structure.");
return false;
}
@@ -230,7 +271,12 @@ bool KeeAgentSettings::fromXml(const QByteArray& ba)
return true;
}
-QByteArray KeeAgentSettings::toXml()
+/**
+ * Write settings to an XML document.
+ *
+ * @return XML document
+ */
+QByteArray KeeAgentSettings::toXml() const
{
QByteArray ba;
QXmlStreamWriter writer(&ba);
@@ -276,3 +322,153 @@ QByteArray KeeAgentSettings::toXml()
return ba;
}
+
+/**
+ * Check if entry attachments have KeeAgent settings configured
+ *
+ * @param attachments EntryAttachments to check the key
+ * @return true if XML document exists
+ */
+bool KeeAgentSettings::inEntryAttachments(const EntryAttachments* attachments)
+{
+ return attachments->hasKey("KeeAgent.settings");
+}
+
+/**
+ * Read settings from an entry as an XML attachment.
+ *
+ * Sets error string on error.
+ *
+ * @param entry Entry to read the attachment from
+ * @return true if XML document was loaded
+ */
+bool KeeAgentSettings::fromEntry(const Entry* entry)
+{
+ return fromXml(entry->attachments()->value("KeeAgent.settings"));
+}
+
+/**
+ * Write settings to an entry as an XML attachment.
+ *
+ * @param entry Entry to create the attachment to
+ */
+void KeeAgentSettings::toEntry(Entry* entry) const
+{
+ if (isDefault()) {
+ if (entry->attachments()->hasKey("KeeAgent.settings")) {
+ entry->attachments()->remove("KeeAgent.settings");
+ }
+ } else {
+ entry->attachments()->set("KeeAgent.settings", toXml());
+ }
+}
+
+/**
+ * Test if a SSH key is currently set to be used
+ *
+ * @return true if key is configured
+ */
+bool KeeAgentSettings::keyConfigured() const
+{
+ if (m_selectedType == "attachment") {
+ return !m_attachmentName.isEmpty();
+ } else {
+ return !m_fileName.isEmpty();
+ }
+}
+
+/**
+ * Read a SSH key based on settings from entry to key.
+ *
+ * Sets error string on error.
+ *
+ * @param entry input entry to read attachment and decryption key
+ * @param key output key object
+ * @param decrypt avoid private key decryption if possible (old RSA keys are always decrypted)
+ * @return true if key was properly opened
+ */
+bool KeeAgentSettings::toOpenSSHKey(const Entry* entry, OpenSSHKey& key, bool decrypt)
+{
+ return toOpenSSHKey(entry->username(), entry->password(), entry->attachments(), key, decrypt);
+}
+
+/**
+ * Read a SSH key based on settings to key.
+ *
+ * Sets error string on error.
+ *
+ * @param username username to set on key if empty
+ * @param password password to decrypt key if needed
+ * @param attachments attachments to read an attachment key from
+ * @param key output key object
+ * @param decrypt avoid private key decryption if possible (old RSA keys are always decrypted)
+ * @return true if key was properly opened
+ */
+bool KeeAgentSettings::toOpenSSHKey(const QString& username,
+ const QString& password,
+ const EntryAttachments* attachments,
+ OpenSSHKey& key,
+ bool decrypt)
+{
+ QString fileName;
+ QByteArray privateKeyData;
+
+ if (m_selectedType == "attachment") {
+ if (!attachments) {
+ m_error = QCoreApplication::translate("KeeAgentSettings",
+ "Private key is an attachment but no attachments provided.");
+ return false;
+ }
+
+ fileName = m_attachmentName;
+ privateKeyData = attachments->value(fileName);
+ } else {
+ QFile localFile(fileNameEnvSubst());
+ QFileInfo localFileInfo(localFile);
+ fileName = localFileInfo.fileName();
+
+ if (localFile.fileName().isEmpty()) {
+ m_error = QCoreApplication::translate("KeeAgentSettings", "Private key is empty");
+ return false;
+ }
+
+ if (localFile.size() > 1024 * 1024) {
+ m_error = QCoreApplication::translate("KeeAgentSettings", "File too large to be a private key");
+ return false;
+ }
+
+ if (!localFile.open(QIODevice::ReadOnly)) {
+ m_error = QCoreApplication::translate("KeeAgentSettings", "Failed to open private key");
+ return false;
+ }
+
+ privateKeyData = localFile.readAll();
+ }
+
+ if (privateKeyData.isEmpty()) {
+ m_error = QCoreApplication::translate("KeeAgentSettings", "Private key is empty");
+ return false;
+ }
+
+ if (!key.parsePKCS1PEM(privateKeyData)) {
+ m_error = key.errorString();
+ return false;
+ }
+
+ if (key.encrypted() && (decrypt || key.publicParts().isEmpty())) {
+ if (!key.openKey(password)) {
+ m_error = key.errorString();
+ return false;
+ }
+ }
+
+ if (key.comment().isEmpty()) {
+ key.setComment(username);
+ }
+
+ if (key.comment().isEmpty()) {
+ key.setComment(fileName);
+ }
+
+ return true;
+}
diff --git a/src/sshagent/KeeAgentSettings.h b/src/sshagent/KeeAgentSettings.h
index 484dee88d..3cc701666 100644
--- a/src/sshagent/KeeAgentSettings.h
+++ b/src/sshagent/KeeAgentSettings.h
@@ -19,6 +19,9 @@
#ifndef KEEAGENTSETTINGS_H
#define KEEAGENTSETTINGS_H
+#include "core/Entry.h"
+#include "core/EntryAttachments.h"
+#include "crypto/ssh/OpenSSHKey.h"
#include <QXmlStreamReader>
#include <QtCore>
@@ -26,13 +29,26 @@ class KeeAgentSettings
{
public:
KeeAgentSettings();
-
- bool operator==(KeeAgentSettings& other);
- bool operator!=(KeeAgentSettings& other);
- bool isDefault();
+ bool operator==(const KeeAgentSettings& other) const;
+ bool operator!=(const KeeAgentSettings& other) const;
+ bool isDefault() const;
+ void reset();
bool fromXml(const QByteArray& ba);
- QByteArray toXml();
+ QByteArray toXml() const;
+
+ static bool inEntryAttachments(const EntryAttachments* attachments);
+ bool fromEntry(const Entry* entry);
+ void toEntry(Entry* entry) const;
+ bool keyConfigured() const;
+ bool toOpenSSHKey(const Entry* entry, OpenSSHKey& key, bool decrypt);
+ bool toOpenSSHKey(const QString& username,
+ const QString& password,
+ const EntryAttachments* attachments,
+ OpenSSHKey& key,
+ bool decrypt);
+
+ const QString errorString() const;
bool allowUseOfSshKey() const;
bool addAtDatabaseOpen() const;
@@ -45,6 +61,7 @@ public:
const QString attachmentName() const;
bool saveAttachmentToTempFile() const;
const QString fileName() const;
+ const QString fileNameEnvSubst(QProcessEnvironment environment = QProcessEnvironment::systemEnvironment()) const;
void setAllowUseOfSshKey(bool allowUseOfSshKey);
void setAddAtDatabaseOpen(bool addAtDatabaseOpen);
@@ -74,6 +91,7 @@ private:
QString m_attachmentName;
bool m_saveAttachmentToTempFile;
QString m_fileName;
+ QString m_error;
};
#endif // KEEAGENTSETTINGS_H
diff --git a/src/sshagent/SSHAgent.cpp b/src/sshagent/SSHAgent.cpp
index ac25a7066..20284c685 100644
--- a/src/sshagent/SSHAgent.cpp
+++ b/src/sshagent/SSHAgent.cpp
@@ -29,43 +29,75 @@
#include <windows.h>
#endif
-SSHAgent* SSHAgent::m_instance;
+Q_GLOBAL_STATIC(SSHAgent, s_sshAgent);
-SSHAgent::SSHAgent(QObject* parent)
- : QObject(parent)
+SSHAgent::~SSHAgent()
{
-#ifndef Q_OS_WIN
- m_socketPath = QProcessEnvironment::systemEnvironment().value("SSH_AUTH_SOCK");
-#else
- m_socketPath = "\\\\.\\pipe\\openssh-ssh-agent";
-#endif
+ removeAllIdentities();
}
-SSHAgent::~SSHAgent()
+SSHAgent* SSHAgent::instance()
{
- auto it = m_addedKeys.begin();
- while (it != m_addedKeys.end()) {
- // Remove key if requested to remove on lock
- if (it.value()) {
- OpenSSHKey key = it.key();
- removeIdentity(key);
- }
- it = m_addedKeys.erase(it);
- }
+ return s_sshAgent;
}
-SSHAgent* SSHAgent::instance()
+bool SSHAgent::isEnabled() const
{
- if (!m_instance) {
- qFatal("Race condition: instance wanted before it was initialized, this is a bug.");
+ return config()->get(Config::SSHAgent_Enabled).toBool();
+}
+
+void SSHAgent::setEnabled(bool enabled)
+{
+ if (isEnabled() && !enabled) {
+ removeAllIdentities();
}
- return m_instance;
+ config()->set(Config::SSHAgent_Enabled, enabled);
+
+ emit enabledChanged(enabled);
}
-void SSHAgent::init(QObject* parent)
+QString SSHAgent::authSockOverride() const
{
- m_instance = new SSHAgent(parent);
+ return config()->get(Config::SSHAgent_AuthSockOverride).toString();
+}
+
+void SSHAgent::setAuthSockOverride(QString& authSockOverride)
+{
+ config()->set(Config::SSHAgent_AuthSockOverride, authSockOverride);
+}
+
+#ifdef Q_OS_WIN
+bool SSHAgent::useOpenSSH() const
+{
+ return config()->get(Config::SSHAgent_UseOpenSSH).toBool();
+}
+
+void SSHAgent::setUseOpenSSH(bool useOpenSSH)
+{
+ config()->set(Config::SSHAgent_UseOpenSSH, useOpenSSH);
+}
+#endif
+
+QString SSHAgent::socketPath(bool allowOverride) const
+{
+ QString socketPath;
+
+#ifndef Q_OS_WIN
+ if (allowOverride) {
+ socketPath = authSockOverride();
+ }
+
+ // if the overridden path is empty (no override set), default to environment
+ if (socketPath.isEmpty()) {
+ socketPath = QProcessEnvironment::systemEnvironment().value("SSH_AUTH_SOCK");
+ }
+#else
+ Q_UNUSED(allowOverride)
+ socketPath = "\\\\.\\pipe\\openssh-ssh-agent";
+#endif
+
+ return socketPath;
}
const QString SSHAgent::errorString() const
@@ -76,12 +108,13 @@ const QString SSHAgent::errorString() const
bool SSHAgent::isAgentRunning() const
{
#ifndef Q_OS_WIN
- return !m_socketPath.isEmpty();
+ QFileInfo socketFileInfo(socketPath());
+ return !socketFileInfo.path().isEmpty() && socketFileInfo.exists();
#else
- if (!config()->get("SSHAgentOpenSSH").toBool()) {
+ if (!useOpenSSH()) {
return (FindWindowA("Pageant", "Pageant") != nullptr);
} else {
- return WaitNamedPipe(m_socketPath.toLatin1().data(), 100);
+ return WaitNamedPipe(socketPath().toLatin1().data(), 100);
}
#endif
}
@@ -89,7 +122,7 @@ bool SSHAgent::isAgentRunning() const
bool SSHAgent::sendMessage(const QByteArray& in, QByteArray& out)
{
#ifdef Q_OS_WIN
- if (!config()->get("SSHAgentOpenSSH").toBool()) {
+ if (!useOpenSSH()) {
return sendMessagePageant(in, out);
}
#endif
@@ -97,7 +130,7 @@ bool SSHAgent::sendMessage(const QByteArray& in, QByteArray& out)
QLocalSocket socket;
BinaryStream stream(&socket);
- socket.connectToServer(m_socketPath);
+ socket.connectToServer(socketPath());
if (!socket.waitForConnected(500)) {
m_error = tr("Agent connection failed.");
return false;
@@ -185,18 +218,22 @@ bool SSHAgent::sendMessagePageant(const QByteArray& in, QByteArray& out)
* Add the identity to the SSH agent.
*
* @param key identity / key to add
- * @param lifetime time after which the key should expire
- * @param confirm ask for confirmation before adding the key
- * @param removeOnLock autoremove from agent when the Database is locked
+ * @param settings constraints (lifetime, confirm), remove-on-lock
+ * @param databaseUuid database that owns the key for remove-on-lock
* @return true on success
*/
-bool SSHAgent::addIdentity(OpenSSHKey& key, KeeAgentSettings& settings)
+bool SSHAgent::addIdentity(OpenSSHKey& key, const KeeAgentSettings& settings, const QUuid& databaseUuid)
{
if (!isAgentRunning()) {
m_error = tr("No agent running, cannot add identity.");
return false;
}
+ if (m_addedKeys.contains(key) && m_addedKeys[key].first != databaseUuid) {
+ m_error = tr("Key identity ownership conflict. Refusing to add.");
+ return false;
+ }
+
QByteArray requestData;
BinaryStream request(&requestData);
@@ -236,7 +273,7 @@ bool SSHAgent::addIdentity(OpenSSHKey& key, KeeAgentSettings& settings)
OpenSSHKey keyCopy = key;
keyCopy.clearPrivate();
- m_addedKeys[keyCopy] = settings.removeAtDatabaseClose();
+ m_addedKeys[keyCopy] = qMakePair(databaseUuid, settings.removeAtDatabaseClose());
return true;
}
@@ -268,6 +305,115 @@ bool SSHAgent::removeIdentity(OpenSSHKey& key)
}
/**
+ * Get a list of identities from the SSH agent.
+ *
+ * @param list list of keys to append
+ * @return true on success
+ */
+bool SSHAgent::listIdentities(QList<QSharedPointer<OpenSSHKey>>& list)
+{
+ if (!isAgentRunning()) {
+ m_error = tr("No agent running, cannot list identities.");
+ return false;
+ }
+
+ QByteArray requestData;
+ BinaryStream request(&requestData);
+
+ request.write(SSH_AGENTC_REQUEST_IDENTITIES);
+
+ QByteArray responseData;
+ if (!sendMessage(requestData, responseData)) {
+ return false;
+ }
+
+ BinaryStream response(&responseData);
+
+ quint8 responseType;
+ if (!response.read(responseType) || responseType != SSH_AGENT_IDENTITIES_ANSWER) {
+ m_error = tr("Agent protocol error.");
+ return false;
+ }
+
+ quint32 nKeys;
+ if (!response.read(nKeys)) {
+ m_error = tr("Agent protocol error.");
+ return false;
+ }
+
+ for (quint32 i = 0; i < nKeys; i++) {
+ QByteArray publicData;
+ QString comment;
+
+ if (!response.readString(publicData)) {
+ m_error = tr("Agent protocol error.");
+ return false;
+ }
+
+ if (!response.readString(comment)) {
+ m_error = tr("Agent protocol error.");
+ return false;
+ }
+
+ OpenSSHKey* key = new OpenSSHKey();
+ key->setComment(comment);
+
+ list.append(QSharedPointer<OpenSSHKey>(key));
+
+ BinaryStream publicDataStream(&publicData);
+ if (!key->readPublic(publicDataStream)) {
+ m_error = key->errorString();
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Check if this identity is loaded in the SSH Agent.
+ *
+ * @param key identity to remove
+ * @param loaded is the key laoded
+ * @return true on success
+ */
+bool SSHAgent::checkIdentity(const OpenSSHKey& key, bool& loaded)
+{
+ QList<QSharedPointer<OpenSSHKey>> list;
+
+ if (!listIdentities(list)) {
+ return false;
+ }
+
+ loaded = false;
+
+ for (const auto& it : list) {
+ if (*it == key) {
+ loaded = true;
+ break;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Remove all identities known to this instance
+ */
+void SSHAgent::removeAllIdentities()
+{
+ auto it = m_addedKeys.begin();
+ while (it != m_addedKeys.end()) {
+ // Remove key if requested to remove on lock
+ if (it.value().second) {
+ OpenSSHKey key = it.key();
+ removeIdentity(key);
+ }
+ it = m_addedKeys.erase(it);
+ }
+}
+
+/**
* Change "remove identity on lock" setting for a key already added to the agent.
* Will to nothing if the key has not been added to the agent.
*
@@ -277,104 +423,72 @@ bool SSHAgent::removeIdentity(OpenSSHKey& key)
void SSHAgent::setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove)
{
if (m_addedKeys.contains(key)) {
- m_addedKeys[key] = autoRemove;
+ m_addedKeys[key].second = autoRemove;
}
}
-void SSHAgent::databaseModeChanged()
+void SSHAgent::databaseLocked()
{
auto* widget = qobject_cast<DatabaseWidget*>(sender());
if (!widget) {
return;
}
- if (widget->isLocked()) {
- auto it = m_addedKeys.begin();
- while (it != m_addedKeys.end()) {
- OpenSSHKey key = it.key();
- if (it.value()) {
- if (!removeIdentity(key)) {
- emit error(m_error);
- }
- it = m_addedKeys.erase(it);
- } else {
- // don't remove it yet
- m_addedKeys[key] = false;
- ++it;
+ QUuid databaseUuid = widget->database()->uuid();
+
+ auto it = m_addedKeys.begin();
+ while (it != m_addedKeys.end()) {
+ if (it.value().first != databaseUuid) {
+ ++it;
+ continue;
+ }
+ OpenSSHKey key = it.key();
+ if (it.value().second) {
+ if (!removeIdentity(key)) {
+ emit error(m_error);
}
+ it = m_addedKeys.erase(it);
+ } else {
+ // don't remove it yet
+ m_addedKeys[key].second = false;
+ ++it;
}
+ }
+}
+void SSHAgent::databaseUnlocked()
+{
+ auto* widget = qobject_cast<DatabaseWidget*>(sender());
+ if (!widget) {
return;
}
for (Entry* e : widget->database()->rootGroup()->entriesRecursive()) {
-
if (widget->database()->metadata()->recycleBinEnabled()
&& e->group() == widget->database()->metadata()->recycleBin()) {
continue;
}
- if (!e->attachments()->hasKey("KeeAgent.settings")) {
- continue;
- }
-
KeeAgentSettings settings;
- settings.fromXml(e->attachments()->value("KeeAgent.settings"));
- if (!settings.allowUseOfSshKey()) {
+ if (!settings.fromEntry(e)) {
continue;
}
- QByteArray keyData;
- QString fileName;
- if (settings.selectedType() == "attachment") {
- fileName = settings.attachmentName();
- keyData = e->attachments()->value(fileName);
- } else if (!settings.fileName().isEmpty()) {
- QFile file(settings.fileName());
- QFileInfo fileInfo(file);
-
- fileName = fileInfo.fileName();
-
- if (file.size() > 1024 * 1024) {
- continue;
- }
-
- if (!file.open(QIODevice::ReadOnly)) {
- continue;
- }
-
- keyData = file.readAll();
- }
-
- if (keyData.isEmpty()) {
+ if (!settings.allowUseOfSshKey() || !settings.addAtDatabaseOpen()) {
continue;
}
OpenSSHKey key;
- if (!key.parsePKCS1PEM(keyData)) {
+ if (!settings.toOpenSSHKey(e, key, true)) {
continue;
}
- if (!key.openKey(e->password())) {
- continue;
- }
-
- if (key.comment().isEmpty()) {
- key.setComment(e->username());
- }
-
- if (key.comment().isEmpty()) {
- key.setComment(fileName);
- }
-
- if (settings.addAtDatabaseOpen()) {
- // Add key to agent; ignore errors if we have previously added the key
- bool known_key = m_addedKeys.contains(key);
- if (!addIdentity(key, settings) && !known_key) {
- emit error(m_error);
- }
+ // Add key to agent; ignore errors if we have previously added the key
+ bool known_key = m_addedKeys.contains(key);
+ if (!addIdentity(key, settings, widget->database()->uuid()) && !known_key) {
+ emit error(m_error);
}
}
}
diff --git a/src/sshagent/SSHAgent.h b/src/sshagent/SSHAgent.h
index 940d8c554..7deaf8e7f 100644
--- a/src/sshagent/SSHAgent.h
+++ b/src/sshagent/SSHAgent.h
@@ -32,20 +32,35 @@ class SSHAgent : public QObject
Q_OBJECT
public:
+ ~SSHAgent() override;
static SSHAgent* instance();
- static void init(QObject* parent);
+
+ bool isEnabled() const;
+ void setEnabled(bool enabled);
+ QString socketPath(bool allowOverride = true) const;
+ QString authSockOverride() const;
+ void setAuthSockOverride(QString& authSockOverride);
+#ifdef Q_OS_WIN
+ bool useOpenSSH() const;
+ void setUseOpenSSH(bool useOpenSSH);
+#endif
const QString errorString() const;
bool isAgentRunning() const;
- bool addIdentity(OpenSSHKey& key, KeeAgentSettings& settings);
+ bool addIdentity(OpenSSHKey& key, const KeeAgentSettings& settings, const QUuid& databaseUuid);
+ bool listIdentities(QList<QSharedPointer<OpenSSHKey>>& list);
+ bool checkIdentity(const OpenSSHKey& key, bool& loaded);
bool removeIdentity(OpenSSHKey& key);
+ void removeAllIdentities();
void setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove);
signals:
void error(const QString& message);
+ void enabledChanged(bool enabled);
public slots:
- void databaseModeChanged();
+ void databaseLocked();
+ void databaseUnlocked();
private:
const quint8 SSH_AGENT_FAILURE = 5;
@@ -59,24 +74,21 @@ private:
const quint8 SSH_AGENT_CONSTRAIN_LIFETIME = 1;
const quint8 SSH_AGENT_CONSTRAIN_CONFIRM = 2;
- explicit SSHAgent(QObject* parent = nullptr);
- ~SSHAgent();
-
bool sendMessage(const QByteArray& in, QByteArray& out);
#ifdef Q_OS_WIN
bool sendMessagePageant(const QByteArray& in, QByteArray& out);
-#endif
- static SSHAgent* m_instance;
-
- QString m_socketPath;
-#ifdef Q_OS_WIN
const quint32 AGENT_MAX_MSGLEN = 8192;
const quint32 AGENT_COPYDATA_ID = 0x804e50ba;
#endif
- QHash<OpenSSHKey, bool> m_addedKeys;
+ QHash<OpenSSHKey, QPair<QUuid, bool>> m_addedKeys;
QString m_error;
};
+static inline SSHAgent* sshAgent()
+{
+ return SSHAgent::instance();
+}
+
#endif // KEEPASSXC_SSHAGENT_H
diff --git a/src/updatecheck/UpdateChecker.cpp b/src/updatecheck/UpdateChecker.cpp
index c36879707..3d3387585 100644
--- a/src/updatecheck/UpdateChecker.cpp
+++ b/src/updatecheck/UpdateChecker.cpp
@@ -42,7 +42,12 @@ UpdateChecker::~UpdateChecker()
void UpdateChecker::checkForUpdates(bool manuallyRequested)
{
- auto nextCheck = config()->get("GUI/CheckForUpdatesNextCheck", 0).toULongLong();
+ // Skip update if we are already performing one
+ if (m_reply) {
+ return;
+ }
+
+ auto nextCheck = config()->get(Config::GUI_CheckForUpdatesNextCheck).toULongLong();
m_isManuallyRequested = manuallyRequested;
if (m_isManuallyRequested || Clock::currentSecondsSinceEpoch() >= nextCheck) {
@@ -50,7 +55,7 @@ void UpdateChecker::checkForUpdates(bool manuallyRequested)
QString apiUrlStr = QString("https://api.github.com/repos/keepassxreboot/keepassxc/releases");
- if (!config()->get("GUI/CheckForUpdatesIncludeBetas", false).toBool()) {
+ if (!config()->get(Config::GUI_CheckForUpdatesIncludeBetas).toBool()) {
apiUrlStr += "/latest";
}
@@ -85,7 +90,7 @@ void UpdateChecker::fetchFinished()
QJsonDocument jsonResponse = QJsonDocument::fromJson(m_bytesReceived);
QJsonObject jsonObject = jsonResponse.object();
- if (config()->get("GUI/CheckForUpdatesIncludeBetas", false).toBool()) {
+ if (config()->get(Config::GUI_CheckForUpdatesIncludeBetas).toBool()) {
QJsonArray jsonArray = jsonResponse.array();
jsonObject = jsonArray.at(0).toObject();
}
@@ -97,7 +102,7 @@ void UpdateChecker::fetchFinished()
// Check again in 7 days
// TODO: change to toSecsSinceEpoch() when min Qt >= 5.8
- config()->set("GUI/CheckForUpdatesNextCheck", Clock::currentDateTime().addDays(7).toTime_t());
+ config()->set(Config::GUI_CheckForUpdatesNextCheck, Clock::currentDateTime().addDays(7).toTime_t());
} else {
version = "error";
}
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index fc27f48d3..28d8516cf 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -57,8 +57,9 @@ macro(parse_arguments prefix arg_names option_names)
endmacro(parse_arguments)
macro(add_unit_test)
- parse_arguments(TEST "NAME;SOURCES;LIBS" "" ${ARGN})
+ parse_arguments(TEST "NAME;SOURCES;LIBS;LAUNCHER" "" ${ARGN})
set(_test_NAME ${TEST_NAME})
+ set(_test_LAUNCHER ${TEST_LAUNCHER})
set(_srcList ${TEST_SOURCES})
add_executable(${_test_NAME} ${_srcList})
target_link_libraries(${_test_NAME} ${TEST_LIBS})
@@ -69,9 +70,9 @@ macro(add_unit_test)
set(TEST_OUTPUT ${TEST_OUTPUT} CACHE STRING "The output to generate when running the QTest unit tests")
if(KDE4_TEST_OUTPUT STREQUAL "xml")
- add_test(${_test_NAME} ${_test_NAME} -xml -o ${_test_NAME}.tml)
+ add_test(${_test_NAME} ${_test_LAUNCHER} ${_test_NAME} -xml -o ${_test_NAME}.tml)
else(KDE4_TEST_OUTPUT STREQUAL "xml")
- add_test(${_test_NAME} ${_test_NAME})
+ add_test(${_test_NAME} ${_test_LAUNCHER} ${_test_NAME})
endif(KDE4_TEST_OUTPUT STREQUAL "xml")
if(NOT MSVC_IDE) #not needed for the ide
@@ -165,6 +166,10 @@ endif()
if(WITH_XC_CRYPTO_SSH)
add_unit_test(NAME testopensshkey SOURCES TestOpenSSHKey.cpp
LIBS ${TEST_LIBRARIES})
+ if(NOT WIN32)
+ add_unit_test(NAME testsshagent SOURCES TestSSHAgent.cpp
+ LIBS ${TEST_LIBRARIES})
+ endif()
endif()
add_unit_test(NAME testentry SOURCES TestEntry.cpp
@@ -176,6 +181,9 @@ add_unit_test(NAME testmerge SOURCES TestMerge.cpp
add_unit_test(NAME testpasswordgenerator SOURCES TestPasswordGenerator.cpp
LIBS ${TEST_LIBRARIES})
+add_unit_test(NAME testpasswordhealth SOURCES TestPasswordHealth.cpp
+ LIBS ${TEST_LIBRARIES})
+
add_unit_test(NAME testpassphrasegenerator SOURCES TestPassphraseGenerator.cpp
LIBS ${TEST_LIBRARIES})
@@ -200,9 +208,11 @@ add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp
add_unit_test(NAME testcsvexporter SOURCES TestCsvExporter.cpp
LIBS ${TEST_LIBRARIES})
-add_unit_test(NAME testykchallengeresponsekey
+if(WITH_XC_YUBIKEY)
+ add_unit_test(NAME testykchallengeresponsekey
SOURCES TestYkChallengeResponseKey.cpp
LIBS ${TEST_LIBRARIES})
+endif()
if(WITH_XC_KEESHARE)
add_unit_test(NAME testsharing SOURCES TestSharing.cpp
@@ -215,6 +225,9 @@ add_unit_test(NAME testdatabase SOURCES TestDatabase.cpp
add_unit_test(NAME testtools SOURCES TestTools.cpp
LIBS ${TEST_LIBRARIES})
+add_unit_test(NAME testconfig SOURCES TestConfig.cpp
+ LIBS testsupport ${TEST_LIBRARIES})
+
if(WITH_XC_FDOSECRETS)
add_unit_test(NAME testfdosecrets SOURCES TestFdoSecrets.cpp
LIBS testsupport ${TEST_LIBRARIES})
diff --git a/tests/TestAutoType.cpp b/tests/TestAutoType.cpp
index 69ae955b3..5898f0477 100644
--- a/tests/TestAutoType.cpp
+++ b/tests/TestAutoType.cpp
@@ -25,7 +25,7 @@
#include "autotype/AutoTypePlatformPlugin.h"
#include "autotype/test/AutoTypeTestInterface.h"
#include "core/Config.h"
-#include "core/FilePath.h"
+#include "core/Resources.h"
#include "crypto/Crypto.h"
#include "gui/MessageBox.h"
@@ -35,11 +35,11 @@ void TestAutoType::initTestCase()
{
QVERIFY(Crypto::init());
Config::createTempFileInstance();
- config()->set("AutoTypeDelay", 1);
- config()->set("security/autotypeask", false);
+ config()->set(Config::AutoTypeDelay, 1);
+ config()->set(Config::Security_AutoTypeAsk, false);
AutoType::createTestInstance();
- QPluginLoader loader(filePath()->pluginPath("keepassx-autotype-test"));
+ QPluginLoader loader(resources()->pluginPath("keepassx-autotype-test"));
loader.setLoadHints(QLibrary::ResolveAllSymbolsHint);
QVERIFY(loader.instance());
@@ -54,7 +54,7 @@ void TestAutoType::initTestCase()
void TestAutoType::init()
{
- config()->set("AutoTypeEntryTitleMatch", false);
+ config()->set(Config::AutoTypeEntryTitleMatch, false);
m_test->clearActions();
m_db = QSharedPointer<Database>::create();
@@ -165,7 +165,7 @@ void TestAutoType::testGlobalAutoTypeWithOneMatch()
void TestAutoType::testGlobalAutoTypeTitleMatch()
{
- config()->set("AutoTypeEntryTitleMatch", true);
+ config()->set(Config::AutoTypeEntryTitleMatch, true);
m_test->setActiveWindowTitle("An Entry Title!");
m_test->triggerGlobalAutoType();
@@ -176,7 +176,7 @@ void TestAutoType::testGlobalAutoTypeTitleMatch()
void TestAutoType::testGlobalAutoTypeUrlMatch()
{
- config()->set("AutoTypeEntryTitleMatch", true);
+ config()->set(Config::AutoTypeEntryTitleMatch, true);
m_test->setActiveWindowTitle("Dummy - http://example.org/ - <My Browser>");
m_test->triggerGlobalAutoType();
@@ -187,7 +187,7 @@ void TestAutoType::testGlobalAutoTypeUrlMatch()
void TestAutoType::testGlobalAutoTypeUrlSubdomainMatch()
{
- config()->set("AutoTypeEntryTitleMatch", true);
+ config()->set(Config::AutoTypeEntryTitleMatch, true);
m_test->setActiveWindowTitle("Dummy - http://sub.example.org/ - <My Browser>");
m_test->triggerGlobalAutoType();
diff --git a/tests/TestBrowser.cpp b/tests/TestBrowser.cpp
index 5ddb5e898..5b2f61178 100644
--- a/tests/TestBrowser.cpp
+++ b/tests/TestBrowser.cpp
@@ -16,11 +16,13 @@
*/
#include "TestBrowser.h"
+
#include "TestGlobal.h"
#include "browser/BrowserSettings.h"
#include "core/Tools.h"
#include "crypto/Crypto.h"
#include "sodium/crypto_box.h"
+
#include <QString>
QTEST_GUILESS_MAIN(TestBrowser)
@@ -35,12 +37,12 @@ const QString CLIENTID = "testClient";
void TestBrowser::initTestCase()
{
QVERIFY(Crypto::init());
- m_browserService.reset(new BrowserService(nullptr));
- m_browserAction.reset(new BrowserAction(*m_browserService.data()));
+ m_browserService = browserService();
}
-void TestBrowser::cleanupTestCase()
+void TestBrowser::init()
{
+ m_browserAction.reset(new BrowserAction());
}
/**
@@ -54,7 +56,7 @@ void TestBrowser::testChangePublicKeys()
json["publicKey"] = PUBLICKEY;
json["nonce"] = NONCE;
- auto response = m_browserAction->handleAction(json);
+ auto response = m_browserAction->processClientMessage(json);
QCOMPARE(response["action"].toString(), QString("change-public-keys"));
QCOMPARE(response["publicKey"].toString() == PUBLICKEY, false);
QCOMPARE(response["success"].toString(), TRUE_STR);
@@ -393,62 +395,6 @@ void TestBrowser::testSortEntries()
QCOMPARE(result[3]->url(), QString("github.com/login"));
}
-void TestBrowser::testGetDatabaseGroups()
-{
- auto db = QSharedPointer<Database>::create();
- auto* root = db->rootGroup();
-
- QScopedPointer<Group> group1(new Group());
- group1->setParent(root);
- group1->setName("group1");
-
- QScopedPointer<Group> group2(new Group());
- group2->setParent(root);
- group2->setName("group2");
-
- QScopedPointer<Group> group3(new Group());
- group3->setParent(root);
- group3->setName("group3");
-
- QScopedPointer<Group> group2_1(new Group());
- group2_1->setParent(group2.data());
- group2_1->setName("group2_1");
-
- QScopedPointer<Group> group2_2(new Group());
- group2_2->setParent(group2.data());
- group2_2->setName("group2_2");
-
- QScopedPointer<Group> group2_1_1(new Group());
- group2_1_1->setParent(group2_1.data());
- group2_1_1->setName("group2_1_1");
-
- auto result = m_browserService->getDatabaseGroups(db);
- QCOMPARE(result.length(), 1);
-
- auto groups = result["groups"].toArray();
- auto first = groups.at(0);
- auto children = first.toObject()["children"].toArray();
- QCOMPARE(first.toObject()["name"].toString(), QString("Root"));
- QCOMPARE(children.size(), 3);
-
- auto firstChild = children.at(0);
- auto secondChild = children.at(1);
- auto thirdChild = children.at(2);
- QCOMPARE(firstChild.toObject()["name"].toString(), QString("group1"));
- QCOMPARE(secondChild.toObject()["name"].toString(), QString("group2"));
- QCOMPARE(thirdChild.toObject()["name"].toString(), QString("group3"));
-
- auto childrenOfSecond = secondChild.toObject()["children"].toArray();
- auto firstOfCOS = childrenOfSecond.at(0);
- auto secondOfCOS = childrenOfSecond.at(1);
- QCOMPARE(firstOfCOS.toObject()["name"].toString(), QString("group2_1"));
- QCOMPARE(secondOfCOS.toObject()["name"].toString(), QString("group2_2"));
-
- auto lastChildren = firstOfCOS.toObject()["children"].toArray();
- auto lastChild = lastChildren.at(0);
- QCOMPARE(lastChild.toObject()["name"].toString(), QString("group2_1_1"));
-}
-
QList<Entry*> TestBrowser::createEntries(QStringList& urls, Group* root) const
{
QList<Entry*> entries;
diff --git a/tests/TestBrowser.h b/tests/TestBrowser.h
index 69ba69309..00f9d7528 100644
--- a/tests/TestBrowser.h
+++ b/tests/TestBrowser.h
@@ -30,7 +30,7 @@ class TestBrowser : public QObject
private slots:
void initTestCase();
- void cleanupTestCase();
+ void init();
void testChangePublicKeys();
void testEncryptMessage();
@@ -46,14 +46,13 @@ private slots:
void testInvalidEntries();
void testSubdomainsAndPaths();
void testSortEntries();
- void testGetDatabaseGroups();
void testValidURLs();
private:
QList<Entry*> createEntries(QStringList& urls, Group* root) const;
QScopedPointer<BrowserAction> m_browserAction;
- QScopedPointer<BrowserService> m_browserService;
+ QPointer<BrowserService> m_browserService;
};
#endif // KEEPASSXC_TESTBROWSER_H
diff --git a/tests/TestCli.cpp b/tests/TestCli.cpp
index 076f7f74e..348afb670 100644
--- a/tests/TestCli.cpp
+++ b/tests/TestCli.cpp
@@ -23,12 +23,6 @@
#include "core/Global.h"
#include "core/Tools.h"
#include "crypto/Crypto.h"
-#include "format/Kdbx3Reader.h"
-#include "format/Kdbx3Writer.h"
-#include "format/Kdbx4Reader.h"
-#include "format/Kdbx4Writer.h"
-#include "format/KdbxXmlReader.h"
-#include "format/KeePass2.h"
#include "keys/drivers/YubiKey.h"
#include "cli/Add.h"
@@ -44,6 +38,7 @@
#include "cli/Generate.h"
#include "cli/Help.h"
#include "cli/Import.h"
+#include "cli/Info.h"
#include "cli/List.h"
#include "cli/Locate.h"
#include "cli/Merge.h"
@@ -55,14 +50,12 @@
#include "cli/Utils.h"
#include <QClipboard>
-#include <QFile>
#include <QFuture>
#include <QSet>
+#include <QSignalSpy>
#include <QTextStream>
#include <QtConcurrent>
-#include <cstdio>
-
QTEST_MAIN(TestCli)
QSharedPointer<Database> globalCurrentDatabase;
@@ -74,85 +67,48 @@ void TestCli::initTestCase()
Config::createTempFileInstance();
Bootstrap::bootstrapApplication();
- // Load the NewDatabase.kdbx file into temporary storage
- QFile sourceDbFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"));
- QVERIFY(sourceDbFile.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceDbFile, m_dbData));
- sourceDbFile.close();
-
- // Load the NewDatabase2.kdbx file into temporary storage
- QFile sourceDbFile2(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase2.kdbx"));
- QVERIFY(sourceDbFile2.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceDbFile2, m_dbData2));
- sourceDbFile2.close();
-
- // Load the KeyFileProtected.kdbx file into temporary storage
- QFile sourceDbFile3(QString(KEEPASSX_TEST_DATA_DIR).append("/KeyFileProtected.kdbx"));
- QVERIFY(sourceDbFile3.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceDbFile3, m_keyFileProtectedDbData));
- sourceDbFile3.close();
-
- // Load the KeyFileProtectedNoPassword.kdbx file into temporary storage
- QFile sourceDbFile4(QString(KEEPASSX_TEST_DATA_DIR).append("/KeyFileProtectedNoPassword.kdbx"));
- QVERIFY(sourceDbFile4.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceDbFile4, m_keyFileProtectedNoPasswordDbData));
- sourceDbFile4.close();
-
- QFile sourceDbFileYubiKeyProtected(QString(KEEPASSX_TEST_DATA_DIR).append("/YubiKeyProtectedPasswords.kdbx"));
- QVERIFY(sourceDbFileYubiKeyProtected.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceDbFileYubiKeyProtected, m_yubiKeyProtectedDbData));
- sourceDbFileYubiKeyProtected.close();
-
- // Load the NewDatabase.xml file into temporary storage
- QFile sourceXmlFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.xml"));
- QVERIFY(sourceXmlFile.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceXmlFile, m_xmlData));
- sourceXmlFile.close();
+ auto fd = new QFile();
+#ifdef Q_OS_WIN
+ fd->open(fopen("nul", "w"), QIODevice::WriteOnly);
+#else
+ fd->open(fopen("/dev/null", "w"), QIODevice::WriteOnly);
+#endif
+ Utils::DEVNULL.setDevice(fd);
}
void TestCli::init()
{
+ const auto file = QString(KEEPASSX_TEST_DATA_DIR).append("/%1");
+
m_dbFile.reset(new TemporaryFile());
- m_dbFile->open();
- m_dbFile->write(m_dbData);
- m_dbFile->close();
+ m_dbFile->copyFromFile(file.arg("NewDatabase.kdbx"));
m_dbFile2.reset(new TemporaryFile());
- m_dbFile2->open();
- m_dbFile2->write(m_dbData2);
- m_dbFile2->close();
+ m_dbFile2->copyFromFile(file.arg("NewDatabase2.kdbx"));
m_xmlFile.reset(new TemporaryFile());
- m_xmlFile->open();
- m_xmlFile->write(m_xmlData);
- m_xmlFile->close();
+ m_xmlFile->copyFromFile(file.arg("NewDatabase.xml"));
m_keyFileProtectedDbFile.reset(new TemporaryFile());
- m_keyFileProtectedDbFile->open();
- m_keyFileProtectedDbFile->write(m_keyFileProtectedDbData);
- m_keyFileProtectedDbFile->close();
+ m_keyFileProtectedDbFile->copyFromFile(file.arg("KeyFileProtected.kdbx"));
m_keyFileProtectedNoPasswordDbFile.reset(new TemporaryFile());
- m_keyFileProtectedNoPasswordDbFile->open();
- m_keyFileProtectedNoPasswordDbFile->write(m_keyFileProtectedNoPasswordDbData);
- m_keyFileProtectedNoPasswordDbFile->close();
+ m_keyFileProtectedNoPasswordDbFile->copyFromFile(file.arg("KeyFileProtectedNoPassword.kdbx"));
m_yubiKeyProtectedDbFile.reset(new TemporaryFile());
- m_yubiKeyProtectedDbFile->open();
- m_yubiKeyProtectedDbFile->write(m_yubiKeyProtectedDbData);
- m_yubiKeyProtectedDbFile->close();
+ m_yubiKeyProtectedDbFile->copyFromFile(file.arg("YubiKeyProtectedPasswords.kdbx"));
- m_stdinFile.reset(new TemporaryFile());
- m_stdinFile->open();
- Utils::STDIN = fdopen(m_stdinFile->handle(), "r+");
+ m_stdout.reset(new QBuffer());
+ m_stdout->open(QIODevice::ReadWrite);
+ Utils::STDOUT.setDevice(m_stdout.data());
- m_stdoutFile.reset(new TemporaryFile());
- m_stdoutFile->open();
- Utils::STDOUT = fdopen(m_stdoutFile->handle(), "r+");
+ m_stderr.reset(new QBuffer());
+ m_stderr->open(QIODevice::ReadWrite);
+ Utils::STDERR.setDevice(m_stderr.data());
- m_stderrFile.reset(new TemporaryFile());
- m_stderrFile->open();
- Utils::STDERR = fdopen(m_stderrFile->handle(), "r+");
+ m_stdin.reset(new QBuffer());
+ m_stdin->open(QIODevice::ReadWrite);
+ Utils::STDIN.setDevice(m_stdin.data());
}
void TestCli::cleanup()
@@ -163,26 +119,89 @@ void TestCli::cleanup()
m_keyFileProtectedNoPasswordDbFile.reset();
m_yubiKeyProtectedDbFile.reset();
- m_stdinFile.reset();
- Utils::STDIN = stdin;
+ Utils::STDOUT.setDevice(nullptr);
+ Utils::STDERR.setDevice(nullptr);
+ Utils::STDIN.setDevice(nullptr);
+}
+
+QSharedPointer<Database> TestCli::readDatabase(const QString& filename, const QString& pw, const QString& keyfile)
+{
+ auto db = QSharedPointer<Database>::create();
+ auto key = QSharedPointer<CompositeKey>::create();
+
+ if (filename.isEmpty()) {
+ // Open the default test database
+ key->addKey(QSharedPointer<PasswordKey>::create("a"));
+ if (!db->open(m_dbFile->fileName(), key)) {
+ return {};
+ }
+ } else {
+ // Open the specified database file using supplied credentials
+ key->addKey(QSharedPointer<PasswordKey>::create(pw));
+ if (!keyfile.isEmpty()) {
+ auto filekey = QSharedPointer<FileKey>::create();
+ filekey->load(keyfile);
+ key->addKey(filekey);
+ }
+
+ if (!db->open(filename, key)) {
+ return {};
+ }
+ }
+
+ return db;
+}
+
+int TestCli::execCmd(Command& cmd, const QStringList& args) const
+{
+ // Move to end of stream
+ m_stdout->readAll();
+ m_stderr->readAll();
+
+ // Record stream position
+ auto outPos = m_stdout->pos();
+ auto errPos = m_stderr->pos();
- m_stdoutFile.reset();
- Utils::STDOUT = stdout;
+ // Execute command
+ int ret = cmd.execute(args);
- m_stderrFile.reset();
- Utils::STDERR = stderr;
+ // Move back to recorded position
+ m_stdout->seek(outPos);
+ m_stderr->seek(errPos);
+
+ // Skip over blank lines
+ QByteArray newline("\n");
+ while (m_stdout->peek(1) == newline) {
+ m_stdout->readLine();
+ }
+ while (m_stderr->peek(1) == newline) {
+ m_stdout->readLine();
+ }
+
+ return ret;
}
-void TestCli::cleanupTestCase()
+bool TestCli::isTotp(const QString& value)
{
+ static const QRegularExpression totp("^\\d{6}$");
+ return totp.match(value.trimmed()).hasMatch();
}
-QSharedPointer<Database> TestCli::readTestDatabase() const
+void TestCli::setInput(const QString& input)
{
- Utils::Test::setNextPassword("a");
- auto db = QSharedPointer<Database>(Utils::unlockDatabase(m_dbFile->fileName(), true, "", "", Utils::STDOUT));
- m_stdoutFile->seek(ftell(Utils::STDOUT)); // re-synchronize handles
- return db;
+ setInput(QStringList(input));
+}
+
+void TestCli::setInput(const QStringList& input)
+{
+ auto ba = input.join("\n").toLatin1();
+ // Always end in newline
+ if (!ba.endsWith("\n")) {
+ ba.append("\n");
+ }
+ auto pos = m_stdin->pos();
+ m_stdin->write(ba);
+ m_stdin->seek(pos);
}
void TestCli::testBatchCommands()
@@ -192,7 +211,8 @@ void TestCli::testBatchCommands()
QVERIFY(Commands::getCommand("analyze"));
QVERIFY(Commands::getCommand("clip"));
QVERIFY(Commands::getCommand("close"));
- QVERIFY(Commands::getCommand("create"));
+ QVERIFY(Commands::getCommand("db-create"));
+ QVERIFY(Commands::getCommand("db-info"));
QVERIFY(Commands::getCommand("diceware"));
QVERIFY(Commands::getCommand("edit"));
QVERIFY(Commands::getCommand("estimate"));
@@ -210,7 +230,7 @@ void TestCli::testBatchCommands()
QVERIFY(Commands::getCommand("rmdir"));
QVERIFY(Commands::getCommand("show"));
QVERIFY(!Commands::getCommand("doesnotexist"));
- QCOMPARE(Commands::getCommands().size(), 21);
+ QCOMPARE(Commands::getCommands().size(), 22);
}
void TestCli::testInteractiveCommands()
@@ -220,7 +240,8 @@ void TestCli::testInteractiveCommands()
QVERIFY(Commands::getCommand("analyze"));
QVERIFY(Commands::getCommand("clip"));
QVERIFY(Commands::getCommand("close"));
- QVERIFY(Commands::getCommand("create"));
+ QVERIFY(Commands::getCommand("db-create"));
+ QVERIFY(Commands::getCommand("db-info"));
QVERIFY(Commands::getCommand("diceware"));
QVERIFY(Commands::getCommand("edit"));
QVERIFY(Commands::getCommand("estimate"));
@@ -238,7 +259,7 @@ void TestCli::testInteractiveCommands()
QVERIFY(Commands::getCommand("rmdir"));
QVERIFY(Commands::getCommand("show"));
QVERIFY(!Commands::getCommand("doesnotexist"));
- QCOMPARE(Commands::getCommands().size(), 21);
+ QCOMPARE(Commands::getCommands().size(), 22);
}
void TestCli::testAdd()
@@ -247,24 +268,23 @@ void TestCli::testAdd()
QVERIFY(!addCmd.name.isEmpty());
QVERIFY(addCmd.getDescriptionLine().contains(addCmd.name));
- Utils::Test::setNextPassword("a");
- addCmd.execute({"add",
- "-u",
- "newuser",
- "--url",
- "https://example.com/",
- "-g",
- "-L",
- "20",
- m_dbFile->fileName(),
- "/newuser-entry"});
- m_stderrFile->reset();
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully added entry newuser-entry.\n"));
-
- auto db = readTestDatabase();
+ setInput("a");
+ execCmd(addCmd,
+ {"add",
+ "-u",
+ "newuser",
+ "--url",
+ "https://example.com/",
+ "-g",
+ "-L",
+ "20",
+ m_dbFile->fileName(),
+ "/newuser-entry"});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QVERIFY(m_stdout->readAll().contains("Successfully added entry newuser-entry."));
+
+ auto db = readDatabase();
auto* entry = db->rootGroup()->findEntryByPath("/newuser-entry");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser"));
@@ -272,33 +292,21 @@ void TestCli::testAdd()
QCOMPARE(entry->password().size(), 20);
// Quiet option
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addCmd.execute({"add", "-q", "-u", "newuser", "-g", "-L", "20", m_dbFile->fileName(), "/newentry-quiet"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- db = readTestDatabase();
+ setInput("a");
+ execCmd(addCmd, {"add", "-q", "-u", "newuser", "-g", "-L", "20", m_dbFile->fileName(), "/newentry-quiet"});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/newentry-quiet");
QVERIFY(entry);
QCOMPARE(entry->password().size(), 20);
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- Utils::Test::setNextPassword("newpassword");
- addCmd.execute(
- {"add", "-u", "newuser2", "--url", "https://example.net/", "-p", m_dbFile->fileName(), "/newuser-entry2"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip password prompt
- m_stdoutFile->readLine(); // skip password input
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully added entry newuser-entry2.\n"));
-
- db = readTestDatabase();
+ setInput({"a", "newpassword"});
+ execCmd(addCmd,
+ {"add", "-u", "newuser2", "--url", "https://example.net/", "-p", m_dbFile->fileName(), "/newuser-entry2"});
+ QVERIFY(m_stdout->readAll().contains("Successfully added entry newuser-entry2."));
+
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/newuser-entry2");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser2"));
@@ -306,17 +314,11 @@ void TestCli::testAdd()
QCOMPARE(entry->password(), QString("newpassword"));
// Password generation options
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addCmd.execute({"add", "-u", "newuser3", "-g", "-L", "34", m_dbFile->fileName(), "/newuser-entry3"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully added entry newuser-entry3.\n"));
-
- db = readTestDatabase();
+ setInput("a");
+ execCmd(addCmd, {"add", "-u", "newuser3", "-g", "-L", "34", m_dbFile->fileName(), "/newuser-entry3"});
+ QVERIFY(m_stdout->readAll().contains("Successfully added entry newuser-entry3."));
+
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/newuser-entry3");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser3"));
@@ -324,29 +326,24 @@ void TestCli::testAdd()
QRegularExpression defaultPasswordClassesRegex("^[a-zA-Z0-9]+$");
QVERIFY(defaultPasswordClassesRegex.match(entry->password()).hasMatch());
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addCmd.execute({"add",
- "-u",
- "newuser4",
- "-g",
- "-L",
- "20",
- "--every-group",
- "-s",
- "-n",
- "-U",
- "-l",
- m_dbFile->fileName(),
- "/newuser-entry4"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully added entry newuser-entry4.\n"));
-
- db = readTestDatabase();
+ setInput("a");
+ execCmd(addCmd,
+ {"add",
+ "-u",
+ "newuser4",
+ "-g",
+ "-L",
+ "20",
+ "--every-group",
+ "-s",
+ "-n",
+ "-U",
+ "-l",
+ m_dbFile->fileName(),
+ "/newuser-entry4"});
+ QVERIFY(m_stdout->readAll().contains("Successfully added entry newuser-entry4."));
+
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/newuser-entry4");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser4"));
@@ -360,81 +357,44 @@ void TestCli::testAddGroup()
QVERIFY(!addGroupCmd.name.isEmpty());
QVERIFY(addGroupCmd.getDescriptionLine().contains(addGroupCmd.name));
- Utils::Test::setNextPassword("a");
- addGroupCmd.execute({"mkdir", m_dbFile->fileName(), "/new_group"});
- m_stderrFile->reset();
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully added group new_group.\n"));
+ setInput("a");
+ execCmd(addGroupCmd, {"mkdir", m_dbFile->fileName(), "/new_group"});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray("Successfully added group new_group.\n"));
- auto db = readTestDatabase();
+ auto db = readDatabase();
auto* group = db->rootGroup()->findGroupByPath("new_group");
QVERIFY(group);
QCOMPARE(group->name(), QString("new_group"));
// Trying to add the same group should fail.
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addGroupCmd.execute({"mkdir", m_dbFile->fileName(), "/new_group"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Group /new_group already exists!\n"));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(addGroupCmd, {"mkdir", m_dbFile->fileName(), "/new_group"});
+ QVERIFY(m_stderr->readAll().contains("Group /new_group already exists!"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// Should be able to add groups down the tree.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addGroupCmd.execute({"mkdir", m_dbFile->fileName(), "/new_group/newer_group"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully added group newer_group.\n"));
-
- db = readTestDatabase();
+ setInput("a");
+ execCmd(addGroupCmd, {"mkdir", m_dbFile->fileName(), "/new_group/newer_group"});
+ QVERIFY(m_stdout->readAll().contains("Successfully added group newer_group."));
+
+ db = readDatabase();
group = db->rootGroup()->findGroupByPath("new_group/newer_group");
QVERIFY(group);
QCOMPARE(group->name(), QString("newer_group"));
// Should fail if the path is invalid.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addGroupCmd.execute({"mkdir", m_dbFile->fileName(), "/invalid_group/newer_group"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Group /invalid_group not found.\n"));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(addGroupCmd, {"mkdir", m_dbFile->fileName(), "/invalid_group/newer_group"});
+ QVERIFY(m_stderr->readAll().contains("Group /invalid_group not found."));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// Should fail to add the root group.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- addGroupCmd.execute({"mkdir", m_dbFile->fileName(), "/"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Group / already exists!\n"));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
-}
-
-bool isTOTP(const QString& value)
-{
- QString val = value.trimmed();
- if (val.length() < 5 || val.length() > 6) {
- return false;
- }
- for (int i = 0; i < val.length(); ++i) {
- if (!value[i].isDigit()) {
- return false;
- }
- }
- return true;
+ setInput("a");
+ execCmd(addGroupCmd, {"mkdir", m_dbFile->fileName(), "/"});
+ QVERIFY(m_stderr->readAll().contains("Group / already exists!"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
}
void TestCli::testAnalyze()
@@ -445,12 +405,13 @@ void TestCli::testAnalyze()
const QString hibpPath = QString(KEEPASSX_TEST_DATA_DIR).append("/hibp.txt");
- Utils::Test::setNextPassword("a");
- analyzeCmd.execute({"analyze", "--hibp", hibpPath, m_dbFile->fileName()});
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- auto output = m_stdoutFile->readAll();
- QVERIFY(output.contains("Sample Entry") && output.contains("123"));
+ setInput("a");
+ execCmd(analyzeCmd, {"analyze", "--hibp", hibpPath, m_dbFile->fileName()});
+ auto output = m_stdout->readAll();
+ QVERIFY(output.contains("Sample Entry"));
+ QVERIFY(output.contains("123"));
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
}
void TestCli::testClip()
@@ -463,78 +424,86 @@ void TestCli::testClip()
QVERIFY(clipCmd.getDescriptionLine().contains(clipCmd.name));
// Password
- Utils::Test::setNextPassword("a");
- clipCmd.execute({"clip", m_dbFile->fileName(), "/Sample Entry"});
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "/Sample Entry"});
+ QString errorOutput(m_stderr->readAll());
- m_stderrFile->reset();
- m_stdoutFile->reset();
- QString errorOutput(m_stderrFile->readAll());
+ if (QProcessEnvironment::systemEnvironment().contains("WAYLAND_DISPLAY")) {
+ QSKIP("Clip test skipped due to QClipboard and Wayland issues");
+ }
if (errorOutput.contains("Unable to start program")
|| errorOutput.contains("No program defined for clipboard manipulation")) {
QSKIP("Clip test skipped due to missing clipboard tool");
}
- QCOMPARE(clipboard->text(), QString("Password"));
- m_stdoutFile->readLine(); // skip prompt line
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Entry's password copied to the clipboard!\n"));
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QTRY_COMPARE(clipboard->text(), QString("Password"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Entry's \"Password\" attribute copied to the clipboard!\n"));
// Quiet option
- qint64 pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- clipCmd.execute({"clip", m_dbFile->fileName(), "/Sample Entry", "-q"});
- m_stdoutFile->seek(pos);
- // Output should be empty when quiet option is set.
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(clipboard->text(), QString("Password"));
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "/Sample Entry", "-q"});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QTRY_COMPARE(clipboard->text(), QString("Password"));
+
+ // Username
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "/Sample Entry", "-a", "username"});
+ QTRY_COMPARE(clipboard->text(), QString("User Name"));
// TOTP
- Utils::Test::setNextPassword("a");
- clipCmd.execute({"clip", m_dbFile->fileName(), "/Sample Entry", "--totp"});
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "/Sample Entry", "--totp"});
- QVERIFY(isTOTP(clipboard->text()));
+ QTRY_VERIFY(isTotp(clipboard->text()));
// Password with timeout
- Utils::Test::setNextPassword("a");
+ setInput("a");
// clang-format off
QFuture<void> future = QtConcurrent::run(&clipCmd,
static_cast<int(Clip::*)(const QStringList&)>(&DatabaseCommand::execute),
QStringList{"clip", m_dbFile->fileName(), "/Sample Entry", "1"});
// clang-format on
- QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString("Password"), 500);
- QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 1500);
+ QTRY_COMPARE(clipboard->text(), QString("Password"));
+ QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 2000);
future.waitForFinished();
// TOTP with timeout
- Utils::Test::setNextPassword("a");
+ setInput("a");
future = QtConcurrent::run(&clipCmd,
static_cast<int (Clip::*)(const QStringList&)>(&DatabaseCommand::execute),
QStringList{"clip", m_dbFile->fileName(), "/Sample Entry", "1", "-t"});
- QTRY_VERIFY_WITH_TIMEOUT(isTOTP(clipboard->text()), 500);
- QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 1500);
+ QTRY_VERIFY(isTotp(clipboard->text()));
+ QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 2000);
future.waitForFinished();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- clipCmd.execute({"clip", m_dbFile->fileName(), "--totp", "/Sample Entry", "0"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Invalid timeout value 0.\n"));
-
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- clipCmd.execute({"clip", m_dbFile->fileName(), "--totp", "/Sample Entry", "bleuh"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Invalid timeout value bleuh.\n"));
-
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- clipCmd.execute({"clip", m_dbFile2->fileName(), "--totp", "/Sample Entry"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Entry with path /Sample Entry has no TOTP set up.\n"));
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "--totp", "/Sample Entry", "0"});
+ QVERIFY(m_stderr->readAll().contains("Invalid timeout value 0.\n"));
+
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "--totp", "/Sample Entry", "bleuh"});
+ QVERIFY(m_stderr->readAll().contains("Invalid timeout value bleuh.\n"));
+
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile2->fileName(), "--totp", "/Sample Entry"});
+ QVERIFY(m_stderr->readAll().contains("Entry with path /Sample Entry has no TOTP set up.\n"));
+
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile->fileName(), "-a", "TESTAttribute1", "/Sample Entry"});
+ QVERIFY(m_stderr->readAll().contains(
+ "ERROR: attribute TESTAttribute1 is ambiguous, it matches TestAttribute1 and testattribute1.\n"));
+
+ setInput("a");
+ execCmd(clipCmd, {"clip", m_dbFile2->fileName(), "--attribute", "Username", "--totp", "/Sample Entry"});
+ QVERIFY(m_stderr->readAll().contains("ERROR: Please specify one of --attribute or --totp, not both.\n"));
}
void TestCli::testCreate()
@@ -544,67 +513,144 @@ void TestCli::testCreate()
QVERIFY(createCmd.getDescriptionLine().contains(createCmd.name));
QScopedPointer<QTemporaryDir> testDir(new QTemporaryDir());
+ QString dbFilename;
- QString databaseFilename = testDir->path() + "/testCreate1.kdbx";
- // Password
- Utils::Test::setNextPassword("a");
- createCmd.execute({"create", databaseFilename});
+ // Testing password option, password mismatch
+ dbFilename = testDir->path() + "/testCreate_pw.kdbx";
+ setInput({"a", "b"});
+ execCmd(createCmd, {"db-create", dbFilename, "-p"});
+
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Error: Passwords do not match.\n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Failed to set database password.\n"));
+
+ // Testing password option
+ setInput({"a", "a"});
+ execCmd(createCmd, {"db-create", dbFilename, "-p"});
- m_stderrFile->reset();
- m_stdoutFile->reset();
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully created new database.\n"));
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Successfully created new database.\n"));
+ auto db = readDatabase(dbFilename, "a");
+ QVERIFY(db);
+
+ // Testing with empty password (deny it)
+ dbFilename = testDir->path() + "/testCreate_blankpw.kdbx";
+ setInput({"", "n"});
+ execCmd(createCmd, {"db-create", dbFilename, "-p"});
+
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QVERIFY(m_stderr->readLine().contains("empty password"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Failed to set database password.\n"));
+
+ // Testing with empty password (accept it)
+ setInput({"", "y"});
+ execCmd(createCmd, {"db-create", dbFilename, "-p"});
+
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QVERIFY(m_stderr->readLine().contains("empty password"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully created new database.\n"));
- Utils::Test::setNextPassword("a");
- auto db = QSharedPointer<Database>(Utils::unlockDatabase(databaseFilename, true, "", "", Utils::DEVNULL));
+ db = readDatabase(dbFilename, "");
QVERIFY(db);
// Should refuse to create the database if it already exists.
- qint64 pos = m_stdoutFile->pos();
- qint64 errPos = m_stderrFile->pos();
- createCmd.execute({"create", databaseFilename});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(errPos);
+ execCmd(createCmd, {"db-create", dbFilename, "-p"});
// Output should be empty when there is an error.
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QString errorMessage = QString("File " + databaseFilename + " already exists.\n");
- QCOMPARE(m_stderrFile->readAll(), errorMessage.toUtf8());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QString errorMessage = QString("File " + dbFilename + " already exists.\n");
+ QCOMPARE(m_stderr->readAll(), errorMessage.toUtf8());
+
+ // Should refuse to create without any key provided.
+ dbFilename = testDir->path() + "/testCreate_key.kdbx";
+ execCmd(createCmd, {"db-create", dbFilename});
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QCOMPARE(m_stderr->readLine(), QByteArray("No key is set. Aborting database creation.\n"));
// Testing with keyfile creation
- QString databaseFilename2 = testDir->path() + "/testCreate2.kdbx";
+ dbFilename = testDir->path() + "/testCreate_key2.kdbx";
QString keyfilePath = testDir->path() + "/keyfile.txt";
- pos = m_stdoutFile->pos();
- errPos = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- createCmd.execute({"create", databaseFilename2, "-k", keyfilePath});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(errPos);
+ setInput({"a", "a"});
+ execCmd(createCmd, {"db-create", dbFilename, "-p", "-k", keyfilePath});
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Successfully created new database.\n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully created new database.\n"));
- Utils::Test::setNextPassword("a");
- auto db2 =
- QSharedPointer<Database>(Utils::unlockDatabase(databaseFilename2, true, keyfilePath, "", Utils::DEVNULL));
- QVERIFY(db2);
+ db = readDatabase(dbFilename, "a", keyfilePath);
+ QVERIFY(db);
// Testing with existing keyfile
- QString databaseFilename3 = testDir->path() + "/testCreate3.kdbx";
- pos = m_stdoutFile->pos();
- errPos = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- createCmd.execute({"create", databaseFilename3, "-k", keyfilePath});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(errPos);
-
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Successfully created new database.\n"));
-
- Utils::Test::setNextPassword("a");
- auto db3 =
- QSharedPointer<Database>(Utils::unlockDatabase(databaseFilename3, true, keyfilePath, "", Utils::DEVNULL));
- QVERIFY(db3);
+ dbFilename = testDir->path() + "/testCreate_key3.kdbx";
+ setInput({"a", "a"});
+ execCmd(createCmd, {"db-create", dbFilename, "-p", "-k", keyfilePath});
+
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully created new database.\n"));
+
+ db = readDatabase(dbFilename, "a", keyfilePath);
+ QVERIFY(db);
+
+ // Invalid decryption time (format).
+ dbFilename = testDir->path() + "/testCreate_time.kdbx";
+ execCmd(createCmd, {"db-create", dbFilename, "-p", "-t", "NAN"});
+
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QCOMPARE(m_stderr->readAll(), QByteArray("Invalid decryption time NAN.\n"));
+
+ // Invalid decryption time (range).
+ execCmd(createCmd, {"db-create", dbFilename, "-p", "-t", "10"});
+
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QVERIFY(m_stderr->readAll().contains(QByteArray("Target decryption time must be between")));
+
+ int encryptionTime = 500;
+ // Custom encryption time
+ setInput({"a", "a"});
+ int epochBefore = QDateTime::currentMSecsSinceEpoch();
+ execCmd(createCmd, {"db-create", dbFilename, "-p", "-t", QString::number(encryptionTime)});
+ // Removing 100ms to make sure we account for changes in computation time.
+ QVERIFY(QDateTime::currentMSecsSinceEpoch() > (epochBefore + encryptionTime - 100));
+
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Benchmarking key derivation function for 500ms delay.\n"));
+ QVERIFY(m_stdout->readLine().contains(QByteArray("rounds for key derivation function.\n")));
+
+ db = readDatabase(dbFilename, "a");
+ QVERIFY(db);
+}
+
+void TestCli::testInfo()
+{
+ Info infoCmd;
+ QVERIFY(!infoCmd.name.isEmpty());
+ QVERIFY(infoCmd.getDescriptionLine().contains(infoCmd.name));
+
+ setInput("a");
+ execCmd(infoCmd, {"db-info", m_dbFile->fileName()});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QVERIFY(m_stdout->readLine().contains(QByteArray("UUID: ")));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Name: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Description: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Cipher: AES 256-bit\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("KDF: AES (6000 rounds)\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Recycle bin is enabled.\n"));
+
+ // Test with quiet option.
+ setInput("a");
+ execCmd(infoCmd, {"db-info", "-q", m_dbFile->fileName()});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QVERIFY(m_stdout->readLine().contains(QByteArray("UUID: ")));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Name: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Description: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Cipher: AES 256-bit\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("KDF: AES (6000 rounds)\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Recycle bin is enabled.\n"));
}
void TestCli::testDiceware()
@@ -613,33 +659,25 @@ void TestCli::testDiceware()
QVERIFY(!dicewareCmd.name.isEmpty());
QVERIFY(dicewareCmd.getDescriptionLine().contains(dicewareCmd.name));
- dicewareCmd.execute({"diceware"});
- m_stdoutFile->reset();
- QString passphrase(m_stdoutFile->readLine());
+ execCmd(dicewareCmd, {"diceware"});
+ QString passphrase(m_stdout->readLine());
QVERIFY(!passphrase.isEmpty());
- dicewareCmd.execute({"diceware", "-W", "2"});
- m_stdoutFile->seek(passphrase.toLatin1().size());
- passphrase = m_stdoutFile->readLine();
+ execCmd(dicewareCmd, {"diceware", "-W", "2"});
+ passphrase = m_stdout->readLine();
QCOMPARE(passphrase.split(" ").size(), 2);
- auto pos = m_stdoutFile->pos();
- dicewareCmd.execute({"diceware", "-W", "10"});
- m_stdoutFile->seek(pos);
- passphrase = m_stdoutFile->readLine();
+ execCmd(dicewareCmd, {"diceware", "-W", "10"});
+ passphrase = m_stdout->readLine();
QCOMPARE(passphrase.split(" ").size(), 10);
// Testing with invalid word count
- auto posErr = m_stderrFile->pos();
- dicewareCmd.execute({"diceware", "-W", "-10"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Invalid word count -10\n"));
+ execCmd(dicewareCmd, {"diceware", "-W", "-10"});
+ QCOMPARE(m_stderr->readLine(), QByteArray("Invalid word count -10\n"));
// Testing with invalid word count format
- posErr = m_stderrFile->pos();
- dicewareCmd.execute({"diceware", "-W", "bleuh"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Invalid word count bleuh\n"));
+ execCmd(dicewareCmd, {"diceware", "-W", "bleuh"});
+ QCOMPARE(m_stderr->readLine(), QByteArray("Invalid word count bleuh\n"));
TemporaryFile wordFile;
wordFile.open();
@@ -648,10 +686,8 @@ void TestCli::testDiceware()
}
wordFile.close();
- pos = m_stdoutFile->pos();
- dicewareCmd.execute({"diceware", "-W", "11", "-w", wordFile.fileName()});
- m_stdoutFile->seek(pos);
- passphrase = m_stdoutFile->readLine();
+ execCmd(dicewareCmd, {"diceware", "-W", "11", "-w", wordFile.fileName()});
+ passphrase = m_stdout->readLine();
const auto words = passphrase.split(" ");
QCOMPARE(words.size(), 11);
QRegularExpression regex("^word\\d+$");
@@ -666,10 +702,8 @@ void TestCli::testDiceware()
}
smallWordFile.close();
- posErr = m_stderrFile->pos();
- dicewareCmd.execute({"diceware", "-W", "11", "-w", smallWordFile.fileName()});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readLine(), QByteArray("The word list is too small (< 1000 items)\n"));
+ execCmd(dicewareCmd, {"diceware", "-W", "11", "-w", smallWordFile.fileName()});
+ QCOMPARE(m_stderr->readLine(), QByteArray("The word list is too small (< 1000 items)\n"));
}
void TestCli::testEdit()
@@ -678,15 +712,20 @@ void TestCli::testEdit()
QVERIFY(!editCmd.name.isEmpty());
QVERIFY(editCmd.getDescriptionLine().contains(editCmd.name));
- Utils::Test::setNextPassword("a");
- // clang-format off
- editCmd.execute({"edit", "-u", "newuser", "--url", "https://otherurl.example.com/", "-t", "newtitle", m_dbFile->fileName(), "/Sample Entry"});
- // clang-format on
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip prompt line
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Successfully edited entry newtitle.\n"));
-
- auto db = readTestDatabase();
+ setInput("a");
+ execCmd(editCmd,
+ {"edit",
+ "-u",
+ "newuser",
+ "--url",
+ "https://otherurl.example.com/",
+ "-t",
+ "newtitle",
+ m_dbFile->fileName(),
+ "/Sample Entry"});
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully edited entry newtitle.\n"));
+
+ auto db = readDatabase();
auto* entry = db->rootGroup()->findEntryByPath("/newtitle");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser"));
@@ -694,18 +733,14 @@ void TestCli::testEdit()
QCOMPARE(entry->password(), QString("Password"));
// Quiet option
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- editCmd.execute({"edit", m_dbFile->fileName(), "-q", "-t", "newertitle", "/newtitle"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
-
- Utils::Test::setNextPassword("a");
- editCmd.execute({"edit", "-g", m_dbFile->fileName(), "/newertitle"});
- db = readTestDatabase();
+ setInput("a");
+ execCmd(editCmd, {"edit", m_dbFile->fileName(), "-q", "-t", "newertitle", "/newtitle"});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+
+ setInput("a");
+ execCmd(editCmd, {"edit", "-g", m_dbFile->fileName(), "/newertitle"});
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/newertitle");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser"));
@@ -713,9 +748,9 @@ void TestCli::testEdit()
QVERIFY(!entry->password().isEmpty());
QVERIFY(entry->password() != QString("Password"));
- Utils::Test::setNextPassword("a");
- editCmd.execute({"edit", "-g", "-L", "34", "-t", "evennewertitle", m_dbFile->fileName(), "/newertitle"});
- db = readTestDatabase();
+ setInput("a");
+ execCmd(editCmd, {"edit", "-g", "-L", "34", "-t", "evennewertitle", m_dbFile->fileName(), "/newertitle"});
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/evennewertitle");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("newuser"));
@@ -725,36 +760,31 @@ void TestCli::testEdit()
QRegularExpression defaultPasswordClassesRegex("^[a-zA-Z0-9]+$");
QVERIFY(defaultPasswordClassesRegex.match(entry->password()).hasMatch());
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- editCmd.execute({"edit",
- "-g",
- "-L",
- "20",
- "--every-group",
- "-s",
- "-n",
- "--upper",
- "-l",
- m_dbFile->fileName(),
- "/evennewertitle"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully edited entry evennewertitle.\n"));
-
- db = readTestDatabase();
+ setInput("a");
+ execCmd(editCmd,
+ {"edit",
+ "-g",
+ "-L",
+ "20",
+ "--every-group",
+ "-s",
+ "-n",
+ "--upper",
+ "-l",
+ m_dbFile->fileName(),
+ "/evennewertitle"});
+ QCOMPARE(m_stdout->readAll(), QByteArray("Successfully edited entry evennewertitle.\n"));
+
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("/evennewertitle");
QVERIFY(entry);
QCOMPARE(entry->password().size(), 20);
QVERIFY(!defaultPasswordClassesRegex.match(entry->password()).hasMatch());
- Utils::Test::setNextPassword("a");
- Utils::Test::setNextPassword("newpassword");
- editCmd.execute({"edit", "-p", m_dbFile->fileName(), "/evennewertitle"});
- db = readTestDatabase();
+ setInput({"a", "newpassword"});
+ execCmd(editCmd, {"edit", "-p", m_dbFile->fileName(), "/evennewertitle"});
+ db = readDatabase();
+ QVERIFY(db);
entry = db->rootGroup()->findEntryByPath("/evennewertitle");
QVERIFY(entry);
QCOMPARE(entry->password(), QString("newpassword"));
@@ -850,14 +880,9 @@ void TestCli::testEstimate()
QVERIFY(!estimateCmd.name.isEmpty());
QVERIFY(estimateCmd.getDescriptionLine().contains(estimateCmd.name));
- QTextStream in(m_stdinFile.data());
- QTextStream out(m_stdoutFile.data());
-
- in << input << endl;
- in.seek(0);
- estimateCmd.execute({"estimate", "-a"});
- out.seek(0);
- auto result = out.readAll();
+ setInput(input);
+ execCmd(estimateCmd, {"estimate", "-a"});
+ auto result = QString(m_stdout->readAll());
QVERIFY(result.contains("Length " + length));
QVERIFY(result.contains("Entropy " + entropy));
QVERIFY(result.contains("Log10 " + log10));
@@ -872,61 +897,47 @@ void TestCli::testExport()
QVERIFY(!exportCmd.name.isEmpty());
QVERIFY(exportCmd.getDescriptionLine().contains(exportCmd.name));
- Utils::Test::setNextPassword("a");
- exportCmd.execute({"export", m_dbFile->fileName()});
+ setInput("a");
+ execCmd(exportCmd, {"export", m_dbFile->fileName()});
- m_stdoutFile->seek(0);
- m_stdoutFile->readLine(); // skip prompt line
+ TemporaryFile xmlOutput;
+ xmlOutput.open(QIODevice::WriteOnly);
+ xmlOutput.write(m_stdout->readAll());
+ xmlOutput.close();
- KdbxXmlReader reader(KeePass2::FILE_VERSION_3_1);
QScopedPointer<Database> db(new Database());
- reader.readDatabase(m_stdoutFile.data(), db.data());
- QVERIFY(!reader.hasError());
- QVERIFY(db.data());
+ QVERIFY(db->import(xmlOutput.fileName()));
+
auto* entry = db->rootGroup()->findEntryByPath("/Sample Entry");
QVERIFY(entry);
QCOMPARE(entry->password(), QString("Password"));
- m_stdoutFile->reset();
-
// Quiet option
QScopedPointer<Database> dbQuiet(new Database());
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- exportCmd.execute({"export", "-f", "xml", "-q", m_dbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- reader.readDatabase(m_stdoutFile.data(), dbQuiet.data());
- QVERIFY(!reader.hasError());
- QVERIFY(db.data());
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(exportCmd, {"export", "-f", "xml", "-q", m_dbFile->fileName()});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+
+ xmlOutput.open(QIODevice::WriteOnly);
+ xmlOutput.write(m_stdout->readAll());
+ xmlOutput.close();
+
+ QVERIFY(db->import(xmlOutput.fileName()));
// CSV exporting
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- exportCmd.execute({"export", "-f", "csv", m_dbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip prompt line
- m_stderrFile->seek(posErr);
- QByteArray csvHeader = m_stdoutFile->readLine();
+ setInput("a");
+ execCmd(exportCmd, {"export", "-f", "csv", m_dbFile->fileName()});
+ QByteArray csvHeader = m_stdout->readLine();
QCOMPARE(csvHeader, QByteArray("\"Group\",\"Title\",\"Username\",\"Password\",\"URL\",\"Notes\"\n"));
- QByteArray csvData = m_stdoutFile->readAll();
+ QByteArray csvData = m_stdout->readAll();
QVERIFY(csvData.contains(QByteArray(
"\"NewDatabase\",\"Sample Entry\",\"User Name\",\"Password\",\"http://www.somesite.com/\",\"Notes\"\n")));
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
// test invalid format
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- exportCmd.execute({"export", "-f", "yaml", m_dbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip prompt line
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readLine(), QByteArray(""));
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Unsupported format yaml\n"));
+ setInput("a");
+ execCmd(exportCmd, {"export", "-f", "yaml", m_dbFile->fileName()});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readLine(), QByteArray("Unsupported format yaml\n"));
}
void TestCli::testGenerate_data()
@@ -966,35 +977,30 @@ void TestCli::testGenerate()
QVERIFY(!generateCmd.name.isEmpty());
QVERIFY(generateCmd.getDescriptionLine().contains(generateCmd.name));
- qint64 pos = 0;
- // run multiple times to make accidental passes unlikely
- TextStream stream(m_stdoutFile.data());
for (int i = 0; i < 10; ++i) {
- generateCmd.execute(parameters);
- stream.seek(pos);
+ execCmd(generateCmd, parameters);
QRegularExpression regex(pattern);
- QString password = stream.readLine();
- pos = stream.pos();
+#ifdef Q_OS_UNIX
+ QString password = QString::fromUtf8(m_stdout->readLine());
+#else
+ QString password = QString::fromLatin1(m_stdout->readLine());
+#endif
+
QVERIFY2(regex.match(password).hasMatch(),
qPrintable("Password " + password + " does not match pattern " + pattern));
+ QCOMPARE(m_stderr->readAll(), QByteArray());
}
// Testing with invalid password length
- auto posErr = m_stderrFile->pos();
- generateCmd.execute({"generate", "-L", "-10"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Invalid password length -10\n"));
+ execCmd(generateCmd, {"generate", "-L", "-10"});
+ QCOMPARE(m_stderr->readLine(), QByteArray("Invalid password length -10\n"));
- posErr = m_stderrFile->pos();
- generateCmd.execute({"generate", "-L", "0"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Invalid password length 0\n"));
+ execCmd(generateCmd, {"generate", "-L", "0"});
+ QCOMPARE(m_stderr->readLine(), QByteArray("Invalid password length 0\n"));
// Testing with invalid word count format
- posErr = m_stderrFile->pos();
- generateCmd.execute({"generate", "-L", "bleuh"});
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Invalid password length bleuh\n"));
+ execCmd(generateCmd, {"generate", "-L", "bleuh"});
+ QCOMPARE(m_stderr->readLine(), QByteArray("Invalid password length bleuh\n"));
}
void TestCli::testImport()
@@ -1004,49 +1010,41 @@ void TestCli::testImport()
QVERIFY(importCmd.getDescriptionLine().contains(importCmd.name));
QScopedPointer<QTemporaryDir> testDir(new QTemporaryDir());
- QString databaseFilename = testDir->path() + "testImport1.kdbx";
-
- Utils::Test::setNextPassword("a");
- importCmd.execute({"import", m_xmlFile->fileName(), databaseFilename});
+ QString databaseFilename = testDir->path() + "/testImport1.kdbx";
- m_stderrFile->reset();
- m_stdoutFile->reset();
+ setInput({"a", "a"});
+ execCmd(importCmd, {"import", m_xmlFile->fileName(), databaseFilename});
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Successfully imported database.\n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully imported database.\n"));
- Utils::Test::setNextPassword("a");
- auto db = QSharedPointer<Database>(Utils::unlockDatabase(databaseFilename, true, "", "", Utils::DEVNULL));
+ auto db = readDatabase(databaseFilename, "a");
QVERIFY(db);
auto* entry = db->rootGroup()->findEntryByPath("/Sample Entry 1");
QVERIFY(entry);
QCOMPARE(entry->username(), QString("User Name"));
// Should refuse to create the database if it already exists.
- qint64 pos = m_stdoutFile->pos();
- qint64 errPos = m_stderrFile->pos();
- importCmd.execute({"import", m_xmlFile->fileName(), databaseFilename});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(errPos);
+ execCmd(importCmd, {"import", m_xmlFile->fileName(), databaseFilename});
// Output should be empty when there is an error.
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
QString errorMessage = QString("File " + databaseFilename + " already exists.\n");
- QCOMPARE(m_stderrFile->readAll(), errorMessage.toUtf8());
+ QCOMPARE(m_stderr->readAll(), errorMessage.toUtf8());
// Quiet option
QScopedPointer<QTemporaryDir> testDirQuiet(new QTemporaryDir());
- QString databaseFilenameQuiet = testDirQuiet->path() + "testImport2.kdbx";
+ QString databaseFilenameQuiet = testDirQuiet->path() + "/testImport2.kdbx";
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- importCmd.execute({"import", "-q", m_xmlFile->fileName(), databaseFilenameQuiet});
- m_stdoutFile->seek(pos);
+ setInput({"a", "a"});
+ execCmd(importCmd, {"import", "-q", m_xmlFile->fileName(), databaseFilenameQuiet});
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stderr->readLine(), QByteArray("Repeat password: \n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray());
- Utils::Test::setNextPassword("a");
- auto dbQuiet = QSharedPointer<Database>(Utils::unlockDatabase(databaseFilenameQuiet, true, "", "", Utils::DEVNULL));
- QVERIFY(dbQuiet);
+ db = readDatabase(databaseFilenameQuiet, "a");
+ QVERIFY(db);
}
void TestCli::testKeyFileOption()
@@ -1054,35 +1052,26 @@ void TestCli::testKeyFileOption()
List listCmd;
QString keyFilePath(QString(KEEPASSX_TEST_DATA_DIR).append("/KeyFileProtected.key"));
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-k", keyFilePath, m_keyFileProtectedDbFile->fileName()});
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", "-k", keyFilePath, m_keyFileProtectedDbFile->fileName()});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("entry1\n"
"entry2\n"));
// Should raise an error with no key file.
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", m_keyFileProtectedDbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QVERIFY(m_stderrFile->readAll().contains("Invalid credentials were provided"));
+ setInput("a");
+ execCmd(listCmd, {"ls", m_keyFileProtectedDbFile->fileName()});
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QVERIFY(m_stderr->readAll().contains("Invalid credentials were provided"));
// Should raise an error if key file path is invalid.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-k", "invalidpath", m_keyFileProtectedDbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll().split(':').at(0), QByteArray("Failed to load key file invalidpath"));
+ setInput("a");
+ execCmd(listCmd, {"ls", "-k", "invalidpath", m_keyFileProtectedDbFile->fileName()});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QCOMPARE(m_stderr->readAll().split(':').at(0), QByteArray("Failed to load key file invalidpath"));
}
void TestCli::testNoPasswordOption()
@@ -1090,21 +1079,17 @@ void TestCli::testNoPasswordOption()
List listCmd;
QString keyFilePath(QString(KEEPASSX_TEST_DATA_DIR).append("/KeyFileProtectedNoPassword.key"));
- listCmd.execute({"ls", "-k", keyFilePath, "--no-password", m_keyFileProtectedNoPasswordDbFile->fileName()});
- m_stdoutFile->reset();
- QCOMPARE(m_stdoutFile->readAll(),
+ execCmd(listCmd, {"ls", "-k", keyFilePath, "--no-password", m_keyFileProtectedNoPasswordDbFile->fileName()});
+ // Expecting no password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("entry1\n"
"entry2\n"));
// Should raise an error with no key file.
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- listCmd.execute({"ls", "--no-password", m_keyFileProtectedNoPasswordDbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QVERIFY(m_stderrFile->readAll().contains("Invalid credentials were provided"));
+ execCmd(listCmd, {"ls", "--no-password", m_keyFileProtectedNoPasswordDbFile->fileName()});
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QVERIFY(m_stderr->readAll().contains("Invalid credentials were provided"));
}
void TestCli::testList()
@@ -1113,11 +1098,11 @@ void TestCli::testList()
QVERIFY(!listCmd.name.isEmpty());
QVERIFY(listCmd.getDescriptionLine().contains(listCmd.name));
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", m_dbFile->fileName()});
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", m_dbFile->fileName()});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Sample Entry\n"
"General/\n"
"Windows/\n"
@@ -1127,11 +1112,10 @@ void TestCli::testList()
"Homebanking/\n"));
// Quiet option
- qint64 pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-q", m_dbFile->fileName()});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", "-q", m_dbFile->fileName()});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Sample Entry\n"
"General/\n"
"Windows/\n"
@@ -1140,12 +1124,9 @@ void TestCli::testList()
"eMail/\n"
"Homebanking/\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-R", m_dbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", "-R", m_dbFile->fileName()});
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Sample Entry\n"
"General/\n"
" [empty]\n"
@@ -1161,12 +1142,9 @@ void TestCli::testList()
" Subgroup/\n"
" Subgroup Entry\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-R", "-f", m_dbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", "-R", "-f", m_dbFile->fileName()});
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Sample Entry\n"
"General/\n"
"General/[empty]\n"
@@ -1182,30 +1160,21 @@ void TestCli::testList()
"Homebanking/Subgroup/\n"
"Homebanking/Subgroup/Subgroup Entry\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-R", "-f", m_dbFile->fileName(), "/Homebanking"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", "-R", "-f", m_dbFile->fileName(), "/Homebanking"});
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Subgroup/\n"
"Subgroup/Subgroup Entry\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", m_dbFile->fileName(), "/General/"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine();
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("[empty]\n"));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", m_dbFile->fileName(), "/DoesNotExist/"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->reset();
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Cannot find group /DoesNotExist/.\n"));
+ setInput("a");
+ execCmd(listCmd, {"ls", m_dbFile->fileName(), "/General/"});
+ QCOMPARE(m_stdout->readAll(), QByteArray("[empty]\n"));
+
+ setInput("a");
+ execCmd(listCmd, {"ls", m_dbFile->fileName(), "/DoesNotExist/"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray("Cannot find group /DoesNotExist/.\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
}
void TestCli::testLocate()
@@ -1214,30 +1183,26 @@ void TestCli::testLocate()
QVERIFY(!locateCmd.name.isEmpty());
QVERIFY(locateCmd.getDescriptionLine().contains(locateCmd.name));
- Utils::Test::setNextPassword("a");
- locateCmd.execute({"locate", m_dbFile->fileName(), "Sample"});
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("/Sample Entry\n"));
+ setInput("a");
+ execCmd(locateCmd, {"locate", m_dbFile->fileName(), "Sample"});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray("/Sample Entry\n"));
// Quiet option
- qint64 pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- locateCmd.execute({"locate", m_dbFile->fileName(), "-q", "Sample"});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("/Sample Entry\n"));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- locateCmd.execute({"locate", m_dbFile->fileName(), "Does Not Exist"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->reset();
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray("No results for that search term.\n"));
+ setInput("a");
+ execCmd(locateCmd, {"locate", m_dbFile->fileName(), "-q", "Sample"});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray("/Sample Entry\n"));
+
+ setInput("a");
+ execCmd(locateCmd, {"locate", m_dbFile->fileName(), "Does Not Exist"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray("No results for that search term.\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// write a modified database
- auto db = readTestDatabase();
+ auto db = readDatabase();
QVERIFY(db);
auto* group = db->rootGroup()->findGroupByPath("/General/");
QVERIFY(group);
@@ -1245,25 +1210,19 @@ void TestCli::testLocate()
entry->setUuid(QUuid::createUuid());
entry->setTitle("New Entry");
group->addEntry(entry);
+
TemporaryFile tmpFile;
tmpFile.open();
- Kdbx4Writer writer;
- writer.writeDatabase(&tmpFile, db.data());
tmpFile.close();
+ db->saveAs(tmpFile.fileName());
+
+ setInput("a");
+ execCmd(locateCmd, {"locate", tmpFile.fileName(), "New"});
+ QCOMPARE(m_stdout->readAll(), QByteArray("/General/New Entry\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- locateCmd.execute({"locate", tmpFile.fileName(), "New"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("/General/New Entry\n"));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- locateCmd.execute({"locate", tmpFile.fileName(), "Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(locateCmd, {"locate", tmpFile.fileName(), "Entry"});
+ QCOMPARE(m_stdout->readAll(),
QByteArray("/Sample Entry\n/General/New Entry\n/Homebanking/Subgroup/Subgroup Entry\n"));
}
@@ -1273,30 +1232,32 @@ void TestCli::testMerge()
QVERIFY(!mergeCmd.name.isEmpty());
QVERIFY(mergeCmd.getDescriptionLine().contains(mergeCmd.name));
- Kdbx4Writer writer;
- Kdbx4Reader reader;
-
// load test database and save copies
- auto db = readTestDatabase();
+ auto db = readDatabase();
QVERIFY(db);
TemporaryFile targetFile1;
targetFile1.open();
- writer.writeDatabase(&targetFile1, db.data());
targetFile1.close();
+
TemporaryFile targetFile2;
targetFile2.open();
- writer.writeDatabase(&targetFile2, db.data());
targetFile2.close();
- // save another copy with a different password
TemporaryFile targetFile3;
targetFile3.open();
+ targetFile3.close();
+
+ db->saveAs(targetFile1.fileName());
+ db->saveAs(targetFile2.fileName());
+
+ // save another copy with a different password
auto oldKey = db->key();
auto key = QSharedPointer<CompositeKey>::create();
key->addKey(QSharedPointer<PasswordKey>::create("b"));
db->setKey(key);
- writer.writeDatabase(&targetFile3, db.data());
- targetFile3.close();
+ db->saveAs(targetFile3.fileName());
+
+ // Restore the original password
db->setKey(oldKey);
// then add a new entry to the in-memory database and save another copy
@@ -1307,91 +1268,64 @@ void TestCli::testMerge()
auto* group = db->rootGroup()->findGroupByPath("/Internet/");
QVERIFY(group);
group->addEntry(entry);
+
TemporaryFile sourceFile;
sourceFile.open();
- writer.writeDatabase(&sourceFile, db.data());
sourceFile.close();
-
- qint64 pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", "-s", targetFile1.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine();
- m_stderrFile->reset();
- QList<QByteArray> outLines1 = m_stdoutFile->readAll().split('\n');
- QCOMPARE(outLines1.at(0).split('[').at(0), QByteArray("\tOverwriting Internet "));
- QCOMPARE(outLines1.at(1).split('[').at(0), QByteArray("\tCreating missing Some Website "));
+ db->saveAs(sourceFile.fileName());
+
+ setInput("a");
+ execCmd(mergeCmd, {"merge", "-s", targetFile1.fileName(), sourceFile.fileName()});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QList<QByteArray> outLines1 = m_stdout->readAll().split('\n');
+ QVERIFY(outLines1.at(0).contains("Overwriting Internet"));
+ QVERIFY(outLines1.at(1).contains("Creating missing Some Website"));
QCOMPARE(outLines1.at(2),
QString("Successfully merged %1 into %2.").arg(sourceFile.fileName(), targetFile1.fileName()).toUtf8());
- QFile readBack(targetFile1.fileName());
- readBack.open(QIODevice::ReadOnly);
auto mergedDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack, oldKey, mergedDb.data());
- readBack.close();
- QVERIFY(mergedDb);
+ QVERIFY(mergedDb->open(targetFile1.fileName(), oldKey));
+
auto* entry1 = mergedDb->rootGroup()->findEntryByPath("/Internet/Some Website");
QVERIFY(entry1);
QCOMPARE(entry1->title(), QString("Some Website"));
QCOMPARE(entry1->password(), QString("secretsecretsecret"));
// the dry run option should not modify the target database.
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", "--dry-run", "-s", targetFile2.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine();
- m_stderrFile->reset();
- QList<QByteArray> outLines2 = m_stdoutFile->readAll().split('\n');
- QCOMPARE(outLines2.at(0).split('[').at(0), QByteArray("\tOverwriting Internet "));
- QCOMPARE(outLines2.at(1).split('[').at(0), QByteArray("\tCreating missing Some Website "));
+ setInput("a");
+ execCmd(mergeCmd, {"merge", "--dry-run", "-s", targetFile2.fileName(), sourceFile.fileName()});
+ QList<QByteArray> outLines2 = m_stdout->readAll().split('\n');
+ QVERIFY(outLines2.at(0).contains("Overwriting Internet"));
+ QVERIFY(outLines2.at(1).contains("Creating missing Some Website"));
QCOMPARE(outLines2.at(2), QByteArray("Database was not modified by merge operation."));
- QFile readBack2(targetFile2.fileName());
- readBack2.open(QIODevice::ReadOnly);
mergedDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack2, oldKey, mergedDb.data());
- readBack2.close();
- QVERIFY(mergedDb);
+ QVERIFY(mergedDb->open(targetFile2.fileName(), oldKey));
entry1 = mergedDb->rootGroup()->findEntryByPath("/Internet/Some Website");
QVERIFY(!entry1);
// the dry run option can be used with the quiet option
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", "--dry-run", "-s", "-q", targetFile2.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine();
- m_stderrFile->reset();
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
-
- readBack2.setFileName(targetFile2.fileName());
- readBack2.open(QIODevice::ReadOnly);
+ setInput("a");
+ execCmd(mergeCmd, {"merge", "--dry-run", "-s", "-q", targetFile2.fileName(), sourceFile.fileName()});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+
mergedDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack2, oldKey, mergedDb.data());
- readBack2.close();
- QVERIFY(mergedDb);
+ QVERIFY(mergedDb->open(targetFile2.fileName(), oldKey));
entry1 = mergedDb->rootGroup()->findEntryByPath("/Internet/Some Website");
QVERIFY(!entry1);
// try again with different passwords for both files
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("b");
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", targetFile3.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine();
- m_stdoutFile->readLine();
- QList<QByteArray> outLines3 = m_stdoutFile->readAll().split('\n');
+ setInput({"b", "a"});
+ execCmd(mergeCmd, {"merge", targetFile3.fileName(), sourceFile.fileName()});
+ QList<QByteArray> outLines3 = m_stdout->readAll().split('\n');
QCOMPARE(outLines3.at(2),
QString("Successfully merged %1 into %2.").arg(sourceFile.fileName(), targetFile3.fileName()).toUtf8());
- readBack.setFileName(targetFile3.fileName());
- readBack.open(QIODevice::ReadOnly);
mergedDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack, key, mergedDb.data());
- readBack.close();
- QVERIFY(mergedDb);
+ QVERIFY(mergedDb->open(targetFile3.fileName(), key));
+
entry1 = mergedDb->rootGroup()->findEntryByPath("/Internet/Some Website");
QVERIFY(entry1);
QCOMPARE(entry1->title(), QString("Some Website"));
@@ -1399,27 +1333,21 @@ void TestCli::testMerge()
// making sure that the message is different if the database was not
// modified by the merge operation.
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", "-s", sourceFile.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine();
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Database was not modified by merge operation.\n"));
+ setInput("a");
+ execCmd(mergeCmd, {"merge", "-s", sourceFile.fileName(), sourceFile.fileName()});
+ QCOMPARE(m_stdout->readAll(), QByteArray("Database was not modified by merge operation.\n"));
// Quiet option
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", "-q", "-s", sourceFile.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(mergeCmd, {"merge", "-q", "-s", sourceFile.fileName(), sourceFile.fileName()});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// Quiet option without the -s option
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge", "-q", sourceFile.fileName(), sourceFile.fileName()});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput({"a", "a"});
+ execCmd(mergeCmd, {"merge", "-q", sourceFile.fileName(), sourceFile.fileName()});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
}
void TestCli::testMergeWithKeys()
@@ -1432,9 +1360,6 @@ void TestCli::testMergeWithKeys()
QVERIFY(!mergeCmd.name.isEmpty());
QVERIFY(mergeCmd.getDescriptionLine().contains(mergeCmd.name));
- Kdbx4Writer writer;
- Kdbx4Reader reader;
-
QScopedPointer<QTemporaryDir> testDir(new QTemporaryDir());
QString sourceDatabaseFilename = testDir->path() + "/testSourceDatabase.kdbx";
@@ -1443,22 +1368,16 @@ void TestCli::testMergeWithKeys()
QString targetDatabaseFilename = testDir->path() + "/testTargetDatabase.kdbx";
QString targetKeyfilePath = testDir->path() + "/testTargetKeyfile.txt";
- qint64 pos = m_stdoutFile->pos();
+ setInput({"a", "a"});
+ execCmd(createCmd, {"db-create", sourceDatabaseFilename, "-p", "-k", sourceKeyfilePath});
- Utils::Test::setNextPassword("a");
- createCmd.execute({"create", sourceDatabaseFilename, "-k", sourceKeyfilePath});
+ setInput({"b", "b"});
+ execCmd(createCmd, {"db-create", targetDatabaseFilename, "-p", "-k", targetKeyfilePath});
- Utils::Test::setNextPassword("b");
- createCmd.execute({"create", targetDatabaseFilename, "-k", targetKeyfilePath});
-
- Utils::Test::setNextPassword("a");
- auto sourceDatabase = QSharedPointer<Database>(
- Utils::unlockDatabase(sourceDatabaseFilename, true, sourceKeyfilePath, "", Utils::STDOUT));
+ auto sourceDatabase = readDatabase(sourceDatabaseFilename, "a", sourceKeyfilePath);
QVERIFY(sourceDatabase);
- Utils::Test::setNextPassword("b");
- auto targetDatabase = QSharedPointer<Database>(
- Utils::unlockDatabase(targetDatabaseFilename, true, targetKeyfilePath, "", Utils::STDOUT));
+ auto targetDatabase = readDatabase(targetDatabaseFilename, "b", targetKeyfilePath);
QVERIFY(targetDatabase);
auto* rootGroup = new Group();
@@ -1493,34 +1412,22 @@ void TestCli::testMergeWithKeys()
targetDatabase->setRootGroup(otherRootGroup);
- QFile sourceDatabaseFile(sourceDatabaseFilename);
- sourceDatabaseFile.open(QIODevice::WriteOnly);
- QVERIFY(writer.writeDatabase(&sourceDatabaseFile, sourceDatabase.data()));
- sourceDatabaseFile.flush();
- sourceDatabaseFile.close();
-
- QFile targetDatabaseFile(targetDatabaseFilename);
- targetDatabaseFile.open(QIODevice::WriteOnly);
- QVERIFY(writer.writeDatabase(&targetDatabaseFile, targetDatabase.data()));
- targetDatabaseFile.flush();
- targetDatabaseFile.close();
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("b");
- Utils::Test::setNextPassword("a");
- mergeCmd.execute({"merge",
- "-k",
- targetKeyfilePath,
- "--key-file-from",
- sourceKeyfilePath,
- targetDatabaseFile.fileName(),
- sourceDatabaseFile.fileName()});
-
- m_stdoutFile->seek(pos);
- QList<QByteArray> lines = m_stdoutFile->readAll().split('\n');
- QVERIFY(lines.contains(QString("Successfully merged %1 into %2.")
- .arg(sourceDatabaseFile.fileName(), targetDatabaseFile.fileName())
- .toUtf8()));
+ sourceDatabase->saveAs(sourceDatabaseFilename);
+ targetDatabase->saveAs(targetDatabaseFilename);
+
+ setInput({"b", "a"});
+ execCmd(mergeCmd,
+ {"merge",
+ "-k",
+ targetKeyfilePath,
+ "--key-file-from",
+ sourceKeyfilePath,
+ targetDatabaseFilename,
+ sourceDatabaseFilename});
+
+ QList<QByteArray> lines = m_stdout->readAll().split('\n');
+ QVERIFY(lines.contains(
+ QString("Successfully merged %1 into %2.").arg(sourceDatabaseFilename, targetDatabaseFilename).toUtf8()));
}
void TestCli::testMove()
@@ -1529,53 +1436,37 @@ void TestCli::testMove()
QVERIFY(!moveCmd.name.isEmpty());
QVERIFY(moveCmd.getDescriptionLine().contains(moveCmd.name));
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- moveCmd.execute({"mv", m_dbFile->fileName(), "invalid_entry_path", "invalid_group_path"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip prompt line
- QCOMPARE(m_stdoutFile->readLine(), QByteArray(""));
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Could not find entry with path invalid_entry_path.\n"));
-
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- moveCmd.execute({"mv", m_dbFile->fileName(), "Sample Entry", "invalid_group_path"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip prompt line
- QCOMPARE(m_stdoutFile->readLine(), QByteArray(""));
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Could not find group with path invalid_group_path.\n"));
-
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- moveCmd.execute({"mv", m_dbFile->fileName(), "Sample Entry", "General/"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip prompt line
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Successfully moved entry Sample Entry to group General/.\n"));
- QCOMPARE(m_stderrFile->readLine(), QByteArray(""));
-
- auto db = readTestDatabase();
+ setInput("a");
+ execCmd(moveCmd, {"mv", m_dbFile->fileName(), "invalid_entry_path", "invalid_group_path"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readLine(), QByteArray("Could not find entry with path invalid_entry_path.\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray());
+
+ setInput("a");
+ execCmd(moveCmd, {"mv", m_dbFile->fileName(), "Sample Entry", "invalid_group_path"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readLine(), QByteArray("Could not find group with path invalid_group_path.\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray());
+
+ setInput("a");
+ execCmd(moveCmd, {"mv", m_dbFile->fileName(), "Sample Entry", "General/"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readLine(), QByteArray());
+ QCOMPARE(m_stdout->readLine(), QByteArray("Successfully moved entry Sample Entry to group General/.\n"));
+
+ auto db = readDatabase();
auto* entry = db->rootGroup()->findEntryByPath("General/Sample Entry");
QVERIFY(entry);
// Test that not modified if the same group is destination.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- moveCmd.execute({"mv", m_dbFile->fileName(), "General/Sample Entry", "General/"});
- m_stdoutFile->seek(pos);
- m_stderrFile->seek(posErr);
- m_stdoutFile->readLine(); // skip prompt line
- QCOMPARE(m_stdoutFile->readLine(), QByteArray(""));
- QCOMPARE(m_stderrFile->readLine(), QByteArray("Entry is already in group General/.\n"));
+ setInput("a");
+ execCmd(moveCmd, {"mv", m_dbFile->fileName(), "General/Sample Entry", "General/"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readLine(), QByteArray("Entry is already in group General/.\n"));
+ QCOMPARE(m_stdout->readLine(), QByteArray());
// sanity check
- db = readTestDatabase();
+ db = readDatabase();
entry = db->rootGroup()->findEntryByPath("General/Sample Entry");
QVERIFY(entry);
}
@@ -1586,80 +1477,52 @@ void TestCli::testRemove()
QVERIFY(!removeCmd.name.isEmpty());
QVERIFY(removeCmd.getDescriptionLine().contains(removeCmd.name));
- Kdbx3Reader reader;
- Kdbx3Writer writer;
-
// load test database and save a copy with disabled recycle bin
- auto db = readTestDatabase();
+ auto db = readDatabase();
QVERIFY(db);
TemporaryFile fileCopy;
fileCopy.open();
- db->metadata()->setRecycleBinEnabled(false);
- writer.writeDatabase(&fileCopy, db.data());
fileCopy.close();
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
+ db->metadata()->setRecycleBinEnabled(false);
+ db->saveAs(fileCopy.fileName());
// delete entry and verify
- Utils::Test::setNextPassword("a");
- removeCmd.execute({"rm", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully recycled entry Sample Entry.\n"));
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(removeCmd, {"rm", m_dbFile->fileName(), "/Sample Entry"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray("Successfully recycled entry Sample Entry.\n"));
- auto key = QSharedPointer<CompositeKey>::create();
- key->addKey(QSharedPointer<PasswordKey>::create("a"));
- QFile readBack(m_dbFile->fileName());
- readBack.open(QIODevice::ReadOnly);
- auto readBackDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack, key, readBackDb.data());
- readBack.close();
+ auto readBackDb = readDatabase();
QVERIFY(readBackDb);
QVERIFY(!readBackDb->rootGroup()->findEntryByPath("/Sample Entry"));
QVERIFY(readBackDb->rootGroup()->findEntryByPath(QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))));
- pos = m_stdoutFile->pos();
- pos = m_stdoutFile->pos();
-
// try again, this time without recycle bin
- Utils::Test::setNextPassword("a");
- removeCmd.execute({"rm", fileCopy.fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully deleted entry Sample Entry.\n"));
-
- readBack.setFileName(fileCopy.fileName());
- readBack.open(QIODevice::ReadOnly);
- readBackDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack, key, readBackDb.data());
- readBack.close();
+ setInput("a");
+ execCmd(removeCmd, {"rm", fileCopy.fileName(), "/Sample Entry"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stdout->readAll(), QByteArray("Successfully deleted entry Sample Entry.\n"));
+
+ readBackDb = readDatabase(fileCopy.fileName(), "a");
QVERIFY(readBackDb);
QVERIFY(!readBackDb->rootGroup()->findEntryByPath("/Sample Entry"));
QVERIFY(!readBackDb->rootGroup()->findEntryByPath(QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))));
// finally, try deleting a non-existent entry
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- removeCmd.execute({"rm", fileCopy.fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Entry /Sample Entry not found.\n"));
+ setInput("a");
+ execCmd(removeCmd, {"rm", fileCopy.fileName(), "/Sample Entry"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray("Entry /Sample Entry not found.\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// try deleting a directory, should fail
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- removeCmd.execute({"rm", fileCopy.fileName(), "/General"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Entry /General not found.\n"));
+ setInput("a");
+ execCmd(removeCmd, {"rm", fileCopy.fileName(), "/General"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray("Entry /General not found.\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
}
void TestCli::testRemoveGroup()
@@ -1668,60 +1531,41 @@ void TestCli::testRemoveGroup()
QVERIFY(!removeGroupCmd.name.isEmpty());
QVERIFY(removeGroupCmd.getDescriptionLine().contains(removeGroupCmd.name));
- Kdbx3Reader reader;
- Kdbx3Writer writer;
-
// try deleting a directory, should recycle it first.
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- removeGroupCmd.execute({"rmdir", m_dbFile->fileName(), "/General"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully recycled group /General.\n"));
-
- auto db = readTestDatabase();
+ setInput("a");
+ execCmd(removeGroupCmd, {"rmdir", m_dbFile->fileName(), "/General"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray("Successfully recycled group /General.\n"));
+
+ auto db = readDatabase();
auto* group = db->rootGroup()->findGroupByPath("General");
QVERIFY(!group);
// try deleting a directory again, should delete it permanently.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- removeGroupCmd.execute({"rmdir", m_dbFile->fileName(), "Recycle Bin/General"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully deleted group Recycle Bin/General.\n"));
- QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
-
- db = readTestDatabase();
+ setInput("a");
+ execCmd(removeGroupCmd, {"rmdir", m_dbFile->fileName(), "Recycle Bin/General"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray("Successfully deleted group Recycle Bin/General.\n"));
+
+ db = readDatabase();
group = db->rootGroup()->findGroupByPath("Recycle Bin/General");
QVERIFY(!group);
// try deleting an invalid group, should fail.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- removeGroupCmd.execute({"rmdir", m_dbFile->fileName(), "invalid"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Group invalid not found.\n"));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(removeGroupCmd, {"rmdir", m_dbFile->fileName(), "invalid"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray("Group invalid not found.\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// Should fail to remove the root group.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- removeGroupCmd.execute({"rmdir", m_dbFile->fileName(), "/"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Cannot remove root group from database.\n"));
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(removeGroupCmd, {"rmdir", m_dbFile->fileName(), "/"});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray("Cannot remove root group from database.\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
}
void TestCli::testRemoveQuiet()
@@ -1730,44 +1574,27 @@ void TestCli::testRemoveQuiet()
QVERIFY(!removeCmd.name.isEmpty());
QVERIFY(removeCmd.getDescriptionLine().contains(removeCmd.name));
- Kdbx3Reader reader;
- Kdbx3Writer writer;
-
- qint64 pos = m_stdoutFile->pos();
-
// delete entry and verify
- Utils::Test::setNextPassword("a");
- removeCmd.execute({"rm", "-q", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ setInput("a");
+ execCmd(removeCmd, {"rm", "-q", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
- auto key = QSharedPointer<CompositeKey>::create();
- key->addKey(QSharedPointer<PasswordKey>::create("a"));
- QFile readBack(m_dbFile->fileName());
- readBack.open(QIODevice::ReadOnly);
- auto readBackDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack, key, readBackDb.data());
- readBack.close();
- QVERIFY(readBackDb);
- QVERIFY(!readBackDb->rootGroup()->findEntryByPath("/Sample Entry"));
- QVERIFY(readBackDb->rootGroup()->findEntryByPath(QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))));
+ auto db = readDatabase();
+ QVERIFY(db);
- pos = m_stdoutFile->pos();
+ QVERIFY(!db->rootGroup()->findEntryByPath("/Sample Entry"));
+ QVERIFY(db->rootGroup()->findEntryByPath(QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))));
// remove the entry completely
- Utils::Test::setNextPassword("a");
- removeCmd.execute({"rm", "-q", m_dbFile->fileName(), QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
-
- readBack.setFileName(m_dbFile->fileName());
- readBack.open(QIODevice::ReadOnly);
- readBackDb = QSharedPointer<Database>::create();
- reader.readDatabase(&readBack, key, readBackDb.data());
- readBack.close();
- QVERIFY(readBackDb);
- QVERIFY(!readBackDb->rootGroup()->findEntryByPath("/Sample Entry"));
- QVERIFY(!readBackDb->rootGroup()->findEntryByPath(QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))));
+ setInput("a");
+ execCmd(removeCmd, {"rm", "-q", m_dbFile->fileName(), QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+
+ db = readDatabase();
+ QVERIFY(!db->rootGroup()->findEntryByPath("/Sample Entry"));
+ QVERIFY(!db->rootGroup()->findEntryByPath(QString("/%1/Sample Entry").arg(Group::tr("Recycle Bin"))));
}
void TestCli::testShow()
@@ -1776,96 +1603,82 @@ void TestCli::testShow()
QVERIFY(!showCmd.name.isEmpty());
QVERIFY(showCmd.getDescriptionLine().contains(showCmd.name));
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(showCmd, {"show", m_dbFile->fileName(), "/Sample Entry"});
+ m_stderr->readLine(); // Skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Title: Sample Entry\n"
"UserName: User Name\n"
"Password: PROTECTED\n"
"URL: http://www.somesite.com/\n"
"Notes: Notes\n"));
- qint64 pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-s", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(showCmd, {"show", "-s", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Title: Sample Entry\n"
"UserName: User Name\n"
"Password: Password\n"
"URL: http://www.somesite.com/\n"
"Notes: Notes\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", m_dbFile->fileName(), "-q", "/Sample Entry"});
- m_stdoutFile->seek(pos);
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(showCmd, {"show", m_dbFile->fileName(), "-q", "/Sample Entry"});
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Title: Sample Entry\n"
"UserName: User Name\n"
"Password: PROTECTED\n"
"URL: http://www.somesite.com/\n"
"Notes: Notes\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-a", "Title", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Sample Entry\n"));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-a", "Password", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(), QByteArray("Password\n"));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-a", "Title", "-a", "URL", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(showCmd, {"show", "-a", "Title", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(), QByteArray("Sample Entry\n"));
+
+ setInput("a");
+ execCmd(showCmd, {"show", "-a", "Password", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(), QByteArray("Password\n"));
+
+ setInput("a");
+ execCmd(showCmd, {"show", "-a", "Title", "-a", "URL", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(),
QByteArray("Sample Entry\n"
"http://www.somesite.com/\n"));
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-a", "DoesNotExist", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->reset();
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray("ERROR: unknown attribute DoesNotExist.\n"));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-t", m_dbFile->fileName(), "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QVERIFY(isTOTP(m_stdoutFile->readAll()));
-
- pos = m_stdoutFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", "-a", "Title", m_dbFile->fileName(), "--totp", "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readLine(), QByteArray("Sample Entry\n"));
- QVERIFY(isTOTP(m_stdoutFile->readAll()));
-
- pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- showCmd.execute({"show", m_dbFile2->fileName(), "--totp", "/Sample Entry"});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll(), QByteArray("Entry with path /Sample Entry has no TOTP set up.\n"));
+ // Test case insensitivity
+ setInput("a");
+ execCmd(showCmd, {"show", "-a", "TITLE", "-a", "URL", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(),
+ QByteArray("Sample Entry\n"
+ "http://www.somesite.com/\n"));
+
+ setInput("a");
+ execCmd(showCmd, {"show", "-a", "DoesNotExist", m_dbFile->fileName(), "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QVERIFY(m_stderr->readAll().contains("ERROR: unknown attribute DoesNotExist.\n"));
+
+ setInput("a");
+ execCmd(showCmd, {"show", "-t", m_dbFile->fileName(), "/Sample Entry"});
+ QVERIFY(isTotp(m_stdout->readAll()));
+
+ setInput("a");
+ execCmd(showCmd, {"show", "-a", "Title", m_dbFile->fileName(), "--totp", "/Sample Entry"});
+ QCOMPARE(m_stdout->readLine(), QByteArray("Sample Entry\n"));
+ QVERIFY(isTotp(m_stdout->readAll()));
+
+ setInput("a");
+ execCmd(showCmd, {"show", m_dbFile2->fileName(), "--totp", "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QVERIFY(m_stderr->readAll().contains("Entry with path /Sample Entry has no TOTP set up.\n"));
+
+ // Show with ambiguous attributes
+ setInput("a");
+ execCmd(showCmd, {"show", m_dbFile->fileName(), "-a", "Testattribute1", "/Sample Entry"});
+ QCOMPARE(m_stdout->readAll(), QByteArray());
+ QVERIFY(m_stderr->readAll().contains(
+ "ERROR: attribute Testattribute1 is ambiguous, it matches TestAttribute1 and testattribute1.\n"));
}
void TestCli::testInvalidDbFiles()
@@ -1874,16 +1687,13 @@ void TestCli::testInvalidDbFiles()
QString nonExistentDbPath("/foo/bar/baz");
QString directoryName("/");
- qint64 pos = m_stderrFile->pos();
- showCmd.execute({"show", nonExistentDbPath, "-q", "/Sample Entry"});
- m_stderrFile->seek(pos);
- QCOMPARE(QString(m_stderrFile->readAll()),
+ execCmd(showCmd, {"show", nonExistentDbPath, "/Sample Entry"});
+ QCOMPARE(QString(m_stderr->readAll()),
QObject::tr("Failed to open database file %1: not found").arg(nonExistentDbPath) + "\n");
+ QCOMPARE(m_stdout->readAll(), QByteArray());
- pos = m_stderrFile->pos();
- showCmd.execute({"show", directoryName, "-q", "whatever"});
- m_stderrFile->seek(pos);
- QCOMPARE(QString(m_stderrFile->readAll()),
+ execCmd(showCmd, {"show", directoryName, "whatever"});
+ QCOMPARE(QString(m_stderr->readAll()),
QObject::tr("Failed to open database file %1: not a plain file").arg(directoryName) + "\n");
// Create a write-only file and try to open it.
@@ -1895,10 +1705,8 @@ void TestCli::testInvalidDbFiles()
QVERIFY(tempFile.open());
QString path = QFileInfo(tempFile).absoluteFilePath();
QVERIFY(tempFile.setPermissions(QFileDevice::WriteOwner));
- pos = m_stderrFile->pos();
- showCmd.execute({"show", path, "some entry"});
- m_stderrFile->seek(pos);
- QCOMPARE(QString(m_stderrFile->readAll()),
+ execCmd(showCmd, {"show", path, "some entry"});
+ QCOMPARE(QString(m_stderr->readAll()),
QObject::tr("Failed to open database file %1: not readable").arg(path) + "\n");
#endif // Q_OS_WIN
}
@@ -1906,90 +1714,83 @@ void TestCli::testInvalidDbFiles()
/**
* Secret key for the YubiKey slot used by the unit test is
* 1c e3 0f d7 8d 20 dc fa 40 b5 0c 18 77 9a fb 0f 02 28 8d b7
- * This secret should be configured at slot 2, and the slot
- * should be configured as passive.
+ * This secret can be on either slot but must be passive.
*/
void TestCli::testYubiKeyOption()
{
- if (!YubiKey::instance()->init()) {
- QSKIP("Unable to connect to YubiKey");
+ if (!YubiKey::instance()->isInitialized()) {
+ QSKIP("Unable to initialize YubiKey interface.");
}
- QString errorMessage;
- bool isBlocking = YubiKey::instance()->checkSlotIsBlocking(2, errorMessage);
- if (isBlocking && errorMessage.isEmpty()) {
- QSKIP("Skipping YubiKey in press mode.");
+ YubiKey::instance()->findValidKeys();
+
+ // Wait for the hardware to respond
+ QSignalSpy detected(YubiKey::instance(), SIGNAL(detectComplete(bool)));
+ QTRY_VERIFY_WITH_TIMEOUT(detected.count() > 0, 2000);
+
+ auto keys = YubiKey::instance()->foundKeys();
+ if (keys.isEmpty()) {
+ QSKIP("No YubiKey devices were detected.");
}
+ bool wouldBlock = false;
QByteArray challenge("CLITest");
QByteArray response;
- YubiKey::instance()->challenge(2, false, challenge, response);
QByteArray expected("\xA2\x3B\x94\x00\xBE\x47\x9A\x30\xA9\xEB\x50\x9B\x85\x56\x5B\x6B\x30\x25\xB4\x8E", 20);
- QVERIFY2(response == expected, "YubiKey Slot 2 is not configured with correct secret key.");
+
+ // Find a key that as configured for this test
+ YubiKeySlot pKey(0, 0);
+ for (auto key : keys) {
+ if (YubiKey::instance()->testChallenge(key, &wouldBlock) && !wouldBlock) {
+ YubiKey::instance()->challenge(key, challenge, response);
+ if (response == expected) {
+ pKey = key;
+ break;
+ }
+ Tools::wait(100);
+ }
+ }
+
+ if (pKey.first == 0 && pKey.second == 0) {
+ QSKIP("No YubiKey is properly configured to perform this test.");
+ }
List listCmd;
Add addCmd;
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-y", "2", m_yubiKeyProtectedDbFile->fileName()});
- m_stdoutFile->reset();
- m_stderrFile->reset();
- m_stdoutFile->readLine(); // skip password prompt
- QCOMPARE(m_stdoutFile->readAll(),
+ setInput("a");
+ execCmd(listCmd, {"ls", "-y", "2", m_yubiKeyProtectedDbFile->fileName()});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll(), QByteArray());
+ QCOMPARE(m_stdout->readAll(),
QByteArray("entry1\n"
"entry2\n"));
// Should raise an error with no yubikey slot.
- qint64 pos = m_stdoutFile->pos();
- qint64 posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", m_yubiKeyProtectedDbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readLine(),
+ setInput("a");
+ execCmd(listCmd, {"ls", m_yubiKeyProtectedDbFile->fileName()});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readLine(),
QByteArray("Error while reading the database: Invalid credentials were provided, please try again.\n"));
- QCOMPARE(m_stderrFile->readLine(),
+ QCOMPARE(m_stderr->readLine(),
QByteArray("If this reoccurs, then your database file may be corrupt. (HMAC mismatch)\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// Should raise an error if yubikey slot is not a string
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-y", "invalidslot", m_yubiKeyProtectedDbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll().split(':').at(0), QByteArray("Invalid YubiKey slot invalidslot\n"));
+ setInput("a");
+ execCmd(listCmd, {"ls", "-y", "invalidslot", m_yubiKeyProtectedDbFile->fileName()});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll().split(':').at(0), QByteArray("Invalid YubiKey slot invalidslot\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
// Should raise an error if yubikey slot is invalid.
- pos = m_stdoutFile->pos();
- posErr = m_stderrFile->pos();
- Utils::Test::setNextPassword("a");
- listCmd.execute({"ls", "-y", "3", m_yubiKeyProtectedDbFile->fileName()});
- m_stdoutFile->seek(pos);
- m_stdoutFile->readLine(); // skip password prompt
- m_stderrFile->seek(posErr);
- QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
- QCOMPARE(m_stderrFile->readAll().split(':').at(0), QByteArray("Invalid YubiKey slot 3\n"));
+ setInput("a");
+ execCmd(listCmd, {"ls", "-y", "3", m_yubiKeyProtectedDbFile->fileName()});
+ m_stderr->readLine(); // skip password prompt
+ QCOMPARE(m_stderr->readAll().split(':').at(0), QByteArray("Invalid YubiKey slot 3\n"));
+ QCOMPARE(m_stdout->readAll(), QByteArray());
}
-namespace
-{
-
- void expectParseResult(const QString& input, const QStringList& expectedOutput)
- {
- QStringList result = Utils::splitCommandString(input);
- QCOMPARE(result.size(), expectedOutput.size());
- for (int i = 0; i < expectedOutput.size(); ++i) {
- QCOMPARE(result[i], expectedOutput[i]);
- }
- }
-
-} // namespace
-
void TestCli::testCommandParsing_data()
{
QTest::addColumn<QString>("input");
@@ -2011,23 +1812,25 @@ void TestCli::testCommandParsing()
QFETCH(QString, input);
QFETCH(QStringList, expectedOutput);
- expectParseResult(input, expectedOutput);
+ QStringList result = Utils::splitCommandString(input);
+ QCOMPARE(result.size(), expectedOutput.size());
+ for (int i = 0; i < expectedOutput.size(); ++i) {
+ QCOMPARE(result[i], expectedOutput[i]);
+ }
}
void TestCli::testOpen()
{
- Open o;
+ Open openCmd;
- Utils::Test::setNextPassword("a");
- o.execute({"open", m_dbFile->fileName()});
- m_stdoutFile->reset();
- QVERIFY(o.currentDatabase);
+ setInput("a");
+ execCmd(openCmd, {"open", m_dbFile->fileName()});
+ QVERIFY(openCmd.currentDatabase);
- List l;
+ List listCmd;
// Set a current database, simulating interactive mode.
- l.currentDatabase = o.currentDatabase;
- l.execute({"ls"});
- m_stdoutFile->reset();
+ listCmd.currentDatabase = openCmd.currentDatabase;
+ execCmd(listCmd, {"ls"});
QByteArray expectedOutput("Sample Entry\n"
"General/\n"
"Windows/\n"
@@ -2035,28 +1838,20 @@ void TestCli::testOpen()
"Internet/\n"
"eMail/\n"
"Homebanking/\n");
- QByteArray actualOutput = m_stdoutFile->readAll();
+ QByteArray actualOutput = m_stdout->readAll();
actualOutput.truncate(expectedOutput.length());
QCOMPARE(actualOutput, expectedOutput);
}
void TestCli::testHelp()
{
- Help h;
+ Help helpCmd;
Commands::setupCommands(false);
- {
- h.execute({"help"});
- m_stderrFile->reset();
- QString output(m_stderrFile->readAll());
- QVERIFY(output.contains(QObject::tr("Available commands")));
- }
+ execCmd(helpCmd, {"help"});
+ QVERIFY(m_stdout->readAll().contains("Available commands"));
- {
- List l;
- h.execute({"help", "ls"});
- m_stderrFile->reset();
- QString output(m_stderrFile->readAll());
- QVERIFY(output.contains(l.description));
- }
+ List listCmd;
+ execCmd(helpCmd, {"help", "ls"});
+ QVERIFY(m_stdout->readAll().contains(listCmd.description.toLatin1()));
}
diff --git a/tests/TestCli.h b/tests/TestCli.h
index 4947ee472..a8e6eabbb 100644
--- a/tests/TestCli.h
+++ b/tests/TestCli.h
@@ -18,30 +18,33 @@
#ifndef KEEPASSXC_TESTCLI_H
#define KEEPASSXC_TESTCLI_H
-#include "core/Database.h"
-#include "util/TemporaryFile.h"
-
-#include <QByteArray>
-#include <QFile>
+#include <QBuffer>
#include <QScopedPointer>
#include <QSharedPointer>
-#include <QTemporaryFile>
+#include <QStringList>
#include <QTest>
-#include <stdio.h>
+#include "util/TemporaryFile.h"
+
+class Command;
+class Database;
class TestCli : public QObject
{
Q_OBJECT
private:
- QSharedPointer<Database> readTestDatabase() const;
+ QSharedPointer<Database>
+ readDatabase(const QString& filename = {}, const QString& pw = {}, const QString& keyfile = {});
+ int execCmd(Command& cmd, const QStringList& args) const;
+ bool isTotp(const QString& value);
+ void setInput(const QString& input);
+ void setInput(const QStringList& input);
private slots:
void initTestCase();
void init();
void cleanup();
- void cleanupTestCase();
void testBatchCommands();
void testAdd();
@@ -59,6 +62,7 @@ private slots:
void testGenerate_data();
void testGenerate();
void testImport();
+ void testInfo();
void testKeyFileOption();
void testNoPasswordOption();
void testHelp();
@@ -77,21 +81,16 @@ private slots:
void testYubiKeyOption();
private:
- QByteArray m_dbData;
- QByteArray m_dbData2;
- QByteArray m_xmlData;
- QByteArray m_yubiKeyProtectedDbData;
- QByteArray m_keyFileProtectedDbData;
- QByteArray m_keyFileProtectedNoPasswordDbData;
QScopedPointer<TemporaryFile> m_dbFile;
QScopedPointer<TemporaryFile> m_dbFile2;
QScopedPointer<TemporaryFile> m_xmlFile;
QScopedPointer<TemporaryFile> m_keyFileProtectedDbFile;
QScopedPointer<TemporaryFile> m_keyFileProtectedNoPasswordDbFile;
QScopedPointer<TemporaryFile> m_yubiKeyProtectedDbFile;
- QScopedPointer<TemporaryFile> m_stdoutFile;
- QScopedPointer<TemporaryFile> m_stderrFile;
- QScopedPointer<TemporaryFile> m_stdinFile;
+
+ QScopedPointer<QBuffer> m_stdout;
+ QScopedPointer<QBuffer> m_stderr;
+ QScopedPointer<QBuffer> m_stdin;
};
#endif // KEEPASSXC_TESTCLI_H
diff --git a/tests/TestConfig.cpp b/tests/TestConfig.cpp
new file mode 100644
index 000000000..23661b046
--- /dev/null
+++ b/tests/TestConfig.cpp
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "TestConfig.h"
+
+#include <QList>
+#include <QTest>
+
+#include "config-keepassx-tests.h"
+#include "core/Config.h"
+#include "util/TemporaryFile.h"
+
+QTEST_GUILESS_MAIN(TestConfig)
+
+const QString oldTrueConfigPath = QString(KEEPASSX_TEST_DATA_DIR).append("/OutdatedConfig.ini");
+
+// upgrade config file with deprecated settings (all of which are set to non-default values)
+void TestConfig::testUpgrade()
+{
+ TemporaryFile tempFile;
+
+ QVERIFY(tempFile.copyFromFile(oldTrueConfigPath));
+ Config::createConfigFromFile(tempFile.fileName());
+
+ // value of new setting should be opposite the value of deprecated setting
+ QVERIFY(config()->get(Config::TrackNonDataChanges).toBool());
+ QVERIFY(!config()->get(Config::Security_PasswordsRepeatVisible).toBool());
+ QVERIFY(!config()->get(Config::Security_PasswordsHidden).toBool());
+ QVERIFY(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool());
+
+ tempFile.remove();
+}
diff --git a/tests/TestConfig.h b/tests/TestConfig.h
new file mode 100644
index 000000000..d5852acdd
--- /dev/null
+++ b/tests/TestConfig.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSX_TESTCONFIG_H
+#define KEEPASSX_TESTCONFIG_H
+
+#include "core/Config.h"
+
+class TestConfig : public QObject
+{
+ Q_OBJECT
+private slots:
+ void testUpgrade();
+};
+
+#endif // KEEPASSX_TESTCONFIG_H
diff --git a/tests/TestCsvExporter.cpp b/tests/TestCsvExporter.cpp
index 3e6623610..63ba11488 100644
--- a/tests/TestCsvExporter.cpp
+++ b/tests/TestCsvExporter.cpp
@@ -64,7 +64,7 @@ void TestCsvExporter::testExport()
QString expectedResult = QString()
.append(ExpectedHeaderLine)
- .append("\"Root/Test Group Name\",\"Test Entry Title\",\"Test Username\",\"Test "
+ .append("\"Passwords/Test Group Name\",\"Test Entry Title\",\"Test Username\",\"Test "
"Password\",\"http://test.url\",\"Test Notes\"\n");
QCOMPARE(QString::fromUtf8(buffer.buffer().constData()), expectedResult);
@@ -96,8 +96,9 @@ void TestCsvExporter::testNestedGroups()
QVERIFY(buffer.open(QIODevice::ReadWrite));
m_csvExporter->exportDatabase(&buffer, m_db);
- QCOMPARE(QString::fromUtf8(buffer.buffer().constData()),
- QString()
- .append(ExpectedHeaderLine)
- .append("\"Root/Test Group Name/Test Sub Group Name\",\"Test Entry Title\",\"\",\"\",\"\",\"\"\n"));
+ QCOMPARE(
+ QString::fromUtf8(buffer.buffer().constData()),
+ QString()
+ .append(ExpectedHeaderLine)
+ .append("\"Passwords/Test Group Name/Test Sub Group Name\",\"Test Entry Title\",\"\",\"\",\"\",\"\"\n"));
}
diff --git a/tests/TestCsvParser.cpp b/tests/TestCsvParser.cpp
index f31e30414..758c31ecc 100644
--- a/tests/TestCsvParser.cpp
+++ b/tests/TestCsvParser.cpp
@@ -30,8 +30,9 @@ void TestCsvParser::initTestCase()
void TestCsvParser::init()
{
file.reset(new QTemporaryFile());
- if (not file->open())
+ if (not file->open()) {
QFAIL("Cannot open file!");
+ }
parser->setBackslashSyntax(false);
parser->setComment('#');
parser->setFieldSeparator(',');
diff --git a/tests/TestEntry.cpp b/tests/TestEntry.cpp
index 39e4bd12c..c6cb1271d 100644
--- a/tests/TestEntry.cpp
+++ b/tests/TestEntry.cpp
@@ -612,3 +612,114 @@ void TestEntry::testIsRecycled()
db.recycleGroup(group1);
QVERIFY(entry1->isRecycled());
}
+
+void TestEntry::testMove()
+{
+ Database db;
+ Group* root = db.rootGroup();
+ QVERIFY(root);
+
+ Entry* entry0 = new Entry();
+ QVERIFY(entry0);
+ entry0->setGroup(root);
+ Entry* entry1 = new Entry();
+ QVERIFY(entry1);
+ entry1->setGroup(root);
+ Entry* entry2 = new Entry();
+ QVERIFY(entry2);
+ entry2->setGroup(root);
+ Entry* entry3 = new Entry();
+ QVERIFY(entry3);
+ entry3->setGroup(root);
+ // default order, straight
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry1);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry0->moveDown();
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry0->moveDown();
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry0->moveDown();
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry3);
+ QCOMPARE(root->entries().at(3), entry0);
+
+ // no effect
+ entry0->moveDown();
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry3);
+ QCOMPARE(root->entries().at(3), entry0);
+
+ entry0->moveUp();
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry0->moveUp();
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry0->moveUp();
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry1);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ // no effect
+ entry0->moveUp();
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry1);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry2->moveUp();
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry1);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry0->moveDown();
+ QCOMPARE(root->entries().at(0), entry2);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry1);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ entry3->moveUp();
+ QCOMPARE(root->entries().at(0), entry2);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry3);
+ QCOMPARE(root->entries().at(3), entry1);
+
+ entry3->moveUp();
+ QCOMPARE(root->entries().at(0), entry2);
+ QCOMPARE(root->entries().at(1), entry3);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry1);
+
+ entry2->moveDown();
+ QCOMPARE(root->entries().at(0), entry3);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry1);
+
+ entry1->moveUp();
+ QCOMPARE(root->entries().at(0), entry3);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry1);
+ QCOMPARE(root->entries().at(3), entry0);
+}
diff --git a/tests/TestEntry.h b/tests/TestEntry.h
index ff0cfe07f..9fc7e158b 100644
--- a/tests/TestEntry.h
+++ b/tests/TestEntry.h
@@ -38,6 +38,7 @@ private slots:
void testResolveNonIdPlaceholdersToUuid();
void testResolveClonedEntry();
void testIsRecycled();
+ void testMove();
};
#endif // KEEPASSX_TESTENTRY_H
diff --git a/tests/TestEntryModel.cpp b/tests/TestEntryModel.cpp
index 670e43aab..5df4b9ed9 100644
--- a/tests/TestEntryModel.cpp
+++ b/tests/TestEntryModel.cpp
@@ -55,6 +55,9 @@ void TestEntryModel::test()
EntryModel* model = new EntryModel(this);
+ QSignalSpy spyAboutToBeMoved(model, SIGNAL(rowsAboutToBeMoved(QModelIndex, int, int, QModelIndex, int)));
+ QSignalSpy spyMoved(model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)));
+
ModelTest* modelTest = new ModelTest(model, this);
model->setGroup(group1);
@@ -79,6 +82,29 @@ void TestEntryModel::test()
Entry* entry3 = new Entry();
entry3->setGroup(group1);
+ QCOMPARE(spyAboutToBeMoved.count(), 0);
+ QCOMPARE(spyMoved.count(), 0);
+
+ entry1->moveDown();
+ QCOMPARE(spyAboutToBeMoved.count(), 1);
+ QCOMPARE(spyMoved.count(), 1);
+
+ entry1->moveDown();
+ QCOMPARE(spyAboutToBeMoved.count(), 2);
+ QCOMPARE(spyMoved.count(), 2);
+
+ entry1->moveDown();
+ QCOMPARE(spyAboutToBeMoved.count(), 2);
+ QCOMPARE(spyMoved.count(), 2);
+
+ entry3->moveUp();
+ QCOMPARE(spyAboutToBeMoved.count(), 3);
+ QCOMPARE(spyMoved.count(), 3);
+
+ entry3->moveUp();
+ QCOMPARE(spyAboutToBeMoved.count(), 3);
+ QCOMPARE(spyMoved.count(), 3);
+
QCOMPARE(spyAboutToAdd.count(), 1);
QCOMPARE(spyAdded.count(), 1);
QCOMPARE(spyAboutToRemove.count(), 0);
@@ -204,7 +230,7 @@ void TestEntryModel::testDefaultIconModel()
DefaultIconModel* model = new DefaultIconModel(this);
ModelTest* modelTest = new ModelTest(model, this);
- QCOMPARE(model->rowCount(), DatabaseIcons::IconCount);
+ QCOMPARE(model->rowCount(), databaseIcons()->count());
delete modelTest;
delete model;
@@ -295,7 +321,7 @@ void TestEntryModel::testProxyModel()
*/
QSignalSpy spyColumnRemove(modelProxy, SIGNAL(columnsAboutToBeRemoved(QModelIndex, int, int)));
modelProxy->hideColumn(0, true);
- QCOMPARE(modelProxy->columnCount(), 12);
+ QCOMPARE(modelProxy->columnCount(), 13);
QVERIFY(!spyColumnRemove.isEmpty());
int oldSpyColumnRemoveSize = spyColumnRemove.size();
@@ -317,7 +343,7 @@ void TestEntryModel::testProxyModel()
*/
QSignalSpy spyColumnInsert(modelProxy, SIGNAL(columnsAboutToBeInserted(QModelIndex, int, int)));
modelProxy->hideColumn(0, false);
- QCOMPARE(modelProxy->columnCount(), 13);
+ QCOMPARE(modelProxy->columnCount(), 14);
QVERIFY(!spyColumnInsert.isEmpty());
int oldSpyColumnInsertSize = spyColumnInsert.size();
diff --git a/tests/TestEntrySearcher.cpp b/tests/TestEntrySearcher.cpp
index 7107cff0a..1b8b4f5b8 100644
--- a/tests/TestEntrySearcher.cpp
+++ b/tests/TestEntrySearcher.cpp
@@ -23,6 +23,7 @@ QTEST_GUILESS_MAIN(TestEntrySearcher)
void TestEntrySearcher::init()
{
m_rootGroup = new Group();
+ m_entrySearcher = EntrySearcher();
}
void TestEntrySearcher::cleanup()
@@ -259,6 +260,113 @@ void TestEntrySearcher::testCustomAttributesAreSearched()
QCOMPARE(m_searchResult.count(), 2);
// protected attributes are ignored
+ m_entrySearcher = EntrySearcher(false, true);
m_searchResult = m_entrySearcher.search("_testAttribute:test _testProtected:testP2", m_rootGroup);
QCOMPARE(m_searchResult.count(), 2);
}
+
+void TestEntrySearcher::testGroup()
+{
+ /**
+ * Root
+ * - group1 (1 entry)
+ * - subgroup1 (2 entries)
+ * - group2
+ * - subgroup2 (1 entry)
+ */
+ Group* group1 = new Group();
+ Group* group2 = new Group();
+
+ group1->setParent(m_rootGroup);
+ group1->setName("group1");
+ group2->setParent(m_rootGroup);
+ group2->setName("group2");
+
+ Group* subgroup1 = new Group();
+ subgroup1->setName("subgroup1");
+ subgroup1->setParent(group1);
+
+ Group* subgroup2 = new Group();
+ subgroup2->setName("subgroup2");
+ subgroup2->setParent(group2);
+
+ Entry* eGroup1 = new Entry();
+ eGroup1->setTitle("Entry Group 1");
+ eGroup1->setGroup(group1);
+
+ Entry* eSub1 = new Entry();
+ eSub1->setTitle("test search term test");
+ eSub1->setGroup(subgroup1);
+
+ Entry* eSub2 = new Entry();
+ eSub2->setNotes("test test");
+ eSub2->setGroup(subgroup1);
+
+ Entry* eSub3 = new Entry();
+ eSub3->setNotes("test term test");
+ eSub3->setGroup(subgroup2);
+
+ m_searchResult = m_entrySearcher.search("group:subgroup", m_rootGroup);
+ QCOMPARE(m_searchResult.count(), 3);
+
+ m_searchResult = m_entrySearcher.search("g:subgroup1", m_rootGroup);
+ QCOMPARE(m_searchResult.count(), 2);
+
+ m_searchResult = m_entrySearcher.search("g:subgroup1 search", m_rootGroup);
+ QCOMPARE(m_searchResult.count(), 1);
+
+ m_searchResult = m_entrySearcher.search("g:*1/sub*1", m_rootGroup);
+ QCOMPARE(m_searchResult.count(), 2);
+
+ m_searchResult = m_entrySearcher.search("g:/group1 search", m_rootGroup);
+ QCOMPARE(m_searchResult.count(), 1);
+}
+
+void TestEntrySearcher::testSkipProtected()
+{
+ QScopedPointer<Entry> e1(new Entry());
+ e1->setGroup(m_rootGroup);
+
+ e1->attributes()->set("testAttribute", "testE1");
+ e1->attributes()->set("testProtected", "apple", true);
+
+ QScopedPointer<Entry> e2(new Entry());
+ e2->setGroup(m_rootGroup);
+ e2->attributes()->set("testAttribute", "testE2");
+ e2->attributes()->set("testProtected", "banana", true);
+
+ const QList<Entry*> expectE1{e1.data()};
+ const QList<Entry*> expectE2{e2.data()};
+ const QList<Entry*> expectBoth{e1.data(), e2.data()};
+
+ // when not skipping protected, empty term matches everything
+ m_searchResult = m_entrySearcher.search("", m_rootGroup);
+ QCOMPARE(m_searchResult, expectBoth);
+
+ // now test the searcher with skipProtected = true
+ m_entrySearcher = EntrySearcher(false, true);
+
+ // when skipping protected, empty term matches nothing
+ m_searchResult = m_entrySearcher.search("", m_rootGroup);
+ QCOMPARE(m_searchResult, {});
+
+ // having a protected entry in terms should not affect the results in anyways
+ m_searchResult = m_entrySearcher.search("_testProtected:apple", m_rootGroup);
+ QCOMPARE(m_searchResult, {});
+ m_searchResult = m_entrySearcher.search("_testProtected:apple _testAttribute:testE2", m_rootGroup);
+ QCOMPARE(m_searchResult, expectE2);
+ m_searchResult = m_entrySearcher.search("_testProtected:apple _testAttribute:testE1", m_rootGroup);
+ QCOMPARE(m_searchResult, expectE1);
+ m_searchResult =
+ m_entrySearcher.search("_testProtected:apple _testAttribute:testE1 _testAttribute:testE2", m_rootGroup);
+ QCOMPARE(m_searchResult, {});
+
+ // also move the protected term around to execurise the short-circut logic
+ m_searchResult = m_entrySearcher.search("_testAttribute:testE2 _testProtected:apple", m_rootGroup);
+ QCOMPARE(m_searchResult, expectE2);
+ m_searchResult = m_entrySearcher.search("_testAttribute:testE1 _testProtected:apple", m_rootGroup);
+ QCOMPARE(m_searchResult, expectE1);
+ m_searchResult =
+ m_entrySearcher.search("_testAttribute:testE1 _testProtected:apple _testAttribute:testE2", m_rootGroup);
+ QCOMPARE(m_searchResult, {});
+}
diff --git a/tests/TestEntrySearcher.h b/tests/TestEntrySearcher.h
index fb4312926..4e3e99a43 100644
--- a/tests/TestEntrySearcher.h
+++ b/tests/TestEntrySearcher.h
@@ -36,6 +36,8 @@ private slots:
void testAllAttributesAreSearched();
void testSearchTermParser();
void testCustomAttributesAreSearched();
+ void testGroup();
+ void testSkipProtected();
private:
Group* m_rootGroup;
diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp
index 47a917e43..28a9f7ec4 100644
--- a/tests/TestGroup.cpp
+++ b/tests/TestGroup.cpp
@@ -336,12 +336,12 @@ void TestGroup::testCopyCustomIcon()
QScopedPointer<Database> dbTarget(new Database());
group->setParent(dbTarget->rootGroup());
- QVERIFY(dbTarget->metadata()->containsCustomIcon(groupIconUuid));
+ QVERIFY(dbTarget->metadata()->hasCustomIcon(groupIconUuid));
QCOMPARE(dbTarget->metadata()->customIcon(groupIconUuid), groupIcon);
QCOMPARE(group->icon(), groupIcon);
entry->setGroup(dbTarget->rootGroup());
- QVERIFY(dbTarget->metadata()->containsCustomIcon(entryIconUuid));
+ QVERIFY(dbTarget->metadata()->hasCustomIcon(entryIconUuid));
QCOMPARE(dbTarget->metadata()->customIcon(entryIconUuid), entryIcon);
QCOMPARE(entry->icon(), entryIcon);
}
@@ -462,11 +462,11 @@ void TestGroup::testCopyCustomIcons()
Metadata* metaTarget = dbTarget->metadata();
- QCOMPARE(metaTarget->customIcons().size(), 4);
- QVERIFY(metaTarget->containsCustomIcon(group1Icon));
- QVERIFY(metaTarget->containsCustomIcon(group2Icon));
- QVERIFY(metaTarget->containsCustomIcon(entry1IconOld));
- QVERIFY(metaTarget->containsCustomIcon(entry1IconNew));
+ QCOMPARE(metaTarget->customIconsOrder().size(), 4);
+ QVERIFY(metaTarget->hasCustomIcon(group1Icon));
+ QVERIFY(metaTarget->hasCustomIcon(group2Icon));
+ QVERIFY(metaTarget->hasCustomIcon(entry1IconOld));
+ QVERIFY(metaTarget->hasCustomIcon(entry1IconNew));
QCOMPARE(metaTarget->customIcon(group1Icon).pixel(0, 0), qRgb(1, 2, 3));
QCOMPARE(metaTarget->customIcon(group2Icon).pixel(0, 0), qRgb(4, 5, 6));
@@ -1208,3 +1208,114 @@ void TestGroup::testUsernamesRecursive()
QVERIFY(usernames.contains("Name2"));
QVERIFY(usernames.indexOf("Name2") < usernames.indexOf("Name1"));
}
+
+void TestGroup::testMove()
+{
+ Database database;
+ Group* root = database.rootGroup();
+ QVERIFY(root);
+
+ Entry* entry0 = new Entry();
+ QVERIFY(entry0);
+ entry0->setGroup(root);
+ Entry* entry1 = new Entry();
+ QVERIFY(entry1);
+ entry1->setGroup(root);
+ Entry* entry2 = new Entry();
+ QVERIFY(entry2);
+ entry2->setGroup(root);
+ Entry* entry3 = new Entry();
+ QVERIFY(entry3);
+ entry3->setGroup(root);
+ // default order, straight
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry1);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryDown(entry0);
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryDown(entry0);
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryDown(entry0);
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry3);
+ QCOMPARE(root->entries().at(3), entry0);
+
+ // no effect
+ root->moveEntryDown(entry0);
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry3);
+ QCOMPARE(root->entries().at(3), entry0);
+
+ root->moveEntryUp(entry0);
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryUp(entry0);
+ QCOMPARE(root->entries().at(0), entry1);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryUp(entry0);
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry1);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ // no effect
+ root->moveEntryUp(entry0);
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry1);
+ QCOMPARE(root->entries().at(2), entry2);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryUp(entry2);
+ QCOMPARE(root->entries().at(0), entry0);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry1);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryDown(entry0);
+ QCOMPARE(root->entries().at(0), entry2);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry1);
+ QCOMPARE(root->entries().at(3), entry3);
+
+ root->moveEntryUp(entry3);
+ QCOMPARE(root->entries().at(0), entry2);
+ QCOMPARE(root->entries().at(1), entry0);
+ QCOMPARE(root->entries().at(2), entry3);
+ QCOMPARE(root->entries().at(3), entry1);
+
+ root->moveEntryUp(entry3);
+ QCOMPARE(root->entries().at(0), entry2);
+ QCOMPARE(root->entries().at(1), entry3);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry1);
+
+ root->moveEntryDown(entry2);
+ QCOMPARE(root->entries().at(0), entry3);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry0);
+ QCOMPARE(root->entries().at(3), entry1);
+
+ root->moveEntryUp(entry1);
+ QCOMPARE(root->entries().at(0), entry3);
+ QCOMPARE(root->entries().at(1), entry2);
+ QCOMPARE(root->entries().at(2), entry1);
+ QCOMPARE(root->entries().at(3), entry0);
+}
diff --git a/tests/TestGroup.h b/tests/TestGroup.h
index dbe5d6f4d..9de86fd2c 100644
--- a/tests/TestGroup.h
+++ b/tests/TestGroup.h
@@ -49,6 +49,7 @@ private slots:
void testHierarchy();
void testApplyGroupIconRecursively();
void testUsernamesRecursive();
+ void testMove();
};
#endif // KEEPASSX_TESTGROUP_H
diff --git a/tests/TestKeePass1Reader.cpp b/tests/TestKeePass1Reader.cpp
index 078447acb..cf0aa414e 100644
--- a/tests/TestKeePass1Reader.cpp
+++ b/tests/TestKeePass1Reader.cpp
@@ -106,13 +106,13 @@ void TestKeePass1Reader::testBasic()
void TestKeePass1Reader::testMasterKey()
{
- QVERIFY(m_db->hasKey());
+ QVERIFY(m_db->isInitialized());
QCOMPARE(m_db->kdf()->rounds(), 713);
}
void TestKeePass1Reader::testCustomIcons()
{
- QCOMPARE(m_db->metadata()->customIcons().size(), 1);
+ QCOMPARE(m_db->metadata()->customIconsOrder().size(), 1);
Entry* entry = m_db->rootGroup()->children().at(1)->entries().at(0);
diff --git a/tests/TestKeePass2Format.cpp b/tests/TestKeePass2Format.cpp
index ce4f63fed..b0217c942 100644
--- a/tests/TestKeePass2Format.cpp
+++ b/tests/TestKeePass2Format.cpp
@@ -86,10 +86,10 @@ void TestKeePass2Format::testXmlMetadata()
QCOMPARE(m_xmlDb->metadata()->defaultUserName(), QString("DEFUSERNAME"));
QCOMPARE(m_xmlDb->metadata()->defaultUserNameChanged(), MockClock::datetimeUtc(2010, 8, 8, 17, 27, 45));
QCOMPARE(m_xmlDb->metadata()->maintenanceHistoryDays(), 127);
- QCOMPARE(m_xmlDb->metadata()->color(), QColor(0xff, 0xef, 0x00));
- QCOMPARE(m_xmlDb->metadata()->masterKeyChanged(), MockClock::datetimeUtc(2012, 4, 5, 17, 9, 34));
- QCOMPARE(m_xmlDb->metadata()->masterKeyChangeRec(), 101);
- QCOMPARE(m_xmlDb->metadata()->masterKeyChangeForce(), -1);
+ QCOMPARE(m_xmlDb->metadata()->color(), QString("#FFEF00"));
+ QCOMPARE(m_xmlDb->metadata()->databaseKeyChanged(), MockClock::datetimeUtc(2012, 4, 5, 17, 9, 34));
+ QCOMPARE(m_xmlDb->metadata()->databaseKeyChangeRec(), 101);
+ QCOMPARE(m_xmlDb->metadata()->databaseKeyChangeForce(), -1);
QCOMPARE(m_xmlDb->metadata()->protectTitle(), false);
QCOMPARE(m_xmlDb->metadata()->protectUsername(), true);
QCOMPARE(m_xmlDb->metadata()->protectPassword(), false);
@@ -110,9 +110,9 @@ void TestKeePass2Format::testXmlMetadata()
void TestKeePass2Format::testXmlCustomIcons()
{
- QCOMPARE(m_xmlDb->metadata()->customIcons().size(), 1);
+ QCOMPARE(m_xmlDb->metadata()->customIconsOrder().size(), 1);
QUuid uuid = QUuid::fromRfc4122(QByteArray::fromBase64("++vyI+daLk6omox4a6kQGA=="));
- QVERIFY(m_xmlDb->metadata()->customIcons().contains(uuid));
+ QVERIFY(m_xmlDb->metadata()->hasCustomIcon(uuid));
QImage icon = m_xmlDb->metadata()->customIcon(uuid);
QCOMPARE(icon.width(), 16);
QCOMPARE(icon.height(), 16);
@@ -200,8 +200,8 @@ void TestKeePass2Format::testXmlEntry1()
QCOMPARE(entry->historyItems().size(), 2);
QCOMPARE(entry->iconNumber(), 0);
QCOMPARE(entry->iconUuid(), QUuid());
- QVERIFY(!entry->foregroundColor().isValid());
- QVERIFY(!entry->backgroundColor().isValid());
+ QVERIFY(entry->foregroundColor().isEmpty());
+ QVERIFY(entry->backgroundColor().isEmpty());
QCOMPARE(entry->overrideUrl(), QString(""));
QCOMPARE(entry->tags(), QString("a b c"));
@@ -262,8 +262,8 @@ void TestKeePass2Format::testXmlEntry2()
QCOMPARE(entry->iconNumber(), 0);
QCOMPARE(entry->iconUuid(), QUuid::fromRfc4122(QByteArray::fromBase64("++vyI+daLk6omox4a6kQGA==")));
// TODO: test entry->icon()
- QCOMPARE(entry->foregroundColor(), QColor(255, 0, 0));
- QCOMPARE(entry->backgroundColor(), QColor(255, 255, 0));
+ QCOMPARE(entry->foregroundColor(), QString("#FF0000"));
+ QCOMPARE(entry->backgroundColor(), QString("#FFFF00"));
QCOMPARE(entry->overrideUrl(), QString("http://override.net/"));
QCOMPARE(entry->tags(), QString(""));
diff --git a/tests/TestMerge.cpp b/tests/TestMerge.cpp
index 4f96d3e6d..7c9c3cc65 100644
--- a/tests/TestMerge.cpp
+++ b/tests/TestMerge.cpp
@@ -1117,14 +1117,14 @@ void TestMerge::testMergeCustomIcons()
dbSource->metadata()->addCustomIcon(customIconId, customIcon);
// Sanity check.
- QVERIFY(dbSource->metadata()->containsCustomIcon(customIconId));
+ QVERIFY(dbSource->metadata()->hasCustomIcon(customIconId));
m_clock->advanceSecond(1);
Merger merger(dbSource.data(), dbDestination.data());
merger.merge();
- QVERIFY(dbDestination->metadata()->containsCustomIcon(customIconId));
+ QVERIFY(dbDestination->metadata()->hasCustomIcon(customIconId));
}
/**
@@ -1143,16 +1143,16 @@ void TestMerge::testMergeDuplicateCustomIcons()
dbSource->metadata()->addCustomIcon(customIconId, customIcon);
dbDestination->metadata()->addCustomIcon(customIconId, customIcon);
// Sanity check.
- QVERIFY(dbSource->metadata()->containsCustomIcon(customIconId));
- QVERIFY(dbDestination->metadata()->containsCustomIcon(customIconId));
+ QVERIFY(dbSource->metadata()->hasCustomIcon(customIconId));
+ QVERIFY(dbDestination->metadata()->hasCustomIcon(customIconId));
m_clock->advanceSecond(1);
Merger merger(dbSource.data(), dbDestination.data());
merger.merge();
- QVERIFY(dbDestination->metadata()->containsCustomIcon(customIconId));
- QCOMPARE(dbDestination->metadata()->customIcons().count(), 1);
+ QVERIFY(dbDestination->metadata()->hasCustomIcon(customIconId));
+ QCOMPARE(dbDestination->metadata()->customIconsOrder().count(), 1);
}
void TestMerge::testMetadata()
diff --git a/tests/TestModified.cpp b/tests/TestModified.cpp
index 254db3796..dcaeca8ff 100644
--- a/tests/TestModified.cpp
+++ b/tests/TestModified.cpp
@@ -309,13 +309,13 @@ void TestModified::testEntrySets()
entry->setDefaultAutoTypeSequence(entry->defaultAutoTypeSequence());
QTRY_COMPARE(spyModified.count(), spyCount);
- entry->setForegroundColor(Qt::red);
+ entry->setForegroundColor(QString("#FF0000"));
++spyCount;
QTRY_COMPARE(spyModified.count(), spyCount);
entry->setForegroundColor(entry->foregroundColor());
QTRY_COMPARE(spyModified.count(), spyCount);
- entry->setBackgroundColor(Qt::red);
+ entry->setBackgroundColor(QString("#FF0000"));
++spyCount;
QTRY_COMPARE(spyModified.count(), spyCount);
entry->setBackgroundColor(entry->backgroundColor());
diff --git a/tests/TestOpVaultReader.cpp b/tests/TestOpVaultReader.cpp
index 15f30f2c9..94b5c35f0 100644
--- a/tests/TestOpVaultReader.cpp
+++ b/tests/TestOpVaultReader.cpp
@@ -24,6 +24,7 @@
#include "core/Tools.h"
#include "crypto/Crypto.h"
#include "format/OpVaultReader.h"
+#include "totp/totp.h"
#include <QJsonArray>
#include <QJsonDocument>
@@ -36,112 +37,30 @@
QTEST_GUILESS_MAIN(TestOpVaultReader)
-QPair<QString, QString>* split1PTextExportKV(QByteArray& line)
-{
- const auto eq = line.indexOf('=');
- if (-1 == eq) {
- qWarning() << "Bogus key=value pair: <<" << line << ">>";
- return nullptr;
- }
- auto k = QString::fromUtf8(line.mid(0, eq));
- const auto start = eq + 1;
- auto v = QString::fromUtf8(line.mid(start), (line.size() - 1) - start);
- return new QPair<QString, QString>(k, v);
-}
-
-QSharedPointer<QJsonArray> read1PasswordTextExport(QFile& f)
-{
- if (!f.open(QIODevice::ReadOnly)) {
- qCritical("Unable to open your text export file for reading");
- return {};
- }
-
- auto result = QSharedPointer<QJsonArray>::create();
- QJsonObject current;
-
- while (!f.atEnd()) {
- auto line = f.readLine(1024);
-
- if (line.size() == 1 and line[0] == '\n') {
- if (!current.isEmpty()) {
- result->append(current);
- }
- current = QJsonObject();
- continue;
- }
- const auto kv = split1PTextExportKV(line);
- if (kv == nullptr) {
- break;
- }
- QString k = kv->first;
-
- const auto multiLine1 = line.indexOf("=\"\"");
- const auto multiLine2 = line.indexOf("=\"");
- const auto isML1 = -1 != multiLine1;
- const auto isML2 = -1 != multiLine2;
- if (isML1 or isML2) {
- QStringList lines;
- const int skipEQ = isML1 ? (multiLine1 + 3) : (multiLine2 + 2);
- lines.append(QString::fromUtf8(line.mid(skipEQ)));
- while (!f.atEnd()) {
- line = f.readLine(1024);
- const auto endMarker = line.indexOf(isML1 ? "\"\"\n" : "\"\n");
- if (-1 != endMarker) {
- line[endMarker] = '\n';
- lines.append(QString::fromUtf8(line.mid(0, endMarker)));
- break;
- } else {
- lines.append(QString::fromUtf8(line));
- }
- }
- auto v = lines.join("");
- current[k] = v;
- } else {
- current[k] = kv->second;
- }
- delete kv;
- }
- if (!current.isEmpty()) {
- result->append(current);
- }
- f.close();
-
- return result;
-}
-
void TestOpVaultReader::initTestCase()
{
QVERIFY(Crypto::init());
- // https://cache.agilebits.com/security-kb/freddy-2013-12-04.tar.gz
- m_opVaultPath = QString("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, "/freddy-2013-12-04.opvault");
- m_opVaultTextExportPath = QString(m_opVaultPath).replace(".opvault", ".opvault.txt");
-
- m_password = "freddy";
-
- QFile testData(m_opVaultTextExportPath);
- auto data = read1PasswordTextExport(testData);
- QVERIFY(data);
- QCOMPARE(data->size(), 27);
-
- m_categoryMap.insert("001", "Login");
- m_categoryMap.insert("002", "Credit Card");
- m_categoryMap.insert("003", "Secure Note");
- m_categoryMap.insert("004", "Identity");
- m_categoryMap.insert("005", "Password");
- m_categoryMap.insert("099", "Tombstone");
- m_categoryMap.insert("100", "Software License");
- m_categoryMap.insert("101", "Bank Account");
- m_categoryMap.insert("102", "Database");
- m_categoryMap.insert("103", "Driver License");
- m_categoryMap.insert("104", "Outdoor License");
- m_categoryMap.insert("105", "Membership");
- m_categoryMap.insert("106", "Passport");
- m_categoryMap.insert("107", "Rewards");
- m_categoryMap.insert("108", "SSN");
- m_categoryMap.insert("109", "Router");
- m_categoryMap.insert("110", "Server");
- m_categoryMap.insert("111", "Email");
+ m_opVaultPath = QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/keepassxc.opvault"));
+
+ m_categories = QStringList({QStringLiteral("Login"),
+ QStringLiteral("Credit Card"),
+ QStringLiteral("Secure Note"),
+ QStringLiteral("Identity"),
+ QStringLiteral("Password"),
+ QStringLiteral("Tombstone"),
+ QStringLiteral("Software License"),
+ QStringLiteral("Bank Account"),
+ QStringLiteral("Database"),
+ QStringLiteral("Driver License"),
+ QStringLiteral("Outdoor License"),
+ QStringLiteral("Membership"),
+ QStringLiteral("Passport"),
+ QStringLiteral("Rewards"),
+ QStringLiteral("SSN"),
+ QStringLiteral("Router"),
+ QStringLiteral("Server"),
+ QStringLiteral("Email")});
}
void TestOpVaultReader::testReadIntoDatabase()
@@ -149,100 +68,69 @@ void TestOpVaultReader::testReadIntoDatabase()
QDir opVaultDir(m_opVaultPath);
OpVaultReader reader;
- QScopedPointer<Database> db(reader.readDatabase(opVaultDir, m_password));
- QVERIFY2(!reader.hasError(), qPrintable(reader.errorString()));
+ QScopedPointer<Database> db(reader.readDatabase(opVaultDir, "a"));
QVERIFY(db);
- QVERIFY(!db->children().isEmpty());
-
- Group* rootGroup = db->rootGroup();
- QVERIFY(rootGroup);
-
- QFile testDataFile(m_opVaultTextExportPath);
- auto testData = read1PasswordTextExport(testDataFile);
- QVERIFY(testData);
-
- QMap<QUuid, QJsonObject> objectsByUuid;
- QMap<QString, QList<QJsonObject>> objectsByCategory;
- for (QJsonArray::const_iterator it = testData->constBegin(); it != testData->constEnd(); ++it) {
- QJsonObject value = (*it).toObject();
- auto cat = value["category"].toString();
- QVERIFY2(m_categoryMap.contains(cat), qPrintable(QString("BOGUS, unmapped category \"%1\"").arg(cat)));
-
- auto catName = m_categoryMap[cat];
- if (!objectsByCategory.contains(catName)) {
- QList<QJsonObject> theList;
- objectsByCategory[catName] = theList;
- }
- objectsByCategory[catName].append(value);
-
- QUuid u = Tools::hexToUuid(value["uuid"].toString());
- objectsByUuid[u] = value;
- }
- QCOMPARE(objectsByUuid.size(), 27);
-
- for (QUuid u : objectsByUuid.keys()) {
- QJsonObject o = objectsByUuid[u];
- const auto e = db->rootGroup()->findEntryByUuid(u);
- QVERIFY2(e, qPrintable(QString("Expected to find UUID %1").arg(u.toString())));
-
- auto jsonTitle = o["title"].toString();
- QCOMPARE(jsonTitle, e->title());
- }
+ QVERIFY2(!reader.hasError(), qPrintable(reader.errorString()));
- for (QString& catName : m_categoryMap.values()) {
- const auto g = rootGroup->findChildByName(catName);
- QVERIFY2(g, qPrintable(QString("Expected to find Group(%1)").arg(catName)));
- for (QJsonObject testEntry : objectsByCategory[catName]) {
- auto uuidStr = testEntry["uuid"].toString();
- auto jsonTitle = testEntry["title"].toString();
-
- QUuid u = Tools::hexToUuid(uuidStr);
- const auto entry = g->findEntryByUuid(u);
- QVERIFY2(entry, qPrintable(QString("Expected to find Group(%1).entry(%2)").arg(catName).arg(uuidStr)));
- QCOMPARE(entry->title(), jsonTitle);
+ // Confirm specific entry details are valid
+ auto entry = db->rootGroup()->findEntryByPath("/Login/KeePassXC");
+ QVERIFY(entry);
+ QCOMPARE(entry->title(), QStringLiteral("KeePassXC"));
+ QCOMPARE(entry->username(), QStringLiteral("keepassxc"));
+ QCOMPARE(entry->password(), QStringLiteral("opvault"));
+ QCOMPARE(entry->url(), QStringLiteral("https://www.keepassxc.org"));
+ QCOMPARE(entry->notes(), QStringLiteral("KeePassXC Account"));
+ // Check extra URL's
+ QCOMPARE(entry->attribute("KP2A_URL_1"), QStringLiteral("https://snapshot.keepassxc.org"));
+ // Check TOTP
+ QVERIFY(entry->hasTotp());
+ // Check attachments
+ auto attachments = entry->attachments();
+ QCOMPARE(attachments->keys().count(), 1);
+ QCOMPARE(*attachments->values().begin(), QByteArray("attachment"));
+
+ // Confirm expired entries
+ entry = db->rootGroup()->findEntryByPath("/Login/Expired Login");
+ QVERIFY(entry->isExpired());
+
+ // Confirm advanced attributes
+ entry = db->rootGroup()->findEntryByPath("/Credit Card/My Credit Card");
+ QVERIFY(entry);
+ auto attr = entry->attributes();
+ QCOMPARE(attr->value("cardholder"), QStringLiteral("Team KeePassXC"));
+ QVERIFY(!attr->value("validFrom").isEmpty());
+ QCOMPARE(attr->value("details_pin"), QStringLiteral("1234"));
+ QVERIFY(attr->isProtected("details_pin"));
+
+ // Confirm address fields
+ entry = db->rootGroup()->findEntryByPath("/Identity/Team KeePassXC");
+ QVERIFY(entry);
+ attr = entry->attributes();
+ QCOMPARE(attr->value("address_street"), QStringLiteral("123 Password Lane"));
+
+ // Confirm complex passwords
+ entry = db->rootGroup()->findEntryByPath("/Password/Complex Password");
+ QVERIFY(entry);
+ QCOMPARE(entry->password(), QStringLiteral("HfgcHjEL}iO}^3N!?*cv~O:9GJZQ0>oC"));
+ QVERIFY(entry->hasTotp());
+ auto totpSettings = entry->totpSettings();
+ QCOMPARE(totpSettings->digits, static_cast<unsigned int>(8));
+ QCOMPARE(totpSettings->step, static_cast<unsigned int>(45));
+
+ // Confirm trashed entries are sent to the recycle bin
+ auto recycleBin = db->metadata()->recycleBin();
+ QVERIFY(recycleBin);
+ QVERIFY(!recycleBin->isEmpty());
+ QVERIFY(recycleBin->findEntryByPath("Trashed Password"));
+
+ // Confirm created groups align with category names
+ for (const auto group : db->rootGroup()->children()) {
+ if (group == recycleBin) {
+ continue;
}
+ QVERIFY2(m_categories.contains(group->name()),
+ qPrintable(QStringLiteral("Invalid group name: %1").arg(group->name())));
+ // Confirm each group is not empty
+ QVERIFY2(!group->isEmpty(), qPrintable(QStringLiteral("Group %1 is empty").arg(group->name())));
}
}
-
-void TestOpVaultReader::testKeyDerivation()
-{
- OpVaultReader reader;
- QDir opVaultDir(m_opVaultPath);
-
- // yes, the reader checks this too, but in our case best to fail early
- QVERIFY(opVaultDir.exists());
- QVERIFY(opVaultDir.isReadable());
-
- QDir defDir = QDir(opVaultDir);
- defDir.cd("default");
- QFile profileJs(defDir.absoluteFilePath("profile.js"));
- QVERIFY(profileJs.exists());
-
- auto profileObj = reader.readAndAssertJsonFile(profileJs, "var profile=", ";");
-
- QByteArray salt = QByteArray::fromBase64(profileObj["salt"].toString().toUtf8());
- unsigned long iter = profileObj["iterations"].toInt();
- const auto derived = reader.deriveKeysFromPassPhrase(salt, m_password, iter);
- QVERIFY(derived);
- QVERIFY(!derived->error);
-
- QByteArray encHex = derived->encrypt.toHex();
- QByteArray hmacHex = derived->hmac.toHex();
- delete derived;
-
- QCOMPARE(QString::fromUtf8(encHex),
- QStringLiteral("63b075de858949559d4faa9d348bf10bdaa0e567ad943d7803f2291c9342aaaa"));
- QCOMPARE(QString::fromUtf8(hmacHex),
- QStringLiteral("ff3ab426ce55bf097b252b3f2df1c4ba4312a6960180844d7a625bc0ab40c35e"));
-}
-
-void TestOpVaultReader::testBandEntry1()
-{
- OpVaultReader reader;
- QByteArray json(R"({"hello": "world"})");
- QJsonDocument doc = QJsonDocument::fromJson(json);
- QJsonObject data;
- QByteArray entryKey;
- QByteArray entryHmacKey;
- QVERIFY(!reader.decryptBandEntry(doc.object(), data, entryKey, entryHmacKey));
-}
diff --git a/tests/TestOpVaultReader.h b/tests/TestOpVaultReader.h
index 54d096e43..feb904c6d 100644
--- a/tests/TestOpVaultReader.h
+++ b/tests/TestOpVaultReader.h
@@ -28,8 +28,6 @@ class TestOpVaultReader : public QObject
private slots:
void initTestCase();
void testReadIntoDatabase();
- void testBandEntry1();
- void testKeyDerivation();
private:
// absolute path to the .opvault directory
@@ -41,8 +39,7 @@ private:
* except for multi-line strings.
*/
QString m_opVaultTextExportPath;
- QString m_password;
- QMap<QString, QString> m_categoryMap;
+ QStringList m_categories;
};
#endif /* TEST_OPVAULT_READER_H_ */
diff --git a/tests/TestPasswordGenerator.cpp b/tests/TestPasswordGenerator.cpp
index b043a7cd0..89e2eb91c 100644
--- a/tests/TestPasswordGenerator.cpp
+++ b/tests/TestPasswordGenerator.cpp
@@ -29,6 +29,19 @@ void TestPasswordGenerator::initTestCase()
QVERIFY(Crypto::init());
}
+void TestPasswordGenerator::testAdditionalChars()
+{
+ PasswordGenerator generator;
+ QVERIFY(!generator.isValid());
+ generator.setAdditionalChars("aql");
+ generator.setLength(2000);
+ QVERIFY(generator.isValid());
+ QString password = generator.generatePassword();
+ QCOMPARE(password.size(), 2000);
+ QRegularExpression regex(R"(^[aql]+$)");
+ QVERIFY(regex.match(password).hasMatch());
+}
+
void TestPasswordGenerator::testCharClasses()
{
PasswordGenerator generator;
diff --git a/tests/TestPasswordGenerator.h b/tests/TestPasswordGenerator.h
index 56c4d65a1..454d16e06 100644
--- a/tests/TestPasswordGenerator.h
+++ b/tests/TestPasswordGenerator.h
@@ -26,6 +26,7 @@ class TestPasswordGenerator : public QObject
private slots:
void initTestCase();
+ void testAdditionalChars();
void testCharClasses();
void testLookalikeExclusion();
};
diff --git a/tests/TestPasswordHealth.cpp b/tests/TestPasswordHealth.cpp
new file mode 100644
index 000000000..238b78b92
--- /dev/null
+++ b/tests/TestPasswordHealth.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "TestPasswordHealth.h"
+#include "TestGlobal.h"
+
+#include "core/PasswordHealth.h"
+
+QTEST_GUILESS_MAIN(TestPasswordHealth)
+
+void TestPasswordHealth::initTestCase()
+{
+}
+
+void TestPasswordHealth::testNoDb()
+{
+ const auto empty = PasswordHealth("");
+ QCOMPARE(empty.score(), 0);
+ QCOMPARE(empty.entropy(), 0.0);
+ QCOMPARE(empty.quality(), PasswordHealth::Quality::Bad);
+ QVERIFY(!empty.scoreReason().isEmpty());
+ QVERIFY(!empty.scoreDetails().isEmpty());
+
+ const auto poor = PasswordHealth("secret");
+ QCOMPARE(poor.score(), 6);
+ QCOMPARE(int(poor.entropy()), 6);
+ QCOMPARE(poor.quality(), PasswordHealth::Quality::Poor);
+ QVERIFY(!poor.scoreReason().isEmpty());
+ QVERIFY(!poor.scoreDetails().isEmpty());
+
+ const auto weak = PasswordHealth("Yohb2ChR4");
+ QCOMPARE(weak.score(), 47);
+ QCOMPARE(int(weak.entropy()), 47);
+ QCOMPARE(weak.quality(), PasswordHealth::Quality::Weak);
+ QVERIFY(!weak.scoreReason().isEmpty());
+ QVERIFY(!weak.scoreDetails().isEmpty());
+
+ const auto good = PasswordHealth("MIhIN9UKrgtPL2hp");
+ QCOMPARE(good.score(), 78);
+ QCOMPARE(int(good.entropy()), 78);
+ QCOMPARE(good.quality(), PasswordHealth::Quality::Good);
+ QVERIFY(good.scoreReason().isEmpty());
+ QVERIFY(good.scoreDetails().isEmpty());
+
+ const auto excellent = PasswordHealth("prompter-ream-oversleep-step-extortion-quarrel-reflected-prefix");
+ QCOMPARE(excellent.score(), 164);
+ QCOMPARE(int(excellent.entropy()), 164);
+ QCOMPARE(excellent.quality(), PasswordHealth::Quality::Excellent);
+ QVERIFY(excellent.scoreReason().isEmpty());
+ QVERIFY(excellent.scoreDetails().isEmpty());
+}
diff --git a/tests/TestPasswordHealth.h b/tests/TestPasswordHealth.h
new file mode 100644
index 000000000..2d887a7de
--- /dev/null
+++ b/tests/TestPasswordHealth.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSX_TESTPASSWORDHEALTH_H
+#define KEEPASSX_TESTPASSWORDHEALTH_H
+
+#include <QObject>
+
+class TestPasswordHealth : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void testNoDb();
+};
+
+#endif // KEEPASSX_TESTPASSWORDHEALTH_H
diff --git a/tests/TestSSHAgent.cpp b/tests/TestSSHAgent.cpp
new file mode 100644
index 000000000..a3137eb31
--- /dev/null
+++ b/tests/TestSSHAgent.cpp
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "TestSSHAgent.h"
+#include "TestGlobal.h"
+#include "core/Config.h"
+#include "crypto/Crypto.h"
+#include "sshagent/SSHAgent.h"
+
+QTEST_GUILESS_MAIN(TestSSHAgent)
+
+void TestSSHAgent::initTestCase()
+{
+ QVERIFY(Crypto::init());
+ Config::createTempFileInstance();
+
+ m_agentSocketFile.setAutoRemove(true);
+ QVERIFY(m_agentSocketFile.open());
+
+ m_agentSocketFileName = m_agentSocketFile.fileName();
+ QVERIFY(!m_agentSocketFileName.isEmpty());
+
+ // let ssh-agent re-create it as a socket
+ QVERIFY(m_agentSocketFile.remove());
+
+ QStringList arguments;
+ arguments << "-D"
+ << "-a" << m_agentSocketFileName;
+
+ QElapsedTimer timer;
+ timer.start();
+
+ qDebug() << "ssh-agent starting with arguments" << arguments;
+ m_agentProcess.setProcessChannelMode(QProcess::ForwardedChannels);
+ m_agentProcess.start("ssh-agent", arguments);
+ m_agentProcess.closeWriteChannel();
+
+ if (!m_agentProcess.waitForStarted()) {
+ QSKIP("ssh-agent could not be started");
+ }
+
+ qDebug() << "ssh-agent started as pid" << m_agentProcess.pid();
+
+ // we need to wait for the agent to open the socket before going into real tests
+ QFileInfo socketFileInfo(m_agentSocketFileName);
+ while (!timer.hasExpired(2000)) {
+ if (socketFileInfo.exists()) {
+ break;
+ }
+ QTest::qWait(10);
+ }
+
+ QVERIFY(socketFileInfo.exists());
+ qDebug() << "ssh-agent initialized in" << timer.elapsed() << "ms";
+
+ // initialize test key
+ const QString keyString = QString("-----BEGIN OPENSSH PRIVATE KEY-----\n"
+ "b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\n"
+ "QyNTUxOQAAACDdlO5F2kF2WzedrBAHBi9wBHeISzXZ0IuIqrp0EzeazAAAAKjgCfj94An4\n"
+ "/QAAAAtzc2gtZWQyNTUxOQAAACDdlO5F2kF2WzedrBAHBi9wBHeISzXZ0IuIqrp0EzeazA\n"
+ "AAAEBe1iilZFho8ZGAliiSj5URvFtGrgvmnEKdiLZow5hOR92U7kXaQXZbN52sEAcGL3AE\n"
+ "d4hLNdnQi4iqunQTN5rMAAAAH29wZW5zc2hrZXktdGVzdC1wYXJzZUBrZWVwYXNzeGMBAg\n"
+ "MEBQY=\n"
+ "-----END OPENSSH PRIVATE KEY-----\n");
+
+ const QByteArray keyData = keyString.toLatin1();
+
+ QVERIFY(m_key.parsePKCS1PEM(keyData));
+}
+
+void TestSSHAgent::testConfiguration()
+{
+ SSHAgent agent;
+
+ // default config must not enable agent
+ QVERIFY(!agent.isEnabled());
+
+ agent.setEnabled(true);
+ QVERIFY(agent.isEnabled());
+
+ // this will either be an empty string or the real ssh-agent socket path, doesn't matter
+ QString defaultSocketPath = agent.socketPath(false);
+
+ // overridden path must match default before setting an override
+ QCOMPARE(agent.socketPath(true), defaultSocketPath);
+
+ agent.setAuthSockOverride(m_agentSocketFileName);
+
+ // overridden path must match what we set
+ QCOMPARE(agent.socketPath(true), m_agentSocketFileName);
+
+ // non-overridden path must match the default
+ QCOMPARE(agent.socketPath(false), defaultSocketPath);
+}
+
+void TestSSHAgent::testIdentity()
+{
+ SSHAgent agent;
+ agent.setEnabled(true);
+ agent.setAuthSockOverride(m_agentSocketFileName);
+
+ QVERIFY(agent.isAgentRunning());
+
+ KeeAgentSettings settings;
+ bool keyInAgent;
+
+ // test adding a key works
+ QVERIFY(agent.addIdentity(m_key, settings, m_uuid));
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && keyInAgent);
+
+ // test non-conflicting key ownership doesn't throw an error
+ QVERIFY(agent.addIdentity(m_key, settings, m_uuid));
+
+ // test conflicting key ownership throws an error
+ QUuid secondUuid("{11111111-1111-1111-1111-111111111111}");
+ QVERIFY(!agent.addIdentity(m_key, settings, secondUuid));
+
+ // test removing a key works
+ QVERIFY(agent.removeIdentity(m_key));
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && !keyInAgent);
+}
+
+void TestSSHAgent::testRemoveOnClose()
+{
+ SSHAgent agent;
+ agent.setEnabled(true);
+ agent.setAuthSockOverride(m_agentSocketFileName);
+
+ QVERIFY(agent.isAgentRunning());
+
+ KeeAgentSettings settings;
+ bool keyInAgent;
+
+ settings.setRemoveAtDatabaseClose(true);
+ QVERIFY(agent.addIdentity(m_key, settings, m_uuid));
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && keyInAgent);
+ agent.setEnabled(false);
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && !keyInAgent);
+}
+
+void TestSSHAgent::testLifetimeConstraint()
+{
+ SSHAgent agent;
+ agent.setEnabled(true);
+ agent.setAuthSockOverride(m_agentSocketFileName);
+
+ QVERIFY(agent.isAgentRunning());
+
+ KeeAgentSettings settings;
+ bool keyInAgent;
+
+ settings.setUseLifetimeConstraintWhenAdding(true);
+ settings.setLifetimeConstraintDuration(2); // two seconds
+
+ // identity should be in agent immediately after adding
+ QVERIFY(agent.addIdentity(m_key, settings, m_uuid));
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && keyInAgent);
+
+ QElapsedTimer timer;
+ timer.start();
+
+ // wait for the identity to time out
+ while (!timer.hasExpired(5000)) {
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent));
+
+ if (!keyInAgent) {
+ break;
+ }
+
+ QTest::qWait(100);
+ }
+
+ QVERIFY(!keyInAgent);
+}
+
+void TestSSHAgent::testConfirmConstraint()
+{
+ SSHAgent agent;
+ agent.setEnabled(true);
+ agent.setAuthSockOverride(m_agentSocketFileName);
+
+ QVERIFY(agent.isAgentRunning());
+
+ KeeAgentSettings settings;
+ bool keyInAgent;
+
+ settings.setUseConfirmConstraintWhenAdding(true);
+
+ QVERIFY(agent.addIdentity(m_key, settings, m_uuid));
+
+ // we can't test confirmation itself is working but we can test the agent accepts the key
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && keyInAgent);
+
+ QVERIFY(agent.removeIdentity(m_key));
+ QVERIFY(agent.checkIdentity(m_key, keyInAgent) && !keyInAgent);
+}
+
+void TestSSHAgent::cleanupTestCase()
+{
+ if (m_agentProcess.state() != QProcess::NotRunning) {
+ qDebug() << "Killing ssh-agent pid" << m_agentProcess.pid();
+ m_agentProcess.terminate();
+ m_agentProcess.waitForFinished();
+ }
+
+ m_agentSocketFile.remove();
+}
diff --git a/tests/TestSSHAgent.h b/tests/TestSSHAgent.h
new file mode 100644
index 000000000..13e8076e7
--- /dev/null
+++ b/tests/TestSSHAgent.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2020 KeePassXC Team <team@keepassxc.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TESTSSHAGENT_H
+#define TESTSSHAGENT_H
+
+#include "crypto/ssh/OpenSSHKey.h"
+#include <QObject>
+#include <QProcess>
+#include <QTemporaryFile>
+
+class TestSSHAgent : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void testConfiguration();
+ void testIdentity();
+ void testRemoveOnClose();
+ void testLifetimeConstraint();
+ void testConfirmConstraint();
+ void cleanupTestCase();
+
+private:
+ QTemporaryFile m_agentSocketFile;
+ QString m_agentSocketFileName;
+ QProcess m_agentProcess;
+ OpenSSHKey m_key;
+ QUuid m_uuid;
+};
+
+#endif // TESTSSHAGENT_H
diff --git a/tests/TestSymmetricCipher.cpp b/tests/TestSymmetricCipher.cpp
index 752fc09df..bc872a510 100644
--- a/tests/TestSymmetricCipher.cpp
+++ b/tests/TestSymmetricCipher.cpp
@@ -279,7 +279,6 @@ void TestSymmetricCipher::testTwofish256CbcEncryption()
QByteArray::fromHex("6F725C5950133F82EF021A94CADC8508")};
SymmetricCipher cipher(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Encrypt);
- bool ok;
for (int i = 0; i < keys.size(); ++i) {
QVERIFY(cipher.init(keys[i], ivs[i]));
@@ -287,16 +286,19 @@ void TestSymmetricCipher::testTwofish256CbcEncryption()
QByteArray ctPrev = ivs[i];
QByteArray ctCur;
QCOMPARE(cipher.blockSize(), 16);
+ bool ok = false;
for (int j = 0; j < 5000; ++j) {
ctCur = cipher.process(ptNext, &ok);
- if (!ok)
+ if (!ok) {
break;
+ }
ptNext = ctPrev;
ctPrev = ctCur;
ctCur = cipher.process(ptNext, &ok);
- if (!ok)
+ if (!ok) {
break;
+ }
ptNext = ctPrev;
ctPrev = ctCur;
}
@@ -333,22 +335,24 @@ void TestSymmetricCipher::testTwofish256CbcDecryption()
QByteArray::fromHex("4C81F5BDC1081170FF96F50B1F76A566")};
SymmetricCipher cipher(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt);
- bool ok;
for (int i = 0; i < keys.size(); ++i) {
cipher.init(keys[i], ivs[i]);
QByteArray ctNext = cipherTexts[i];
QByteArray ptCur;
QCOMPARE(cipher.blockSize(), 16);
+ bool ok = false;
for (int j = 0; j < 5000; ++j) {
ptCur = cipher.process(ctNext, &ok);
- if (!ok)
+ if (!ok) {
break;
+ }
ctNext = ptCur;
ptCur = cipher.process(ctNext, &ok);
- if (!ok)
+ if (!ok) {
break;
+ }
ctNext = ptCur;
}
diff --git a/tests/TestTools.cpp b/tests/TestTools.cpp
index 100eb6306..4809a8bc9 100644
--- a/tests/TestTools.cpp
+++ b/tests/TestTools.cpp
@@ -64,3 +64,24 @@ void TestTools::testIsBase64()
QVERIFY(not Tools::isBase64(QByteArray("abc_")));
QVERIFY(not Tools::isBase64(QByteArray("123")));
}
+
+void TestTools::testEnvSubstitute()
+{
+ QProcessEnvironment environment;
+
+#if defined(Q_OS_WIN)
+ environment.insert("HOMEDRIVE", "C:");
+ environment.insert("HOMEPATH", "\\Users\\User");
+
+ QCOMPARE(Tools::envSubstitute("%HOMEDRIVE%%HOMEPATH%\\.ssh\\id_rsa", environment),
+ QString("C:\\Users\\User\\.ssh\\id_rsa"));
+ QCOMPARE(Tools::envSubstitute("start%EMPTY%%EMPTY%%%HOMEDRIVE%%end", environment), QString("start%C:%end"));
+#else
+ environment.insert("HOME", QString("/home/user"));
+ environment.insert("USER", QString("user"));
+
+ QCOMPARE(Tools::envSubstitute("~/.ssh/id_rsa", environment), QString("/home/user/.ssh/id_rsa"));
+ QCOMPARE(Tools::envSubstitute("$HOME/.ssh/id_rsa", environment), QString("/home/user/.ssh/id_rsa"));
+ QCOMPARE(Tools::envSubstitute("start/$EMPTY$$EMPTY$HOME/end", environment), QString("start/$/home/user/end"));
+#endif
+}
diff --git a/tests/TestTools.h b/tests/TestTools.h
index 56d354eca..dd646fcc4 100644
--- a/tests/TestTools.h
+++ b/tests/TestTools.h
@@ -27,6 +27,7 @@ private slots:
void testHumanReadableFileSize();
void testIsHex();
void testIsBase64();
+ void testEnvSubstitute();
};
#endif // KEEPASSX_TESTTOOLS_H
diff --git a/tests/TestYkChallengeResponseKey.cpp b/tests/TestYkChallengeResponseKey.cpp
index 0d6f9b5c3..05161544b 100644
--- a/tests/TestYkChallengeResponseKey.cpp
+++ b/tests/TestYkChallengeResponseKey.cpp
@@ -19,80 +19,74 @@
#include "TestYkChallengeResponseKey.h"
#include "TestGlobal.h"
+
+#include "core/Tools.h"
#include "crypto/Crypto.h"
+#include "keys/YkChallengeResponseKey.h"
-#include <QtConcurrentRun>
+#include <QScopedPointer>
+#include <QSignalSpy>
-QTEST_GUILESS_MAIN(TestYubiKeyChalResp)
+QTEST_GUILESS_MAIN(TestYubiKeyChallengeResponse)
-void TestYubiKeyChalResp::initTestCase()
+void TestYubiKeyChallengeResponse::initTestCase()
{
// crypto subsystem needs to be initialized for YubiKey testing
QVERIFY(Crypto::init());
-}
-void TestYubiKeyChalResp::init()
-{
- if (!YubiKey::instance()->init()) {
- QSKIP("Unable to connect to YubiKey");
+ if (!YubiKey::instance()->isInitialized()) {
+ QSKIP("Unable to initialize YubiKey interface.");
}
}
-void TestYubiKeyChalResp::detectDevices()
+void TestYubiKeyChallengeResponse::testDetectDevices()
{
- connect(YubiKey::instance(), SIGNAL(detected(int, bool)), SLOT(ykDetected(int, bool)), Qt::QueuedConnection);
- QtConcurrent::run(YubiKey::instance(), &YubiKey::detect);
-
- // need to wait for the hardware (that's hopefully plugged in)...
- QTest::qWait(2000);
- QVERIFY2(m_detected > 0, "Is a YubiKey attached?");
+ YubiKey::instance()->findValidKeys();
+
+ // Wait for the hardware to respond
+ QSignalSpy detected(YubiKey::instance(), SIGNAL(detectComplete(bool)));
+ QTRY_VERIFY_WITH_TIMEOUT(detected.count() > 0, 2000);
+
+ // Look at the information retrieved from the key(s)
+ for (auto key : YubiKey::instance()->foundKeys()) {
+ auto displayName = YubiKey::instance()->getDisplayName(key);
+ QVERIFY(displayName.contains("Challenge Response - Slot") || displayName.contains("Configured Slot -"));
+ QVERIFY(displayName.contains(QString::number(key.first)));
+ QVERIFY(displayName.contains(QString::number(key.second)));
+ }
}
-void TestYubiKeyChalResp::getSerial()
+/**
+ * Secret key for the YubiKey slot used by the unit test is
+ * 1c e3 0f d7 8d 20 dc fa 40 b5 0c 18 77 9a fb 0f 02 28 8d b7
+ * This secret can be on either slot but must be passive.
+ */
+void TestYubiKeyChallengeResponse::testKeyChallenge()
{
- unsigned int serial;
- QVERIFY(YubiKey::instance()->getSerial(serial));
-}
+ auto keys = YubiKey::instance()->foundKeys();
+ if (keys.isEmpty()) {
+ QSKIP("No YubiKey devices were detected.");
+ }
-void TestYubiKeyChalResp::keyGetName()
-{
- QVERIFY(m_key);
- QVERIFY(m_key->getName().length() > 0);
-}
+ // Find a key that is configured in passive mode
+ bool wouldBlock = false;
+ YubiKeySlot pKey(0, 0);
+ for (auto key : keys) {
+ if (YubiKey::instance()->testChallenge(key, &wouldBlock) && !wouldBlock) {
+ pKey = key;
+ break;
+ }
+ Tools::wait(100);
+ }
-void TestYubiKeyChalResp::keyIssueChallenge()
-{
- QVERIFY(m_key);
- if (m_key->isBlocking()) {
+ if (pKey.first == 0) {
/* Testing active mode in unit tests is unreasonable */
- QSKIP("YubiKey not in passive mode", SkipSingle);
+ QSKIP("No YubiKey contains a slot in passive mode.");
}
- QByteArray ba("UnitTest");
- QVERIFY(m_key->challenge(ba));
-
- /* TODO Determine if it's reasonable to provide a fixed secret key for
- * verification testing. Obviously simple technically, but annoying
- * if devs need to re-program their yubikeys or have a spare test key
- * for unit tests to pass.
- *
- * Might be worth it for integrity verification though.
- */
-}
-
-void TestYubiKeyChalResp::ykDetected(int slot, bool blocking)
-{
- Q_UNUSED(blocking);
+ QScopedPointer<YkChallengeResponseKey> key(new YkChallengeResponseKey(pKey));
- if (slot > 0)
- m_detected++;
-
- /* Key used for later testing */
- if (!m_key)
- m_key.reset(new YkChallengeResponseKey(slot, blocking));
-}
-
-void TestYubiKeyChalResp::deinit()
-{
- QVERIFY(YubiKey::instance()->deinit());
+ QByteArray ba("UnitTest");
+ QVERIFY(key->challenge(ba));
+ QCOMPARE(key->rawKey().size(), 20);
}
diff --git a/tests/TestYkChallengeResponseKey.h b/tests/TestYkChallengeResponseKey.h
index 81253cc90..63fcaf6ee 100644
--- a/tests/TestYkChallengeResponseKey.h
+++ b/tests/TestYkChallengeResponseKey.h
@@ -20,36 +20,16 @@
#define KEEPASSX_TESTYUBIKEYCHALRESP_H
#include <QObject>
-#include <QScopedPointer>
-#include "keys/YkChallengeResponseKey.h"
-
-class TestYubiKeyChalResp : public QObject
+class TestYubiKeyChallengeResponse : public QObject
{
Q_OBJECT
private slots:
void initTestCase();
- void init();
-
- /* Order is important!
- * Need to init and detectDevices() before proceeding
- */
- void detectDevices();
-
- void getSerial();
- void keyGetName();
- void keyIssueChallenge();
-
- void deinit();
-
- /* Callback for detectDevices() */
- void ykDetected(int slot, bool blocking);
-
-private:
- int m_detected = 0;
- QScopedPointer<YkChallengeResponseKey> m_key;
+ void testDetectDevices();
+ void testKeyChallenge();
};
#endif // KEEPASSX_TESTYUBIKEYCHALRESP_H
diff --git a/tests/data/NewDatabase.kdbx b/tests/data/NewDatabase.kdbx
index 3008cce7c..a6d6adb17 100644
--- a/tests/data/NewDatabase.kdbx
+++ b/tests/data/NewDatabase.kdbx
Binary files differ
diff --git a/tests/data/NewDatabaseBrowser.kdbx b/tests/data/NewDatabaseBrowser.kdbx
index 97599fccf..fb327943c 100644
--- a/tests/data/NewDatabaseBrowser.kdbx
+++ b/tests/data/NewDatabaseBrowser.kdbx
Binary files differ
diff --git a/tests/data/OutdatedConfig.ini b/tests/data/OutdatedConfig.ini
new file mode 100644
index 000000000..edc033057
--- /dev/null
+++ b/tests/data/OutdatedConfig.ini
@@ -0,0 +1,8 @@
+[General]
+IgnoreGroupExpansion=false
+
+[security]
+hidepassworddetails=false
+passwordemptynodots=false
+passwordscleartext=true
+passwordsrepeat=true
diff --git a/tests/data/dbus/interfaces/org.freedesktop.Secret.Collection.xml b/tests/data/dbus/interfaces/org.freedesktop.Secret.Collection.xml
new file mode 100644
index 000000000..3b5dd64fd
--- /dev/null
+++ b/tests/data/dbus/interfaces/org.freedesktop.Secret.Collection.xml
@@ -0,0 +1,33 @@
+<interface name="org.freedesktop.Secret.Collection">
+ <property name="Items" type="ao" access="read"/>
+ <property name="Label" type="s" access="readwrite"/>
+ <property name="Locked" type="b" access="read"/>
+ <property name="Created" type="t" access="read"/>
+ <property name="Modified" type="t" access="read"/>
+ <signal name="ItemCreated">
+ <arg name="item" type="o" direction="out"/>
+ </signal>
+ <signal name="ItemDeleted">
+ <arg name="item" type="o" direction="out"/>
+ </signal>
+ <signal name="ItemChanged">
+ <arg name="item" type="o" direction="out"/>
+ </signal>
+ <method name="Delete">
+ <arg type="o" direction="out"/>
+ </method>
+ <method name="SearchItems">
+ <arg type="ao" direction="out"/>
+ <arg name="attributes" type="a{ss}" direction="in"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="StringStringMap"/>
+ </method>
+ <method name="CreateItem">
+ <arg type="o" direction="out"/>
+ <arg name="properties" type="a{sv}" direction="in"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
+ <arg name="secret" type="(oayays)" direction="in"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="FdoSecrets::SecretStruct"/>
+ <arg name="replace" type="b" direction="in"/>
+ <arg name="prompt" type="o" direction="out"/>
+ </method>
+</interface>
diff --git a/tests/data/dbus/interfaces/org.freedesktop.Secret.Item.xml b/tests/data/dbus/interfaces/org.freedesktop.Secret.Item.xml
new file mode 100644
index 000000000..d9c39a2e9
--- /dev/null
+++ b/tests/data/dbus/interfaces/org.freedesktop.Secret.Item.xml
@@ -0,0 +1,21 @@
+<interface name="org.freedesktop.Secret.Item">
+ <property name="Locked" type="b" access="read"/>
+ <property name="Attributes" type="a{ss}" access="readwrite">
+ <annotation name="org.qtproject.QtDBus.QtTypeName" value="StringStringMap"/>
+ </property>
+ <property name="Label" type="s" access="readwrite"/>
+ <property name="Created" type="t" access="read"/>
+ <property name="Modified" type="t" access="read"/>
+ <method name="Delete">
+ <arg type="o" direction="out"/>
+ </method>
+ <method name="GetSecret">
+ <arg type="(oayays)" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="FdoSecrets::SecretStruct"/>
+ <arg name="session" type="o" direction="in"/>
+ </method>
+ <method name="SetSecret">
+ <arg name="secret" type="(oayays)" direction="in"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="FdoSecrets::SecretStruct"/>
+ </method>
+</interface>
diff --git a/tests/data/dbus/interfaces/org.freedesktop.Secret.Prompt.xml b/tests/data/dbus/interfaces/org.freedesktop.Secret.Prompt.xml
new file mode 100644
index 000000000..92aa8df84
--- /dev/null
+++ b/tests/data/dbus/interfaces/org.freedesktop.Secret.Prompt.xml
@@ -0,0 +1,11 @@
+<interface name="org.freedesktop.Secret.Prompt">
+ <signal name="Completed">
+ <arg name="dismissed" type="b" direction="out"/>
+ <arg name="result" type="v" direction="out"/>
+ </signal>
+ <method name="Prompt">
+ <arg name="windowId" type="s" direction="in"/>
+ </method>
+ <method name="Dismiss">
+ </method>
+</interface>
diff --git a/tests/data/dbus/interfaces/org.freedesktop.Secret.Service.xml b/tests/data/dbus/interfaces/org.freedesktop.Secret.Service.xml
new file mode 100644
index 000000000..40240bb43
--- /dev/null
+++ b/tests/data/dbus/interfaces/org.freedesktop.Secret.Service.xml
@@ -0,0 +1,55 @@
+<interface name="org.freedesktop.Secret.Service">
+ <property name="Collections" type="ao" access="read"/>
+ <signal name="CollectionCreated">
+ <arg name="collection" type="o" direction="out"/>
+ </signal>
+ <signal name="CollectionDeleted">
+ <arg name="collection" type="o" direction="out"/>
+ </signal>
+ <signal name="CollectionChanged">
+ <arg name="collection" type="o" direction="out"/>
+ </signal>
+ <method name="OpenSession">
+ <arg type="v" direction="out"/>
+ <arg name="algorithm" type="s" direction="in"/>
+ <arg name="input" type="v" direction="in"/>
+ <arg name="result" type="o" direction="out"/>
+ </method>
+ <method name="CreateCollection">
+ <arg type="o" direction="out"/>
+ <arg name="properties" type="a{sv}" direction="in"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
+ <arg name="alias" type="s" direction="in"/>
+ <arg name="prompt" type="o" direction="out"/>
+ </method>
+ <method name="SearchItems">
+ <arg type="ao" direction="out"/>
+ <arg name="attributes" type="a{ss}" direction="in"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="StringStringMap"/>
+ <arg name="locked" type="ao" direction="out"/>
+ </method>
+ <method name="Unlock">
+ <arg type="ao" direction="out"/>
+ <arg name="paths" type="ao" direction="in"/>
+ <arg name="prompt" type="o" direction="out"/>
+ </method>
+ <method name="Lock">
+ <arg type="ao" direction="out"/>
+ <arg name="paths" type="ao" direction="in"/>
+ <arg name="prompt" type="o" direction="out"/>
+ </method>
+ <method name="GetSecrets">
+ <arg type="a{o(oayays)}" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ObjectPathSecretMap"/>
+ <arg name="items" type="ao" direction="in"/>
+ <arg name="session" type="o" direction="in"/>
+ </method>
+ <method name="ReadAlias">
+ <arg type="o" direction="out"/>
+ <arg name="name" type="s" direction="in"/>
+ </method>
+ <method name="SetAlias">
+ <arg name="name" type="s" direction="in"/>
+ <arg name="collection" type="o" direction="in"/>
+ </method>
+</interface>
diff --git a/tests/data/dbus/interfaces/org.freedesktop.Secret.Session.xml b/tests/data/dbus/interfaces/org.freedesktop.Secret.Session.xml
new file mode 100644
index 000000000..7d358df7b
--- /dev/null
+++ b/tests/data/dbus/interfaces/org.freedesktop.Secret.Session.xml
@@ -0,0 +1,4 @@
+<interface name="org.freedesktop.Secret.Session">
+ <method name="Close">
+ </method>
+</interface>
diff --git a/tests/data/dbus/session.conf b/tests/data/dbus/session.conf
new file mode 100644
index 000000000..096da6d4c
--- /dev/null
+++ b/tests/data/dbus/session.conf
@@ -0,0 +1,39 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <type>session</type>
+ <keep_umask/>
+ <listen>unix:tmpdir=/tmp</listen>
+ <auth>EXTERNAL</auth>
+ <standard_session_servicedirs />
+ <policy context="default">
+ <allow send_destination="*" eavesdrop="true"/>
+ <allow eavesdrop="true"/>
+ <allow own="*"/>
+ </policy>
+ <include ignore_missing="yes">/etc/dbus-1/session.conf</include>
+ <includedir>session.d</includedir>
+ <includedir>/etc/dbus-1/session.d</includedir>
+ <include ignore_missing="yes">/etc/dbus-1/session-local.conf</include>
+ <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
+ <limit name="max_incoming_bytes">1000000000</limit>
+ <limit name="max_incoming_unix_fds">250000000</limit>
+ <limit name="max_outgoing_bytes">1000000000</limit>
+ <limit name="max_outgoing_unix_fds">250000000</limit>
+ <limit name="max_message_size">1000000000</limit>
+ <limit name="auth_timeout">240000</limit>
+ <limit name="pending_fd_timeout">150000</limit>
+ <limit name="max_completed_connections">100000</limit>
+ <limit name="max_incomplete_connections">10000</limit>
+ <limit name="max_connections_per_user">100000</limit>
+ <limit name="max_pending_service_starts">10000</limit>
+ <limit name="max_names_per_connection">50000</limit>
+ <limit name="max_match_rules_per_connection">50000</limit>
+ <limit name="max_replies_per_connection">50000</limit>
+ <!-- The above is copied from session bus conf.
+ Our only intent here is to set a low service_start_timeout,
+ such that ctest can exit sooner when dbus-run-session is used
+ to launch tests and some service fails to start.
+ -->
+ <limit name="service_start_timeout">500</limit>
+</busconfig>
diff --git a/tests/data/freddy-2013-12-04.opvault.txt b/tests/data/freddy-2013-12-04.opvault.txt
deleted file mode 100644
index d36a78f5a..000000000
--- a/tests/data/freddy-2013-12-04.opvault.txt
+++ /dev/null
@@ -1,427 +0,0 @@
-uuid=E0D293D29B10483F8DFDAC72ED0BE5C0
-title=Wendy's passport
-category=106
-ainfo=ZZ200000
-scope=Default
-autoSubmit=Default
-type=Passport
-issuing country=Canada
-number=ZZ200000
-full name=Wendy Appleseed
-sex=female
-nationality=Canada
-issuing authority=Home Office
-date of birth=359100000
-place of birth=Yellowknife, NT
-issued on=954828000
-expiry date=1585893600
-
-uuid=F2DB5DA3FCA64372A751E0E85C67A538
-title=A note with some attachments
-category=003
-ainfo=This note has two attachments.
-scope=Default
-autoSubmit=Default
-notesPlain=This note has two attachments.
-
-uuid=FF445AB1497241A28812363154E1A738
-title=Johnny Appleseed Society
-category=105
-ainfo=Wendy Appleseed
-scope=Default
-autoSubmit=Default
-website=http://www.urbana.edu/resources/community/johnny-appleseed/appleseed-society.html
-member name=Wendy Appleseed
-expiry date=2625
-member ID=123456
-password=B8HqCdCMAY8KxJqg
-
-uuid=2A632FDD32F5445E91EB5636C7580447
-title=Skype
-category=001
-ainfo=WendyAppleseed
-scope=Default
-autoSubmit=Default
-tags=Sample
-website=https://secure.skype.com/account/login?message=login_required
-username=WendyAppleseed
-password=dej3ur9unsh5ian1and5
-
-uuid=1C7D72EFA19A4EE98DB7A9661D2F5732
-title=Wendy's driver's license
-category=103
-ainfo=D6101-40706-60905
-scope=Default
-autoSubmit=Default
-notesPlain=Picture really doesn't look like Wendy
-full name=Wendy Appleseed
-address=5-150 Hollidge Blvd Suite 150
-date of birth=359100000
-sex=female
-height=175cm
-number=D6101-40706-60905
-license class=G2
-conditions / restrictions=J
-state=Ontario
-country=Canada
-expiry date=2515
-
-uuid=67979020CCA54120BAFA2742C3F23F2B
-title=Social Security
-category=108
-ainfo=Wendy Appleseed
-scope=Default
-autoSubmit=Default
-name=Wendy Appleseed
-number=555-55-1234
-
-uuid=372E1D51AA1D44CB9F17D8AA70ADA9A6
-title=example.com
-category=110
-ainfo=wappleseed
-scope=Default
-autoSubmit=Default
-notesPlain=I should attach an SSH key, but maybe later.
-URL=example.com
-username=wappleseed
-password=My4scQNoFw8JcvN
-section=Admin Console
-section=Hosting Provider
-name=Example Hosting provider
-website=http://services.example.com
-
-uuid=8445A23B5740455DA360FEA379C3CC90
-title=Tim Hortons
-category=107
-ainfo=Tim Hortens
-scope=Default
-autoSubmit=Default
-company name=Tim Hortens
-member name=Wendy Appleseed
-member ID=12123123
-PIN=Y7s8WaRGJBAz
-section=More Information
-
-uuid=A2D44483145F4B41A849FE5FEA4B504D
-title=Snipe Hunting License
-category=104
-ainfo=Wendy Appleseed
-scope=Default
-autoSubmit=Default
-notesPlain=""I went out and shot the maximum the game laws would allow.
-Two game wardens, seven hunters, and a cow.
-
-They took away my license, the worst punishment I ever endured.
-Turns out there was a reason,
-Cows were out of season,
-And one of the hunters wasn't insured.""
-full name=Wendy Appleseed
-expires=1672470000
-approved wildlife=North American Snipe
-maximum quota=Two game wardens, seven hunters, and a cow
-
-uuid=FD2EADB43C4F4FC7BEB35A1692DDFDEA
-title=Email Account
-category=111
-ainfo=wendy.appleseed@me.com
-scope=Default
-autoSubmit=Default
-type=imap
-username=wendy.appleseed@me.com
-server=imap.mail.me.com
-port number=993
-password=iINe4uig8suLny
-security=SSL
-auth​ method=password
-section=SMTP
-SMTP server=smtp.mail.me.com
-port number=587
-username=wendy.appleseed@me.com
-password=iINe4uig8suLny
-security=TLS
-auth​ method=password
-section=Contact Information
-
-uuid=EC0A40400ABB4B16926B7417E95C9669
-title=Bank of America
-category=001
-ainfo=WendyAppleseed
-scope=Default
-autoSubmit=Default
-tags=Sample, Personal
-website=https://www.bankofamerica.com/
-previousPassword1=speg5nu5di1mol4niev9
-username=WendyAppleseed
-password=reTDx8KHhW8eAc
-
-uuid=E482B70C038D4DD78A0940728FA737BF
-title=Chase VISA ***4356
-category=002
-ainfo=1234 *********** 4356
-scope=Default
-autoSubmit=Default
-tags=Sample
-notesPlain=Sample data, not a real credit card number.
-cardholder name=Wendy Appleseed
-type=visa
-number=1234 5678 9012 4356
-verification number=543
-expiry date=201905
-section=Contact Information
-issuing bank=Chase
-phone (toll free)=1-888-888-8888
-website=www.chase.com
-section=Additional Details
-PIN=000
-credit limit=$5,000.00
-cash withdrawal limit=$1,000.00
-interest rate=29.9%
-
-uuid=D1820AA8CB534AC6A4B5A2C0263FD3B2
-title=What is a Secure Note?
-category=003
-scope=Default
-autoSubmit=Default
-tags=Sample
-notesPlain="
-Secure Notes enable you to keep any information in freeform text format while keeping it safely encrypted along with the rest of your 1Password data.
-
-Just like the website passwords and credit card numbers you can store in 1Password, you (or someone else!) cannot get to your Secure Notes without entering your keychain’s Master Password.
-
-This provides encrypted storage for your stuff that doesn’t fit into other areas of 1Password.
-"
-
-uuid=D8F79F17D6384808848B213EB4946ECA
-title=The Unofficial Apple Weblog
-category=001
-ainfo=WendyAppleseed
-scope=Default
-autoSubmit=Default
-tags=Sample
-website=http://www.tuaw.com
-username=WendyAppleseed
-password=tiac1nut2jab1eiv2oc5
-
-uuid=F78CEC04078743B6975511A6FDDBED7E
-title=1Password
-category=100
-ainfo=3.0
-scope=Default
-autoSubmit=Default
-tags=Sample, Business
-notesPlain="This is a sample software license.
-
-1Password securely keeps track of online logins, generates strong passwords, enters personal and credit card information with one click, protects from fishing attacks, and more!
-"
-version=3.0
-license key=1PW3-0000-000000-0000
-section=Customer
-licensed to=Wendy Appleseed
-registered email=wendy@appleseed.com
-section=Publisher
-download page=http://agilebits.com/downloads
-publisher=AgileBits
-website=http://1password.com
-support email=support@agilebits.com
-section=Order
-
-uuid=F5F099B210F248348E22934DDC3338B2
-title=TextExpander
-category=100
-ainfo=1.3
-scope=Default
-autoSubmit=Default
-tags=Sample
-notesPlain="This is a sample software license.
-
-TextExpander saves you countless keystrokes with customized abbreviations for your frequently-used text strings and images."
-version=1.3
-license key=TEXTEXP001-1234-ABCD-5678-EFGH
-section=Customer
-licensed to=Wendy Appleseed
-registered email=wendy@appleseed.com
-section=Publisher
-download page=www.smileonmymac.com/TextExpander/download.html
-publisher=Smile On My Mac, LLC
-website=www.smileonmymac.com
-retail price=29.95
-support email=support@smileonmymac.com
-section=Order
-
-uuid=F3707FA58EA7480884BC6A662658E039
-title=Business
-category=004
-ainfo=Wendy Appleseed
-scope=Default
-autoSubmit=Default
-tags=Business, Sample
-section=Identification
-first name=Wendy
-last name=Appleseed
-sex=female
-birth date=361778400
-occupation=Customer Relations
-company=AgileBits
-department=Customer Care
-job title=Manager
-section=Address
-default phone=(555) 555-5678
-cell=(555) 555-1234
-business=(555) 555-5678
-section=Internet Details
-username=WendyAppleseed
-reminder question=What's your favorite application?
-reminder answer=1Password
-email=support@agilebits
-website=www.agilebits.com
-forum signature=1Password — Never forget your password again.
-
-uuid=F7883ADDE5944B349ABB5CBEC20F39BE
-title=MobileMe
-category=001
-ainfo=wendy.appleseed@me.com
-scope=Default
-autoSubmit=Default
-tags=Sample
-website=https://www.icloud.com/
-notesPlain=Sample MobileMe account.
-username=wendy.appleseed@me.com
-password=iINe4uig8suLny
-Member name=wendy.appleseed
-iDisk Storage=10GB
-
-uuid=4E36C011EE8348B1B24418218B04018C
-title=Company's FTP
-category=001
-ainfo=admin
-scope=Default
-autoSubmit=Default
-tags=Sample, Business
-website=ftp://ftp.dreamhost.com
-notesPlain=Sample FTP account.
-username=admin
-password=auj7r5?u61ww
-path=/home/product/secert
-section=Provider
-
-uuid=5ADFF73C09004C448D45565BC4750DE2
-title=Tumblr
-category=001
-ainfo=wendy@appleseed.com
-scope=Default
-autoSubmit=Default
-tags=Sample, Social
-website=http://www.tumblr.com/login
-email=wendy@appleseed.com
-password=vow6wem2wo
-
-uuid=72366D161D9E43D98E58EB801DAD1EF8
-title=Last.fm
-category=001
-ainfo=WendyAppleseed
-scope=Default
-autoSubmit=Default
-tags=Sample
-website=https://www.last.fm/login
-username=WendyAppleseed
-password=dowg1af5kam7oak9at
-
-uuid=D06307ADA44C4031BA2FF4B174DE79CB
-title=CapitalOne MasterCard ***3456
-category=002
-ainfo=1234 *********** 3456
-scope=Default
-autoSubmit=Default
-tags=Sample, Business
-notesPlain=Sample data, not a real credit card number.
-cardholder name=Wendy Appleseed
-type=mc
-number=1234 5678 9012 3456
-verification number=123
-expiry date=201411
-section=Contact Information
-issuing bank=CapitalOne
-phone (toll free)=1-888-888-8888
-website=capitalone.com
-section=Additional Details
-PIN=234
-credit limit=$8,000
-cash withdrawal limit=$2,000
-interest rate=19.8%
-
-uuid=27DCFA2810B24083A3ECC7CEABC7C0A9
-title=Orders
-category=102
-ainfo=10.0.1.50
-scope=Default
-autoSubmit=Default
-tags=Sample
-notesPlain=Sample database account.
-type=mysql
-server=10.0.1.50
-port=3066
-database=orders_production
-username=orders_app
-password=tgOhmpU9HgC5Hz
-
-uuid=358B7411EB8B45CD9CE592ED16F3E9DE
-title=YouTube
-category=001
-ainfo=wendy@appleseed.com
-scope=Default
-autoSubmit=Default
-tags=Sample, Social
-website=http://www.youtube.com/login?next=/index
-username=wendy@appleseed.com
-password=snaip5uc5keds7as5ocs
-
-uuid=468B1E24F93B413DAD57ABE6F1C01DF6
-title=Dropbox
-category=001
-ainfo=wendy@appleseed.com
-scope=Default
-autoSubmit=Default
-tags=Sample
-website=https://www.getdropbox.com/
-email=wendy@appleseed.com
-password=vet4juf4nim1ow6ay2ph
-
-uuid=0EDE2B13D7AC4E2C9105842682ACB187
-title=Personal
-category=004
-ainfo=Wendy Appleseed
-scope=Default
-autoSubmit=Default
-tags=Sample, Personal
-section=Identification
-first name=Wendy
-last name=Appleseed
-sex=female
-birth date=359100000
-occupation=Customer Relations
-company=AgileBits
-department=Customer Care
-job title=Manager
-section=Address
-default phone=(555) 555-4321
-home=(555) 555-4321
-cell=(555) 555-1234
-section=Internet Details
-username=WendyAppleseed
-reminder question=What's your favorite application?
-reminder answer=1Password
-email=wendy@appleseed.com
-skype=WendyAppleseed
-AOL/AIM=WendyAppleseed76
-
-uuid=13C8E12AC8E54B1F873BAB0824E521BC
-title=Hulu
-category=001
-ainfo=wendy@appleseed.com
-scope=Default
-autoSubmit=Default
-tags=Sample
-website=http://www.hulu.com/
-username=wendy@appleseed.com
-password=frirp7i1ob7wig4d
-
diff --git a/tests/data/freddy-2013-12-04.opvault/default/1C7D72EFA19A4EE98DB7A9661D2F5732_3B94A1F475014E27BFB00C99A42214DF.attachment b/tests/data/freddy-2013-12-04.opvault/default/1C7D72EFA19A4EE98DB7A9661D2F5732_3B94A1F475014E27BFB00C99A42214DF.attachment
deleted file mode 100644
index 04d6a3ded..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/1C7D72EFA19A4EE98DB7A9661D2F5732_3B94A1F475014E27BFB00C99A42214DF.attachment
+++ /dev/null
Binary files differ
diff --git a/tests/data/freddy-2013-12-04.opvault/default/2A632FDD32F5445E91EB5636C7580447_8FA293F2B001459D8F8F78C21E6BF9F6.attachment b/tests/data/freddy-2013-12-04.opvault/default/2A632FDD32F5445E91EB5636C7580447_8FA293F2B001459D8F8F78C21E6BF9F6.attachment
deleted file mode 100644
index c56f141b7..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/2A632FDD32F5445E91EB5636C7580447_8FA293F2B001459D8F8F78C21E6BF9F6.attachment
+++ /dev/null
Binary files differ
diff --git a/tests/data/freddy-2013-12-04.opvault/default/E0D293D29B10483F8DFDAC72ED0BE5C0_898CD4CD00164930A2E15B159CE65E8F.attachment b/tests/data/freddy-2013-12-04.opvault/default/E0D293D29B10483F8DFDAC72ED0BE5C0_898CD4CD00164930A2E15B159CE65E8F.attachment
deleted file mode 100644
index 77282dab1..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/E0D293D29B10483F8DFDAC72ED0BE5C0_898CD4CD00164930A2E15B159CE65E8F.attachment
+++ /dev/null
Binary files differ
diff --git a/tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_23F6167DC1FB457A8DE7033ACDCD06DB.attachment b/tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_23F6167DC1FB457A8DE7033ACDCD06DB.attachment
deleted file mode 100644
index a1c1dfd5a..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_23F6167DC1FB457A8DE7033ACDCD06DB.attachment
+++ /dev/null
Binary files differ
diff --git a/tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_AFBDA49A5F684179A78161E40CA2AAD3.attachment b/tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_AFBDA49A5F684179A78161E40CA2AAD3.attachment
deleted file mode 100644
index 78bcad110..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/F2DB5DA3FCA64372A751E0E85C67A538_AFBDA49A5F684179A78161E40CA2AAD3.attachment
+++ /dev/null
Binary files differ
diff --git a/tests/data/freddy-2013-12-04.opvault/default/FF445AB1497241A28812363154E1A738_16684B74F26145169EC03B950DC68E95.attachment b/tests/data/freddy-2013-12-04.opvault/default/FF445AB1497241A28812363154E1A738_16684B74F26145169EC03B950DC68E95.attachment
deleted file mode 100644
index badcd4235..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/FF445AB1497241A28812363154E1A738_16684B74F26145169EC03B950DC68E95.attachment
+++ /dev/null
Binary files differ
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_0.js b/tests/data/freddy-2013-12-04.opvault/default/band_0.js
deleted file mode 100644
index 4e62ab08d..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_0.js
+++ /dev/null
@@ -1 +0,0 @@
-ld({"0C4F27910A64488BB339AED63565D148":{"uuid":"0C4F27910A64488BB339AED63565D148","category":"099","o":"b3BkYXRhMDEIAAAAAAAAAMQDerODSnrtEVkZHp0tO5qokNWe+77F7yjsHcCvBEdxYL9DPSUuPV4FDv1F4E3VXWoY4BBYZrm8G3IUekJhL3E=","hmac":"SP8xH51\/qYBOoiCzKWDDmyNluCdPiP4bzOPR2+eTTh0=","updated":1386214150,"trashed":true,"k":"6MnmUT7fNchO0lIDNYGITOAO0cubw8Qsad1dEBZFCUSXrUOR7IkFUwddSA8QBJTH7P7iJytKB00KclFRNR\/zf+AC+VD6aCQiznj1zx8uKoxG9Wv1v4YsnH95NbC8UvRxCn+XA+6WRZII2kWN10IN9w==","d":"b3BkYXRhMDECAAAAAAAAAO\/uG7Zs+1OHwr82PByk3Scrlb7f1QGT0EThuhBdj50T3qyvt\/uoxBb8APNUDjTV81dTjBoNvLCpvuAEyQgdmlY=","created":1386214097,"tx":1386214431},"0EDE2B13D7AC4E2C9105842682ACB187":{"category":"004","k":"A4kIEzE7ypBL5lTeguPoFPlD21Uv5akEeosVZQ8u98BIBnMqScGmLJTlCoAgvfn+1YjgxQX3vZJTMDUcmt678UuBVMMehVg87Pys4hMFLNjwhhJaFGSRpSfWDlVB6Rb5PGrkkIDZBPkK4kFbYMN1tg==","updated":1325483949,"tx":1373753421,"d":"b3BkYXRhMDEYCAAAAAAAAOX\/h3yw\/qsvS8loinC\/IeaownXcDlKuIxDWIhQZJ+wZSmV43jY7n4iCxG6Fg8qIQm+l1Tu7M3oTOwsRREhbqqEsQHnJSts32+nxh5K9hgcCKYfKMbPB13pQlWamGUMX7tCLno8w+8XQnI8izoTE75klF8z+jF+LjGK3IhQ1wm4hCqWje0j9brjGId8KPrQoVIorzROtYfBKYjEMu5bvhCI62KWUbyBodAKoYdnHK7bSs01GvY\/tPyXPZ4qyQ7qrou5uDJNclYQ715Ajbm4sIDbfW0qtrYeSA6+uFT6ClxDccc9+RvW40vgaZekx8yEa6ytrZ744JlnKGdYQrecV8WDjIiVzgZrTV9GthzPzrUb8JUA\/naBufQNlQVISvnFQUXM+S+E8B+FR8OJDY0g0VNMkQ4BxeYyAlZB9395DcJfrzu7378PSy0egyNoWKM8PZH\/HHYhUlWMWMkP90r+iIIFnp9XpAXyetSUfIHV\/nRP0wBxvgBtcz7BBsjMwHa965K5KOQxZm9Nb9118IaUiXfG4jU65M1keJBa4fOUlka7QK8Q9cYHQZNY86PMrdYjDvG6YhL\/aNjQ+oWUpvtyZnFAdwe7+5Zw4TuAKXf2SiWcKzkGfbNLZxJJY95eVPfv9lSYrZay4LZKtD8WP\/X6G8w8+NlAMESiZkwhx+w33HgTzVIbLqvTFcIAgXbcCmNCfmIW+VlnvXtUZCjs9rI0KC3rXLE6OUBo3mJTy1+2iFHk3ed1gdlDWX0mWe4+CI\/4Q1pAxsXnqATgLM8dep6fySXKYXf44mj0t03jQXnm8t02FPK7lhPjjGddntqz5idk1jVFp\/wfDB4j+E9EvszWJyP14PYZRIyIOS67wWs0mKHeLdkoOeEGxFf\/h5IdDEOxm4xe\/+8ZfzTjPPrKX27XJlT\/XbVShvLbru\/ToP8qLqaBq\/7c6tmKhUvOLg0M5WX7oEEq4Rqk2qBaRmNSfd9ke\/AECrVzlqTRubVgfA95G7wAOERT6aa0wJZ7JxFj1ynQVgFrSTHyNSeW9n42TWGO\/\/6w\/hmDv5jJ\/IEJlc2eW0wPRBRCjWE\/cz384nVU0d0ixucYzLlsxyXn1GzseMa+u0WqyKHvJrXCj+6L1GKokp42yLDJVg6WO7EiS+sVcc\/WnTOdxfh8WMrexEfQS3jlL+d1IHt58c3kfjxhTX48Tlhj9Ih3dWW5xwK5JiVM+Lumk+IKhpEHpIu46YOQfbyK6ETqHNdKYiBOQByjCPq\/MftDPXKH8bAyOe5pMH89SYs8Y0TdSqIRsSyVWBKYkdcRp\/bpMB0CRJcSapkpQSMDOpioE6PkIuhGXNENT8EDBlM477yPxorYxHxLdzusOsxzzRBgc120ezJQALoWTgCy54LMYQlNj4Xajw00V8EnyVaKD7zfkhvqo6bTveR89mNQL213bGeOvEbOTDizNYgWpFGJb8WgD7Ji+Z6qd0vfBm17r0A2SNCrtHG8Fp1q+Qh0DR+94nLdN5R0Ann7LTgLbi2LhzQyr9KdBlLA73SRQFvaMsmPoopO46Bf21LbY3IeVjHDRa8253zs2oASHrTNFnki7j1byyVZQDRQwMoAXJnNZre+CzhCYdSA8pERPKihODRpXpq4NSSitWKMAKIqqoDYWzrZmBiTLFwF0SxmYGpkTn6AdMjexp1Xayx+7NIOTui6yaUmIf\/MEm7hfOfN0SHZOLYA3FMOa8mLCLU4qdnQTZlK\/v5QLcBTy2WB\/RZlbyX3nXb2ooE4kheMA6dtPI+OnBSIkbZ8nRzJx1eNfuOqpxS8H8M1oQ96I1g1LyX58VDjlHVcgrpVXcta4uXb4y9ZbWCiS5C3DEPlx9FAb3HwKgsvnArkNP8k0QIvX6w2xKAOv03bafVETG3LUh5OhQDKZkoRjR6sOcBstWLoyL8yJKj6YnoVNcLdHW3pvlbaKvETb\/Q5y1AE81XYADWWbMQo8AHg7lMpGyG98KuNr3WI9X1T7GyJAAaSXIYDepa\/l9icfqEUPyYyxxOUBjTjtdhSHFGCwoiu5rnGcA2Nq9v44ZGOGfy8tLzbzoMmZf3+qjmoSgmCRDTgCuWuSDixEfo65BNC9sRYPgf0JyYrnW9oBB\/\/g4lkzEv5B1V6leXQonJQ6vPKJbOWPDsZ1R8\/3\/dxPoNOjfp0J59ndoboOX5E52meVIQ99GqAAmLSWCNU76IZWsnGQHBmsaZqgHjE5E86D21rSVgOaKzN4ngvXd5fbaJn7zVvaQwh26uBT5vaTtZAc7UubBzj5FrnXC0j8Tha6nAQ4ZYkqhIQK\/FjWgpnF61D3v0TYwECNQU5xNOaSGaS4jMsrX77PnrNUnAq7Zc3ainZtZ1fK9A0UevqonpqkH3RDC1r5QcAU+aLTV4AyG50F16KMgv\/Hkib\/GoY67qO+3IJuYXPdhjHRgZajl3XC70d9Agw0uMEFhhvhaEEJ6hL6qKXDzQ\/CjddIiz2l2tb+7nnugCggc516CXoGQIkTEjS5vBeAqkhtcyBS3F\/W4toATCIZPPm8U1E7Q2tURWA9P+lKPoOvFxGLANTVh6BxiasOMKes8IH\/6E3umpV5ajzcZYFeoNDrUcYe0nXRbfOnhM9VyuIcoJnCfJHZLXJ1MUCdmht5sSy78SVHI8ngwOjukM60fHK4mqjHL6qqexVa0+7N\/iKNdF4m4\/Fpx5CKoy11nDEhAq15MrYk775hs98hRLX\/h+WPccbwxX3+iDVLiLrFoujVLbzKg1\/ZqP5NQmEuN3hi27rA6j6kyPOs5lxXqG6EgDBGVLyeFlacXK1tC1ELuW4\/HlVGC0GLACo7x1OfU3VK+y1efUrSTTzgZn4=","hmac":"NFYnSILBYIuaRNngAmgenlKVIzQjrNI58924O9wVtP0=","created":1325483949,"uuid":"0EDE2B13D7AC4E2C9105842682ACB187","o":"b3BkYXRhMDFSAAAAAAAAAFx\/NqIo8EXowE0JkyOXYU9TwZBTupG5WKRVaYrA\/nU6Jy2xC2eyZV0SGmRVS8yt0A0eRVEBXGww2UV928lrUYGpT62kMa54yPHQ6PJ\/SBw6BITIoZqX91ohdcm+vUDDwkoNx4Vm+0VMFkBHRnAtT+cavKUMMmjdWrQ+0rEoWIVtZF47tOOUhh6HdGiY43ihsA=="}}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_1.js b/tests/data/freddy-2013-12-04.opvault/default/band_1.js
deleted file mode 100644
index 2743389b6..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_1.js
+++ /dev/null
@@ -1,24 +0,0 @@
-ld({
- "13C8E12AC8E54B1F873BAB0824E521BC": {
- "category": "001",
- "created": 1325483949,
- "d": "b3BkYXRhMDF8AQAAAAAAAIj2+ycIIdHiuA8R2GDHcmD/kq9Bski/xVY/MzB5rKTOf2Ok7u9iGyq52/H02zob8xQAlMgVgCT3b6ZCkdNCiDM9G0Io+cOC1c9Z6KwY+AWjAf6N2gUdVthpHGSjSWHeQg2I+B9rZw8G+5hDWoKCNkz59sHLDVzb1utpTX/yqG//rBwdReGMcsMLdJ5i5z6rCNxDOzauJsPOmdND6Yl8qN8biW1Zi69j9yecKlGKbZGnkJ/BLGcyATw+kFTUjSIqpGQuJjRil25+iSyOQIRyaFZuI8LY0VzNwDXt630uVw4FCG/BlWDEFMxWD2MByKVFyMCXb/4jyL5EatoSfuUfcgUNjzcxMUDkZ5arCDy3nkycKUnnYEY/8mxw4TB8FmQNjtDcSuV+CxZXtEdnkQtxNh/j8DIFpxBqDcKmEkXDFkoBzz4JMttkJI+VUAH0rt6xFHEQBIrVMJiqc1oCLBpDCM2ttz5Bex687+zjo1PkqNC7rNKz5pc+2oT34i56z9BOSCUJNnPu3AbXqjTodWi/t9uQ8XbzozvLHgbz/YX4CwcjvNShZUywWScls8QwrCyHvQ==",
- "hmac": "rBcqgatstCubnHbtCS4hTZ3iyh6Jx8c1pxJCwXy2dAs=",
- "k": "Q/2/LDLfd1NAkd0nTzKgs3WlDvPtLU4iZ8RjpPCD4BCcuosWxud2r1vz07B7T2glcdW1Wm0eK1jGaJsSZ1mZARiUfkY8yyFjKHaw5K/S+TYHV2ypQaZwIH+qs9qpzRKgTIriMK6ZfWHOJAMPrB991A==",
- "o": "b3BkYXRhMDGLAAAAAAAAAPKPZ8R5CHeY7YrgLUdA5b3Ay63vr9yrKHxyHmBgeHCmSQVM5RwqwEVQrbuNDNqQxekF6gKL1cB/P63ZSMfjYVtRGomifY3WBNsjbf8UYffI5mb+yOaKB9U6m300fbkVQshrVWTSwibhZe0nl6V+OqqyMJ1lWDRSt5fnuYvsDBUlggQ5JyZTGTadGAwpi12LihW/hpSEqQSoKX8KTkHivnTP47TETjYqTdP8XBUBQqz9XXb5R2o3GcRrID642HAzgg==",
- "tx": 1373753421,
- "updated": 1325483949,
- "uuid": "13C8E12AC8E54B1F873BAB0824E521BC"
- },
- "1C7D72EFA19A4EE98DB7A9661D2F5732": {
- "category": "103",
- "created": 1370114995,
- "d": "b3BkYXRhMDEKAwAAAAAAAKRrSzqtu6qyKtAvRqceTqZtWt2ehX/OlzSgl8+vLzoU0FjWtb6pTvUZd+YexvO/1GwwaI28vEWHiaZoBsXMWjJf7gdJkW7vEZyXvuXnpb7aIy7teoyvZz8t3xwugKIZ6pkdqoY6af+qRpWpIZHeKMfOX/2RCuh2V9c4tpO1ZfVqHHDY68yL35SknbRxS4oLdGASa8WiENbLdl4uWZhgEqkQsB0HqOACRKilT8+/TFC5Nhf7zKKIZk3b6mSgGmhgTshUs0VQG/IyvjN3GVfI6Q9cZyEMItow2XVauVAsLMry8x1qALt+C5yTmly2eAIhzh5EHgEE8IHGyYO8qHV0S/rwdAWqUlljVQ3jzxwpPkaBq4RM8zLiJ0he5scOSV/qxSLvBy2OJ4lx9tpuiehKKI0/kRjTXgirsEA4O0lMBn/J3jNdAco4DygSD8OUzhA0IZEz5TWv1UCrMQ0QVc7ljlQLb8H5KAZ4xIue5Wd5FPi+7SVk6VBhJZFZBtssy23tklpmIxvlrt9axmSgLxEMUuTSo7Hecexh5+/1LVQeDtHjOXA6XrSqcFkr1t2Q94mXa+hVtLLPCnf8DYSgdUMevMgNqgKi/TWh64GqoPvxx+HnrBLH4WEIpBZhgIKRNuww9vkMaAYw+RtpPMcZzxenJ5htM8ep9WRfwYg+Mn6yCijYZgQseZFnz5EAqTzXx1CzP/vPK6IQlGmZy0kte8VLPbngSMaUoQFMnlQNTZhHwm85N+wdvDVZStas1oFUUtHLLSt2KCPMwVmuoiFevO6Zlstys3uy9ATLOXiRTP3MBEu5D1ahC2+Mvi0FDtf+YSi9UbbCBF/4/gNt3eSveNBz6q9LsBLTdCMVz/HVjQpn350irDKr8+D+6PLx/yisia0L4kNKUOIgRATpIGgODaBDjslZRjntAzC9eRT52hbbSyvAsTgNnsriBMXE4UimwwHe5RxPBOshuHrCnHjljqYVdgd3UrrTWMwQSorEom3i2kyryOEWrlZGCz/aL2D7T0Mw1SLxDJvfkVDBhX4wdSLQXXa6smgyRagvbxFzx9r3fp5zLJuwzc9aS1tKB2Pzvj34xTcTl9lzqzDtiMNkNQLYkHg=",
- "hmac": "/wRZl/I6nGCLlYVALC2sOHr7GTLXW8PViyX+S37Gnsc=",
- "k": "NaCkXC9d/ohnFWkalmyV/CfGxg1f9JqCLOdN96hnybygx4lPuV7d+XOhNkpUybQwtzCoKwGVPkp6IqOfa0s4aIjxbmHZ7JKX4YolqyU/IJRIJK+zVFXKdkH4jvSnf9WLPw5odKypNLAkWwmz0rGNuw==",
- "o": "b3BkYXRhMDFHAAAAAAAAAAz2opVfQ3X6CoxN8yqzudxCe4dcegs++FcJQKDDzGY6OsA/3yP3Duoj6lbDcAkFfZ5s7OGg7HqmiIh8q+MhMUWFjM20cstKN4ghssKJzaSJgYaA7vj3OQj7H0/Y+/frnfy8E1jxpVim3sdihUcw8TbzGHgLATwIsxdQCK+KqO/L",
- "tx": 1373755270,
- "updated": 1373755270,
- "uuid": "1C7D72EFA19A4EE98DB7A9661D2F5732"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_2.js b/tests/data/freddy-2013-12-04.opvault/default/band_2.js
deleted file mode 100644
index 5a27848ff..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_2.js
+++ /dev/null
@@ -1,24 +0,0 @@
-ld({
- "27DCFA2810B24083A3ECC7CEABC7C0A9": {
- "category": "102",
- "created": 1325483949,
- "d": "b3BkYXRhMDFDAgAAAAAAAEyAoreOe6YJDuid/4d+Iku6EpI5wiM21L7QyH4nQCdqsFff7G74sUOfg2959KS+c/m93Bzsq9cm4iczcQ031F0pI24q9u4Qdo7shN1lyglnMXdNq8SURd7pP80XACSeLvbMwV4AovNe2tQZwt04wIAXWenafWb3ooEg1Z+1///xsNu+LuNn1s1OVozao6Ko8CGmMkuNOEBbcSLJyWJoMubdqnTPZPZB/Hb6gYmJSuvEhgi5UlkJXQThT+zBU7OxjIyn3Se/Gbb8ULiW3SyHqkk+ND8eglFFowfg7DzTW1b/bodK6OoiYthSEMhS2YMOL2eCN7QMaWXRC006StHEbk6QsK2lVNY61aCj8aOxVDdxbJLVh2XWHrjyoXeUX5y5MZ6DMJP10KNYnhsB13GNmJoC6LgP9FkkhX3RmXY85B6xgP7pyuoc2qYJ8IhEtR8TUBclRd4OTtaW2ppP3rkGLpvAC34WvjgsXfJeGCLZl8s6hO0RfGvlL3ssFYfRk3YqazUX65gwgWZ+ahXcT5lPavGB43GSmKykNMKhpG7GGYc1rPCxef9PyhBhLXJdDyj7XOAA6EZuq2cP39+bitPfhbBO82vmXP8ozFYcCoRZfa/nuJzXZ0gsHIFlW+MmtfTQ2Ig1rBIcQVWssWuFgi8q0dCnJyotl1jvM70BwNP3bG54v3y7sglCN8rCQbk33ECGsAsaSDhQhYHN/JV86TGvYcF83WN3W6wyVfHaPlTGMttuQQFEUpJSyLHw7jipmTg1KgxhSqpTXDkAx8bS1960Ody1AOi6wQDk+XbHRR/lkF2FFd88JlD5V5+P4OVI1av9w8lGlbkZapT0px54tRzfCHg=",
- "hmac": "u2yFnVEILAki+YP5dmN/gbSflq8vyKd9Aaby+/R82BI=",
- "k": "2WbOqqNF5mqW9d7d/Npd7CpSTdEL8wwzUIHYpvJNsInJ1DuXkPnKxxWDiLVaVn/kMFo0ssD9U7+GPzp6gJ4kzxKw3OM5W6XfJdMiByDOwul6RZFAgAhH0oiv5JeYUsN7AJKkBWskZK35txYvHROFLA==",
- "o": "b3BkYXRhMDE/AAAAAAAAAFlrCvy386Pid7oc4h8DdsFwoeK+rW0c3dtT75fhdL5CItIh7DHMrh1FAnXEeQ2jNlnxNjJpif5Eg9YD4+gzdYTMp9shvndwSHCgjGwZxkeoV/5Rf6TEDZq519yfwz2Yz+qHfoAJwogUokFwjP9i110=",
- "tx": 1373753420,
- "updated": 1325483950,
- "uuid": "27DCFA2810B24083A3ECC7CEABC7C0A9"
- },
- "2A632FDD32F5445E91EB5636C7580447": {
- "category": "001",
- "created": 1325483950,
- "d": "b3BkYXRhMDFDAQAAAAAAAFAC8wz9EOSY6x0PZoJnNWbYplXUkyusprslpTLDCTQc0hPEhAZRUQU416rdA/SutvsnG9AUhSWSQe8CX0gJqwCUGQRmo4+krdA7vrR+CmWzQb/AP0JiTew2aRE4lc6rq1NaO9JbnPWa9YwAv2PddpK50sN1tQJn4VYJGesuYIiS6bdiaY1KQ1AdHilZe2VBDUIHfN9KVfWb3fJmCq2nwnABfBytNXENHvOhFg/nJDr1Z0abxc0amS6oTJ2aXhL8EQ/3diLB2qklh8+LMdxvLeF6QLlIlZuxPwQr372sGPrJqoz8uvKVToEYNtoY27W17xEsB+hIDARkuJBXfElaQ36F3peUuaGrAhUCRL2g2lDkLXuKUnfHtanONBOD6dayQs7RiDlBmrPc5/YNLTCwTrxdgNECiYiAhD/Mm2D6Si/umojN08UbFhltKP9YDjM6jgXdGDbYuQ2IKRwZKpHFVNtohORfQHYmud0HqqmMIWrwSyLwq8KpjpmMi8TftOusng==",
- "hmac": "MgjPy9MB80eoreKhbqI1tjwQ8EpU5W6PK2hPMcW60b8=",
- "k": "btfq8UDLgzCLQw+xNAAIc8cdzXZUxIz6PILHwGhbY3ude0yfPSSksiYGa7p2weiM2dHv30hgIoBYqTgZbzVz04WmJOskO9CBjPPrqRzEm7OcqGS9UlnHv4+E/aBk74s350oTi36u2w7aIEjqOY8R6Q==",
- "o": "b3BkYXRhMDHZAAAAAAAAAMvusYvnxIbWpwLZDSSorwy+jIlf0Og+FkkoIW5vtG+ASwB3oyLqlQHpsGFMhFjrqYcBr8lIz3aBUM559wAKzfLpY8cGjldTgRQaXwuYj+N2MhMgPC8OXAzn/oIEg2WF8tD2KXmbzBb7CwyW5wDJclx8XqGft/rQhKIjz1eZ5qqwK4OMbS8m5kSHp8AKivCFIiVX+7Y+QDUkqKuQyTVCHacKUpI47IEdNxWn/FxKNE1oxRKLv+biYaB4I9ugPvCr9UW/lpPZgnoVD407ZSe9GPBw75NL/tbyzK6s140qxXhscUKwesLuCoXhWyD/5DKHrtMlErWM8I8CGb92WQvVzrLyszr2Vfg1V6sdL9YmTkN6",
- "tx": 1373755400,
- "updated": 1373755400,
- "uuid": "2A632FDD32F5445E91EB5636C7580447"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_3.js b/tests/data/freddy-2013-12-04.opvault/default/band_3.js
deleted file mode 100644
index dcc4471f8..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_3.js
+++ /dev/null
@@ -1,25 +0,0 @@
-ld({
- "358B7411EB8B45CD9CE592ED16F3E9DE": {
- "category": "001",
- "created": 1325483950,
- "d": "b3BkYXRhMDEGAQAAAAAAAMxxfx9Ei8WUX9X10+6Kxgydhp1zbbdPIBJ/MLSii+gEhLcmDMUQA1AcTKEygw2nNqCrdJh98c2noGtV2qjsZnwiUCEhWMNCTpu0jeKXVBu36zZLwKb367D4cU20GDO8nMIXxlkFKwO/Ni9oAFGkl4ZSsSgTcmDqNtbTa+EXWTxBX5ZL3WawCtzYG3RmgVoU9hATk+kM5ZRJaR6s+mE+DFvVMW5U3g630EkGzf/gZnq3x2KHAuHt4PIWdSO+8lwCjbPKYbLoSS9FtqDkmLsiVUcOtW2uxwxKtBkJ0OUOLgkUCDCNG8sUKwtOtAs1+kO73m4DWAEOhe1994PNT8Qu48HkrmMh6KeG7buftl0vMf7Duq1JzAQ37zmPZ9cJlqpQRJ1H7oj6fVKPhfPFHxSKWcXUHJ4MwDc1KAxphi8gRzbt",
- "folder": "379A3A7E5D5A47A6AA3A69C4D1E57D1B",
- "hmac": "/FLC0nyA/eYKQ6vIRDDMScZLrJLTFExu4CQ/A2R3G6A=",
- "k": "AGZoorj389dIbQQKUEgPR3gPuh0T7N3RNwbY5gBtD50yrLByRtc9moNTgeHeayynwiz52vspjCF9214k3CXUJOVRHcZnWFTb12xXomrfkTBR0cd/wLsoUZufzoG0vCUlYDrI5CaFBY4a0vgkdaGBpQ==",
- "o": "b3BkYXRhMDG2AAAAAAAAAAUcSSE9Pr1ma4sGgZPQzjSCCDwKleyuTm34b0i1k1OSX7WJeqRo4B1ToIfoxSxgFhZ4wGvzkQvBS7/E3IZXND+b3iKiGYDWBElKz1wZiraRhjEaSs1turD7p35T91asK05uqQlVehHZuEGXgm87aQIMoUvgkAND0Q4jYd8aGMechyQURQ5vQdKaP4iqlYGaFqEOh1nRTfZUsyV6yuFJLAHLc6fb+eE7Hum5iwS9fS1JE4KZdgZmETY+0JvIhMEp+vsZIYdVlTTaWJxvU+imEee/V2cx9sn++G2nnuM9obrGaklaj5W1ysu4BGEKnYw9dw==",
- "tx": 1373753420,
- "updated": 1325483950,
- "uuid": "358B7411EB8B45CD9CE592ED16F3E9DE"
- },
- "372E1D51AA1D44CB9F17D8AA70ADA9A6": {
- "category": "110",
- "created": 1370116532,
- "d": "b3BkYXRhMDGFAwAAAAAAAJIAigy3ZztWl46Kx16K7KgQOG6mQpq9dv0LWtLF7vbFaK4wZU9bq9kv4FFt088kLAjAH2ToJMyF0QiUiQDxix56mahLDjee22iUbvVaza/QSK8SfHFEpyR1Ecg2MRsXvn2DrwUPNsIrJJ2X6kdZLN5duXZGuhqLDITxx7eBOF+J5UWyjIBGDJNs4q9kd/B+W30YBtolRhzaHNonaNAEwEKOYxBjOnEE1oO3TwVRYqq3IT/fqHpj2yVfTMKa8WtLy2g4rGGe+8NzkiXPMND2cYRo+8jwsCBY1Zxvqw0149k/Ly6cUam0nAlq7NuDfpoT9J5rCC1UdFNKjE88Cfoarxcl+Kr3ZbYFQA3POhVsgFusQX1YyKZdxZWlfyPWb/SvkiD1vQmM5DhOs5XLONnXDTKr1xbWL+zlJxruYSWRxM5qD9oexnv1U06FFOUVDGpFg9fzbWmbkS9KBSGsUIyeqmmNFMa+5WgJ2Q4olZXUE81WTsPi2FerncvHnGd95n5m5BW85icZwIH+0pPUUlYFljhruBVXa5+D/GMX1DAzpBHRaEmgDYMJrhsLgaArXJiDw9drHKP0gzqVM4Ma0TX9G1Cr/mMEW2DaVtGNVywiTNSMMoqazb7hxTgITiTttShLv9nBUiw94vDKhcigD05lVXAsbXPqnZUwwGz4yCkIkhB3dH6u/9UBDqtB5hXFz/3taMPu3dr2G61Aqe3EU40ihz5D7Bp147SoBcuCyPeiOGzdfGa5zuGwC/IWg2Ii8nJgfhBAD2Va8hsutTI7Yc4yU4Ufla4cX6d0NH/bU6ajZIb2oFw3ie5fzyk7pInlWUhR41z6CISwPRmC9SseTKQzZ3FsMqKZ5KcBNlYAu0v9IFawC+kjKrMwKl3W6NKUkAR8AgM4HCyskjx6cbs52Jac5J3UIaUwj3zjoV0dH+6fOEuu44Xr3sk9VBJ6zUHiSV8OgNV1XEFlrqal+XfP60Rr5RaeztFWT7y0q+CFoS3ZKzNItudi0y1zY0ZnNsUbll2RCYlHULXE3Idxy/gsQJ29Aj39DTfbxvqGB9u6PUxewfvHnLkNXp7cjl3wE4IsaVHCNsL/ZBNgqwcaVVos9Wx1BtIWWhkOnmt2nrRIFz9vVdry8nEW6G+/IIFe+1e34oQmBSkGD+4OCGxGq1/Yctu3yG4QlumKa7SDIATG7q0iX0IMfFE9ws2RMBa7YawjMkRItFw2gn4Egzz8IPyvh328JssIW9oo2K/O0if5+ITWKvHvDDbi3M3FjJKMxDGPvAr2GA==",
- "hmac": "ebtQCFBh6f8fdxLuO/3B3K8qoQrH2U96t+5yFqrEc+w=",
- "k": "3Yy1faUq8AlFc/zDAcePMDmbqw/Y6vAs4bjjW5Y7enTU/ww9XDh7HEpVFiffEI1ETzuBOF2mnj4pq5/Y2dOiIwFS0tUqLwTSrIwHx2bnIohKygGz/52SpsiAeo+AB5D7UEVCaQG+RENvlUcD99cZvw==",
- "o": "b3BkYXRhMDEzAAAAAAAAACY1JR1jdIYnvKtyFND55QYVRufOfs+Ple73caqc7u6VWTX77qZlqmrp+ihfaQQIm0AWFLvXWZHsp/08THTxBVgx0GwQ3iXJnGfvkhmeKiJYy3Lmb07alTphswv73ZZq4mlkpVNimYnpjbg+4S37v+k=",
- "tx": 1373753421,
- "updated": 1370116687,
- "uuid": "372E1D51AA1D44CB9F17D8AA70ADA9A6"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_4.js b/tests/data/freddy-2013-12-04.opvault/default/band_4.js
deleted file mode 100644
index 99171a084..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_4.js
+++ /dev/null
@@ -1,26 +0,0 @@
-ld({
- "468B1E24F93B413DAD57ABE6F1C01DF6": {
- "category": "001",
- "created": 1325483950,
- "d": "b3BkYXRhMDFcAQAAAAAAAGlGNJ9in9DhzbvCPbVZnE5f5STx/5WJ7lB3irIT0npLHKxXvYi+bcYQK4kYbJbksYHsVS5mudX500yH5G155wpmlWfFpC5P+bHrZf0Ex6jykiOkpFOdOA7K9CIv66+z4613nyZujcslvAgKjIYB9zNbfep2kZwiW6ymkOvLiVrL31H+On6kDnF9K1cm/eoX75FJaVOVIZWHnTeyjbQ6BPxOTjTviDCFo9cKqlI5I7UzoeAXatgeyLhtZmwie2YAKRbZhzddo86sUnbG22Fb7PXxHpRQZC+rINqhyT1tM5a5dF1zpG3b56+d9APmaYm3bLtNvSV+z6/ueuwi+WQ5nDYXG5WzrkeDbidNkZQY01XU/YkNZt2rlZ+e49tDEvxA4Sr/0rFFh7j2+zSVYE4GJNiMMKXdHcnzyH+Rldf1zb3OJN2Pgtooklw2d1Omj1zmJAQu71FI1r7bGGxFR1/P910nnIpAHyD8nLO50srqkv1efJo46Biz7cp7/H5ZDMcKgfsBCsIEJCVLHd4Oz6nU3kU=",
- "folder": "C8CE328220DF4157961787FBA30DAB96",
- "hmac": "acLAZabMMQAHmZgNZ1nzTGzV3sBD974BHboOQr/EkBc=",
- "k": "i/YaJr4KrTaO4/herbFX6rYcGmzFnBLyPSuyFhlMxLPcFP+c0a6x++BZ/DYQ8qPubQOa4HjHigcQFawcqkpUmAnP4lbeAPxXGjRcGp5TEORRp2WWzMItfL5f9IepUgjx8rlInWJEwSoBvz9uY2pjKA==",
- "o": "b3BkYXRhMDGcAAAAAAAAADx6jShnR7SI/Qj/CJyyL6LSrCrFfvW52sSsdvg/fKG36swaSi62yrCrmXzKp03/bSlRSyNY5YsRzPU5weHdBk+LE/klsqnKyI/Pp/HHOFlZzr+HQoSA+PIK49HfFxRJNM7bFQQ3FQD6OXYmlY02hgdtfEFM+rXU4UrE2Zstv3lHMXLtzbNq4XY12qvoxjtDspQyMCeRmudOtzktiI0zzCs+tKUbd7vWPvwehx+/BpHmAmVkQ1RqFBsHmXWo3LRtEHBRrAsE1Vk0F6dh4+lUZsI=",
- "tx": 1373753420,
- "updated": 1325483950,
- "uuid": "468B1E24F93B413DAD57ABE6F1C01DF6"
- },
- "4E36C011EE8348B1B24418218B04018C": {
- "category": "001",
- "created": 1325483950,
- "d": "b3BkYXRhMDFcAQAAAAAAADP3hpn5gvc0E6c/jeTCZ3+WYfg5i0bvAV6/aL6Mj//jGn9Tn8pioTKNAEwqPqW4QyRDbBeNWasvnQc0W28JO0zVNBUGP3nJkboX7Wk0tNc6rOC1C916yhwxNbQtdXMzT9CFdanEnRxaoVEkOk6iz421A9qMyvDsx6d5PUJx46Q3dmIfvTvlmuaVvq8f0rkwjric5gINViNv9GzcmL8wOdBHuiB23uvoZZ5zsGo2IzfR/6xaVFipav45j0Dvgj0jY3dluqf68TdTfM4TyRHcgCIvd0dn5QmZIxB1PjRbH/9oECMKWcEWBCxISX8mpCVVqva44HErSF68ooPdelgLQkzMbv4Rf7seLnckyvfHqPagY+ENSixRcmMlh/eWtddkqj7uMSkPKJ3pVrymG8Oypw8o7AwEMP293S1fRLyt0kcq8srHcehEs3gVpnQR3pIYfvzxXv9YcxMeUmCgjCvy/B1VKSvoCRvMv3E+9d+djN595WiUKQ+dajfNFO5/cDYNtfeNzQopzuzGoKX3bMQUrm0=",
- "folder": "617F428170E1455D9503EC75AA103859",
- "hmac": "n/iVpXSy31QWaWlMvvurm9bWez9Xy4xJRZLklYbMIKo=",
- "k": "E/icM7PfmTWXDfzNZ5qg9I8UFbhBl/PeE8lEAXbQWtaNA0ZcxHlpS/FA8g2orTpkHgdtWcGEhTYWLBacYJBKZojvFbBLg+5LQW6G4gXaqo1Axb8NWrH8s0e0a0S7r4smTZeOse4aBFnRPom2npSd+g==",
- "o": "b3BkYXRhMDGMAAAAAAAAAOoU41poJnZBcj5J5rn8sA13uFYnvtvJsopeKlAgSByFPUXLoNDlieO3Z4WdQ1rJWc3+SgUybS6wbgXejydTAUxRIqEReKoVnN3PdLGRKix0LffTCNRwPHy8emssJSIz01QYG6b10eRQ/97tTrSyvUOY2LP6Ja1dm+TpT0AeTUpTIKtRrScbWBd67uPB2gnaBOVvf749JkG5/fukkIm6NM0oxUWfOEhFuneppHRgiYx03xxyOFLo0hkfhdI8pXeFMg==",
- "tx": 1373753421,
- "updated": 1325483951,
- "uuid": "4E36C011EE8348B1B24418218B04018C"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_5.js b/tests/data/freddy-2013-12-04.opvault/default/band_5.js
deleted file mode 100644
index ee33c83cb..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_5.js
+++ /dev/null
@@ -1,14 +0,0 @@
-ld({
- "5ADFF73C09004C448D45565BC4750DE2": {
- "category": "001",
- "created": 1325483951,
- "d": "b3BkYXRhMDFTAQAAAAAAAA9fJBca6be+oz0ye3FsSVyJCY0AnQXWfJgYQgYThr4c7eiW5POIskdjdle535X+cfFdriq6OUxNv9VIbUn0QUI1jP+V75VDoa7pDIL+zpR22VfXsR6RY5S5JINpEbZ+smIrMFphM9+ToD/Xli8zxmcqfywSekbLMkITwpFfyv31ZlB0I2WZCABQ5H/P7+UIRfK+jnwPc5VkUpQW+Bf81OfTNKa8N2OH0XIUzQEKcAG6ZpBohM+V8RdVIR+7Zg77uskQU28n4gIdJi0jsoFyarM1NeCoysX9cpGJATcNNI8XKKU0LxC18yBK0ST6INXXQ9hSrG9wEv6cpsdix/GNkma+XaQp74Dar55+DnauAZpMEfJcGe6PKSLA8QfUYtiqqD9Voh2F60dyyIVqXcgdpeBfVf7jdygOXuG07dKp5qW1w1eUH8I7zLX8Y+msuFGRyHXQ1WvB4qU+iiHyy9nxP+HH4fJbl27fUJ5q3L01o96Wdi/2MVhAYcoY6RD2DlRVUJgXDW/abRFmYnyXuL6MnnI=",
- "folder": "379A3A7E5D5A47A6AA3A69C4D1E57D1B",
- "hmac": "U1LfhLPcGrQT4s1vq83f5ikspRc6JZyUFmzpwyX0Jo4=",
- "k": "CcSDvXgNE+Ro5U+MXx6VoYgA29o2mbTP45K5GORJaTgb3lGvFLZs0Gs7eecAaCQw5w/fJI9Frl5pl9/ntH+jJy/SOyg5KBxsGtnkjG3LXOcEJck8BBqWI/T2dfwfwSIcIji9dzZvACWifGNgnMdzBA==",
- "o": "b3BkYXRhMDGbAAAAAAAAAKl92atkS8UPkld5AfENoWUe4WN4E8iVpJ/bj95sFeIthtaAHWk3OFHRB5XuBunuM43sUpiAIbCVuoosOMMpM1dJX7gctwSgpHen6ObUx85NGpgGvk2rhII1CzPhER+ACkIlopVBJd9tZsXf9sR24pO62soASghk397BuyaEkobgEnS7x8pBdQ3rKnXBSO5HMdLmb9Iw0YFZYHDORrJoQN19TFqIH2LQHe2/yvdMGD7r/gCbHZR/cqPCnIyYOqvT9GSVcsnLwxC9y5PKLV6Mng4=",
- "tx": 1373753420,
- "updated": 1325483951,
- "uuid": "5ADFF73C09004C448D45565BC4750DE2"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_6.js b/tests/data/freddy-2013-12-04.opvault/default/band_6.js
deleted file mode 100644
index f5cbb07dd..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_6.js
+++ /dev/null
@@ -1,13 +0,0 @@
-ld({
- "67979020CCA54120BAFA2742C3F23F2B": {
- "category": "108",
- "created": 1370129714,
- "d": "b3BkYXRhMDHAAAAAAAAAALKcrmbSK3N10mz8SnKVCpdQS2cYLptNG47UL3OT3kJ3HFTlnEZUlC+RgPGWt1ZTSiC+vGBFMIltHU3o1sJ/LxO7k8nSuX3Iky4BadclqAur8ux/kH2TyfBdWTu+sRSskE5tMb3SB0z3Yfv+w5nj3c7amD2eClrxwFyjW/Jv1reHAI4p3HD9bbDxVlVxHFuqsVlwsb8fiAdIXmhtf1ZQv8XM+Vd1KBSHaKC/nVcwyG/ZS0r4CyGdiQUq2bEvdERssRR1nzjT+g/sFseD8q4jrXVXhezXQdstl81GM3WSvVSm5lT/z6qMbCUrcPW7AZsFIcAMqtRHexBvKwfjpn3Tj5M=",
- "hmac": "AVY2ZVXViuYtgfnSKShK/ZbbVn6T9SMfugz7F89Kd2Q=",
- "k": "NwsqfULiH/XRz0LPCNJ5u1Kv4Onmqmeu1Ye4UKmipo6YspWDQ9zswlSWqgtjhKVzsv+eq9G6qQftYwG4cHbid18RdZksQWqDCrnE7arx9zwR9mYdxB9Eymb/nSU4o03D9pkAk/niM23vS7qkbbap8A==",
- "o": "b3BkYXRhMDE8AAAAAAAAAPnQNt3DIzXvm/rjmdk/NHmfWLgOs+/hvM6nFutXkkSPcWK2Xl9NAzyoMV86XJviJF2wYd74eJFXZgFDgflquGnrK6xQifFqMj6zxVF4r6EACcNtzHgsrv054MFtKKiZm073KEQStDhnI2dwtRWQQjM=",
- "tx": 1373753420,
- "updated": 1370129765,
- "uuid": "67979020CCA54120BAFA2742C3F23F2B"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_7.js b/tests/data/freddy-2013-12-04.opvault/default/band_7.js
deleted file mode 100644
index 52e8e918b..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_7.js
+++ /dev/null
@@ -1,13 +0,0 @@
-ld({
- "72366D161D9E43D98E58EB801DAD1EF8": {
- "category": "001",
- "created": 1325483951,
- "d": "b3BkYXRhMDEbAQAAAAAAAHuKL7sJ20Yz8sgns/j9LqJDQy9lms3XaDZBwYt8bmEKK3t2nQxNvUQVqxISzoRj/nX/axFvqcEOSOzZhxN7CvszP9eBPmTS2zTZvz4iu4NQ/LqXlUJ6wpf4HTjnhaqqcunas49y9ahK9xSICfo1mbmVyUI2raUoxMIQCzthfS/Wqr6J2uk6I0RraEO/eJBvOxO+buXfDQ5Bt9WoZREy+o0qcGEUs6kIMcTG5PmbOWV0DH3/Y29ggzzrUiaAbmvcu88e6warGI5Ii9gnW9iLt3AIFtIvuZQNhwyDDH7e8LPYOdusu7MfQGannWoc4QGTLnUkZrIozo3WTsoCEFv1Q9sYjyucSaR2Q2BEHVwiKzPsu4YaUADQSl65IgyfMRhjpU3qNsIxtu1gLjjRWwx8YV7BTOOSgz5MMwesZrMX5WcsulOgH6/TRH6mQtbi9d/kTw==",
- "hmac": "A3fS6NKkoS6T1vTDvd+mVUWweXeNnWdPYb+T81WfgwY=",
- "k": "du1CJ4AKSNBWoORyfTICsCJ9ltR/Jdy95IwZBXPsxD2fs+LmzTrFPB6sXeoB8Or7aaISaH6fzf5PJfhwIYs0WwtiJNMsHQOJ0aijvDMmpFvE1EHle+E/V9aPK0f3nws5opwfcUAxQVKAoZCg6VFXng==",
- "o": "b3BkYXRhMDGTAAAAAAAAAExAg52C/fG2dWHCUgSx+8mg6eRc4M2Z0Qb9+ievEU6lNLuHqQQAEnJhe8zJTNfUm7bKMA9aqNrR9EpObuMR1j+uN2pIFJmD1pDtHsemM1vnSr5tZ5jUYPjOC7pWJyvC16ap4zBPfDMcrUjCVjgnZlppyZ3cJuxwVJNFRHUqShpX7oetObnVfOeixiUsvdSFjEGC9dbzvnQHrcv4G+nwmHtSLI9vN78SCWkX8I8DKZd4QZt/94Am9OWArX3r+s3Yvq4HTvNto/kC1q+a3k55AJw=",
- "tx": 1373753420,
- "updated": 1325483951,
- "uuid": "72366D161D9E43D98E58EB801DAD1EF8"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_8.js b/tests/data/freddy-2013-12-04.opvault/default/band_8.js
deleted file mode 100644
index 5eb3eb3f7..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_8.js
+++ /dev/null
@@ -1,13 +0,0 @@
-ld({
- "8445A23B5740455DA360FEA379C3CC90": {
- "category": "107",
- "created": 1370116459,
- "d": "b3BkYXRhMDH7AgAAAAAAABhbMvlFeIwLjjtGPnVc640YpM/uYRO4JbNRIxb6cSpo+FU9mOanKkql1Ffwu3ZRPSQZ6vloEUDRMqhGr4YpWM/v6lIO1iCVtegauIEVdAy+uDSAQzvC2+2NL3X9s7WgAcYh2G94JVbj7AharSB4VCRxc5NwDCViTkj0TTYDa8wDfJfQPhhM/+tlfZgcD9ZIUteFMtTPjoJwduphbScjhyRzsQM9jJ2scrYjasrnp+tFjUFQdTmuvkSI/10hoo3htLLF4bYpUGa4LPzu/CkjIotaJrJTAXZq22SDtrmYZEDPyR+epZW/2NW8di0T8gnPbx57nBKmvx1QWej3noEFcDRwtjwlp9tapyC0VFTw8xG7GaVNHc/xzGNbzQhxseGo2MPyIaUfx/9/zt0X20Il+wxX3kfn97F3DXY8KQOAHBrTeME1HD7HAvHyDnMtFX6IjdfUU488OuGVPWypk623Lmdv9KRSJoYi3bLHhR9tD4Txl9/kL+gLoyPosnr0gkua8Lfss89hohkqLVh+/VlNgwob62oBhSuS3lIJwyNl0abVrQ7jWQhkuRCXcN2sJce68cWYgvYwe/4+h4o+yfURqiLTMvts257etCN2dBkRucuNWNQJAPYw5HJ5lhwgVWVXKqU0hx+TeCRaxYDlQT08M7Pen7tmNZL6rR2f/GCz2ek1ZSoErabcFOcGExNJoLS/yvBAVVv9qOAa+m+fH4rVRt5eVrie4z5Z0G4IiL9Y/aGKqZ9JJ00h32+k/SmHmoYn8z6u6jBTJmnIVSIRzhQpn7YCTT7bu1b/WlYIeYA+/bNAUaqO6yAjuIFiQipocGyvkmkxkC8kIgsomdpyllNeJYz7ACc1bJVKUs0ZdYWqk73KlQEXB9GrbxCtPqsDqnYwvFlNgfc9ebmxUIKK3HsG4rKk03dj8JHQa5K8E96/qPxNLaxCX3Gvx0vKI8zzn8vCmUkDzHTC0Yz2GT4zm0A8ps3HvuX7gRqU5vs/E/UkpTaaHIM3CabTRzPLTstxfkMo9Z4Kll+g3VvQeOHazW+ifGYhPVVFk3y82loPrqpxpy4H5tlAB3XKG3Xgai+3LWqFdQ==",
- "hmac": "6NNDqDnF+PHFS/RYa84na8Uo0D8FFiKiBC3VhMTUfSk=",
- "k": "PILmWgunfIvnhZ2SUnP85rywepsURtQxOXs+/+KV+o+0Of3dpWiH/2vbSuQtA3nWgTkzAFoKMQozy3ekHgIq3X56ggJZBaEGVUd0yvqZcQthcdDjCTdwo6jlj6yqnaV1gUxV+xxi2KNN+OEHoF/F9Q==",
- "o": "b3BkYXRhMDE0AAAAAAAAADDeatvXdJlmViVGv/hYR+L8uv51h/sRlE4N8bLbsekQfnOq4Zjno1XOMGG96V/DdTut8NDlTpESo50Xr0kJDR6nhAZ2GibT1c1PEM2M+qYahg/vr0rbIThGlitfOmHwOXyzIqo/GQUrTJkNkR88Mz4=",
- "tx": 1373753420,
- "updated": 1370116516,
- "uuid": "8445A23B5740455DA360FEA379C3CC90"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_A.js b/tests/data/freddy-2013-12-04.opvault/default/band_A.js
deleted file mode 100644
index 92845fc9f..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_A.js
+++ /dev/null
@@ -1 +0,0 @@
-ld({"A2D44483145F4B41A849FE5FEA4B504D":{"category":"104","k":"AgC49BNLEAcpFwcIcZ4VAJN+tIHosv9RAxk0ROK6qilWWFELXJyJXP9KmH4pBREjmc6LcRw4BsFwKpVUm1MHbOG6khhzqCRwQ8rjIBY+f52L\/r\/YJo9XGX569D1AHqoIhPMTyvhiV2nhjhFxmVuERQ==","updated":1370116182,"tx":1373753420,"d":"b3BkYXRhMDH1AgAAAAAAAL0hkkKKdOztTeMZRdhtIPQtooMTL7xdcKM21KA+g\/K\/ZBOXRstNaIF7GPqycQOAOknUfsPUrPaNQabE3hwiPRQ7vAgqEDgtmHyrn0ohgYN8TteVANoMtsAo\/8B2UeiAigkhQMVY0OKEZE06PzHH1ez2bPprlLWocSk3y0PB06h2N9Rl6n+JuE\/bYxlb2cCpWrutM5Xb8U8s\/GmLkyTeDv5ZrqPP4zWaOPyPrnkSRn2AUxXspVzRKmCDuIKZmmXh6XkPe1I7yrGOiAH4G3rDz7AZbsdzEIKaT2CEk6MWet+U1mnJoVzmQxKJnwSzs\/atnQ+yOlSfDjRdK5YzYfyD5nOVuDJR84bnGEGMCe9cyI+jcmyCIkHP6HDmGFTLDhvvnXXIziuh05RPAIrCOG6gpxkHY34mTh5AYfsYnv4FZw6ceEegbHEABNejvzSv3fBkh99bA+h2Y9ueOMWtomYw7S8P7tjEPaTIHNtPLJy6llqgLQqksBu5YdkwSE004L\/qRJ7lNiVNn5opHyxXOeGMo+c9pcXm1N+cARTztjlns\/wCb9lWQKZDRCQus8zO4222VOVsgoFEUZ6YKrDdgz\/fraQOtSzcov47lq4cGwZo4EeMGRJmPQ2pBGQF4csHYTwNdN1dkdTT1KV0mLMYtwn\/6tbybjlxT5MtcEPAqwXP4khV9v5VathptiqsxnXl8r2A8ovQoo14l9JzyvMOlvTcJHe3L9AnDoWvUmXw8rzOoUdOifcz4dpJs5yJDVB28Aog671wt7gca0R0kAj15tbdS0RNjXN3rWdki7B9wj7f6l8JiJodvi4Xt3av7eRQSwCbfYdQ2jZ1yTaWpZ+yUF8kTR\/4zUYbemSbi\/LWIqcH9narEexyBE5mA64PXBpVvjjXS5d2JLwmXY1jK2fuofLTmNcBZsJ5cMWSDBaYjp76rgnGtG3UQ\/0AELPTKcv2n\/MVp8XFKwAsngiHP4dbfFOWjXIMMtfz3zJ11v5zJTrXuG1fCWQrewjYC3iwiWgQEk2Nv\/a7aUG87vcgXMipXMr8\/dt6+c8YHNP+cJN4TjmuTGCLa7RmfUV3I2qN5CaI0LzQ5g==","hmac":"xNhX2boeIjZSYRTzOQBw\/lj7VX\/iucniYCtky+gFnkI=","created":1370115875,"uuid":"A2D44483145F4B41A849FE5FEA4B504D","o":"b3BkYXRhMDFCAAAAAAAAAH87YuKjL7BH4gfLKRT0MfiJDJ1URxjfNmThc\/UkDXdoAD0jixu3Q30YG8xR3itHYp5Gdtr4T4scp4HAtiKJ0UYpkGbLt3bmhFGtpuH\/AJqVUiRW+t4kGzoLdV\/nvsL76oae7KgQVqSOabIUMvdIVapjb+uA9BVCOFV7fnj\/4+rj"},"AE272805811C450586BA3EDEAEF8AE19":{"uuid":"AE272805811C450586BA3EDEAEF8AE19","category":"003","o":"b3BkYXRhMDFzAAAAAAAAAJ4FWzFyJZW8+caJC7cqRq0prmapCi8G2cYsIvOxolmZ+O8WUXknbg\/IdgHcZvquPnWehKt1qlx3Q0b4wUjkH20uZBkJJADB4EixRs7gjcNEFYr5rJhcocoV\/LoXcFeNNZlSLSu9J0v1o1IO6dgdEgOdzF5irAdk\/0WxkZJ9jN5EYXCsIFFecabjAimXQZMZJw\/gGIOpSGDQWLKCDuk7pv5xRuII6pmR8jif4T35oM3R","hmac":"JMoh16y26Yghanste1vPLKPbTCOWBgBaY\/Eu08LRk+8=","updated":1386214835,"trashed":true,"k":"10078IRI0KYGRKgbidYmpqdgeLmsXzl\/Rr0t6Db0ZOV3GQGMk7n36Qcl5r6facvMwT1mgmCOSpLAsQ4MJ173G78UF9VPeqfzVxu11HQYXpEPr\/X4bRWfPI9jbWcL1sQNuYvoKFr6AGyeGxfRrPv31g==","d":"b3BkYXRhMDFXAAAAAAAAAM\/pW84fBukYAaFjZQIRf4CaloTNI\/UKT60EczrN8fSGcekBOnuxx3oNZkTIhRHhqimNXXjsikYJ015pU81u3S33G00SeJZGt2ybXPyQ9LshOaeqKg0kjIxKL+GYIk+rPkAIDixNuumgx6nb1C6s8\/JnryP4bk5mi4e2avIbO2ddFZCqzK48\/\/7nyb+zOVlukQ==","created":1386214759,"tx":1386214835}}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_D.js b/tests/data/freddy-2013-12-04.opvault/default/band_D.js
deleted file mode 100644
index ebe3e19fb..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_D.js
+++ /dev/null
@@ -1,37 +0,0 @@
-ld({
- "D06307ADA44C4031BA2FF4B174DE79CB": {
- "category": "002",
- "created": 1325483951,
- "d": "b3BkYXRhMDF1BQAAAAAAAJaT1yZYCCUlp8pOUU7XbdTy90boGVyyZAG71tm/5W3N5ktaZZFaL+OxS4LOpxWQGGcLrWTLXekyAwh8lKcGUtx+gmDlMpUR7teTvgX7jl0UOhS+NOcXZajrdPqhJ17XIeq7ze2HveKyLEpJ7zoNMkf6yHH+hEo5o6LVb0mDoskDx0Tb0FjSzDzvlxMInfFZrNPa/QdMg7au+2lj9GtTY43lX0CN51HrkJqqC5IJHti9PcXFglakVxATpT+h66xoCDreWoObCOdMlXVLhVOvYGelapHk1hIxSWdIgP0Is1ubEvivdhBVWuG+FubZVOk1WaLQJ2l0hw6fIL0yIRfeiA5eWEUB3zYYJbl1kLnYhiz93LMUbaaAiwPVRhFRjUBstgUVipLayTb3QCg0um4M4/qYIwPO6htj043Qn5iG4WSEuEjG0YjXytqdrIeS3h2ghzBPkMsW6OdPixfruix5+HSMV53+vzVLXi+ko7ScjsWgSZtYEPxc6kjcnp/4xIzhbCG7zCu3j4HBIQ4Cr1TYDWGh571zE+tfewVEOPriBLvTmcEdvQUZky3LesqXdJudKgAhGRmLLAKiyYJTOFkB36MLGh3oDqu1GIebQSi19hA+RPSZ6T+Ouz4GYdN/jHyA6/WqKv3fg/RdipaU1AbpryIoXd9xHprJ5poyaAiYdBNAuvM0a1SDndGaV2ABHwKTwzXmYhDvMdPgRg30zH7hw6LUGNEXDTlmmz4PjGndUQJaeWDGwexOOetoBLly5jYZ+/f+ZC6ZuNVyssODUDbySBVbTyrv8rnagVSRPWGryXtFH8YDfbRn3bflyX21vRYY82aCMezYuaLxAgeaX7+VD8APJtQIAm5b1Ob3OEm0CpJvn0h8OwDedebq6w/3pQPBz0z4jDugXFKhA7UQEs2w0kHvRI3H23h/TYP6VpBfu0Cc6RJ/6TcRHAJ8dyRl2ag7vEGMoGBafmik/68lEvG9CjbbOhbMw3JUcDglmSCuAFCR9etrxO7+PdlyOaCWOoBvF6+8rgRymdP9vXjnoZxTYmFINjY4OG2qRNQuDuDHPa9YYVonjCXPAJq/ty2uLD5JVEXJhsevWn5YCM7gOtR1g0lEywYHlUiQhGwO639Qoez6x/nmDDCap9AYaYumU0aAs5878aT5pXOHnWpdJJThIs2/pKYrlY8IMyM96mvBeT0odol7WhGCKEZ9O/LW+xqxqs8kyCmwnWxO0rJwuJfAH1BCYgynXr76Aus+wKqIF1cjgTsEVIaIeznKJpxMpio6OkSm5kXyEawOKW26yQS/KXeyXUWCcVrCp87Esx1EQ0i5thq5iVC6UzaG9i1AnJ340Fu875vvNg5Cfk29pUFLAMPm08V4Jlfq12341GiBs8zCrlq+3DJiqK4G2A6i4sMRblWYU/OJOhWpHTmCTs8Lhk79ZCBpJKtOdmHsyFcH15HqJ71YhX1r+Rba/beMaJlor4w+2a2Txvtb0/Khsi0RrfrHOr3juR+5h5x7cKWS0ep9wVTh0eRtuzxYRGpwE5Y2n2FuNfmPzDuCtagea3INjvp79r27UqxO61F1BxvnDRTHSE1P2tV/5SpkVrpA0BvEwpEUhRskw0LNGSmZxt0dZzFjAcxH3vopzPvxdvqOutoC2ISliInAxc8CiJw0rq2vLh/T+XXUd3hwy5vdn6leUu9pLvi385cHS1TixYXGJ3ewHa2V8fmglTjWsMjdU/v8JywYeND30/0BAY5trF5CTI3E9sO/JrZLLpTUjDhNjILGVD7fA2wRvmrmzCixzID1TukS9hdLxDnO/xvZMDjlvPdnls6MMEhi8sTAzzU0sKwX3GZBfE1H2lY4fotvF8OEkt98X6SMC8t0SQeiMx6/j3ikoVceUtkn7Lu53izp+H1KBRzxQDf6qvzw8j+7d1FkpvhZUoTXUuoIYfQwDXSiJAQ=",
- "folder": "617F428170E1455D9503EC75AA103859",
- "hmac": "Aw+IzC+E5wXzIONUOx2T3HkpEuOe9GJd9B2VKTDQE1U=",
- "k": "XX/7JtI7dGhIowwC8kdeCJgSEQBz2473RpR/Sd/zBpefXOqSW3O2A2ar6JQoBKiFaniMFzJuCVyF3u5ho7imWT9JkvsB3N4vRNe5W4Ks7mTLnbZFjDPYu5NGqN2mRGH6i/W3wh4NHILNE5jTxMwvTw==",
- "o": "b3BkYXRhMDFiAAAAAAAAAKLESLkbJBDmrKAD8sBqerT2BhZsYb2r1kEhA6bj0st8B8pOhDDAGeg33G+wDS49SSTIU0+qQd5V8NPPoXh2dOwGB/xj0h0LNOlx7sBjzb6dZ4JWpaazFoO3PSgeZBaeuD9VZ69LL5QO88Hv66yNuPKtwqxTe65lZKbX5OrVG38GxJj+qtLI32ORaZpby2N3A/UcvqKJBcd7jVK+xhf8huU=",
- "tx": 1373753421,
- "updated": 1325483951,
- "uuid": "D06307ADA44C4031BA2FF4B174DE79CB"
- },
- "D1820AA8CB534AC6A4B5A2C0263FD3B2": {
- "category": "003",
- "created": 1325483952,
- "d": "b3BkYXRhMDHSAQAAAAAAAOtI8mRSS2ZPodOzN1vWoS97ViCd1s7x2aO4FUF4U9fYznoHNE0UeNlZyj5HVpZ+LYcAm8/wHhFt5YH9rqIDtADcjRTzI+b5UZ56uUycJ9Oeh6V6oyMRyrv+0sknwYVlsQUZVXRaP7v6G0PxcJNpLH4RisxxVF2y+r023GT4EI5pncgs0J8LaqA4HG8yjy4ie0orQEyeSSmuqeaMIlGpxRapvakdpexjNMzWpdFUEnl4o+9MwE0QvgRilchQuGxD5hEUf/nQwjEU7BcQSEAbzn7aDhmuVMh6Laongd7K8XEDLDQSNJYZdY54xmIajkifMNXA40vSqhjRDB8vbLNUWS9h0uU9TV7mWUujZTGHhFPlrcxmisAW44tXuJ/nRNYO4gljVEWCdPEjHVPteECN0/50OvZvM5X9F1MYNGk/z4S3u7D1YBvBGnVxGn9TXR0nyT38dYq0GWW5xBbDUz5vgCe4w0gZ0EQ13z8VCjnM7v6uKAW9ajsQqIoYCVRv/bjXktb5CmzC4phNSH0RYYD8ByEY/Jahn4FdouLab/NoPQmx5ZgDZsKNX5D/iuXv/hQ/wkmgjaCppdPJeDmEHmwTqTvFrlCqvu0WJosC+PiOVkMq9oIXByNf5kFVLqpMEiKxPRieZWcZ8evSkrTPuSHE3EmKzzevDGNR4TEBP/zLv9leUecOqL2tlZ87iclIywOp+A==",
- "hmac": "NtgrlVsQUjVOS+by88aMb2744M0TFC+MNv6h8gs4C0A=",
- "k": "ELybuWAxQX3rIZCsJ5cgt9rImCIoDoqwGRzvspqEjs/Nh3m1LH6MIlI2L6NeVZNvQJvqfNQgjlxB1G7f7D/b0sUjv1DN18reNSYiEfC6J5i9OJPb6AFH+n3Pamu5azE171E3IOJy8Tcm5EonoZanxA==",
- "o": "b3BkYXRhMDFGAAAAAAAAAI4XtY9Rhit3UaBvo32Nx9g9fSH7COUGvj/JrZfpPTfI975k26woxzapwHjdBVlYEmKWLaD1Cr1PJKuJtDJui2RT1q6hGv3+0yDsnCXsoM6OkSPlFisKjWA5FuaZjZVxKyZHSLHbyNiR+hj0PfSVVdFVoJs/WNfa8KF3NpD1+LCG",
- "tx": 1373753420,
- "updated": 1325483952,
- "uuid": "D1820AA8CB534AC6A4B5A2C0263FD3B2"
- },
- "D8F79F17D6384808848B213EB4946ECA": {
- "category": "001",
- "created": 1325483951,
- "d": "b3BkYXRhMDEHAQAAAAAAANiTotCslHjA3lDSFq67/PAjJqHIN4CLgBq7B9w3/vp41wIDjd7HeH1RlG1QShODDhMf+NGbN/TCK8snRjUfKS1F+XgAEOKjeTBpnY3mA8FIdmKwJm/VvYXWI1bzd/ndZA1wDniaFy6+qBOaCDRCh5ccg3PkghZqSzouDY6VpQ3RtrtCd0cIp61PyQh9fhsIcaV1kuzOamAtTRrJdfQ9Kfd3wN3WYmvQ76KV2CtV17eohR63tJk1uPxa7YfEd0zihPc7vVJX2yKyHmO9Xb2yva+CDVExKjv7sIh3D+oT2J7vqfJocuwjzhs5C1c5rxMipOot0FSEYQ76YPb+Rz22NjKfEcuu+49s6+kq3XoJBoqVohF+uFjM76v5gDeFPbV9Im5zxFtU+R0YtiGCFA7NPQ5AFL1oQt2fGxDw06jhUt+z",
- "folder": "225014A4FC654BE19531C19E5A3F8D5A",
- "hmac": "kH17UD/ltmyhXda3DaIpzQtW3NYXgzOcMCPbOvY21uY=",
- "k": "nHYWK2zu3rqnDsrZV9y3WsH/Hd93Ci+j4GSMLNSW6S/6DQVn5UjhFIwLB8qHKCQSlZWkieGz4lMaN7F7SKAj/OjJE73NfsGgjQHhwBy0W3/Ty85XuGufE89gikFNs1sw64WQQG3ZM692YdDd2QY7EA==",
- "o": "b3BkYXRhMDGbAAAAAAAAAP1DU3jTImWEWTH9q5cDG9fw5DAVO5fvavTSShwoDQmrLryQL9R4fMXL+r/xjUg2EiyPG1OPNkmPq5kF1vrGNTdblojCWmpvhh8DIV3h8vt5gwd5+JaoTeQbvYqayfPXpzVcZ0fDEZQd5HvpmQJJGHMpU2mU8W9XiXlDK66tpLIJwqPLSibSE/OV/FIUn2wb3G+eEKi6rPZIoIZjMMkvk8S3H965CKUr9T7QrpVP6zUP6oQLeRIuQt3WUGPfi5LWfnUY7suMxpAYRBCWVnti4s4=",
- "tx": 1373753421,
- "updated": 1325483952,
- "uuid": "D8F79F17D6384808848B213EB4946ECA"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_E.js b/tests/data/freddy-2013-12-04.opvault/default/band_E.js
deleted file mode 100644
index dfe1e0adf..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_E.js
+++ /dev/null
@@ -1,37 +0,0 @@
-ld({
- "E0D293D29B10483F8DFDAC72ED0BE5C0": {
- "category": "106",
- "created": 1370116210,
- "d": "b3BkYXRhMDHvAgAAAAAAAMwXinLLoArWq5bfBXIorDeMP6Eg4AIrjDMcKauM87yrq8BgJB4yJlw0CmHzLiaul7vLEuTFoT8Y+ElWPIB6x6GOTYyXX+9g2O6ffOMAt/x+fBVtMxTfUnK8Slf9h+lHkkmFZWKd9Q19W6YN/DRQD65yO+PwQ5ErqAZayN31EijXzS5vbtnwXkDvK2wXwXu9l8ye+7kFGjDT9BDPCLdpawqS2BEMoH9w5dkxqenf1pixt12XaJVaZ4x7MPsVLGpS6Vwua6Y9+Y6OWSgV1xjUTz1DXGmT+13yG8d3lgAM+McJEHRihzq60NUIK/7XNdIDsZwyTMBAk8XM0gxvInQbRmOGAp3JH1UdvhMrRsXlF0b8yNJfVXb4H1QCkIzxlkEbDlsL0dP4TE47QZZnnQrPNSb51FxTCsdTIjnG4DClXijrR0YknI86cMsaHC91zzf0oIz7ETMZ8vkxmIwBlq559IOAns1hUyoQAWuAbOBNQqw1TYQzIT0CPtd5cDPEfuERj1/SGyXdFa7SWqvGNc5z4ET6tujoG7xZzJg/JvifW75E0xel0e8ZfHJvQUaZx2Mj0ukjiNsorB9O2p0DQq//P5W1A4rHAg/oeLQB1926u62k9+FcRG4ZrBgPI0HGszprHzF5T+lm7JCZamf6waPFsIgIAh+1RMq4RUqpmaQPsypkB2GtkO8h83wKDaX5fngts3CJH9OZI5NGqsOpXjUyOcqUFM7GMHKsXVLSXPXG1snKCSFph3iLoH/bnryPx4Mf1eYbgqDrdQoJ61Youiw/qo64xMA3HpW3EZ3p48tTOwvJBa335o9QdSgIOdnmhpAYJmhrS/iRyoAhamG6QxRxIk43e17UbQ1Y1Pv6lgMOfsoWhkRM2dL6rjUA6O1YUnPQNdrjYA/HL/qWEvDe1C0JbOR3xWLFSCIwkTFvYD3CQ9NmMXAnZ5Fu9vzgQRvjhxQSWPE6GwkykKYOS96RXOeP92HkB+Jt5lgKFSuDNwBYXDCXu1KwVvCRuqV67SLyJmOG+Rf/c8ThbDTIwYh0Q1EZoPMlx+/koEVZhn89lzrzqQJJ",
- "hmac": "GPeCKCNyGzGIdpakTJAIjThf6j8ZLubbbsYDsyewllY=",
- "k": "ikCOxk5d2VpVu7slo/9KBW5GNAsXlBKHJSIOV4rChQsWG+GdLzWekfMbc8liT3Xw08lR4aY1VFt6K6+nRHuazIvnIK415aD7wBIcL+Tw9gT/UESQv8ogns16SOXzCJjt6M61sO6jpzQzZENWfqK2CQ==",
- "o": "b3BkYXRhMDE2AAAAAAAAANuLreKDkN5RxxpiuHlR+MvbU2JJls5F38JDUnuIqXvBVKYlExHOLSTB0gMjcTf1pvGglvQqqGaNox2GOnQ5F/MSFmHg/eFVsewgeXj+IMs8Bc5itgsYeSwZw7Po3fdc0RgxWvaWipXdhsejk6Fd1uY=",
- "tx": 1373755376,
- "updated": 1373755376,
- "uuid": "E0D293D29B10483F8DFDAC72ED0BE5C0"
- },
- "E482B70C038D4DD78A0940728FA737BF": {
- "category": "002",
- "created": 1325483952,
- "d": "b3BkYXRhMDF3BQAAAAAAALd6CWU7JR10MTbZRSdznA5VPiBVK3JYI8liAbhUQdjtsxVxazkwiPDhPTVeiD0F3hTXF+KzJjrTK8S2eoSaXHL1bFjwglj8r0hMEf/34/AytILXubb2MiW64wxsDMbuhDJFj9dobm5OWFKUYix7s2v8DapYgbcA2M7xRcZpqqUOJOz6hdLFVCfvdHfRjfxi4m4e2N/1XhhECDrtB7fuBCHDvollW1ohvC2wmXvcmp3CT2w5Dzm0FaxlysIIg9OJRgP+uxzEG3hYR2bp+cxF+x/ddPbEFJ7ckx/Mx5vb6TRtzjn/We0O+HfVYwCkaV1pN3EYnjMYlkfPR418qg+MSpRbSU2ufgIQm3TT+lGIB35d8LhMi2xd3geYwMCwDshvgGFusYyGlwLVqmC5BTYiMgpQFkestz+pA4Gx9Y9zrYCZ0X/hpZ6J5E34ss6XvnWVlRO3Y66d1MRN18y3+/zOeBphqxmruKxdojzm9wY9AxYNJuETV456Sx/dguePkOxCA115y4LOlcLijw1HRVEN6jLsuGpabENXmDyZoiPXnGiyHarlLqUfIRvW9uwWjdg+f6WFDae2rOjuOGTL8BsUhBE6xaV38qC39zbme45tpe+xGNatERPcnLPFehjpB45Oo84nGl11N7jSqqAlqjkFQfb78WeDlanx/EvXah+pTmTm7ubaoALOPFK4rCBsxiftOpgNaHR2kgkU0+TNKexbwtWflkfDrm94UAe+57n6jkW1EZ8Eb2lTQ4GgdwZXguYm4l+R9gcQ3ssePKkTzfxMhsNRJmYWIZZnzUc8uLYLnK3YUx6QzrI18fn7Pdx2S4BiR8xf91lhTl4ph0MAQ4Adquy8s+AmCMFYg5XfjHH+XxfxK1VB9jFYkJ1yQNNMOETPDXYs+ST+GnBYQrl139Duba4KMudGWgVFYtXIrroVJedzEekpf7nPfHsvWoeu+//cNR72WETUnGQAp+Mwa/lWHw/IUcifRSKbgkTEJ0JDCMfP3DJhT4VU6D7WbdGBfYE+ly9q60TTG1XUrdgBwVpswJhAOtxq6mjZ7s6ncxf+93dbmGV/ZxyH/w0iYNR2wk/RTZuhv7XRej8PWXkpvDl/EwDdCbwIXupp5FbNK00cqF7IPjqREYca4MeO7/D265K6CyfmsUyNEQj95X5W06vL3wIToaC+Cn9CMzQkgGOtq46FK5WXmDYaj1GFRLfC353ekN3kvdl9DfTGhAH+oPkbMWGFCIZIoMIZeeIfJJgQNxA6pRH9TyA08hkK7NiuLtCXLZQOjpCfB91qfz45eWHErLPxtJeDJw3M5lo/tejXYZz9z6RzMWFiVWagmS0gpfUfOJZlUk+oGM1vUKsK8PhdE/bA8/3WfXrlcHQ8M9A5meTE5Hn2sTuBdKVQI4r/sYOQjFcYIwBTdj222F8hAKnZ4RdjUYKIMrF16OZKqpAWxzfDiMcI1kfw3LUF45Flq9G5xdNxtrAtLmqwkutOTZ0qabET5qF9epae9fucCc9H3Y4q9Jk4xUoV0m5NrVjRDF7ZqicB/09UUI0n+3kd1M9kTcx1E1XPlhuUGtUGGCr/YzWuVxyLrn7zAzT7Sguih43vgm7kUg6p32SgIJt/6lThxWoHy2w3MO4zKHA3AoWSqrEZIXjADFJejG8sfrwuQg8oLSR80M/hiaozyostqfki5fQ/Cj2A6hJdkmJf4lcfwtgAbPuMsTsY0QRhm/EMfcsg/pNcwLd01h0XdsKsiYP+39QBYnupNpcxE3BGxnsQFj0CgOM6CVEWu/sfrS112SHiJXtg/FHAMC8MxJPZUAcA6XM45tuduPm9CaMP3ASX13LqJKDuhJMHdMy44vKi9P1R/Rav83H47MGyxXYwtvz6FkRVX1oZjcgD7RNNa2VcBIrHZfUp8M8Fp2PuKrR1RQDNN2Px5HkAblsKvwfPfzT1zCs=",
- "fave": 2000,
- "hmac": "4eHvwV3DwH+fmk3ISBpnFfYVlVlFTB5bJw3AXHKS2SA=",
- "k": "yr2c+hmtrTg6kwcio/GTlS8bogJj0znYD3cNB7jXQdQICYG888AHzlB4UrGsMZPhLzUFLC7Vfd77Uw8x7TivyfjRNzTQpvTtGoIbhSoEYVU5TWz28CrwDZbmDYWpz7z4r1ElIWYQtRCrgILez6c8iQ==",
- "o": "b3BkYXRhMDFXAAAAAAAAAGXKYq+ozGVTUMOS6QEFBbvmbltPopkg/3pQUwXR8pRRs90QqvsIk9JlL0zWrV33N8bWzAUWQyr5U14vEMZNyLBRSQ26SpAEkdQllj0SwD7Nm3p9SpR8TkvY4sbnm3rHzy4bm8DvkSNM5Lau2d/SDSjT1vjK/8Yvi2u+6pMdniBqkBy3uJiTof/cHPDd5KwH+A==",
- "tx": 1373753421,
- "updated": 1369148598,
- "uuid": "E482B70C038D4DD78A0940728FA737BF"
- },
- "EC0A40400ABB4B16926B7417E95C9669": {
- "category": "001",
- "created": 1325483952,
- "d": "b3BkYXRhMDFTAQAAAAAAAF09tCe7uipDcmMo71+IeR2y1xC3e7iX6qFyWSXfMHyYJ9jA08+3rVf8L96QYgjzLnfkyQi0++mIeDkclKhSVNQ3wQ2H41oRq+BB2sFpl9LZioIZCj9y512XR3eXHb4/fPRVhZm5Xy0EISl1lsKzykoA3CMiAILTTJeYMJQrwom3akyZnvrrM8iizDb+7xfIq+MRcvnJVgQsYCRJaL6QkXGK9RJJ4P0F8FyhpQXbDCZ0/x+dUch8bUHwRFjuW8a7uJfr4bHGINCq2JqrJMjWDtADgBZG3iipoiiRNsXbDYAGIVohqIMgbJh2NzAgyptIVnNFR7ArvBerV7Ka3g+s2PqFCO8LmPMgVvPW9fLQJdl+ZBQ4WRJCQh7ZDDm5s+MkyiKvCwOzI1RJeVpSh8F0aZiESZI6exIswxkErwK2tGV1JStQku0WhM/qCKbYENgRT1dwFKNCYSsSaa/PRdLZujwpb0TU+MijZja+fTkpLKWkpqa8P16mzpwFZxFM3MsOaGENe+xYFU4PfGBEH0LG5AU=",
- "fave": 1000,
- "hmac": "WJiNQqN3uDxc06QAWI23wNgn/FYniigGlgMfLZge/Mg=",
- "k": "rIpJwTVdfuqy2sihZc7bJJHb50DVQIAyYbZdHPDUXveJiLdwSTzx3XmLrcSUcMUruoP8RdyU0NbK5ix4lFwC9vcb4y2WOmLsCxARe5VxfiupFqXKvnSILsSIo7AiwXUT59r7syS/s7/iejyIqKr3EQ==",
- "o": "b3BkYXRhMDGwAAAAAAAAAJqgRaKvByRAogZbxxBOv8R6bNVhESt2/WFvCY6FFUoYP7hziYrQhOgBv+EM9n+x9CdkK8O1lhzHoc2U4RO+knh7VFTIJDtnZuedxgILfr+6izsiFJZn08KwwEKNGP5BdpuOzg/a58vhr5qPUO1hOVzVLmTYuGCvnaQ7REinkwLwaX4W22uYo7bFRo60sFcrVcva/KTEn81013B6Gc3fcDtFnjdG17QkxvG3rhc6yzJA9JPCi52UA7q+rLbsn1jd3fcTCykI9T5AfAki00RDXG9qSbZcQLjD2GBs5IvtTrdjtYaah2yrtc8lBpmLyUhFrw==",
- "tx": 1373753420,
- "updated": 1370115423,
- "uuid": "EC0A40400ABB4B16926B7417E95C9669"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/band_F.js b/tests/data/freddy-2013-12-04.opvault/default/band_F.js
deleted file mode 100644
index 94cf3829f..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/band_F.js
+++ /dev/null
@@ -1 +0,0 @@
-ld({"F2DB5DA3FCA64372A751E0E85C67A538":{"uuid":"F2DB5DA3FCA64372A751E0E85C67A538","category":"003","fave":1500,"o":"b3BkYXRhMDFYAAAAAAAAAGVZGfAZ0hOzvSYNXpQTzEDSu8nHDkXbBPNbVJfWncJWvSOUjg+YAFMrjszVOl7YVaYJCE3EUVIARSyhUN7Dqs0rolTkXRjEpIPLmoW7LoSyt11STlFGo5mhZDW12CY92BJiYlTrhisnmaqL9gOxHUE7W4Kuflv8oGZn2dp9xwUkBd0dhQ9Y7vS5O6PTUzmzBQ==","updated":1386214861,"hmac":"hVOwATMlnTQTAdiXrYz8zBvS9WZ3O5KjQnTuF7uWJ\/g=","k":"9ab7Vb8k2b0lu8NSXzSF6JOQFbtoxyctCfcmULCamix5k0c05f5d90witDZ++Fa2o0N9ZQab46ed\/tidZm\/Vz5MllzKu7uETy9NAtwPcIMGszkNB0jh8+1MfszMRcZp2q2S5jo4+ChhdWVTsD1UIuA==","d":"b3BkYXRhMDEvAAAAAAAAALynfnuH\/GcDtho1hIFNF3WDi72NY3G5y3bCUgSCGwNfPLijWAGkllE9tl9RUa7hCCtLrTvAoBDNWGdEhTgVKD855n8rTjngEDbIgsmEZLeELGPwNB2XWblP4Lbh4Rjk3g==","created":1364999176,"tx":1386214885},"F78CEC04078743B6975511A6FDDBED7E":{"category":"100","folder":"617F428170E1455D9503EC75AA103859","k":"T4nySlyP3RjvcPxEIo3pVw0IxF4i8C8MnYubYaTcWplV+r+h47mHozmiLqS1TNwrIZaC0OxfGvqfr5ymr5FcVNknwPA+K5d7KypQ\/vA7ICFkY+q+igl1h2tgnLjwWbRgaktqHnQuHdOdolP4Z0WB2w==","tx":1373753421,"updated":1325483952,"d":"b3BkYXRhMDH\/BAAAAAAAACG+iJKIB+TaegDRNiZFhsZinNcC7IoA0M2XwJOqrshC7psJ5H3VBD+y\/X49GgXwVWsnWvzw+xoRV6LFeHdfhXBEE0TReX61Qzd9y4KgpRemIuls8ORTeEbnzZxZafE5O4\/WOwAl+K\/gkGpTZ1YrnIwGBbos+5bWZCh8gTG97xohRTMXtM251fNfpSQBVAPpjjiW7+vr70DIavdQg9WSUaOwpNz7mBiCEtaN\/zdRcb9TQb\/STEOtG383nF9vcYEC4hxKXEA2zRMPBO7WWMvquPq08nrEVBqNuVFSo\/O2wPMBWjE1txg0XcBJQtCv\/mFRumrx1sxdQR1T\/EQKYasFRQmSNo9xHvytqqJsu6lTtLSHlKGqB+ifIdtgPsPQJi2RRtcOTsED+Tz6EgfmrN+p7FBciQcbsq49NSKLVRjbvPWO3U\/bJTHOyZQFuGgoecRlWgkfhpB9R62enV53QYq+VcEmJev7hAn+PjbwqTekBLfDWXx9YxqgqcJuzEcPBq50plkKzrktNxzUHjyyNlVDvi9clyd0HQHR\/V3QMGjDG7czu1uc11NkLPOHM0GP6gvbuxA8j657lQ7JBQ8HXD34JRqeBX4dEJXBw5nFbWpJwEO8bdCmdxBhXVfW\/04RQLyNcafUG8YzcjZBcUSRTcvRBpy67rNiHHpO8vML\/R0tpM7E\/BTYmXekhhlKpRK26axDalKIfAyuwbftvP0Q0n6ggONbvLLe6Z6+UI+2YqIA2IuY4M4DzdOoMFQDRzCtV77tTfIamPkpQS+PqV2Yr+c2enBljfXNbnArPoKj09hFEYjqZCmh4\/5OluSqZn3Ht17NtHACK2W7DGCxLdH0CW67IAbyQWdyvGwIaE3tC9CxjW\/SGEEy8JponKH7enbU74OG1yLDWWkc0coYPDHAEmXYcvSVHaez+2uPzlj0HYTY4hZJvDmgqVOvObwji7xJVwVw+r2mqg9b5e1qDEOqo5Vh9srXNQAMsyM4NNfGTWWbi3nCZ0FPNo0G4VXGazWpQx4Y+qk0dwtFL+wncMO1H6mSG+Re2592XJ5joxQ+5H7l9cdoz9nWKhn0WbzwTZ0wJU7bPTDfxGkfzdFJ3\/UdyjYPPdorkJ2NbECnpG7ZGs00rl8sX0a5mse6LBE7rWbPhl98jJrlaeh5\/BV5fVHxOXL3s+\/6NE8RwG8h+i2Nvh91\/D5VKQ833OfLoaNJckGw0nCQQDv75oS32AXjBzYH\/gxEYtdpj6A59P7ZtvKymulGif0WgIYWMI4s2rlIDNRaZ37Wq6w5vNnmZtUoY4Vme2VreZcTv9be656dqfg7SSm0+2xM1E4MfurncA4VZM6xRoZdPmTVIjTbEoFxghSGutVl04IYgBJi6QyfSt5g+zpq1XCsbOPBaPZzO5Y6P6F+Xf\/nIrFIe0MvMbMV+S9JP5OnYyp5G5d+NwF3aNU1IhnzLFt3EKK7zx8uO\/3GONU\/5N0Bshekk8a2EjRTc0ajkfYDUq3Ehu++So9BUiBriIeL7qS1FjPqH85mXsb9lfwpx6mmxQAMboJ\/X2+65I0x00afg4c6nKdZ1XWstgw8sRcHsFlYbQlZ+G9\/sR3mAd4jmZalMFspA3trKY00Ia6EgtTZt0cb\/jErWPwHHHT+DhSYTpMlrvw9Ea6AG3lb5I\/xigJHFIwXDhqP2winTKdfwYbjADNdJXV34YhwZ0aEBStIhTAcHa8L5jYo00j3Td40Kj4e0ZN7ig1D0s4qzR\/r\/NhzJJPXAMuLKKJ2jrlUU5lbQaaN","hmac":"wPsd75UlSe3kXq0lUKFDQRkCykCFYEZRSgHs7o2U9EU=","created":1325483952,"uuid":"F78CEC04078743B6975511A6FDDBED7E","o":"b3BkYXRhMDE8AAAAAAAAAJomnirvNYqHCY2ZEm\/m5n8WYCNRsXxtt72OnnAC5mxf5u11+GoGT4HxU1lq0AFowmjB7Po4iq+shdgvd\/uVQqLYyjhD0oxhdTElpzyOBF1l04h0d8gbbumDojMLy9WRuevLJkyqHenSUoSfxBz6XUQ="},"F5F099B210F248348E22934DDC3338B2":{"category":"100","k":"uLUIwqVIzBKRuPIl+Acp\/Vh0A4TGpgrWOAUJjx52kiHxIFOKV5gkmpasiWA1Jb+1o9ElNaWMgPgVTpN8+F\/M0w4ODtFIaW5vXlFLgCiN7AYOCL+k3ym5b3TZ8w2\/+omTHvvMqwEpHcOD80pkrqThwA==","updated":1325483952,"tx":1373753420,"d":"b3BkYXRhMDH7BAAAAAAAAM6BGZoTsdH5Eule+fD1M9QiwPF4bm9vmthdGFtfElmzwr+aJgNeIhq1ndSlIkwCPPBbhSV2EML7UNVjKeo65hYnlmkQ4QijK\/fQC+YkHJXs1Rxu4fr+QoT0ppPgPgedPfkmH7NImtL5I29Si\/CPKK9G6DEnVlsRB0Hpt0cxhapHB7ZqS0yyetTUSYbkOADeYee3DIt588s7jQHf1zTPRyilW7ogpLsVbo\/tHpEbaOPZv5nmLi0QKzHpL++7b2gP5J7eBT2jaVZ76MCxcQu9vX0EHnjLdJXLJsfCf\/o6GQ+lx1x4YU8151YpVJ92r5yUtkDG4Ry+gZbJIZWSPwx3OUcNW6WIf9atBFuQiynah+bTJzWViYsQaoEzLYKJ5KoCKb56HqG8B5O9kTqO0OXBaanr55W+S9eIuw2ntTImF2RivMoeM0JlrBxRc\/SgIWYRjr\/tRHwh8n\/tqrTQSku44DdGQFxQeia\/Nx0p2\/1y6Eh+kFj\/pdzBrPYFJl96q22+jXh\/n68nnuZa7B6OxTGmMe7SsRCviD8dLWTgwPw193hBHPXbjaMtjCAI4AsI\/\/zf\/bAEY\/4G80JXXqldEkrRAz\/6DYZHUj2Kh2HwjKE5HiJ\/Ml+FjZL545KHj3pPorRlXpzWw4HgAlYORcAuTDMKA8uQM6XuBgYzjUzjqeXjWz\/JXNXR+FcA0nhIf2\/XTKzqNMwpVeDwutr\/1tkTz6xs8tmcuHJHM3x1IaffzxD4R4f2tRw74Nu6A6\/vp\/byJfOAInBaBqTK4ZwbTT2AogzmIsQG0tAbs88fXglESwZeWcATHHDcNh84rDkbEygOYavVta+te5ZyWlUkGPzGm3mDg1UcGj31ev0E16pWzBVtr4l2xNhe1Yqse0KYUD6lYJ+vlcFMlC6DbMrxMiJc9RWqqlaPe2INf2U9JhYTDcCoBnveUaAB52Sb0PsUZrEFuHVr9I7Yzt5AFxWnM284lCLXeWzOLlHGY\/4FMs59rnyQPnoOU8Lb1Gl2G\/iDufM0hnvk3OiAF0zilJ3s9IAv2mTbvrCjFtwfRkhzrwA3oK13FOCFA\/09N+85nCuzINipLaiUEK2s+bViJdAvzZuWaZRfLPyw2d3rostrBn7fzV70IsJg7nmkl0SnRUP63MAqHbX3gIQzS\/jtcBRrs7MA4UCwxQg5ZRE8CYVi7cz6eWwpa8Cy4yzCe81IrC5qAr4KPx8HoV16dQa1g8XLY2UxSHCA\/k\/guLGT6z1JqBDsKwFTMwXaO74e\/4uY3JN2ePAwnfCcwqHvBfzMQhgM3jlL9T6E77Df+nj87WB3yzMesyA+iNod06A0LTumK90ORSNeblvZ7c\/0UxNmHTJqPkSlMj0VSJPsjXAdEEbY3Cka4BB8ed3pdg+XAO2cm2XioLpN2p4DnsnXkpT0VjBP+4wg517oD\/pHlwV9UevdETTnd1m9w1bzb4WyzK\/7aFiPf5SDOectbc0d6inb36huDD+KrpbAI67KRI4e1Q17u378y1RrUjbGrOqv505j27czAGMxCy4Jwc6RHFULXqtU5UwXoomgiHxtRwyjyrrdTgbhtDMd8UZZ5ez9qtc92szk9yV4jLqVbk8VJuS4yTSSH3gkjQLhBysRzkFfZMQk80KR4BLQ\/O3HUqyKMWfRbN3EUX10Oxi1VkwkN86+f1o0CuZhxp9YqOW7tyB\/dTZEaHKv82HAwfCBmSwPVnAiuuLvEYpouaVMwEbPTYBFI99xG9tsg2k\/K0yyItn\/MWOijZRhBYjz8fM0","hmac":"6v1BQKXgFWz71ifnpKQQQeGPGOlmdu8XxMroYSZT\/kE=","created":1325483952,"uuid":"F5F099B210F248348E22934DDC3338B2","o":"b3BkYXRhMDE\/AAAAAAAAABgY9\/LZi+FMU\/4ddpd8dj8fvGCr8iXRYvDepKFGZ7\/reaoxv0uAMSBmScYUcX7kNcrpv1jf10IAtX2YtrMS1PaaIY\/oi9Ws9RWjI5Q7Gm5\/a0f\/zgfe9WUSWFtc4WDy33Rsp0wPXWzsuh7qp6Cd9SM="},"F3707FA58EA7480884BC6A662658E039":{"category":"004","folder":"617F428170E1455D9503EC75AA103859","k":"m+n9j3ulyOcp0n6NLWM2dT0xNSswKOTGBcKSZf0P2963eaDj+pZVEKUOh\/\/6Ho1a1E1Y2J9GTBG8sZx+rJCI7xt9ADONQ7ULhkSPe2APC3psC5T0Smpz2ZL44n64QSGssJMKaMlDsHU45NH0oa302A==","tx":1373753421,"updated":1325483952,"d":"b3BkYXRhMDE4CAAAAAAAACy3jlcycUCtAnGAye\/OaoRkd497OIPqGGRgdLGpc1Ac0kNA6IBguAkLQgInXP9\/Ekw9VO4C+nXkoruT9hGWWfzOOk6fWTWYC7B\/aQ7gwLoTVeUSBDFTaNf8ik3TM5LOVFYS0YYlEGAU5y1\/TxT74wYCKjq\/tIHVrM05Y+wHVtHC56CFXt\/6YMJ27mM\/qOhP0CAHqsQdJRORgtyGHghlTWp4xfzvzALKQJgSic5EnuNaCLZgQ2C6jet\/HFzyYu2qSb4iRkx25DGWuksK9d+GnGOt5Xj9Tfvfh\/l0L9c+0gBtwkxfJPbQCE\/hxsomzmZIVnIvJzJ+2oXcFpkI+6AIlcx71L+hYmQjz8nlMfbfml3Sa9\/w0zk3i7pncuOVtlXzegH\/KzENnOHxZymRUkAYfR+iiOWUxAQzkSvWxvi3sxq\/EKG8N4J6HCY4jC5eFuw+IhCXBSz\/4KPqhYhglGMj1S0QM40P3fvXyG91vD4gA18kJ4iTc8BfZWixtTktg+rVjigMKNlv8cXfv07MM2xA3nVcDkuE8VYld7jySQwKoVSGwK5yvgWUr9Z6VdKcqY8TCRtHX6sUd8YSUGP1b+JCn0qIBoF5kazJurkmGHN0HWuMO7Fp8DIPQURgNm\/JqnIrav7hZs3ZMeT2niMDWJLNuD1li68ivSX9jEOVCsD6TpVoXOrBATGr\/AoS44glYh06inoWxgB3teOwOZcc06LRH71UbT6tWt4WX9157+4DQ0pCcHh2Sw3SuDRxsBaQ1E5\/2T\/yp3WXpFecHKhqEsGZEbeQSMJ7BLxzFE4EUQWbMuooLRUy0LuzoNpfuWsCyxIYrIMImlvztJbNNlfdXZ\/pjqFRkGUzkFry0yDYEQQlX+6BgaIaN6j8TtMWWgldyWixiYNGR2WGClAJFnNVbby0UuvEqIDFKaHXTm10RjrjcVyRUrSIEAnN1ZpLNPi7bDTWp3iJP8GypFiY17jQQgoC7oIiVIKG77P6FqvRZr2JU\/oYiABKbzZoMDE3jzbLgLcytp0o3Q89qm8ixQ2DvwLT9W07BJxZ9lOUG2nJcYZNXzOzOrRoSdkqpwjax0LKswsr12THtvAN+QvwWQsNzKUIHDmOspHuVcI9lWJSiQWB+Uz6+wR2UMJixriz7FqdrAYmAsqa9C3F7IhsOYfav9gpsq6h\/43uIE9MQkpHspcBGHoi5i9b+QkLzjF6oNhmxLz+jZ\/rWuc\/fGhq2arNb08MxPKJe8bmrNkDvLCMfRVJi+Ga+DU9rPIYqrfmDjBRFUjtyf9fq+RfIyG6xRN\/6uL0DnmA+6mp5Iyk7RJLYqupelxpf+vF1YNPI\/BAwffW4GoK3abvNrgtIjL3rypmcyA6ZaUVrp9euvp7zLGsMtKpdOML42NIl0EVzyCvrNoa9Et1G5X95ZN+eeaZIDPOcPOtKaPK45oOSZu4puji\/hO2yGhthlsvmDhE1hm6o1ACgo4QZHpr6rb9X9YUbHMmKzR8dR1oVX3qzS2vuvU6maj1iv5OZnabEWdizKmcRnpjUyMyZY1Su9fp+gktr003EM7ysjsj1TxloBdxYcxn5JEzrem4BG0MV3l+o90lhyx+BfeXPEnQQ\/Dv6t9wlirwCUeYOOsdoMwXjFzowIyMfcfl+W9jgx6r7d2pLgTjThf7Nw\/+F30HZL0zVJuXVi3nmxGY\/6hP19yeCQFKDQx7bbuHsxIpLwqWh4P5pUomkzhGeJPAHAx9+eeNQnENX9rES0mg7cZOzc1U1\/SDeASXjAdHrxj06p9wtFgR1lhw3SEKjccELfP0PIF0tcErXeBiuanPGj0dvdpRkMhizk5AN1h26xemTP3hepLzxb3ACepVmB12vq+avp0HI6NQTJQyMh7yzNU5rGJXi4BUSXwi+MZzfl5WEXWTEeTqZE1JjPbkdwlSJwFXfjtIOdYtJx\/2TeYNDnCsTHtvK21M5C9aC0uvagNnjySqeEwK9YZvjoaMBFnpkLqiAJVpk7jeAsuMVSy\/7IZGopbpR5IUhG3JoliFJY8SwIIw2P+RFKx+fhZjwJKl+xuumXTs22uLSqajDXJspcxYaB4ZTvos6Od4ryXifdSFkjh+CrOn+LSVeK\/lmrMqxoAk6k05lhRuWQ1C+e798FKy9wSMNFC4KcEk1mWXDrkRam8tRJiZ874V1LNC8jDI+tCyfqXWH+VPJ9VWTcCGvXCrLH28qKUdABEjTGdcsrxulpwH0OsfSvDv9KNgoFT6hopbfLGMEm\/y6mm8mjXXUM4lHXWII22bzRZWYURZKsoFR9Kn2ei911u1Ocp22gcr5S+kbaM6NYdF3I31cEpLuVJp67LyJqNDz4YJFfVlOp91xyAnaADGSYW52VCOPjzcZPaRsvSPhnEzysIs9cVbFYvz6UV7PQLvqxRAfoV8odwtHumMzV41WiQ\/+D1LjmngYWRbT+W4Y2E5RepBXi+errOWH9RjH6mzoM154RK38UqW7H+3z2GvK10vtFdMYGpHWZCEZNMg8fb2EPgBr01U4Mc41TzXSVYQR\/M17oGOmTU51xahsgyuFAkWBirgt6CkSfc4h7CXTyhEPgYhcPRvCWz5+x1N97JykChjonwwaevKwvIrk3f6BDT0KluFGwiIAjJKxCoNJZJWljnUfcrdUquDiajCCZUX4yTsQrbN+bh3HOmn7rNaCrl8wL1hsjCu1zNWGP+xoq\/W7PNs7QuBtU\/a77fWjtafH9aCJaFOTOdlJYTcnzl0x8NHvk6OtSdiPPf\/eohtIDfWbfMhzWC8saUL1BNovLfGFmGeyaR5yOfl9GN9wPpsghMhf62noIsk4rW1ZSBqvI8NySai1pEkm2342nYLWK3ptbpxYiLseKzQJ3nUn60KZjb03+fadpbE8g==","hmac":"dyDETV4dtoJY6ObOQZMlbeygLuJLAn7qJmLQYV\/iLKc=","created":1325483952,"uuid":"F3707FA58EA7480884BC6A662658E039","o":"b3BkYXRhMDFSAAAAAAAAAMc3YaaY9aRpLJ6pTvh2zpTuYPE6E7drcD\/4jLFCpfjwbOGhnb4RgXxf0SJLqhOWjhbibcrx88xVR0wb5jf55DcHAr14d9yHAXHRBDLUvSBw\/M2w09aYYIJX1IuziJu2Tw6IYMNZl18kk5A+HcGnMEoHkzX6XmXNU+csR4C5Q0MHpmrm75TMUxVvnCE6nQrB6A=="},"F7883ADDE5944B349ABB5CBEC20F39BE":{"category":"001","k":"fwEzHy5Z\/KX89M\/0ui1W6jm3KLmqdZ6Cx6qBGRratWGVtsgWpK8rdjnzP9HJ8kERCZ4smAhTPJLLGBNZ\/uDTJweSnyR1ZjKvUfrh2nZEQjmjNOJih\/h9OdwjqVNoRhvHqIC5wDqAA6MmoDbpso8Z0g==","updated":1325483952,"tx":1373753420,"d":"b3BkYXRhMDGYAQAAAAAAAOqwscy8\/oxzwP9rnBpW\/mr8bwiM6LRh4vng7LcB806hOttQ8dFvnd\/PIYkqnvWTwZvLbxtTKk2WrcD8uNkvIztDNBGBLk18rrRcZsosa3Hsdsp2jgpI2iEvaE\/2Lk8IJmlG\/GmhM6K6eKwJ7lefAwGYp52bg0aYfSkB7xxoiffbcDx+Klia+WKV72LIaTAgjz894NBkbcPQ9u3mPXpgjlyk8a5SLnIuondnLt69VBOR81wNVqOxT\/IlpRjU6UAPQEjnOogrNvaGFH7j5Zgw4Px8g60U4ZHysa224mAral6mBK8PBm1Ks5p3y4tw3oO4sqwlpEA1DE56MS1UhstHzK4J4Z31+C06mMFTHs5sOpMKSpAqqghXvTOA8sgRql9p+NDAiSs\/eaaDRxfYmiQXVWbHvae2edLtMiNjUgxvbXhyvM8ENl+Pla9VxNYbg2s6+K7Ct2obx\/oQAbZpo\/h8AUbgugc3hTIvQuMw\/o2DoIuhtmbQqxyc99eeRn6ZUE03XB9pnT\/FM4AUbtgqprV1ebMlf8pS+h9R3zNgB4EVjUXftTH27jFhvn3D2sIIz4ZR2A7nl2KGfJLNjGRpN9LBf0qP0KziORNg1lVlEMwGcAYm","hmac":"CUavpN2qu7Kz+05aLCHNDUYGrsp0D0wFGIShzRdefxc=","created":1325483952,"uuid":"F7883ADDE5944B349ABB5CBEC20F39BE","o":"b3BkYXRhMDGYAAAAAAAAAGRUHVTI1ig3dPmw3gdUasxYzglzq53+WXaerBgPS44zyc6fQEOjLHfD\/qP\/uRqwQvuW+PlRC9gKqFoTrptjy\/ImutcydczWYgEp333LL7KMi7XEy5aJmxrITgHytmdguNn380ZmygliXTvWMZm7N4TkkOPWZ3FXRSGoJ77XEQDmexwJsVdoxUgATnYUwubBLaybVJkcVzGGeAeeFMJxo8Z\/wbsOWV84yxVNRwW5kLyO73x+WMC0zAZG1utUy8qNPW30II9Rs5KRQcYa14Vvl48="},"FD2EADB43C4F4FC7BEB35A1692DDFDEA":{"category":"111","k":"G0L0iCrB6JMFIx6ZwUEAW2UKTDx\/aL0LTZX0EcuPCoU57RRIBRgDuqEy+U7tnyFXYBKc9WDV+cHDVoDpmqTkuHhiYS1t9wR14qVt5mtFMz11sxmLkV+v7InvRE8YzlURVFyuiuUEWvIKhW4rGID0ww==","updated":1370115699,"tx":1373753421,"d":"b3BkYXRhMDHsBAAAAAAAACz3bCFPhL4eK+SSnXE0eXtTyiwpheBzq86mnRW4zOioqHB6KMFfr6yeqHByoAegxYwwoyw5nnBzCkSI0XNwAKIJvRvQq+ObMWT7+WmLvCw+I5DSLN\/+vuS43f7v5IH3u\/UHylJagWPiumCDNZnKmVXQh6J3C0B3VrR8t+YV55lOYgtWMKqwlpK5BRISjO3o6YZolQ5dKqKILiaizHBEru0N35MvaYiTRzm\/n7o85qAEDpr+aw\/1Yjp3sGn1uN+ErRckYTVjd1\/+NORb+P8ZxK\/T7QNpj4tGoWZ9u1UByKVYES+3fkRvB7AVsyLVBCKwT6Yv1D4OmNJ8Ph+nch9JsxotxA5UN1hlDmpLm2yL+dEM3az18sQ1+hlo4cdpRuIxCgBLmEhe6uPnngGuXely1RPrpmbvNJHx5QOZ4YIQTtfnKHXEgf\/e52kVSX3+Uz+\/llP9RU8cURtezE3HUbV\/9cM30UlT+\/kFHAu\/wQVqM6p93Y3KZx4+dCsATkvphIr7t5Zz+lfY4a2BIdptX7tUYyRuhbgWWHtSJVVvztuPbrIhj3qZ00m2YmFtXxHpyyh8PWcTliHXEQMCCRyYvAFEwSLp2B0R+cUXyiAu8jh175x4BUoTgJMOODnVv2vYKW4xGzqm09hXTG3S18ayJ9d\/ndngB55JDd3bMk53pTvUah8Rl46p8pHzd+99useAgpsCIv6RngW129s5l7nEHkmjmX3xnJk6M6yf\/1R8rTGjhlpIsODDTn1L0pJQB9jtJS+D3cySHeqJ6M5sJIS36DA2Oo8bqbWDbW1uzQT53Fu9AmnZOv4I5IkcdsGgAaWyQCsDptNGp+YlE4361wEXYLklTefkrno7YtXuCpTKItEUCyWOgv4csIzTBi0IJVBQ2cqwc72VWonXWRE5sMhKAQx1xe9GMqbUIjYvJW5bpYHij7y8SRtdDNJUHsK2P2qbRflSa7WbGHI41qJnQw\/fmnHwV6VgpGl83wl9rEM3qOFXffZPIDWQ5mt6SAp2244a4a3i3XY6NQe6MMov6yFP\/DCVRJtGEy7OaOioG7c1G4zY+VOIXmsoStCwEMBPVpMZz9hJh\/N\/\/Hug\/4t08btFfP0CY90O6iQJ60SwjAgwQvpumEhGjeU7toSI8ReIsHDIaKlKblw+EpuV6AADys0fPHxodic+z+oaK8y+p7B\/PIW3ytooAleEzmiqnPI89Jem4N6zgpyv4xDK0jdY\/d\/LLN+7\/FqKjd5j0mJloApj\/5V+cpm2vyCPW3t7Prb4WKlfTLbTh7jwxKOBztXfzw3EzF\/g4xpLRJ6BRiIfAM6aCGR9HKtiDjHSvb81XECTLCsCVXW7VfUPBcP9T2jgEI1pR\/Qux5MHcGR02lqjuJmd40zfLB9TRTQqGUfY7tH70QAdOBCLseNTANFizbugu70I1MqlTBSmQ41CGW5SWHQ5iitAGoYODSpoGp5egR1h7Q3NweknKLwpRQQqshYcu22SyFFk3TsFLon8mwckhOcepbtsNZuF021ZFW8o6\/\/L3eTBZStU7aZe0CScWzbLK\/+m057zEy\/cFxPhcXpNpK5gAmJw7GkVZCsmEwatWbTaUiycfgmV+EADmUPMR54IlKMySsLCSiA+lG8\/S6IqhceCUII23NLZ8nlSlL+\/NpZ+uBVVb9QoERUvdAacdHTX2clrwHV74l51JaoswDWw6Lk7ny\/VTG9bijbp6OhMz7yCoN7ec+XIYF3KWI9TAXa1cERLSqXKOjI=","hmac":"jnwgVbZzxznprZqhlBpIe1btAc0bEX2OsuTMjOUVj2M=","created":1370115515,"uuid":"FD2EADB43C4F4FC7BEB35A1692DDFDEA","o":"b3BkYXRhMDFBAAAAAAAAAE9TT\/jOvqEv0b0N2k3f17qRVeaknpZsmka8jOntpaHCjLINsJkYDslj8XK5Y5vXOLFzFyLgL3NdidDWGgaqrg5hL1XL+90ZJpLbLCtNhlicdYzUzXZt28PtvMzGLpZqWJOlYIqiIn+PjQQsn8Yo9cryI2UkssWYr\/\/KpHSpcEeV"},"FF445AB1497241A28812363154E1A738":{"category":"105","k":"Tlqi7ebwFFYMvH1pe76LU+RmWUXkFbjS2lMwNJELGYrHCvhXf3DwJ8lJ2yEReHUz4EeCYymYGKG4As9PFH+5LeOiUD0IZJZCBZFEqf6xgqwLkaGgno3EbFMZaBANg9oxaXGBQEZhizZMCYK00zcbsA==","updated":1373755465,"tx":1373755465,"d":"b3BkYXRhMDFGAgAAAAAAAIwMlBAM\/WYGiSbR3UCrYG3bIqjx1jijY4GqwWY0ylXOCdOB8xVDi6LDCq1pv17mwNlhRzVcTSL4WBzsdHFh3rxblyIiUGtxruvnRV2u\/yPrBLKgsTR1cdF4FhTgWvCyJ7AOrlgY11+Fa3ExjXiPTn7\/FEiOHu8safR9LyRpHKdkW7BcD26BbNCMLfZduO4MDeMds9jTZRZnn3a+lzN4SwCRl7oXpMDgEl2kUdeN3UJVenpHS1hIHzC7miLYSQk5W1h4CXVdEbYSK1u8KBoZ8IRx1WmBBMcUg4h8+gQNIHDff8t9lg8oGWqmNFsNK00\/EkvVleOIiEuwmmb\/FkC0kQGLu52\/Gw03\/Kj3UsC5KxqAGP7ydpXuf3Smyklze+8+q24VEUqs9k8p\/aKkYIWW1RWUd3bWLusN70F7rjNv1sP3UT5LaLybJ+TwepzQV50btqDy35gWtDh2JwWxgqkog7MfpY8baM5Os\/Kd5wvROcP\/Tb7ChhKDF5FF7heSdyQKoDBzbI9u4jvZDhvcJawF4rU8E\/p8cQiran3ueCRHGmWm8DffRHOn9uS12O5yWPPlBM4EWbP7B6JSWv1EtYETCXlq7YzE22xan559zMvvFnEwCSPBMIRouu\/sHfG7UVUA3gg5H\/cuhQYwS4Y9c7pOAraZVhTc3O\/1IUspgiNzN9VQ+U9pT5pNwuX3TBs45nEF56SlxPpWJ+ICUUcQqUKqyC2Y3D0m2KY8yn+fplTZ\/+u4bM7WBEUihL\/dBcmGrwPrpLXi98iVGuHBMLflP3ZigYGagoUX5+OxGP5NDLxJIAVZzpx8sSftRkk8NaOCwQ0iK6vLAyojmkY5Tj2Xc62aWT8=","hmac":"CapriDUPvoQ74ZSxmvSFhaOUs+iYaJ8cfkwEv8XJTq4=","created":1370115718,"uuid":"FF445AB1497241A28812363154E1A738","o":"b3BkYXRhMDFFAAAAAAAAAA+up4RSylo4eV4ZhWai\/wfDemjKUxTJ3v83kNYX3jQoLAyO0Tu0QjSWEpDNZ4YsuxClGlGDgmBChugQS\/7SSLzopMBRccI7F0ED6LgQs1\/MBvOjXovrWFFt9OS9SIRuqPeWeK+gVyHUp\/bvQ2Fy6VfHOdwF+CgLEXvl8bJCMPR7"}}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/folders.js b/tests/data/freddy-2013-12-04.opvault/default/folders.js
deleted file mode 100644
index be2c74dce..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/folders.js
+++ /dev/null
@@ -1,24 +0,0 @@
-loadFolders({
- "379A3A7E5D5A47A6AA3A69C4D1E57D1B": {
- "created": 0,
- "overview": "b3BkYXRhMDESAAAAAAAAAHw2J+nRQ2h7a9jZ8kH4ser/wKowBqgkJxv+RPujmrB7X53ooYk2wxyfiM2par2J44pCxLcNesV9F+jFCIecxGouN+3F033Ktzm3fKC2pGXy",
- "tx": 1373753421,
- "updated": 0,
- "uuid": "379A3A7E5D5A47A6AA3A69C4D1E57D1B"
- },
- "617F428170E1455D9503EC75AA103859": {
- "created": 0,
- "overview": "b3BkYXRhMDEUAAAAAAAAAETNJnQozPInk04UjWvSpyh9PSWcFbetAzkMB+Sh36BPB6nk/FyqwEp2jeuMA0GTuZ/6AChqo0DYSnj3F6E2890seFFtufva2t+j7CI4Ft6J",
- "tx": 1373753420,
- "updated": 0,
- "uuid": "617F428170E1455D9503EC75AA103859"
- },
- "AC78552EB06A4F65BEBF58B4D9E32080": {
- "created": 1373754128,
- "overview": "b3BkYXRhMDGQBgAAAAAAAPk2tT/+vjtAMX6wkwAs8gU284CfdqWHKsN9kFXY40rSTv4f8E1daHNMt2hLAbvR3BjP29168o1taEIYcXVHaZFdYTQ5yl+AvSn+T8aqkQ4sPrggr2Zi2NKuo75Nd/Cd0cnDGBDE3y4q7Gqzoo/Hr0mSfjJFkIbg3PEdY6LRLR2rnHBiqKAshdVyKBXO2maK0O8M7a0fGQN5OG0iHYW8Fo8gJcfBzfVDaUaPhZHj630ONuIVOAXhk6zobzBuYEo9khv1w0ueBrJqvT6jiLa5LhwPfhQmGBBc4scBqJqXFEB8lHoj01V75wkyn1GgVo7CGoSqEbaogFYoa6F14rIFs5pJ3dSbK5qxrz3aAVVZsJ8ouq8fniiRPUmaC/2f2PCy3EB2P0YtlAoE5/fxobq532a+SkAPey5fPxrS7kdgZwBf6zqnbwe8/pmmcNviVxuDz9/19c+Q/UQu0nYg0MS0rnTb3Eui3/UZBMoNkUT9YKKSS4ZZCLEvq88QYCrDTq9OBIMYDyiq3t6Jlq2+ynz9V0rs2uk1o7UpmCr7V7HA2OH9RmpEk1f6LGf/dPocvjPpUD4RR/DUD69EhwCWNkkC2PjE5cRLNnRMjKwb5rhxjkihr9/jTQMqKJQT3/gYHtfZguWrXy1xPB6UmxLv0mwY3BTw+PZa2q/znhyam4xA9Jf425JttoaectShHyMTwsmlcHqkeMLvTdodgOsNAHP+rCy0uuq6CUOlZrX6BRbg6WBs/kPjL8Dg4BwHBw2wh7XvkJkLo8eyErD2jg2Dd3a4s8jErPRZEmDbQJbVYut9fTAJc09LAGAS4O9hg3Esvl5yEhQrC0zoRtHpm/eHKRy0uDTQm5+EhmEAX3zyWjM7O/BoW3q1ZrbVkgmK+814jBzo2/agpiNm9/ZDd7PJkZU1H6M3FMdPamx5qxe7rnrngaxnVvjL6f+1OgYHJ7Zq51Y21Mx4We4dwHU+czMpCcJNoaLtQ8ZBWhNpAYWey6eseazChk7HS2lRSQYdocIgNeWrziXksTIuMBfUsmIGqqzzSda3oMv82Tz3eKKSfgD5MNlB4rGxko9WHZO+pXYZJjhRIvEUTSMPwntfyN9jqZUKgCZgfCI0TjS8NHxzCnuonfgpzO7qNi2kG1U8N/JWf7IfVL5qOAHU5YwzDOgiDAS3Oy5CHvRVvNyi7D2EAP+oSgn9CfsK0OhhhyBkxygPbuhdvljIqJOhVItOtNYJYXeY3QM0Sb1xE5U04wA1cySTRwsiTMO/k5HyTU4V9WySQAB58WtneaAciRNzZUnFdhwC9JlkPNgyZjBrw84wpjdxAbJK1D0T7Kq8l5w5FgwVDGq07JsmDYx8W2ReyuwkLNq7oaSwj+wTpSy7uqVVafa2RoFOLVWNyPnrwHYgF65emnO30ZYYda0wVrOPVvoHB6PcftWdmnBPY2ktd2eGaYeEOE5Vhf26GMOrdbkH0aM0jDLEmFE/O3Rw4ILsRpLXcxxiS/y7MlEAuW6O//sZ9Z5/CjLfswBs9zU+EeduObgKUN78AsPXBzGHcY4QymlcUwMdVdptoa5rJ6+dzrm0l/xyqiAQWhvaVytc5zDXu1b8clfMe4xQEVAxpA5IJXXWUIUoxHEbG95P9rjVeY+Khgjcw0XMkwPBstYka1aZUKe06Cp8fc6XC59Ti5xQC5eywjfNZwHfXNovTx6jeiysDcuyTkDOqG8+B8ls+e73hCPbBljV+dIijAY7DY8+R3bziCRNX73PLH+LfLGBll/IsAY8m+Qoo5jT6t1GS6mVztnbNLwL/NPrOW1ZeEXvO1gR/b2WpjyEc/dmIo6zg8qbYxMRwyAeR7RJf+eRJ/AVj32eZPAGDhhqaE2QAdNvROKTZsLhchTJBN/Xk7oZPrCT2rZ6cJv8x/gHwiyQwEL/g4gldE9/PPFZv39XPEvA62jnHOyzoiToo/FMhtYxCKRxHzvhz8KcBXp5eW5hQMXgmUPouHTtc0S5+rMwKbRYcqEvkYHMWNyU+0gEOWTbvf7OLvFl37c4hCHencsGSeTzf1pbENjO9nx9nV92F6+KrSYXnNJlXUZvXvivr/wnruwf1IDWzPAuLRHfLiuXyPde767du9RVHYR7KPcQcLAAApM9njDlXyMRhW1vK8G5t/PvSdTcbk+lMdeMkW/DhlYWSJv2dOe3x9aFpvLMnP+P8j5XIyMFTDhopQ1LvUIGwFu6WjDpMIo+i/3sK0q4YFOhGF40BquOMsE3Z/Jp4xMRfoq5IrsL5vdOWK/NTswzN5zDOQUcLEgbm+Dt2jwciMm89XbiaLNTfdp/VLlY8M7PGlhsZC/RKBM=",
- "smart": true,
- "tx": 1373754523,
- "updated": 1373754134,
- "uuid": "AC78552EB06A4F65BEBF58B4D9E32080"
- }
-}); \ No newline at end of file
diff --git a/tests/data/freddy-2013-12-04.opvault/default/profile.js b/tests/data/freddy-2013-12-04.opvault/default/profile.js
deleted file mode 100644
index 90425b5a1..000000000
--- a/tests/data/freddy-2013-12-04.opvault/default/profile.js
+++ /dev/null
@@ -1 +0,0 @@
-var profile={"lastUpdatedBy":"Dropbox","updatedAt":1370323483,"profileName":"default","salt":"P0pOMMN6Ow5wIKOOSsaSQg==","masterKey":"b3BkYXRhMDEAAQAAAAAAACN8JuE76yN6hbjqzEvd0RGnu3vufPcfAZ35JoyzdR1WPRvr8DMefe9MJu65DmHSwjObPC0jznXpafJQob6CNzKCNoeVC+GXIvLckvAuYUNSwILQQ1jEIcHdyQ0H2MbJ+0YlWEbvlQ8UVH5bcrMqDmTPPSRkbUG3/dV1NKHdgI0V6N/kKZ737oo+kj3ChJZQTKywvmR6RgB5et5stBaUwutNQbZ0znYtZumIlf3pjdqGK4RyCHSwmwgLUO+VFLTqDjoZ9dUcy4hQzSZiPlba3vK8vGJRlN0Qf2Y6dUj5kYAwdYdOzE/Ji3hbTNVsPOm8sjzPcPGQj8haW5UgzSDZ0mo7+ymsKJwSYjAsgvawh31WY2m5j7VR+50ERDTEyxxQ3LW7WgetAxX9l0LX0O3Jue1oW/p2l44ij9qiN9rkFScx","iterations":50000,"uuid":"2B894A18997C4638BACC55F2D56A4890","overviewKey":"b3BkYXRhMDFAAAAAAAAAAIy1hZwIGeiLn4mLE1R8lEwIOye95GEyfZcPKlyXkkb0IBTfCXM+aDxjD7hOliuTM/YMIqxK+firVvW3c5cp2QMgvQHpDW2AsAQpBqcgBgRUCSP+THMVg15ZeR9lI77mHBpTQ70D+bchvkSmw3hoEGot7YcnQCATbouhMXIMO52D","createdAt":1373753414}; \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/30B6513EE64B4DFE9C47EC2F257CE296_34034F6E478A4D4F91CDBE0A077E2128.attachment b/tests/data/keepassxc.opvault/default/30B6513EE64B4DFE9C47EC2F257CE296_34034F6E478A4D4F91CDBE0A077E2128.attachment
new file mode 100644
index 000000000..984591c6c
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/30B6513EE64B4DFE9C47EC2F257CE296_34034F6E478A4D4F91CDBE0A077E2128.attachment
Binary files differ
diff --git a/tests/data/keepassxc.opvault/default/band_1.js b/tests/data/keepassxc.opvault/default/band_1.js
new file mode 100644
index 000000000..18112b898
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/band_1.js
@@ -0,0 +1 @@
+ld({"12CC60BD1B8F4AA491F9314B437DDF86":{"uuid":"12CC60BD1B8F4AA491F9314B437DDF86","tx":1587220003,"created":1587220003,"updated":1587220003,"category":"003","o":"b3BkYXRhMDE3AAAAAAAAAHeDMx1YURuH6/Zurq0nTC5xiK/rzahE6sOekU3bCOIx28+t8VdStuudgcDfYkqu0jnOpv23UF6cBY2pa+iL75Sv9A3tBvYZUjKne8KHC3TJ9BxLSwY/yRUL2vegxIizjCZXef2pyyl9KSVrYPthcMg=","k":"PUl8SgjrO4YcDr9dCAwNXQe0afr7mMnwIPaQpZXBhbMQdZcVtHkxThCxMRSvMoyBCISjdhuMreplGM4ySlptHSm/XmSsNa8CJguktEKGh29zGji5ET80ZTI4+id1LEv2h42Sq+vhN1cBtCv+kgTovQ==","d":"b3BkYXRhMDHfAAAAAAAAADZZa6s0oMMIcGRxHmlfLwWQ5mdBgJG7K+cOiTJ/O8FPk+PePGeXVPItwaIZuV5RwdHtWGDi5v5m+R6Gcpz8NfuR4cVzacM4NacmOXSj6EnS8h9A0Ohxah28tvnr8m6wVijXV84UoeY/PT0+KQF0gPA/9L9IxoTWVyvOv4hPy4M3Ns3xicD65qSpygOFcpSRB+k3MeWBUf6qd6N7chzzzhJIZvtq9Z1yX3/s17LhJAvCGjE+kPa4JwNFYhv7K7lRYsOxHR5lBae/IY+V1k9zpkkdG5HHb45FY/7Y2WMhNg3StdSMpirKf9eNbG6KBs7nwlqpyMCUVJwYbPgDzfVaFlTEWyCzcY1EKj3gbtkftUp/","hmac":"iJNVqxBtgSot4Dkm8ikGuNSVES/ezYDFog2I+CPPZNk="},"1211EB9D74FE44CAADA3805506E482BB":{"uuid":"1211EB9D74FE44CAADA3805506E482BB","tx":1587222330,"created":1587220519,"updated":1587222330,"category":"005","o":"b3BkYXRhMDE5AAAAAAAAAMYfN4HdkiD5MD62wxEyB3dh3NmLX0HRy0Q84ZtcpVtec67uDaQsSc2McUG1tUvAhwfR0r6zZfmXnpijH7+6lmA85KPLABDKVvA1jcWPnAL2ydpsdeGndypQvcmQnV2uFVqjF1MnhwgjMKE1XH/w+hk=","k":"+g80FTBAcAQiVmtKzhnLCuA4/7KfoUd8rwM9GTkTk6zIAhET/g1CVefIxycXF3x6xIQQrpv95hcLEOz75GKp3bPOZiQUye18TARQbYotXMGPDpssQ8IpC2ySWbqUEV2LsXoQsd9MxYLBGN6xd8I+vg==","d":"b3BkYXRhMDE+AQAAAAAAAOXgmV82kTQSxhEFxaHJh6SkJcg0eDAJkT2ZtLHuJH2w2kcqdT7SdGGx3NZFv3Ulwuvtmdkr7LIzNabdqIt/crhicrENNmc6e8MqltGqEg+oK06ZwSCngfn9CsTqO8G17dPuWS960+OHwdMg6t368bvpu8pMp3uBXqhUl+iPjnneK2s3c1UMHYlfcYS54mlFWYLK5sIkbkB7IR54V34hGlbOtVJB75Y3yHkS9KECuDAMUJZthzcP8RnvnzcE2/rr4Wv2J3bN7b2PkjiFbiFchSN11+jStKZ+jwisrcnlFT4CpyPCRbBeMSldO/18uQUmRSlTTCZkYzfzKWx/FHBiMcPATSxcBmJ7dDPLmWhHuQ6+W6r7Jw7mRr6KJsH+1O0Vd5l18QmrQGF4/JwZxjuG/VWun3OR7P4ybMh6Q6N/iw5vyuCaATlL1B/dHL46qy87WeWKe5BI2IJRvYFMf4/rACIEgfjXYTro6xt2kHIByRzf","hmac":"WND1JCTOhp/t7hUeHjaCxMGS7stpp+4UNFJRPTqED8U="}}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/band_3.js b/tests/data/keepassxc.opvault/default/band_3.js
new file mode 100644
index 000000000..3a39e21f4
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/band_3.js
@@ -0,0 +1 @@
+ld({"30B6513EE64B4DFE9C47EC2F257CE296":{"uuid":"30B6513EE64B4DFE9C47EC2F257CE296","tx":1587305737,"created":1587219027,"updated":1587305737,"category":"001","o":"b3BkYXRhMDHDAAAAAAAAAFutxJPo03S8bMnjhzjYZ7ErqZWTnHHgMr/wDnyb0TxAlXoI3Ry5G2uLxI599hn3sQOAOs4lvS+x4nfhGCxKbV5Nr6bA/KG3x8gTcMMdk33qGiDZQK2g4yjwWaV+ZfzX+1HSWoY6RrIUkhTr9O0KnX9ScYtN6S4jdEhoNkkcIh/WuTuY0N2tcLhsRWqZcIiLgfDKwQfORWoEF6jtShMS2i2yxJKz7EK/sZZBk9Q/vzb45IgYElmxazcvO16DlXfO3TdtNotfmhB9dPUHg2AsVr3Rr5/I5GxAw8HbCqvBqnet3EpQEm5bRwEWC/oJsz8flkVsBXPpjV9Oij5xDZzP/w4=","k":"wHLcos4S+qcbEA/2FhK4iLHX2B4JKawwTUvVhrzYWzBNOUF1uTH25OOAwXYySRjDlqdsI/EZLETnH7Smui9s//1YSg/98BzfGRIexHxGyIBVbt8M34JmnckGK0ATb3w6FSlZ22513kDgacBqNyPEqA==","d":"b3BkYXRhMDGhAQAAAAAAANiBG59/AxsgEEnNTDp0SOgkI3v6/Fjcmqp+ZSWG6m48MbN27vkcgndxhK/js4JM7q6hPAcXVtd5wRTk5MzfxEc4oN1kLo6MiLlsFBzbLimEOo2UebOkb+WO0HxSIE6U37qsWsMNfHl5VZ70za3SJSF1ef8TRXae6Ky0ceqO95CbNDCoSkfbDcbsFvXpIDz8MQGjf3aNCxgKtngAaDe7oCuU5lj/B0ccM5S40jv444p1nk+LNEgg2lhMhqojDEHyAK2O3IbCm2RjsjpmtOYjwzpDuUrLIkrGf23o46Pa1N2VPUDCJABsKVatc+1o4TBie6/I1/w1X3sqaTmhJOBFJiQt4tRhNpHu6BTIaMVG2vx84C0k1u6X6xJqZz7anidD3z3CpIemzhXJLWGSCspgDmseaZG52f/UwsGWClNEA3LWVhq8wtTucWDa2oT2aNAITvZjIsFhvYu1745r/HNahqvU0bUqsOHU0KkqMo+QP1W+vwZzdJban0soy8bfftxUL/wO3+4SZwVY83rBX5jiEBPx1rv0xoNA2JkAKAuBEx7OTVRrBNc/cxSInQiNEy/DKkJZf0Hga29VpFciK26/934E19BXlDcr3Qz3VZAQNWo7TjPjlF3l8om+PzwsA9em+Q==","hmac":"9ENq75MLY3CqtFnKT25TsH8/egP193seX9Lwo/reiZ0="}}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/band_4.js b/tests/data/keepassxc.opvault/default/band_4.js
new file mode 100644
index 000000000..a46405675
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/band_4.js
@@ -0,0 +1 @@
+ld({"43B445C591924C0ABD7770816A1E8514":{"uuid":"43B445C591924C0ABD7770816A1E8514","tx":1587220744,"created":1587220744,"updated":1587220744,"category":"110","o":"b3BkYXRhMDEwAAAAAAAAAIfVbU72+dJx1y/RcGpMV+YIgNlqfZoZG9gXKsR+AU7DH/sFzAQtxDSrZPy2+Ge9FR/IaEBzN5KTL+dfKoH2FFnnDCvsqHsfjcckKPhZs65wOgTbdZrN/1WsoX95XIz46Kc8tjChPj1rfYxQFY0evjA=","k":"GmHOYWiRbqYnept+bMrFTJURVyM+45QpAkOueaURyDcwNWCfHw194JgaV35udH8aKR3k8rP8TPYwaCStWR3kDNJG299T1lZNdT3+1MQHGQlh25iI4QwfVHxnT6ozozluPz3vDKtLZww7TcSoZOSBJw==","d":"b3BkYXRhMDGRBAAAAAAAAKuLNpnCj4T3fA/lU7HWVd2iqAqmJhuF+SHeCSUsHl+BKQJjv88JhtzkjODuThbktFkuBCtG5EtPInnMvzNl1lR0URVTfFoxXRaff1UajAOCpYLXIiYHyzUv60ELgkw7x+xpb4uwqDNdEs5YQQCsmQOTvyuKBCjTvxctqTZQBm7NZ9zhIJN6oXqW1+JpGgDEgbnNGla0QInwXzHMp63Jku40DkhtXvAiAIR6sSz6/7z8zVWtn5qkEX4CbSr3Su0FxTar1LehRLOxZjITiUTHvN9FFR8vJ+6pLVLUsnEgYDzTQCYL06C8ZHdkeXNTiqodKum2QiMLpgQ0FNNQfc69p8jbjSeN/KSRmBGN/uiFOZVUqiAazVVzeXfK/sk9c2fCdA8vlAjD3v9TY9hI8EELUQRoVHxHe6u2DZLtb51JeTbuMXOUP3Fa/19UZRQk1aqYlS/YyqKW5/IoHeoRdVdQEeXDNSCM7FOCTzChaytBowe4nNiubkNsu9HFdNP0AN6qnZRtDiycquWctbq3kEQoCl/gK0eYmNFZGCMKdqPt0xV3iiU2Z1eZog3OzAFc3YCMKu5jVpktoe67gncZxEClQhkuwVx8EnSwr3+uVWuhvqs1oPmPoKd+BWE9FV0KbG7xUUNOq47IB1m6it3+74p5mTvTNo6kdr9BpCIr0WcdIvnOdlCgm13wOfQ7750NE4eGN8Ri7XIZHO0bZ20mQGUGnwcRHf+9FEq7JVKZ2VghE4FErzDZFfZhLs20u+uuifMFA0nlQOwy5SFe8TZQRHJyBggTZfwdOcQQJvaR38HlAxqZbWv3iLMj3QRPW8yaYTSo2007y900Osh9yJcmcREPbJzCelnOPlaoqWycZk+kGmjFaVGsN+JS6IX6zihreTY7nhlyax7Uutmj1NOSlChk4j8g9aJU2QOAe/Fli/LKzB5BTkwq9CYujtP/Eb5vXCmgrcfBX7SeTWPsP1dWOh0gGetxewI/M1JFetOsb5bgBzOoQ+QFUbPGkiP4QWtQRvK2wyLAqGxsBQ6HAYKTwpwnI6K9mnhifFW/Maq+TtsU1DqaeAHWsj7QG9djY98ePFviMXJ1h5l/JH8o8sK2pvrUCqoQn4lnxyYQbYixh6cYV9fAsPOcpM28CzU68OCzwuwlB09S+1GIdQI4KheFDSTPbMfygTk1y4Xk3xhNKhKPncBYb2QjJRqaBkknQVAUtUEys5pqfc4cOy8FhEzglc3cgyYIMmzOAHnbSrMLv9JApYI5McE5qcb9iwezTzn15+gQAYOF/baor7og/yZMfC1k3M22ARUWIH+b2yTpi7nNW4G5PPpW4fcskGLMz43cuJ4APmb8FS8Mq25+eaP7LWdJqM6Cd7KWbsW6yzrbNZ3OWC6AG9U/hl2esrsRI8ivCXDccbTHAkx3yO/dSXXkiAQb47TNoxyaFOkB6UOeQ5xZUZQNr0qA5WByL8poTUseVfZPJObQfh3CmyhmzNAUUpKPZtL2Xa+YFZv5BgRKNggSd4msQx4/P+oqkjrDZNNyfQZz4yY1UiWvaIWJDR1afaJHvc6GTWwG551rCgJCOqvblFskrlC/Hj6QNy2+Npif+8WfRQ9IeBRtpy2epkaWAFBm1Gz64/RXjIIoDKjj9PZOyWzh","hmac":"g1cH7fl6zTGkNaw22nwmvlHSCGDADE+PR+Z2c/C6UCw="}}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/band_5.js b/tests/data/keepassxc.opvault/default/band_5.js
new file mode 100644
index 000000000..120c22978
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/band_5.js
@@ -0,0 +1 @@
+ld({"5616842BE45D47A88FFE5B8C221380F1":{"uuid":"5616842BE45D47A88FFE5B8C221380F1","tx":1587305476,"created":1587220492,"updated":1587305476,"category":"002","o":"b3BkYXRhMDEzAAAAAAAAAKHzgTjvDtmfHndcJHPmdaIvqrvtzMRqHrU5zYqQAOmHWNlflZ1ubIqlNUpuzkchFeLgKhlPUwR5oFlYvqqW2f3wKlIdCHJaAuLPlxUvOLkeAhfwohM0atofxj0LWAZQXUJ2VCCauKtCNZ7hEEt+Eak=","k":"CrJQwF3vagLSbeF/FexDp1na5OhRm85ZFMxjUNOTmDG3JOGNgHlFaRjxnANHXQD6v2wKThSHd373pkHz/xbmSx1H+jpdYR9mEmWKtUoRylz1a09nQyMlu8tYc/unTRILsn1ogDGas9bfEJack49k6A==","d":"b3BkYXRhMDE4BwAAAAAAAPXZ61dGL1fDsIIVC2Kqp+9Yf9wFZmJtAREetpk9U3YZJutae1k/kSkUCvWjw/0+5JHDRAgsvTS1Z3nSGyeG5Gvo5+VFvGX8KmFZ1fdDlzcjxI4XHpdLt0ljVuf0LaW6McnERgaxcg0da01tJARhSlv/r6of385E2vxEThVMhj187HMasgThNoGzZgHbUCyUKbgIxFcLmiNmONEG2vEABBpkixPIKcTuj6raH4nHxPB8v/rGMJPanpeccDESdgwsWqavpwu8kTn4fMGvCt/KPtEpoUzdXiE+CVx1OfpDTeLG6PPU4kRLyWsN2I8cfOg9eBPBeHfrkC/QJc1l0unSppXEGFCi1EY+ozV/C0rMK+JeEV6LcoJxxeXD0FtHJ6h1zh4klnlp0pvuzBiwEvio3r+RpyPCFKehQEnErDx3u2m24QnbJXKiiOfx9tcJnco/d6TT9x/YV6d6vrp9Z6AMgyU6bN6MvOLJxL8eeNXvYlTtzV13faHAC/RCm8gqPKMBRx1kmzBrNJxFmK3QSgUNX3r+A6fsH5VF8SdmWuUoHNwIlGh1/EVMTuJ9xqhBMJ0ShzD+RfMFFzQ4594cv+q2qup4ElrlAtD4qn83qpZtmhZXtkDJ6hGx08uI9+Hduo6Q3kjlln2Mxsg6DQd5XYKqIHlL2Ds8qYFVvku5PlBp5Id6+04jzfOIXMP8s2wSJr9EOR8Z8gM9Heg4z7W+VmX52ZzovWqDH8BIJeJDB0ZynlV7Tn0AwqcJaBakxXT375+YolR1KrBDFIxZN0drRKzKOvNA9MvKyzyaIfGU+9s85Bn5v7I9vE0t0dVXa/sMLb7hYdXOHqDzdpXeSfdSPTfBzQG6qSIZm/YkxCic7FCf/DnQXRlTKVuG6Wv52VSLzYC6XHOaOV5vHFWlcdWFSSRo60JjgI/eCxVi1SPIX9Qn076L1IWyjJoyhPjh8CGw5+QMPdUjPPKSY3JZTcWeSKIO7ExMM7YFEBveP0+0hckQQ4GGptc1ah6QjUNqfdjSFCllG9ZuEFT/tYS9k7p16CXOGZk4eJI/sUNrDOLCjXzlTaKS75YXr4gU1yTc4ZpxUxP4wRnDRQ2WK0W1b1bbQeWJ4LozniNCugJHfFjHzyfW1ZkK8CE3MIiCvhBzfmMHWubyoaKjpVxNo9rARV+tbRafByEQwyjWUnePT/z+XoAncuTrmt7iQAESfjo3ZQGhmbHynj/WrAKwvgbgAthvkXjYG9dThJSJgeoqLd3buVUK612tiBQRibyywhnBbM8tGQebHDy3GyIox5W/vgCuNH9R3qiDKWt6y9K8i4tXnYzGoUKJdMUzMhgiFzj7DlGhb2zkC7ve2W/7MgLEoUDG0fBSsi67wxukdVakjJbGm3EmtOvv5lAUA3IwuJpBiBDgY3CW3L+YVFLIsjxWy8t6zrs3zR905FOVYcxHDnketsi7rfs2P4edJVj17tdlz08Hhjlkm5Cg5oOIrozVS+xp7DKjpTDya3QrhODm3Ef1qayqx9Xh2uWWa4Cq/4HbF7C4hdaxl7o1PuaOnNtjKFJKp8mgQNw18fWdIShmLy2jyxX+xE0B+gVW31gxy87gSwQjeC0kL0po+gR7hsLixy+ax72KKsq+vSX39ypLnNIfIViwrkUmQxD7JMj7M725n0uAiByr40igL2qP/gHa8rWTc0KQDz1Akdsk1mUrINS9knm0HG/NwVg30DNkykemTAQHdlPXL2HMEkmmpL09MKKMPZ40q2ow7HkLWtNAhfUBVYl20ukH7pUEuw/UPX1wPO+74R4BEwPTKMYqmimZFs1nyOgLZZ1tvOKTlGPrajiZ1h6fOaVjAZiQdThCeknxZbgeMHz4Gz+dq85XQmpJfEH7PMzDS+vDoPmVrFg4Xq2cV/qPO5kcvl1MwdSMk9WO8IHnM5xSo1vbsYmfCTa/+FIvyE+j0XsLBSAlVqn+nztZQaJNzDhfZnoLK/wFM0yXmZOkvUd7Saf3XW5C1a71mv9zgYCMbcHmhUFBVPBIc2DjpUFTXDrc5ynLPN5y/eQuD5AIJ1J8hpWJTvDkih0Vt6SWLgaXPqEhvjJ2bDYEeClTuAvi9K2D6OzbrtEMCGvJMsCQNJP5TVhLL7Wt3RAIhrq+d17cEXoOPrXsu5LH2eMR56Ssq2XhG1JYsszsTWayPUrTQSINBJ4MenGedEfxjpU8xoUNZaEsLjshXJ27p3nen6T+wUJ8ybLa810QoUI0dQFX2+dLcAMkakNIGui7/fFeSWab43cB4UNPUUHipy6xMQxxkKOc+Vc/U5WCE3pIsQLYs8+ylEjcKUQsL18gsaJtlvTz7nJS66mpHBBxw7YW3jAhJ99jXpCJNNk3pGurAramSvYn3hujFMciD1l9S3pmtEFvpF5EdCbJAd8WKxFrS0IhLK3Cd7hUpF7/nJ9QvdYtLcXE98vLww/1gvqyIOwQFVbUEqmRuljboqdEtv6cg1ha/leW/7vQjzm3/7Xn/krFFoxRwFlrJ3MTsceMhj+AKTXJbz++CwwTxg0/+qn5NHoKQ9h5","hmac":"d2rqQzLXzeNRbNgfg1l6ogZ5Dp8KjYg0+PcsvyAVGIE="},"5E771746C9C64C848551053ED1B96A29":{"uuid":"5E771746C9C64C848551053ED1B96A29","tx":1587220562,"created":1587220557,"updated":1587220562,"category":"001","trashed":true,"o":"b3BkYXRhMDE0AAAAAAAAAPu70HsjE96N/oWspOkKASgsdjwAW6R00YKQBrKB7eTLgv6oScRCgPrjozpcK4M5oRsIJzuejM8NQiYXeZB8lF7VVXVtz+lZ0ofFyFmFxryo2ZCBTgmqXvPbD/tHQKnF8tsPgm5CVuNcCUMsEKNQ1wU=","k":"VaF8XjI8sNRxBcLfTuMVMu/njkr2QjtYe1bmpKxp4ZPO1i1fW+caUmI8AiNbyMXynjXJULcM0LDIu/Ba7hNdRjYY7CK3m8Cb267Ncv02DAfVeorTPW5YkNFAs4vyJXH3wVl64mCwyDfcv4TPzFXqIg==","d":"b3BkYXRhMDHEAAAAAAAAALozPNCQFN58q/oU4x7AWiAnEt7N7iOk3J7NgY1e5Gk4hmpt/CRsnGO7yFAZblfDjPJVdMjXT8kD2goqbI1VVsSB/dYM1OBRrlGx9io0z/0XOjeABP4Fo6V0DqWZeqJDIyNK+XjUIbu2/Mgy/7Dk/8+mlUxdoRiloDBO9vBc3Wc2cMnZI+ruAS0kljlfIh9IhT7GKAopZBGr1vl+L5Rq/R+CHGhcCaxFm4l+SnHbx+eJvRTS0dW/rov6vel9H2ngxwAN21Wj7ex3sziZtbNceqeaoIn4ZpL0iBUN8ovzvgGE4G4deBw6jCtu2F0NhWJOH1m4sQKJPnoGxhQXwrseTdw=","hmac":"jcFKlDnADRiLbmDGWA5z/0H9dv8wLmYGpP9uDWZuUn4="}}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/band_A.js b/tests/data/keepassxc.opvault/default/band_A.js
new file mode 100644
index 000000000..d718d5fd6
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/band_A.js
@@ -0,0 +1 @@
+ld({"A6C49CAF606248828E33F0938FCEFF5C":{"uuid":"A6C49CAF606248828E33F0938FCEFF5C","tx":1587225511,"created":1587225128,"updated":1587225511,"category":"001","o":"b3BkYXRhMDEyAAAAAAAAACO3Vg5feSwWL4lMph/ZZLbslD/HLPWJ9POC1yNridvDTthGnW04OZVC87T2fjXqyJ72dnNgEyky9lawDPyqj2Oo98rb74g8waqwiuYDKxQg+w5fpspcEgBWznfTsJe0IrQRM3tAQ/AQfwqmSK9B7kw=","k":"H+AholG2s5MICSH2ulcXhbX39xUlXsvng7tsqiwUabfso1ZvId+CTo0RykJ1sy689X88sA2Fy7QjHR7jyk+11evUjCAtm7wxAsN9hVyeoEzjLsdq+ndVtGH2xWIomvCXkmJThrgQEJui2oPhlvh13A==","d":"b3BkYXRhMDFhAQAAAAAAAGYZCo0OVDDCqN+enkVSzFgqqx6TDGfXRCOJq5jmcAGxsQ4A9MvwB/1CgOIQDLTSmwsifQLXrfZJlYqNTTjtJvULCwMRjZCN90qLTAoeBG3CJ9jsQ9QlofiIswIZ9HWGR0/w45glRZlR0Kxe0eT51IlasVpKPzMxXlD82zSk1mfojDjEWQC6XeXwvm46Ys26hx82YwVvKQ3fF10WNnx3NlUez3L12tKNF9mdww6+F+5Cr5+oz/+M1+rXLQG3oUkeZo0EhzbP7N8CE0jC2dnnFXCI72kXEfAGEHEAP1QNaHGLA3nRT9fKL+v4GQSGZ+9ska7FjAqQ8gQgjjSTK1VGo3NH6eJDR0+96OKR5Hsa6RiGURIQVf07TY54nFMm8kScFpRAgeZa/iUGjB4XiMwl4JjkK8/zX+m5+xibSdMGyryHfJr9+NPvmiUZ8F06PbTHbFUWwyz7wJbos1kIdq/UHcpOI+VwwMAaAj+ThrtYpRFyAnKprJU82JXJPN3CINcGbWtCNEy/p4sPMWUp+NDOiYrze2HM7ESJ0zvTngDVtPBR","hmac":"JhgRZZhIW/3V2xOINItEuwBIWUpXyip3ElgHwkfGxVE="}}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/band_C.js b/tests/data/keepassxc.opvault/default/band_C.js
new file mode 100644
index 000000000..62b5ec238
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/band_C.js
@@ -0,0 +1 @@
+ld({"CB61218EF878492E9951FCBD4E1B3067":{"uuid":"CB61218EF878492E9951FCBD4E1B3067","tx":1587220356,"created":1587220356,"updated":1587220356,"category":"004","o":"b3BkYXRhMDEzAAAAAAAAANeUqaRxLw5iyyo5zT/wm00Bw2cshIQKFX4Cm/1CfJrlSfJyqIEuc5asH0IOn/KGjrC4rG7XI5HEC8+gmDwRv60E4lTWfB8t8iLEKqziE0kCyKQcYnpvWLEvqqHO/UCJ/4YwJ5n8qIZoylkv13LKS3k=","k":"dDo+3PlyMCG6rzPDSHlruv6MR2cG03lXeP+0hReRltPlaDvGwFVkBNRa0Nti4bBXcrsHZWCrlmMU8kjfUn1wg6xqFJS9dBCn3+K0xDsYJQWIJ0gWa1Tb5jigSo7AHUtPaNh0QF1JA1cDnbfapXLYwQ==","d":"b3BkYXRhMDFNCQAAAAAAAN7wkdHOTxSEjKZih366qO8OSH3uI5ihy6iwUTd8D1a0rDuQCXL5BaygcDqzd3CEadEskKiSiRuptaql+1JxwB+/71oBzqnEp/cr65JFtLHmXads3F2c6x5jy7VxW/44whNwO19HJ6QyP5NF3ASC+Ez6G07b62tZfYL0WbNhAWbxt1CfNr3mEeXAJvj16Ys4tgIj8uHsskDVDAuUNZdpsRmU1ZasdbScbFuseHoSGlv4VmnDaqDlg5t/2Q2v4BKl0b5avxWHFGnAfeEgADDtWHe4MWBQK9shOT6I9RlGYAH4HV0irkeJjGuKVDrrUgBBb6mbvSKInPw3KPPTrRagzaYzvFt0lg3O+ftdEDsXVfPb9wuVyy5T8O7yKdyLGH8vPVNGLqsheyB2JD/VRvnn+5uiX+C6O+J1Y/uoXzEDSCN4JNI4dXv+BFRUmNZ8d7to6RAA3Rrd9t12MOwVmrTOGwDXyDp8nkxwQxPZRvs2SJoLE67fgEVH8BF+BfQCbipxTnOEzPwM5yV4ksITLCDXAjiZKgs9cBG7xLL2SbJUeH2zbgARTuM019KnaRv8KoC4XtM4GdQ9uyKGNLfauTiFZCj0jCQRrqdhd8ZYeHybSxzQJ6B9u9upJp8En4A9rHdRZN5bn9aYNY7JfwKJhVZ0LgT+au0FPDrvTFNptZDC63Sq4EZ5ZWYIHax4+1ga4ibTt1pAb54mdyT1lmiW0FqBiwqxyaX2GyC7q/F+aNEpv9ckT8P3V/UrrIW9Vmeym2/QJPJsJQCiQoOGlPb8NwFkIHtwLpzu661sF8CIuQAr3FbuBEgQH0HRS3cQUvMKtwZCrHaFQf9rHAOsfe+l6kSuG9xZJFY5/okj/KWuUFDtszsaNDPlY5eYKsGeNaE8EMo4GONlbego3K06+GQWwAWBL3CzfTdSFjnc18VGmvAPQWkNr1ickveMcHj2+NEATsuCUlicsnFFA9quApMmKkYD1uF7NgcAaNISdLzoht6KGImCr41P8LIgl5Lchi7PCHAGiccbgfMEVifLOlcUho+WiTtaxr8Z6LrT6KZMliM11JRdUQlYdxy0Zz4hyz0QDDyYtnXTJFtpZcM0OFnkbHXJTWJouCN1BlB7bOeT5A7HqrQJ/cNQ+vPTAOtcJfF5hfBTxc+eWvGiP8eU3WeNDfPlSrpud/+k/BDBCxMoIcFnSFvwGtAQtu4bXZzZbRaUYSKsRxUYEO7J0HeJsifT6+flTDfZBP6VNv8vJkIiDtCgU1c44WMR41ZYV0t/qxv7trs/avZSB4QO2JJHbZs/3498wbd6ngyeJLcD3W4ruIMeMJQ3Of7OxetZZ4Erw5e+63xyF3KV+xrMNjIWyLnDAJ1miZr7y31ptDzgQfv/pPNIIRHAWbVNcZovie/uTWTzN+9XM12iJv3sRapEIOG3it5vrbcjpPG02QN9j2TL8dIqZf96c1OGKS3vljnN/s3iTBKu0uuo4yQCQfte4E6yOY4KEJzVoVh6lHD1drOB16AFmfryb8qozbVF3gyikcp3SWcOEPa7HHZjt2jAdoSRs5kOBDUAcvh54LyExFrYBVqFY6E2cC4O4Ua7JTzhzHWJa5J7ui7cJiM9ax34aeEuRljvbg91x0PmUkLPG+Uym1M+3RHadfWwZsB1qQrDdffCygEJ5W415jzc1IRHkC+hwXc0uNrCtPAx/+LGpddoRBCYAq8cG+7tlQOO+KAwzee5XG3yI+wXg6b/SnEw4Zb/wS8KMqyYYVISjO0c4ya0CSJgokqbB2fpnOkZEKvNZpHKVInE0zGM/0tjO9PYFFcnwQW1q8QFb8TK1dpzQJwf8Z8oPowHcAD1D7KWR5DH0Lr6j+1y3VKGfBqIc0e3vj9Yey3vXmXzXJyxyULXq/bJ3sCWlGlXdRdpZ3c608yWxH5sQ2AtTiHqTFTBlXFRqm+yNJnJYqngdVn9cRoaaIe/kS9uImoT8NBL6y0lUQytHeE8ypdAAg0w09YZxlPCpFg6cYs2mxpZXM+9zlGpbMkj9jUHEd2qjS1uZAk7bwW146d/O4a4YZpN59cvbXNiXt0yRc9OOTe58sPeWmfh6+9qEZf1w1oU+qpP6BIwRuvDt9vGgWhKhmLccRGabvQfLIw+TO3LSi4jdTeuXA7ttMm3iFrigk1QICfen3zofD4YmC6lnLKG+X/a9Dnjq15P+ml8/zv6MBrQ2oBo/WpiYGx/8RpzE3L8R/E75etRCChEGtapJawyg/rMVPII5asyQBEWHPBfVIQgF8aiNiui1R5DsH2ioSO92rKW6pFW4YOetcwuCqI0qGoQD89ZzI90jlvHn34nhMTgLY8/b3TLBnFBAkO7HE6NbA+FblO/AbMBqqkL4YPp14ql4Agjg6l9DyTThmzjQ64wwXsLBVyE6MSoKHpwTCjgtDX0ufUzNgPd2W1G3aXdVxqdQsaT/L3L4ta3u+wTZwkM3EVU4E0dX6P5xSEa1na17cnOsd32SDZuDGNhoCgATWHKiynGpVSKvK4hUCTmGTrcLGFMeLosp7JzH2eEq9KMviYzpEQP6RITin/djdUWoOoUEBEtRzfaD30uzPZKZonTbpbsAQaSA+/GiJ4x5YWzuL/C0iP36ME25/ayj39tdPXoQ4pY6dU6kJsjuskafmLM3+TtEKZhA5WF0wGwNdbfDTSLiba2H22asm9EjmA5sX/HTRYsyxEHEUUZZQsaPXKYDIRubo2EP84nA6HJXqWlWxtiq/I3e4E3pTOLkB8BppwzQ8wu9K19FgsN5npZVRyeU+OOzvdyh+n6Pn/jSb9ofSF+ta7ae8DShzNhJ1QJFJtFVfn9aRoCg01AxmwAV7eO8u1EKDE0m6Lmu1XP5mm6srUDrftZ/bhyz3U8OHUASkGU1KiAV4fUmkEy+4wMAgTSftP9ftQihdtwvtiBIxOQ42OQh6C33xe/7hdWVoKMC85r1ZRBTFUumqmiV7K1A7A02v2i8xg5HXn8K1iUl6uby/hkCS6/PD6Dn5nyKPO6ly/usEKCW10musI9dS19gVdhy3RpGVaIaEZS1Au9CL2Nv0mf3bZZ6prsFbqV6fz6AhEXCgLjb5byIOQbJo1OK3nsCU2kW6VmBRWLB+Z09WSv2PpxExXtRkAv3LNx7OjbWxyuaU0sdmi0nZa2/yIGvgf98+cg+OqO3eIrXqhuE32TVPlJy3aLa6p+LhUZERhumt4/+HOPnshSMZbooPbYvaUrBnU80t44A1RmwVnARQoi","hmac":"rQKFO29kQr+zIOHef9ygkPOA5fOeE3QtK8+42pwgaSk="}}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/folders.js b/tests/data/keepassxc.opvault/default/folders.js
new file mode 100644
index 000000000..d7555b675
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/folders.js
@@ -0,0 +1 @@
+loadFolders({}); \ No newline at end of file
diff --git a/tests/data/keepassxc.opvault/default/profile.js b/tests/data/keepassxc.opvault/default/profile.js
new file mode 100644
index 000000000..e794da10c
--- /dev/null
+++ b/tests/data/keepassxc.opvault/default/profile.js
@@ -0,0 +1 @@
+var profile={"uuid":"E4F7B744A13A4AA382CEABA96B76A4EE","updatedAt":1587218949,"createdAt":1587218949,"tx":1587218949,"passwordHint":"","lastUpdatedBy":"LAPTOP","profileName":"keepassxc","iterations":100000,"salt":"AlJVs0mWO4kcUf48oI1z6w==","overviewKey":"b3BkYXRhMDFAAAAAAAAAABNhfrkPsTDUBLhNayABChYZMwMNXlNDOvGH3GcVbEcupahodp846Sg+hLqpWH2ba9/mNSqjlR6FcXYCZPyQxSddZWoBepbrAvknN4PxItOoZ6ZazrRXLc7VRG4pqF21pR7M88wUyHu4ZShm6zhrYSDI60rcY2xwG/TNyzBuACxx","masterKey":"b3BkYXRhMDEAAQAAAAAAAFfJG7zV9WZoBl+6hnUO0IXOCwpQPJaqMwdt0OPP4pStvQ1+Nsp9onaH+tTCLG2tic9jke0D1Y3whXA1KlZvpdJZFiShBY9wMlXFLhfo8zuGPcMmdsTfHubwnhY5uXFck6xakcFD7uftop/GKc0f0NSPJZxNBR6aEwMqUP9CGfWURZlU6nWGKJQAI6VMDcK522FcvRFlG0dtfWwxFPFcY0nXYAnIzltBPpqjGbPGGX/NKWC69w+y+0VhpGBiyUqXpQAz8lp0hXQDbgkhUgW89MnZeB6xi/FiY0yMhEJ2j7wC24qNpZdC4csShsWJn+4TV6wNrzVUqHo/ZcelGmbONPwS1LW8KcPukXXLxRl1UcJHShOsDjjG/GKPQ8iZRNereD89EEsKRN31acGUrTrh8I0LherrbQ23Vz7ewWPfJrY2"}; \ No newline at end of file
diff --git a/tests/gui/CMakeLists.txt b/tests/gui/CMakeLists.txt
index 6a8d21c4a..1d5822d20 100644
--- a/tests/gui/CMakeLists.txt
+++ b/tests/gui/CMakeLists.txt
@@ -21,3 +21,12 @@ add_unit_test(NAME testguipixmaps SOURCES TestGuiPixmaps.cpp LIBS ${TEST_LIBRARI
if(WITH_XC_BROWSER)
add_unit_test(NAME testguibrowser SOURCES TestGuiBrowser.cpp ../util/TemporaryFile.cpp LIBS ${TEST_LIBRARIES})
endif()
+
+if(WITH_XC_FDOSECRETS)
+ add_unit_test(NAME testguifdosecrets
+ SOURCES TestGuiFdoSecrets.cpp ../util/TemporaryFile.cpp
+ LIBS ${TEST_LIBRARIES}
+ # The following doesn't work because dbus-run-session expects execname to be in PATH
+ # dbus-run-session -- execname
+ LAUNCHER dbus-run-session --config-file ${CMAKE_CURRENT_SOURCE_DIR}/../data/dbus/session.conf -- sh -c "exec ./$0")
+endif()
diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp
index 9118d3e21..70417dbd5 100644
--- a/tests/gui/TestGui.cpp
+++ b/tests/gui/TestGui.cpp
@@ -45,6 +45,7 @@
#include "core/Entry.h"
#include "core/Group.h"
#include "core/Metadata.h"
+#include "core/PasswordHealth.h"
#include "core/Tools.h"
#include "crypto/Crypto.h"
#include "crypto/kdf/AesKdf.h"
@@ -58,43 +59,64 @@
#include "gui/FileDialog.h"
#include "gui/MessageBox.h"
#include "gui/PasswordEdit.h"
+#include "gui/PasswordGeneratorWidget.h"
#include "gui/SearchWidget.h"
#include "gui/TotpDialog.h"
#include "gui/TotpSetupDialog.h"
+#include "gui/databasekey/KeyComponentWidget.h"
+#include "gui/databasekey/KeyFileEditWidget.h"
+#include "gui/databasekey/PasswordEditWidget.h"
#include "gui/dbsettings/DatabaseSettingsDialog.h"
#include "gui/entry/EditEntryWidget.h"
#include "gui/entry/EntryView.h"
#include "gui/group/EditGroupWidget.h"
#include "gui/group/GroupModel.h"
#include "gui/group/GroupView.h"
-#include "gui/masterkey/KeyComponentWidget.h"
-#include "gui/masterkey/KeyFileEditWidget.h"
-#include "gui/masterkey/PasswordEditWidget.h"
#include "gui/wizard/NewDatabaseWizard.h"
#include "keys/FileKey.h"
#include "keys/PasswordKey.h"
-QTEST_MAIN(TestGui)
+#define TEST_MODAL_NO_WAIT(TEST_CODE) \
+ bool dialogFinished = false; \
+ QTimer::singleShot(0, [&]() { TEST_CODE dialogFinished = true; })
+
+#define TEST_MODAL(TEST_CODE) \
+ TEST_MODAL_NO_WAIT(TEST_CODE); \
+ QTRY_VERIFY(dialogFinished)
+
+int main(int argc, char* argv[])
+{
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
+ QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
+#endif
+ Application app(argc, argv);
+ app.setApplicationName("KeePassXC");
+ app.setApplicationVersion(KEEPASSXC_VERSION);
+ app.setQuitOnLastWindowClosed(false);
+ app.setAttribute(Qt::AA_Use96Dpi, true);
+ app.applyTheme();
+ QTEST_DISABLE_KEYPAD_NAVIGATION
+ TestGui tc;
+ QTEST_SET_MAIN_SOURCE_PATH
+ return QTest::qExec(&tc, argc, argv);
+}
static QString dbFileName = QStringLiteral(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx");
void TestGui::initTestCase()
{
- Application::setApplicationName("KeePassXC");
- Application::setApplicationVersion(KEEPASSXC_VERSION);
- QApplication::setQuitOnLastWindowClosed(false);
-
QVERIFY(Crypto::init());
Config::createTempFileInstance();
// Disable autosave so we can test the modified file indicator
- config()->set("AutoSaveAfterEveryChange", false);
- config()->set("AutoSaveOnExit", false);
+ config()->set(Config::AutoSaveAfterEveryChange, false);
+ config()->set(Config::AutoSaveOnExit, false);
// Enable the tray icon so we can test hiding/restoring the windowQByteArray
- config()->set("GUI/ShowTrayIcon", true);
+ config()->set(Config::GUI_ShowTrayIcon, true);
// Disable advanced settings mode (activate within individual tests to test advanced settings)
- config()->set("GUI/AdvancedSettings", false);
+ config()->set(Config::GUI_AdvancedSettings, false);
// Disable the update check first time alert
- config()->set("UpdateCheckMessageShown", true);
+ config()->set(Config::UpdateCheckMessageShown, true);
Bootstrap::bootstrapApplication();
@@ -168,7 +190,7 @@ void TestGui::testSettingsDefaultTabOrder()
QTest::keyClick(settingsWidget, Qt::Key::Key_Escape);
// check database settings default tab order
- triggerAction("actionChangeDatabaseSettings");
+ triggerAction("actionDatabaseSettings");
auto* dbSettingsWidget = m_mainWindow->findChild<DatabaseSettingsDialog*>();
QVERIFY(dbSettingsWidget->isVisible());
QCOMPARE(dbSettingsWidget->findChild<CategoryListWidget*>("categoryList")->currentCategory(), 0);
@@ -182,7 +204,91 @@ void TestGui::testSettingsDefaultTabOrder()
void TestGui::testCreateDatabase()
{
- QTimer::singleShot(50, this, SLOT(createDatabaseCallback()));
+ TEST_MODAL_NO_WAIT(
+ NewDatabaseWizard * wizard; QTRY_VERIFY(wizard = m_tabWidget->findChild<NewDatabaseWizard*>());
+
+ QTest::keyClicks(wizard->currentPage()->findChild<QLineEdit*>("databaseName"), "Test Name");
+ QTest::keyClicks(wizard->currentPage()->findChild<QLineEdit*>("databaseDescription"), "Test Description");
+ QCOMPARE(wizard->currentId(), 0);
+
+ QTest::keyClick(wizard, Qt::Key_Enter);
+ QCOMPARE(wizard->currentId(), 1);
+
+ auto decryptionTimeSlider = wizard->currentPage()->findChild<QSlider*>("decryptionTimeSlider");
+ auto algorithmComboBox = wizard->currentPage()->findChild<QComboBox*>("algorithmComboBox");
+ QTRY_VERIFY(decryptionTimeSlider->isVisible());
+ QVERIFY(!algorithmComboBox->isVisible());
+ auto advancedToggle = wizard->currentPage()->findChild<QPushButton*>("advancedSettingsButton");
+ QTest::mouseClick(advancedToggle, Qt::MouseButton::LeftButton);
+ QTRY_VERIFY(!decryptionTimeSlider->isVisible());
+ QVERIFY(algorithmComboBox->isVisible());
+
+ auto rounds = wizard->currentPage()->findChild<QSpinBox*>("transformRoundsSpinBox");
+ QVERIFY(rounds);
+ QVERIFY(rounds->isVisible());
+ QTest::mouseClick(rounds, Qt::MouseButton::LeftButton);
+ QTest::keyClick(rounds, Qt::Key_A, Qt::ControlModifier);
+ QTest::keyClicks(rounds, "2");
+ QTest::keyClick(rounds, Qt::Key_Tab);
+ QTest::keyClick(rounds, Qt::Key_Tab);
+
+ auto memory = wizard->currentPage()->findChild<QSpinBox*>("memorySpinBox");
+ QVERIFY(memory);
+ QVERIFY(memory->isVisible());
+ QTest::mouseClick(memory, Qt::MouseButton::LeftButton);
+ QTest::keyClick(memory, Qt::Key_A, Qt::ControlModifier);
+ QTest::keyClicks(memory, "50");
+ QTest::keyClick(memory, Qt::Key_Tab);
+
+ auto parallelism = wizard->currentPage()->findChild<QSpinBox*>("parallelismSpinBox");
+ QVERIFY(parallelism);
+ QVERIFY(parallelism->isVisible());
+ QTest::mouseClick(parallelism, Qt::MouseButton::LeftButton);
+ QTest::keyClick(parallelism, Qt::Key_A, Qt::ControlModifier);
+ QTest::keyClicks(parallelism, "1");
+ QTest::keyClick(parallelism, Qt::Key_Enter);
+
+ QCOMPARE(wizard->currentId(), 2);
+
+ // enter password
+ auto* passwordWidget = wizard->currentPage()->findChild<PasswordEditWidget*>();
+ QCOMPARE(passwordWidget->visiblePage(), KeyFileEditWidget::Page::Edit);
+ auto* passwordEdit = passwordWidget->findChild<QLineEdit*>("enterPasswordEdit");
+ auto* passwordRepeatEdit = passwordWidget->findChild<QLineEdit*>("repeatPasswordEdit");
+ QTRY_VERIFY(passwordEdit->isVisible());
+ QTRY_VERIFY(passwordEdit->hasFocus());
+ QTest::keyClicks(passwordEdit, "test");
+ QTest::keyClick(passwordEdit, Qt::Key::Key_Tab);
+ QTest::keyClicks(passwordRepeatEdit, "test");
+
+ // add key file
+ auto* additionalOptionsButton = wizard->currentPage()->findChild<QPushButton*>("additionalKeyOptionsToggle");
+ auto* keyFileWidget = wizard->currentPage()->findChild<KeyFileEditWidget*>();
+ QVERIFY(additionalOptionsButton->isVisible());
+ QTest::mouseClick(additionalOptionsButton, Qt::MouseButton::LeftButton);
+ QTRY_VERIFY(keyFileWidget->isVisible());
+ QTRY_VERIFY(!additionalOptionsButton->isVisible());
+ QCOMPARE(passwordWidget->visiblePage(), KeyFileEditWidget::Page::Edit);
+ QTest::mouseClick(keyFileWidget->findChild<QPushButton*>("addButton"), Qt::MouseButton::LeftButton);
+ auto* fileCombo = keyFileWidget->findChild<QComboBox*>("keyFileCombo");
+ QTRY_VERIFY(fileCombo);
+ QTRY_VERIFY(fileCombo->isVisible());
+ fileDialog()->setNextFileName(QString("%1/%2").arg(QString(KEEPASSX_TEST_DATA_DIR), "FileKeyHashed.key"));
+ QTest::keyClick(keyFileWidget->findChild<QPushButton*>("addButton"), Qt::Key::Key_Enter);
+ QVERIFY(fileCombo->hasFocus());
+ auto* browseButton = keyFileWidget->findChild<QPushButton*>("browseKeyFileButton");
+ QTest::keyClick(browseButton, Qt::Key::Key_Enter);
+ QCOMPARE(fileCombo->currentText(), QString("%1/%2").arg(QString(KEEPASSX_TEST_DATA_DIR), "FileKeyHashed.key"));
+
+ // save database to temporary file
+ TemporaryFile tmpFile;
+ QVERIFY(tmpFile.open());
+ tmpFile.close();
+ fileDialog()->setNextFileName(tmpFile.fileName());
+
+ QTest::keyClick(fileCombo, Qt::Key::Key_Enter);
+ tmpFile.remove(););
+
triggerAction("actionDatabaseNew");
// there is a new empty db
@@ -208,94 +314,9 @@ void TestGui::testCreateDatabase()
// close the new database
MessageBox::setNextAnswer(MessageBox::No);
triggerAction("actionDatabaseClose");
-}
-void TestGui::createDatabaseCallback()
-{
- auto* wizard = m_tabWidget->findChild<NewDatabaseWizard*>();
- QVERIFY(wizard);
-
- QTest::keyClicks(wizard->currentPage()->findChild<QLineEdit*>("databaseName"), "Test Name");
- QTest::keyClicks(wizard->currentPage()->findChild<QLineEdit*>("databaseDescription"), "Test Description");
- QCOMPARE(wizard->currentId(), 0);
-
- QTest::keyClick(wizard, Qt::Key_Enter);
- QCOMPARE(wizard->currentId(), 1);
-
- auto decryptionTimeSlider = wizard->currentPage()->findChild<QSlider*>("decryptionTimeSlider");
- auto algorithmComboBox = wizard->currentPage()->findChild<QComboBox*>("algorithmComboBox");
- QTRY_VERIFY(decryptionTimeSlider->isVisible());
- QVERIFY(!algorithmComboBox->isVisible());
- auto advancedToggle = wizard->currentPage()->findChild<QPushButton*>("advancedSettingsButton");
- QTest::mouseClick(advancedToggle, Qt::MouseButton::LeftButton);
- QTRY_VERIFY(!decryptionTimeSlider->isVisible());
- QVERIFY(algorithmComboBox->isVisible());
-
- auto rounds = wizard->currentPage()->findChild<QSpinBox*>("transformRoundsSpinBox");
- QVERIFY(rounds);
- QVERIFY(rounds->isVisible());
- QTest::mouseClick(rounds, Qt::MouseButton::LeftButton);
- QTest::keyClick(rounds, Qt::Key_A, Qt::ControlModifier);
- QTest::keyClicks(rounds, "2");
- QTest::keyClick(rounds, Qt::Key_Tab);
- QTest::keyClick(rounds, Qt::Key_Tab);
-
- auto memory = wizard->currentPage()->findChild<QSpinBox*>("memorySpinBox");
- QVERIFY(memory);
- QVERIFY(memory->isVisible());
- QTest::mouseClick(memory, Qt::MouseButton::LeftButton);
- QTest::keyClick(memory, Qt::Key_A, Qt::ControlModifier);
- QTest::keyClicks(memory, "50");
- QTest::keyClick(memory, Qt::Key_Tab);
-
- auto parallelism = wizard->currentPage()->findChild<QSpinBox*>("parallelismSpinBox");
- QVERIFY(parallelism);
- QVERIFY(parallelism->isVisible());
- QTest::mouseClick(parallelism, Qt::MouseButton::LeftButton);
- QTest::keyClick(parallelism, Qt::Key_A, Qt::ControlModifier);
- QTest::keyClicks(parallelism, "1");
- QTest::keyClick(parallelism, Qt::Key_Enter);
-
- QCOMPARE(wizard->currentId(), 2);
-
- // enter password
- auto* passwordWidget = wizard->currentPage()->findChild<PasswordEditWidget*>();
- QCOMPARE(passwordWidget->visiblePage(), KeyFileEditWidget::Page::Edit);
- auto* passwordEdit = passwordWidget->findChild<QLineEdit*>("enterPasswordEdit");
- auto* passwordRepeatEdit = passwordWidget->findChild<QLineEdit*>("repeatPasswordEdit");
- QTRY_VERIFY(passwordEdit->isVisible());
- QTRY_VERIFY(passwordEdit->hasFocus());
- QTest::keyClicks(passwordEdit, "test");
- QTest::keyClick(passwordEdit, Qt::Key::Key_Tab);
- QTest::keyClicks(passwordRepeatEdit, "test");
-
- // add key file
- auto* additionalOptionsButton = wizard->currentPage()->findChild<QPushButton*>("additionalKeyOptionsToggle");
- auto* keyFileWidget = wizard->currentPage()->findChild<KeyFileEditWidget*>();
- QVERIFY(additionalOptionsButton->isVisible());
- QTest::mouseClick(additionalOptionsButton, Qt::MouseButton::LeftButton);
- QTRY_VERIFY(keyFileWidget->isVisible());
- QTRY_VERIFY(!additionalOptionsButton->isVisible());
- QCOMPARE(passwordWidget->visiblePage(), KeyFileEditWidget::Page::Edit);
- QTest::mouseClick(keyFileWidget->findChild<QPushButton*>("addButton"), Qt::MouseButton::LeftButton);
- auto* fileCombo = keyFileWidget->findChild<QComboBox*>("keyFileCombo");
- QTRY_VERIFY(fileCombo);
- QTRY_VERIFY(fileCombo->isVisible());
- fileDialog()->setNextFileName(QString("%1/%2").arg(QString(KEEPASSX_TEST_DATA_DIR), "FileKeyHashed.key"));
- QTest::keyClick(keyFileWidget->findChild<QPushButton*>("addButton"), Qt::Key::Key_Enter);
- QVERIFY(fileCombo->hasFocus());
- auto* browseButton = keyFileWidget->findChild<QPushButton*>("browseKeyFileButton");
- QTest::keyClick(browseButton, Qt::Key::Key_Enter);
- QCOMPARE(fileCombo->currentText(), QString("%1/%2").arg(QString(KEEPASSX_TEST_DATA_DIR), "FileKeyHashed.key"));
-
- // save database to temporary file
- TemporaryFile tmpFile;
- QVERIFY(tmpFile.open());
- tmpFile.close();
- fileDialog()->setNextFileName(tmpFile.fileName());
-
- QTest::keyClick(fileCombo, Qt::Key::Key_Enter);
- tmpFile.remove();
+ // Wait for dialog to terminate
+ QTRY_VERIFY(dialogFinished);
}
void TestGui::testMergeDatabase()
@@ -330,7 +351,7 @@ void TestGui::testMergeDatabase()
void TestGui::testAutoreloadDatabase()
{
- config()->set("AutoReloadOnChange", false);
+ config()->set(Config::AutoReloadOnChange, false);
// Test accepting new file in autoreload
MessageBox::setNextAnswer(MessageBox::Yes);
@@ -363,7 +384,7 @@ void TestGui::testAutoreloadDatabase()
// Test accepting a merge of edits into autoreload
// Turn on autoload so we only get one messagebox (for the merge)
- config()->set("AutoReloadOnChange", true);
+ config()->set(Config::AutoReloadOnChange, true);
// Modify some entries
testEditEntry();
@@ -430,10 +451,21 @@ void TestGui::testEditEntry()
QCOMPARE(entry->historyItems().size(), ++editCount);
QVERIFY(!applyButton->isEnabled());
+ // Test the "known bad" checkbox
+ editEntryWidget->setCurrentPage(1);
+ auto knownBadCheckBox = editEntryWidget->findChild<QCheckBox*>("knownBadCheckBox");
+ QVERIFY(knownBadCheckBox);
+ QCOMPARE(knownBadCheckBox->isChecked(), false);
+ knownBadCheckBox->setChecked(true);
+ QTest::mouseClick(applyButton, Qt::LeftButton);
+ QCOMPARE(entry->historyItems().size(), ++editCount);
+ QCOMPARE(entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD), true);
+ QCOMPARE(entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD), TRUE_STR);
+
// Test entry colors (simulate choosing a color)
editEntryWidget->setCurrentPage(1);
- auto fgColor = QColor(Qt::red);
- auto bgColor = QColor(Qt::blue);
+ auto fgColor = QString("#FF0000");
+ auto bgColor = QString("#0000FF");
// Set foreground color
auto colorButton = editEntryWidget->findChild<QPushButton*>("fgColorButton");
auto colorCheckBox = editEntryWidget->findChild<QCheckBox*>("fgColorCheckBox");
@@ -460,17 +492,6 @@ void TestGui::testEditEntry()
QCOMPARE(attrTextEdit->toPlainText(), attrText);
editEntryWidget->setCurrentPage(0);
- // Test mismatch passwords
- auto* passwordEdit = editEntryWidget->findChild<QLineEdit*>("passwordEdit");
- QString originalPassword = passwordEdit->text();
- passwordEdit->setText("newpass");
- QTest::mouseClick(okButton, Qt::LeftButton);
- auto* messageWiget = editEntryWidget->findChild<MessageWidget*>("messageWidget");
- QTRY_VERIFY(messageWiget->isVisible());
- QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode);
- QCOMPARE(passwordEdit->text(), QString("newpass"));
- passwordEdit->setText(originalPassword);
-
// Save the edit (press OK)
QTest::mouseClick(okButton, Qt::LeftButton);
QApplication::processEvents();
@@ -478,9 +499,9 @@ void TestGui::testEditEntry()
// Confirm edit was made
QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::ViewMode);
QCOMPARE(entry->title(), QString("Sample Entry_test"));
- QCOMPARE(entry->foregroundColor(), fgColor);
+ QCOMPARE(entry->foregroundColor().toUpper(), fgColor.toUpper());
QCOMPARE(entryItem.data(Qt::ForegroundRole), QVariant(fgColor));
- QCOMPARE(entry->backgroundColor(), bgColor);
+ QCOMPARE(entry->backgroundColor().toUpper(), bgColor.toUpper());
QCOMPARE(entryItem.data(Qt::BackgroundRole), QVariant(bgColor));
QCOMPARE(entry->historyItems().size(), ++editCount);
@@ -495,7 +516,6 @@ void TestGui::testEditEntry()
titleEdit->setText("multiline\ntitle");
editEntryWidget->findChild<QComboBox*>("usernameComboBox")->lineEdit()->setText("multiline\nusername");
editEntryWidget->findChild<QLineEdit*>("passwordEdit")->setText("multiline\npassword");
- editEntryWidget->findChild<QLineEdit*>("passwordRepeatEdit")->setText("multiline\npassword");
editEntryWidget->findChild<QLineEdit*>("urlEdit")->setText("multiline\nurl");
QTest::mouseClick(okButton, Qt::LeftButton);
@@ -555,7 +575,7 @@ void TestGui::testSearchEditEntry()
// Check the path in header is "parent-group > entry"
QCOMPARE(m_dbWidget->findChild<EditEntryWidget*>("editEntryWidget")->findChild<QLabel*>("headerLabel")->text(),
- QString("Good > Doggy > Edit entry"));
+ QStringLiteral("Good \u2B29 Doggy \u2B29 Edit entry"));
}
void TestGui::testAddEntry()
@@ -604,9 +624,7 @@ void TestGui::testAddEntry()
QTest::keyClicks(usernameComboBox, "Auto");
QTest::keyPress(usernameComboBox, Qt::Key_Right);
auto* passwordEdit = editEntryWidget->findChild<QLineEdit*>("passwordEdit");
- auto* passwordRepeatEdit = editEntryWidget->findChild<QLineEdit*>("passwordRepeatEdit");
QTest::keyClicks(passwordEdit, "something 2");
- QTest::keyClicks(passwordRepeatEdit, "something 2");
QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton);
QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::ViewMode);
@@ -652,53 +670,62 @@ void TestGui::testPasswordEntryEntropy()
QTest::keyClicks(titleEdit, "test");
// Open the password generator
- auto* generatorButton = editEntryWidget->findChild<QToolButton*>("togglePasswordGeneratorButton");
- QTest::mouseClick(generatorButton, Qt::LeftButton);
-
- // Type in some password
- auto* editNewPassword = editEntryWidget->findChild<QLineEdit*>("editNewPassword");
- auto* entropyLabel = editEntryWidget->findChild<QLabel*>("entropyLabel");
- auto* strengthLabel = editEntryWidget->findChild<QLabel*>("strengthLabel");
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "hello");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 6.38 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "helloworld");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 13.10 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "password1");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 4.00 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "D0g..................");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 19.02 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "Tr0ub4dour&3");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 30.87 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "correcthorsebatterystaple");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 47.98 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Weak"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "YQC3kbXbjC652dTDH");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 95.83 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Good"));
-
- editNewPassword->setText("");
- QTest::keyClicks(editNewPassword, "Bs5ZFfthWzR8DGFEjaCM6bGqhmCT4km");
- QCOMPARE(entropyLabel->text(), QString("Entropy: 174.59 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Excellent"));
+ auto* passwordEdit = editEntryWidget->findChild<PasswordEdit*>();
+ QVERIFY(passwordEdit);
+ QTest::mouseClick(passwordEdit, Qt::LeftButton);
+
+ QTest::keyClick(passwordEdit, Qt::Key_G, Qt::ControlModifier);
+
+ TEST_MODAL(PasswordGeneratorWidget * pwGeneratorWidget;
+ QTRY_VERIFY(pwGeneratorWidget = m_dbWidget->findChild<PasswordGeneratorWidget*>());
+
+ // Type in some password
+ auto* generatedPassword = pwGeneratorWidget->findChild<QLineEdit*>("editNewPassword");
+ auto* entropyLabel = pwGeneratorWidget->findChild<QLabel*>("entropyLabel");
+ auto* strengthLabel = pwGeneratorWidget->findChild<QLabel*>("strengthLabel");
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "hello");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 6.38 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "helloworld");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 13.10 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "password1");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 4.00 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "D0g..................");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 19.02 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "Tr0ub4dour&3");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 30.87 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Poor"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "correcthorsebatterystaple");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 47.98 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Weak"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "YQC3kbXbjC652dTDH");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 95.83 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Good"));
+
+ generatedPassword->setText("");
+ QTest::keyClicks(generatedPassword, "Bs5ZFfthWzR8DGFEjaCM6bGqhmCT4km");
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 174.59 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Excellent"));
+
+ QTest::mouseClick(generatedPassword, Qt::LeftButton);
+ QTest::keyClick(generatedPassword, Qt::Key_Escape););
}
void TestGui::testDicewareEntryEntropy()
@@ -724,25 +751,38 @@ void TestGui::testDicewareEntryEntropy()
QTest::keyClicks(titleEdit, "test");
// Open the password generator
- auto* generatorButton = editEntryWidget->findChild<QToolButton*>("togglePasswordGeneratorButton");
- QTest::mouseClick(generatorButton, Qt::LeftButton);
+ auto* passwordEdit = editEntryWidget->findChild<PasswordEdit*>();
+ QVERIFY(passwordEdit);
+ QTest::mouseClick(passwordEdit, Qt::LeftButton);
- // Select Diceware
- auto* tabWidget = editEntryWidget->findChild<QTabWidget*>("tabWidget");
- auto* dicewareWidget = editEntryWidget->findChild<QWidget*>("dicewareWidget");
- tabWidget->setCurrentWidget(dicewareWidget);
+ QTest::keyClick(passwordEdit, Qt::Key_G, Qt::ControlModifier);
- auto* comboBoxWordList = dicewareWidget->findChild<QComboBox*>("comboBoxWordList");
- comboBoxWordList->setCurrentText("eff_large.wordlist");
- auto* spinBoxWordCount = dicewareWidget->findChild<QSpinBox*>("spinBoxWordCount");
- spinBoxWordCount->setValue(6);
+ TEST_MODAL(PasswordGeneratorWidget * pwGeneratorWidget;
+ QTRY_VERIFY(pwGeneratorWidget = m_dbWidget->findChild<PasswordGeneratorWidget*>());
- // Type in some password
- auto* entropyLabel = editEntryWidget->findChild<QLabel*>("entropyLabel");
- auto* strengthLabel = editEntryWidget->findChild<QLabel*>("strengthLabel");
+ // Select Diceware
+ auto* generatedPassword = pwGeneratorWidget->findChild<QLineEdit*>("editNewPassword");
+ auto* tabWidget = pwGeneratorWidget->findChild<QTabWidget*>("tabWidget");
+ auto* dicewareWidget = pwGeneratorWidget->findChild<QWidget*>("dicewareWidget");
+ tabWidget->setCurrentWidget(dicewareWidget);
- QCOMPARE(entropyLabel->text(), QString("Entropy: 77.55 bit"));
- QCOMPARE(strengthLabel->text(), QString("Password Quality: Good"));
+ auto* comboBoxWordList = dicewareWidget->findChild<QComboBox*>("comboBoxWordList");
+ comboBoxWordList->setCurrentText("eff_large.wordlist");
+ auto* spinBoxWordCount = dicewareWidget->findChild<QSpinBox*>("spinBoxWordCount");
+ spinBoxWordCount->setValue(6);
+
+ // Confirm a password was generated
+ QVERIFY(!pwGeneratorWidget->getGeneratedPassword().isEmpty());
+
+ // Verify entropy and strength
+ auto* entropyLabel = pwGeneratorWidget->findChild<QLabel*>("entropyLabel");
+ auto* strengthLabel = pwGeneratorWidget->findChild<QLabel*>("strengthLabel");
+
+ QCOMPARE(entropyLabel->text(), QString("Entropy: 77.55 bit"));
+ QCOMPARE(strengthLabel->text(), QString("Password Quality: Good"));
+
+ QTest::mouseClick(generatedPassword, Qt::LeftButton);
+ QTest::keyClick(generatedPassword, Qt::Key_Escape););
}
void TestGui::testTotp()
@@ -864,8 +904,8 @@ void TestGui::testSearch()
QTest::keyClick(searchTextEdit, Qt::Key_Down);
QTRY_VERIFY(entryView->hasFocus());
auto* searchedEntry = entryView->currentEntry();
- // Restore focus and search text selection
- QTest::keyClick(m_mainWindow.data(), Qt::Key_F, Qt::ControlModifier);
+ // Restore focus using F1 key and search text selection
+ QTest::keyClick(m_mainWindow.data(), Qt::Key_F1);
QTRY_COMPARE(searchTextEdit->selectedText(), QString("someTHING"));
QTRY_VERIFY(searchTextEdit->hasFocus());
@@ -882,6 +922,7 @@ void TestGui::testSearch()
QTest::keyClick(searchTextEdit, Qt::Key_C, Qt::ControlModifier);
QCOMPARE(searchedEntry->password(), clipboard->text());
// Ensure Down focuses on entry view when search text is selected
+ QTest::keyClick(searchTextEdit, Qt::Key_A, Qt::ControlModifier);
QTest::keyClick(searchTextEdit, Qt::Key_Down);
QTRY_VERIFY(entryView->hasFocus());
QCOMPARE(entryView->currentEntry(), searchedEntry);
@@ -927,12 +968,14 @@ void TestGui::testSearch()
searchWidget->setLimitGroup(false);
clickIndex(rootGroupIndex, groupView, Qt::LeftButton);
QCOMPARE(groupView->currentGroup(), m_db->rootGroup());
+ QVERIFY(!m_dbWidget->isSearchActive());
// Try to edit the first entry from the search view
// Refocus back to search edit
QTest::mouseClick(searchTextEdit, Qt::LeftButton);
QTRY_VERIFY(searchTextEdit->hasFocus());
- QVERIFY(m_dbWidget->isSearchActive());
+ QTest::keyClicks(searchTextEdit, "someTHING");
+ QTRY_VERIFY(m_dbWidget->isSearchActive());
QModelIndex item = entryView->model()->index(0, 1);
Entry* entry = entryView->entryFromIndex(item);
@@ -1173,6 +1216,35 @@ void TestGui::testSaveAs()
tmpFile.remove();
}
+void TestGui::testSaveBackup()
+{
+ m_db->metadata()->setName("testSaveBackup");
+
+ QFileInfo fileInfo(m_dbFilePath);
+ QDateTime lastModified = fileInfo.lastModified();
+
+ // open temporary file so it creates a filename
+ TemporaryFile tmpFile;
+ QVERIFY(tmpFile.open());
+ QString tmpFileName = tmpFile.fileName();
+ tmpFile.remove();
+
+ // wait for modified timer
+ QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("testSaveBackup*"));
+
+ fileDialog()->setNextFileName(tmpFileName);
+
+ triggerAction("actionDatabaseSaveBackup");
+
+ QCOMPARE(m_tabWidget->tabName(m_tabWidget->currentIndex()), QString("testSaveBackup*"));
+
+ checkDatabase(tmpFileName);
+
+ fileInfo.refresh();
+ QCOMPARE(fileInfo.lastModified(), lastModified);
+ tmpFile.remove();
+}
+
void TestGui::testSave()
{
m_db->metadata()->setName("testSave");
@@ -1189,7 +1261,7 @@ void TestGui::testSave()
void TestGui::testDatabaseSettings()
{
m_db->metadata()->setName("testDatabaseSettings");
- triggerAction("actionChangeDatabaseSettings");
+ triggerAction("actionDatabaseSettings");
auto* dbSettingsDialog = m_dbWidget->findChild<QWidget*>("databaseSettingsDialog");
auto* transformRoundsSpinBox = dbSettingsDialog->findChild<QSpinBox*>("transformRoundsSpinBox");
auto advancedToggle = dbSettingsDialog->findChild<QCheckBox*>("advancedSettingsToggle");
@@ -1428,7 +1500,6 @@ int TestGui::addCannedEntries()
auto* editEntryWidget = m_dbWidget->findChild<EditEntryWidget*>("editEntryWidget");
auto* titleEdit = editEntryWidget->findChild<QLineEdit*>("titleEdit");
auto* passwordEdit = editEntryWidget->findChild<QLineEdit*>("passwordEdit");
- auto* passwordRepeatEdit = editEntryWidget->findChild<QLineEdit*>("passwordRepeatEdit");
// Add entry "test" and confirm added
QTest::mouseClick(entryNewWidget, Qt::LeftButton);
@@ -1441,7 +1512,6 @@ int TestGui::addCannedEntries()
QTest::mouseClick(entryNewWidget, Qt::LeftButton);
QTest::keyClicks(titleEdit, "something 2");
QTest::keyClicks(passwordEdit, "something 2");
- QTest::keyClicks(passwordRepeatEdit, "something 2");
QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton);
++entries_added;
diff --git a/tests/gui/TestGui.h b/tests/gui/TestGui.h
index b7798d0b2..8d82e021e 100644
--- a/tests/gui/TestGui.h
+++ b/tests/gui/TestGui.h
@@ -37,9 +37,6 @@ class TestGui : public QObject
{
Q_OBJECT
-protected slots:
- void createDatabaseCallback();
-
private slots:
void initTestCase();
void init();
@@ -64,6 +61,7 @@ private slots:
void testDragAndDropEntry();
void testDragAndDropGroup();
void testSaveAs();
+ void testSaveBackup();
void testSave();
void testDatabaseSettings();
void testKeePass1Import();
diff --git a/tests/gui/TestGuiBrowser.cpp b/tests/gui/TestGuiBrowser.cpp
index 834aea581..fb981d6df 100644
--- a/tests/gui/TestGuiBrowser.cpp
+++ b/tests/gui/TestGuiBrowser.cpp
@@ -31,6 +31,7 @@
#include <QTableView>
#include <QToolBar>
+#include "browser/BrowserService.h"
#include "config-keepassx-tests.h"
#include "core/Bootstrap.h"
#include "core/Config.h"
@@ -47,50 +48,55 @@
#include "gui/entry/EditEntryWidget.h"
#include "gui/entry/EntryView.h"
-QTEST_MAIN(TestGuiBrowser)
+int main(int argc, char* argv[])
+{
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
+ QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
+#endif
+ Application app(argc, argv);
+ app.setApplicationName("KeePassXC");
+ app.setApplicationVersion(KEEPASSXC_VERSION);
+ app.setQuitOnLastWindowClosed(false);
+ app.setAttribute(Qt::AA_Use96Dpi, true);
+ app.applyTheme();
+ QTEST_DISABLE_KEYPAD_NAVIGATION
+ TestGuiBrowser tc;
+ QTEST_SET_MAIN_SOURCE_PATH
+ return QTest::qExec(&tc, argc, argv);
+}
void TestGuiBrowser::initTestCase()
{
QVERIFY(Crypto::init());
Config::createTempFileInstance();
// Disable autosave so we can test the modified file indicator
- config()->set("AutoSaveAfterEveryChange", false);
- config()->set("AutoSaveOnExit", false);
+ config()->set(Config::AutoSaveAfterEveryChange, false);
+ config()->set(Config::AutoSaveOnExit, false);
// Enable the tray icon so we can test hiding/restoring the windowQByteArray
- config()->set("GUI/ShowTrayIcon", true);
+ config()->set(Config::GUI_ShowTrayIcon, true);
// Disable advanced settings mode (activate within individual tests to test advanced settings)
- config()->set("GUI/AdvancedSettings", false);
+ config()->set(Config::GUI_AdvancedSettings, false);
// Disable the update check first time alert
- config()->set("UpdateCheckMessageShown", true);
+ config()->set(Config::UpdateCheckMessageShown, true);
m_mainWindow.reset(new MainWindow());
Bootstrap::restoreMainWindowState(*m_mainWindow);
m_tabWidget = m_mainWindow->findChild<DatabaseTabWidget*>("tabWidget");
m_mainWindow->show();
-
- // Load the NewDatabase.kdbx file into temporary storage
- QFile sourceDbFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabaseBrowser.kdbx"));
- QVERIFY(sourceDbFile.open(QIODevice::ReadOnly));
- QVERIFY(Tools::readAllFromDevice(&sourceDbFile, m_dbData));
- sourceDbFile.close();
}
// Every test starts with opening the temp database
void TestGuiBrowser::init()
{
m_dbFile.reset(new TemporaryFile());
- // Write the temp storage to a temp database file for use in our tests
- QVERIFY(m_dbFile->open());
- QCOMPARE(m_dbFile->write(m_dbData), static_cast<qint64>((m_dbData.size())));
- m_dbFileName = QFileInfo(m_dbFile->fileName()).fileName();
- m_dbFilePath = m_dbFile->fileName();
- m_dbFile->close();
+ m_dbFile->copyFromFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabaseBrowser.kdbx"));
// make sure window is activated or focus tests may fail
m_mainWindow->activateWindow();
QApplication::processEvents();
- fileDialog()->setNextFileName(m_dbFilePath);
+ fileDialog()->setNextFileName(m_dbFile->fileName());
triggerAction("actionDatabaseOpen");
auto* databaseOpenWidget = m_tabWidget->currentDatabaseWidget()->findChild<QWidget*>("databaseOpenWidget");
@@ -131,7 +137,7 @@ void TestGuiBrowser::cleanupTestCase()
void TestGuiBrowser::testEntrySettings()
{
// Enable the Browser Integration
- config()->set("Browser/Enabled", true);
+ config()->set(Config::Browser_Enabled, true);
auto* toolBar = m_mainWindow->findChild<QToolBar*>("toolBar");
auto* entryView = m_dbWidget->findChild<EntryView*>("entryView");
@@ -226,6 +232,28 @@ void TestGuiBrowser::testAdditionalURLs()
}
}
+void TestGuiBrowser::testGetDatabaseGroups()
+{
+ auto result = browserService()->getDatabaseGroups();
+ QCOMPARE(result.length(), 1);
+
+ auto groups = result["groups"].toArray();
+ auto first = groups.at(0);
+ auto children = first.toObject()["children"].toArray();
+ QCOMPARE(first.toObject()["name"].toString(), QString("NewDatabase"));
+ QCOMPARE(children.size(), 6);
+
+ auto firstChild = children.at(0).toObject();
+ auto secondChild = children.at(1).toObject();
+ QCOMPARE(firstChild["name"].toString(), QString("General"));
+ QCOMPARE(secondChild["name"].toString(), QString("Windows"));
+
+ auto subGroups = firstChild["children"].toArray();
+ QCOMPARE(subGroups.count(), 1);
+ auto subGroupObj = subGroups.at(0).toObject();
+ QCOMPARE(subGroupObj["name"].toString(), QString("SubGroup"));
+}
+
void TestGuiBrowser::triggerAction(const QString& name)
{
auto* action = m_mainWindow->findChild<QAction*>(name);
diff --git a/tests/gui/TestGuiBrowser.h b/tests/gui/TestGuiBrowser.h
index 53a9c73c4..818a36952 100644
--- a/tests/gui/TestGuiBrowser.h
+++ b/tests/gui/TestGuiBrowser.h
@@ -45,6 +45,7 @@ private slots:
void testEntrySettings();
void testAdditionalURLs();
+ void testGetDatabaseGroups();
private:
void triggerAction(const QString& name);
@@ -57,10 +58,7 @@ private:
QPointer<DatabaseTabWidget> m_tabWidget;
QPointer<DatabaseWidget> m_dbWidget;
QSharedPointer<Database> m_db;
- QByteArray m_dbData;
QScopedPointer<TemporaryFile> m_dbFile;
- QString m_dbFileName;
- QString m_dbFilePath;
};
#endif // KEEPASSXC_TESTGUIBROWSER_H
diff --git a/tests/gui/TestGuiFdoSecrets.cpp b/tests/gui/TestGuiFdoSecrets.cpp
new file mode 100644
index 000000000..9dffa6ba5
--- /dev/null
+++ b/tests/gui/TestGuiFdoSecrets.cpp
@@ -0,0 +1,1176 @@
+/*
+ * Copyright (C) 2019 Aetf <aetf@unlimitedcodeworks.xyz>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "TestGuiFdoSecrets.h"
+
+#include "fdosecrets/FdoSecretsPlugin.h"
+#include "fdosecrets/FdoSecretsSettings.h"
+#include "fdosecrets/objects/Collection.h"
+#include "fdosecrets/objects/Item.h"
+#include "fdosecrets/objects/Prompt.h"
+#include "fdosecrets/objects/Service.h"
+#include "fdosecrets/objects/Session.h"
+#include "fdosecrets/objects/SessionCipher.h"
+
+#include "TestGlobal.h"
+#include "config-keepassx-tests.h"
+
+#include "core/Bootstrap.h"
+#include "core/Config.h"
+#include "core/Tools.h"
+#include "crypto/Crypto.h"
+#include "gui/DatabaseTabWidget.h"
+#include "gui/DatabaseWidget.h"
+#include "gui/FileDialog.h"
+#include "gui/MessageBox.h"
+#include "gui/wizard/NewDatabaseWizard.h"
+#include "util/TemporaryFile.h"
+
+#include <QAbstractItemView>
+#include <QDBusConnection>
+#include <QDBusConnectionInterface>
+#include <QDBusInterface>
+#include <QLineEdit>
+#include <QPointer>
+#include <QSignalSpy>
+#include <QXmlStreamReader>
+
+#include <memory>
+#include <type_traits>
+
+int main(int argc, char* argv[])
+{
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
+ QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
+#endif
+ Application app(argc, argv);
+ app.setApplicationName("KeePassXC");
+ app.setApplicationVersion(KEEPASSXC_VERSION);
+ app.setQuitOnLastWindowClosed(false);
+ app.setAttribute(Qt::AA_Use96Dpi, true);
+ app.applyTheme();
+ QTEST_DISABLE_KEYPAD_NAVIGATION
+ TestGuiFdoSecrets tc;
+ QTEST_SET_MAIN_SOURCE_PATH
+ return QTest::qExec(&tc, argc, argv);
+}
+
+#define DBUS_PATH_DEFAULT_ALIAS "/org/freedesktop/secrets/aliases/default"
+
+#define VERIFY(statement) \
+ do { \
+ if (!QTest::qVerify(static_cast<bool>(statement), #statement, "", __FILE__, __LINE__)) \
+ return {}; \
+ } while (false)
+
+#define COMPARE(actual, expected) \
+ do { \
+ if (!QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__)) \
+ return {}; \
+ } while (false)
+
+#define FAIL(message) \
+ do { \
+ QTest::qFail(static_cast<const char*>(message), __FILE__, __LINE__); \
+ return {}; \
+ } while (false)
+
+#define COMPARE_DBUS_LOCAL_CALL(actual, expected) \
+ do { \
+ const auto a = (actual); \
+ QVERIFY(!a.isError()); \
+ QCOMPARE(a.value(), (expected)); \
+ } while (false)
+
+#define CHECKED_DBUS_LOCAL_CALL(name, stmt) \
+ std::remove_cv<decltype(stmt)::value_type>::type name; \
+ do { \
+ const auto rep = stmt; \
+ QVERIFY(!rep.isError()); \
+ name = rep.value(); \
+ } while (false)
+
+namespace
+{
+ std::unique_ptr<QDBusInterface> interfaceOf(const QDBusObjectPath& objPath, const QString& interface)
+ {
+ std::unique_ptr<QDBusInterface> iface(new QDBusInterface(DBUS_SERVICE_SECRET, objPath.path(), interface));
+ iface->setTimeout(5);
+ VERIFY(iface->isValid());
+ return iface;
+ }
+
+ std::unique_ptr<QDBusInterface> interfaceOf(FdoSecrets::DBusObject* obj)
+ {
+ VERIFY(obj);
+ auto metaAdaptor = obj->dbusAdaptor().metaObject();
+ auto ifaceName = metaAdaptor->classInfo(metaAdaptor->indexOfClassInfo("D-Bus Interface")).value();
+
+ return interfaceOf(obj->objectPath(), ifaceName);
+ }
+
+ template <typename T> QString extractElement(const QString& doc, T cond)
+ {
+ QXmlStreamReader reader(doc);
+ while (!reader.atEnd()) {
+ int st = reader.characterOffset();
+
+ if (reader.readNext() != QXmlStreamReader::StartElement || !cond(reader)) {
+ continue;
+ }
+
+ reader.skipCurrentElement();
+ if (reader.hasError()) {
+ break;
+ }
+
+ // remove whitespaces between elements to be a little bit flexible
+ int ed = reader.characterOffset();
+ return doc.mid(st - 1, ed - st + 1).replace(QRegularExpression(R"(>[\s\n]+<)"), "><");
+ }
+ VERIFY(!reader.hasError());
+ return {};
+ }
+
+ bool checkDBusSpec(const QString& path, const QString& interface)
+ {
+ QFile f(QStringLiteral(KEEPASSX_TEST_DATA_DIR "/dbus/interfaces/%1.xml").arg(interface));
+ VERIFY(f.open(QFile::ReadOnly | QFile::Text));
+ QTextStream in(&f);
+ auto spec = in.readAll().replace(QRegularExpression(R"(>[\s\n]+<)"), "><").trimmed();
+
+ auto bus = QDBusConnection::sessionBus();
+ auto msg = QDBusMessage::createMethodCall(
+ DBUS_SERVICE_SECRET, path, "org.freedesktop.DBus.Introspectable", "Introspect");
+
+ // BlockWithGui enters event loop
+ auto reply = QDBusPendingReply<QString>(bus.call(msg, QDBus::BlockWithGui, 5));
+ VERIFY(reply.isValid());
+ auto actual = extractElement(reply.argumentAt<0>(), [&](const QXmlStreamReader& reader) {
+ return reader.name() == "interface" && reader.attributes().value("name") == interface;
+ });
+
+ COMPARE(actual, spec);
+ return true;
+ }
+} // namespace
+
+using namespace FdoSecrets;
+
+// for use in QSignalSpy
+Q_DECLARE_METATYPE(Collection*);
+Q_DECLARE_METATYPE(Item*);
+
+TestGuiFdoSecrets::~TestGuiFdoSecrets() = default;
+
+void TestGuiFdoSecrets::initTestCase()
+{
+ // for use in QSignalSpy
+ qRegisterMetaType<Collection*>();
+ qRegisterMetaType<Item*>();
+
+ QVERIFY(Crypto::init());
+ Config::createTempFileInstance();
+ config()->set(Config::AutoSaveAfterEveryChange, false);
+ config()->set(Config::AutoSaveOnExit, false);
+ config()->set(Config::GUI_ShowTrayIcon, true);
+ config()->set(Config::UpdateCheckMessageShown, true);
+ // Disable secret service integration (activate within individual tests to test the plugin)
+ FdoSecrets::settings()->setEnabled(false);
+ // activate within individual tests
+ FdoSecrets::settings()->setShowNotification(false);
+
+ Bootstrap::bootstrapApplication();
+
+ m_mainWindow.reset(new MainWindow());
+ m_tabWidget = m_mainWindow->findChild<DatabaseTabWidget*>("tabWidget");
+ QVERIFY(m_tabWidget);
+ m_plugin = FdoSecretsPlugin::getPlugin();
+ QVERIFY(m_plugin);
+ m_mainWindow->show();
+
+ // Load the NewDatabase.kdbx file into temporary storage
+ QFile sourceDbFile(QStringLiteral(KEEPASSX_TEST_DATA_DIR "/NewDatabase.kdbx"));
+ QVERIFY(sourceDbFile.open(QIODevice::ReadOnly));
+ QVERIFY(Tools::readAllFromDevice(&sourceDbFile, m_dbData));
+ sourceDbFile.close();
+
+ // set keys for session encryption
+ m_serverPublic = MpiFromHex("e407997e8b918419cf851cf3345358fdf"
+ "ffb9564a220ac9c3934efd277cea20d17"
+ "467ecdc56e817f75ac39501f38a4a04ff"
+ "64d627e16c09981c7ad876da255b61c8e"
+ "6a8408236c2a4523cfe6961c26dbdfc77"
+ "c1a27a5b425ca71a019e829fae32c0b42"
+ "0e1b3096b48bc2ce9ccab1d1ff13a5eb4"
+ "b263cee30bdb1a57af9bfa93f");
+ m_serverPrivate = MpiFromHex("013f4f3381ef0ca11c4c7363079577b56"
+ "99b238644e0aba47e24bdba6173590216"
+ "4f1e12dd0944800a373e090e63192f53b"
+ "93583e9a9e50bb9d792aafaa3a0f5ae77"
+ "de0c3423f5820848d88ee3bdd01c889f2"
+ "7af58a02f5b6693d422b9d189b300d7b1"
+ "be5076b5795cf8808c31e2e2898368d18"
+ "ab5c26b0ea3480c9aba8154cf");
+ // use the same cipher to do the client side encryption, but exchange the position of client/server keys
+ m_cipher.reset(new DhIetf1024Sha256Aes128CbcPkcs7);
+ QVERIFY(m_cipher->initialize(MpiFromBytes(MpiToBytes(m_serverPublic)),
+ MpiFromHex("30d18c6b328bac970c05bda6af2e708b9"
+ "d6bbbb6dc136c1a2d96e870fabc86ad74"
+ "1846a26a4197f32f65ea2e7580ad2afe3"
+ "dd5d6c1224b8368b0df2cd75d520a9ff9"
+ "7fe894cc7da71b7bd285b4633359c16c8"
+ "d341f822fa4f0fdf59b5d3448658c46a2"
+ "a86dbb14ff85823873f8a259ccc52bbb8"
+ "2b5a4c2a75447982553b42221"),
+ MpiFromHex("84aafe9c9f356f7762307f4d791acb59e"
+ "8e3fd562abdbb481d0587f8400ad6c51d"
+ "af561a1beb9a22c8cd4d2807367c5787b"
+ "2e06d631ccbb5194b6bb32211583ce688"
+ "f9c2cebc22a9e4d494d12ebdd570c61a1"
+ "62a94e88561d25ccd0415339d1f59e1b0"
+ "6bc6b6b5fde46e23b2410eb034be390d3"
+ "2407ec7ae90f0831f24afd5ac")));
+}
+
+// Every test starts with opening the temp database
+void TestGuiFdoSecrets::init()
+{
+ m_dbFile.reset(new TemporaryFile());
+ // Write the temp storage to a temp database file for use in our tests
+ QVERIFY(m_dbFile->open());
+ QCOMPARE(m_dbFile->write(m_dbData), static_cast<qint64>((m_dbData.size())));
+ m_dbFile->close();
+
+ // make sure window is activated or focus tests may fail
+ m_mainWindow->activateWindow();
+ QApplication::processEvents();
+
+ // open and unlock the database
+ m_tabWidget->addDatabaseTab(m_dbFile->fileName(), false, "a");
+ m_dbWidget = m_tabWidget->currentDatabaseWidget();
+ m_db = m_dbWidget->database();
+
+ // by default expsoe the root group
+ FdoSecrets::settings()->setExposedGroup(m_db, m_db->rootGroup()->uuid());
+ QVERIFY(m_dbWidget->save());
+}
+
+// Every test ends with closing the temp database without saving
+void TestGuiFdoSecrets::cleanup()
+{
+ // restore to default settings
+ FdoSecrets::settings()->setShowNotification(false);
+ FdoSecrets::settings()->setEnabled(false);
+ if (m_plugin) {
+ m_plugin->updateServiceState();
+ }
+
+ // DO NOT save the database
+ for (int i = 0; i != m_tabWidget->count(); ++i) {
+ m_tabWidget->databaseWidgetFromIndex(i)->database()->markAsClean();
+ }
+ QVERIFY(m_tabWidget->closeAllDatabaseTabs());
+ QApplication::processEvents();
+
+ if (m_dbFile) {
+ m_dbFile->remove();
+ }
+}
+
+void TestGuiFdoSecrets::cleanupTestCase()
+{
+ if (m_dbFile) {
+ m_dbFile->remove();
+ }
+}
+
+void TestGuiFdoSecrets::testDBusSpec()
+{
+ auto service = enableService();
+ QVERIFY(service);
+
+ // service
+ QCOMPARE(service->objectPath().path(), QStringLiteral(DBUS_PATH_SECRETS));
+ QVERIFY(checkDBusSpec(service->objectPath().path(), DBUS_INTERFACE_SECRET_SERVICE));
+
+ // default alias
+ QVERIFY(checkDBusSpec(DBUS_PATH_DEFAULT_ALIAS, DBUS_INTERFACE_SECRET_COLLECTION));
+
+ // collection
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ QVERIFY(checkDBusSpec(coll->objectPath().path(), DBUS_INTERFACE_SECRET_COLLECTION));
+
+ // item
+ auto item = getFirstItem(coll);
+ QVERIFY(item);
+ QVERIFY(checkDBusSpec(item->objectPath().path(), DBUS_INTERFACE_SECRET_ITEM));
+
+ // session
+ auto sess = openSession(service, PlainCipher::Algorithm);
+ QVERIFY(sess);
+ QVERIFY(checkDBusSpec(sess->objectPath().path(), DBUS_INTERFACE_SECRET_SESSION));
+
+ // prompt
+ FdoSecrets::settings()->setNoConfirmDeleteItem(true);
+ PromptBase* prompt = nullptr;
+ {
+ auto rep = item->deleteItem();
+ QVERIFY(!rep.isError());
+ prompt = rep.value();
+ }
+ QVERIFY(prompt);
+ QVERIFY(checkDBusSpec(prompt->objectPath().path(), DBUS_INTERFACE_SECRET_PROMPT));
+}
+
+void TestGuiFdoSecrets::testServiceEnable()
+{
+ QSignalSpy sigError(m_plugin, SIGNAL(error(QString)));
+ QVERIFY(sigError.isValid());
+
+ QSignalSpy sigStarted(m_plugin, SIGNAL(secretServiceStarted()));
+ QVERIFY(sigStarted.isValid());
+
+ // make sure no one else is holding the service
+ QVERIFY(!QDBusConnection::sessionBus().interface()->isServiceRegistered(DBUS_SERVICE_SECRET));
+
+ // enable the service
+ auto service = enableService();
+ QVERIFY(service);
+
+ // service started without error
+ QVERIFY(sigError.isEmpty());
+ QCOMPARE(sigStarted.size(), 1);
+
+ QApplication::processEvents();
+
+ QVERIFY(QDBusConnection::sessionBus().interface()->isServiceRegistered(DBUS_SERVICE_SECRET));
+
+ // there will be one default collection
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+
+ COMPARE_DBUS_LOCAL_CALL(coll->locked(), false);
+ COMPARE_DBUS_LOCAL_CALL(coll->label(), m_db->metadata()->name());
+ COMPARE_DBUS_LOCAL_CALL(
+ coll->created(),
+ static_cast<qulonglong>(m_db->rootGroup()->timeInfo().creationTime().toMSecsSinceEpoch() / 1000));
+ COMPARE_DBUS_LOCAL_CALL(
+ coll->modified(),
+ static_cast<qulonglong>(m_db->rootGroup()->timeInfo().lastModificationTime().toMSecsSinceEpoch() / 1000));
+}
+
+void TestGuiFdoSecrets::testServiceEnableNoExposedDatabase()
+{
+ // reset the exposed group and then enable the service
+ FdoSecrets::settings()->setExposedGroup(m_db, {});
+ auto service = enableService();
+ QVERIFY(service);
+
+ // no collections
+ COMPARE_DBUS_LOCAL_CALL(service->collections(), QList<Collection*>{});
+}
+
+void TestGuiFdoSecrets::testServiceSearch()
+{
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ auto item = getFirstItem(coll);
+ QVERIFY(item);
+
+ item->backend()->attributes()->set("fdosecrets-test", "1");
+ item->backend()->attributes()->set("fdosecrets-test-protected", "2", true);
+ const QString crazyKey = "_a:bc&-+'-e%12df_d";
+ const QString crazyValue = "[v]al@-ue";
+ item->backend()->attributes()->set(crazyKey, crazyValue);
+
+ // search by title
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"Title", item->backend()->title()}}, locked));
+ QCOMPARE(locked.size(), 0);
+ QCOMPARE(unlocked, {item});
+ }
+
+ // search by attribute
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"fdosecrets-test", "1"}}, locked));
+ QCOMPARE(locked.size(), 0);
+ QCOMPARE(unlocked, {item});
+ }
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{crazyKey, crazyValue}}, locked));
+ QCOMPARE(locked.size(), 0);
+ QCOMPARE(unlocked, {item});
+ }
+
+ // searching using empty terms returns nothing
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({}, locked));
+ QCOMPARE(locked.size(), 0);
+ QCOMPARE(unlocked.size(), 0);
+ }
+
+ // searching using protected attributes or password returns nothing
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"Password", item->backend()->password()}}, locked));
+ QCOMPARE(locked.size(), 0);
+ QCOMPARE(unlocked.size(), 0);
+ }
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"fdosecrets-test-protected", "2"}}, locked));
+ QCOMPARE(locked.size(), 0);
+ QCOMPARE(unlocked.size(), 0);
+ }
+}
+
+void TestGuiFdoSecrets::testServiceUnlock()
+{
+ lockDatabaseInBackend();
+
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+
+ QSignalSpy spyCollectionCreated(service, SIGNAL(collectionCreated(Collection*)));
+ QVERIFY(spyCollectionCreated.isValid());
+ QSignalSpy spyCollectionDeleted(service, SIGNAL(collectionDeleted(Collection*)));
+ QVERIFY(spyCollectionDeleted.isValid());
+ QSignalSpy spyCollectionChanged(service, SIGNAL(collectionChanged(Collection*)));
+ QVERIFY(spyCollectionChanged.isValid());
+
+ PromptBase* prompt = nullptr;
+ {
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->unlock({coll.data()}, prompt));
+ // nothing is unlocked immediately without user's action
+ QVERIFY(unlocked.isEmpty());
+ }
+ QVERIFY(prompt);
+ QSignalSpy spyPromptCompleted(prompt, SIGNAL(completed(bool, QVariant)));
+ QVERIFY(spyPromptCompleted.isValid());
+
+ // nothing is unlocked yet
+ QCOMPARE(spyPromptCompleted.count(), 0);
+ QVERIFY(coll);
+ QVERIFY(coll->backend()->isLocked());
+
+ // drive the prompt
+ QVERIFY(!prompt->prompt("").isError());
+
+ // still not unlocked before user action
+ QCOMPARE(spyPromptCompleted.count(), 0);
+ QVERIFY(coll);
+ QVERIFY(coll->backend()->isLocked());
+
+ // interact with the dialog
+ QApplication::processEvents();
+ {
+ auto dbOpenDlg = m_tabWidget->findChild<DatabaseOpenDialog*>();
+ QVERIFY(dbOpenDlg);
+ auto editPassword = dbOpenDlg->findChild<QLineEdit*>("editPassword");
+ QVERIFY(editPassword);
+ editPassword->setFocus();
+ QTest::keyClicks(editPassword, "a");
+ QTest::keyClick(editPassword, Qt::Key_Enter);
+ }
+ QApplication::processEvents();
+
+ // unlocked
+ QVERIFY(coll);
+ QVERIFY(!coll->backend()->isLocked());
+
+ QCOMPARE(spyPromptCompleted.count(), 1);
+ {
+ auto args = spyPromptCompleted.takeFirst();
+ QCOMPARE(args.size(), 2);
+ QCOMPARE(args.at(0).toBool(), false);
+ QCOMPARE(args.at(1).value<QList<QDBusObjectPath>>(), {coll->objectPath()});
+ }
+ QCOMPARE(spyCollectionCreated.count(), 0);
+ QCOMPARE(spyCollectionChanged.count(), 1);
+ {
+ auto args = spyCollectionChanged.takeFirst();
+ QCOMPARE(args.size(), 1);
+ QCOMPARE(args.at(0).value<Collection*>(), coll.data());
+ }
+ QCOMPARE(spyCollectionDeleted.count(), 0);
+}
+
+void TestGuiFdoSecrets::testServiceLock()
+{
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+
+ QSignalSpy spyCollectionCreated(service, SIGNAL(collectionCreated(Collection*)));
+ QVERIFY(spyCollectionCreated.isValid());
+ QSignalSpy spyCollectionDeleted(service, SIGNAL(collectionDeleted(Collection*)));
+ QVERIFY(spyCollectionDeleted.isValid());
+ QSignalSpy spyCollectionChanged(service, SIGNAL(collectionChanged(Collection*)));
+ QVERIFY(spyCollectionChanged.isValid());
+
+ // if the db is modified, prompt user
+ m_db->markAsModified();
+ {
+ PromptBase* prompt = nullptr;
+ CHECKED_DBUS_LOCAL_CALL(locked, service->lock({coll}, prompt));
+ QCOMPARE(locked.size(), 0);
+ QVERIFY(prompt);
+ QSignalSpy spyPromptCompleted(prompt, SIGNAL(completed(bool, QVariant)));
+ QVERIFY(spyPromptCompleted.isValid());
+
+ // prompt and click cancel
+ MessageBox::setNextAnswer(MessageBox::Cancel);
+ QVERIFY(!prompt->prompt("").isError());
+ QApplication::processEvents();
+
+ QVERIFY(!coll->backend()->isLocked());
+
+ QCOMPARE(spyPromptCompleted.count(), 1);
+ auto args = spyPromptCompleted.takeFirst();
+ QCOMPARE(args.count(), 2);
+ QCOMPARE(args.at(0).toBool(), true);
+ QCOMPARE(args.at(1).value<QList<QDBusObjectPath>>(), {});
+ }
+ {
+ PromptBase* prompt = nullptr;
+ CHECKED_DBUS_LOCAL_CALL(locked, service->lock({coll}, prompt));
+ QCOMPARE(locked.size(), 0);
+ QVERIFY(prompt);
+ QSignalSpy spyPromptCompleted(prompt, SIGNAL(completed(bool, QVariant)));
+ QVERIFY(spyPromptCompleted.isValid());
+
+ // prompt and click save
+ MessageBox::setNextAnswer(MessageBox::Save);
+ QVERIFY(!prompt->prompt("").isError());
+ QApplication::processEvents();
+
+ QVERIFY(coll->backend()->isLocked());
+
+ QCOMPARE(spyPromptCompleted.count(), 1);
+ auto args = spyPromptCompleted.takeFirst();
+ QCOMPARE(args.count(), 2);
+ QCOMPARE(args.at(0).toBool(), false);
+ QCOMPARE(args.at(1).value<QList<QDBusObjectPath>>(), {coll->objectPath()});
+ }
+
+ QCOMPARE(spyCollectionCreated.count(), 0);
+ QCOMPARE(spyCollectionChanged.count(), 1);
+ {
+ auto args = spyCollectionChanged.takeFirst();
+ QCOMPARE(args.size(), 1);
+ QCOMPARE(args.at(0).value<Collection*>(), coll.data());
+ }
+ QCOMPARE(spyCollectionDeleted.count(), 0);
+
+ // locking item locks the whole db
+ unlockDatabaseInBackend();
+ {
+ auto item = getFirstItem(coll);
+ PromptBase* prompt = nullptr;
+ CHECKED_DBUS_LOCAL_CALL(locked, service->lock({item}, prompt));
+ QCOMPARE(locked.size(), 0);
+ QVERIFY(prompt);
+
+ MessageBox::setNextAnswer(MessageBox::Save);
+ QVERIFY(!prompt->prompt("").isError());
+ QApplication::processEvents();
+
+ QVERIFY(coll->backend()->isLocked());
+ }
+}
+
+void TestGuiFdoSecrets::testSessionOpen()
+{
+ auto service = enableService();
+ QVERIFY(service);
+
+ auto sess = openSession(service, PlainCipher::Algorithm);
+ QVERIFY(sess);
+ QCOMPARE(service->sessions().size(), 1);
+
+ sess = openSession(service, DhIetf1024Sha256Aes128CbcPkcs7::Algorithm);
+ QVERIFY(sess);
+ QCOMPARE(service->sessions().size(), 2);
+}
+
+void TestGuiFdoSecrets::testSessionClose()
+{
+ auto service = enableService();
+ QVERIFY(service);
+
+ auto sess = openSession(service, PlainCipher::Algorithm);
+ QVERIFY(sess);
+
+ QCOMPARE(service->sessions().size(), 1);
+
+ auto rep = sess->close();
+ QVERIFY(!rep.isError());
+
+ QCOMPARE(service->sessions().size(), 0);
+}
+
+void TestGuiFdoSecrets::testCollectionCreate()
+{
+ auto service = enableService();
+ QVERIFY(service);
+
+ QSignalSpy spyCollectionCreated(service, SIGNAL(collectionCreated(Collection*)));
+ QVERIFY(spyCollectionCreated.isValid());
+
+ // returns existing if alias is nonempty and exists
+ {
+ PromptBase* prompt = nullptr;
+ CHECKED_DBUS_LOCAL_CALL(
+ coll, service->createCollection({{DBUS_INTERFACE_SECRET_COLLECTION ".Label", "NewDB"}}, "default", prompt));
+ QVERIFY(!prompt);
+ QCOMPARE(coll, getDefaultCollection(service).data());
+ }
+ QCOMPARE(spyCollectionCreated.count(), 0);
+
+ // create new one and set properties
+ {
+ PromptBase* prompt = nullptr;
+ CHECKED_DBUS_LOCAL_CALL(
+ created,
+ service->createCollection({{DBUS_INTERFACE_SECRET_COLLECTION ".Label", "Test NewDB"}}, "mydatadb", prompt));
+ QVERIFY(!created);
+ QVERIFY(prompt);
+
+ QSignalSpy spyPromptCompleted(prompt, SIGNAL(completed(bool, QVariant)));
+ QVERIFY(spyPromptCompleted.isValid());
+
+ QTimer::singleShot(50, this, SLOT(createDatabaseCallback()));
+ QVERIFY(!prompt->prompt("").isError());
+ QApplication::processEvents();
+
+ QCOMPARE(spyPromptCompleted.count(), 1);
+ auto args = spyPromptCompleted.takeFirst();
+ QCOMPARE(args.size(), 2);
+ QCOMPARE(args.at(0).toBool(), false);
+ auto coll = FdoSecrets::pathToObject<Collection>(args.at(1).value<QDBusObjectPath>());
+ QVERIFY(coll);
+
+ QCOMPARE(coll->backend()->database()->metadata()->name(), QStringLiteral("Test NewDB"));
+
+ QCOMPARE(spyCollectionCreated.count(), 1);
+ {
+ args = spyCollectionCreated.takeFirst();
+ QCOMPARE(args.size(), 1);
+ QCOMPARE(args.at(0).value<Collection*>(), coll);
+ }
+ }
+}
+
+void TestGuiFdoSecrets::createDatabaseCallback()
+{
+ auto wizard = m_tabWidget->findChild<NewDatabaseWizard*>();
+ QVERIFY(wizard);
+
+ QCOMPARE(wizard->currentId(), 0);
+ wizard->next();
+ wizard->next();
+ QCOMPARE(wizard->currentId(), 2);
+
+ // enter password
+ auto* passwordEdit = wizard->findChild<QLineEdit*>("enterPasswordEdit");
+ auto* passwordRepeatEdit = wizard->findChild<QLineEdit*>("repeatPasswordEdit");
+ QTest::keyClicks(passwordEdit, "test");
+ QTest::keyClick(passwordEdit, Qt::Key::Key_Tab);
+ QTest::keyClicks(passwordRepeatEdit, "test");
+
+ // save database to temporary file
+ TemporaryFile tmpFile;
+ QVERIFY(tmpFile.open());
+ tmpFile.close();
+ fileDialog()->setNextFileName(tmpFile.fileName());
+
+ wizard->accept();
+
+ tmpFile.remove();
+}
+
+void TestGuiFdoSecrets::testCollectionDelete()
+{
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ // closing the tab calls coll->deleteLater()
+ // but deleteLater is not processed in QApplication::processEvent
+ // see https://doc.qt.io/qt-5/qcoreapplication.html#processEvents
+ auto rawColl = coll.data();
+
+ QSignalSpy spyCollectionDeleted(service, SIGNAL(collectionDeleted(Collection*)));
+ QVERIFY(spyCollectionDeleted.isValid());
+
+ m_db->markAsModified();
+ CHECKED_DBUS_LOCAL_CALL(prompt, coll->deleteCollection());
+ QVERIFY(prompt);
+ QSignalSpy spyPromptCompleted(prompt, SIGNAL(completed(bool, QVariant)));
+ QVERIFY(spyPromptCompleted.isValid());
+
+ // prompt and click save
+ MessageBox::setNextAnswer(MessageBox::Save);
+ QVERIFY(!prompt->prompt("").isError());
+
+ QApplication::processEvents();
+
+ // closing the tab should have deleted coll if not in testing
+ // but deleteLater is not processed in QApplication::processEvent
+ // see https://doc.qt.io/qt-5/qcoreapplication.html#processEvents
+ // QVERIFY(!coll);
+
+ QCOMPARE(spyPromptCompleted.count(), 1);
+ auto args = spyPromptCompleted.takeFirst();
+ QCOMPARE(args.count(), 2);
+ QCOMPARE(args.at(0).toBool(), false);
+ QCOMPARE(args.at(1).toString(), QStringLiteral(""));
+
+ QCOMPARE(spyCollectionDeleted.count(), 1);
+ {
+ args = spyCollectionDeleted.takeFirst();
+ QCOMPARE(args.size(), 1);
+ QCOMPARE(args.at(0).value<Collection*>(), rawColl);
+ }
+}
+
+void TestGuiFdoSecrets::testItemCreate()
+{
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ auto sess = openSession(service, DhIetf1024Sha256Aes128CbcPkcs7::Algorithm);
+ QVERIFY(sess);
+
+ // create item
+ StringStringMap attributes{
+ {"application", "fdosecrets-test"},
+ {"attr-i[bute]", "![some] -value*"},
+ };
+
+ auto item = createItem(sess, coll, "abc", "Password", attributes, false);
+ QVERIFY(item);
+
+ // attributes
+ {
+ CHECKED_DBUS_LOCAL_CALL(actual, item->attributes());
+ for (const auto& key : attributes.keys()) {
+ QVERIFY(actual.contains(key));
+ QCOMPARE(actual[key], attributes[key]);
+ }
+ }
+
+ // label
+ COMPARE_DBUS_LOCAL_CALL(item->label(), QStringLiteral("abc"));
+
+ // secrets
+ {
+ CHECKED_DBUS_LOCAL_CALL(ss, item->getSecret(sess));
+ ss = m_cipher->decrypt(ss);
+ QCOMPARE(ss.value, QByteArray("Password"));
+ }
+
+ // searchable
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems(attributes, locked));
+ QCOMPARE(locked, QList<Item*>{});
+ QCOMPARE(unlocked, QList<Item*>{item});
+ }
+ {
+ CHECKED_DBUS_LOCAL_CALL(unlocked, coll->searchItems(attributes));
+ QVERIFY(unlocked.contains(item));
+ }
+}
+
+void TestGuiFdoSecrets::testItemReplace()
+{
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ auto sess = openSession(service, DhIetf1024Sha256Aes128CbcPkcs7::Algorithm);
+ QVERIFY(sess);
+
+ // create item
+ StringStringMap attr1{
+ {"application", "fdosecrets-test"},
+ {"attr-i[bute]", "![some] -value*"},
+ {"fdosecrets-attr", "1"},
+ };
+ StringStringMap attr2{
+ {"application", "fdosecrets-test"},
+ {"attr-i[bute]", "![some] -value*"},
+ {"fdosecrets-attr", "2"},
+ };
+
+ auto item1 = createItem(sess, coll, "abc1", "Password", attr1, false);
+ QVERIFY(item1);
+ auto item2 = createItem(sess, coll, "abc2", "Password", attr2, false);
+ QVERIFY(item2);
+
+ {
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"application", "fdosecrets-test"}}, locked));
+ QCOMPARE(unlocked.size(), 2);
+ }
+
+ {
+ // when replace, existing item with matching attr is updated
+ auto item3 = createItem(sess, coll, "abc3", "Password", attr2, true);
+ QVERIFY(item3);
+ QCOMPARE(item2, item3);
+ COMPARE_DBUS_LOCAL_CALL(item3->label(), QStringLiteral("abc3"));
+ // there is still 2 entries
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"application", "fdosecrets-test"}}, locked));
+ QCOMPARE(unlocked.size(), 2);
+ }
+
+ {
+ // when NOT replace, another entry is created
+ auto item4 = createItem(sess, coll, "abc4", "Password", attr2, false);
+ QVERIFY(item4);
+ COMPARE_DBUS_LOCAL_CALL(item2->label(), QStringLiteral("abc3"));
+ COMPARE_DBUS_LOCAL_CALL(item4->label(), QStringLiteral("abc4"));
+ // there is 3 entries
+ QList<Item*> locked;
+ CHECKED_DBUS_LOCAL_CALL(unlocked, service->searchItems({{"application", "fdosecrets-test"}}, locked));
+ QCOMPARE(unlocked.size(), 3);
+ }
+}
+
+void TestGuiFdoSecrets::testItemSecret()
+{
+ const QString TEXT_PLAIN = "text/plain";
+ const QString APPLICATION_OCTET_STREAM = "application/octet-stream";
+
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ auto item = getFirstItem(coll);
+ QVERIFY(item);
+ auto sess = openSession(service, DhIetf1024Sha256Aes128CbcPkcs7::Algorithm);
+ QVERIFY(sess);
+
+ // plain text secret
+ {
+ CHECKED_DBUS_LOCAL_CALL(encrypted, item->getSecret(sess));
+ auto ss = m_cipher->decrypt(encrypted);
+ QCOMPARE(ss.contentType, TEXT_PLAIN);
+ QCOMPARE(ss.value, item->backend()->password().toUtf8());
+ }
+
+ // get secret with notification (only works when called from DBUS)
+ FdoSecrets::settings()->setShowNotification(true);
+ {
+ QSignalSpy spyShowNotification(m_plugin, SIGNAL(requestShowNotification(QString, QString, int)));
+ QVERIFY(spyShowNotification.isValid());
+
+ auto iitem = interfaceOf(item);
+ QVERIFY(static_cast<bool>(iitem));
+
+ auto replyMsg = iitem->call(QDBus::BlockWithGui, "GetSecret", QVariant::fromValue(sess->objectPath()));
+ auto reply = QDBusPendingReply<SecretStruct>(replyMsg);
+ QVERIFY(reply.isValid());
+ auto ss = m_cipher->decrypt(reply.argumentAt<0>());
+
+ QCOMPARE(ss.contentType, TEXT_PLAIN);
+ QCOMPARE(ss.value, item->backend()->password().toUtf8());
+
+ QCOMPARE(spyShowNotification.count(), 1);
+ }
+ FdoSecrets::settings()->setShowNotification(false);
+
+ // set secret with plain text
+ {
+ SecretStruct ss;
+ ss.contentType = TEXT_PLAIN;
+ ss.value = "NewPassword";
+ ss.session = sess->objectPath();
+ QVERIFY(!item->setSecret(m_cipher->encrypt(ss)).isError());
+
+ QCOMPARE(item->backend()->password().toUtf8(), ss.value);
+ }
+
+ // set secret with something else is saved as attachment
+ {
+ SecretStruct expected;
+ expected.contentType = APPLICATION_OCTET_STREAM;
+ expected.value = "NewPasswordBinary";
+ expected.session = sess->objectPath();
+ QVERIFY(!item->setSecret(m_cipher->encrypt(expected)).isError());
+
+ QCOMPARE(item->backend()->password(), QStringLiteral(""));
+
+ CHECKED_DBUS_LOCAL_CALL(encrypted, item->getSecret(sess));
+ auto ss = m_cipher->decrypt(encrypted);
+ QCOMPARE(ss.contentType, expected.contentType);
+ QCOMPARE(ss.value, expected.value);
+ }
+}
+
+void TestGuiFdoSecrets::testItemDelete()
+{
+ FdoSecrets::settings()->setNoConfirmDeleteItem(false);
+
+ auto service = enableService();
+ QVERIFY(service);
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ auto item = getFirstItem(coll);
+ QVERIFY(item);
+ auto rawItem = item.data();
+
+ QSignalSpy spyItemDeleted(coll, SIGNAL(itemDeleted(Item*)));
+ QVERIFY(spyItemDeleted.isValid());
+
+ CHECKED_DBUS_LOCAL_CALL(prompt, item->deleteItem());
+ QVERIFY(prompt);
+
+ QSignalSpy spyPromptCompleted(prompt, SIGNAL(completed(bool, QVariant)));
+ QVERIFY(spyPromptCompleted.isValid());
+
+ // prompt and click save
+ if (item->isDeletePermanent()) {
+ MessageBox::setNextAnswer(MessageBox::Delete);
+ } else {
+ MessageBox::setNextAnswer(MessageBox::Move);
+ }
+ QVERIFY(!prompt->prompt("").isError());
+
+ QApplication::processEvents();
+
+ QCOMPARE(spyPromptCompleted.count(), 1);
+ auto args = spyPromptCompleted.takeFirst();
+ QCOMPARE(args.count(), 2);
+ QCOMPARE(args.at(0).toBool(), false);
+ QCOMPARE(args.at(1).toString(), QStringLiteral(""));
+
+ QCOMPARE(spyItemDeleted.count(), 1);
+ {
+ args = spyItemDeleted.takeFirst();
+ QCOMPARE(args.size(), 1);
+ QCOMPARE(args.at(0).value<Item*>(), rawItem);
+ }
+}
+
+void TestGuiFdoSecrets::testAlias()
+{
+ auto service = enableService();
+ QVERIFY(service);
+
+ // read default alias
+ CHECKED_DBUS_LOCAL_CALL(coll, service->readAlias("default"));
+ QVERIFY(coll);
+
+ // set extra alias
+ QVERIFY(!service->setAlias("another", coll).isError());
+
+ // get using extra alias
+ CHECKED_DBUS_LOCAL_CALL(coll2, service->readAlias("another"));
+ QVERIFY(coll2);
+ QCOMPARE(coll, coll2);
+}
+
+void TestGuiFdoSecrets::testDefaultAliasAlwaysPresent()
+{
+ auto service = enableService();
+ QVERIFY(service);
+
+ // one collection, which is default alias
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+
+ // after locking, the collection is still there, but locked
+ lockDatabaseInBackend();
+
+ coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ COMPARE_DBUS_LOCAL_CALL(coll->locked(), true);
+
+ // unlock the database, the alias and collection is present
+ unlockDatabaseInBackend();
+
+ coll = getDefaultCollection(service);
+ QVERIFY(coll);
+ COMPARE_DBUS_LOCAL_CALL(coll->locked(), false);
+}
+
+void TestGuiFdoSecrets::testExposeSubgroup()
+{
+ auto subgroup = m_db->rootGroup()->findGroupByPath("/Homebanking/Subgroup");
+ QVERIFY(subgroup);
+ FdoSecrets::settings()->setExposedGroup(m_db, subgroup->uuid());
+ auto service = enableService();
+ QVERIFY(service);
+
+ auto coll = getDefaultCollection(service);
+ QVERIFY(coll);
+
+ // exposing subgroup does not expose entries in other groups
+ auto items = coll->items();
+ QVERIFY(!items.isError());
+ QList<Entry*> exposedEntries;
+ for (const auto& item : items.value()) {
+ exposedEntries << item->backend();
+ }
+ QCOMPARE(exposedEntries, subgroup->entries());
+}
+
+void TestGuiFdoSecrets::testModifiyingExposedGroup()
+{
+ // test when exposed group is removed the collection is not exposed anymore
+ auto subgroup = m_db->rootGroup()->findGroupByPath("/Homebanking");
+ QVERIFY(subgroup);
+ FdoSecrets::settings()->setExposedGroup(m_db, subgroup->uuid());
+ auto service = enableService();
+ QVERIFY(service);
+
+ {
+ CHECKED_DBUS_LOCAL_CALL(colls, service->collections());
+ QCOMPARE(colls.size(), 1);
+ }
+
+ m_db->metadata()->setRecycleBinEnabled(true);
+ m_db->recycleGroup(subgroup);
+ QApplication::processEvents();
+
+ {
+ CHECKED_DBUS_LOCAL_CALL(colls, service->collections());
+ QCOMPARE(colls.size(), 0);
+ }
+
+ // test setting another exposed group, the collection will be exposed again
+ FdoSecrets::settings()->setExposedGroup(m_db, m_db->rootGroup()->uuid());
+ QApplication::processEvents();
+ {
+ CHECKED_DBUS_LOCAL_CALL(colls, service->collections());
+ QCOMPARE(colls.size(), 1);
+ }
+}
+
+QPointer<Service> TestGuiFdoSecrets::enableService()
+{
+ FdoSecrets::settings()->setEnabled(true);
+ VERIFY(m_plugin);
+ m_plugin->updateServiceState();
+ return m_plugin->serviceInstance();
+}
+
+QPointer<Session> TestGuiFdoSecrets::openSession(Service* service, const QString& algo)
+{
+ // open session has to be called actually over DBUS to get peer info
+
+ VERIFY(service);
+ auto iservice = interfaceOf(service);
+ VERIFY(iservice);
+
+ if (algo == PlainCipher::Algorithm) {
+ auto replyMsg = iservice->call(QDBus::BlockWithGui, "OpenSession", algo, QVariant::fromValue(QDBusVariant("")));
+ auto reply = QDBusPendingReply<QDBusVariant, QDBusObjectPath>(replyMsg);
+
+ VERIFY(reply.isValid());
+ return FdoSecrets::pathToObject<Session>(reply.argumentAt<1>());
+ } else if (algo == DhIetf1024Sha256Aes128CbcPkcs7::Algorithm) {
+
+ DhIetf1024Sha256Aes128CbcPkcs7::fixNextServerKeys(MpiFromBytes(MpiToBytes(m_serverPrivate)),
+ MpiFromBytes(MpiToBytes(m_serverPublic)));
+
+ auto replyMsg = iservice->call(
+ QDBus::BlockWithGui, "OpenSession", algo, QVariant::fromValue(QDBusVariant(m_cipher->m_publicKey)));
+ auto reply = QDBusPendingReply<QDBusVariant, QDBusObjectPath>(replyMsg);
+ VERIFY(reply.isValid());
+ COMPARE(qvariant_cast<QByteArray>(reply.argumentAt<0>().variant()), MpiToBytes(m_serverPublic));
+ return FdoSecrets::pathToObject<Session>(reply.argumentAt<1>());
+ }
+ FAIL("Unsupported algorithm");
+}
+
+QPointer<Collection> TestGuiFdoSecrets::getDefaultCollection(Service* service)
+{
+ VERIFY(service);
+ auto coll = service->readAlias("default");
+ VERIFY(!coll.isError());
+ return coll.value();
+}
+
+QPointer<Item> TestGuiFdoSecrets::getFirstItem(Collection* coll)
+{
+ VERIFY(coll);
+ auto items = coll->items();
+ VERIFY(!items.isError());
+ VERIFY(!items.value().isEmpty());
+ return items.value().at(0);
+}
+
+QPointer<Item> TestGuiFdoSecrets::createItem(Session* sess,
+ Collection* coll,
+ const QString& label,
+ const QString& pass,
+ const StringStringMap& attr,
+ bool replace)
+{
+ VERIFY(sess);
+ VERIFY(coll);
+
+ QVariantMap properties{
+ {DBUS_INTERFACE_SECRET_ITEM ".Label", QVariant::fromValue(label)},
+ {DBUS_INTERFACE_SECRET_ITEM ".Attributes", QVariant::fromValue(attr)},
+ };
+
+ SecretStruct ss;
+ ss.session = sess->objectPath();
+ ss.value = pass.toLocal8Bit();
+ ss.contentType = "plain/text";
+ ss = m_cipher->encrypt(ss);
+
+ PromptBase* prompt = nullptr;
+ auto item = coll->createItem(properties, ss, replace, prompt);
+ VERIFY(!item.isError());
+ // creating item does not have a prompt to show
+ VERIFY(!prompt);
+ return item.value();
+}
+
+void TestGuiFdoSecrets::lockDatabaseInBackend()
+{
+ m_dbWidget->lock();
+ m_db.reset();
+ QApplication::processEvents();
+}
+
+void TestGuiFdoSecrets::unlockDatabaseInBackend()
+{
+ m_dbWidget->performUnlockDatabase("a");
+ m_db = m_dbWidget->database();
+ QApplication::processEvents();
+}
diff --git a/tests/gui/TestGuiFdoSecrets.h b/tests/gui/TestGuiFdoSecrets.h
new file mode 100644
index 000000000..8a961eb8e
--- /dev/null
+++ b/tests/gui/TestGuiFdoSecrets.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2019 Aetf <aetf@unlimitedcodeworks.xyz>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KEEPASSXC_TESTGUIFDOSECRETS_H
+#define KEEPASSXC_TESTGUIFDOSECRETS_H
+
+#include <QByteArray>
+#include <QObject>
+#include <QPointer>
+#include <QScopedPointer>
+#include <QSharedPointer>
+#include <QString>
+
+#include "fdosecrets/GcryptMPI.h"
+#include "fdosecrets/objects/DBusTypes.h"
+
+class MainWindow;
+class Database;
+class DatabaseTabWidget;
+class DatabaseWidget;
+class TemporaryFile;
+class FdoSecretsPlugin;
+namespace FdoSecrets
+{
+ class Service;
+ class Session;
+ class Collection;
+ class Item;
+ class Prompt;
+ class DhIetf1024Sha256Aes128CbcPkcs7;
+} // namespace FdoSecrets
+
+class QAbstractItemView;
+
+class TestGuiFdoSecrets : public QObject
+{
+ Q_OBJECT
+
+public:
+ ~TestGuiFdoSecrets() override;
+
+private slots:
+ void initTestCase();
+ void init();
+ void cleanup();
+ void cleanupTestCase();
+
+ void testDBusSpec();
+
+ void testServiceEnable();
+ void testServiceEnableNoExposedDatabase();
+ void testServiceSearch();
+ void testServiceUnlock();
+ void testServiceLock();
+
+ void testSessionOpen();
+ void testSessionClose();
+
+ void testCollectionCreate();
+ void testCollectionDelete();
+
+ void testItemCreate();
+ void testItemReplace();
+ void testItemSecret();
+ void testItemDelete();
+
+ void testAlias();
+ void testDefaultAliasAlwaysPresent();
+
+ void testExposeSubgroup();
+ void testModifiyingExposedGroup();
+
+protected slots:
+ void createDatabaseCallback();
+
+private:
+ void lockDatabaseInBackend();
+ void unlockDatabaseInBackend();
+ QPointer<FdoSecrets::Service> enableService();
+ QPointer<FdoSecrets::Session> openSession(FdoSecrets::Service* service, const QString& algo);
+ QPointer<FdoSecrets::Collection> getDefaultCollection(FdoSecrets::Service* service);
+ QPointer<FdoSecrets::Item> getFirstItem(FdoSecrets::Collection* coll);
+ QPointer<FdoSecrets::Item> createItem(FdoSecrets::Session* sess,
+ FdoSecrets::Collection* coll,
+ const QString& label,
+ const QString& pass,
+ const StringStringMap& attr,
+ bool replace);
+
+private:
+ QScopedPointer<MainWindow> m_mainWindow;
+ QPointer<DatabaseTabWidget> m_tabWidget;
+ QPointer<DatabaseWidget> m_dbWidget;
+ QSharedPointer<Database> m_db;
+
+ QPointer<FdoSecretsPlugin> m_plugin;
+
+ // For DH session tests
+ GcryptMPI m_serverPrivate;
+ GcryptMPI m_serverPublic;
+ std::unique_ptr<FdoSecrets::DhIetf1024Sha256Aes128CbcPkcs7> m_cipher;
+
+ QByteArray m_dbData;
+ QScopedPointer<TemporaryFile> m_dbFile;
+};
+
+#endif // KEEPASSXC_TESTGUIFDOSECRETS_H
diff --git a/tests/gui/TestGuiPixmaps.cpp b/tests/gui/TestGuiPixmaps.cpp
index c5754ba84..a6644f547 100644
--- a/tests/gui/TestGuiPixmaps.cpp
+++ b/tests/gui/TestGuiPixmaps.cpp
@@ -28,117 +28,55 @@ void TestGuiPixmaps::initTestCase()
void TestGuiPixmaps::testDatabaseIcons()
{
- QImage image;
- QPixmap pixmap;
- QPixmap pixmapCached;
-
- image = databaseIcons()->icon(0);
- pixmap = databaseIcons()->iconPixmap(0);
- compareImages(pixmap, image);
// check if the cache works correctly
- pixmapCached = databaseIcons()->iconPixmap(0);
- compareImages(pixmapCached, image);
- QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey());
-
- pixmap = databaseIcons()->iconPixmap(1);
- image = databaseIcons()->icon(1);
- compareImages(pixmap, image);
- pixmapCached = databaseIcons()->iconPixmap(1);
- compareImages(pixmapCached, image);
+ auto pixmap = databaseIcons()->icon(0);
+ auto pixmapCached = databaseIcons()->icon(0);
QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey());
}
void TestGuiPixmaps::testEntryIcons()
{
- Database* db = new Database();
+ QScopedPointer<Database> db(new Database());
Entry* entry = new Entry();
entry->setGroup(db->rootGroup());
- QImage icon;
- QImage image;
- QPixmap pixmap;
- QPixmap pixmapCached1;
- QPixmap pixmapCached2;
-
- icon = databaseIcons()->icon(10);
+ // Test setting standard icon
entry->setIcon(10);
- image = entry->icon();
- pixmap = entry->iconPixmap();
- QCOMPARE(image, icon);
- compareImages(pixmap, icon);
- pixmapCached1 = entry->iconPixmap();
- pixmapCached2 = databaseIcons()->iconPixmap(10);
- compareImages(pixmapCached1, icon);
- compareImages(pixmapCached2, icon);
- QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey());
- QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey());
+ auto pixmap = entry->iconPixmap();
+ QCOMPARE(pixmap.cacheKey(), databaseIcons()->icon(10).cacheKey());
+ // Test setting custom icon
QUuid iconUuid = QUuid::createUuid();
- icon = QImage(2, 1, QImage::Format_RGB32);
+ QImage icon(2, 1, QImage::Format_RGB32);
icon.setPixel(0, 0, qRgb(0, 0, 0));
icon.setPixel(1, 0, qRgb(0, 0, 50));
db->metadata()->addCustomIcon(iconUuid, icon);
- entry->setIcon(iconUuid);
- image = entry->icon();
+ entry->setIcon(iconUuid);
pixmap = entry->iconPixmap();
-
- QCOMPARE(image, icon);
- compareImages(pixmap, icon);
- pixmapCached1 = entry->iconPixmap();
- compareImages(pixmapCached1, icon);
- QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey());
-
- delete db;
+ QCOMPARE(pixmap.cacheKey(), db->metadata()->customIconPixmap(iconUuid).cacheKey());
}
void TestGuiPixmaps::testGroupIcons()
{
- Database* db = new Database();
+ QScopedPointer<Database> db(new Database());
Group* group = db->rootGroup();
- QImage icon;
- QImage image;
- QPixmap pixmap;
- QPixmap pixmapCached1;
- QPixmap pixmapCached2;
-
- icon = databaseIcons()->icon(10);
+ // Test setting standard icon
group->setIcon(10);
- image = group->icon();
- pixmap = group->iconPixmap();
- QCOMPARE(image, icon);
- compareImages(pixmap, icon);
- pixmapCached1 = group->iconPixmap();
- pixmapCached2 = databaseIcons()->iconPixmap(10);
- compareImages(pixmapCached1, icon);
- compareImages(pixmapCached2, icon);
- QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey());
- QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey());
+ auto pixmap = group->iconPixmap();
+ QCOMPARE(pixmap.cacheKey(), databaseIcons()->icon(10).cacheKey());
+ // Test setting custom icon
QUuid iconUuid = QUuid::createUuid();
- icon = QImage(2, 1, QImage::Format_RGB32);
+ QImage icon(2, 1, QImage::Format_RGB32);
icon.setPixel(0, 0, qRgb(0, 0, 0));
icon.setPixel(1, 0, qRgb(0, 0, 50));
db->metadata()->addCustomIcon(iconUuid, icon);
- group->setIcon(iconUuid);
- image = group->icon();
+ group->setIcon(iconUuid);
pixmap = group->iconPixmap();
-
- QCOMPARE(image, icon);
- compareImages(pixmap, icon);
- pixmapCached1 = group->iconPixmap();
- compareImages(pixmapCached1, icon);
- QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey());
-
- delete db;
-}
-
-void TestGuiPixmaps::compareImages(const QPixmap& pixmap, const QImage& image)
-{
- QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied),
- image.convertToFormat(QImage::Format_ARGB32_Premultiplied));
+ QCOMPARE(pixmap.cacheKey(), db->metadata()->customIconPixmap(iconUuid).cacheKey());
}
QTEST_MAIN(TestGuiPixmaps)
diff --git a/tests/gui/TestGuiPixmaps.h b/tests/gui/TestGuiPixmaps.h
index 6e649c0f7..da55643a4 100644
--- a/tests/gui/TestGuiPixmaps.h
+++ b/tests/gui/TestGuiPixmaps.h
@@ -31,9 +31,6 @@ private slots:
void testDatabaseIcons();
void testEntryIcons();
void testGroupIcons();
-
-private:
- void compareImages(const QPixmap& pixmap, const QImage& image);
};
#endif // KEEPASSX_TESTGUIPIXMAPS_H
diff --git a/utils/keepassxc-cr-recovery/.gitignore b/utils/keepassxc-cr-recovery/.gitignore
new file mode 100644
index 000000000..01d743bff
--- /dev/null
+++ b/utils/keepassxc-cr-recovery/.gitignore
@@ -0,0 +1 @@
+keepass-cr-recovery
diff --git a/utils/keepassxc-cr-recovery/README.md b/utils/keepassxc-cr-recovery/README.md
new file mode 100644
index 000000000..d6e3fef11
--- /dev/null
+++ b/utils/keepassxc-cr-recovery/README.md
@@ -0,0 +1,20 @@
+# keepassxc-cr-recovery
+
+A small tool that helps you regain access to your KeePassXC password database in case you have it protected with YubiKey challenge-response and lost your key.
+Currently supports KDBX4 databases with Argon2 hashing.
+
+## Building
+
+Tested with Go 1.13. Just run `go build`.
+
+## Usage
+
+What you need:
+* your KeePassXC database
+* your challenge-response secret. This cannot be retrieved from the YubiKey, it needs to be saved upon initial configuration of the key.
+
+Then just run
+```shell
+keepass-cr-recovery path-to-your-password-database path-of-the-new-keyfile
+```
+It will prompt for the challenge-response secret. You will get a keyfile at the specified destination path. Then, to unlock your database in KeePassXC, you need to check "key file" instead of "challenge response" and load the file. \ No newline at end of file
diff --git a/utils/keepassxc-cr-recovery/go.mod b/utils/keepassxc-cr-recovery/go.mod
new file mode 100644
index 000000000..89afe5e32
--- /dev/null
+++ b/utils/keepassxc-cr-recovery/go.mod
@@ -0,0 +1,5 @@
+module github.com/keepassxreboot/keepassxc/keepassxc-cr-recovery
+
+go 1.13
+
+require golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876
diff --git a/utils/keepassxc-cr-recovery/go.sum b/utils/keepassxc-cr-recovery/go.sum
new file mode 100644
index 000000000..452e5b0ad
--- /dev/null
+++ b/utils/keepassxc-cr-recovery/go.sum
@@ -0,0 +1,8 @@
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876 h1:sKJQZMuxjOAR/Uo2LBfU90onWEf1dF4C+0hPJCc9Mpc=
+golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/utils/keepassxc-cr-recovery/main.go b/utils/keepassxc-cr-recovery/main.go
new file mode 100644
index 000000000..b9e64d3ed
--- /dev/null
+++ b/utils/keepassxc-cr-recovery/main.go
@@ -0,0 +1,182 @@
+package main
+
+import (
+ "bytes"
+ "crypto/hmac"
+ "crypto/sha1"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "syscall"
+
+ "encoding/binary"
+ "encoding/hex"
+
+ "golang.org/x/crypto/ssh/terminal"
+)
+
+const fileVersionCriticalMask uint32 = 0xFFFF0000
+const argon2Salt = "S"
+const endOfHeader = 0
+const endOfVariantMap = 0
+const kdfParameters = 11
+
+func readSecret() (string, error) {
+ fmt.Print("Secret: ")
+ byteSecret, err := terminal.ReadPassword(int(syscall.Stdin))
+ fmt.Println()
+ secret := string(byteSecret)
+ return secret, err
+
+}
+func readHeaderField(reader io.Reader) (bool, byte, []byte, error) {
+ var fieldID byte
+ err := binary.Read(reader, binary.LittleEndian, &fieldID)
+ if err != nil {
+ return true, 0, nil, err
+ }
+
+ if fieldID == endOfHeader {
+ return false, 0, nil, nil
+ }
+
+ var fieldLength uint32
+ err = binary.Read(reader, binary.LittleEndian, &fieldLength)
+ if err != nil {
+ return true, fieldID, nil, err
+ }
+
+ fieldData := make([]byte, fieldLength)
+ err = binary.Read(reader, binary.LittleEndian, &fieldData)
+ if err != nil {
+ return true, fieldID, fieldData, err
+ }
+ return true, fieldID, fieldData, nil
+}
+func readVariantMap(reader io.Reader) ([]byte, error) {
+ var version uint16
+ err := binary.Read(reader, binary.LittleEndian, &version)
+ if err != nil {
+ return nil, err
+ }
+
+ var fieldType byte
+ for err = binary.Read(reader, binary.LittleEndian, &fieldType); fieldType != endOfVariantMap && err == nil; err = binary.Read(reader, binary.LittleEndian, &fieldType) {
+
+ var nameLen uint32
+ err = binary.Read(reader, binary.LittleEndian, &nameLen)
+ if err != nil {
+ return nil, err
+ }
+
+ nameBytes := make([]byte, nameLen)
+ err = binary.Read(reader, binary.LittleEndian, &nameBytes)
+ if err != nil {
+ return nil, err
+ }
+
+ name := string(nameBytes)
+
+ var valueLen uint32
+ err = binary.Read(reader, binary.LittleEndian, &valueLen)
+ if err != nil {
+ return nil, err
+ }
+
+ value := make([]byte, valueLen)
+ err = binary.Read(reader, binary.LittleEndian, &value)
+ if err != nil {
+ return nil, err
+ }
+
+ if name == argon2Salt {
+ return value, nil
+ }
+ }
+ return nil, nil
+}
+func readKeepassHeader(keepassFilename string) ([]byte, error) {
+ dbFile, err := os.Open(keepassFilename)
+ defer dbFile.Close()
+ if err != nil {
+ return nil, err
+ }
+
+ var sig1, sig2, version uint32
+ err = binary.Read(dbFile, binary.LittleEndian, &sig1)
+ if err != nil {
+ return nil, err
+ }
+
+ err = binary.Read(dbFile, binary.LittleEndian, &sig2)
+ if err != nil {
+ return nil, err
+ }
+
+ err = binary.Read(dbFile, binary.LittleEndian, &version)
+ if err != nil {
+ return nil, err
+ }
+
+ version &= fileVersionCriticalMask
+
+ var fieldData []byte
+ var fieldID byte
+ var moreFields bool
+
+ for moreFields, fieldID, fieldData, err = readHeaderField(dbFile); moreFields && err == nil && fieldID != kdfParameters; moreFields, fieldID, fieldData, err = readHeaderField(dbFile) {
+ }
+ if err != nil {
+ return nil, err
+ }
+
+ fieldReader := bytes.NewReader(fieldData)
+ seed, err := readVariantMap(fieldReader)
+ if err != nil {
+ return nil, err
+ }
+ return seed, nil
+
+}
+func main() {
+ log.SetFlags(0)
+ args := os.Args
+
+ if len(args) != 3 {
+ log.Fatalf("usage: %s keepassxc-database keyfile", args[0])
+ }
+
+ dbFilename := args[1]
+ keyFilename := args[2]
+
+ if _, err := os.Stat(keyFilename); err == nil {
+ log.Fatalf("keyfile already exists, exiting")
+ }
+ secretHex, err := readSecret()
+ if err != nil {
+ log.Fatalf("couldn't read secret from stdin: %s", err)
+ }
+ secret, err := hex.DecodeString(secretHex)
+
+ if err != nil {
+ log.Fatalf("couldn't decode secret: %s", err)
+ }
+
+ challenge, err := readKeepassHeader(dbFilename)
+ if err != nil {
+ log.Fatalf("couldn't read challenge: %s", err)
+ }
+
+ mac := hmac.New(sha1.New, secret)
+ mac.Write(challenge)
+
+ hash := mac.Sum(nil)
+
+ err = ioutil.WriteFile(keyFilename, hash, 0644)
+ if err != nil {
+ log.Fatalf("couldn't write keyfile: %s", err)
+ }
+
+}
diff --git a/utils/keepassxc-snap-helper.sh b/utils/keepassxc-snap-helper.sh
index 206accaf1..ecb290daa 100755
--- a/utils/keepassxc-snap-helper.sh
+++ b/utils/keepassxc-snap-helper.sh
@@ -20,29 +20,30 @@ set -e
DEBUG=false
-JSON_BASE=$(cat << EOF
+JSON_FIREFOX=$(cat << EOF
{
"name": "org.keepassxc.keepassxc_browser",
"description": "KeePassXC integration with native messaging support",
"path": "/snap/bin/keepassxc.proxy",
"type": "stdio",
- __EXT__
-}
-EOF
-)
-
-JSON_FIREFOX=$(cat << EOF
-"allowed_extensions": [
+ "allowed_extensions": [
"keepassxc-browser@keepassxc.org"
]
+}
EOF
)
JSON_CHROME=$(cat << EOF
-"allowed_origins": [
+{
+ "name": "org.keepassxc.keepassxc_browser",
+ "description": "KeePassXC integration with native messaging support",
+ "path": "/snap/bin/keepassxc.proxy",
+ "type": "stdio",
+ "allowed_origins": [
"chrome-extension://iopaggbpplllidnfmcghoonnokmjoicf/",
"chrome-extension://oboonakemofpalcgghocfoadofidjkkk/"
]
+}
EOF
)
@@ -52,12 +53,12 @@ INSTALL_DIR=""
INSTALL_FILE="org.keepassxc.keepassxc_browser.json"
buildJson() {
- if [[ ! -z $1 ]]; then
+ if [ -n "$1" ]; then
# Insert Firefox data
- JSON_OUT="${JSON_BASE/__EXT__/$JSON_FIREFOX}"
+ JSON_OUT=$JSON_FIREFOX
else
# Insert Chrome data
- JSON_OUT="${JSON_BASE/__EXT__/$JSON_CHROME}"
+ JSON_OUT=$JSON_CHROME
fi
}
diff --git a/utils/makeappicons.sh b/utils/makeappicons.sh
new file mode 100644
index 000000000..707a24b21
--- /dev/null
+++ b/utils/makeappicons.sh
@@ -0,0 +1,174 @@
+#!/usr/bin/env bash
+#
+# Copy icon files from the Material Design icon set.
+#
+# Copyright (C) 2020 Wolfram Rösler
+# Copyright (C) 2020 KeePassXC team <https://keepassxc.org/>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 or (at your option)
+# version 3 of the License.
+#
+# 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# How to use: (assuming you check out stuff in ~/src)
+#
+# 0. Make sure to have a clean working tree
+#
+# 1. Download the Material Design icon set:
+# $ cd ~/src
+# $ git clone https://github.com/Templarian/MaterialDesign.git
+#
+# 2. Go to the icon source directory:
+# $ cd ~/src/keepassxc/share/icons
+#
+# 3. Create the icons:
+# $ bash ../../utils/makeicons.sh ~/src/MaterialDesign
+#
+# 4. Re-build and run KeePassXC:
+# $ cd ~/keepassxc/build
+# $ make keepassxc && src/keepassxc
+#
+# Material icons: https://materialdesignicons.com/
+
+NC='\033[0m'
+RED='\033[0;31m'
+YELLOW='\033[0;33m'
+
+if [ $# != 1 ];then
+ echo "Usage: $0 MATERIAL"
+ echo "MATERIAL is the directory containing the material icons repository"
+ echo "(git clone https://github.com/Templarian/MaterialDesign.git)".
+ exit
+fi
+
+MATERIAL="$1"
+if [ ! -d "$MATERIAL" ];then
+ echo -e "${RED}Material Icons directory does not exist: ${MATERIAL}${NC}"
+ exit 1
+fi
+
+# Check destination dir
+DSTDIR=share/icons/application
+if [ ! -d "$DSTDIR" ];then
+ echo -e "${RED}Please invoke this script from the KeePassXC source root directory.${NC}"
+ exit 1
+fi
+
+# Map KeePassXC icon names to Material icon names.
+# $1 is the name of the icon file in the KeePassXC source (without
+# path and without extension, e. g. "document-new").
+# Writes the name of the Material icon (without path and without
+# extension, e. g. "folder-plus") to stdout.
+# If the icon name is unknown, outputs nothing.
+map() {
+ case "$1" in
+ application-exit) echo exit-run ;;
+ auto-type) echo keyboard-variant ;;
+ bugreport) echo bug-outline ;;
+ chronometer) echo clock-outline ;;
+ clipboard-text) echo clipboard-text-outline ;;
+ configure) echo cog-outline ;;
+ database-change-key) echo key ;;
+ database-close) echo close ;;
+ database-lock) echo lock-outline ;;
+ database-merge) echo merge ;;
+ dialog-close) echo close ;;
+ dialog-error) echo alert-circle-outline ;;
+ dialog-information) echo information-outline ;;
+ dialog-ok) echo checkbox-marked-circle ;;
+ dialog-warning) echo alert-outline ;;
+ document-close) echo close ;;
+ document-edit) echo pencil ;;
+ document-export) echo export ;;
+ document-import) echo import ;;
+ document-new) echo plus ;;
+ document-open) echo folder-open-outline ;;
+ document-open-recent) echo folder-clock-outline ;;
+ document-properties) echo file-edit-outline ;;
+ document-save) echo content-save-outline ;;
+ document-save-as) echo content-save-all-outline ;;
+ document-save-copy) echo content-save-move-outline ;;
+ donate) echo gift-outline ;;
+ edit-clear-locationbar-ltr) echo backspace-reverse-outline ;;
+ edit-clear-locationbar-rtl) echo backspace-outline ;;
+ entry-clone) echo plus-circle-multiple-outline ;;
+ entry-delete) echo close-circle-outline ;;
+ entry-edit) echo pencil-circle-outline ;;
+ entry-new) echo plus-circle-outline ;;
+ favicon-download) echo download ;;
+ getting-started) echo lightbulb-on-outline ;;
+ group-delete) echo folder-remove-outline ;;
+ group-edit) echo folder-edit-outline ;;
+ group-empty-trash) echo trash-can-outline ;;
+ group-new) echo folder-plus-outline ;;
+ health) echo heart-pulse ;;
+ help-about) echo information-outline ;;
+ internet-web-browser) echo web ;;
+ keyboard-shortcuts) echo apple-keyboard-command ;;
+ key-enter) echo keyboard-variant ;;
+ message-close) echo close ;;
+ move-down) echo chevron-double-down ;;
+ move-up) echo chevron-double-up ;;
+ object-locked) echo lock-outline ;;
+ object-unlocked) echo lock-open-variant-outline ;;
+ paperclip) echo paperclip ;;
+ password-copy) echo key-arrow-right ;;
+ password-generate) echo dice-3-outline ;;
+ password-generator) echo dice-3-outline ;;
+ password-show-off) echo eye-off-outline ;;
+ password-show-on) echo eye-outline ;;
+ preferences-desktop-icons) echo emoticon-happy-outline ;;
+ preferences-other) echo file-document-edit-outline ;;
+ preferences-system-network-sharing) echo lan ;;
+ refresh) echo refresh ;;
+ reports) echo lightbulb-on-outline ;;
+ reports-exclude) echo lightbulb-off-outline ;;
+ security-high) echo shield-outline ;;
+ sort-alphabetical-ascending) echo sort-alphabetical-ascending ;;
+ sort-alphabetical-descending) echo sort-alphabetical-descending ;;
+ statistics) echo chart-line ;;
+ system-help) echo help ;;
+ system-search) echo magnify ;;
+ system-software-update) echo cloud-download-outline ;;
+ url-copy) echo earth-arrow-right ;;
+ user-guide) echo book-open-outline ;;
+ username-copy) echo account-arrow-right-outline ;;
+ utilities-terminal) echo console-line ;;
+ view-history) echo timer-sand-empty ;;
+ web) echo web ;;
+ esac
+}
+
+# Now do the actual work
+find $DSTDIR -type f -name "*.svg" | while read -r DST;do
+
+ # Find the icon name (base name without extender)
+ NAME=$(basename $DST .svg)
+
+ # Find the base name of the svg file for this icon
+ MAT=$(map $NAME)
+ if [[ -z $MAT ]];then
+ echo -e "${YELLOW}Warning: No MaterialDesign mapping for ${NAME}${NC}"
+ continue
+ fi
+
+ # So the source file is:
+ SRC="$MATERIAL/svg/$MAT.svg"
+ if [ ! -f "$SRC" ];then
+ echo -e "${RED}Error: Source for ${NAME} doesn't exist: ${SRC}${NC}"
+ continue
+ fi
+
+ # Replace the icon file with the source file
+ cp "$SRC" "$DST" || exit
+ echo "Copied icon for ${NAME}"
+
+done
diff --git a/utils/makedbicons.sh b/utils/makedbicons.sh
new file mode 100644
index 000000000..2e49b9110
--- /dev/null
+++ b/utils/makedbicons.sh
@@ -0,0 +1,123 @@
+#!/bin/bash
+# Assemble database icons from the icons8 collection
+# by Wolfram Rösler 2020-04-30
+
+NC='\033[0m'
+RED='\033[0;31m'
+YELLOW='\033[0;33m'
+
+# Check parameters
+if [[ $# != 1 ]];then
+ echo "Usage: $0 ICONS8"
+ echo "ICONS8 is the directory containing the Icons8 flat-color-icons repository"
+ echo "(git clone https://github.com/icons8/flat-color-icons)".
+ exit
+fi
+
+# Check source directory
+SRCDIR="$1"
+if [ ! -d "$SRCDIR" ];then
+ echo -e "${RED}icons8 directory doesn't exist: ${SRCDIR}${NC}"
+ exit 1
+fi
+
+# Check destination directory
+DSTDIR=share/icons/database
+if [ ! -d "$DSTDIR" ];then
+ echo -e "${RED}Please invoke this script from the KeePassXC source root directory.${NC}"
+ exit 1
+fi
+
+# Copy one icon from the icons8 collection.
+#
+# Usage: copy I8NAME Cnn
+# I8NAME is the file name (without extender and without
+# the "icon8-" prefix) in the icons8 directory.
+# Cnn is C plus the number of the database icon.
+#
+# Example: copy key C00
+copy() {
+ # The source file is:
+ SRC="${SRCDIR}/svg/${1}.svg"
+ if [ ! -f "$SRC" ];then
+ echo -e "${RED}Cannot find source icon for ${2} (${SRC})${NC}"
+ return
+ fi
+
+ # Copy the source file to the destination, keeping
+ # the source file's extension
+ DST="$DSTDIR/${2}.svg"
+ cp $SRC $DST
+ echo "Copied icon for ${1} to ${DST}"
+}
+
+# Now do the actual work
+#copy key C00_Password # Derivative work from key
+copy globe C01_Package_Network
+copy high_priority C02_MessageBox_Warning
+copy data_protection C03_Server # No exact match
+copy survey C04_Klipper
+copy businessman C05_Edu_Languages
+copy services C06_KCMDF
+#copy notepad C07_Kate # Provided by paomedia/small-n-flat
+copy external C08_Socket
+copy business_contact C09_Identity
+copy address_book C10_Kontact
+copy old_time_camera C11_Camera
+copy entering_heaven_alive C12_IRKickFlash # No exact match
+#copy keys-holder C13_KGPG_Key3 # Derivative work from key
+copy crystal_oscillator C14_Laptop_Power
+copy video_projector C15_Scanner
+copy bookmark C16_Mozilla_Firebird
+#copy cd C17_CDROM_Unmount # Provided by paomedia/small-n-flat
+#copy monitor C18_Display # Provided by paomedia/small-n-flat
+#copy feedback C19_Mail_Generic # Derivative work from feedback
+copy settings C20_Misc
+copy inspection C21_KOrganizer
+copy file C22_ASCII
+copy template C23_Icons
+copy flash_on C24_Connect_Established
+copy safe C25_Folder_Mail # No exact match
+#copy save C26_FileSave # Provided by paomedia/small-n-flat
+#copy cloud-storage C27_NFS_Unmount # Provided by paomedia/small-n-flat
+copy film_reel C28_QuickTime
+#copy C29_KGPG_Term # Derivative work from command_line and key
+#copy command_line C30_Konsole # Derivative work from command_line
+copy print C31_FilePrint
+copy org_unit C32_FSView
+copy cloth C33_Run
+copy support C34_Configure
+#copy vpn C35_KRFB # Derivative work from paomedia/small-n-flat
+#copy archive-folder C36_Ark # Derivative work from folder
+#copy percentage C37_KPercentage # Original work
+#copy windows-client C38_Samba_Unmount # Derivative work from paomedia/small-n-flat
+copy clock C39_History
+copy search C40_Mail_Find
+copy landscape C41_VectorGfx
+copy electronics C42_KCMMemory
+copy empty_trash C43_EditTrash
+#copy C44_KNotes # Provided by paomedia/small-n-flat
+#copy C45_Cancel # Original work
+#copy C46_Help # Original work
+copy package C47_KPackage
+copy folder C48_Folder
+copy opened_folder C49_Folder_Blue_Open
+copy data_encryption C50_Folder_Tar
+#copy unlock C51_Decrypted # Provided by paomedia/small-n-flat
+#copy lock C52_Encrypted # Provided by paomedia/small-n-flat
+#copy C53_Apply # Original work
+#copy pencil C54_Signature # Provided by paomedia/small-n-flat
+copy image_file C55_Thumbnail
+copy contacts C56_KAddressBook
+copy data_sheet C57_View_Text
+copy podium_with_speaker C58_KPGP # No exact match
+#copy hammer C59_Package_Development # Provided by paomedia/small-n-flat
+copy home C60_KFM_Home
+#copy C61_Services # Original work
+copy linux C62_Tux
+copy android_os C63_Feather
+#copy C64_Apple # Derivative work created from simple-icons apple.svg
+copy wikipedia C65_W
+#copy currency_exchange C66_Money # Provided by paomedia/small-n-flat
+copy diploma_1 C67_Certificate
+copy smartphone_tablet C68_Blackberry